@hotmeshio/long-tail 0.1.15 → 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/settings.js +0 -3
- package/build/api/workflows/config.js +5 -0
- package/build/api/yaml-workflows/crud.js +25 -5
- package/build/index.d.ts +1 -2
- package/build/index.js +1 -4
- package/build/lib/db/schemas/002_seed.sql +3 -81
- package/build/lib/events/socketio.d.ts +12 -0
- package/build/lib/events/socketio.js +24 -1
- 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/routes/index.js +2 -0
- package/build/routes/nats-credentials.d.ts +2 -0
- package/build/routes/nats-credentials.js +22 -0
- 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/services/yaml-workflow/workers/register.js +4 -2
- package/build/start/adapters.js +4 -1
- package/build/start/socket-auth.d.ts +13 -0
- package/build/start/socket-auth.js +32 -0
- 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-NLryl1_B.js.map → AdminDashboard-CsTOErp1.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BqQA3IJp.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-6vexlrk3.js.map → AvailableEscalationsPage-BqQA3IJp.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-C2xR1xay.js +2 -0
- package/dashboard/dist/assets/{BotPicker-DWhn0tr1.js.map → BotPicker-C2xR1xay.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-CRtHQsAv.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-CgYgQiOc.js.map → CollapsibleSection-CRtHQsAv.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-DCKAPXD3.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
- package/dashboard/dist/assets/{CopyableId-DXkaAOYk.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-D2G1ldiF.js.map → CustomDurationPicker-BABUv1V2.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-D3-wSEf0.js +2 -0
- package/dashboard/dist/assets/{DataTable-DXSUbA26.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-CQGqkXP_.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-BMJAPkMi.js.map → EventTable-Dh3_9DAY.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
- package/dashboard/dist/assets/{FilterBar-DbVbCzH2.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-0XNuXj0M.js.map → ListToolbar-CyEkulVR.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-ChLa6Gl7.js +2 -0
- package/dashboard/dist/assets/{McpOverview-CeYnCzBN.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-CZtodW_Z.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-yyhUeKoA.js.map → Modal-DEODGeqx.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-CJm_BTPU.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-Ceh7OQtZ.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-BrPikMFy.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-vfnCDyQK.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-2miaYd8G.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-DxbJMfJu.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-DurFwIwe.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-CNKraP6u.js.map → RunAsSelector-CD7_Dmb0.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
- package/dashboard/dist/assets/{StatCard-CKplpK3w.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-Dicx0WTZ.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-B2jYvU3-.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-CypDZ6Kl.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-D7CdkAeg.js.map → TasksListPage-g6XIbhju.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-BihIwEbB.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-B5LXB2aj.js.map → TimeAgo-BihIwEbB.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-GOFcvE-i.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-Crb9b0Gw.js.map → TimestampCell-GOFcvE-i.js.map} +1 -1
- package/dashboard/dist/assets/UserName-CmMVt4vS.js +2 -0
- package/dashboard/dist/assets/{UserName-OPg-nkRa.js.map → UserName-CmMVt4vS.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-soRFz_30.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-CcLVrs9b.js.map → WorkflowExecutionPage-soRFz_30.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-CCV4MMj7.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-DvShiYJV.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-Dqos20NE.js → bots-BZPXDh_y.js} +2 -2
- package/dashboard/dist/assets/{bots-Dqos20NE.js.map → bots-BZPXDh_y.js.map} +1 -1
- package/dashboard/dist/assets/escalation-DBUIq1Z4.js +2 -0
- package/dashboard/dist/assets/{escalation-A0CsbvNV.js.map → escalation-DBUIq1Z4.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-BpBJN6k4.js.map → escalation-columns-DL4zsR8Y.js.map} +1 -1
- package/dashboard/dist/assets/helpers-D50KFFkI.js +2 -0
- package/dashboard/dist/assets/{helpers-CmznCuAx.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-Cr0Rqsj7.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-BYwD3kHN.js.map → index-D9_hZmsW.js.map} +1 -1
- package/dashboard/dist/assets/index-DrouIN-M.js +2 -0
- package/dashboard/dist/assets/{index-VnYkWW8r.js.map → index-DrouIN-M.js.map} +1 -1
- package/dashboard/dist/assets/index-DzICLMI7.js +2 -0
- package/dashboard/dist/assets/{index-XGOmZ117.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-DrWymhSu.js.map → mcp-D0GrHRFe.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js → mcp-query-DC5woQn5.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js.map → mcp-query-DC5woQn5.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js → mcp-runs-CsoVQoPB.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js.map → mcp-runs-CsoVQoPB.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-unpIb4gX.js +2 -0
- package/dashboard/dist/assets/{namespaces-Cm6AY5sh.js.map → namespaces-unpIb4gX.js.map} +1 -1
- package/dashboard/dist/assets/{roles-2v1Kc7BJ.js → roles--kBaFljg.js} +2 -2
- package/dashboard/dist/assets/{roles-2v1Kc7BJ.js.map → roles--kBaFljg.js.map} +1 -1
- package/dashboard/dist/assets/settings-B96YkawY.js +2 -0
- package/dashboard/dist/assets/{settings-DTQNp6tH.js.map → settings-B96YkawY.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CS1rgG1s.js → tasks-D_1NCfOZ.js} +2 -2
- package/dashboard/dist/assets/{tasks-CS1rgG1s.js.map → tasks-D_1NCfOZ.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js → useEventHooks-BPjEkCpD.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.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-BeR-nVWQ.js → useYamlActivityEvents-D3RQjfzo.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BeR-nVWQ.js.map → useYamlActivityEvents-D3RQjfzo.js.map} +1 -1
- package/dashboard/dist/assets/{users-DYsdQ7Md.js → users-e2oatvoj.js} +2 -2
- package/dashboard/dist/assets/{users-DYsdQ7Md.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-2QAXh3UD.js → workflows-D6diL54s.js} +2 -2
- package/dashboard/dist/assets/{workflows-2QAXh3UD.js.map → workflows-D6diL54s.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.js → yaml-workflows-CAKU7LUu.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.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/system/seed/server-definitions.d.ts +0 -3210
- package/build/system/seed/server-definitions.js +0 -232
- package/dashboard/dist/assets/AdminDashboard-NLryl1_B.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +0 -2
- package/dashboard/dist/assets/BotPicker-DWhn0tr1.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-CgYgQiOc.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-DCKAPXD3.js +0 -2
- package/dashboard/dist/assets/CopyableId-DXkaAOYk.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-B361BOfU.js.map +0 -1
- package/dashboard/dist/assets/CustomDurationPicker-D2G1ldiF.js +0 -2
- package/dashboard/dist/assets/DataTable-DXSUbA26.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-CQGqkXP_.js +0 -2
- package/dashboard/dist/assets/EmptyState-Dep92Wkg.js +0 -2
- package/dashboard/dist/assets/EmptyState-Dep92Wkg.js.map +0 -1
- package/dashboard/dist/assets/EscalationsOverview-DVEFVjs7.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-DVEFVjs7.js.map +0 -1
- package/dashboard/dist/assets/EventTable-BMJAPkMi.js +0 -2
- package/dashboard/dist/assets/FilterBar-DbVbCzH2.js +0 -2
- package/dashboard/dist/assets/ListToolbar-0XNuXj0M.js +0 -2
- package/dashboard/dist/assets/McpOverview-CeYnCzBN.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-CfUcdzaj.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +0 -1
- package/dashboard/dist/assets/Modal-yyhUeKoA.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +0 -2
- package/dashboard/dist/assets/PageHeader-CZ9a8cpr.js +0 -2
- package/dashboard/dist/assets/PageHeader-CZ9a8cpr.js.map +0 -1
- package/dashboard/dist/assets/PageHeaderWithStats-BJuNs5NM.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-BJuNs5NM.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-BrPikMFy.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-2miaYd8G.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-DqpRDqjk.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-DqpRDqjk.js.map +0 -1
- package/dashboard/dist/assets/RolePill-DxbJMfJu.js +0 -2
- package/dashboard/dist/assets/RolesPage-CYHRo21-.js +0 -2
- package/dashboard/dist/assets/RolesPage-CYHRo21-.js.map +0 -1
- package/dashboard/dist/assets/RowActions-DurFwIwe.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +0 -2
- package/dashboard/dist/assets/StatCard-CKplpK3w.js +0 -2
- package/dashboard/dist/assets/StatusBadge-Dm0V1dNN.js +0 -2
- package/dashboard/dist/assets/StatusBadge-Dm0V1dNN.js.map +0 -1
- package/dashboard/dist/assets/StepIndicator-Dicx0WTZ.js +0 -2
- package/dashboard/dist/assets/StickyPagination-B2jYvU3-.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +0 -1
- package/dashboard/dist/assets/TagInput-CypDZ6Kl.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DooDNJGT.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DooDNJGT.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-C1hZ-j31.js +0 -2
- package/dashboard/dist/assets/TaskQueuePill-C1hZ-j31.js.map +0 -1
- package/dashboard/dist/assets/TasksListPage-D7CdkAeg.js +0 -2
- package/dashboard/dist/assets/TimeAgo-B5LXB2aj.js +0 -2
- package/dashboard/dist/assets/TimestampCell-Crb9b0Gw.js +0 -2
- package/dashboard/dist/assets/UserName-OPg-nkRa.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-CcLVrs9b.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-DB1SncBi.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-DB1SncBi.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-DvShiYJV.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +0 -1
- package/dashboard/dist/assets/escalation-A0CsbvNV.js +0 -2
- package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +0 -2
- package/dashboard/dist/assets/helpers-CmznCuAx.js +0 -2
- package/dashboard/dist/assets/index-BIeYV5QK.js +0 -2
- package/dashboard/dist/assets/index-BIeYV5QK.js.map +0 -1
- package/dashboard/dist/assets/index-BYwD3kHN.js +0 -5
- package/dashboard/dist/assets/index-C5TUqJu0.css +0 -1
- package/dashboard/dist/assets/index-C8-UaN4N.js +0 -2
- package/dashboard/dist/assets/index-C8-UaN4N.js.map +0 -1
- package/dashboard/dist/assets/index-CAj5LT9H.js +0 -15
- package/dashboard/dist/assets/index-CAj5LT9H.js.map +0 -1
- package/dashboard/dist/assets/index-CjxHCVxl.js +0 -2
- package/dashboard/dist/assets/index-CjxHCVxl.js.map +0 -1
- package/dashboard/dist/assets/index-Cr0Rqsj7.js +0 -2
- package/dashboard/dist/assets/index-DZHNte4o.js +0 -2
- package/dashboard/dist/assets/index-DZHNte4o.js.map +0 -1
- package/dashboard/dist/assets/index-VnYkWW8r.js +0 -2
- package/dashboard/dist/assets/index-XGOmZ117.js +0 -2
- package/dashboard/dist/assets/index-ZjOUzWhc.js +0 -2
- package/dashboard/dist/assets/index-ZjOUzWhc.js.map +0 -1
- package/dashboard/dist/assets/index-puKKZ5l8.js +0 -281
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +0 -1
- package/dashboard/dist/assets/index-t5frSddy.js +0 -6
- package/dashboard/dist/assets/index-t5frSddy.js.map +0 -1
- package/dashboard/dist/assets/mcp-DrWymhSu.js +0 -2
- package/dashboard/dist/assets/namespaces-Cm6AY5sh.js +0 -2
- package/dashboard/dist/assets/settings-DTQNp6tH.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 +1,2 @@
|
|
|
1
|
-
import{u as a}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=tasks-
|
|
1
|
+
import{u as a}from"./vendor-query-B2UbickB.js";import{b as t}from"./index-BUjxYyxc.js";function y(e){const s=new URLSearchParams;return e.status&&s.set("status",e.status),e.lt_type&&s.set("lt_type",e.lt_type),e.workflow_type&&s.set("workflow_type",e.workflow_type),e.origin_id&&s.set("origin_id",e.origin_id),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),a({queryKey:["tasks",e],queryFn:()=>t(`/tasks?${s}`)})}function c(e){return a({queryKey:["tasks",e],queryFn:()=>t(`/tasks/${e}`),enabled:!!e})}function k(e){return a({queryKey:["tasks","children",e],queryFn:()=>t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=50`),enabled:!!e})}function r(e){return a({queryKey:["tasks","byWorkflow",e],queryFn:async()=>{const s=await t(`/tasks?workflow_id=${encodeURIComponent(e)}&limit=1`);return s.tasks.length>0?s.tasks[0]:(await t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=1`)).tasks[0]??null},enabled:!!e})}function p(e){const s=new URLSearchParams;return e!=null&&e.limit&&s.set("limit",String(e.limit)),(e==null?void 0:e.offset)!==void 0&&s.set("offset",String(e.offset)),e!=null&&e.workflow_type&&s.set("workflow_type",e.workflow_type),e!=null&&e.status&&s.set("status",e.status),e!=null&&e.search&&s.set("search",e.search),a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes?${s}`)})}function m(e){return a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes/${encodeURIComponent(e)}`),enabled:!!e,retry:3,retryDelay:1e3})}export{m as a,r as b,y as c,c as d,k as e,p as u};
|
|
2
|
+
//# sourceMappingURL=tasks-D_1NCfOZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-
|
|
1
|
+
{"version":3,"file":"tasks-D_1NCfOZ.js","sources":["../../src/api/tasks.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTTaskRecord, LTEscalationRecord } from './types';\n\ninterface TaskListResponse {\n tasks: LTTaskRecord[];\n total: number;\n}\n\ninterface TaskFilters {\n status?: string;\n lt_type?: string;\n workflow_type?: string;\n origin_id?: string;\n limit?: number;\n offset?: number;\n}\n\n// ── Process types ─────────────────────────────────────────────────\n\nexport interface ProcessSummary {\n origin_id: string;\n task_count: number;\n completed: number;\n escalated: number;\n workflow_types: string[];\n started_at: string;\n last_activity: string;\n}\n\ninterface ProcessListResponse {\n processes: ProcessSummary[];\n total: number;\n}\n\nexport interface ProcessDetail {\n origin_id: string;\n tasks: LTTaskRecord[];\n escalations: LTEscalationRecord[];\n}\n\nexport function useTasks(filters: TaskFilters) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.lt_type) params.set('lt_type', filters.lt_type);\n if (filters.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters.origin_id) params.set('origin_id', filters.origin_id);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', filters],\n queryFn: () => apiFetch(`/tasks?${params}`),\n });\n}\n\nexport function useTask(id: string) {\n return useQuery<LTTaskRecord>({\n queryKey: ['tasks', id],\n queryFn: () => apiFetch(`/tasks/${id}`),\n enabled: !!id,\n });\n}\n\n/**\n * Find the task record for a workflow.\n * Tries workflow_id first (leaf workflows), then falls back to\n * parent_workflow_id (orchestrators whose child task carries the envelope).\n */\nexport function useChildTasks(parentWorkflowId: string) {\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', 'children', parentWorkflowId],\n queryFn: () =>\n apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(parentWorkflowId)}&limit=50`,\n ),\n enabled: !!parentWorkflowId,\n });\n}\n\nexport function useTaskByWorkflowId(workflowId: string) {\n return useQuery<LTTaskRecord | null>({\n queryKey: ['tasks', 'byWorkflow', workflowId],\n queryFn: async () => {\n // 1. Direct match — leaf workflows have their own task record\n const direct = await apiFetch<TaskListResponse>(\n `/tasks?workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n if (direct.tasks.length > 0) return direct.tasks[0];\n\n // 2. Orchestrator fallback — child task has parent_workflow_id = this workflow\n const child = await apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n return child.tasks[0] ?? null;\n },\n enabled: !!workflowId,\n });\n}\n\n// ── Process stats ────────────────────────────────────────────────\n\nexport interface ProcessStats {\n total: number;\n active: number;\n completed: number;\n escalated: number;\n by_workflow_type: {\n workflow_type: string;\n total: number;\n active: number;\n completed: number;\n escalated: number;\n }[];\n}\n\nexport function useProcessStats(period?: string) {\n const params = period ? `?period=${period}` : '';\n return useQuery<ProcessStats>({\n queryKey: ['processStats', period],\n queryFn: () => apiFetch(`/tasks/processes/stats${params}`),\n });\n}\n\n// ── Process hooks ─────────────────────────────────────────────────\n\nexport function useProcesses(filters?: {\n limit?: number;\n offset?: number;\n workflow_type?: string;\n status?: string;\n search?: string;\n}) {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters?.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters?.status) params.set('status', filters.status);\n if (filters?.search) params.set('search', filters.search);\n\n return useQuery<ProcessListResponse>({\n queryKey: ['processes', filters],\n queryFn: () => apiFetch(`/tasks/processes?${params}`),\n });\n}\n\nexport function useProcessDetail(originId: string) {\n return useQuery<ProcessDetail>({\n queryKey: ['processes', originId],\n queryFn: () => apiFetch(`/tasks/processes/${encodeURIComponent(originId)}`),\n enabled: !!originId,\n retry: 3,\n retryDelay: 1000,\n });\n}\n"],"names":["useTasks","filters","params","useQuery","apiFetch","useTask","id","useChildTasks","parentWorkflowId","useTaskByWorkflowId","workflowId","direct","useProcesses","useProcessDetail","originId"],"mappings":"uFAyCO,SAASA,EAASC,EAAsB,CAC7C,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACxEA,EAAQ,WAAWC,EAAO,IAAI,YAAaD,EAAQ,SAAS,EAC5DA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAOO,SAASC,EAAcC,EAA0B,CACtD,OAAOL,EAA2B,CAChC,SAAU,CAAC,QAAS,WAAYK,CAAgB,EAChD,QAAS,IACPJ,EACE,6BAA6B,mBAAmBI,CAAgB,CAAC,WAAA,EAErE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,EAAoBC,EAAoB,CACtD,OAAOP,EAA8B,CACnC,SAAU,CAAC,QAAS,aAAcO,CAAU,EAC5C,QAAS,SAAY,CAEnB,MAAMC,EAAS,MAAMP,EACnB,sBAAsB,mBAAmBM,CAAU,CAAC,UAAA,EAEtD,OAAIC,EAAO,MAAM,OAAS,EAAUA,EAAO,MAAM,CAAC,GAGpC,MAAMP,EAClB,6BAA6B,mBAAmBM,CAAU,CAAC,UAAA,GAEhD,MAAM,CAAC,GAAK,IAC3B,EACA,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CA4BO,SAASE,EAAaX,EAM1B,CACD,MAAMC,EAAS,IAAI,gBACnB,OAAID,GAAA,MAAAA,EAAS,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,GACzDA,GAAA,YAAAA,EAAS,UAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAC1EA,GAAA,MAAAA,EAAS,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACzEA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACpDA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EAEjDE,EAA8B,CACnC,SAAU,CAAC,YAAaF,CAAO,EAC/B,QAAS,IAAMG,EAAS,oBAAoBF,CAAM,EAAE,CAAA,CACrD,CACH,CAEO,SAASW,EAAiBC,EAAkB,CACjD,OAAOX,EAAwB,CAC7B,SAAU,CAAC,YAAaW,CAAQ,EAChC,QAAS,IAAMV,EAAS,oBAAoB,mBAAmBU,CAAQ,CAAC,EAAE,EAC1E,QAAS,CAAC,CAACA,EACX,MAAO,EACP,WAAY,GAAA,CACb,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as l,b as w}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=useEventHooks-
|
|
1
|
+
import{a as l,b as w}from"./vendor-query-B2UbickB.js";import{u as a,N as e}from"./index-BUjxYyxc.js";function f(s){const o=[];switch(s.type.split(".")[0]){case"task":o.push(["tasks"]),o.push(["jobs"]),o.push(["processes"]),s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["workflowState",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId])),s.originId&&o.push(["processes",s.originId]);break;case"escalation":o.push(["escalations"]),o.push(["escalationStats"]),s.workflowId&&o.push(["workflowExecution",s.workflowId]);break;case"workflow":o.push(["jobs"]),o.push(["tasks"]),o.push(["processes"]),s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["workflowState",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId]),o.push(["mcpQueryResult",s.workflowId]),o.push(["builderResult",s.workflowId]));break;case"activity":s.workflowId&&o.push(["mcpRunExecution",s.workflowId]),o.push(["mcpRuns"]);break;case"milestone":s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId])),o.push(["tasks"]);break;default:o.push(["jobs"]),o.push(["tasks"]);break}return o}function u(s=500){const o=w(),t=l.useRef(new Set),r=l.useRef(null);return l.useCallback(c=>{for(const i of c)t.current.add(JSON.stringify(i));r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{for(const i of t.current)o.invalidateQueries({queryKey:JSON.parse(i)});t.current.clear(),r.current=null},s)},[o,s])}function d(){const s=u(300);a(`${e}.task.>`,()=>{s([["jobs"]])}),a(`${e}.workflow.>`,()=>{s([["jobs"]])})}function h(s){const o=u(400);a(`${e}.>`,t=>{var n;if(!s||!(t.workflowId===s||((n=t.workflowId)==null?void 0:n.includes(s))))return;const c=t.type.split(".")[0],i=f(t);c==="escalation"&&i.push(["escalations","by-workflow",s]),o(i)})}function y(s){const o=u(400);a(`${e}.>`,t=>{var n;if(!s||!(t.workflowId===s||((n=t.workflowId)==null?void 0:n.includes(s))))return;const c=t.type.split(".")[0],i=f(t);c==="escalation"&&i.push(["escalations","by-workflow",s]),o(i)})}function E(s){const o=u(400);a(`${e}.>`,t=>{var i;if(!s||!(t.workflowId===s||((i=t.workflowId)==null?void 0:i.includes(s))))return;const c=f(t);c.push(["workflowSets"]),c.push(["yamlWorkflows"]),o(c)})}function b(s){const o=u(300),t=l.useCallback(r=>{s&&(r.originId!==s&&r.workflowId!==s||o([["processes",s]]))},[s,o]);a(`${e}.task.>`,t),a(`${e}.workflow.>`,t),a(`${e}.escalation.>`,t)}function I(){const s=u(300);a(`${e}.escalation.>`,()=>{s([["escalationStats"]])})}function m(){const s=u(300);a(`${e}.escalation.>`,()=>{s([["escalations"]])})}function R(s){const o=u(300);a(`${e}.escalation.>`,t=>{s&&t.escalationId===s&&o([["escalations",s],["escalations"],["escalationStats"]])})}function S(){const s=u(300);a(`${e}.task.>`,()=>{s([["processes"]])}),a(`${e}.workflow.>`,()=>{s([["processes"]])})}export{b as a,d as b,y as c,E as d,I as e,m as f,R as g,h,S as u};
|
|
2
|
+
//# sourceMappingURL=useEventHooks-BPjEkCpD.js.map
|
package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js.map → useEventHooks-BPjEkCpD.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEventHooks-BjXX8x3a.js","sources":["../../src/lib/events/invalidation.ts","../../src/hooks/useEventHooks.ts"],"sourcesContent":["import type { NatsLTEvent } from '../nats/types';\n\n/**\n * Map an event to the React Query keys that should be invalidated.\n *\n * Returns an array of query key prefixes. React Query's `invalidateQueries`\n * will match all queries whose key starts with any returned prefix.\n *\n * This is pure logic with no React or transport dependency — easily testable.\n * Works identically regardless of event transport (Socket.IO, NATS, etc.).\n */\nexport function getInvalidationKeys(event: NatsLTEvent): string[][] {\n const keys: string[][] = [];\n const category = event.type.split('.')[0];\n\n switch (category) {\n case 'task':\n keys.push(['tasks']);\n keys.push(['jobs']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n if (event.originId) {\n keys.push(['processes', event.originId]);\n }\n break;\n\n case 'escalation':\n keys.push(['escalations']);\n keys.push(['escalationStats']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n }\n break;\n\n case 'workflow':\n keys.push(['jobs']);\n keys.push(['tasks']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n keys.push(['mcpQueryResult', event.workflowId]);\n keys.push(['builderResult', event.workflowId]);\n }\n break;\n\n case 'activity':\n if (event.workflowId) {\n keys.push(['mcpRunExecution', event.workflowId]);\n }\n keys.push(['mcpRuns']);\n break;\n\n case 'milestone':\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n keys.push(['tasks']);\n break;\n\n default:\n keys.push(['jobs']);\n keys.push(['tasks']);\n break;\n }\n\n return keys;\n}\n","import { useRef, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEventSubscription } from './useEventContext';\nimport { getInvalidationKeys } from '../lib/events/invalidation';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\n/**\n * Debounced query invalidation. Collects query keys over a window\n * and fires a single batch invalidation, preventing rapid re-renders\n * when multiple events arrive in quick succession.\n */\nfunction useDebouncedInvalidation(delayMs = 500) {\n const qc = useQueryClient();\n const pendingKeys = useRef<Set<string>>(new Set());\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n return useCallback((keys: string[][]) => {\n for (const key of keys) {\n pendingKeys.current.add(JSON.stringify(key));\n }\n\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n for (const raw of pendingKeys.current) {\n qc.invalidateQueries({ queryKey: JSON.parse(raw) });\n }\n pendingKeys.current.clear();\n timer.current = null;\n }, delayMs);\n }, [qc, delayMs]);\n}\n\n/**\n * Invalidate workflow list queries (WorkflowsDashboard) on task/workflow events.\n */\nexport function useWorkflowListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['jobs']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['jobs']]);\n });\n}\n\n/**\n * Invalidate queries for a specific workflow execution page (durable workflows).\n *\n * Uses the centralized `getInvalidationKeys` mapping plus escalation-specific\n * keys for the detail view. Events are debounced to prevent flurries of re-renders.\n */\nexport function useWorkflowDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate queries for mcpQuery/builder detail pages.\n *\n * Covers: mcpQueryExecution, mcpQueryResult, builderResult, workflowExecution,\n * workflowState, and escalation keys. Replaces polling on these pages.\n */\nexport function useMcpQueryDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate workflow set and YAML workflow queries when plan-related events fire.\n * Covers the planner workflow and all child builder workflows.\n */\nexport function usePlanDetailEvents(plannerWorkflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!plannerWorkflowId) return;\n\n const isRelated = event.workflowId === plannerWorkflowId\n || event.workflowId?.includes(plannerWorkflowId);\n if (!isRelated) return;\n\n const keys = getInvalidationKeys(event);\n keys.push(['workflowSets']);\n keys.push(['yamlWorkflows']);\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate process detail queries on task/workflow events for a specific origin.\n */\nexport function useProcessDetailEvents(originId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n const handler = useCallback((event: any) => {\n if (!originId) return;\n if (event.originId !== originId && event.workflowId !== originId) return;\n invalidate([['processes', originId]]);\n }, [originId, invalidate]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, handler);\n}\n\n/**\n * Invalidate escalation stats (EscalationsOverview) on escalation events.\n */\nexport function useEscalationStatsEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalationStats']]);\n });\n}\n\n/**\n * Invalidate escalation list queries on escalation events.\n */\nexport function useEscalationListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalations']]);\n });\n}\n\n/**\n * Invalidate a single escalation detail on escalation events for that ID.\n */\nexport function useEscalationDetailEvents(escalationId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, (event) => {\n if (!escalationId) return;\n if (event.escalationId === escalationId) {\n invalidate([['escalations', escalationId], ['escalations'], ['escalationStats']]);\n }\n });\n}\n\n/**\n * Invalidate process list (ProcessesListPage) on task/workflow events.\n */\nexport function useProcessListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['processes']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['processes']]);\n });\n}\n"],"names":["getInvalidationKeys","event","keys","useDebouncedInvalidation","delayMs","qc","useQueryClient","pendingKeys","useRef","timer","useCallback","key","raw","useWorkflowListEvents","invalidate","useEventSubscription","NATS_SUBJECT_PREFIX","useWorkflowDetailEvents","workflowId","_a","category","useMcpQueryDetailEvents","usePlanDetailEvents","plannerWorkflowId","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useProcessListEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEventHooks-BPjEkCpD.js","sources":["../../src/lib/events/invalidation.ts","../../src/hooks/useEventHooks.ts"],"sourcesContent":["import type { NatsLTEvent } from '../nats/types';\n\n/**\n * Map an event to the React Query keys that should be invalidated.\n *\n * Returns an array of query key prefixes. React Query's `invalidateQueries`\n * will match all queries whose key starts with any returned prefix.\n *\n * This is pure logic with no React or transport dependency — easily testable.\n * Works identically regardless of event transport (Socket.IO, NATS, etc.).\n */\nexport function getInvalidationKeys(event: NatsLTEvent): string[][] {\n const keys: string[][] = [];\n const category = event.type.split('.')[0];\n\n switch (category) {\n case 'task':\n keys.push(['tasks']);\n keys.push(['jobs']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n if (event.originId) {\n keys.push(['processes', event.originId]);\n }\n break;\n\n case 'escalation':\n keys.push(['escalations']);\n keys.push(['escalationStats']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n }\n break;\n\n case 'workflow':\n keys.push(['jobs']);\n keys.push(['tasks']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n keys.push(['mcpQueryResult', event.workflowId]);\n keys.push(['builderResult', event.workflowId]);\n }\n break;\n\n case 'activity':\n if (event.workflowId) {\n keys.push(['mcpRunExecution', event.workflowId]);\n }\n keys.push(['mcpRuns']);\n break;\n\n case 'milestone':\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n keys.push(['tasks']);\n break;\n\n default:\n keys.push(['jobs']);\n keys.push(['tasks']);\n break;\n }\n\n return keys;\n}\n","import { useRef, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEventSubscription } from './useEventContext';\nimport { getInvalidationKeys } from '../lib/events/invalidation';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\n/**\n * Debounced query invalidation. Collects query keys over a window\n * and fires a single batch invalidation, preventing rapid re-renders\n * when multiple events arrive in quick succession.\n */\nfunction useDebouncedInvalidation(delayMs = 500) {\n const qc = useQueryClient();\n const pendingKeys = useRef<Set<string>>(new Set());\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n return useCallback((keys: string[][]) => {\n for (const key of keys) {\n pendingKeys.current.add(JSON.stringify(key));\n }\n\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n for (const raw of pendingKeys.current) {\n qc.invalidateQueries({ queryKey: JSON.parse(raw) });\n }\n pendingKeys.current.clear();\n timer.current = null;\n }, delayMs);\n }, [qc, delayMs]);\n}\n\n/**\n * Invalidate workflow list queries (WorkflowsDashboard) on task/workflow events.\n */\nexport function useWorkflowListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['jobs']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['jobs']]);\n });\n}\n\n/**\n * Invalidate queries for a specific workflow execution page (durable workflows).\n *\n * Uses the centralized `getInvalidationKeys` mapping plus escalation-specific\n * keys for the detail view. Events are debounced to prevent flurries of re-renders.\n */\nexport function useWorkflowDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate queries for mcpQuery/builder detail pages.\n *\n * Covers: mcpQueryExecution, mcpQueryResult, builderResult, workflowExecution,\n * workflowState, and escalation keys. Replaces polling on these pages.\n */\nexport function useMcpQueryDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate workflow set and YAML workflow queries when plan-related events fire.\n * Covers the planner workflow and all child builder workflows.\n */\nexport function usePlanDetailEvents(plannerWorkflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!plannerWorkflowId) return;\n\n const isRelated = event.workflowId === plannerWorkflowId\n || event.workflowId?.includes(plannerWorkflowId);\n if (!isRelated) return;\n\n const keys = getInvalidationKeys(event);\n keys.push(['workflowSets']);\n keys.push(['yamlWorkflows']);\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate process detail queries on task/workflow events for a specific origin.\n */\nexport function useProcessDetailEvents(originId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n const handler = useCallback((event: any) => {\n if (!originId) return;\n if (event.originId !== originId && event.workflowId !== originId) return;\n invalidate([['processes', originId]]);\n }, [originId, invalidate]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, handler);\n}\n\n/**\n * Invalidate escalation stats (EscalationsOverview) on escalation events.\n */\nexport function useEscalationStatsEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalationStats']]);\n });\n}\n\n/**\n * Invalidate escalation list queries on escalation events.\n */\nexport function useEscalationListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalations']]);\n });\n}\n\n/**\n * Invalidate a single escalation detail on escalation events for that ID.\n */\nexport function useEscalationDetailEvents(escalationId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, (event) => {\n if (!escalationId) return;\n if (event.escalationId === escalationId) {\n invalidate([['escalations', escalationId], ['escalations'], ['escalationStats']]);\n }\n });\n}\n\n/**\n * Invalidate process list (ProcessesListPage) on task/workflow events.\n */\nexport function useProcessListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['processes']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['processes']]);\n });\n}\n"],"names":["getInvalidationKeys","event","keys","useDebouncedInvalidation","delayMs","qc","useQueryClient","pendingKeys","useRef","timer","useCallback","key","raw","useWorkflowListEvents","invalidate","useEventSubscription","NATS_SUBJECT_PREFIX","useWorkflowDetailEvents","workflowId","_a","category","useMcpQueryDetailEvents","usePlanDetailEvents","plannerWorkflowId","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useProcessListEvents"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=useExpandedRows-
|
|
1
|
+
import{a}from"./vendor-query-B2UbickB.js";function p(r){const[n,o]=a.useState(()=>{try{const e=localStorage.getItem(r);if(e){const s=JSON.parse(e);if(Array.isArray(s))return new Set(s)}}catch{}return new Set}),c=a.useCallback(e=>{try{localStorage.setItem(r,JSON.stringify([...e]))}catch{}},[r]),l=a.useCallback(e=>{o(s=>{const t=new Set(s);return t.has(e)?t.delete(e):t.add(e),c(t),t})},[c]),d=a.useCallback(e=>n.has(e),[n]);return{expandedIds:n,toggle:l,isExpanded:d}}export{p as u};
|
|
2
|
+
//# sourceMappingURL=useExpandedRows-CkcEntB-.js.map
|
package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExpandedRows-
|
|
1
|
+
{"version":3,"file":"useExpandedRows-CkcEntB-.js","sources":["../../src/hooks/useExpandedRows.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\n/**\n * Track expanded row IDs with localStorage persistence.\n *\n * Resilient: if a stored ID no longer exists in the data, it's silently ignored.\n * Never blocks rendering — reads from localStorage synchronously on mount,\n * writes asynchronously on change.\n */\nexport function useExpandedRows(storageKey: string): {\n expandedIds: Set<string>;\n toggle: (id: string) => void;\n isExpanded: (id: string) => boolean;\n} {\n const [expandedIds, setExpandedIds] = useState<Set<string>>(() => {\n try {\n const raw = localStorage.getItem(storageKey);\n if (raw) {\n const parsed = JSON.parse(raw);\n if (Array.isArray(parsed)) return new Set(parsed);\n }\n } catch { /* corrupted or unavailable — start empty */ }\n return new Set();\n });\n\n const persist = useCallback((next: Set<string>) => {\n try {\n localStorage.setItem(storageKey, JSON.stringify([...next]));\n } catch { /* quota exceeded or unavailable — ignore */ }\n }, [storageKey]);\n\n const toggle = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n persist(next);\n return next;\n });\n }, [persist]);\n\n const isExpanded = useCallback((id: string) => expandedIds.has(id), [expandedIds]);\n\n return { expandedIds, toggle, isExpanded };\n}\n"],"names":["useExpandedRows","storageKey","expandedIds","setExpandedIds","useState","raw","parsed","persist","useCallback","next","toggle","id","prev","isExpanded"],"mappings":"0CASO,SAASA,EAAgBC,EAI9B,CACA,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAAsB,IAAM,CAChE,GAAI,CACF,MAAMC,EAAM,aAAa,QAAQJ,CAAU,EAC3C,GAAII,EAAK,CACP,MAAMC,EAAS,KAAK,MAAMD,CAAG,EAC7B,GAAI,MAAM,QAAQC,CAAM,EAAG,OAAO,IAAI,IAAIA,CAAM,CAClD,CACF,MAAQ,CAA+C,CACvD,WAAW,GACb,CAAC,EAEKC,EAAUC,cAAaC,GAAsB,CACjD,GAAI,CACF,aAAa,QAAQR,EAAY,KAAK,UAAU,CAAC,GAAGQ,CAAI,CAAC,CAAC,CAC5D,MAAQ,CAA+C,CACzD,EAAG,CAACR,CAAU,CAAC,EAETS,EAASF,cAAaG,GAAe,CACzCR,EAAgBS,GAAS,CACvB,MAAMH,EAAO,IAAI,IAAIG,CAAI,EACzB,OAAIH,EAAK,IAAIE,CAAE,EACbF,EAAK,OAAOE,CAAE,EAEdF,EAAK,IAAIE,CAAE,EAEbJ,EAAQE,CAAI,EACLA,CACT,CAAC,CACH,EAAG,CAACF,CAAO,CAAC,EAENM,EAAaL,cAAaG,GAAeT,EAAY,IAAIS,CAAE,EAAG,CAACT,CAAW,CAAC,EAEjF,MAAO,CAAE,YAAAA,EAAa,OAAAQ,EAAQ,WAAAG,CAAA,CAChC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as t}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=useFilterParams-
|
|
1
|
+
import{a as t}from"./vendor-query-B2UbickB.js";import{f as F}from"./vendor-react-CX88sFS5.js";function N(z){var h,C;const m=t.useRef(z),f=((h=m.current)==null?void 0:h.filters)??{},p=t.useMemo(()=>Object.keys(f),[]),i=((C=m.current)==null?void 0:C.pageSize)??25,[a,b]=F(),d=t.useRef(b);t.useEffect(()=>{d.current=b});const R=t.useMemo(()=>{const e={};for(const s of p)e[s]=a.get(s)??f[s];return e},[a,p,f]),l=Number(a.get("page"))||1,o=Number(a.get("pageSize"))||i,S=t.useMemo(()=>(l-1)*o,[l,o]),r=t.useCallback((e,s=!1)=>{d.current(g=>{const n=new URLSearchParams(g);for(const[M,u]of Object.entries(e))u===null||u===""||u===void 0?n.delete(M):n.set(M,u);return n},{replace:s})},[]),_=t.useCallback((e,s)=>{r({[e]:s||null,page:null})},[r]),x=t.useCallback(e=>{const s={page:null};for(const[g,n]of Object.entries(e))s[g]=n||null;r(s)},[r]),k=t.useCallback(e=>{r({page:e<=1?null:String(e)},!0)},[r]),P=t.useCallback(e=>{r({pageSize:e===i?null:String(e),page:null},!0)},[r,i]),y=t.useCallback(e=>Math.max(1,Math.ceil(e/o)),[o]),j=t.useMemo(()=>({page:l,pageSize:o,offset:S,setPage:k,setPageSize:P,totalPages:y}),[l,o,S,k,P,y]),c=t.useMemo(()=>({sort_by:a.get("sort_by")??"",order:a.get("order")||"desc"}),[a]),v=t.useCallback(e=>{const s=c.sort_by===e;r({sort_by:e||null,order:s&&c.order==="desc"?"asc":"desc",page:null})},[c.sort_by,c.order,r]);return{filters:R,setFilter:_,setFilters:x,pagination:j,sort:c,setSort:v}}export{N as u};
|
|
2
|
+
//# sourceMappingURL=useFilterParams-DZCAaBC7.js.map
|
package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterParams-
|
|
1
|
+
{"version":3,"file":"useFilterParams-DZCAaBC7.js","sources":["../../src/hooks/useFilterParams.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\ninterface PaginationState {\n page: number;\n pageSize: number;\n offset: number;\n setPage: (page: number) => void;\n setPageSize: (size: number) => void;\n totalPages: (total: number) => number;\n}\n\nexport interface SortState {\n sort_by: string;\n order: 'asc' | 'desc';\n}\n\ninterface UseFilterParamsResult<F extends Record<string, string>> {\n /** Current filter values, read from URL search params. */\n filters: F;\n /** Set a single filter. Resets page to 1. */\n setFilter: (key: keyof F, value: string) => void;\n /** Set multiple filters at once. Resets page to 1. */\n setFilters: (updates: Partial<F>) => void;\n /** Pagination state — same interface as usePagination. */\n pagination: PaginationState;\n /** Current sort state (from URL params). */\n sort: SortState;\n /** Toggle sort: if same column, flip direction; if different, default DESC. */\n setSort: (column: string) => void;\n}\n\n/**\n * Unified hook that syncs filter values and pagination with URL search params.\n *\n * - Deep-linking: landing on `?role=reviewer&page=3` pre-fills filters and pagination\n * - Clean URLs: default values (page 1, pageSize 25, empty strings) are omitted\n * - Replace mode: filter changes don't pollute browser history\n * - Auto-reset: changing any filter resets page to 1\n */\nexport function useFilterParams<F extends Record<string, string> = Record<string, string>>(\n options?: { filters?: F; pageSize?: number },\n): UseFilterParamsResult<F> {\n // Freeze config on first render to prevent re-render loops from inline objects\n const configRef = useRef(options);\n const filterDefaults = (configRef.current?.filters ?? {}) as F;\n const filterKeys = useMemo(() => Object.keys(filterDefaults), []);\n const defaultPageSize = configRef.current?.pageSize ?? 25;\n\n const [searchParams, setSearchParams] = useSearchParams();\n\n // Keep a stable ref to setSearchParams so downstream callbacks never change identity\n const setSearchParamsRef = useRef(setSearchParams);\n useEffect(() => { setSearchParamsRef.current = setSearchParams; });\n\n // ── Read current values from URL ──────────────────────────────────────────\n\n const filters = useMemo(() => {\n const result = {} as Record<string, string>;\n for (const key of filterKeys) {\n result[key] = searchParams.get(key) ?? filterDefaults[key];\n }\n return result as F;\n }, [searchParams, filterKeys, filterDefaults]);\n\n const page = Number(searchParams.get('page')) || 1;\n const pageSize = Number(searchParams.get('pageSize')) || defaultPageSize;\n const offset = useMemo(() => (page - 1) * pageSize, [page, pageSize]);\n\n // ── Batch-update helper ───────────────────────────────────────────────────\n\n const updateParams = useCallback(\n (updates: Record<string, string | null>, replace = false) => {\n setSearchParamsRef.current(\n (prev) => {\n const next = new URLSearchParams(prev);\n for (const [k, v] of Object.entries(updates)) {\n if (v === null || v === '' || v === undefined) {\n next.delete(k);\n } else {\n next.set(k, v);\n }\n }\n return next;\n },\n { replace },\n );\n },\n [],\n );\n\n // ── Filter setters (auto-reset page) ──────────────────────────────────────\n\n const setFilter = useCallback(\n (key: keyof F, value: string) => {\n updateParams({ [key as string]: value || null, page: null });\n },\n [updateParams],\n );\n\n const setFilters = useCallback(\n (updates: Partial<F>) => {\n const mapped: Record<string, string | null> = { page: null };\n for (const [k, v] of Object.entries(updates)) {\n mapped[k] = (v as string) || null;\n }\n updateParams(mapped);\n },\n [updateParams],\n );\n\n // ── Pagination ────────────────────────────────────────────────────────────\n\n const setPage = useCallback(\n (p: number) => {\n updateParams({ page: p <= 1 ? null : String(p) }, true);\n },\n [updateParams],\n );\n\n const setPageSize = useCallback(\n (size: number) => {\n updateParams({\n pageSize: size === defaultPageSize ? null : String(size),\n page: null,\n }, true);\n },\n [updateParams, defaultPageSize],\n );\n\n const totalPages = useCallback(\n (total: number) => Math.max(1, Math.ceil(total / pageSize)),\n [pageSize],\n );\n\n const pagination: PaginationState = useMemo(\n () => ({ page, pageSize, offset, setPage, setPageSize, totalPages }),\n [page, pageSize, offset, setPage, setPageSize, totalPages],\n );\n\n // ── Sort ─────────────────────────────────────────────────────────────────\n\n const sort: SortState = useMemo(\n () => ({\n sort_by: searchParams.get('sort_by') ?? '',\n order: (searchParams.get('order') as 'asc' | 'desc') || 'desc',\n }),\n [searchParams],\n );\n\n const setSort = useCallback(\n (column: string) => {\n const isSame = sort.sort_by === column;\n updateParams({\n sort_by: column || null,\n order: isSame ? (sort.order === 'desc' ? 'asc' : 'desc') : 'desc',\n page: null,\n });\n },\n [sort.sort_by, sort.order, updateParams],\n );\n\n return { filters, setFilter, setFilters, pagination, sort, setSort };\n}\n"],"names":["useFilterParams","options","configRef","useRef","filterDefaults","_a","filterKeys","useMemo","defaultPageSize","_b","searchParams","setSearchParams","useSearchParams","setSearchParamsRef","useEffect","filters","result","key","page","pageSize","offset","updateParams","useCallback","updates","replace","prev","next","k","v","setFilter","value","setFilters","mapped","setPage","p","setPageSize","size","totalPages","total","pagination","sort","setSort","column","isSame"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as S,b as p,c as d,a as m}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=useYamlActivityEvents-
|
|
1
|
+
import{u as S,b as p,c as d,a as m}from"./vendor-query-B2UbickB.js";import{b as u,u as g,N as v}from"./index-BUjxYyxc.js";const a=["workflowSets"];function C(t={}){const s=new URLSearchParams;return t.status&&s.set("status",t.status),t.search&&s.set("search",t.search),t.limit&&s.set("limit",String(t.limit)),t.offset!==void 0&&s.set("offset",String(t.offset)),S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets?${s}`)})}function E(t){return S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets/${t}`),enabled:!!t})}function K(){const t=p();return d({mutationFn:s=>u("/workflow-sets",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"})}})}function N(){const t=p();return d({mutationFn:({id:s,...c})=>u(`/workflow-sets/${s}/add`,{method:"POST",body:JSON.stringify(c)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"}),t.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function W(t){const[s,c]=m.useState([]),w=m.useCallback(i=>{var f;if(!t||i.workflowId!==t||((f=i.type)==null?void 0:f.split(".")[0])!=="activity")return;const n=i.activityName,e=i.data,l=i.type;c(r=>{const y=r.find(o=>o.activityId===n);return l==="activity.started"?y?r.map(o=>o.activityId===n?{...o,status:"running"}:o):[...r,{activityId:n,title:(e==null?void 0:e.title)||n,toolName:e==null?void 0:e.toolName,toolSource:e==null?void 0:e.toolSource,stepIndex:(e==null?void 0:e.stepIndex)??r.length,totalSteps:(e==null?void 0:e.totalSteps)??0,status:"running"}]:l==="activity.completed"&&y?r.map(o=>o.activityId===n?{...o,status:"completed"}:o):l==="activity.failed"&&y?r.map(o=>o.activityId===n?{...o,status:"failed",error:e==null?void 0:e.error}:o):r})},[t]);g(t?`${v}.activity.>`:"",w);const h=s.length>0&&s.every(i=>i.status==="completed"||i.status==="failed"),k=s.some(i=>i.status==="failed");return{steps:s,isComplete:h,isFailed:k}}export{W as a,E as b,N as c,C as d,K as u};
|
|
2
|
+
//# sourceMappingURL=useYamlActivityEvents-D3RQjfzo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useYamlActivityEvents-
|
|
1
|
+
{"version":3,"file":"useYamlActivityEvents-D3RQjfzo.js","sources":["../../src/api/workflow-sets.ts","../../src/hooks/useYamlActivityEvents.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { WorkflowSetRecord, PlanItem } from './types';\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const WORKFLOW_SETS_KEY = ['workflowSets'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/** List workflow sets with optional filters. */\nexport function useWorkflowSets(filters: {\n status?: string;\n search?: string;\n limit?: number;\n offset?: number;\n} = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<{ sets: WorkflowSetRecord[]; total: number }>({\n queryKey: [...WORKFLOW_SETS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-sets?${params}`),\n });\n}\n\n/** Get a single workflow set by ID. Updates via push events, not polling. */\nexport function useWorkflowSet(id: string | undefined) {\n return useQuery<WorkflowSetRecord>({\n queryKey: [...WORKFLOW_SETS_KEY, id],\n queryFn: () => apiFetch(`/workflow-sets/${id}`),\n enabled: !!id,\n });\n}\n\n/** Create a new workflow set from a specification. */\nexport function useCreateWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n name: string;\n description?: string;\n specification: string;\n }>({\n mutationFn: (params) =>\n apiFetch('/workflow-sets', {\n method: 'POST',\n body: JSON.stringify(params),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Update a workflow set's plan (engineer adjustments). */\nexport function useUpdateWorkflowSetPlan() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord, Error, {\n id: string;\n plan: PlanItem[];\n namespaces?: string[];\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/plan`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Add additional workflows to an existing set. */\nexport function useAddToWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n id: string;\n specification: string;\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/add`, {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n/** Trigger build phase for a workflow set. */\nexport function useBuildWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/build`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Deploy all namespaces in a workflow set. */\nexport function useDeployWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/deploy`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n","import { useState, useCallback } from 'react';\nimport { useEventSubscription } from './useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\nexport interface ActivityStep {\n activityId: string;\n title: string;\n toolName?: string;\n toolSource?: string;\n stepIndex: number;\n totalSteps: number;\n status: 'pending' | 'running' | 'completed' | 'failed';\n error?: string;\n}\n\n/**\n * Subscribe to activity events for a specific YAML workflow job.\n * Returns live step progress as events arrive.\n */\nexport function useYamlActivityEvents(jobId: string | null): {\n steps: ActivityStep[];\n isComplete: boolean;\n isFailed: boolean;\n} {\n const [steps, setSteps] = useState<ActivityStep[]>([]);\n\n const handler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n const category = event.type?.split('.')[0];\n if (category !== 'activity') return;\n\n const activityId = event.activityName as string;\n const data = event.data as Record<string, any> | undefined;\n const eventType = event.type as string;\n\n setSteps((prev) => {\n const existing = prev.find((s) => s.activityId === activityId);\n\n if (eventType === 'activity.started') {\n if (existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'running' as const } : s);\n }\n return [...prev, {\n activityId,\n title: data?.title || activityId,\n toolName: data?.toolName,\n toolSource: data?.toolSource,\n stepIndex: data?.stepIndex ?? prev.length,\n totalSteps: data?.totalSteps ?? 0,\n status: 'running' as const,\n }];\n }\n\n if (eventType === 'activity.completed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'completed' as const } : s);\n }\n\n if (eventType === 'activity.failed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'failed' as const, error: data?.error } : s);\n }\n\n return prev;\n });\n }, [jobId]);\n\n useEventSubscription(\n jobId ? `${NATS_SUBJECT_PREFIX}.activity.>` : '',\n handler,\n );\n\n const isComplete = steps.length > 0 && steps.every((s) => s.status === 'completed' || s.status === 'failed');\n const isFailed = steps.some((s) => s.status === 'failed');\n\n return { steps, isComplete, isFailed };\n}\n"],"names":["WORKFLOW_SETS_KEY","useWorkflowSets","filters","params","useQuery","apiFetch","useWorkflowSet","id","useCreateWorkflowSet","queryClient","useQueryClient","useMutation","useAddToWorkflowSet","body","useYamlActivityEvents","jobId","steps","setSteps","useState","handler","useCallback","event","_a","activityId","data","eventType","prev","existing","s","useEventSubscription","NATS_SUBJECT_PREFIX","isComplete","isFailed"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as o,b as t,c as n}from"./vendor-query-
|
|
2
|
-
//# sourceMappingURL=users-
|
|
1
|
+
import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-BUjxYyxc.js";function c(e={}){const s=new URLSearchParams;return e.role&&s.set("role",e.role),e.roleType&&s.set("roleType",e.roleType),e.status&&s.set("status",e.status),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),o({queryKey:["users",e],queryFn:()=>u(`/users?${s}`)})}function m(e){return o({queryKey:["users",e],queryFn:()=>u(`/users/${e}`),enabled:!!e})}function d(){const e=t();return n({mutationFn:s=>u("/users",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function l(){const e=t();return n({mutationFn:({id:s,...r})=>u(`/users/${s}`,{method:"PUT",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function f(){const e=t();return n({mutationFn:s=>u(`/users/${s}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function q(){const e=t();return n({mutationFn:({userId:s,role:r,type:i})=>u(`/users/${s}/roles`,{method:"POST",body:JSON.stringify({role:r,type:i})}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function S(){const e=t();return n({mutationFn:({userId:s,role:r})=>u(`/users/${s}/roles/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}export{m as a,d as b,l as c,q as d,S as e,f,c as u};
|
|
2
|
+
//# sourceMappingURL=users-e2oatvoj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users-
|
|
1
|
+
{"version":3,"file":"users-e2oatvoj.js","sources":["../../src/api/users.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTUserRecord, LTRoleType } from './types';\n\ninterface UserListResponse {\n users: LTUserRecord[];\n total: number;\n}\n\ninterface UserFilters {\n role?: string;\n roleType?: string;\n status?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useUsers(filters: UserFilters = {}) {\n const params = new URLSearchParams();\n if (filters.role) params.set('role', filters.role);\n if (filters.roleType) params.set('roleType', filters.roleType);\n if (filters.status) params.set('status', filters.status);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<UserListResponse>({\n queryKey: ['users', filters],\n queryFn: () => apiFetch(`/users?${params}`),\n });\n}\n\nexport function useUser(id: string) {\n return useQuery<LTUserRecord>({\n queryKey: ['users', id],\n queryFn: () => apiFetch(`/users/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n external_id: string;\n email?: string;\n display_name?: string;\n password?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/users', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUpdateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n email?: string;\n display_name?: string;\n status?: string;\n }) =>\n apiFetch(`/users/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useDeleteUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/users/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useAddUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n userId,\n role,\n type,\n }: {\n userId: string;\n role: string;\n type: LTRoleType;\n }) =>\n apiFetch(`/users/${userId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useRemoveUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, role }: { userId: string; role: string }) =>\n apiFetch(`/users/${userId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n"],"names":["useUsers","filters","params","useQuery","apiFetch","useUser","id","useCreateUser","queryClient","useQueryClient","useMutation","data","useUpdateUser","useDeleteUser","useAddUserRole","userId","role","type","useRemoveUserRole"],"mappings":"qGAiBO,SAASA,EAASC,EAAuB,GAAI,CAClD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EAC7CA,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAgB,CAC9B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAOXP,EAAS,SAAU,CACjB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASI,GAAgB,CAC9B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAOHP,EAAS,UAAUE,CAAE,GAAI,CACvB,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASK,GAAgB,CAC9B,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,UAAUE,CAAE,GAAI,CAAE,OAAQ,SAAU,EAC/C,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASM,GAAiB,CAC/B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,OAAAK,EACA,KAAAC,EACA,KAAAC,CAAA,IAMAb,EAAS,UAAUW,CAAM,SAAU,CACjC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAC,EAAM,KAAAC,EAAM,CAAA,CACpC,EACH,UAAW,IAAM,CACfT,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASU,GAAoB,CAClC,MAAMV,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,OAAAK,EAAQ,KAAAC,CAAA,IACrBZ,EAAS,UAAUW,CAAM,UAAU,mBAAmBC,CAAI,CAAC,GAAI,CAC7D,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfR,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH"}
|