@hotmeshio/long-tail 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/shared/form-validation/field-validator.js +4 -3
- package/build/shared/form-validation/x-lt-options.d.ts +7 -2
- package/build/shared/form-validation/x-lt-options.js +32 -10
- package/dashboard/dist/assets/{AdminDashboard-BVgjY4zN.js → AdminDashboard-Dnj4asuh.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BVgjY4zN.js.map → AdminDashboard-Dnj4asuh.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-ChL59YL5.js → AgentConfigPage-CS0CezLt.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-ChL59YL5.js.map → AgentConfigPage-CS0CezLt.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-IJfgCOIF.js → AgentDetailPage-CG0HO-MG.js} +2 -2
- package/dashboard/dist/assets/{AgentDetailPage-IJfgCOIF.js.map → AgentDetailPage-CG0HO-MG.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-C7PnPXz_.js → AgentsPage-cLZPda64.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-C7PnPXz_.js.map → AgentsPage-cLZPda64.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-C5f2rqHa.js → AvailableEscalationsPage-Dv5GE_NU.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-C5f2rqHa.js.map → AvailableEscalationsPage-Dv5GE_NU.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-CBf6bHLV.js → BotPicker-BgXaJfUZ.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-CBf6bHLV.js.map → BotPicker-BgXaJfUZ.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-CkxoPByA.js → BulkAssignModal-BUfV9aba.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-CkxoPByA.js.map → BulkAssignModal-BUfV9aba.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-D7USh3F0.js → CapabilitiesPage-CaiDhtmq.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-D7USh3F0.js.map → CapabilitiesPage-CaiDhtmq.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DfPpAIxa.js → CollapsibleSection-C6R7Lhao.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DfPpAIxa.js.map → CollapsibleSection-C6R7Lhao.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-DVL7WIcE.js → CountdownTimer-CFR2pPT9.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-DVL7WIcE.js.map → CountdownTimer-CFR2pPT9.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-BHZ5SKIu.js → CredentialsPage-9d2xZhfU.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-BHZ5SKIu.js.map → CredentialsPage-9d2xZhfU.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-wE8Hms6c.js → CronLabel-BfIYBjTD.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-wE8Hms6c.js.map → CronLabel-BfIYBjTD.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-B4VxKHpw.js → ElapsedCell-DV-35FDF.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-B4VxKHpw.js.map → ElapsedCell-DV-35FDF.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-CFbQDHOj.js → EntityTimelinePanel-mHaN_i7a.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-CFbQDHOj.js.map → EntityTimelinePanel-mHaN_i7a.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-YTgexl4f.js → EscalationListSchemaPage-Km5jnrIW.js} +2 -2
- package/dashboard/dist/assets/{EscalationListSchemaPage-YTgexl4f.js.map → EscalationListSchemaPage-Km5jnrIW.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-Sjk05eHP.js → EscalationSchemaPage-CAJGIBv2.js} +2 -2
- package/dashboard/dist/assets/{EscalationSchemaPage-Sjk05eHP.js.map → EscalationSchemaPage-CAJGIBv2.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-gHWPjUpZ.js → EscalationsOverview-nk9FXKmv.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-gHWPjUpZ.js.map → EscalationsOverview-nk9FXKmv.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-C9lHQ57t.js → EventTable-DNRaYzTn.js} +2 -2
- package/dashboard/dist/assets/{EventTable-C9lHQ57t.js.map → EventTable-DNRaYzTn.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BY--ANxv.js → FilterBar-CmRA_E6x.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BY--ANxv.js.map → FilterBar-CmRA_E6x.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-B-Oo5s-W.js → GraphInvokePage-HJfa82kv.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-B-Oo5s-W.js.map → GraphInvokePage-HJfa82kv.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BrcjKOaJ.js → HomePage-B2JDwmmh.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BrcjKOaJ.js.map → HomePage-B2JDwmmh.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-D5TQ4X_M.js → ListToolbar-CKuJ7HUH.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-D5TQ4X_M.js.map → ListToolbar-CKuJ7HUH.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-jlukVWQ7.js → McpOverview-CZCzbiRs.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-jlukVWQ7.js.map → McpOverview-CZCzbiRs.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-BWKbvJSd.js → McpQueryDetailPage-C081BBcH.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-BWKbvJSd.js.map → McpQueryDetailPage-C081BBcH.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-BH2Pon4M.js → McpQueryPage-841V8CXb.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-BH2Pon4M.js.map → McpQueryPage-841V8CXb.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-kUnq2QSO.js → McpRunDetailPage-DZjlgp5W.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-kUnq2QSO.js.map → McpRunDetailPage-DZjlgp5W.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-BTucgt64.js → McpRunsPage-DW0VVd46.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-BTucgt64.js.map → McpRunsPage-DW0VVd46.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-Cp8WL-ld.js → OperationsPage-DAw7z_Sh.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-Cp8WL-ld.js.map → OperationsPage-DAw7z_Sh.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-wHyeLWzX.js → OperatorDashboard-BAnQNuD6.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-wHyeLWzX.js.map → OperatorDashboard-BAnQNuD6.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-BXlTqLDK.js → PersonaDetailPage-XENbpbSr.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-BXlTqLDK.js.map → PersonaDetailPage-XENbpbSr.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-DlmdJ3Dm.js → PersonasPage-CoWH5Fj8.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-DlmdJ3Dm.js.map → PersonasPage-CoWH5Fj8.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-D88ocvmT.js → ProcessDetailPage-BDxOt-9L.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-D88ocvmT.js.map → ProcessDetailPage-BDxOt-9L.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DpXm-KtK.js → ProcessesListPage-BuNOmgig.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DpXm-KtK.js.map → ProcessesListPage-BuNOmgig.js.map} +1 -1
- package/dashboard/dist/assets/{RoleDetailPage-DE2Rj2QE.js → RoleDetailPage-DAzkfZ4T.js} +2 -2
- package/dashboard/dist/assets/{RoleDetailPage-DE2Rj2QE.js.map → RoleDetailPage-DAzkfZ4T.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-CZSvJlsz.js → RolesPage-C9jZL4aM.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-CZSvJlsz.js.map → RolesPage-C9jZL4aM.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-BawZcqAk.js → RunAsSelector-DswUl2-8.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-BawZcqAk.js.map → RunAsSelector-DswUl2-8.js.map} +1 -1
- package/dashboard/dist/assets/{ScanCodesPage-DSlpA9kK.js → ScanCodesPage-D_FDxJgT.js} +2 -2
- package/dashboard/dist/assets/{ScanCodesPage-DSlpA9kK.js.map → ScanCodesPage-D_FDxJgT.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BK4hisGD.js → ScanSchemeDetailPage-Cbkpob5g.js} +2 -2
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BK4hisGD.js.map → ScanSchemeDetailPage-Cbkpob5g.js.map} +1 -1
- package/dashboard/dist/assets/{ScanStationPage-D3QjajFD.js → ScanStationPage-BI_cDWVp.js} +2 -2
- package/dashboard/dist/assets/{ScanStationPage-D3QjajFD.js.map → ScanStationPage-BI_cDWVp.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-BfZwU2NR.js → StickyPagination-CfTEnlh5.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-BfZwU2NR.js.map → StickyPagination-CfTEnlh5.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-C7zIHX5D.js → StreamMessageDetail-oa7Bx0lB.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-C7zIHX5D.js.map → StreamMessageDetail-oa7Bx0lB.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-DNSo8AT8.js → SwimlaneTimeline-CO96ep4N.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-DNSo8AT8.js.map → SwimlaneTimeline-CO96ep4N.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BOJ8pwh3.js → TaskDetailPage-BiO2eFQ0.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BOJ8pwh3.js.map → TaskDetailPage-BiO2eFQ0.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-C4CYqZf8.js → TasksListPage-DQ4WJfJo.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-C4CYqZf8.js.map → TasksListPage-DQ4WJfJo.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-JRPi9IEd.js → TimeAgo-ZwSSU_EG.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-JRPi9IEd.js.map → TimeAgo-ZwSSU_EG.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BVYyU-nl.js → TimestampCell-BHmJ7das.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BVYyU-nl.js.map → TimestampCell-BHmJ7das.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-IGrd44Au.js → ToolTestPanel-DARNx6e0.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-IGrd44Au.js.map → ToolTestPanel-DARNx6e0.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-DhianNey.js → TopicDetailPage-BYcF0lO8.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-DhianNey.js.map → TopicDetailPage-BYcF0lO8.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-Glhqz_Nv.js → TopicsPage-CG-IZfpq.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-Glhqz_Nv.js.map → TopicsPage-CG-IZfpq.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-CD9OqhNI.js → UserName-BGn4sSx1.js} +2 -2
- package/dashboard/dist/assets/{UserName-CD9OqhNI.js.map → UserName-BGn4sSx1.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-8Q2438Ry.js → WorkflowExecutionPage-Dt_lskas.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-8Q2438Ry.js.map → WorkflowExecutionPage-Dt_lskas.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-CkAoYT86.js → WorkflowsDashboard-Dl3carpF.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-CkAoYT86.js.map → WorkflowsDashboard-Dl3carpF.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Zh_EidMp.js → WorkflowsOverview-6CplKLvQ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Zh_EidMp.js.map → WorkflowsOverview-6CplKLvQ.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BKJbFT8C.js → YamlWorkflowDetailPage-CZf6zZ4Q.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BKJbFT8C.js.map → YamlWorkflowDetailPage-CZf6zZ4Q.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-DK1z6iFt.js → YamlWorkflowsPage-DRQ_3CZG.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-DK1z6iFt.js.map → YamlWorkflowsPage-DRQ_3CZG.js.map} +1 -1
- package/dashboard/dist/assets/{agents-BEASyYpg.js → agents-BvtecCN5.js} +2 -2
- package/dashboard/dist/assets/{agents-BEASyYpg.js.map → agents-BvtecCN5.js.map} +1 -1
- package/dashboard/dist/assets/{bots-CaXqSHat.js → bots-CSmIqXtL.js} +2 -2
- package/dashboard/dist/assets/{bots-CaXqSHat.js.map → bots-CSmIqXtL.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-Cijq-qev.js → capabilities-xMqvjbWI.js} +2 -2
- package/dashboard/dist/assets/{capabilities-Cijq-qev.js.map → capabilities-xMqvjbWI.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-HGuRC7AW.js → controlplane-Bi-tz-Gr.js} +2 -2
- package/dashboard/dist/assets/{controlplane-HGuRC7AW.js.map → controlplane-Bi-tz-Gr.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-BLVz8XCP.js → escalation-columns-DSalfPHI.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-BLVz8XCP.js.map → escalation-columns-DSalfPHI.js.map} +1 -1
- package/dashboard/dist/assets/{index-t1JXcmBG.js → index-BIK4b7Ei.js} +2 -2
- package/dashboard/dist/assets/{index-t1JXcmBG.js.map → index-BIK4b7Ei.js.map} +1 -1
- package/dashboard/dist/assets/{index-Xi3LO4Ye.js → index-BWyPrDYG.js} +2 -2
- package/dashboard/dist/assets/{index-Xi3LO4Ye.js.map → index-BWyPrDYG.js.map} +1 -1
- package/dashboard/dist/assets/{index-CLQ0HBHR.js → index-BYukuL1u.js} +2 -2
- package/dashboard/dist/assets/{index-CLQ0HBHR.js.map → index-BYukuL1u.js.map} +1 -1
- package/dashboard/dist/assets/index-Bf9cfGX_.js +3 -0
- package/dashboard/dist/assets/index-Bf9cfGX_.js.map +1 -0
- package/dashboard/dist/assets/{index-IkgBE7e_.js → index-BjxQVsbg.js} +2 -2
- package/dashboard/dist/assets/{index-IkgBE7e_.js.map → index-BjxQVsbg.js.map} +1 -1
- package/dashboard/dist/assets/{index-YMd3ZiPd.js → index-C8pPqnJb.js} +2 -2
- package/dashboard/dist/assets/{index-YMd3ZiPd.js.map → index-C8pPqnJb.js.map} +1 -1
- package/dashboard/dist/assets/{index-tCDjx1kF.js → index-CEsGT3c9.js} +2 -2
- package/dashboard/dist/assets/{index-tCDjx1kF.js.map → index-CEsGT3c9.js.map} +1 -1
- package/dashboard/dist/assets/{index-Cg0vCZng.js → index-DATqc8Gv.js} +2 -2
- package/dashboard/dist/assets/{index-Cg0vCZng.js.map → index-DATqc8Gv.js.map} +1 -1
- package/dashboard/dist/assets/{index-D2OU2MJb.js → index-cX2H_U7R.js} +2 -2
- package/dashboard/dist/assets/{index-D2OU2MJb.js.map → index-cX2H_U7R.js.map} +1 -1
- package/dashboard/dist/assets/{index-CEIp6WWg.js → index-gHDAcM64.js} +2 -2
- package/dashboard/dist/assets/{index-CEIp6WWg.js.map → index-gHDAcM64.js.map} +1 -1
- package/dashboard/dist/assets/{index-CgXVDPW-.js → index-sbfCx2CF.js} +3 -3
- package/dashboard/dist/assets/{index-CgXVDPW-.js.map → index-sbfCx2CF.js.map} +1 -1
- package/dashboard/dist/assets/{index-BJDAXUzO.js → index-shnwALdy.js} +2 -2
- package/dashboard/dist/assets/{index-BJDAXUzO.js.map → index-shnwALdy.js.map} +1 -1
- package/dashboard/dist/assets/{index-ClY0ihQ5.js → index-uqT6ovVQ.js} +2 -2
- package/dashboard/dist/assets/{index-ClY0ihQ5.js.map → index-uqT6ovVQ.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DpaUJtVW.js → knowledge-DbDvUbq7.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DpaUJtVW.js.map → knowledge-DbDvUbq7.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BkkLq6OE.js → mcp-I2OmwD8P.js} +2 -2
- package/dashboard/dist/assets/{mcp-BkkLq6OE.js.map → mcp-I2OmwD8P.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-DeXu3La5.js → mcp-query-DwTp77HP.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-DeXu3La5.js.map → mcp-query-DwTp77HP.js.map} +1 -1
- package/dashboard/dist/assets/{personas-BRbKVVko.js → personas-DDr8gQGC.js} +2 -2
- package/dashboard/dist/assets/{personas-BRbKVVko.js.map → personas-DDr8gQGC.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-B7xo92sK.js → pipelines-uptnM5Qj.js} +2 -2
- package/dashboard/dist/assets/{pipelines-B7xo92sK.js.map → pipelines-uptnM5Qj.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BGyqM1Ho.js → tasks-Em0f5Rsk.js} +2 -2
- package/dashboard/dist/assets/{tasks-BGyqM1Ho.js.map → tasks-Em0f5Rsk.js.map} +1 -1
- package/dashboard/dist/assets/{topics-I81rKc75.js → topics-B81zAt9U.js} +2 -2
- package/dashboard/dist/assets/{topics-I81rKc75.js.map → topics-B81zAt9U.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-CjV3uNxt.js → useEventHooks-B_Bqqzlo.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CjV3uNxt.js.map → useEventHooks-B_Bqqzlo.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-B-HMdRka.js → useNamespace-CZfue_oE.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-B-HMdRka.js.map → useNamespace-CZfue_oE.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-CNsAlsgz.js → useYamlActivityEvents-DjQ7rsOC.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CNsAlsgz.js.map → useYamlActivityEvents-DjQ7rsOC.js.map} +1 -1
- package/dashboard/dist/assets/{users-DiTqBepm.js → users-CwUL9YJT.js} +2 -2
- package/dashboard/dist/assets/{users-DiTqBepm.js.map → users-CwUL9YJT.js.map} +1 -1
- package/dashboard/dist/assets/{workflows-TA0p_3B8.js → workflows-gSjgU0KB.js} +2 -2
- package/dashboard/dist/assets/{workflows-TA0p_3B8.js.map → workflows-gSjgU0KB.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DN9-DBnQ.js → yaml-workflows-a_7IO_a6.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DN9-DBnQ.js.map → yaml-workflows-a_7IO_a6.js.map} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/docs/hitl/lookups.md +11 -0
- package/docs/hitl/x-lt-validation.md +2 -1
- package/docs/hitl-guide.md +1 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/index-CK_ohh6Q.js +0 -3
- package/dashboard/dist/assets/index-CK_ohh6Q.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-ClY0ihQ5.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-uqT6ovVQ.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as a,b as s,c as l}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=knowledge-
|
|
1
|
+
import{u as a,b as s,c as l}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-sbfCx2CF.js";function g(){return a({queryKey:["knowledge","domains"],queryFn:()=>u("/knowledge/domains")})}function f(n,e){var t;const r=new URLSearchParams;r.set("domain",n),(t=e==null?void 0:e.tags)!=null&&t.length&&r.set("tags",e.tags.join(",")),e!=null&&e.search&&r.set("search",e.search),(e==null?void 0:e.limit)!=null&&r.set("limit",String(e.limit)),(e==null?void 0:e.offset)!=null&&r.set("offset",String(e.offset));const i=r.toString();return a({queryKey:["knowledge",n,e==null?void 0:e.tags,e==null?void 0:e.search,e==null?void 0:e.limit,e==null?void 0:e.offset],queryFn:()=>u(`/knowledge/entries?${i}`),enabled:!!n})}function y(n,e){const r=new URLSearchParams;n&&r.set("domain",n),e&&r.set("key",e);const i=r.toString();return a({queryKey:["knowledge",n,e],queryFn:()=>u(`/knowledge/entry?${i}`),enabled:!!n&&!!e})}function o(n,e,r){const i=new URLSearchParams;return n&&i.set("domain",n),e&&i.set("key",e),a({queryKey:["knowledge",n,e,"versions"],queryFn:()=>u(`/knowledge/entry/versions?${i}`),enabled:!!n&&!!e&&r})}function w(n,e,r){const i=new URLSearchParams;return n&&i.set("domain",n),e&&i.set("key",e),r!=null&&i.set("version",String(r)),a({queryKey:["knowledge",n,e,"version",r],queryFn:()=>u(`/knowledge/entry?${i}`),enabled:!!n&&!!e&&r!=null,staleTime:1/0})}function m(){const n=s();return l({mutationFn:e=>u("/knowledge/entry",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function q(){const n=s();return l({mutationFn:e=>u("/knowledge/field",{method:"PUT",body:JSON.stringify(e)}),onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function S(){const n=s();return l({mutationFn:({domain:e,key:r,path:i})=>{const t=new URLSearchParams({domain:e,key:r,path:i});return u(`/knowledge/field?${t}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}function h(){const n=s();return l({mutationFn:({domain:e,key:r})=>{const i=new URLSearchParams({domain:e,key:r});return u(`/knowledge/entry?${i}`,{method:"DELETE"})},onSuccess:()=>{n.invalidateQueries({queryKey:["knowledge"]})}})}export{h as a,m as b,q as c,S as d,o as e,w as f,g,f as h,y as u};
|
|
2
|
+
//# sourceMappingURL=knowledge-DbDvUbq7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-
|
|
1
|
+
{"version":3,"file":"knowledge-DbDvUbq7.js","sources":["../../src/api/knowledge.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface KnowledgeDomain {\n domain: string;\n count: number;\n latest: string;\n}\n\nexport interface KnowledgeEntry {\n id: string;\n domain: string;\n key: string;\n data: Record<string, unknown>;\n tags: string[];\n current_version: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface KnowledgeVersionMeta {\n version: number;\n change_summary: string | null;\n created_at: string;\n is_current: boolean;\n}\n\nexport interface KnowledgeSnapshot {\n domain: string;\n key: string;\n version: number;\n data: Record<string, unknown>;\n tags: string[];\n created_at: string;\n}\n\nexport interface ListDomainsResponse {\n domains: KnowledgeDomain[];\n}\n\nexport interface ListEntriesResponse {\n entries: KnowledgeEntry[];\n total: number;\n}\n\nexport function useListDomains() {\n return useQuery<ListDomainsResponse>({\n queryKey: ['knowledge', 'domains'],\n queryFn: () => apiFetch('/knowledge/domains'),\n });\n}\n\nexport function useListKnowledge(\n domain: string,\n opts?: { tags?: string[]; search?: string; limit?: number; offset?: number },\n) {\n const params = new URLSearchParams();\n params.set('domain', domain);\n if (opts?.tags?.length) params.set('tags', opts.tags.join(','));\n if (opts?.search) params.set('search', opts.search);\n if (opts?.limit != null) params.set('limit', String(opts.limit));\n if (opts?.offset != null) params.set('offset', String(opts.offset));\n const qs = params.toString();\n\n return useQuery<ListEntriesResponse>({\n queryKey: ['knowledge', domain, opts?.tags, opts?.search, opts?.limit, opts?.offset],\n queryFn: () => apiFetch(`/knowledge/entries?${qs}`),\n enabled: !!domain,\n });\n}\n\nexport function useGetKnowledge(domain: string, key: string | null) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n const qs = params.toString();\n\n return useQuery<KnowledgeEntry & { found?: boolean }>({\n queryKey: ['knowledge', domain, key],\n queryFn: () => apiFetch(`/knowledge/entry?${qs}`),\n enabled: !!domain && !!key,\n });\n}\n\n/** The entry's edition lineage — every data-changing save mints one. */\nexport function useKnowledgeVersions(domain: string, key: string | null, enabled: boolean) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n return useQuery<{ domain: string; key: string; versions: KnowledgeVersionMeta[] }>({\n queryKey: ['knowledge', domain, key, 'versions'],\n queryFn: () => apiFetch(`/knowledge/entry/versions?${params}`),\n enabled: !!domain && !!key && enabled,\n });\n}\n\n/** One immutable edition — never goes stale. */\nexport function useGetKnowledgeVersion(domain: string, key: string | null, version: number | null) {\n const params = new URLSearchParams();\n if (domain) params.set('domain', domain);\n if (key) params.set('key', key);\n if (version != null) params.set('version', String(version));\n return useQuery<KnowledgeSnapshot>({\n queryKey: ['knowledge', domain, key, 'version', version],\n queryFn: () => apiFetch(`/knowledge/entry?${params}`),\n enabled: !!domain && !!key && version != null,\n staleTime: Infinity,\n });\n}\n\nexport function useStoreKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; data: Record<string, unknown>; tags?: string[]; replace?: boolean }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/entry', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useSetKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { id: string; domain: string; key: string; created: boolean; updated_at: string },\n Error,\n { domain: string; key: string; path: string; value: unknown; tags?: string[] }\n >({\n mutationFn: (body) =>\n apiFetch('/knowledge/field', {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useRemoveKnowledgeField() {\n const queryClient = useQueryClient();\n return useMutation<\n { removed: boolean },\n Error,\n { domain: string; key: string; path: string }\n >({\n mutationFn: ({ domain, key, path }) => {\n const params = new URLSearchParams({ domain, key, path });\n return apiFetch(`/knowledge/field?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n\nexport function useDeleteKnowledge() {\n const queryClient = useQueryClient();\n return useMutation<\n { deleted: boolean; domain: string; key: string },\n Error,\n { domain: string; key: string }\n >({\n mutationFn: ({ domain, key }) => {\n const params = new URLSearchParams({ domain, key });\n return apiFetch(`/knowledge/entry?${params}`, { method: 'DELETE' });\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['knowledge'] });\n },\n });\n}\n"],"names":["useListDomains","useQuery","apiFetch","useListKnowledge","domain","opts","params","_a","qs","useGetKnowledge","key","useKnowledgeVersions","enabled","useGetKnowledgeVersion","version","useStoreKnowledge","queryClient","useQueryClient","useMutation","body","useSetKnowledgeField","useRemoveKnowledgeField","path","useDeleteKnowledge"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as o,b as u,c as n}from"./vendor-query-RUZdMvN6.js";import{g as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=mcp-
|
|
1
|
+
import{u as o,b as u,c as n}from"./vendor-query-RUZdMvN6.js";import{g as s}from"./index-sbfCx2CF.js";function m(e={}){const r=new URLSearchParams;e.status&&r.set("status",e.status),e.search&&r.set("search",e.search),e.tags&&r.set("tags",e.tags);const t=r.toString();return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers${t?`?${t}`:""}`)})}function y(e){return o({queryKey:["mcpServers",e],queryFn:()=>s(`/mcp/servers/${e}`),enabled:!!e})}function p(){const e=u();return n({mutationFn:r=>s("/mcp/servers",{method:"POST",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function S(){const e=u();return n({mutationFn:({id:r,...t})=>s(`/mcp/servers/${r}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function v(){return n({mutationFn:e=>s("/mcp/servers/test-connection",{method:"POST",body:JSON.stringify(e)})})}function d(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function q(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/connect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function f(){const e=u();return n({mutationFn:r=>s(`/mcp/servers/${r}/disconnect`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["mcpServers"]})}})}function h(){return n({mutationFn:({serverId:e,toolName:r,arguments:t,execute_as:c})=>s(`/mcp/servers/${e}/tools/${r}/call`,{method:"POST",body:JSON.stringify({arguments:t,...c?{execute_as:c}:{}})})})}export{q as a,f as b,d as c,v as d,y as e,p as f,S as g,h,m as u};
|
|
2
|
+
//# sourceMappingURL=mcp-I2OmwD8P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-
|
|
1
|
+
{"version":3,"file":"mcp-I2OmwD8P.js","sources":["../../src/api/mcp.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { McpServerRecord, McpToolManifest } from './types';\n\ninterface McpServerListResponse {\n servers: McpServerRecord[];\n total: number;\n}\n\ninterface McpServerFilters {\n status?: string;\n search?: string;\n tags?: string;\n}\n\nexport function useMcpServers(filters: McpServerFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.tags) params.set('tags', filters.tags);\n const qs = params.toString();\n\n return useQuery<McpServerListResponse>({\n queryKey: ['mcpServers', filters],\n queryFn: () => apiFetch(`/mcp/servers${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useMcpServer(id: string) {\n return useQuery<McpServerRecord>({\n queryKey: ['mcpServers', id],\n queryFn: () => apiFetch(`/mcp/servers/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n transport_type: string;\n transport_config: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch('/mcp/servers', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useUpdateMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n name?: string;\n description?: string;\n transport_type?: string;\n transport_config?: Record<string, unknown>;\n auto_connect?: boolean;\n metadata?: Record<string, unknown>;\n tags?: string[];\n compile_hints?: string;\n credential_providers?: string[];\n }) =>\n apiFetch(`/mcp/servers/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport interface TestConnectionResult {\n success: boolean;\n tools: McpToolManifest[];\n error?: string;\n}\n\nexport function useTestConnection() {\n return useMutation<TestConnectionResult, Error, { transport_type: string; transport_config: Record<string, unknown> }>({\n mutationFn: (data) =>\n apiFetch('/mcp/servers/test-connection', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useConnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/connect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useDisconnectMcpServer() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/mcp/servers/${id}/disconnect`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['mcpServers'] });\n },\n });\n}\n\nexport function useMcpTools(serverId: string) {\n return useQuery<{ tools: McpToolManifest[] }>({\n queryKey: ['mcpTools', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/tools`),\n enabled: !!serverId,\n });\n}\n\nexport interface CredentialStatus {\n required: string[];\n registered: string[];\n missing: string[];\n}\n\nexport function useCredentialStatus(serverId: string) {\n return useQuery<CredentialStatus>({\n queryKey: ['mcpCredentialStatus', serverId],\n queryFn: () => apiFetch(`/mcp/servers/${serverId}/credential-status`),\n enabled: !!serverId,\n staleTime: 30_000,\n });\n}\n\nexport function useCallMcpTool() {\n return useMutation({\n mutationFn: ({\n serverId,\n toolName,\n arguments: args,\n execute_as,\n }: {\n serverId: string;\n toolName: string;\n arguments: Record<string, unknown>;\n execute_as?: string;\n }) =>\n apiFetch(`/mcp/servers/${serverId}/tools/${toolName}/call`, {\n method: 'POST',\n body: JSON.stringify({ arguments: args, ...(execute_as ? { execute_as } : {}) }),\n }),\n });\n}\n"],"names":["useMcpServers","filters","params","qs","useQuery","apiFetch","useMcpServer","id","useCreateMcpServer","queryClient","useQueryClient","useMutation","data","useUpdateMcpServer","useTestConnection","useDeleteMcpServer","useConnectMcpServer","useDisconnectMcpServer","useCallMcpTool","serverId","toolName","args","execute_as"],"mappings":"qGAeO,SAASA,EAAcC,EAA4B,GAAI,CAC5D,MAAMC,EAAS,IAAI,gBACfD,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EACjD,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAAgC,CACrC,SAAU,CAAC,aAAcH,CAAO,EAChC,QAAS,IAAMI,EAAS,eAAeF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CAC5D,CACH,CAEO,SAASG,EAAaC,EAAY,CACvC,OAAOH,EAA0B,CAC/B,SAAU,CAAC,aAAcG,CAAE,EAC3B,QAAS,IAAMF,EAAS,gBAAgBE,CAAE,EAAE,EAC5C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXP,EAAS,eAAgB,CACvB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASI,GAAqB,CACnC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAaHP,EAAS,gBAAgBE,CAAE,GAAI,CAC7B,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAQO,SAASK,GAAoB,CAClC,OAAOH,EAAgH,CACrH,WAAaC,GACXP,EAAS,+BAAgC,CACvC,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,CAAA,CACJ,CACH,CAEO,SAASG,GAAqB,CACnC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,GAAI,CAAE,OAAQ,SAAU,EACrD,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASO,GAAsB,CACpC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,WAAY,CAAE,OAAQ,OAAQ,EAC3D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAEO,SAASQ,GAAyB,CACvC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,gBAAgBE,CAAE,cAAe,CAAE,OAAQ,OAAQ,EAC9D,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,YAAY,EAAG,CAC5D,CAAA,CACD,CACH,CAyBO,SAASS,GAAiB,CAC/B,OAAOP,EAAY,CACjB,WAAY,CAAC,CACX,SAAAQ,EACA,SAAAC,EACA,UAAWC,EACX,WAAAC,CAAA,IAOAjB,EAAS,gBAAgBc,CAAQ,UAAUC,CAAQ,QAAS,CAC1D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAChF,CAAA,CACJ,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as r,b as i,c as n}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=mcp-query-
|
|
1
|
+
import{u as r,b as i,c as n}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-sbfCx2CF.js";const s=["mcpQueryJobs"];function o(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1,direct:!0})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function a(){const e=i();return n({mutationFn:t=>u("/insight/mcp-query",{method:"POST",body:JSON.stringify({...t,wait:!1})}),onSuccess:()=>{e.invalidateQueries({queryKey:s,refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function m(e={}){const t=new URLSearchParams;return t.set("entity",e.entity||"mcpQuery,mcpTriage,mcpWorkflowPlanner"),e.limit&&t.set("limit",String(e.limit)),e.offset!==void 0&&t.set("offset",String(e.offset)),e.search&&t.set("search",e.search),e.status&&t.set("status",e.status),t.set("sort_by","created_at"),t.set("order","desc"),r({queryKey:[...s,e],queryFn:()=>u(`/workflow-states/jobs?${t}`)})}function l(e){return r({queryKey:["mcpQueryExecution",e],queryFn:()=>u(`/workflow-states/${e}/execution`),enabled:!!e})}function p(e){return r({queryKey:["mcpQueryResult",e],queryFn:()=>u(`/workflows/${e}/result`),enabled:!!e,retry:2})}function f(e){return r({queryKey:["mcpQueryDescribe",e.prompt],queryFn:()=>u("/insight/mcp-query/describe",{method:"POST",body:JSON.stringify({prompt:e.prompt,result_title:e.resultTitle,result_summary:e.resultSummary})}),enabled:!!e.prompt,staleTime:1/0,gcTime:30*6e4})}function b(e){return r({queryKey:["yamlWorkflowForSource",e],queryFn:()=>u(`/yaml-workflows?source_workflow_id=${e}&limit=5`),enabled:!!e})}export{o as a,a as b,l as c,p as d,b as e,f,m as u};
|
|
2
|
+
//# sourceMappingURL=mcp-query-DwTp77HP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-query-
|
|
1
|
+
{"version":3,"file":"mcp-query-DwTp77HP.js","sources":["../../src/api/mcp-query.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport interface McpQuerySubmitResult {\n workflow_id: string;\n status: string;\n prompt: string;\n}\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const MCP_QUERY_JOBS_KEY = ['mcpQueryJobs'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/**\n * Submit a DIRECT mcpQuery (bypasses router — always dynamic MCP orchestration).\n * Used by the MCP Queries list page where the user explicitly wants a new dynamic seed run.\n */\nexport function useSubmitMcpQuery() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false, direct: true }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * Submit via mcpQueryRouter (checks for deterministic match first).\n * Used by the Verify panel (Panel 6) to test end-to-end routing.\n */\nexport function useSubmitMcpQueryRouted() {\n const queryClient = useQueryClient();\n return useMutation<McpQuerySubmitResult, Error, { prompt: string; tags?: string[] }>({\n mutationFn: (params) =>\n apiFetch<McpQuerySubmitResult>('/insight/mcp-query', {\n method: 'POST',\n body: JSON.stringify({ ...params, wait: false }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: MCP_QUERY_JOBS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\n/**\n * List mcpQuery workflow executions (system-level durable workflows).\n * Filters to entity=mcpQuery on the long-tail-system task queue.\n */\nexport function useMcpQueryJobs(filters: {\n limit?: number;\n offset?: number;\n search?: string;\n status?: string;\n entity?: string;\n} = {}) {\n const params = new URLSearchParams();\n params.set('entity', filters.entity || 'mcpQuery,mcpTriage,mcpWorkflowPlanner');\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n params.set('sort_by', 'created_at');\n params.set('order', 'desc');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: [...MCP_QUERY_JOBS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-states/jobs?${params}`),\n });\n}\n\n/**\n * Get execution timeline for an mcpQuery workflow.\n */\nexport function useMcpQueryExecution(workflowId: string | undefined) {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpQueryExecution', workflowId],\n queryFn: () => apiFetch(`/workflow-states/${workflowId}/execution`),\n enabled: !!workflowId,\n });\n}\n\n/**\n * Get the result data from a completed mcpQuery workflow.\n */\nexport function useMcpQueryResult(workflowId: string | undefined) {\n return useQuery<{ workflowId: string; result: { type: string; data: Record<string, unknown> } }>({\n queryKey: ['mcpQueryResult', workflowId],\n queryFn: () => apiFetch(`/workflows/${workflowId}/result`),\n enabled: !!workflowId,\n retry: 2,\n });\n}\n\n/**\n * Generate a workflow description and tags from the original prompt + result.\n * Uses an LLM to produce a concise, catalog-style description.\n */\nexport function useDescribeMcpQuery(params: {\n prompt: string | undefined;\n resultTitle: string | undefined;\n resultSummary: string | undefined;\n}) {\n return useQuery<{ tool_name?: string; description: string; tags: string[] }>({\n queryKey: ['mcpQueryDescribe', params.prompt],\n queryFn: () =>\n apiFetch<{ tool_name?: string; description: string; tags: string[] }>('/insight/mcp-query/describe', {\n method: 'POST',\n body: JSON.stringify({\n prompt: params.prompt,\n result_title: params.resultTitle,\n result_summary: params.resultSummary,\n }),\n }),\n enabled: !!params.prompt,\n staleTime: Infinity,\n gcTime: 30 * 60_000,\n });\n}\n\n/**\n * Find a YAML workflow compiled from a specific mcpQuery execution.\n */\nexport function useYamlWorkflowForSource(sourceWorkflowId: string | undefined) {\n return useQuery<{ workflows: Array<{\n id: string; name: string; status: string; graph_topic: string;\n description?: string; tags?: string[]; app_id?: string;\n input_schema?: Record<string, unknown>;\n activity_manifest?: Array<{\n activity_id: string; title: string; type: string;\n tool_source: string; mcp_tool_name?: string;\n }>;\n original_prompt?: string;\n }> }>({\n queryKey: ['yamlWorkflowForSource', sourceWorkflowId],\n queryFn: () => apiFetch(`/yaml-workflows?source_workflow_id=${sourceWorkflowId}&limit=5`),\n enabled: !!sourceWorkflowId,\n });\n}\n"],"names":["MCP_QUERY_JOBS_KEY","useSubmitMcpQuery","queryClient","useQueryClient","useMutation","params","apiFetch","useSubmitMcpQueryRouted","useMcpQueryJobs","filters","useQuery","useMcpQueryExecution","workflowId","useMcpQueryResult","useDescribeMcpQuery","useYamlWorkflowForSource","sourceWorkflowId"],"mappings":"qGAcO,MAAMA,EAAqB,CAAC,cAAc,EAQ1C,SAASC,GAAoB,CAClC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,OAAQ,EAAA,CAAM,CAAA,CAC9D,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASK,GAA0B,CACxC,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAA8E,CACnF,WAAaC,GACXC,EAA+B,qBAAsB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,GAAGD,EAAQ,KAAM,GAAO,CAAA,CAChD,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAUF,EAAoB,YAAa,MAAO,EAClFE,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,YAAa,MAAO,CAC1E,CAAA,CACD,CACH,CAMO,SAASM,EAAgBC,EAM5B,GAAI,CACN,MAAMJ,EAAS,IAAI,gBACnB,OAAAA,EAAO,IAAI,SAAUI,EAAQ,QAAU,uCAAuC,EAC1EA,EAAQ,OAAOJ,EAAO,IAAI,QAAS,OAAOI,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWJ,EAAO,IAAI,SAAU,OAAOI,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACnDA,EAAQ,QAAQJ,EAAO,IAAI,SAAUI,EAAQ,MAAM,EACvDJ,EAAO,IAAI,UAAW,YAAY,EAClCA,EAAO,IAAI,QAAS,MAAM,EAEnBK,EAA2C,CAChD,SAAU,CAAC,GAAGV,EAAoBS,CAAO,EACzC,QAAS,IAAMH,EAAS,yBAAyBD,CAAM,EAAE,CAAA,CAC1D,CACH,CAKO,SAASM,EAAqBC,EAAgC,CACnE,OAAOF,EAA4B,CACjC,SAAU,CAAC,oBAAqBE,CAAU,EAC1C,QAAS,IAAMN,EAAS,oBAAoBM,CAAU,YAAY,EAClE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAKO,SAASC,EAAkBD,EAAgC,CAChE,OAAOF,EAA0F,CAC/F,SAAU,CAAC,iBAAkBE,CAAU,EACvC,QAAS,IAAMN,EAAS,cAAcM,CAAU,SAAS,EACzD,QAAS,CAAC,CAACA,EACX,MAAO,CAAA,CACR,CACH,CAMO,SAASE,EAAoBT,EAIjC,CACD,OAAOK,EAAsE,CAC3E,SAAU,CAAC,mBAAoBL,EAAO,MAAM,EAC5C,QAAS,IACPC,EAAsE,8BAA+B,CACnG,OAAQ,OACR,KAAM,KAAK,UAAU,CACnB,OAAQD,EAAO,OACf,aAAcA,EAAO,YACrB,eAAgBA,EAAO,aAAA,CACxB,CAAA,CACF,EACH,QAAS,CAAC,CAACA,EAAO,OAClB,UAAW,IACX,OAAQ,GAAK,GAAA,CACd,CACH,CAKO,SAASU,EAAyBC,EAAsC,CAC7E,OAAON,EASD,CACJ,SAAU,CAAC,wBAAyBM,CAAgB,EACpD,QAAS,IAAMV,EAAS,sCAAsCU,CAAgB,UAAU,EACxF,QAAS,CAAC,CAACA,CAAA,CACZ,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t,b as o,c as u}from"./vendor-query-RUZdMvN6.js";import{g as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=personas-
|
|
1
|
+
import{u as t,b as o,c as u}from"./vendor-query-RUZdMvN6.js";import{g as s}from"./index-sbfCx2CF.js";function c(){return t({queryKey:["personas"],queryFn:()=>s("/personas")})}function d(e){return t({queryKey:["personas",e],queryFn:()=>s(`/personas/${encodeURIComponent(e)}`),enabled:!!e})}function p(){const e=o();return u({mutationFn:n=>s("/personas",{method:"POST",body:JSON.stringify(n)}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]})}})}function l(){const e=o();return u({mutationFn:({key:n,...r})=>s(`/personas/${encodeURIComponent(n)}`,{method:"PATCH",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]})}})}function m(){const e=o();return u({mutationFn:n=>s(`/personas/${encodeURIComponent(n)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]}),e.invalidateQueries({queryKey:["users"]})}})}function q(){const e=o();return u({mutationFn:({key:n,role:r,relationship:a})=>s(`/personas/${encodeURIComponent(n)}/roles/${encodeURIComponent(r)}`,{method:"PUT",body:JSON.stringify({relationship:a})}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]}),e.invalidateQueries({queryKey:["users"]}),e.invalidateQueries({queryKey:["roles"]})}})}function C(){const e=o();return u({mutationFn:({key:n,role:r})=>s(`/personas/${encodeURIComponent(n)}/roles/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]}),e.invalidateQueries({queryKey:["users"]})}})}function f(){const e=o();return u({mutationFn:({userId:n,key:r})=>s(`/users/${n}/personas`,{method:"POST",body:JSON.stringify({persona:r})}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]}),e.invalidateQueries({queryKey:["users"]})}})}function K(){const e=o();return u({mutationFn:({userId:n,key:r})=>s(`/users/${n}/personas/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["personas"]}),e.invalidateQueries({queryKey:["users"]})}})}function Q(e){return t({queryKey:["users",e,"personas"],queryFn:()=>s(`/users/${e}/personas`),enabled:!!e})}export{Q as a,f as b,K as c,p as d,d as e,l as f,m as g,q as h,C as i,c as u};
|
|
2
|
+
//# sourceMappingURL=personas-DDr8gQGC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personas-
|
|
1
|
+
{"version":3,"file":"personas-DDr8gQGC.js","sources":["../../src/api/personas.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type {\n LTPersonaRecord,\n LTPersonaDetail,\n LTUserPersona,\n LTComposedRoleScope,\n} from './types/personas';\n\nexport function usePersonas() {\n return useQuery<{ personas: LTPersonaRecord[] }>({\n queryKey: ['personas'],\n queryFn: () => apiFetch('/personas'),\n });\n}\n\nexport function usePersona(key: string) {\n return useQuery<LTPersonaDetail>({\n queryKey: ['personas', key],\n queryFn: () => apiFetch(`/personas/${encodeURIComponent(key)}`),\n enabled: !!key,\n });\n}\n\nexport function useCreatePersona() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: { key: string; title?: string; description?: string }) =>\n apiFetch('/personas', { method: 'POST', body: JSON.stringify(data) }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n },\n });\n}\n\nexport function useUpdatePersona() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ key, ...data }: { key: string; title?: string | null; description?: string | null }) =>\n apiFetch(`/personas/${encodeURIComponent(key)}`, { method: 'PATCH', body: JSON.stringify(data) }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n },\n });\n}\n\nexport function useDeletePersona() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (key: string) =>\n apiFetch(`/personas/${encodeURIComponent(key)}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n // Deleting a persona removes the memberships it sustained.\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useLinkPersonaRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ key, role, relationship }: { key: string; role: string; relationship: string }) =>\n apiFetch(`/personas/${encodeURIComponent(key)}/roles/${encodeURIComponent(role)}`, {\n method: 'PUT',\n body: JSON.stringify({ relationship }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n queryClient.invalidateQueries({ queryKey: ['users'] });\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useUnlinkPersonaRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ key, role }: { key: string; role: string }) =>\n apiFetch(`/personas/${encodeURIComponent(key)}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useAssignPersona() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, key }: { userId: string; key: string }) =>\n apiFetch(`/users/${userId}/personas`, {\n method: 'POST',\n body: JSON.stringify({ persona: key }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUnassignPersona() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, key }: { userId: string; key: string }) =>\n apiFetch(`/users/${userId}/personas/${encodeURIComponent(key)}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['personas'] });\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUserPersonas(userId: string | undefined) {\n return useQuery<{ personas: LTUserPersona[]; roles: LTComposedRoleScope[] }>({\n queryKey: ['users', userId, 'personas'],\n queryFn: () => apiFetch(`/users/${userId}/personas`),\n enabled: !!userId,\n });\n}\n"],"names":["usePersonas","useQuery","apiFetch","usePersona","key","useCreatePersona","queryClient","useQueryClient","useMutation","data","useUpdatePersona","useDeletePersona","useLinkPersonaRole","role","relationship","useUnlinkPersonaRole","useAssignPersona","userId","useUnassignPersona","useUserPersonas"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as i,c as s}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=pipelines-
|
|
1
|
+
import{u as i,c as s}from"./vendor-query-RUZdMvN6.js";import{g as u}from"./index-sbfCx2CF.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-uptnM5Qj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines-
|
|
1
|
+
{"version":3,"file":"pipelines-uptnM5Qj.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 n}from"./vendor-query-RUZdMvN6.js";import{g as a}from"./index-
|
|
2
|
-
//# sourceMappingURL=tasks-
|
|
1
|
+
import{u as n}from"./vendor-query-RUZdMvN6.js";import{g as a}from"./index-sbfCx2CF.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-Em0f5Rsk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-
|
|
1
|
+
{"version":3,"file":"tasks-Em0f5Rsk.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-RUZdMvN6.js";import{g as t}from"./index-
|
|
2
|
-
//# sourceMappingURL=topics-
|
|
1
|
+
import{u as i,b as u,c as s}from"./vendor-query-RUZdMvN6.js";import{g as t}from"./index-sbfCx2CF.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-B81zAt9U.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topics-
|
|
1
|
+
{"version":3,"file":"topics-B81zAt9U.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 w,b as d}from"./vendor-query-RUZdMvN6.js";import{e as r,N as i,ag as l,ah as h,ai as k}from"./index-
|
|
2
|
-
//# sourceMappingURL=useEventHooks-
|
|
1
|
+
import{a as w,b as d}from"./vendor-query-RUZdMvN6.js";import{e as r,N as i,ag as l,ah as h,ai as k}from"./index-sbfCx2CF.js";function p(s){const t=[],e=s.type.split(".");switch(e[0]==="system"?e[1]:e[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 u(s=500){const t=d(),e=w.useRef(new Set),a=w.useRef(null);return w.useCallback(o=>{for(const n of o)e.current.add(JSON.stringify(n));a.current||(a.current=setTimeout(()=>{a.current=null;const n=[...e.current];e.current.clear();for(const c of n)t.invalidateQueries({queryKey:JSON.parse(c)})},s))},[t,s])}function y(s){return s?[`${i}.system.workflow.>`,`${i}.system.activity.>`,`${i}.system.milestone.>`,`${i}.system.task.>`,`${i}.system.escalation.>`]:[]}function b(){const s=u(300);r(`${i}.system.task.>`,()=>{s([["jobs"]])}),r(`${i}.system.workflow.>`,()=>{s([["jobs"]])})}function g(s){const t=u(400);k(y(s),e=>{var f;if(!s||!(e.workflowId===s||((f=e.workflowId)==null?void 0:f.includes(s))))return;const o=e.type.split("."),n=o[0]==="system"?o[1]:o[0],c=p(e);n==="escalation"&&c.push(["escalations","by-workflow",s]),t(c)})}function S(s){const t=u(400);k(y(s),e=>{var f;if(!s||!(e.workflowId===s||((f=e.workflowId)==null?void 0:f.includes(s))))return;const o=e.type.split("."),n=o[0]==="system"?o[1]:o[0],c=p(e);n==="escalation"&&c.push(["escalations","by-workflow",s]),t(c)})}function R(s){const t=u(400);k(y(s),e=>{var n;if(!s||!(e.workflowId===s||((n=e.workflowId)==null?void 0:n.includes(s))))return;const o=p(e);o.push(["workflowSets"]),o.push(["yamlWorkflows"]),t(o)})}function $(s){const t=u(300),e=w.useCallback(a=>{s&&(a.originId!==s&&a.workflowId!==s||t([["processes",s]]))},[s,t]);r(`${i}.system.task.>`,e),r(`${i}.system.workflow.>`,e),r(`${i}.system.escalation.>`,e)}function I(){const s=u(300);r(l({}),()=>{s([["escalationStats"]])})}function x(){const s=u(1500);r(l({}),()=>{s([["stationMetrics"]])})}function j(){const s=u(1500);r(l({}),()=>{s([["escAggregate"],["escTimeline"]])})}function D(s){const t=u(300),e=(s==null?void 0:s.role)??null,a=((s==null?void 0:s.verbs)??[]).join(","),o=w.useMemo(()=>{const n=a?a.split(","):null;return n?h({role:e,verbs:n}):[l({role:e})]},[e,a]);k(o,()=>{t([["escalations"]])})}function P(s){const t=u(300);r(s?l({id:s}):l({id:"__none__"}),e=>{!s||e.escalationId!==s||t([["escalations",s],["escalations"],["escalationStats"]])})}function Q(){const s=u(300);r(`${i}.system.agent.>`,()=>{s([["agents"]])})}function v(){const s=u(300);r(`${i}.system.task.>`,()=>{s([["processes"]])}),r(`${i}.system.workflow.>`,()=>{s([["processes"]])})}export{$ as a,b,S as c,R as d,I as e,D as f,P as g,g as h,j as i,x as j,Q as k,v as u};
|
|
2
|
+
//# sourceMappingURL=useEventHooks-B_Bqqzlo.js.map
|