@hotmeshio/long-tail 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/build/api/auth.d.ts +11 -0
- package/build/api/auth.js +11 -0
- package/build/api/bot-accounts.d.ts +87 -0
- package/build/api/bot-accounts.js +87 -0
- package/build/api/controlplane.d.ts +48 -0
- package/build/api/controlplane.js +48 -0
- package/build/api/dba.d.ts +27 -0
- package/build/api/dba.js +27 -0
- package/build/api/escalations.d.ts +201 -0
- package/build/api/escalations.js +236 -0
- package/build/api/exports.d.ts +58 -0
- package/build/api/exports.js +58 -0
- package/build/api/insight.d.ts +57 -0
- package/build/api/insight.js +57 -0
- package/build/api/maintenance.d.ts +15 -0
- package/build/api/maintenance.js +15 -0
- package/build/api/mcp-runs.d.ts +27 -0
- package/build/api/mcp-runs.js +27 -0
- package/build/api/mcp.d.ts +108 -0
- package/build/api/mcp.js +108 -0
- package/build/api/namespaces.d.ts +13 -0
- package/build/api/namespaces.js +13 -0
- package/build/api/roles.d.ts +63 -0
- package/build/api/roles.js +63 -5
- package/build/api/settings.d.ts +8 -0
- package/build/api/settings.js +8 -0
- package/build/api/tasks.d.ts +43 -0
- package/build/api/tasks.js +43 -0
- package/build/api/users.d.ts +71 -0
- package/build/api/users.js +71 -5
- package/build/api/workflow-sets.d.ts +51 -0
- package/build/api/workflow-sets.js +51 -0
- package/build/api/workflows.d.ts +110 -0
- package/build/api/workflows.js +109 -0
- package/build/api/yaml-workflows.d.ts +195 -0
- package/build/api/yaml-workflows.js +195 -0
- package/build/examples/types/envelopes.d.ts +27 -0
- package/build/examples/types/index.d.ts +1 -1
- package/build/examples/workers.js +8 -0
- package/build/examples/workflows/assembly-line/activities.d.ts +28 -0
- package/build/examples/workflows/assembly-line/activities.js +53 -0
- package/build/examples/workflows/assembly-line/index.d.ts +17 -0
- package/build/examples/workflows/assembly-line/index.js +60 -0
- package/build/examples/workflows/assembly-line/iterator.d.ts +12 -0
- package/build/examples/workflows/assembly-line/iterator.js +54 -0
- package/build/examples/workflows/assembly-line/reverter.d.ts +18 -0
- package/build/examples/workflows/assembly-line/reverter.js +89 -0
- package/build/examples/workflows/assembly-line/types.d.ts +25 -0
- package/build/examples/workflows/assembly-line/types.js +8 -0
- package/build/examples/workflows/assembly-line/worker.d.ts +13 -0
- package/build/examples/workflows/assembly-line/worker.js +81 -0
- package/build/routes/escalations/list.js +22 -0
- package/build/routes/workflows/invocation.js +15 -9
- package/build/sdk/index.d.ts +11 -0
- package/build/sdk/index.js +1 -0
- package/build/services/workflow-invocation.d.ts +15 -2
- package/build/services/workflow-invocation.js +11 -6
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-DRjkRSjJ.js → AdminDashboard-B15jSEV2.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DRjkRSjJ.js.map → AdminDashboard-B15jSEV2.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-CnivX4Tz.js → AvailableEscalationsPage-0V2yvKak.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-CnivX4Tz.js.map → AvailableEscalationsPage-0V2yvKak.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-DwwaBhTH.js → BotPicker-B4UxHcek.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-DwwaBhTH.js.map → BotPicker-B4UxHcek.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DQpaVA0M.js → CollapsibleSection-BBexNWVd.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DQpaVA0M.js.map → CollapsibleSection-BBexNWVd.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-B7JoDNvt.js → ConfirmDeleteModal-DlPDJSq_.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-B7JoDNvt.js.map → ConfirmDeleteModal-DlPDJSq_.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-AqoZayBG.js → CopyableId-BxHW1ahb.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-AqoZayBG.js.map → CopyableId-BxHW1ahb.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-qGw1kQzi.js → CredentialsPage-Bp_Y1Szk.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-qGw1kQzi.js.map → CredentialsPage-Bp_Y1Szk.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-D1HUQcd0.js → CustomDurationPicker-ByBFqXSO.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-D1HUQcd0.js.map → CustomDurationPicker-ByBFqXSO.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-DKvSKoVG.js → DataTable-DyIXg-tQ.js} +2 -2
- package/dashboard/dist/assets/{DataTable-DKvSKoVG.js.map → DataTable-DyIXg-tQ.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-B0yrReGQ.js → ElapsedCell-BgnA0qpS.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-B0yrReGQ.js.map → ElapsedCell-BgnA0qpS.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-X0fIzYID.js → EmptyState-DlMImvgm.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-X0fIzYID.js.map → EmptyState-DlMImvgm.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BQAT9W7r.js → EscalationsOverview-D90kdfw1.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BQAT9W7r.js.map → EscalationsOverview-D90kdfw1.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CX1KNLhZ.js → EventTable-BNxtlgNz.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CX1KNLhZ.js.map → EventTable-BNxtlgNz.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-DMTvuQy-.js → FilterBar-BTiaAhCx.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-DMTvuQy-.js.map → FilterBar-BTiaAhCx.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-DTOSxoEy.js → ListToolbar-BUcagSCn.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-DTOSxoEy.js.map → ListToolbar-BUcagSCn.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-BaKTIWrG.js → McpOverview-B-tCvz8C.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-BaKTIWrG.js.map → McpOverview-B-tCvz8C.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-CC08T5k8.js → McpQueryDetailPage-DPlF1wYb.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-CC08T5k8.js.map → McpQueryDetailPage-DPlF1wYb.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-CVfF9dYg.js → McpQueryPage-Bz7AdcfR.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-CVfF9dYg.js.map → McpQueryPage-Bz7AdcfR.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-CKs1RWeV.js → McpRunDetailPage-Di_qpL2V.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-CKs1RWeV.js.map → McpRunDetailPage-Di_qpL2V.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-CcPD_tY1.js → McpRunsPage-BBgybBEa.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-CcPD_tY1.js.map → McpRunsPage-BBgybBEa.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-_2AbWxJT.js → Modal-CaJ0gTEa.js} +2 -2
- package/dashboard/dist/assets/{Modal-_2AbWxJT.js.map → Modal-CaJ0gTEa.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-BGiRaRDr.js → OperatorDashboard-DDfMmrmR.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-BGiRaRDr.js.map → OperatorDashboard-DDfMmrmR.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-DVr5Qyzm.js → PageHeader-C5D-G5rp.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-DVr5Qyzm.js.map → PageHeader-C5D-G5rp.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-D0KRASML.js → PageHeaderWithStats-DCa2eZh2.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-D0KRASML.js.map → PageHeaderWithStats-DCa2eZh2.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-Bx2559OU.js → PriorityBadge-DTHq6OUZ.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-Bx2559OU.js.map → PriorityBadge-DTHq6OUZ.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-69I--sry.js → ProcessDetailPage-fC4dhrd0.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-69I--sry.js.map → ProcessDetailPage-fC4dhrd0.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-BDpUbua2.js → ProcessesListPage-CL2MY8uD.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-BDpUbua2.js.map → ProcessesListPage-CL2MY8uD.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-CcAqEaSt.js → RolePill-kgKPANly.js} +2 -2
- package/dashboard/dist/assets/{RolePill-CcAqEaSt.js.map → RolePill-kgKPANly.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-Cl23Hjet.js → RolesPage-Be2lXTHD.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-Cl23Hjet.js.map → RolesPage-Be2lXTHD.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-B4mqIt3Z.js → RowActions-DIzJCwqR.js} +2 -2
- package/dashboard/dist/assets/{RowActions-B4mqIt3Z.js.map → RowActions-DIzJCwqR.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-Cz_2OjAZ.js → StatCard-CRi2Jy6t.js} +2 -2
- package/dashboard/dist/assets/{StatCard-Cz_2OjAZ.js.map → StatCard-CRi2Jy6t.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-Wi2FJZsn.js → StatusBadge-BETI_8Mr.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-Wi2FJZsn.js.map → StatusBadge-BETI_8Mr.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-PW5NRDMb.js → StepIndicator-DjpMqCjz.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-PW5NRDMb.js.map → StepIndicator-DjpMqCjz.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Bl2Uzz65.js → StickyPagination-BZbExQ9t.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Bl2Uzz65.js.map → StickyPagination-BZbExQ9t.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CUPqMd0z.js → SwimlaneTimeline-DZthQyhR.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CUPqMd0z.js.map → SwimlaneTimeline-DZthQyhR.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-BLtf86Ly.js → TagInput-CukbOfYn.js} +2 -2
- package/dashboard/dist/assets/{TagInput-BLtf86Ly.js.map → TagInput-CukbOfYn.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BXJFX74D.js → TaskDetailPage-CIZHIKo9.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BXJFX74D.js.map → TaskDetailPage-CIZHIKo9.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-CWYj3xKe.js → TaskQueuePill-Q7DGoysj.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-CWYj3xKe.js.map → TaskQueuePill-Q7DGoysj.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-C3cX94Mw.js → TasksListPage-CsC9wjb0.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-C3cX94Mw.js.map → TasksListPage-CsC9wjb0.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-B_5yDDHV.js → TimeAgo-BcOOnJeH.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-B_5yDDHV.js.map → TimeAgo-BcOOnJeH.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-DRX724uU.js → TimestampCell-CEMapYDQ.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-DRX724uU.js.map → TimestampCell-CEMapYDQ.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-Ca8FA469.js → UserName-BHoN7iRL.js} +2 -2
- package/dashboard/dist/assets/{UserName-Ca8FA469.js.map → UserName-BHoN7iRL.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BBYWEV2P.js → WorkflowExecutionPage-DawKl1LT.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BBYWEV2P.js.map → WorkflowExecutionPage-DawKl1LT.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-BXifAuLi.js → WorkflowPill-CP84Vqeg.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-BXifAuLi.js.map → WorkflowPill-CP84Vqeg.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-Drl3juz9.js → WorkflowsDashboard-QrvVFxtQ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-Drl3juz9.js.map → WorkflowsDashboard-QrvVFxtQ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-03IRrDLg.js → WorkflowsOverview-DuhAi_OY.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-03IRrDLg.js.map → WorkflowsOverview-DuhAi_OY.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-DC2cLxVi.js → YamlWorkflowsPage-Dc9xw82a.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-DC2cLxVi.js.map → YamlWorkflowsPage-Dc9xw82a.js.map} +1 -1
- package/dashboard/dist/assets/{bots-DZEXcgiJ.js → bots-Dny-rmmI.js} +2 -2
- package/dashboard/dist/assets/{bots-DZEXcgiJ.js.map → bots-Dny-rmmI.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-Cw48lNaF.js → escalation-CV0sKNH5.js} +2 -2
- package/dashboard/dist/assets/{escalation-Cw48lNaF.js.map → escalation-CV0sKNH5.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-NINpo3qf.js → escalation-columns-30CKyoWI.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-NINpo3qf.js.map → escalation-columns-30CKyoWI.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-fk_qr729.js → helpers-C1-30CzH.js} +2 -2
- package/dashboard/dist/assets/{helpers-fk_qr729.js.map → helpers-C1-30CzH.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-Cuu3xKfr.js → helpers-C1jaRD-d.js} +2 -2
- package/dashboard/dist/assets/{helpers-Cuu3xKfr.js.map → helpers-C1jaRD-d.js.map} +1 -1
- package/dashboard/dist/assets/{index-CNI7k7oB.js → index-BUVQ6wmy.js} +2 -2
- package/dashboard/dist/assets/{index-CNI7k7oB.js.map → index-BUVQ6wmy.js.map} +1 -1
- package/dashboard/dist/assets/{index-aRvL-dXp.js → index-CxVB7F4X.js} +2 -2
- package/dashboard/dist/assets/{index-aRvL-dXp.js.map → index-CxVB7F4X.js.map} +1 -1
- package/dashboard/dist/assets/{index-BIG3KooI.js → index-D-oCWCAS.js} +2 -2
- package/dashboard/dist/assets/{index-BIG3KooI.js.map → index-D-oCWCAS.js.map} +1 -1
- package/dashboard/dist/assets/{index-b03HlbnH.js → index-D0wPM3Ck.js} +2 -2
- package/dashboard/dist/assets/{index-b03HlbnH.js.map → index-D0wPM3Ck.js.map} +1 -1
- package/dashboard/dist/assets/{index-DwRytW9O.js → index-DHgnkykj.js} +2 -2
- package/dashboard/dist/assets/{index-DwRytW9O.js.map → index-DHgnkykj.js.map} +1 -1
- package/dashboard/dist/assets/{index-Dj-z-x8M.js → index-D_aJBEAG.js} +2 -2
- package/dashboard/dist/assets/{index-Dj-z-x8M.js.map → index-D_aJBEAG.js.map} +1 -1
- package/dashboard/dist/assets/{index-CORHB0WC.js → index-Dd_U4mLm.js} +2 -2
- package/dashboard/dist/assets/{index-CORHB0WC.js.map → index-Dd_U4mLm.js.map} +1 -1
- package/dashboard/dist/assets/{index-BwN3KP_L.js → index-DnmZbNxk.js} +7 -7
- package/dashboard/dist/assets/index-DnmZbNxk.js.map +1 -0
- package/dashboard/dist/assets/{index-B98ipWxE.js → index-_RBvi7s6.js} +2 -2
- package/dashboard/dist/assets/{index-B98ipWxE.js.map → index-_RBvi7s6.js.map} +1 -1
- package/dashboard/dist/assets/{index-Bxe8h1x4.js → index-n7td8zgX.js} +2 -2
- package/dashboard/dist/assets/{index-Bxe8h1x4.js.map → index-n7td8zgX.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BZoFryNc.js → mcp-CRFr4L9W.js} +2 -2
- package/dashboard/dist/assets/{mcp-BZoFryNc.js.map → mcp-CRFr4L9W.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-wiw1kwm8.js → mcp-query-DHY2mZBQ.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-wiw1kwm8.js.map → mcp-query-DHY2mZBQ.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-BaEKnf5v.js → mcp-runs-BqPHqwAO.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-BaEKnf5v.js.map → mcp-runs-BqPHqwAO.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BwnZI4_A.js → namespaces-TG1aIpo_.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BwnZI4_A.js.map → namespaces-TG1aIpo_.js.map} +1 -1
- package/dashboard/dist/assets/{roles-Bgn1K8zU.js → roles-DhhLTvXg.js} +2 -2
- package/dashboard/dist/assets/{roles-Bgn1K8zU.js.map → roles-DhhLTvXg.js.map} +1 -1
- package/dashboard/dist/assets/{settings-CizYiutL.js → settings-D9MBzEeB.js} +2 -2
- package/dashboard/dist/assets/{settings-CizYiutL.js.map → settings-D9MBzEeB.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-Bmte_hc4.js → tasks-BxmcZoev.js} +2 -2
- package/dashboard/dist/assets/{tasks-Bmte_hc4.js.map → tasks-BxmcZoev.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-CUCxpiI2.js → useEventHooks-BylecvvI.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CUCxpiI2.js.map → useEventHooks-BylecvvI.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-Cum02Ej9.js → useYamlActivityEvents-ocmj11e_.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Cum02Ej9.js.map → useYamlActivityEvents-ocmj11e_.js.map} +1 -1
- package/dashboard/dist/assets/{users-NSDgTt-z.js → users-Ce5r-JAv.js} +2 -2
- package/dashboard/dist/assets/{users-NSDgTt-z.js.map → users-Ce5r-JAv.js.map} +1 -1
- package/dashboard/dist/assets/{workflows-k0XRdGXx.js → workflows-ykIeVbRJ.js} +2 -2
- package/dashboard/dist/assets/{workflows-k0XRdGXx.js.map → workflows-ykIeVbRJ.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DAre8I78.js → yaml-workflows-WypmKYht.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DAre8I78.js.map → yaml-workflows-WypmKYht.js.map} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/docs/api/sdk/auth.md +27 -0
- package/docs/api/sdk/bot-accounts.md +243 -0
- package/docs/api/sdk/controlplane.md +103 -0
- package/docs/api/sdk/dba.md +52 -0
- package/docs/api/sdk/escalations.md +374 -0
- package/docs/api/sdk/events.md +68 -0
- package/docs/api/sdk/exports.md +124 -0
- package/docs/api/sdk/insight.md +112 -0
- package/docs/api/sdk/maintenance.md +54 -0
- package/docs/api/sdk/mcp-runs.md +71 -0
- package/docs/api/sdk/mcp.md +250 -0
- package/docs/api/sdk/namespaces.md +43 -0
- package/docs/api/sdk/roles.md +183 -0
- package/docs/api/sdk/settings.md +24 -0
- package/docs/api/sdk/tasks.md +120 -0
- package/docs/api/sdk/users.md +196 -0
- package/docs/api/sdk/workflow-sets.md +135 -0
- package/docs/api/sdk/workflows.md +271 -0
- package/docs/api/sdk/yaml-workflows.md +408 -0
- package/package.json +1 -1
- package/dashboard/dist/assets/index-BwN3KP_L.js.map +0 -1
- package/docs/epic-integration.md +0 -224
- package/docs/workflow-builder.md +0 -371
- /package/docs/api/{dba.md → http/dba.md} +0 -0
- /package/docs/api/{escalations.md → http/escalations.md} +0 -0
- /package/docs/api/{exports.md → http/exports.md} +0 -0
- /package/docs/api/{maintenance.md → http/maintenance.md} +0 -0
- /package/docs/api/{mcp-runs.md → http/mcp-runs.md} +0 -0
- /package/docs/api/{mcp-servers.md → http/mcp-servers.md} +0 -0
- /package/docs/api/{namespaces.md → http/namespaces.md} +0 -0
- /package/docs/api/{roles.md → http/roles.md} +0 -0
- /package/docs/api/{service-accounts.md → http/service-accounts.md} +0 -0
- /package/docs/api/{settings.md → http/settings.md} +0 -0
- /package/docs/api/{tasks.md → http/tasks.md} +0 -0
- /package/docs/api/{users.md → http/users.md} +0 -0
- /package/docs/api/{workflows.md → http/workflows.md} +0 -0
- /package/docs/api/{yaml-workflows.md → http/yaml-workflows.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-aRvL-dXp.js","sources":["../../src/components/common/test/ToolTestPanel.tsx","../../src/pages/mcp/servers/helpers.ts","../../src/pages/mcp/servers/ServerRow.tsx","../../src/pages/mcp/servers/McpServersPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || 'longtail';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{serverName}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{tool.name}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {tool.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{tool.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Request</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import type { McpServerRecord, McpToolManifest } from '../../../api/types';\n\nexport function isBuiltIn(row: McpServerRecord): boolean {\n return !!(row.metadata as Record<string, unknown> | null)?.builtin\n || !!(row.transport_config as Record<string, unknown> | null)?.builtin;\n}\n\n/** Check if a server or any of its tools match the search term */\nexport function matchesSearch(server: McpServerRecord, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.name.toLowerCase().includes(q)) return true;\n if (server.description?.toLowerCase().includes(q)) return true;\n if ((server.tags ?? []).some((t) => t.toLowerCase().includes(q))) return true;\n const tools = (server.tool_manifest ?? []) as McpToolManifest[];\n return tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(tools: McpToolManifest[], search: string): McpToolManifest[] {\n if (!search) return tools;\n const q = search.toLowerCase();\n return tools.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Pencil, Trash2, Plug, Unplug, Play } from 'lucide-react';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport {\n useConnectMcpServer,\n useDisconnectMcpServer,\n useCredentialStatus,\n} from '../../../api/mcp';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { isBuiltIn } from './helpers';\n\nfunction CredentialDot({ serverId, credentialProviders }: { serverId: string; credentialProviders: string[] }) {\n const { data } = useCredentialStatus(serverId);\n if (credentialProviders.length === 0) return null;\n if (!data) return null;\n const ok = data.missing.length === 0;\n return (\n <span\n className={`inline-block w-2 h-2 rounded-full shrink-0 ${ok ? 'bg-status-success' : 'bg-status-warning'}`}\n title={ok ? 'All credentials registered' : `Missing: ${data.missing.join(', ')}`}\n />\n );\n}\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onEdit,\n onDelete,\n onTryTool,\n connect,\n disconnect,\n visibleTools,\n}: {\n server: McpServerRecord;\n expanded: boolean;\n onToggle: () => void;\n onEdit: () => void;\n onDelete: () => void;\n onTryTool: (tool: McpToolManifest) => void;\n connect: ReturnType<typeof useConnectMcpServer>;\n disconnect: ReturnType<typeof useDisconnectMcpServer>;\n visibleTools: McpToolManifest[];\n}) {\n const allTools = (server.tool_manifest ?? []) as McpToolManifest[];\n const builtin = isBuiltIn(server);\n\n return (\n <>\n {/* Server header row */}\n <tr\n onClick={allTools.length > 0 ? onToggle : undefined}\n className={`group/row border-b transition-colors duration-100 ${\n allTools.length > 0 ? 'cursor-pointer row-hover' : ''\n }`}\n >\n {/* Name + tags */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} ${allTools.length === 0 ? 'opacity-0' : 'text-text-tertiary'}`}>\n <ChevronRight size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm text-text-primary font-medium\">{server.name}</p>\n {(server.tags ?? []).length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-0.5\">\n {server.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28\">\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={server.status} />\n <CredentialDot serverId={server.id} credentialProviders={server.credential_providers ?? []} />\n </div>\n </td>\n\n {/* Actions */}\n <td className=\"px-6 py-3.5 w-28\">\n <RowActionGroup>\n {!builtin && (\n server.status === 'connected' ? (\n <RowAction\n icon={Unplug}\n title=\"Disconnect server\"\n onClick={() => disconnect.mutate(server.id)}\n />\n ) : (\n <RowAction\n icon={Plug}\n title=\"Connect server\"\n onClick={() => connect.mutate(server.id)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )\n )}\n <RowAction\n icon={Pencil}\n title=\"Edit server\"\n onClick={onEdit}\n />\n {!builtin && (\n <RowAction\n icon={Trash2}\n title=\"Delete server\"\n onClick={onDelete}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n )}\n </RowActionGroup>\n </td>\n\n {/* Tool count badge — aligned with child row hover icons */}\n <td className=\"w-12 text-center\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {allTools.length}\n </span>\n </td>\n </tr>\n\n {/* Expanded tool rows — description below name, aligned to outer columns */}\n {visibleTools.length > 0 && (\n <tr>\n <td colSpan={4} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((tool) => (\n <div\n key={tool.name}\n onClick={() => onTryTool(tool)}\n className=\"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30\"\n >\n {/* Tool name + description below */}\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <code className=\"text-xs font-mono text-accent-primary\">{tool.name}</code>\n {tool.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{tool.description}</p>\n )}\n </div>\n {/* Status — empty for tools */}\n <div className=\"w-28 px-6 py-2 shrink-0\" />\n {/* Try — hover-reveal icon */}\n <div className=\"w-28 px-6 py-2 flex justify-end shrink-0\">\n <button\n onClick={(e) => { e.stopPropagation(); onTryTool(tool); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Try tool\"\n >\n <Play className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n </div>\n </div>\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useMcpServers,\n useConnectMcpServer,\n useDisconnectMcpServer,\n useDeleteMcpServer,\n} from '../../../api/mcp';\nimport { EmptyState } from '../../../components/common/display/EmptyState';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../../hooks/useExpandedRows';\nimport { ToolTestPanel } from '../../../components/common/test/ToolTestPanel';\nimport { matchesSearch, filterTools } from './helpers';\nimport { ServerRow } from './ServerRow';\n\nexport function McpServersPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', search: '', tag: '' },\n });\n\n const { data, isLoading } = useMcpServers({\n status: filters.status || undefined,\n search: filters.search || undefined,\n tags: filters.tag || undefined,\n });\n const connect = useConnectMcpServer();\n const disconnect = useDisconnectMcpServer();\n const deleteServer = useDeleteMcpServer();\n\n const [confirmDelete, setConfirmDelete] = useState<McpServerRecord | null>(null);\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:mcp-servers');\n const [tryTool, setTryTool] = useState<{\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n } | null>(null);\n\n const servers = data?.servers ?? [];\n const total = data?.total ?? 0;\n\n // Derive unique tags from current result set for the filter dropdown\n const tagOptions = useMemo(() => {\n const allTags = new Set<string>();\n for (const s of servers) {\n for (const t of s.tags ?? []) allTags.add(t);\n }\n return [...allTags].sort().map((t) => ({ value: t, label: t }));\n }, [servers]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n // Auto-expand servers whose tools match the search (so results are visible)\n useEffect(() => {\n if (!filters.search) return;\n const q = filters.search.toLowerCase();\n for (const s of filteredServers) {\n const tools = (s.tool_manifest ?? []) as McpToolManifest[];\n const hasToolMatch = tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n if (hasToolMatch && !expandedIds.has(s.id)) {\n toggleExpand(s.id);\n }\n }\n }, [filters.search, filteredServers]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteServer.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Server Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Server Tools\"\n actions={\n <button\n onClick={() => navigate('/mcp/servers/new')}\n className=\"btn-primary text-xs\"\n >\n Register Server\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name...\"\n />\n <FilterSelect\n label=\"Tag\"\n value={filters.tag}\n onChange={(v) => setFilter('tag', v)}\n options={tagOptions}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'registered', label: 'Registered' },\n { value: 'connected', label: 'Connected' },\n { value: 'error', label: 'Error' },\n { value: 'disconnected', label: 'Disconnected' },\n ]}\n />\n </FilterBar>\n\n <div className={`flex gap-0 ${tryTool ? '' : ''}`}>\n {/* Server list */}\n <div className={`${tryTool ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No servers found\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\" />\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-12\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.id}\n server={server}\n expanded={expandedIds.has(server.id)}\n onToggle={() => toggleExpand(server.id)}\n onEdit={() => navigate(`/mcp/servers/${server.id}`)}\n onDelete={() => setConfirmDelete(server)}\n onTryTool={(tool) =>\n setTryTool({\n serverId: server.id,\n serverName: server.name,\n tool,\n })\n }\n connect={connect}\n disconnect={disconnect}\n visibleTools={filterTools(\n (server.tool_manifest ?? []) as McpToolManifest[],\n filters.search,\n )}\n />\n ))}\n </tbody>\n </table>\n )}\n\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 {/* Test panel — slides in from right */}\n {tryTool && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <ToolTestPanel\n serverId={tryTool.serverId}\n serverName={tryTool.serverName}\n tool={tryTool.tool}\n onClose={() => setTryTool(null)}\n />\n </div>\n )}\n </div>\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete MCP Server\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">{confirmDelete?.name}</span>?\n This will remove the server registration.\n </>\n }\n isPending={deleteServer.isPending}\n error={deleteServer.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","useEffect","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","X","RunAsSelector","e","key","value","Fragment","RotateCcw","Play","JsonViewer","isBuiltIn","row","_a","_b","matchesSearch","server","search","q","t","filterTools","tools","CredentialDot","credentialProviders","useCredentialStatus","ok","ServerRow","expanded","onToggle","onEdit","onDelete","onTryTool","connect","disconnect","visibleTools","allTools","builtin","ChevronRight","tag","StatusBadge","RowActionGroup","RowAction","Unplug","Plug","Pencil","Trash2","McpServersPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","isLoading","useMcpServers","useConnectMcpServer","useDisconnectMcpServer","deleteServer","useDeleteMcpServer","confirmDelete","setConfirmDelete","expandedIds","toggleExpand","useExpandedRows","tryTool","setTryTool","servers","total","tagOptions","useMemo","allTags","s","filteredServers","handleDelete","PageHeader","_","i","FilterBar","FilterInput","v","FilterSelect","EmptyState","StickyPagination","ConfirmDeleteModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-CxVB7F4X.js","sources":["../../src/components/common/test/ToolTestPanel.tsx","../../src/pages/mcp/servers/helpers.ts","../../src/pages/mcp/servers/ServerRow.tsx","../../src/pages/mcp/servers/McpServersPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || 'longtail';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{serverName}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{tool.name}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {tool.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{tool.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Request</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import type { McpServerRecord, McpToolManifest } from '../../../api/types';\n\nexport function isBuiltIn(row: McpServerRecord): boolean {\n return !!(row.metadata as Record<string, unknown> | null)?.builtin\n || !!(row.transport_config as Record<string, unknown> | null)?.builtin;\n}\n\n/** Check if a server or any of its tools match the search term */\nexport function matchesSearch(server: McpServerRecord, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.name.toLowerCase().includes(q)) return true;\n if (server.description?.toLowerCase().includes(q)) return true;\n if ((server.tags ?? []).some((t) => t.toLowerCase().includes(q))) return true;\n const tools = (server.tool_manifest ?? []) as McpToolManifest[];\n return tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(tools: McpToolManifest[], search: string): McpToolManifest[] {\n if (!search) return tools;\n const q = search.toLowerCase();\n return tools.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Pencil, Trash2, Plug, Unplug, Play } from 'lucide-react';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport {\n useConnectMcpServer,\n useDisconnectMcpServer,\n useCredentialStatus,\n} from '../../../api/mcp';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { isBuiltIn } from './helpers';\n\nfunction CredentialDot({ serverId, credentialProviders }: { serverId: string; credentialProviders: string[] }) {\n const { data } = useCredentialStatus(serverId);\n if (credentialProviders.length === 0) return null;\n if (!data) return null;\n const ok = data.missing.length === 0;\n return (\n <span\n className={`inline-block w-2 h-2 rounded-full shrink-0 ${ok ? 'bg-status-success' : 'bg-status-warning'}`}\n title={ok ? 'All credentials registered' : `Missing: ${data.missing.join(', ')}`}\n />\n );\n}\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onEdit,\n onDelete,\n onTryTool,\n connect,\n disconnect,\n visibleTools,\n}: {\n server: McpServerRecord;\n expanded: boolean;\n onToggle: () => void;\n onEdit: () => void;\n onDelete: () => void;\n onTryTool: (tool: McpToolManifest) => void;\n connect: ReturnType<typeof useConnectMcpServer>;\n disconnect: ReturnType<typeof useDisconnectMcpServer>;\n visibleTools: McpToolManifest[];\n}) {\n const allTools = (server.tool_manifest ?? []) as McpToolManifest[];\n const builtin = isBuiltIn(server);\n\n return (\n <>\n {/* Server header row */}\n <tr\n onClick={allTools.length > 0 ? onToggle : undefined}\n className={`group/row border-b transition-colors duration-100 ${\n allTools.length > 0 ? 'cursor-pointer row-hover' : ''\n }`}\n >\n {/* Name + tags */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} ${allTools.length === 0 ? 'opacity-0' : 'text-text-tertiary'}`}>\n <ChevronRight size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm text-text-primary font-medium\">{server.name}</p>\n {(server.tags ?? []).length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-0.5\">\n {server.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28\">\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={server.status} />\n <CredentialDot serverId={server.id} credentialProviders={server.credential_providers ?? []} />\n </div>\n </td>\n\n {/* Actions */}\n <td className=\"px-6 py-3.5 w-28\">\n <RowActionGroup>\n {!builtin && (\n server.status === 'connected' ? (\n <RowAction\n icon={Unplug}\n title=\"Disconnect server\"\n onClick={() => disconnect.mutate(server.id)}\n />\n ) : (\n <RowAction\n icon={Plug}\n title=\"Connect server\"\n onClick={() => connect.mutate(server.id)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )\n )}\n <RowAction\n icon={Pencil}\n title=\"Edit server\"\n onClick={onEdit}\n />\n {!builtin && (\n <RowAction\n icon={Trash2}\n title=\"Delete server\"\n onClick={onDelete}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n )}\n </RowActionGroup>\n </td>\n\n {/* Tool count badge — aligned with child row hover icons */}\n <td className=\"w-12 text-center\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {allTools.length}\n </span>\n </td>\n </tr>\n\n {/* Expanded tool rows — description below name, aligned to outer columns */}\n {visibleTools.length > 0 && (\n <tr>\n <td colSpan={4} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((tool) => (\n <div\n key={tool.name}\n onClick={() => onTryTool(tool)}\n className=\"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30\"\n >\n {/* Tool name + description below */}\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <code className=\"text-xs font-mono text-accent-primary\">{tool.name}</code>\n {tool.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{tool.description}</p>\n )}\n </div>\n {/* Status — empty for tools */}\n <div className=\"w-28 px-6 py-2 shrink-0\" />\n {/* Try — hover-reveal icon */}\n <div className=\"w-28 px-6 py-2 flex justify-end shrink-0\">\n <button\n onClick={(e) => { e.stopPropagation(); onTryTool(tool); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Try tool\"\n >\n <Play className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n </div>\n </div>\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useMcpServers,\n useConnectMcpServer,\n useDisconnectMcpServer,\n useDeleteMcpServer,\n} from '../../../api/mcp';\nimport { EmptyState } from '../../../components/common/display/EmptyState';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../../hooks/useExpandedRows';\nimport { ToolTestPanel } from '../../../components/common/test/ToolTestPanel';\nimport { matchesSearch, filterTools } from './helpers';\nimport { ServerRow } from './ServerRow';\n\nexport function McpServersPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', search: '', tag: '' },\n });\n\n const { data, isLoading } = useMcpServers({\n status: filters.status || undefined,\n search: filters.search || undefined,\n tags: filters.tag || undefined,\n });\n const connect = useConnectMcpServer();\n const disconnect = useDisconnectMcpServer();\n const deleteServer = useDeleteMcpServer();\n\n const [confirmDelete, setConfirmDelete] = useState<McpServerRecord | null>(null);\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:mcp-servers');\n const [tryTool, setTryTool] = useState<{\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n } | null>(null);\n\n const servers = data?.servers ?? [];\n const total = data?.total ?? 0;\n\n // Derive unique tags from current result set for the filter dropdown\n const tagOptions = useMemo(() => {\n const allTags = new Set<string>();\n for (const s of servers) {\n for (const t of s.tags ?? []) allTags.add(t);\n }\n return [...allTags].sort().map((t) => ({ value: t, label: t }));\n }, [servers]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n // Auto-expand servers whose tools match the search (so results are visible)\n useEffect(() => {\n if (!filters.search) return;\n const q = filters.search.toLowerCase();\n for (const s of filteredServers) {\n const tools = (s.tool_manifest ?? []) as McpToolManifest[];\n const hasToolMatch = tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n if (hasToolMatch && !expandedIds.has(s.id)) {\n toggleExpand(s.id);\n }\n }\n }, [filters.search, filteredServers]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteServer.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Server Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Server Tools\"\n actions={\n <button\n onClick={() => navigate('/mcp/servers/new')}\n className=\"btn-primary text-xs\"\n >\n Register Server\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name...\"\n />\n <FilterSelect\n label=\"Tag\"\n value={filters.tag}\n onChange={(v) => setFilter('tag', v)}\n options={tagOptions}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'registered', label: 'Registered' },\n { value: 'connected', label: 'Connected' },\n { value: 'error', label: 'Error' },\n { value: 'disconnected', label: 'Disconnected' },\n ]}\n />\n </FilterBar>\n\n <div className={`flex gap-0 ${tryTool ? '' : ''}`}>\n {/* Server list */}\n <div className={`${tryTool ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No servers found\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\" />\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-12\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.id}\n server={server}\n expanded={expandedIds.has(server.id)}\n onToggle={() => toggleExpand(server.id)}\n onEdit={() => navigate(`/mcp/servers/${server.id}`)}\n onDelete={() => setConfirmDelete(server)}\n onTryTool={(tool) =>\n setTryTool({\n serverId: server.id,\n serverName: server.name,\n tool,\n })\n }\n connect={connect}\n disconnect={disconnect}\n visibleTools={filterTools(\n (server.tool_manifest ?? []) as McpToolManifest[],\n filters.search,\n )}\n />\n ))}\n </tbody>\n </table>\n )}\n\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 {/* Test panel — slides in from right */}\n {tryTool && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <ToolTestPanel\n serverId={tryTool.serverId}\n serverName={tryTool.serverName}\n tool={tryTool.tool}\n onClose={() => setTryTool(null)}\n />\n </div>\n )}\n </div>\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete MCP Server\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">{confirmDelete?.name}</span>?\n This will remove the server registration.\n </>\n }\n isPending={deleteServer.isPending}\n error={deleteServer.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","useEffect","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","X","RunAsSelector","e","key","value","Fragment","RotateCcw","Play","JsonViewer","isBuiltIn","row","_a","_b","matchesSearch","server","search","q","t","filterTools","tools","CredentialDot","credentialProviders","useCredentialStatus","ok","ServerRow","expanded","onToggle","onEdit","onDelete","onTryTool","connect","disconnect","visibleTools","allTools","builtin","ChevronRight","tag","StatusBadge","RowActionGroup","RowAction","Unplug","Plug","Pencil","Trash2","McpServersPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","isLoading","useMcpServers","useConnectMcpServer","useDisconnectMcpServer","deleteServer","useDeleteMcpServer","confirmDelete","setConfirmDelete","expandedIds","toggleExpand","useExpandedRows","tryTool","setTryTool","servers","total","tagOptions","useMemo","allTags","s","filteredServers","handleDelete","PageHeader","_","i","FilterBar","FilterInput","v","FilterSelect","EmptyState","StickyPagination","ConfirmDeleteModal"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as x,j as e}from"./index-BwN3KP_L.js";import{c as D,u as C,b as T,a as c}from"./vendor-query-DLp59M9_.js";import{P as M}from"./PageHeader-DVr5Qyzm.js";import{M as R}from"./Modal-_2AbWxJT.js";import{R as J,C as y}from"./constants-BHkpVaqx.js";import{ah as N,j as O,Z as A}from"./vendor-icons-D1DdudfH.js";import"./vendor-react-Co3Y8ikm.js";function F(){return C({queryKey:["maintenance"],queryFn:()=>x("/config/maintenance")})}function I(){const a=T();return D({mutationFn:s=>x("/config/maintenance",{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>{a.invalidateQueries({queryKey:["maintenance"]})}})}function _(){return D({mutationFn:a=>x("/dba/prune",{method:"POST",body:JSON.stringify(a)})})}function h({checked:a,onToggle:s,label:t,hint:n,value:l,onChange:m}){return e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("label",{className:"flex items-center gap-2.5 cursor-pointer w-64 shrink-0",children:[e.jsxDEV("input",{type:"checkbox",checked:a,onChange:r=>s(r.target.checked),className:"w-4 h-4 rounded border-border accent-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:17,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("span",{className:"text-xs text-text-primary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:24,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:25,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:23,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:16,columnNumber:7},this),e.jsxDEV("select",{value:l,onChange:r=>m(r.target.value),disabled:!a,className:`select text-xs w-36 transition-opacity ${a?"":"opacity-40 cursor-not-allowed"}`,children:J.map(r=>e.jsxDEV("option",{value:r.value,children:r.label},r.value,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:35,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:28,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:15,columnNumber:5},this)}function v({checked:a,onChange:s,label:t,description:n}){return e.jsxDEV("label",{className:"flex items-start gap-2.5 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:a,onChange:l=>s(l.target.checked),className:"w-4 h-4 mt-0.5 rounded border-border accent-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:52,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("span",{className:"text-xs text-text-primary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:59,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:60,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:58,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:51,columnNumber:5},this)}function q(){return e.jsxDEV("div",{className:"flex items-start gap-2 mt-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsxDEV(N,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:71,columnNumber:7},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Stripping preserves workflow results and timeline data needed for the execution detail view. Transient jobs are internal bookkeeping that accumulates over time."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:72,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:70,columnNumber:5},this)}const g={pruneJobs:!0,expire:"30 days",engineStreams:!0,engineStreamsExpire:"1 day",workerStreams:!0,workerStreamsExpire:"90 days",stripAttributes:!1,pruneTransient:!1};function S(a){return a.pruneJobs||a.engineStreams||a.workerStreams||a.stripAttributes||a.pruneTransient}function V({fields:a,onChange:s}){const t=(n,l)=>s({...a,[n]:l});return e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_auto] gap-10",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Delete Expired Data"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:121,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV(h,{checked:a.pruneJobs,onToggle:n=>t("pruneJobs",n),label:"Jobs",hint:"Hard-delete completed job rows",value:a.expire,onChange:n=>t("expire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(h,{checked:a.engineStreams,onToggle:n=>t("engineStreams",n),label:"Engine streams",hint:"Internal routing (prune aggressively)",value:a.engineStreamsExpire,onChange:n=>t("engineStreamsExpire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:130,columnNumber:11},this),e.jsxDEV(h,{checked:a.workerStreams,onToggle:n=>t("workerStreams",n),label:"Worker streams",hint:"Activity payloads for execution playback",value:a.workerStreamsExpire,onChange:n=>t("workerStreamsExpire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:135,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:124,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:120,columnNumber:7},this),e.jsxDEV("div",{className:"lg:w-72",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Cleanup"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:145,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV(v,{checked:a.stripAttributes,onChange:n=>t("stripAttributes",n),label:"Strip execution artifacts",description:"Remove step-level detail from completed jobs. Return data and export history are preserved."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:149,columnNumber:11},this),e.jsxDEV(v,{checked:a.pruneTransient,onChange:n=>t("pruneTransient",n),label:"Delete transient jobs",description:"Orphaned jobs without an entity type. Usually safe to remove."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:154,columnNumber:11},this),e.jsxDEV(q,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:159,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:148,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:144,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:118,columnNumber:5},this)}function u({label:a,value:s}){return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-lg font-light text-text-primary",children:s.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:9,columnNumber:7},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:10,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:8,columnNumber:5},this)}function U(){const a=_(),[s,t]=c.useState(g),[n,l]=c.useState(null),[m,r]=c.useState(!1),i=()=>{l(null),a.mutate({expire:s.expire,jobs:s.pruneJobs,engineStreams:s.engineStreams,engineStreamsExpire:s.engineStreamsExpire,workerStreams:s.workerStreams,workerStreamsExpire:s.workerStreamsExpire,attributes:s.stripAttributes,pruneTransient:s.pruneTransient},{onSuccess:d=>{l(d),r(!1)}})};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV(V,{fields:s,onChange:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:45,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:S(s)?"This action permanently deletes data and cannot be undone.":"Select at least one operation to enable pruning."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:49,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!0),disabled:!S(s)||a.isPending,className:"bg-status-error text-white px-4 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity disabled:opacity-40 shrink-0",children:a.isPending?"Pruning...":"Prune Now"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:48,columnNumber:7},this),n&&e.jsxDEV("div",{className:"bg-surface-sunken rounded-md px-4 py-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Results"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:66,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-6",children:[n.jobs!=null&&n.jobs>0&&e.jsxDEV(u,{label:"Jobs deleted",value:n.jobs},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:70,columnNumber:56},this),n.engineStreams!=null&&n.engineStreams>0&&e.jsxDEV(u,{label:"Engine streams",value:n.engineStreams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:71,columnNumber:74},this),n.workerStreams!=null&&n.workerStreams>0&&e.jsxDEV(u,{label:"Worker streams",value:n.workerStreams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:72,columnNumber:74},this),n.streams!=null&&n.engineStreams==null&&n.streams>0&&e.jsxDEV(u,{label:"Streams",value:n.streams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:73,columnNumber:94},this),n.attributes!=null&&n.attributes>0&&e.jsxDEV(u,{label:"Artifacts stripped",value:n.attributes},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:74,columnNumber:68},this),n.transient!=null&&n.transient>0&&e.jsxDEV(u,{label:"Transient deleted",value:n.transient},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:75,columnNumber:66},this),n.marked!=null&&n.marked>0&&e.jsxDEV(u,{label:"Marked pruned",value:n.marked},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:76,columnNumber:60},this),Object.values(n).every(d=>!d||d===0)&&e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Nothing to prune within the selected retention windows."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:78,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:65,columnNumber:9},this),a.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:a.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:85,columnNumber:9},this),e.jsxDEV(R,{open:m,onClose:()=>r(!1),title:"Confirm Prune",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"This will permanently delete data. This action cannot be undone."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:91,columnNumber:11},this),e.jsxDEV("ul",{className:"text-xs text-text-secondary space-y-1 list-disc list-inside",children:[s.pruneJobs&&e.jsxDEV("li",{children:["Delete jobs older than ",s.expire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:95,columnNumber:34},this),s.engineStreams&&e.jsxDEV("li",{children:["Delete engine streams older than ",s.engineStreamsExpire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:96,columnNumber:38},this),s.workerStreams&&e.jsxDEV("li",{children:["Delete worker streams older than ",s.workerStreamsExpire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:97,columnNumber:38},this),s.stripAttributes&&e.jsxDEV("li",{children:"Strip execution artifacts from completed jobs"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:98,columnNumber:40},this),s.pruneTransient&&e.jsxDEV("li",{children:"Delete transient (entity-less) jobs"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:99,columnNumber:39},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:94,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:()=>r(!1),className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:102,columnNumber:13},this),e.jsxDEV("button",{onClick:i,className:"bg-status-error text-white px-3 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity",disabled:a.isPending,children:a.isPending?"Pruning...":"Confirm Prune"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:103,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:101,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:90,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:44,columnNumber:5},this)}function E(a){var r;if(!((r=a==null?void 0:a.rules)!=null&&r.length))return g;const s=a.rules,t=s.find(i=>i.target==="streams"&&i.action==="delete"),n=s.find(i=>i.target==="jobs"&&i.action==="delete"&&i.hasEntity===!1),l=s.find(i=>i.target==="jobs"&&i.action==="prune"&&i.hasEntity===!0),m=s.find(i=>i.target==="jobs"&&i.action==="delete"&&i.pruned===!0);return{pruneJobs:!!m,expire:(m==null?void 0:m.olderThan)??"180 days",engineStreams:!!t,engineStreamsExpire:(t==null?void 0:t.olderThan)??"1 day",workerStreams:!!t,workerStreamsExpire:(t==null?void 0:t.olderThan)??"90 days",stripAttributes:!!l,pruneTransient:!!n}}function W(a){const s=[];return a.engineStreams&&s.push({target:"streams",action:"delete",olderThan:a.engineStreamsExpire}),a.workerStreams&&a.workerStreamsExpire!==a.engineStreamsExpire&&s.push({target:"streams",action:"delete",olderThan:a.workerStreamsExpire}),a.pruneTransient&&s.push({target:"jobs",action:"delete",olderThan:a.expire,hasEntity:!1}),a.stripAttributes&&s.push({target:"jobs",action:"prune",olderThan:a.expire,hasEntity:!0}),a.pruneJobs&&s.push({target:"jobs",action:"delete",olderThan:a.expire,pruned:!0}),s}function j(a){var s;return((s=y.find(t=>t.value===a))==null?void 0:s.label)??""}function $(){const{data:a,isLoading:s}=F(),t=I(),[n,l]=c.useState(""),[m,r]=c.useState(g),[i,d]=c.useState(""),p=c.useCallback(()=>{a!=null&&a.config&&(l(a.config.schedule),r(E(a.config)),d(JSON.stringify({schedule:a.config.schedule,fields:E(a.config)})))},[a]);c.useEffect(()=>{p()},[p]);const k=JSON.stringify({schedule:n,fields:m}),f=i!==""&&k!==i,b=(a==null?void 0:a.active)??!1,P=()=>{const o=W(m);t.mutate({schedule:n,rules:o},{onSuccess:()=>{d(JSON.stringify({schedule:n,fields:m}))}})},w=()=>{p()};return s?e.jsxDEV("div",{className:"animate-pulse h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:99,columnNumber:12},this):e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_auto] gap-10",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:107,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-end gap-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] text-text-tertiary mb-1",children:"Cron Expression"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:112,columnNumber:15},this),e.jsxDEV("input",{type:"text",value:n,onChange:o=>l(o.target.value),placeholder:"0 2 * * *",className:"input text-xs font-mono w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:113,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("div",{children:e.jsxDEV("div",{className:"flex items-center gap-1.5 h-8",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full ${b?"bg-status-success":"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:123,columnNumber:17},this),e.jsxDEV("span",{className:`text-xs ${b?"text-status-success":"text-text-tertiary"}`,children:b?"Active":"Inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:124,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:122,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:121,columnNumber:13},this),j(n)&&e.jsxDEV("p",{className:"text-xs text-text-tertiary h-8 flex items-center",children:j(n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:130,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:110,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-3",children:y.map(o=>e.jsxDEV("button",{type:"button",onClick:()=>l(o.value),className:`px-2.5 py-1 text-[10px] rounded-full transition-colors ${n===o.value?"bg-accent/10 text-accent font-medium":"bg-surface-sunken text-text-tertiary hover:text-text-secondary"}`,children:o.label},o.value,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:137,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:135,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:106,columnNumber:9},this),e.jsxDEV("div",{className:"lg:w-72",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"How It Works"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:154,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-start gap-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsxDEV(N,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:158,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Rules execute sequentially on each cron cycle. Engine streams can be pruned aggressively since they only contain internal routing data. Worker streams should be retained longer to preserve execution playback and input enrichment."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:159,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:157,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:153,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:105,columnNumber:7},this),e.jsxDEV(V,{fields:m,onChange:r},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:169,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[f&&e.jsxDEV("button",{onClick:w,className:"text-[10px] text-text-tertiary hover:text-text-primary transition-colors",children:"Revert changes"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:175,columnNumber:13},this),t.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:t.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:183,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("button",{onClick:P,disabled:!f||!n.trim()||t.isPending,className:"btn-primary text-xs disabled:opacity-40 shrink-0",children:t.isPending?"Saving...":"Save Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:186,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:172,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:103,columnNumber:5},this)}function L({mode:a,onChange:s}){const t=(n,l,m)=>e.jsxDEV("button",{onClick:()=>s(n),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${a===n?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[l,m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:11,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[t("prune",e.jsxDEV(O,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:26,columnNumber:21},this),"Prune Now"),t("schedule",e.jsxDEV(A,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:27,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:25,columnNumber:5},this)}function X(){const[a,s]=c.useState("schedule");return e.jsxDEV("div",{children:[e.jsxDEV(M,{title:"DB Maintenance",actions:e.jsxDEV(L,{mode:a,onChange:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:39,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:37,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-start gap-2 px-4 py-3 mb-8 rounded-md bg-accent/5 border border-accent/10",children:[e.jsxDEV(N,{className:"w-4 h-4 text-accent shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:43,columnNumber:9},this),e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:"Completed process data grows indefinitely. Schedule regular pruning to keep the database lean and queries fast. Worker streams are retained longer than engine streams to preserve execution playback."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:44,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:42,columnNumber:7},this),a==="prune"?e.jsxDEV(U,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:51,columnNumber:27},this):e.jsxDEV($,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:51,columnNumber:46},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:36,columnNumber:5},this)}export{X as MaintenancePage};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{b as x,j as e}from"./index-DnmZbNxk.js";import{c as D,u as C,b as T,a as c}from"./vendor-query-DLp59M9_.js";import{P as M}from"./PageHeader-C5D-G5rp.js";import{M as R}from"./Modal-CaJ0gTEa.js";import{R as J,C as y}from"./constants-BHkpVaqx.js";import{ah as N,j as O,Z as A}from"./vendor-icons-D1DdudfH.js";import"./vendor-react-Co3Y8ikm.js";function F(){return C({queryKey:["maintenance"],queryFn:()=>x("/config/maintenance")})}function I(){const a=T();return D({mutationFn:s=>x("/config/maintenance",{method:"PUT",body:JSON.stringify(s)}),onSuccess:()=>{a.invalidateQueries({queryKey:["maintenance"]})}})}function _(){return D({mutationFn:a=>x("/dba/prune",{method:"POST",body:JSON.stringify(a)})})}function h({checked:a,onToggle:s,label:t,hint:n,value:l,onChange:m}){return e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("label",{className:"flex items-center gap-2.5 cursor-pointer w-64 shrink-0",children:[e.jsxDEV("input",{type:"checkbox",checked:a,onChange:r=>s(r.target.checked),className:"w-4 h-4 rounded border-border accent-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:17,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("span",{className:"text-xs text-text-primary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:24,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:25,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:23,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:16,columnNumber:7},this),e.jsxDEV("select",{value:l,onChange:r=>m(r.target.value),disabled:!a,className:`select text-xs w-36 transition-opacity ${a?"":"opacity-40 cursor-not-allowed"}`,children:J.map(r=>e.jsxDEV("option",{value:r.value,children:r.label},r.value,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:35,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:28,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:15,columnNumber:5},this)}function v({checked:a,onChange:s,label:t,description:n}){return e.jsxDEV("label",{className:"flex items-start gap-2.5 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:a,onChange:l=>s(l.target.checked),className:"w-4 h-4 mt-0.5 rounded border-border accent-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:52,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("span",{className:"text-xs text-text-primary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:59,columnNumber:9},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:60,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:58,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:51,columnNumber:5},this)}function q(){return e.jsxDEV("div",{className:"flex items-start gap-2 mt-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsxDEV(N,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:71,columnNumber:7},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Stripping preserves workflow results and timeline data needed for the execution detail view. Transient jobs are internal bookkeeping that accumulates over time."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:72,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:70,columnNumber:5},this)}const g={pruneJobs:!0,expire:"30 days",engineStreams:!0,engineStreamsExpire:"1 day",workerStreams:!0,workerStreamsExpire:"90 days",stripAttributes:!1,pruneTransient:!1};function S(a){return a.pruneJobs||a.engineStreams||a.workerStreams||a.stripAttributes||a.pruneTransient}function V({fields:a,onChange:s}){const t=(n,l)=>s({...a,[n]:l});return e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_auto] gap-10",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Delete Expired Data"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:121,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV(h,{checked:a.pruneJobs,onToggle:n=>t("pruneJobs",n),label:"Jobs",hint:"Hard-delete completed job rows",value:a.expire,onChange:n=>t("expire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(h,{checked:a.engineStreams,onToggle:n=>t("engineStreams",n),label:"Engine streams",hint:"Internal routing (prune aggressively)",value:a.engineStreamsExpire,onChange:n=>t("engineStreamsExpire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:130,columnNumber:11},this),e.jsxDEV(h,{checked:a.workerStreams,onToggle:n=>t("workerStreams",n),label:"Worker streams",hint:"Activity payloads for execution playback",value:a.workerStreamsExpire,onChange:n=>t("workerStreamsExpire",n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:135,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:124,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:120,columnNumber:7},this),e.jsxDEV("div",{className:"lg:w-72",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Cleanup"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:145,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV(v,{checked:a.stripAttributes,onChange:n=>t("stripAttributes",n),label:"Strip execution artifacts",description:"Remove step-level detail from completed jobs. Return data and export history are preserved."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:149,columnNumber:11},this),e.jsxDEV(v,{checked:a.pruneTransient,onChange:n=>t("pruneTransient",n),label:"Delete transient jobs",description:"Orphaned jobs without an entity type. Usually safe to remove."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:154,columnNumber:11},this),e.jsxDEV(q,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:159,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:148,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:144,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/controls.tsx",lineNumber:118,columnNumber:5},this)}function u({label:a,value:s}){return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-lg font-light text-text-primary",children:s.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:9,columnNumber:7},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:10,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:8,columnNumber:5},this)}function U(){const a=_(),[s,t]=c.useState(g),[n,l]=c.useState(null),[m,r]=c.useState(!1),i=()=>{l(null),a.mutate({expire:s.expire,jobs:s.pruneJobs,engineStreams:s.engineStreams,engineStreamsExpire:s.engineStreamsExpire,workerStreams:s.workerStreams,workerStreamsExpire:s.workerStreamsExpire,attributes:s.stripAttributes,pruneTransient:s.pruneTransient},{onSuccess:d=>{l(d),r(!1)}})};return e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV(V,{fields:s,onChange:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:45,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] text-text-tertiary",children:S(s)?"This action permanently deletes data and cannot be undone.":"Select at least one operation to enable pruning."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:49,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!0),disabled:!S(s)||a.isPending,className:"bg-status-error text-white px-4 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity disabled:opacity-40 shrink-0",children:a.isPending?"Pruning...":"Prune Now"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:48,columnNumber:7},this),n&&e.jsxDEV("div",{className:"bg-surface-sunken rounded-md px-4 py-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Results"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:66,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-6",children:[n.jobs!=null&&n.jobs>0&&e.jsxDEV(u,{label:"Jobs deleted",value:n.jobs},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:70,columnNumber:56},this),n.engineStreams!=null&&n.engineStreams>0&&e.jsxDEV(u,{label:"Engine streams",value:n.engineStreams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:71,columnNumber:74},this),n.workerStreams!=null&&n.workerStreams>0&&e.jsxDEV(u,{label:"Worker streams",value:n.workerStreams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:72,columnNumber:74},this),n.streams!=null&&n.engineStreams==null&&n.streams>0&&e.jsxDEV(u,{label:"Streams",value:n.streams},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:73,columnNumber:94},this),n.attributes!=null&&n.attributes>0&&e.jsxDEV(u,{label:"Artifacts stripped",value:n.attributes},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:74,columnNumber:68},this),n.transient!=null&&n.transient>0&&e.jsxDEV(u,{label:"Transient deleted",value:n.transient},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:75,columnNumber:66},this),n.marked!=null&&n.marked>0&&e.jsxDEV(u,{label:"Marked pruned",value:n.marked},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:76,columnNumber:60},this),Object.values(n).every(d=>!d||d===0)&&e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Nothing to prune within the selected retention windows."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:78,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:65,columnNumber:9},this),a.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:a.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:85,columnNumber:9},this),e.jsxDEV(R,{open:m,onClose:()=>r(!1),title:"Confirm Prune",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"This will permanently delete data. This action cannot be undone."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:91,columnNumber:11},this),e.jsxDEV("ul",{className:"text-xs text-text-secondary space-y-1 list-disc list-inside",children:[s.pruneJobs&&e.jsxDEV("li",{children:["Delete jobs older than ",s.expire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:95,columnNumber:34},this),s.engineStreams&&e.jsxDEV("li",{children:["Delete engine streams older than ",s.engineStreamsExpire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:96,columnNumber:38},this),s.workerStreams&&e.jsxDEV("li",{children:["Delete worker streams older than ",s.workerStreamsExpire]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:97,columnNumber:38},this),s.stripAttributes&&e.jsxDEV("li",{children:"Strip execution artifacts from completed jobs"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:98,columnNumber:40},this),s.pruneTransient&&e.jsxDEV("li",{children:"Delete transient (entity-less) jobs"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:99,columnNumber:39},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:94,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:()=>r(!1),className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:102,columnNumber:13},this),e.jsxDEV("button",{onClick:i,className:"bg-status-error text-white px-3 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity",disabled:a.isPending,children:a.isPending?"Pruning...":"Confirm Prune"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:103,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:101,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:90,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/PruneSection.tsx",lineNumber:44,columnNumber:5},this)}function E(a){var r;if(!((r=a==null?void 0:a.rules)!=null&&r.length))return g;const s=a.rules,t=s.find(i=>i.target==="streams"&&i.action==="delete"),n=s.find(i=>i.target==="jobs"&&i.action==="delete"&&i.hasEntity===!1),l=s.find(i=>i.target==="jobs"&&i.action==="prune"&&i.hasEntity===!0),m=s.find(i=>i.target==="jobs"&&i.action==="delete"&&i.pruned===!0);return{pruneJobs:!!m,expire:(m==null?void 0:m.olderThan)??"180 days",engineStreams:!!t,engineStreamsExpire:(t==null?void 0:t.olderThan)??"1 day",workerStreams:!!t,workerStreamsExpire:(t==null?void 0:t.olderThan)??"90 days",stripAttributes:!!l,pruneTransient:!!n}}function W(a){const s=[];return a.engineStreams&&s.push({target:"streams",action:"delete",olderThan:a.engineStreamsExpire}),a.workerStreams&&a.workerStreamsExpire!==a.engineStreamsExpire&&s.push({target:"streams",action:"delete",olderThan:a.workerStreamsExpire}),a.pruneTransient&&s.push({target:"jobs",action:"delete",olderThan:a.expire,hasEntity:!1}),a.stripAttributes&&s.push({target:"jobs",action:"prune",olderThan:a.expire,hasEntity:!0}),a.pruneJobs&&s.push({target:"jobs",action:"delete",olderThan:a.expire,pruned:!0}),s}function j(a){var s;return((s=y.find(t=>t.value===a))==null?void 0:s.label)??""}function $(){const{data:a,isLoading:s}=F(),t=I(),[n,l]=c.useState(""),[m,r]=c.useState(g),[i,d]=c.useState(""),p=c.useCallback(()=>{a!=null&&a.config&&(l(a.config.schedule),r(E(a.config)),d(JSON.stringify({schedule:a.config.schedule,fields:E(a.config)})))},[a]);c.useEffect(()=>{p()},[p]);const k=JSON.stringify({schedule:n,fields:m}),f=i!==""&&k!==i,b=(a==null?void 0:a.active)??!1,P=()=>{const o=W(m);t.mutate({schedule:n,rules:o},{onSuccess:()=>{d(JSON.stringify({schedule:n,fields:m}))}})},w=()=>{p()};return s?e.jsxDEV("div",{className:"animate-pulse h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:99,columnNumber:12},this):e.jsxDEV("div",{className:"space-y-8",children:[e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_auto] gap-10",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:107,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-end gap-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] text-text-tertiary mb-1",children:"Cron Expression"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:112,columnNumber:15},this),e.jsxDEV("input",{type:"text",value:n,onChange:o=>l(o.target.value),placeholder:"0 2 * * *",className:"input text-xs font-mono w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:113,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("div",{children:e.jsxDEV("div",{className:"flex items-center gap-1.5 h-8",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full ${b?"bg-status-success":"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:123,columnNumber:17},this),e.jsxDEV("span",{className:`text-xs ${b?"text-status-success":"text-text-tertiary"}`,children:b?"Active":"Inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:124,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:122,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:121,columnNumber:13},this),j(n)&&e.jsxDEV("p",{className:"text-xs text-text-tertiary h-8 flex items-center",children:j(n)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:130,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:110,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-3",children:y.map(o=>e.jsxDEV("button",{type:"button",onClick:()=>l(o.value),className:`px-2.5 py-1 text-[10px] rounded-full transition-colors ${n===o.value?"bg-accent/10 text-accent font-medium":"bg-surface-sunken text-text-tertiary hover:text-text-secondary"}`,children:o.label},o.value,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:137,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:135,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:106,columnNumber:9},this),e.jsxDEV("div",{className:"lg:w-72",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"How It Works"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:154,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-start gap-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsxDEV(N,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:158,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Rules execute sequentially on each cron cycle. Engine streams can be pruned aggressively since they only contain internal routing data. Worker streams should be retained longer to preserve execution playback and input enrichment."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:159,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:157,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:153,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:105,columnNumber:7},this),e.jsxDEV(V,{fields:m,onChange:r},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:169,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[f&&e.jsxDEV("button",{onClick:w,className:"text-[10px] text-text-tertiary hover:text-text-primary transition-colors",children:"Revert changes"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:175,columnNumber:13},this),t.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:t.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:183,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("button",{onClick:P,disabled:!f||!n.trim()||t.isPending,className:"btn-primary text-xs disabled:opacity-40 shrink-0",children:t.isPending?"Saving...":"Save Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:186,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:172,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/ScheduleSection.tsx",lineNumber:103,columnNumber:5},this)}function L({mode:a,onChange:s}){const t=(n,l,m)=>e.jsxDEV("button",{onClick:()=>s(n),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${a===n?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[l,m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:11,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[t("prune",e.jsxDEV(O,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:26,columnNumber:21},this),"Prune Now"),t("schedule",e.jsxDEV(A,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:27,columnNumber:24},this),"Schedule")]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:25,columnNumber:5},this)}function X(){const[a,s]=c.useState("schedule");return e.jsxDEV("div",{children:[e.jsxDEV(M,{title:"DB Maintenance",actions:e.jsxDEV(L,{mode:a,onChange:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:39,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:37,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-start gap-2 px-4 py-3 mb-8 rounded-md bg-accent/5 border border-accent/10",children:[e.jsxDEV(N,{className:"w-4 h-4 text-accent shrink-0 mt-0.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:43,columnNumber:9},this),e.jsxDEV("p",{className:"text-xs text-text-secondary leading-relaxed",children:"Completed process data grows indefinitely. Schedule regular pruning to keep the database lean and queries fast. Worker streams are retained longer than engine streams to preserve execution playback."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:44,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:42,columnNumber:7},this),a==="prune"?e.jsxDEV(U,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:51,columnNumber:27},this):e.jsxDEV($,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:51,columnNumber:46},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/maintenance/MaintenancePage.tsx",lineNumber:36,columnNumber:5},this)}export{X as MaintenancePage};
|
|
2
|
+
//# sourceMappingURL=index-D-oCWCAS.js.map
|