@hotmeshio/long-tail 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/escalations/resolve.js +1 -0
- package/build/api/files.d.ts +4 -0
- package/build/api/files.js +14 -0
- package/build/api/workflows/config.js +5 -0
- package/build/index.d.ts +0 -1
- package/build/index.js +1 -4
- package/build/lib/db/schemas/002_seed.sql +3 -81
- package/build/lib/storage/mime.js +20 -0
- package/build/routes/file-browser.js +30 -0
- package/build/routes/files.js +20 -18
- package/build/services/config/sql.d.ts +3 -0
- package/build/services/config/sql.js +15 -1
- package/build/services/config/write.d.ts +6 -0
- package/build/services/config/write.js +64 -0
- package/build/services/cron/index.d.ts +5 -0
- package/build/services/cron/index.js +30 -0
- package/build/services/insight/index.js +3 -0
- package/build/services/interceptor/activities/task.d.ts +1 -0
- package/build/services/interceptor/activities/task.js +2 -1
- package/build/services/interceptor/activities/workflow.js +1 -0
- package/build/services/interceptor/index.js +4 -4
- package/build/services/interceptor/lifecycle.js +1 -1
- package/build/services/mcp/db.d.ts +17 -0
- package/build/services/mcp/db.js +50 -0
- package/build/services/mcp/sql.d.ts +4 -1
- package/build/services/mcp/sql.js +9 -2
- package/build/services/oauth/index.js +4 -1
- package/build/services/oauth/providers/google.js +7 -2
- package/build/services/orchestrator/index.js +5 -0
- package/build/services/task/crud.js +1 -0
- package/build/services/task/sql.d.ts +1 -1
- package/build/services/task/sql.js +2 -2
- package/build/services/task/types.d.ts +2 -0
- package/build/services/workers/registry.js +3 -1
- package/build/services/workflow-invocation.js +8 -1
- package/build/start/workers.d.ts +2 -1
- package/build/start/workers.js +66 -6
- package/build/system/index.d.ts +12 -10
- package/build/system/index.js +240 -67
- package/build/system/mcp-servers/playwright/schemas.d.ts +12 -12
- package/build/system/seed/index.d.ts +0 -7
- package/build/system/seed/index.js +5 -46
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/startup.d.ts +59 -2
- package/dashboard/dist/assets/AdminDashboard-CsTOErp1.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-Bprul9Eb.js.map → AdminDashboard-CsTOErp1.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BqQA3IJp.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-H_z5mC10.js.map → AvailableEscalationsPage-BqQA3IJp.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-C2xR1xay.js +2 -0
- package/dashboard/dist/assets/{BotPicker-DcvILNUf.js.map → BotPicker-C2xR1xay.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-CRtHQsAv.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-BWPbzgEe.js.map → CollapsibleSection-CRtHQsAv.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-Cy6KVLfC.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CRED8hvk.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js +2 -0
- package/dashboard/dist/assets/CredentialsPage-C7XT1bnO.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-BABUv1V2.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-eOk2EqQ5.js.map → CustomDurationPicker-BABUv1V2.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-D3-wSEf0.js +2 -0
- package/dashboard/dist/assets/{DataTable-bd2PTBJd.js.map → DataTable-D3-wSEf0.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-DHKmMqRA.js +2 -0
- package/dashboard/dist/assets/DropZone-DHKmMqRA.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-DrJif03B.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BGo8vyus.js.map → ElapsedCell-DrJif03B.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js.map +1 -0
- package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js +2 -0
- package/dashboard/dist/assets/EscalationsOverview-H6CwfeR-.js.map +1 -0
- package/dashboard/dist/assets/EventTable-Dh3_9DAY.js +2 -0
- package/dashboard/dist/assets/{EventTable-CmFhswLW.js.map → EventTable-Dh3_9DAY.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
- package/dashboard/dist/assets/{FilterBar-BQNzsd3A.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-OWOn-HiC.js.map → ListToolbar-CyEkulVR.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-ChLa6Gl7.js +2 -0
- package/dashboard/dist/assets/{McpOverview-OkEzvClD.js.map → McpOverview-ChLa6Gl7.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-D2DmDFPu.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-ERVuNEEK.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-DMeiG4i_.js.map → McpRunDetailPage-ERVuNEEK.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +1 -0
- package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
- package/dashboard/dist/assets/{Modal-Dir9Rlnx.js.map → Modal-DEODGeqx.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-CJm_BTPU.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-OqWC6Azy.js.map → OperatorDashboard-CJm_BTPU.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js +2 -0
- package/dashboard/dist/assets/PageHeader-B-SN5GZ2.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-BZ3AGT5s.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-C7D5d_HY.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-vfnCDyQK.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-DZIP6grw.js.map → ProcessDetailPage-vfnCDyQK.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-DcAN6AJK.js.map +1 -0
- package/dashboard/dist/assets/RolePill-BhVC0cc3.js +2 -0
- package/dashboard/dist/assets/{RolePill-D6nMxMvp.js.map → RolePill-BhVC0cc3.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DYSt2aAr.js +2 -0
- package/dashboard/dist/assets/RolesPage-DYSt2aAr.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
- package/dashboard/dist/assets/{RowActions-JqgAB0p3.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-KAlKtitB.js.map → RunAsSelector-CD7_Dmb0.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
- package/dashboard/dist/assets/{StatCard-B-WLhOaH.js.map → StatCard-DlgF0CJC.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js.map +1 -0
- package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
- package/dashboard/dist/assets/{StepIndicator-D9Xvdf18.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-CJHMzYJj.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +1 -0
- package/dashboard/dist/assets/TagInput-DftaRHDV.js +2 -0
- package/dashboard/dist/assets/{TagInput-DcPnUnSJ.js.map → TagInput-DftaRHDV.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-BoA-cfwW.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js +2 -0
- package/dashboard/dist/assets/TaskQueuePill-Ce8KlXtR.js.map +1 -0
- package/dashboard/dist/assets/TasksListPage-g6XIbhju.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-DeewV4Gp.js.map → TasksListPage-g6XIbhju.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-BihIwEbB.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-DJZq-e4R.js.map → TimeAgo-BihIwEbB.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-GOFcvE-i.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-Dx5uwGfS.js.map → TimestampCell-GOFcvE-i.js.map} +1 -1
- package/dashboard/dist/assets/UserName-CmMVt4vS.js +2 -0
- package/dashboard/dist/assets/{UserName-CnGk7MgL.js.map → UserName-CmMVt4vS.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-soRFz_30.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-CPQ0fIwf.js.map → WorkflowExecutionPage-soRFz_30.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-BrD5d1AG.js.map → WorkflowPill-DUDDyBsj.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-z3Ztiz1y.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-lBp2E6rN.js.map → WorkflowsOverview-z3Ztiz1y.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +1 -0
- package/dashboard/dist/assets/{bots-fc_O_YIq.js → bots-BZPXDh_y.js} +2 -2
- package/dashboard/dist/assets/{bots-fc_O_YIq.js.map → bots-BZPXDh_y.js.map} +1 -1
- package/dashboard/dist/assets/escalation-DBUIq1Z4.js +2 -0
- package/dashboard/dist/assets/{escalation-BYhLYHBz.js.map → escalation-DBUIq1Z4.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-DjJyuC1g.js.map → escalation-columns-DL4zsR8Y.js.map} +1 -1
- package/dashboard/dist/assets/helpers-D50KFFkI.js +2 -0
- package/dashboard/dist/assets/{helpers-CQG3Rh2y.js.map → helpers-D50KFFkI.js.map} +1 -1
- package/dashboard/dist/assets/index-B-ioA6yv.js +2 -0
- package/dashboard/dist/assets/index-B-ioA6yv.js.map +1 -0
- package/dashboard/dist/assets/index-B-jzKfuv.js +2 -0
- package/dashboard/dist/assets/index-B-jzKfuv.js.map +1 -0
- package/dashboard/dist/assets/index-BMpoMc4A.js +2 -0
- package/dashboard/dist/assets/{index-D51PaQZY.js.map → index-BMpoMc4A.js.map} +1 -1
- package/dashboard/dist/assets/index-BU04qgJt.js +15 -0
- package/dashboard/dist/assets/index-BU04qgJt.js.map +1 -0
- package/dashboard/dist/assets/index-BUjxYyxc.js +63 -0
- package/dashboard/dist/assets/index-BUjxYyxc.js.map +1 -0
- package/dashboard/dist/assets/index-BpoHVMV7.js +2 -0
- package/dashboard/dist/assets/index-BpoHVMV7.js.map +1 -0
- package/dashboard/dist/assets/index-CEnDYJOO.js +2 -0
- package/dashboard/dist/assets/index-CEnDYJOO.js.map +1 -0
- package/dashboard/dist/assets/index-CbuH92vk.js +6 -0
- package/dashboard/dist/assets/index-CbuH92vk.js.map +1 -0
- package/dashboard/dist/assets/index-D9_hZmsW.js +5 -0
- package/dashboard/dist/assets/{index-KYpLvJKB.js.map → index-D9_hZmsW.js.map} +1 -1
- package/dashboard/dist/assets/index-DrouIN-M.js +2 -0
- package/dashboard/dist/assets/{index-DR4qQvlW.js.map → index-DrouIN-M.js.map} +1 -1
- package/dashboard/dist/assets/index-DzICLMI7.js +2 -0
- package/dashboard/dist/assets/{index-DNtXXy1o.js.map → index-DzICLMI7.js.map} +1 -1
- package/dashboard/dist/assets/index-efS5gKpv.css +1 -0
- package/dashboard/dist/assets/index-qT78AZDq.js +2 -0
- package/dashboard/dist/assets/index-qT78AZDq.js.map +1 -0
- package/dashboard/dist/assets/mcp-D0GrHRFe.js +2 -0
- package/dashboard/dist/assets/{mcp-D2XfRh8v.js.map → mcp-D0GrHRFe.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js → mcp-query-DC5woQn5.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CIx_mIC7.js.map → mcp-query-DC5woQn5.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js → mcp-runs-CsoVQoPB.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-C9_J4LIH.js.map → mcp-runs-CsoVQoPB.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-unpIb4gX.js +2 -0
- package/dashboard/dist/assets/{namespaces-BwMljx6f.js.map → namespaces-unpIb4gX.js.map} +1 -1
- package/dashboard/dist/assets/{roles-Bd_sTV6I.js → roles--kBaFljg.js} +2 -2
- package/dashboard/dist/assets/{roles-Bd_sTV6I.js.map → roles--kBaFljg.js.map} +1 -1
- package/dashboard/dist/assets/settings-B96YkawY.js +2 -0
- package/dashboard/dist/assets/{settings-BCb8eFyA.js.map → settings-B96YkawY.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-Bq54qGGq.js → tasks-D_1NCfOZ.js} +2 -2
- package/dashboard/dist/assets/{tasks-Bq54qGGq.js.map → tasks-D_1NCfOZ.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-BTbGf536.js → useEventHooks-BPjEkCpD.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-BTbGf536.js.map → useEventHooks-BPjEkCpD.js.map} +1 -1
- package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
- package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js → useYamlActivityEvents-D3RQjfzo.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CsYP09W5.js.map → useYamlActivityEvents-D3RQjfzo.js.map} +1 -1
- package/dashboard/dist/assets/{users-BTBhafGc.js → users-e2oatvoj.js} +2 -2
- package/dashboard/dist/assets/{users-BTBhafGc.js.map → users-e2oatvoj.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CWl44VA6.js → vendor-icons-BkK55L-1.js} +103 -88
- package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
- package/dashboard/dist/assets/{workflows-BkzA4ahe.js → workflows-D6diL54s.js} +2 -2
- package/dashboard/dist/assets/{workflows-BkzA4ahe.js.map → workflows-D6diL54s.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js → yaml-workflows-CAKU7LUu.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Cs0EYp0F.js.map → yaml-workflows-CAKU7LUu.js.map} +1 -1
- package/dashboard/dist/index.html +5 -5
- package/docs/dashboard.md +233 -65
- package/package.json +3 -2
- package/build/examples/external-mcp-server/server.d.ts +0 -17
- package/build/examples/external-mcp-server/server.js +0 -116
- package/build/examples/index.d.ts +0 -2
- package/build/examples/index.js +0 -7
- package/build/examples/seed-data.d.ts +0 -55
- package/build/examples/seed-data.js +0 -161
- package/build/examples/seed.d.ts +0 -5
- package/build/examples/seed.js +0 -132
- package/build/examples/types/envelopes.d.ts +0 -69
- package/build/examples/types/envelopes.js +0 -8
- package/build/examples/types/index.d.ts +0 -10
- package/build/examples/types/index.js +0 -9
- package/build/examples/types/resolvers.d.ts +0 -27
- package/build/examples/types/resolvers.js +0 -9
- package/build/examples/workers.d.ts +0 -10
- package/build/examples/workers.js +0 -59
- package/build/examples/workflows/assembly-line/activities.d.ts +0 -28
- package/build/examples/workflows/assembly-line/activities.js +0 -53
- package/build/examples/workflows/assembly-line/index.d.ts +0 -17
- package/build/examples/workflows/assembly-line/index.js +0 -60
- package/build/examples/workflows/assembly-line/iterator.d.ts +0 -12
- package/build/examples/workflows/assembly-line/iterator.js +0 -54
- package/build/examples/workflows/assembly-line/reverter.d.ts +0 -18
- package/build/examples/workflows/assembly-line/reverter.js +0 -89
- package/build/examples/workflows/assembly-line/types.d.ts +0 -25
- package/build/examples/workflows/assembly-line/types.js +0 -8
- package/build/examples/workflows/assembly-line/worker.d.ts +0 -13
- package/build/examples/workflows/assembly-line/worker.js +0 -81
- package/build/examples/workflows/basic-echo/activities.d.ts +0 -20
- package/build/examples/workflows/basic-echo/activities.js +0 -55
- package/build/examples/workflows/basic-echo/index.d.ts +0 -14
- package/build/examples/workflows/basic-echo/index.js +0 -66
- package/build/examples/workflows/basic-signal/activities.d.ts +0 -17
- package/build/examples/workflows/basic-signal/activities.js +0 -18
- package/build/examples/workflows/basic-signal/index.d.ts +0 -17
- package/build/examples/workflows/basic-signal/index.js +0 -116
- package/build/examples/workflows/kitchen-sink/activities.d.ts +0 -40
- package/build/examples/workflows/kitchen-sink/activities.js +0 -46
- package/build/examples/workflows/kitchen-sink/index.d.ts +0 -22
- package/build/examples/workflows/kitchen-sink/index.js +0 -123
- package/build/examples/workflows/review-content/activities.d.ts +0 -10
- package/build/examples/workflows/review-content/activities.js +0 -44
- package/build/examples/workflows/review-content/index.d.ts +0 -10
- package/build/examples/workflows/review-content/index.js +0 -95
- package/build/examples/workflows/review-content/types.d.ts +0 -28
- package/build/examples/workflows/review-content/types.js +0 -2
- package/build/lib/db/schemas/schemas/001_schema.sql +0 -485
- package/build/lib/db/schemas/schemas/002_seed.sql +0 -92
- package/build/system/seed/server-definitions.d.ts +0 -3210
- package/build/system/seed/server-definitions.js +0 -232
- package/dashboard/dist/assets/AdminDashboard-Bprul9Eb.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-H_z5mC10.js +0 -2
- package/dashboard/dist/assets/BotPicker-DcvILNUf.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-BWPbzgEe.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-Cy6KVLfC.js +0 -2
- package/dashboard/dist/assets/CopyableId-CRED8hvk.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-BUdvxiE3.js.map +0 -1
- package/dashboard/dist/assets/CustomDurationPicker-eOk2EqQ5.js +0 -2
- package/dashboard/dist/assets/DataTable-bd2PTBJd.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-BGo8vyus.js +0 -2
- package/dashboard/dist/assets/EmptyState-BygtU-Rh.js +0 -2
- package/dashboard/dist/assets/EmptyState-BygtU-Rh.js.map +0 -1
- package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-DUEcN5MP.js.map +0 -1
- package/dashboard/dist/assets/EventTable-CmFhswLW.js +0 -2
- package/dashboard/dist/assets/FilterBar-BQNzsd3A.js +0 -2
- package/dashboard/dist/assets/ListToolbar-OWOn-HiC.js +0 -2
- package/dashboard/dist/assets/McpOverview-OkEzvClD.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-C6Ih5sC_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-BAuOf5TL.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-DMeiG4i_.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-CG3cNJh8.js.map +0 -1
- package/dashboard/dist/assets/Modal-Dir9Rlnx.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-OqWC6Azy.js +0 -2
- package/dashboard/dist/assets/PageHeader-FJIemmrC.js +0 -2
- package/dashboard/dist/assets/PageHeader-FJIemmrC.js.map +0 -1
- package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-Br5y9qNO.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-C7D5d_HY.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-DZIP6grw.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-BQoPYkeB.js.map +0 -1
- package/dashboard/dist/assets/RolePill-D6nMxMvp.js +0 -2
- package/dashboard/dist/assets/RolesPage-CwLnJFhy.js +0 -2
- package/dashboard/dist/assets/RolesPage-CwLnJFhy.js.map +0 -1
- package/dashboard/dist/assets/RowActions-JqgAB0p3.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-KAlKtitB.js +0 -2
- package/dashboard/dist/assets/StatCard-B-WLhOaH.js +0 -2
- package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js +0 -2
- package/dashboard/dist/assets/StatusBadge-DVCf2ncM.js.map +0 -1
- package/dashboard/dist/assets/StepIndicator-D9Xvdf18.js +0 -2
- package/dashboard/dist/assets/StickyPagination-CJHMzYJj.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-YiXPDyEL.js.map +0 -1
- package/dashboard/dist/assets/TagInput-DcPnUnSJ.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DftmYWD7.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js +0 -2
- package/dashboard/dist/assets/TaskQueuePill-BzduBqwy.js.map +0 -1
- package/dashboard/dist/assets/TasksListPage-DeewV4Gp.js +0 -2
- package/dashboard/dist/assets/TimeAgo-DJZq-e4R.js +0 -2
- package/dashboard/dist/assets/TimestampCell-Dx5uwGfS.js +0 -2
- package/dashboard/dist/assets/UserName-CnGk7MgL.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-CPQ0fIwf.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-BrD5d1AG.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-BzjhABZP.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-lBp2E6rN.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-C_MkAp2i.js.map +0 -1
- package/dashboard/dist/assets/escalation-BYhLYHBz.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DjJyuC1g.js +0 -2
- package/dashboard/dist/assets/helpers-CQG3Rh2y.js +0 -2
- package/dashboard/dist/assets/index-2nBhR7Dg.js +0 -2
- package/dashboard/dist/assets/index-2nBhR7Dg.js.map +0 -1
- package/dashboard/dist/assets/index-4IUoh_hd.js +0 -2
- package/dashboard/dist/assets/index-4IUoh_hd.js.map +0 -1
- package/dashboard/dist/assets/index-B2CqPzLK.js +0 -2
- package/dashboard/dist/assets/index-B2CqPzLK.js.map +0 -1
- package/dashboard/dist/assets/index-B78xalb4.js +0 -2
- package/dashboard/dist/assets/index-B78xalb4.js.map +0 -1
- package/dashboard/dist/assets/index-BI8r69O_.js +0 -2
- package/dashboard/dist/assets/index-BI8r69O_.js.map +0 -1
- package/dashboard/dist/assets/index-C5TUqJu0.css +0 -1
- package/dashboard/dist/assets/index-CUqCBBZG.js +0 -6
- package/dashboard/dist/assets/index-CUqCBBZG.js.map +0 -1
- package/dashboard/dist/assets/index-D51PaQZY.js +0 -2
- package/dashboard/dist/assets/index-DNtXXy1o.js +0 -2
- package/dashboard/dist/assets/index-DR4qQvlW.js +0 -2
- package/dashboard/dist/assets/index-Dh0PCbR-.js +0 -15
- package/dashboard/dist/assets/index-Dh0PCbR-.js.map +0 -1
- package/dashboard/dist/assets/index-KYpLvJKB.js +0 -5
- package/dashboard/dist/assets/index-sNrqYt0Q.js +0 -281
- package/dashboard/dist/assets/index-sNrqYt0Q.js.map +0 -1
- package/dashboard/dist/assets/mcp-D2XfRh8v.js +0 -2
- package/dashboard/dist/assets/namespaces-BwMljx6f.js +0 -2
- package/dashboard/dist/assets/settings-BCb8eFyA.js +0 -2
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,S as D}from"./index-sNrqYt0Q.js";import{a as p}from"./vendor-query-DLp59M9_.js";import{l as J,n as L,o as R,u as A}from"./yaml-workflows-Cs0EYp0F.js";import{a as $,d as z}from"./useYamlActivityEvents-CsYP09W5.js";import{u as F}from"./useFilterParams-CGRYFw_A.js";import{u as q}from"./useExpandedRows-Cg9iq6Vy.js";import{P}from"./PageHeader-FJIemmrC.js";import{F as B,a as U,b as C}from"./FilterBar-BQNzsd3A.js";import{E as H}from"./EmptyState-BygtU-Rh.js";import{b as T,R as _}from"./RunAsSelector-KAlKtitB.js";import{X as Y,_ as X,a6 as G,P as O,k as K,W as Q,$ as Z,b as ee}from"./vendor-icons-CWl44VA6.js";import{L as se,c as oe}from"./vendor-react-Co3Y8ikm.js";import{d as W,C as re}from"./helpers-CQG3Rh2y.js";import{S as M}from"./StatusBadge-DVCf2ncM.js";import"./BotPicker-DcvILNUf.js";import"./bots-fc_O_YIq.js";import"./TimeAgo-DJZq-e4R.js";const S={mcp:{border:"border-blue-500",text:"text-blue-500",icon:"MCP"},db:{border:"border-blue-500",text:"text-blue-500",icon:"DB"},llm:{border:"border-violet-500",text:"text-violet-500",icon:"LLM"},transform:{border:"border-emerald-500",text:"text-emerald-500",icon:"Map"}};function te({steps:o,manifest:l,isComplete:r}){const t=l.filter(s=>s.type==="worker"),c=t.length,n=t.map(s=>{const u=o.find(d=>d.activityId===s.activity_id),m=s.tool_source||"mcp",N=S[m]||S.mcp;return{activityId:s.activity_id,title:s.title||s.mcp_tool_name||s.activity_id,toolName:s.mcp_tool_name,colors:N,status:(u==null?void 0:u.status)||"pending",error:u==null?void 0:u.error}});return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-3",children:r?`All ${c} steps completed`:`Running step ${n.filter(s=>s.status==="completed").length+1} of ${c}...`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-0",children:n.map((s,u)=>{const m=u===n.length-1;return e.jsxDEV("div",{className:"flex items-stretch gap-2",children:[e.jsxDEV("div",{className:"flex flex-col items-center w-4 shrink-0",children:[e.jsxDEV("span",{className:`w-2.5 h-2.5 rounded-full shrink-0 border-2 transition-colors ${s.status==="completed"?"bg-status-success border-status-success":s.status==="running"?`${s.colors.border} bg-transparent animate-pulse`:s.status==="failed"?"bg-status-error border-status-error":"bg-surface-sunken border-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:52,columnNumber:17},this),!m&&e.jsxDEV("span",{className:`w-px flex-1 transition-colors ${s.status==="completed"?"bg-status-success/30":"bg-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:59,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:51,columnNumber:15},this),e.jsxDEV("div",{className:m?"":"pb-3",children:[e.jsxDEV("p",{className:`text-[11px] font-medium ${s.status==="running"?"text-text-primary":s.status==="completed"?"text-text-secondary":s.status==="failed"?"text-status-error":"text-text-tertiary"}`,children:s.title},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:65,columnNumber:17},this),s.toolName&&e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:s.toolName},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:72,columnNumber:19},this),s.error&&e.jsxDEV("p",{className:"text-[9px] text-status-error mt-0.5",children:s.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:75,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:64,columnNumber:15},this)]},s.activityId,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:50,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:46,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:40,columnNumber:5},this)}function ae({workflow:o,onClose:l}){const r=J(),[t,c]=p.useState(!1),[n,s]=p.useState({}),[u,m]=p.useState(""),[N,d]=p.useState(""),[f,w]=p.useState(""),[x,v]=p.useState(null),[k,g]=p.useState(null),{steps:j,isComplete:a}=$(x);p.useEffect(()=>{v(null),g(null),d(""),r.reset();const b=T(o.input_schema);s(b),m(JSON.stringify(b,null,2)),c(!1)},[o.id]),p.useEffect(()=>{if(a&&x){const b=x,h=setTimeout(()=>{g({jobId:b}),v(null)},800);return()=>clearTimeout(h)}},[a,x]);const i=()=>{if(!t)m(JSON.stringify(n,null,2));else try{s(JSON.parse(u))}catch{}c(!t)},y=async()=>{d(""),g(null);let b;if(t)try{b=JSON.parse(u)}catch{d("Invalid JSON");return}else b={...n};try{const h=await r.mutateAsync({id:o.id,data:b,sync:!1,...f?{execute_as:f}:{}});h.job_id&&v(h.job_id)}catch{}},V=!!x,I=o.app_id||"longtail";return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:o.app_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:161,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:162,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:160,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>{V||l()},className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(Y,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:165,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:164,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:159,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:V?e.jsxDEV(te,{steps:j,manifest:o.activity_manifest,isComplete:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:172,columnNumber:11},this):k?e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("svg",{className:"w-4 h-4 text-status-success",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsxDEV("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:177,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:176,columnNumber:15},this),e.jsxDEV("p",{className:"text-xs font-medium text-status-success",children:"Workflow completed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:179,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:175,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV(se,{to:`/mcp/executions/${encodeURIComponent(k.jobId)}?namespace=${encodeURIComponent(I)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:186,columnNumber:17},this)," View execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:182,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>g(null),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(G,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:192,columnNumber:17},this)," Run again"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:188,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:181,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:174,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(_,{selected:f,onChange:w},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:198,columnNumber:13},this),o.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:201,columnNumber:15},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:207,columnNumber:17},this),e.jsxDEV("button",{onClick:i,className:"text-[10px] text-accent hover:underline",children:t?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:208,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:206,columnNumber:15},this),t?e.jsxDEV("textarea",{value:u,onChange:b=>m(b.target.value),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",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:214,columnNumber:17},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(n).map(([b,h])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:b},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:225,columnNumber:23},this),typeof h=="boolean"?e.jsxDEV("select",{value:String(h),onChange:E=>s({...n,[b]:E.target.value==="true"}),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",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:232,columnNumber:27},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:233,columnNumber:27},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:227,columnNumber:25},this):typeof h=="object"?e.jsxDEV("textarea",{value:JSON.stringify(h,null,2),onChange:E=>{try{s({...n,[b]:JSON.parse(E.target.value)})}catch{}},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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:236,columnNumber:25},this):e.jsxDEV("input",{type:typeof h=="number"?"number":"text",value:String(h??""),onChange:E=>s({...n,[b]:typeof h=="number"?Number(E.target.value):E.target.value}),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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:242,columnNumber:25},this)]},b,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:224,columnNumber:21},this)),Object.keys(n).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:252,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:222,columnNumber:17},this),N&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:N},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:256,columnNumber:29},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:205,columnNumber:13},this),r.isError&&e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:r.error instanceof Error?r.error.message:"Invocation failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:261,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:260,columnNumber:15},this),e.jsxDEV("button",{onClick:y,disabled:r.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:r.isPending?"Starting...":e.jsxDEV(e.Fragment,{children:[e.jsxDEV(O,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:61},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:271,columnNumber:59},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:266,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:197,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:170,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/WorkflowTestPanel.tsx",lineNumber:157,columnNumber:5},this)}function le({cronInput:o,setCronInput:l,setCron:r,hasCronSchedule:t,onSave:c,onClear:n}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV(D,{className:"mb-3",children:"Schedule"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:24,columnNumber:9},this),e.jsxDEV("div",{className:"flex gap-3 items-start",children:[e.jsxDEV("div",{className:"flex-1",children:[e.jsxDEV("input",{type:"text",value:o,onChange:s=>{l(s.target.value),r.reset()},placeholder:"0 */6 * * *",className:"input font-mono text-sm w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:27,columnNumber:13},this),o.trim()&&W(o.trim())&&e.jsxDEV("p",{className:"text-xs text-text-secondary mt-1.5",children:W(o.trim())},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:38,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:26,columnNumber:11},this),e.jsxDEV("button",{onClick:c,disabled:r.isPending,className:"btn-primary text-xs shrink-0",children:r.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:43,columnNumber:11},this),t&&e.jsxDEV("button",{onClick:n,disabled:r.isPending,className:"btn-ghost text-xs text-status-error shrink-0",children:"Clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:51,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:25,columnNumber:9},this),r.isSuccess&&e.jsxDEV("p",{className:"text-[10px] text-status-success mt-2",children:"Schedule updated"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:62,columnNumber:11},this),r.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-2",children:r.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken rounded-lg p-4",children:[e.jsxDEV(D,{className:"mb-2",children:"Common Patterns"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:71,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5",children:re.map(([s,u])=>e.jsxDEV("button",{type:"button",onClick:()=>{l(s),r.reset()},className:"flex items-center gap-2 text-left py-0.5 group",children:[e.jsxDEV("code",{className:"font-mono text-[11px] text-accent group-hover:text-accent-hover",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:83,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:u},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:86,columnNumber:15},this)]},s,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:74,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:72,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:70,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/cron/CronScheduleEditor.tsx",lineNumber:22,columnNumber:5},this)}function ne({workflow:o,onClose:l}){const r=L(),t=R(),[c,n]=p.useState(""),[s,u]=p.useState(""),[m,N]=p.useState(!1),[d,f]=p.useState({}),[w,x]=p.useState("{}");p.useEffect(()=>{n(o.cron_schedule??""),u(o.execute_as??""),r.reset(),t.reset();const a=o.cron_envelope||{},i=Object.keys(a).length>0?a:T(o.input_schema);f(i),x(JSON.stringify(i,null,2)),N(!1)},[o.id]);const v=()=>{if(!m)x(JSON.stringify(d,null,2));else try{f(JSON.parse(w))}catch{}N(!m)},k=()=>{let a;if(m)try{a=JSON.parse(w)}catch{return}else a={...d};r.mutate({id:o.id,cron_schedule:c.trim(),cron_envelope:Object.keys(a).length>0?a:null,execute_as:s||null})},g=()=>{t.mutate(o.id,{onSuccess:()=>{n("")}})},j={isPending:r.isPending||t.isPending,isSuccess:r.isSuccess||t.isSuccess,error:r.error||t.error,reset:()=>{r.reset(),t.reset()}};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:"Cron Schedule"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:87,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:86,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(Y,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:90,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:85,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(_,{selected:s,onChange:u},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:97,columnNumber:9},this),e.jsxDEV(le,{cronInput:c,setCronInput:n,setCron:j,hasCronSchedule:!!o.cron_schedule,onSave:k,onClear:g},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:99,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV(D,{children:"Default Input"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("button",{onClick:v,className:"text-[10px] text-accent hover:underline",children:m?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:112,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:110,columnNumber:11},this),m?e.jsxDEV("textarea",{value:w,onChange:a=>x(a.target.value),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",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:118,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[200px] overflow-y-auto",children:[Object.entries(d).map(([a,i])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:129,columnNumber:19},this),typeof i=="boolean"?e.jsxDEV("select",{value:String(i),onChange:y=>f({...d,[a]:y.target.value==="true"}),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",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:136,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:137,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:131,columnNumber:21},this):typeof i=="object"?e.jsxDEV("textarea",{value:JSON.stringify(i,null,2),onChange:y=>{try{f({...d,[a]:JSON.parse(y.target.value)})}catch{}},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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:140,columnNumber:21},this):e.jsxDEV("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:y=>f({...d,[a]:typeof i=="number"?Number(y.target.value):y.target.value}),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"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:146,columnNumber:21},this)]},a,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:128,columnNumber:17},this)),Object.keys(d).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:156,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:96,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/CronPanel.tsx",lineNumber:83,columnNumber:5},this)}function ie(o){const l=new Map;for(const r of o){const t=l.get(r.app_id)??[];t.push(r),l.set(r.app_id,t)}return[...l.entries()].map(([r,t])=>{var N;const c={active:0,deployed:1,draft:2,archived:3},n=t.reduce((d,f)=>(c[f.status]??9)<(c[d]??9)?f.status:d,t[0].status),s=t.reduce((d,f)=>f.updated_at>d?f.updated_at:d,t[0].updated_at),u=t.reduce((d,f)=>{const w=parseInt(f.app_version||"0",10);return w>d?w:d},0),m=((N=t.find(d=>d.set_id))==null?void 0:N.set_id)||null;return{appId:r,workflows:t,toolCount:t.length,status:n,updatedAt:s,appVersion:String(u),setId:m}})}function me(o,l){if(!l)return!0;const r=l.toLowerCase();return o.appId.toLowerCase().includes(r)?!0:o.workflows.some(t=>{var c,n;return t.graph_topic.toLowerCase().includes(r)||((c=t.name)==null?void 0:c.toLowerCase().includes(r))||((n=t.description)==null?void 0:n.toLowerCase().includes(r))})}function ce(o,l){if(!l)return o;const r=l.toLowerCase();return o.filter(t=>{var c,n;return t.graph_topic.toLowerCase().includes(r)||((c=t.name)==null?void 0:c.toLowerCase().includes(r))||((n=t.description)==null?void 0:n.toLowerCase().includes(r))})}function de({wf:o,onTry:l,onWizard:r,onCron:t}){const c=o.status==="active",n=!!o.cron_schedule;return e.jsxDEV("div",{onClick:c?l:void 0,className:`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${c?"cursor-pointer":""}`,children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary truncate",children:o.graph_topic},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:21,columnNumber:11},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono shrink-0",children:["v",o.content_version]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:22,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:20,columnNumber:9},this),o.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:o.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:25,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:19,columnNumber:7},this),e.jsxDEV("div",{className:"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0",children:new Date(o.updated_at).toLocaleDateString("en-US",{month:"short",day:"numeric"})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:28,columnNumber:7},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 whitespace-nowrap shrink-0",children:e.jsxDEV(M,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:32,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("div",{className:"w-20 px-3 py-2 flex justify-end gap-2 shrink-0",children:[c&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),l()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Test tool",children:e.jsxDEV(O,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:41,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:36,columnNumber:11},this),e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),t()},className:n?"text-status-success":"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:n?`Cron: ${o.cron_schedule}`:"Schedule cron",children:e.jsxDEV(Z,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:51,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:44,columnNumber:9},this),o.source_workflow_id&&e.jsxDEV("button",{onClick:s=>{s.stopPropagation(),r()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"MCP Tool Compiler",children:e.jsxDEV(ee,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:59,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:54,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:34,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:18,columnNumber:5},this)}function ue({server:o,expanded:l,onToggle:r,onTryTool:t,onWizard:c,onWorkbench:n,onCron:s,visibleTools:u}){return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:r,className:"group/row border-b transition-colors duration-100 cursor-pointer row-hover",children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${l?"rotate-90":""} text-text-tertiary`,children:e.jsxDEV(K,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:98,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:97,columnNumber:13},this),e.jsxDEV("p",{className:"text-sm text-text-primary font-medium font-mono",children:o.appId},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:100,columnNumber:13},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono",children:["app v",o.appVersion]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:101,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:96,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:95,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28 whitespace-nowrap",children:e.jsxDEV(M,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:107,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:106,columnNumber:9},this),e.jsxDEV("td",{className:"w-20 text-center",children:e.jsxDEV("div",{className:"flex items-center justify-center gap-2",children:[e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:o.toolCount},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:113,columnNumber:13},this),o.setId&&e.jsxDEV("button",{onClick:m=>{m.stopPropagation(),n()},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Open workbench",children:e.jsxDEV(Q,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:122,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:117,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:112,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:90,columnNumber:7},this),e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:5,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:l?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[u.map(m=>e.jsxDEV(de,{wf:m,onTry:()=>t(m),onWizard:()=>c(m),onCron:()=>s(m)},m.id,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:138,columnNumber:17},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:140,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:136,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:132,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:131,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:130,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/yaml-workflow-rows.tsx",lineNumber:89,columnNumber:5},this)}function We(){const o=oe(),{filters:l,setFilter:r}=F({filters:{status:"",server:"",search:""}}),{data:t,isLoading:c}=A({status:l.status||void 0,app_id:l.server||void 0,search:l.search||void 0,limit:200,offset:0}),n=(t==null?void 0:t.workflows)??[],{data:s}=z({limit:100}),u=p.useMemo(()=>{const a=new Map;for(const i of(s==null?void 0:s.sets)??[])i.source_workflow_id&&a.set(i.id,i.source_workflow_id);return a},[s==null?void 0:s.sets]),m=p.useMemo(()=>ie(n),[n]),N=p.useMemo(()=>[...new Set(n.map(i=>i.app_id))].sort().map(i=>({value:i,label:i})),[n]),d=p.useMemo(()=>l.search?m.filter(a=>me(a,l.search)):m,[m,l.search]),{expandedIds:f,toggle:w}=q("lt:expanded:yaml-workflows"),[x,v]=p.useState(null),[k,g]=p.useState(null),j=x||k;return c?e.jsxDEV("div",{children:[e.jsxDEV(P,{title:"MCP Pipeline Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:70,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:4}).map((a,i)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:74,columnNumber:15},this)},i,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:73,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:71,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:69,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(P,{title:"MCP Pipeline Tools",actions:e.jsxDEV("button",{onClick:()=>o("/mcp/queries"),className:"btn-primary text-xs",children:"Design Pipeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:87,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:84,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Compiled from successful triage runs. Each workflow is a deterministic tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:93,columnNumber:7},this),e.jsxDEV(B,{children:[e.jsxDEV(U,{label:"Search",value:l.search,onChange:a=>r("search",a),placeholder:"Server or tool name…"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:98,columnNumber:9},this),N.length>1&&e.jsxDEV(C,{label:"Server",value:l.server,onChange:a=>r("server",a),options:N},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:105,columnNumber:11},this),e.jsxDEV(C,{label:"Status",value:l.status,onChange:a=>r("status",a),options:[{value:"draft",label:"Draft"},{value:"deployed",label:"Deployed"},{value:"active",label:"Active"},{value:"archived",label:"Archived"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:97,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("div",{className:`${j?"flex-1 min-w-0":"w-full"} transition-all`,children:d.length===0?e.jsxDEV(H,{title:"No pipelines yet",description:"Use the MCP Tool Designer to create your first MCP tool."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("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",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:133,columnNumber:19},this),e.jsxDEV("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",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:136,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-20"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:139,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:132,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:131,columnNumber:15},this),e.jsxDEV("tbody",{children:d.map(a=>e.jsxDEV(ue,{server:a,expanded:f.has(a.appId),onToggle:()=>w(a.appId),onTryTool:i=>{g(null),v(i)},onWizard:i=>{i.source_workflow_id&&o(`/mcp/queries/${i.source_workflow_id}?step=4`)},onWorkbench:()=>{if(a.setId){const i=u.get(a.setId);i&&o(`/mcp/queries/${i}?mode=plan&set_id=${a.setId}&step=2`)}},onCron:i=>{v(null),g(i)},visibleTools:ce(a.workflows,l.search)},a.appId,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:144,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:142,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:130,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:126,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ae,{workflow:x,onClose:()=>v(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:172,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:171,columnNumber:11},this),k&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ne,{workflow:k,onClose:()=>g(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:181,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:180,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:125,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/YamlWorkflowsPage.tsx",lineNumber:83,columnNumber:5},this)}export{We as YamlWorkflowsPage};
|
|
2
|
-
//# sourceMappingURL=YamlWorkflowsPage-C_MkAp2i.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"YamlWorkflowsPage-C_MkAp2i.js","sources":["../../src/components/common/test/WorkflowTestPanel.tsx","../../src/pages/workflows/cron/CronScheduleEditor.tsx","../../src/components/common/test/CronPanel.tsx","../../src/pages/workflows/yaml-helpers.ts","../../src/pages/workflows/yaml-workflow-rows.tsx","../../src/pages/workflows/YamlWorkflowsPage.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, Play, RotateCcw, ExternalLink } from 'lucide-react';\nimport { useInvokeYamlWorkflow } from '../../../api/yaml-workflows';\nimport { useYamlActivityEvents, type ActivityStep } from '../../../hooks/useYamlActivityEvents';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport type { LTYamlWorkflowRecord, ActivityManifestEntry } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nconst TOOL_SOURCE_COLORS: Record<string, { border: string; text: string; icon: string }> = {\n mcp: { border: 'border-blue-500', text: 'text-blue-500', icon: 'MCP' },\n db: { border: 'border-blue-500', text: 'text-blue-500', icon: 'DB' },\n llm: { border: 'border-violet-500', text: 'text-violet-500', icon: 'LLM' },\n transform: { border: 'border-emerald-500', text: 'text-emerald-500', icon: 'Map' },\n};\n\nfunction LiveTimeline({ steps, manifest, isComplete }: {\n steps: ActivityStep[];\n manifest: ActivityManifestEntry[];\n isComplete: boolean;\n}) {\n const workerActivities = manifest.filter((a) => a.type === 'worker');\n const totalSteps = workerActivities.length;\n\n const merged = workerActivities.map((a) => {\n const live = steps.find((s) => s.activityId === a.activity_id);\n const source = a.tool_source || 'mcp';\n const colors = TOOL_SOURCE_COLORS[source] || TOOL_SOURCE_COLORS.mcp;\n return {\n activityId: a.activity_id,\n title: a.title || a.mcp_tool_name || a.activity_id,\n toolName: a.mcp_tool_name,\n colors,\n status: live?.status || 'pending' as const,\n error: live?.error,\n };\n });\n\n return (\n <div>\n <p className=\"text-[11px] text-text-secondary mb-3\">\n {isComplete\n ? `All ${totalSteps} steps completed`\n : `Running step ${merged.filter((s) => s.status === 'completed').length + 1} of ${totalSteps}...`}\n </p>\n <div className=\"space-y-0\">\n {merged.map((step, idx) => {\n const isLast = idx === merged.length - 1;\n return (\n <div key={step.activityId} className=\"flex items-stretch gap-2\">\n <div className=\"flex flex-col items-center w-4 shrink-0\">\n <span className={`w-2.5 h-2.5 rounded-full shrink-0 border-2 transition-colors ${\n step.status === 'completed' ? 'bg-status-success border-status-success'\n : step.status === 'running' ? `${step.colors.border} bg-transparent animate-pulse`\n : step.status === 'failed' ? 'bg-status-error border-status-error'\n : 'bg-surface-sunken border-surface-border'\n }`} />\n {!isLast && (\n <span className={`w-px flex-1 transition-colors ${\n step.status === 'completed' ? 'bg-status-success/30' : 'bg-surface-border'\n }`} />\n )}\n </div>\n <div className={isLast ? '' : 'pb-3'}>\n <p className={`text-[11px] font-medium ${\n step.status === 'running' ? 'text-text-primary'\n : step.status === 'completed' ? 'text-text-secondary'\n : step.status === 'failed' ? 'text-status-error'\n : 'text-text-tertiary'\n }`}>{step.title}</p>\n {step.toolName && (\n <span className=\"text-[9px] text-text-tertiary font-mono\">{step.toolName}</span>\n )}\n {step.error && (\n <p className=\"text-[9px] text-status-error mt-0.5\">{step.error}</p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface WorkflowTestPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function WorkflowTestPanel({ workflow, onClose }: WorkflowTestPanelProps) {\n const invokeMutation = useInvokeYamlWorkflow();\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 const [activeJobId, setActiveJobId] = useState<string | null>(null);\n const [completedResult, setCompletedResult] = useState<{ jobId: string } | null>(null);\n const { steps, isComplete } = useYamlActivityEvents(activeJobId);\n\n useEffect(() => {\n setActiveJobId(null);\n setCompletedResult(null);\n setJsonError('');\n invokeMutation.reset();\n const skeleton = buildSkeleton(workflow.input_schema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (isComplete && activeJobId) {\n const jobId = activeJobId;\n const timer = setTimeout(() => {\n setCompletedResult({ jobId });\n setActiveJobId(null);\n }, 800);\n return () => clearTimeout(timer);\n }\n }, [isComplete, activeJobId]);\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 = async () => {\n setJsonError('');\n setCompletedResult(null);\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 try {\n const result = await invokeMutation.mutateAsync({\n id: workflow.id,\n data: parsed,\n sync: false,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n if (result.job_id) setActiveJobId(result.job_id);\n } catch { /* error shown in panel */ }\n };\n\n const isRunning = !!activeJobId;\n const ns = workflow.app_id || 'longtail';\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\">{workflow.app_id}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</code>\n </div>\n <button onClick={() => { if (!isRunning) 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 {isRunning ? (\n <LiveTimeline steps={steps} manifest={workflow.activity_manifest} isComplete={isComplete} />\n ) : completedResult ? (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-success\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z\" />\n </svg>\n <p className=\"text-xs font-medium text-status-success\">Workflow completed</p>\n </div>\n <div className=\"flex items-center justify-between\">\n <Link\n to={`/mcp/executions/${encodeURIComponent(completedResult.jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} /> View execution\n </Link>\n <button\n onClick={() => setCompletedResult(null)}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <RotateCcw size={12} /> Run again\n </button>\n </div>\n </div>\n ) : (\n <>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {workflow.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{workflow.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\">Input</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 {invokeMutation.isError && (\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\">\n {invokeMutation.error instanceof Error ? invokeMutation.error.message : 'Invocation failed'}\n </p>\n </div>\n )}\n <button\n onClick={handleRun}\n disabled={invokeMutation.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {invokeMutation.isPending ? 'Starting...' : <><Play size={12} /> Run</>}\n </button>\n </>\n )}\n </div>\n </div>\n );\n}\n","import { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { describeCron, COMMON_PATTERNS } from './helpers';\n\ninterface CronScheduleEditorProps {\n cronInput: string;\n setCronInput: (value: string) => void;\n setCron: { isPending: boolean; isSuccess: boolean; error: Error | null; reset: () => void };\n hasCronSchedule: boolean;\n onSave: () => void;\n onClear: () => void;\n}\n\nexport function CronScheduleEditor({\n cronInput,\n setCronInput,\n setCron,\n hasCronSchedule,\n onSave,\n onClear,\n}: CronScheduleEditorProps) {\n return (\n <>\n <div>\n <SectionLabel className=\"mb-3\">Schedule</SectionLabel>\n <div className=\"flex gap-3 items-start\">\n <div className=\"flex-1\">\n <input\n type=\"text\"\n value={cronInput}\n onChange={(e) => {\n setCronInput(e.target.value);\n setCron.reset();\n }}\n placeholder=\"0 */6 * * *\"\n className=\"input font-mono text-sm w-full\"\n />\n {cronInput.trim() && describeCron(cronInput.trim()) && (\n <p className=\"text-xs text-text-secondary mt-1.5\">\n {describeCron(cronInput.trim())}\n </p>\n )}\n </div>\n <button\n onClick={onSave}\n disabled={setCron.isPending}\n className=\"btn-primary text-xs shrink-0\"\n >\n {setCron.isPending ? 'Saving...' : 'Save'}\n </button>\n {hasCronSchedule && (\n <button\n onClick={onClear}\n disabled={setCron.isPending}\n className=\"btn-ghost text-xs text-status-error shrink-0\"\n >\n Clear\n </button>\n )}\n </div>\n\n {setCron.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2\">Schedule updated</p>\n )}\n {setCron.error && (\n <p className=\"text-[10px] text-status-error mt-2\">{setCron.error.message}</p>\n )}\n </div>\n\n {/* Common patterns */}\n <div className=\"bg-surface-sunken rounded-lg p-4\">\n <SectionLabel className=\"mb-2\">Common Patterns</SectionLabel>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-1.5\">\n {COMMON_PATTERNS.map(([expr, desc]) => (\n <button\n key={expr}\n type=\"button\"\n onClick={() => {\n setCronInput(expr);\n setCron.reset();\n }}\n className=\"flex items-center gap-2 text-left py-0.5 group\"\n >\n <code className=\"font-mono text-[11px] text-accent group-hover:text-accent-hover\">\n {expr}\n </code>\n <span className=\"text-[10px] text-text-tertiary\">{desc}</span>\n </button>\n ))}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { X } from 'lucide-react';\nimport { useSetYamlCron, useClearYamlCron } from '../../../api/yaml-workflows';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { CronScheduleEditor } from '../../../pages/workflows/cron/CronScheduleEditor';\nimport { SectionLabel } from '../layout/SectionLabel';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\nimport type { LTYamlWorkflowRecord } from '../../../api/types';\n\ninterface CronPanelProps {\n workflow: LTYamlWorkflowRecord;\n onClose: () => void;\n}\n\nexport function CronPanel({ workflow, onClose }: CronPanelProps) {\n const setCronMutation = useSetYamlCron();\n const clearCronMutation = useClearYamlCron();\n\n const [cronInput, setCronInput] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('{}');\n\n // Sync state when workflow changes\n useEffect(() => {\n setCronInput(workflow.cron_schedule ?? '');\n setExecuteAs(workflow.execute_as ?? '');\n setCronMutation.reset();\n clearCronMutation.reset();\n\n const envelope = workflow.cron_envelope || {};\n const skeleton = Object.keys(envelope).length > 0\n ? envelope\n : buildSkeleton(workflow.input_schema);\n setFields(skeleton as Record<string, any>);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n }, [workflow.id]); // eslint-disable-line react-hooks/exhaustive-deps\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 handleSave = () => {\n let envelope: Record<string, unknown>;\n if (jsonMode) {\n try { envelope = JSON.parse(argsJson); } catch { return; }\n } else {\n envelope = { ...fields };\n }\n\n setCronMutation.mutate({\n id: workflow.id,\n cron_schedule: cronInput.trim(),\n cron_envelope: Object.keys(envelope).length > 0 ? envelope : null,\n execute_as: executeAs || null,\n });\n };\n\n const handleClear = () => {\n clearCronMutation.mutate(workflow.id, {\n onSuccess: () => {\n setCronInput('');\n },\n });\n };\n\n // Combine mutation states for CronScheduleEditor\n const combinedMutation = {\n isPending: setCronMutation.isPending || clearCronMutation.isPending,\n isSuccess: setCronMutation.isSuccess || clearCronMutation.isSuccess,\n error: setCronMutation.error || clearCronMutation.error,\n reset: () => { setCronMutation.reset(); clearCronMutation.reset(); },\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\">Cron Schedule</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{workflow.graph_topic}</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 <CronScheduleEditor\n cronInput={cronInput}\n setCronInput={setCronInput}\n setCron={combinedMutation}\n hasCronSchedule={!!workflow.cron_schedule}\n onSave={handleSave}\n onClear={handleClear}\n />\n\n {/* Default input for cron invocations */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <SectionLabel>Default Input</SectionLabel>\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-[200px] 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 </div>\n </div>\n </div>\n );\n}\n","import type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface ProcessServer {\n appId: string;\n workflows: LTYamlWorkflowRecord[];\n toolCount: number;\n status: string;\n updatedAt: string;\n appVersion: string;\n setId: string | null;\n}\n\n// ── Grouping & filtering helpers ──────────────────────────────────────────────\n\nexport function groupByAppId(workflows: LTYamlWorkflowRecord[]): ProcessServer[] {\n const map = new Map<string, LTYamlWorkflowRecord[]>();\n for (const wf of workflows) {\n const list = map.get(wf.app_id) ?? [];\n list.push(wf);\n map.set(wf.app_id, list);\n }\n\n return [...map.entries()].map(([appId, wfs]) => {\n const statusPriority: Record<string, number> = { active: 0, deployed: 1, draft: 2, archived: 3 };\n const bestStatus = wfs.reduce(\n (best, wf) => ((statusPriority[wf.status] ?? 9) < (statusPriority[best] ?? 9) ? wf.status : best),\n wfs[0].status,\n );\n const latest = wfs.reduce((max, wf) => (wf.updated_at > max ? wf.updated_at : max), wfs[0].updated_at);\n\n const maxAppVersion = wfs.reduce((max, wf) => {\n const v = parseInt(wf.app_version || '0', 10);\n return v > max ? v : max;\n }, 0);\n // Use the set_id from any workflow in the group (they all share the same set)\n const setId = wfs.find(wf => wf.set_id)?.set_id || null;\n\n return {\n appId,\n workflows: wfs,\n toolCount: wfs.length,\n status: bestStatus,\n updatedAt: latest,\n appVersion: String(maxAppVersion),\n setId,\n };\n });\n}\n\n/** Client-side search: match server name or any tool's graph_topic/description */\nexport function matchesSearch(server: ProcessServer, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.appId.toLowerCase().includes(q)) return true;\n return server.workflows.some(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(workflows: LTYamlWorkflowRecord[], search: string): LTYamlWorkflowRecord[] {\n if (!search) return workflows;\n const q = search.toLowerCase();\n return workflows.filter(\n (wf) =>\n wf.graph_topic.toLowerCase().includes(q) ||\n wf.name?.toLowerCase().includes(q) ||\n wf.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Clock, Play, Wand2, Wrench } from 'lucide-react';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport type { ProcessServer } from './yaml-helpers';\nimport type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Tool row (individual workflow inside expanded server) ─────────────────────\n\nexport function ToolRow({ wf, onTry, onWizard, onCron }: {\n wf: LTYamlWorkflowRecord;\n onTry: () => void;\n onWizard: () => void;\n onCron: () => void;\n}) {\n const canTry = wf.status === 'active';\n const hasCron = !!wf.cron_schedule;\n\n return (\n <div onClick={canTry ? onTry : undefined} className={`group/row flex items-center hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30 ${canTry ? 'cursor-pointer' : ''}`}>\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <code className=\"text-xs font-mono text-accent-primary truncate\">{wf.graph_topic}</code>\n <span className=\"text-[9px] text-text-tertiary font-mono shrink-0\">v{wf.content_version}</span>\n </div>\n {wf.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{wf.description}</p>\n )}\n </div>\n <div className=\"w-32 px-4 py-2 text-[10px] text-text-tertiary whitespace-nowrap shrink-0\">\n {new Date(wf.updated_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}\n </div>\n <div className=\"w-28 px-6 py-2 whitespace-nowrap shrink-0\">\n <StatusBadge status={wf.status} />\n </div>\n <div className=\"w-20 px-3 py-2 flex justify-end gap-2 shrink-0\">\n {canTry && (\n <button\n onClick={(e) => { e.stopPropagation(); onTry(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Test tool\"\n >\n <Play className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n <button\n onClick={(e) => { e.stopPropagation(); onCron(); }}\n className={hasCron\n ? 'text-status-success'\n : 'opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent'}\n title={hasCron ? `Cron: ${wf.cron_schedule}` : 'Schedule cron'}\n >\n <Clock className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n {wf.source_workflow_id && (\n <button\n onClick={(e) => { e.stopPropagation(); onWizard(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"MCP Tool Compiler\"\n >\n <Wand2 className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── Server row (expandable namespace) ────────────────────────────────────────\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onTryTool,\n onWizard,\n onWorkbench,\n onCron,\n visibleTools,\n}: {\n server: ProcessServer;\n expanded: boolean;\n onToggle: () => void;\n onTryTool: (wf: LTYamlWorkflowRecord) => void;\n onWizard: (wf: LTYamlWorkflowRecord) => void;\n onWorkbench: () => void;\n onCron: (wf: LTYamlWorkflowRecord) => void;\n visibleTools: LTYamlWorkflowRecord[];\n}) {\n return (\n <>\n <tr\n onClick={onToggle}\n className=\"group/row border-b transition-colors duration-100 cursor-pointer row-hover\"\n >\n {/* Name + version */}\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' : ''} text-text-tertiary`}>\n <ChevronRight size={14} />\n </span>\n <p className=\"text-sm text-text-primary font-medium font-mono\">{server.appId}</p>\n <span className=\"text-[9px] text-text-tertiary font-mono\">app v{server.appVersion}</span>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28 whitespace-nowrap\">\n <StatusBadge status={server.status} />\n </td>\n\n {/* Tool count + workbench */}\n <td className=\"w-20 text-center\">\n <div className=\"flex items-center justify-center gap-2\">\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 {server.toolCount}\n </span>\n {server.setId && (\n <button\n onClick={(e) => { e.stopPropagation(); onWorkbench(); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Open workbench\"\n >\n <Wrench className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n )}\n </div>\n </td>\n </tr>\n\n {/* Expanded tool rows — no sub-header, aligned to outer columns */}\n <tr>\n <td colSpan={5} 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((wf) => (\n <ToolRow key={wf.id} wf={wf} onTry={() => onTryTool(wf)} onWizard={() => onWizard(wf)} onCron={() => onCron(wf)} />\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n </>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useYamlWorkflows } from '../../api/yaml-workflows';\nimport { useWorkflowSets } from '../../api/workflow-sets';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../hooks/useExpandedRows';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { WorkflowTestPanel } from '../../components/common/test/WorkflowTestPanel';\nimport { CronPanel } from '../../components/common/test/CronPanel';\nimport { groupByAppId, matchesSearch, filterTools } from './yaml-helpers';\nimport { ServerRow } from './yaml-workflow-rows';\nimport type { LTYamlWorkflowRecord } from '../../api/types';\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function YamlWorkflowsPage() {\n const navigate = useNavigate();\n const { filters, setFilter } = useFilterParams({\n filters: { status: '', server: '', search: '' },\n });\n\n // Fetch a larger page to get all workflows for grouping\n const { data, isLoading } = useYamlWorkflows({\n status: (filters.status || undefined) as any,\n app_id: filters.server || undefined,\n search: filters.search || undefined,\n limit: 200,\n offset: 0,\n });\n\n const workflows = data?.workflows ?? [];\n\n // Fetch workflow sets to resolve workbench links (set_id → planner workflow ID)\n const { data: setsData } = useWorkflowSets({ limit: 100 });\n const setSourceMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of setsData?.sets ?? []) {\n if (s.source_workflow_id) map.set(s.id, s.source_workflow_id);\n }\n return map;\n }, [setsData?.sets]);\n\n const servers = useMemo(() => groupByAppId(workflows), [workflows]);\n\n // Build server options from unfiltered results; re-derive when status/search change\n const serverOptions = useMemo(() => {\n const ids = [...new Set(workflows.map((wf) => wf.app_id))].sort();\n return ids.map((id) => ({ value: id, label: id }));\n }, [workflows]);\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 const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:yaml-workflows');\n const [tryWorkflow, setTryWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n const [cronWorkflow, setCronWorkflow] = useState<LTYamlWorkflowRecord | null>(null);\n\n // Active sidebar: test panel or cron panel (mutually exclusive)\n const sidebarWorkflow = tryWorkflow || cronWorkflow;\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Pipeline Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 4 }).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 Pipeline Tools\"\n actions={\n <button onClick={() => navigate('/mcp/queries')} className=\"btn-primary text-xs\">\n Design Pipeline\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Compiled from successful triage runs. Each workflow is a deterministic tool.\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 {serverOptions.length > 1 && (\n <FilterSelect\n label=\"Server\"\n value={filters.server}\n onChange={(v) => setFilter('server', v)}\n options={serverOptions}\n />\n )}\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'draft', label: 'Draft' },\n { value: 'deployed', label: 'Deployed' },\n { value: 'active', label: 'Active' },\n { value: 'archived', label: 'Archived' },\n ]}\n />\n </FilterBar>\n\n <div className=\"flex gap-0\">\n <div className={`${sidebarWorkflow ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No pipelines yet\" description=\"Use the MCP Tool Designer to create your first MCP tool.\" />\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 w-20\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.appId}\n server={server}\n expanded={expandedIds.has(server.appId)}\n onToggle={() => toggleExpand(server.appId)}\n onTryTool={(wf) => { setCronWorkflow(null); setTryWorkflow(wf); }}\n onWizard={(wf) => {\n if (wf.source_workflow_id) navigate(`/mcp/queries/${wf.source_workflow_id}?step=4`);\n }}\n onWorkbench={() => {\n if (server.setId) {\n const plannerWfId = setSourceMap.get(server.setId);\n if (plannerWfId) {\n navigate(`/mcp/queries/${plannerWfId}?mode=plan&set_id=${server.setId}&step=2`);\n }\n }\n }}\n onCron={(wf) => { setTryWorkflow(null); setCronWorkflow(wf); }}\n visibleTools={filterTools(server.workflows, filters.search)}\n />\n ))}\n </tbody>\n </table>\n )}\n </div>\n\n {tryWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <WorkflowTestPanel\n workflow={tryWorkflow}\n onClose={() => setTryWorkflow(null)}\n />\n </div>\n )}\n\n {cronWorkflow && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <CronPanel\n workflow={cronWorkflow}\n onClose={() => setCronWorkflow(null)}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["TOOL_SOURCE_COLORS","LiveTimeline","steps","manifest","isComplete","workerActivities","a","totalSteps","merged","live","s","source","colors","jsxDEV","step","idx","isLast","WorkflowTestPanel","workflow","onClose","invokeMutation","useInvokeYamlWorkflow","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","activeJobId","setActiveJobId","completedResult","setCompletedResult","useYamlActivityEvents","useEffect","skeleton","buildSkeleton","jobId","timer","toggleMode","handleRun","parsed","result","isRunning","ns","X","Link","ExternalLink","RotateCcw","Fragment","RunAsSelector","e","key","value","Play","CronScheduleEditor","cronInput","setCronInput","setCron","hasCronSchedule","onSave","onClear","SectionLabel","describeCron","COMMON_PATTERNS","expr","desc","CronPanel","setCronMutation","useSetYamlCron","clearCronMutation","useClearYamlCron","envelope","handleSave","handleClear","combinedMutation","groupByAppId","workflows","map","wf","list","appId","wfs","statusPriority","bestStatus","best","latest","max","maxAppVersion","v","setId","_a","matchesSearch","server","search","q","_b","filterTools","ToolRow","onTry","onWizard","onCron","canTry","hasCron","StatusBadge","Clock","Wand2","ServerRow","expanded","onToggle","onTryTool","onWorkbench","visibleTools","ChevronRight","Wrench","YamlWorkflowsPage","navigate","useNavigate","filters","setFilter","useFilterParams","data","isLoading","useYamlWorkflows","setsData","useWorkflowSets","setSourceMap","useMemo","servers","serverOptions","id","filteredServers","expandedIds","toggleExpand","useExpandedRows","tryWorkflow","setTryWorkflow","cronWorkflow","setCronWorkflow","sidebarWorkflow","PageHeader","_","FilterBar","FilterInput","FilterSelect","EmptyState","plannerWfId"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{v as l,j as s,w as m,x as c}from"./index-sNrqYt0Q.js";import{a}from"./vendor-query-DLp59M9_.js";const n=[{maxMs:0,color:"text-status-error"},{maxMs:300*1e3,color:"text-status-error"},{maxMs:900*1e3,color:"text-status-warning"},{maxMs:1/0,color:"text-accent"}];function u(e){if(e<=0)return n[0].color;for(const t of n)if(e<t.maxMs)return t.color;return n[n.length-1].color}function d({until:e}){const[t,r]=a.useState(()=>new Date(e).getTime()-Date.now());a.useEffect(()=>{const o=setInterval(()=>{r(new Date(e).getTime()-Date.now())},1e3);return()=>clearInterval(o)},[e]);const i=a.useMemo(()=>{const o=new Date(e);return[{label:"ms",value:String(Math.max(0,t))},{label:"until",value:o.toISOString()},{label:"local",value:l(o,"MMM d, yyyy h:mm:ss a")}]},[e,t]);return s.jsxDEV(m,{options:i,children:s.jsxDEV("span",{className:`text-xs font-mono ${u(t)}`,children:c(t)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:42,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:41,columnNumber:5},this)}function p(e){return!!(e.assigned_to&&e.assigned_until&&new Date(e.assigned_until)>new Date)}function w(e){return!e.workflow_type}export{d as C,p as a,w as i};
|
|
2
|
-
//# sourceMappingURL=escalation-BYhLYHBz.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as a}from"./index-sNrqYt0Q.js";import{F as c,b as r}from"./FilterBar-BQNzsd3A.js";import{P as u}from"./PriorityBadge-C7D5d_HY.js";import{R as p}from"./RolePill-D6nMxMvp.js";import{W as d}from"./WorkflowPill-BrD5d1AG.js";import{T as b}from"./TimestampCell-Dx5uwGfS.js";import{C as N,i as f,a as x}from"./escalation-BYhLYHBz.js";import{_ as h,$ as v,a0 as g,a1 as t}from"./vendor-icons-CWl44VA6.js";import{L as y}from"./vendor-react-Co3Y8ikm.js";function E({row:e}){if(f(e)){const l=e.status==="resolved"?"text-status-success":"text-text-tertiary";return a.jsxDEV(g,{className:`w-3 h-3 shrink-0 ${l}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:17,columnNumber:12},this)}return e.status==="resolved"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:20,columnNumber:12},this):e.status==="cancelled"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:23,columnNumber:12},this):x(e)?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:26,columnNumber:12},this):a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:29,columnNumber:10},this)}const R=[{key:"description",label:"Summary",render:e=>a.jsxDEV("div",{className:"flex items-start gap-2 overflow-hidden",children:[a.jsxDEV("span",{className:"mt-1 shrink-0",children:a.jsxDEV(E,{row:e},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:41},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:9},void 0),a.jsxDEV("div",{className:"min-w-0 overflow-hidden",children:[a.jsxDEV("p",{className:"text-xs text-text-primary truncate",children:e.description||e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:41,columnNumber:11},void 0),a.jsxDEV("div",{className:"flex items-center gap-2 mt-0.5",children:[a.jsxDEV(d,{type:e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:43,columnNumber:13},void 0),e.subtype&&e.subtype!==e.type&&a.jsxDEV("span",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:e.subtype},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:45,columnNumber:15},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:42,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:40,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:38,columnNumber:7},void 0),className:"max-w-0"},{key:"task_id",label:"Task",render:e=>e.task_id?a.jsxDEV(y,{to:`/workflows/tasks/detail/${e.task_id}`,onClick:l=>l.stopPropagation(),className:"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors",children:[e.task_id.slice(0,12),"…",a.jsxDEV(h,{size:10,className:"opacity-0 group-hover/task:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:64,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:58,columnNumber:9},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:67,columnNumber:9},void 0),className:"w-36 whitespace-nowrap"},{key:"role",label:"Role",render:e=>a.jsxDEV(p,{role:e.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:74,columnNumber:22},void 0),className:"w-28"},{key:"priority",label:"Priority",render:e=>a.jsxDEV(u,{priority:e.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:80,columnNumber:22},void 0),className:"w-20",sortable:!0},{key:"created_at",label:"Created",render:e=>a.jsxDEV(b,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:87,columnNumber:22},void 0),className:"w-40",sortable:!0}],L={key:"expires",label:a.jsxDEV(v,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:96,columnNumber:11},void 0),render:e=>e.assigned_until?a.jsxDEV(N,{until:e.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:99,columnNumber:7},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:101,columnNumber:7},void 0),className:"w-10"},j=[{value:"1",label:"P1"},{value:"2",label:"P2"},{value:"3",label:"P3"},{value:"4",label:"P4"}],D=[{value:"available",label:"Available"},{value:"claimed",label:"Claimed"},{value:"resolved",label:"Resolved"}];function I({filters:e,setFilter:l,roles:o,types:i,showStatus:n=!1,actions:m}){return a.jsxDEV(c,{actions:m,children:[n&&a.jsxDEV(r,{label:"Status",value:e.status??"",onChange:s=>l("status",s),options:D},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:172,columnNumber:9},this),a.jsxDEV(r,{label:"Role",value:e.role,onChange:s=>l("role",s),options:o.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:179,columnNumber:7},this),a.jsxDEV(r,{label:"Type",value:e.type,onChange:s=>l("type",s),options:i.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:185,columnNumber:7},this),a.jsxDEV(r,{label:"Priority",value:e.priority,onChange:s=>l("priority",s),options:j},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:191,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:170,columnNumber:5},this)}export{R as E,L as T,I as a};
|
|
2
|
-
//# sourceMappingURL=escalation-columns-DjJyuC1g.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as n}from"./index-sNrqYt0Q.js";import{T as o}from"./TimeAgo-DJZq-e4R.js";import{S as l}from"./StatusBadge-DVCf2ncM.js";const i={"* * * * *":"Every minute","*/5 * * * *":"Every 5 minutes","*/15 * * * *":"Every 15 minutes","*/30 * * * *":"Every 30 minutes","0 * * * *":"Every hour","0 */2 * * *":"Every 2 hours","0 */6 * * *":"Every 6 hours","0 */12 * * *":"Every 12 hours","0 0 * * *":"Daily at midnight","0 9 * * *":"Daily at 9 AM","0 9 * * 1-5":"Weekdays at 9 AM","0 0 * * 0":"Weekly (Sunday midnight)","0 0 1 * *":"Monthly (1st at midnight)","0 2 * * *":"Daily at 2 AM"};function c(e){return i[e]??""}const f=[["*/15 * * * *","Every 15 min"],["0 * * * *","Every hour"],["0 */6 * * *","Every 6 hours"],["0 9 * * *","Daily 9 AM"],["0 9 * * 1-5","Weekdays 9 AM"],["0 0 * * 0","Weekly (Sun)"]];function p(e){const t=e==null?void 0:e.data;if(!t||typeof t!="object"||Array.isArray(t))return null;const a=Object.entries(t);return a.length===0||!a.every(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)?null:a.map(([r,s])=>({key:r,value:s===null?"":String(s),type:s===null?"string":typeof s}))}const h=[{key:"workflow_id",label:"Workflow ID",render:e=>n.jsxDEV("span",{className:"font-mono text-[11px] text-text-secondary",children:e.workflow_id.length>40?`${e.workflow_id.slice(0,40)}...`:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:69,columnNumber:7},void 0)},{key:"status",label:"Status",render:e=>n.jsxDEV(l,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:79,columnNumber:22},void 0),className:"w-28"},{key:"created_at",label:"Started",render:e=>n.jsxDEV(o,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:85,columnNumber:22},void 0),className:"w-32"}];export{f as C,c as d,p as e,h as j};
|
|
2
|
-
//# sourceMappingURL=helpers-CQG3Rh2y.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as r}from"./index-sNrqYt0Q.js";import{a as l}from"./vendor-query-DLp59M9_.js";import{h as b}from"./workflows-BkzA4ahe.js";import{D as N}from"./DataTable-bd2PTBJd.js";import{F as g,b as x}from"./FilterBar-BQNzsd3A.js";import{R as v,a as m}from"./RowActions-JqgAB0p3.js";import{u as P}from"./useFilterParams-CGRYFw_A.js";import{P as W}from"./PageHeader-FJIemmrC.js";import{T as y}from"./TaskQueuePill-BzduBqwy.js";import{W as D}from"./WorkflowPill-BrD5d1AG.js";import{a3 as E,a7 as j,N as C}from"./vendor-icons-CWl44VA6.js";import{c as q}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-BygtU-Rh.js";function B(){const a=q(),{data:u,isLoading:c}=b(),{filters:s,setFilter:i}=P({filters:{search:"",queue:""}}),[o,p]=l.useState(s.search);l.useEffect(()=>{if(o===s.search)return;const e=setTimeout(()=>i("search",o),300);return()=>clearTimeout(e)},[o,i,s.search]);const t=u??[],f=l.useMemo(()=>[...new Set(t.map(e=>e.task_queue).filter(Boolean))].sort(),[t]),k=l.useMemo(()=>{let e=t;if(s.search){const n=s.search.toLowerCase();e=e.filter(h=>h.name.toLowerCase().includes(n))}return s.queue&&(e=e.filter(n=>n.task_queue===s.queue)),e},[t,s]),d=[{key:"name",label:"Workflow",render:e=>r.jsxDEV(D,{type:e.name},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:52,columnNumber:24},this)},{key:"task_queue",label:"Queue",render:e=>r.jsxDEV(y,{queue:e.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:57,columnNumber:24},this),className:"whitespace-nowrap"},{key:"registered",label:"Status",render:e=>e.registered?r.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[r.jsxDEV(E,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:131},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:11},this):r.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:65,columnNumber:11},this),className:"whitespace-nowrap"},{key:"actions",label:"",render:e=>r.jsxDEV(v,{children:e.registered?r.jsxDEV(m,{icon:j,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.name)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:74,columnNumber:13},this):r.jsxDEV(m,{icon:C,title:"Register workflow",onClick:()=>a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:80,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:72,columnNumber:9},this),className:"w-16 text-right"}],w=e=>{e.registered?a(`/workflows/registry/${encodeURIComponent(e.name)}`):a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)};return r.jsxDEV("div",{children:[r.jsxDEV(W,{title:"Workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:102,columnNumber:7},this),r.jsxDEV(g,{children:[r.jsxDEV("input",{type:"text",placeholder:"Search workers...",value:o,onChange:e=>p(e.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:105,columnNumber:9},this),r.jsxDEV(x,{label:"Queue",value:s.queue,onChange:e=>i("queue",e),options:f.map(e=>({value:e,label:e}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:104,columnNumber:7},this),r.jsxDEV(N,{columns:d,data:k,keyFn:e=>e.name,onRowClick:w,isLoading:c,emptyMessage:"No active workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:101,columnNumber:5},this)}export{B as WorkersPage};
|
|
2
|
-
//# sourceMappingURL=index-2nBhR7Dg.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-2nBhR7Dg.js","sources":["../../src/pages/workflows/workers/WorkersPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Plus, Eye, ShieldCheck } from 'lucide-react';\nimport { useActiveWorkers } from '../../../api/workflows';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport type { ActiveWorker } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { TaskQueuePill } from '../../../components/common/display/TaskQueuePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkersPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useActiveWorkers();\n const { filters, setFilter } = useFilterParams({\n filters: { search: '', queue: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const allWorkers = data ?? [];\n\n const queues = useMemo(\n () => [...new Set(allWorkers.map((w) => w.task_queue).filter(Boolean))].sort(),\n [allWorkers],\n );\n\n const workers = useMemo(() => {\n let result = allWorkers;\n if (filters.search) {\n const q = filters.search.toLowerCase();\n result = result.filter((w) => w.name.toLowerCase().includes(q));\n }\n if (filters.queue) result = result.filter((w) => w.task_queue === filters.queue);\n return result;\n }, [allWorkers, filters]);\n\n const columns: Column<ActiveWorker>[] = [\n {\n key: 'name',\n label: 'Workflow',\n render: (row) => <WorkflowPill type={row.name} />,\n },\n {\n key: 'task_queue',\n label: 'Queue',\n render: (row) => <TaskQueuePill queue={row.task_queue} />,\n className: 'whitespace-nowrap',\n },\n {\n key: 'registered',\n label: 'Status',\n render: (row) => row.registered\n ? <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>\n : <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary\">Durable</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n {row.registered ? (\n <RowAction\n icon={Eye}\n title=\"View config\"\n onClick={() => navigate(`/workflows/registry/${encodeURIComponent(row.name)}`)}\n />\n ) : (\n <RowAction\n icon={Plus}\n title=\"Register workflow\"\n onClick={() => navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`)}\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleRowClick = (row: ActiveWorker) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.name)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`);\n }\n };\n\n return (\n <div>\n <PageHeader title=\"Workers\" />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workers...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Queue\"\n value={filters.queue}\n onChange={(v) => setFilter('queue', v)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={workers}\n keyFn={(row) => row.name}\n onRowClick={handleRowClick}\n isLoading={isLoading}\n emptyMessage=\"No active workers\"\n />\n </div>\n );\n}\n"],"names":["WorkersPage","navigate","useNavigate","data","isLoading","useActiveWorkers","filters","setFilter","useFilterParams","searchInput","setSearchInput","useState","useEffect","timer","allWorkers","queues","useMemo","w","workers","result","q","columns","row","WorkflowPill","TaskQueuePill","jsxDEV","ShieldCheck","RowActionGroup","RowAction","Eye","Plus","handleRowClick","PageHeader","FilterBar","FilterSelect","v","DataTable"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-sNrqYt0Q.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{b as A,c as T,d as K,e as I,f as F,u as z}from"./users-BTBhafGc.js";import{u as C}from"./useFilterParams-CGRYFw_A.js";import{D as U}from"./DataTable-bd2PTBJd.js";import{S as k}from"./StickyPagination-CJHMzYJj.js";import{F as $,b as O}from"./FilterBar-BQNzsd3A.js";import{T as w}from"./TimestampCell-Dx5uwGfS.js";import{C as y}from"./ConfirmDeleteModal-Cy6KVLfC.js";import{R as M,a as D}from"./RowActions-JqgAB0p3.js";import{P as S}from"./PageHeader-FJIemmrC.js";import{R as E}from"./RolePill-D6nMxMvp.js";import{M as j}from"./Modal-Dir9Rlnx.js";import{a as G,b as L,c as q,d as H,e as J,f as Q,g as W,h as X,u as Y}from"./bots-fc_O_YIq.js";import{u as R}from"./roles-Bd_sTV6I.js";import{T as Z}from"./TimeAgo-DJZq-e4R.js";import{D as ee,H as se,ae,l as P,N as te,z as _,U as ie,a4 as re}from"./vendor-icons-CWl44VA6.js";import{f as le}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-BygtU-Rh.js";function oe({open:t,onClose:l}){const s=A(),[i,r]=u.useState({external_id:"",email:"",display_name:"",password:""}),[d,p]=u.useState(t);t!==d&&(p(t),t&&r({external_id:"",email:"",display_name:"",password:""}));const c=()=>{i.external_id.trim()&&s.mutate({external_id:i.external_id.trim(),email:i.email.trim()||void 0,display_name:i.display_name.trim()||void 0,password:i.password||void 0},{onSuccess:l})},m=(a,o)=>r(N=>({...N,[a]:o}));return e.jsxDEV(j,{open:t,onClose:l,title:"Create User",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"External ID (required)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:46,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.external_id,onChange:a=>m("external_id",a.target.value),placeholder:"e.g., john.doe",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:49,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:45,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Display Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:58,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.display_name,onChange:a=>m("display_name",a.target.value),placeholder:"John Doe",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:61,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:57,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Email"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:70,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.email,onChange:a=>m("email",a.target.value),placeholder:"john@example.com",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:73,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:69,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Password"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:82,columnNumber:11},this),e.jsxDEV("input",{type:"password",value:i.password,onChange:a=>m("password",a.target.value),placeholder:"Leave blank for no password",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:85,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:81,columnNumber:9},this),s.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:s.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:95,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:l,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:99,columnNumber:11},this),e.jsxDEV("button",{onClick:c,disabled:!i.external_id.trim()||s.isPending,className:"btn-primary text-xs",children:s.isPending?"Creating...":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:98,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:44,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/CreateUserModal.tsx",lineNumber:43,columnNumber:5},this)}function ne({open:t,onClose:l,user:s}){const i=T(),[r,d]=u.useState({display_name:"",email:"",status:"active"}),[p,c]=u.useState(s);s!==p&&(c(s),s&&d({display_name:s.display_name??"",email:s.email??"",status:s.status}));const m=()=>{s&&i.mutate({id:s.id,display_name:r.display_name.trim()||void 0,email:r.email.trim()||void 0,status:r.status},{onSuccess:l})};return e.jsxDEV(j,{open:t,onClose:l,title:`Edit — ${(s==null?void 0:s.display_name)||(s==null?void 0:s.external_id)||""}`,children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Display Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:55,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:r.display_name,onChange:a=>d(o=>({...o,display_name:a.target.value})),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:54,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Email"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:66,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:r.email,onChange:a=>d(o=>({...o,email:a.target.value})),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:65,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:77,columnNumber:11},this),e.jsxDEV("select",{value:r.status,onChange:a=>d(o=>({...o,status:a.target.value})),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"active",children:"Active"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:85,columnNumber:13},this),e.jsxDEV("option",{value:"inactive",children:"Inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:86,columnNumber:13},this),e.jsxDEV("option",{value:"suspended",children:"Suspended"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:80,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:76,columnNumber:9},this),i.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:i.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:92,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:l,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:96,columnNumber:11},this),e.jsxDEV("button",{onClick:m,disabled:i.isPending,className:"btn-primary text-xs",children:i.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:99,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:95,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:53,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/EditUserModal.tsx",lineNumber:48,columnNumber:5},this)}function de({open:t,onClose:l}){const s=G(),[i,r]=u.useState({name:"",display_name:"",description:""}),[d,p]=u.useState(t);t!==d&&(p(t),t&&r({name:"",display_name:"",description:""}));const c=()=>{i.name.trim()&&s.mutate({name:i.name.trim(),display_name:i.display_name.trim()||void 0,description:i.description.trim()||void 0},{onSuccess:l})},m=(a,o)=>r(N=>({...N,[a]:o}));return e.jsxDEV(j,{open:t,onClose:l,title:"Create Bot",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Name (required)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:44,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.name,onChange:a=>m("name",a.target.value.replace(/\s+/g,"-").toLowerCase()),placeholder:"e.g., ci-bot",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:43,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Display Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.display_name,onChange:a=>m("display_name",a.target.value),placeholder:"CI Bot",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:59,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:68,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i.description,onChange:a=>m("description",a.target.value),placeholder:"Runs scheduled workflows",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:71,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:67,columnNumber:9},this),s.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:s.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:l,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:85,columnNumber:11},this),e.jsxDEV("button",{onClick:c,disabled:!i.name.trim()||s.isPending,className:"btn-primary text-xs",children:s.isPending?"Creating...":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:84,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:42,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/CreateBotModal.tsx",lineNumber:41,columnNumber:5},this)}function me({open:t,onClose:l,bot:s}){const i=L(),[r,d]=u.useState({display_name:"",description:"",status:"active"}),[p,c]=u.useState(s);s!==p&&(c(s),s&&d({display_name:s.display_name??"",description:s.description??"",status:s.status}));const m=()=>{s&&i.mutate({id:s.id,display_name:r.display_name.trim()||void 0,description:r.description.trim()||void 0,status:r.status},{onSuccess:l})};return e.jsxDEV(j,{open:t,onClose:l,title:`Edit — ${(s==null?void 0:s.display_name)||(s==null?void 0:s.external_id)||""}`,children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Display Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:55,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:r.display_name,onChange:a=>d(o=>({...o,display_name:a.target.value})),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:54,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:66,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:r.description,onChange:a=>d(o=>({...o,description:a.target.value})),className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:65,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:77,columnNumber:11},this),e.jsxDEV("select",{value:r.status,onChange:a=>d(o=>({...o,status:a.target.value})),className:"select text-xs w-full",children:[e.jsxDEV("option",{value:"active",children:"Active"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:85,columnNumber:13},this),e.jsxDEV("option",{value:"inactive",children:"Inactive"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:86,columnNumber:13},this),e.jsxDEV("option",{value:"suspended",children:"Suspended"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:80,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:76,columnNumber:9},this),i.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:i.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:92,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:l,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:96,columnNumber:11},this),e.jsxDEV("button",{onClick:m,disabled:i.isPending,className:"btn-primary text-xs",children:i.isPending?"Saving...":"Save"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:99,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:95,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:53,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/EditBotModal.tsx",lineNumber:48,columnNumber:5},this)}function ue({botId:t}){const{data:l}=q(t),s=H(),i=J(),[r,d]=u.useState(""),[p,c]=u.useState(null),[m,a]=u.useState(!1),[o,N]=u.useState(null),g=(l==null?void 0:l.keys)??[],n=()=>{r.trim()&&s.mutate({botId:t,name:r.trim(),scopes:["mcp:tool:call"]},{onSuccess:f=>{c(f.rawKey),d("")}})},h=()=>{p&&(navigator.clipboard.writeText(p),a(!0),setTimeout(()=>a(!1),2e3))},v=()=>{o&&i.mutate({botId:t,keyId:o.id},{onSuccess:()=>N(null)})};return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3",children:"API Keys"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:58,columnNumber:7},this),p&&e.jsxDEV("div",{className:"mb-3 p-3 bg-status-success/10 border border-status-success/30 rounded-md",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold text-status-success mb-1",children:"Key generated — copy now, it won't be shown again"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:64,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("code",{className:"text-[11px] font-mono text-text-primary bg-surface-sunken px-2 py-1 rounded flex-1 overflow-hidden text-ellipsis",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:68,columnNumber:13},this),e.jsxDEV("button",{onClick:h,className:"text-text-tertiary hover:text-text-primary shrink-0",title:"Copy to clipboard",children:m?e.jsxDEV(ee,{className:"w-3.5 h-3.5 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:76,columnNumber:25},this):e.jsxDEV(se,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:76,columnNumber:81},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:71,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:67,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:63,columnNumber:9},this),g.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-3",children:"No API keys."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:83,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-1.5 mb-3",children:g.map(f=>e.jsxDEV("div",{className:"group/key flex items-center justify-between px-2.5 py-1.5 bg-surface-sunken rounded text-xs",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(ae,{className:"w-3 h-3 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:92,columnNumber:17},this),e.jsxDEV("span",{className:"text-text-primary font-mono",children:f.name},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:93,columnNumber:17},this),f.last_used_at&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:["used ",e.jsxDEV(Z,{date:f.last_used_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:96,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:95,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:91,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>N(f),className:"opacity-0 group-hover/key:opacity-100 transition-opacity text-text-tertiary hover:text-status-error",title:"Revoke key",children:e.jsxDEV(P,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:105,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:100,columnNumber:15},this)]},f.id,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:87,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:85,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("input",{type:"text",value:r,onChange:f=>d(f.target.value),placeholder:"Key name...",className:"input text-xs flex-1 font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:113,columnNumber:9},this),e.jsxDEV("button",{onClick:n,disabled:!r.trim()||s.isPending,className:"btn-primary text-xs inline-flex items-center gap-1",children:[e.jsxDEV(te,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:125,columnNumber:11},this),s.isPending?"...":"Generate"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:120,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:112,columnNumber:7},this),s.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:s.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:130,columnNumber:9},this),e.jsxDEV(y,{open:!!o,onClose:()=>N(null),onConfirm:v,title:"Revoke API Key",description:e.jsxDEV(e.Fragment,{children:["Revoke API key"," ",e.jsxDEV("span",{className:"font-medium text-text-primary font-mono",children:o==null?void 0:o.name},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:141,columnNumber:13},this),"? This bot will no longer be able to authenticate with this key."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:139,columnNumber:11},this),isPending:i.isPending,error:i.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:133,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:57,columnNumber:5},this)}function ce({bot:t}){const{data:l}=R(),s=Q(),i=W(),[r,d]=u.useState(""),[p,c]=u.useState("member"),m=(l==null?void 0:l.roles)??[],a=t.roles??[],o=u.useMemo(()=>{const n=new Set(a.map(h=>h.role));return m.filter(h=>!n.has(h))},[m,a]),N=()=>{r.trim()&&s.mutate({botId:t.id,role:r.trim(),type:p},{onSuccess:()=>{d(""),c("member")}})},g=n=>{i.mutate({botId:t.id,role:n})};return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-3",children:"Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:183,columnNumber:7},this),a.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-3",children:"No roles assigned."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:188,columnNumber:9},this):e.jsxDEV("div",{className:"flex flex-wrap gap-2 mb-3",children:a.map(n=>e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary",children:[e.jsxDEV(E,{role:n.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:196,columnNumber:15},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:n.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:197,columnNumber:15},this),e.jsxDEV("button",{onClick:()=>g(n.role),className:"text-text-tertiary hover:text-status-error transition-colors ml-0.5",title:`Remove ${n.role}`,children:"×"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:198,columnNumber:15},this)]},n.role,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:192,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:190,columnNumber:9},this),o.length>0&&e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("select",{value:r,onChange:n=>d(n.target.value),className:"select text-xs font-mono flex-1",children:[e.jsxDEV("option",{value:"",children:"Select a role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:217,columnNumber:13},this),o.map(n=>e.jsxDEV("option",{value:n,children:n},n,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:219,columnNumber:15},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:212,columnNumber:11},this),e.jsxDEV("select",{value:p,onChange:n=>c(n.target.value),className:"select text-xs w-24",children:[e.jsxDEV("option",{value:"member",children:"member"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:227,columnNumber:13},this),e.jsxDEV("option",{value:"admin",children:"admin"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:228,columnNumber:13},this),e.jsxDEV("option",{value:"superadmin",children:"superadmin"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:229,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:222,columnNumber:11},this),e.jsxDEV("button",{onClick:N,disabled:!r||s.isPending,className:"btn-primary text-xs",children:s.isPending?"...":"Add"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:231,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:211,columnNumber:9},this),s.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:s.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:241,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:182,columnNumber:5},this)}function pe({bot:t}){return t?e.jsxDEV("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px] space-y-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-primary",children:t.display_name||t.external_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:261,columnNumber:9},this),t.description&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-0.5",children:t.description},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:263,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:260,columnNumber:7},this),e.jsxDEV(ue,{botId:t.id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:267,columnNumber:7},this),e.jsxDEV(ce,{bot:t},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:268,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:259,columnNumber:5},this):e.jsxDEV("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px]",children:e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Select a bot to manage its API keys and roles."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:251,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotDetailPanel.tsx",lineNumber:250,columnNumber:7},this)}const be={active:"bg-status-success",inactive:"bg-text-tertiary",suspended:"bg-status-error"};function Ne({embedded:t=!1}){const{pagination:l}=C({filters:{}}),s=X(),[i,r]=u.useState(!1),[d,p]=u.useState(null),[c,m]=u.useState(null),[a,o]=u.useState(null),{data:N,isLoading:g}=Y({limit:l.pageSize,offset:l.offset}),n=(N==null?void 0:N.total)??0,h=(N==null?void 0:N.bots)??[],v=u.useMemo(()=>c?h.find(x=>x.id===c.id)??c:null,[h,c]),f=[{key:"display_name",label:"Bot",render:x=>e.jsxDEV("div",{className:"flex items-center gap-2.5",children:[e.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${be[x.status]??"bg-status-pending"}`,title:x.status},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:51,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-primary",children:x.display_name||x.external_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:56,columnNumber:13},this),x.description&&e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:x.description},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:60,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:55,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:50,columnNumber:9},this)},{key:"roles",label:"Roles",render:x=>e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:(x.roles??[]).map(b=>e.jsxDEV(E,{role:b.role},b.role,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:72,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:70,columnNumber:9},this)},{key:"created_at",label:"Created",render:x=>e.jsxDEV(w,{date:x.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:80,columnNumber:24},this),className:"w-44"},{key:"actions",label:"",render:x=>e.jsxDEV(M,{children:[e.jsxDEV(D,{icon:_,title:"Edit bot",onClick:()=>p(x)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:88,columnNumber:11},this),e.jsxDEV(D,{icon:P,title:"Delete bot",onClick:()=>o(x),colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:93,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:87,columnNumber:9},this),className:"w-16 text-right"}],V=()=>{a&&s.mutate(a.id,{onSuccess:()=>{o(null),(c==null?void 0:c.id)===a.id&&m(null)}})};return e.jsxDEV("div",{children:[t?e.jsxDEV("div",{className:"flex justify-end mb-4",children:e.jsxDEV("button",{onClick:()=>r(!0),className:"btn-primary text-xs",children:"Add Bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:119,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:118,columnNumber:9},this):e.jsxDEV(S,{title:"Service Accounts",actions:e.jsxDEV("button",{onClick:()=>r(!0),className:"btn-primary text-xs",children:"Add Bot"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:127,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:124,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_360px] gap-6",children:[e.jsxDEV("div",{className:"overflow-x-clip",children:[e.jsxDEV(U,{columns:f,data:h,keyFn:x=>x.id,isLoading:g,emptyMessage:"No bots yet",onRowClick:x=>m(x),activeRowKey:(v==null?void 0:v.id)??null},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:136,columnNumber:11},this),e.jsxDEV(k,{page:l.page,totalPages:l.totalPages(n),onPageChange:l.setPage,total:n,pageSize:l.pageSize,onPageSizeChange:l.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:146,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:135,columnNumber:9},this),e.jsxDEV(pe,{bot:v},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:156,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:134,columnNumber:7},this),e.jsxDEV(de,{open:i,onClose:()=>r(!1)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:159,columnNumber:7},this),e.jsxDEV(me,{open:!!d,onClose:()=>p(null),bot:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:161,columnNumber:7},this),e.jsxDEV(y,{open:!!a,onClose:()=>o(null),onConfirm:V,title:"Delete Bot",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:(a==null?void 0:a.display_name)||(a==null?void 0:a.external_id)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:175,columnNumber:13},this),"? This will also revoke all API keys. This action cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:173,columnNumber:11},this),isPending:s.isPending,error:s.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:167,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/bots/BotsPage.tsx",lineNumber:116,columnNumber:5},this)}function xe({user:t}){const{data:l}=R(),s=K(),i=I(),[r,d]=u.useState(""),[p,c]=u.useState("member"),m=(l==null?void 0:l.roles)??[],a=(t==null?void 0:t.roles)??[],o=u.useMemo(()=>{const n=new Set(a.map(h=>h.role));return m.filter(h=>!n.has(h))},[m,a]),N=()=>{!t||!r.trim()||s.mutate({userId:t.id,role:r.trim(),type:p},{onSuccess:()=>{d(""),c("member")}})},g=n=>{t&&i.mutate({userId:t.id,role:n})};return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px]",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Role Membership"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:37,columnNumber:7},this),t?e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-primary",children:t.display_name||t.external_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:48,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"Member of:"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:49,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:47,columnNumber:11},this),a.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"No roles assigned."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:53,columnNumber:13},this):e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:a.map(n=>e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary",children:[e.jsxDEV(E,{role:n.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:61,columnNumber:19},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:n.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:62,columnNumber:19},this),e.jsxDEV("button",{onClick:()=>g(n.role),className:"text-text-tertiary hover:text-status-error transition-colors ml-0.5",title:`Remove ${n.role}`,children:"×"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:63,columnNumber:19},this)]},n.role,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:57,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:55,columnNumber:13},this),o.length>0&&e.jsxDEV("div",{className:"pt-3 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Add Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:77,columnNumber:15},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("select",{value:r,onChange:n=>d(n.target.value),className:"select text-xs font-mono flex-1",children:[e.jsxDEV("option",{value:"",children:"Select a role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:86,columnNumber:19},this),o.map(n=>e.jsxDEV("option",{value:n,children:n},n,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:88,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:81,columnNumber:17},this),e.jsxDEV("select",{value:p,onChange:n=>c(n.target.value),className:"select text-xs w-24",children:[e.jsxDEV("option",{value:"member",children:"member"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:96,columnNumber:19},this),e.jsxDEV("option",{value:"admin",children:"admin"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:97,columnNumber:19},this),e.jsxDEV("option",{value:"superadmin",children:"superadmin"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:98,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:91,columnNumber:17},this),e.jsxDEV("button",{onClick:N,disabled:!r||s.isPending,className:"btn-primary text-xs",children:s.isPending?"...":"Add"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:100,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:80,columnNumber:15},this),s.error&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:s.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:109,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:76,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:46,columnNumber:9},this):e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Select a user to manage their roles."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:42,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/RolePanel.tsx",lineNumber:36,columnNumber:5},this)}function he({active:t,onChange:l}){const s=(i,r,d)=>e.jsxDEV("button",{onClick:()=>l(i),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${t===i?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[r,d]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/AccountTabToggle.tsx",lineNumber:7,columnNumber:5},this);return e.jsxDEV("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[s("users",e.jsxDEV(ie,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/AccountTabToggle.tsx",lineNumber:22,columnNumber:21},this),"User Accounts"),s("service-accounts",e.jsxDEV(re,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/AccountTabToggle.tsx",lineNumber:23,columnNumber:32},this),"Service Accounts")]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/AccountTabToggle.tsx",lineNumber:21,columnNumber:5},this)}const fe=[{value:"active",label:"Active"},{value:"inactive",label:"Inactive"},{value:"suspended",label:"Suspended"}],ge={active:"bg-status-success",inactive:"bg-text-tertiary",suspended:"bg-status-error"};function Fe(){const[t,l]=le(),i=t.get("tab")==="service-accounts"?"service-accounts":"users",r=d=>{l(d==="users"?{}:{tab:d})};return e.jsxDEV("div",{children:[e.jsxDEV(S,{title:"Accounts",actions:e.jsxDEV(he,{active:i,onChange:r},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:50,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:48,columnNumber:7},this),i==="users"?e.jsxDEV(ve,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:52,columnNumber:32},this):e.jsxDEV(Ne,{embedded:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:52,columnNumber:56},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:47,columnNumber:5},this)}function ve(){const{filters:t,setFilter:l,pagination:s}=C({filters:{status:""}}),i=F(),[r,d]=u.useState(!1),[p,c]=u.useState(null),[m,a]=u.useState(null),[o,N]=u.useState(null),{data:g,isLoading:n}=z({status:t.status||void 0,limit:s.pageSize,offset:s.offset}),h=(g==null?void 0:g.total)??0,v=(g==null?void 0:g.users)??[],f=u.useMemo(()=>m?v.find(b=>b.id===m.id)??m:null,[v,m]),V=[{key:"display_name",label:"User",render:b=>e.jsxDEV("div",{className:"flex items-center gap-2.5",children:[e.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${ge[b.status]??"bg-status-pending"}`,title:b.status},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:88,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-primary",children:b.display_name||b.external_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:93,columnNumber:13},this),b.email&&e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:b.email},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:97,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:92,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:87,columnNumber:9},this)},{key:"roles",label:"Roles",render:b=>e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:(b.roles??[]).map(B=>e.jsxDEV(E,{role:B.role},B.role,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:109,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:107,columnNumber:9},this)},{key:"created_at",label:"Created",render:b=>e.jsxDEV(w,{date:b.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:117,columnNumber:24},this),className:"w-44"},{key:"actions",label:"",render:b=>e.jsxDEV(M,{children:[e.jsxDEV(D,{icon:_,title:"Edit user",onClick:()=>c(b)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(D,{icon:P,title:"Delete user",onClick:()=>N(b),colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:130,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:124,columnNumber:9},this),className:"w-16 text-right"}],x=()=>{o&&i.mutate(o.id,{onSuccess:()=>N(null)})};return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex justify-end mb-4",children:e.jsxDEV("button",{onClick:()=>d(!0),className:"btn-primary text-xs",children:"Add User"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:152,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:151,columnNumber:7},this),e.jsxDEV($,{children:e.jsxDEV(O,{label:"Status",value:t.status,onChange:b=>l("status",b),options:fe},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:158,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:157,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6",children:[e.jsxDEV("div",{className:"overflow-x-clip",children:[e.jsxDEV(U,{columns:V,data:v,keyFn:b=>b.id,isLoading:n,emptyMessage:"No users found",onRowClick:b=>a(b),activeRowKey:(f==null?void 0:f.id)??null},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:169,columnNumber:11},this),e.jsxDEV(k,{page:s.page,totalPages:s.totalPages(h),onPageChange:s.setPage,total:h,pageSize:s.pageSize,onPageSizeChange:s.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:179,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:168,columnNumber:9},this),e.jsxDEV(xe,{user:f},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:190,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:166,columnNumber:7},this),e.jsxDEV(oe,{open:r,onClose:()=>d(!1)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:193,columnNumber:7},this),e.jsxDEV(ne,{open:!!p,onClose:()=>c(null),user:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:195,columnNumber:7},this),e.jsxDEV(y,{open:!!o,onClose:()=>N(null),onConfirm:x,title:"Delete User",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:(o==null?void 0:o.display_name)||(o==null?void 0:o.external_id)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:209,columnNumber:13},this),"? This action cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:207,columnNumber:11},this),isPending:i.isPending,error:i.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:201,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/users/UsersPage.tsx",lineNumber:150,columnNumber:5},this)}export{Fe as UsersPage};
|
|
2
|
-
//# sourceMappingURL=index-4IUoh_hd.js.map
|