@hotmeshio/long-tail 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/build/api/escalations/bulk.d.ts +78 -0
- package/build/api/escalations/bulk.js +279 -0
- package/build/api/escalations/claim.d.ts +30 -0
- package/build/api/escalations/claim.js +121 -0
- package/build/api/escalations/create.d.ts +29 -0
- package/build/api/escalations/create.js +101 -0
- package/build/api/escalations/helpers.d.ts +10 -0
- package/build/api/escalations/helpers.js +80 -0
- package/build/api/escalations/index.d.ts +6 -0
- package/build/api/escalations/index.js +26 -0
- package/build/api/escalations/list.d.ts +75 -0
- package/build/api/escalations/list.js +170 -0
- package/build/api/escalations/resolve.d.ts +18 -0
- package/build/api/escalations/resolve.js +243 -0
- package/build/api/escalations/single.d.ts +37 -0
- package/build/api/escalations/single.js +123 -0
- package/build/api/files.d.ts +3 -0
- package/build/api/files.js +18 -1
- package/build/api/knowledge.d.ts +36 -0
- package/build/api/knowledge.js +112 -0
- package/build/api/mcp/index.d.ts +2 -0
- package/build/api/mcp/index.js +16 -0
- package/build/api/{mcp.d.ts → mcp/servers.d.ts} +1 -33
- package/build/api/{mcp.js → mcp/servers.js} +4 -65
- package/build/api/mcp/tools.d.ts +33 -0
- package/build/api/mcp/tools.js +64 -0
- package/build/api/settings.js +9 -1
- package/build/api/workflows/config.d.ts +64 -0
- package/build/api/workflows/config.js +142 -0
- package/build/api/workflows/discovery.d.ts +29 -0
- package/build/api/workflows/discovery.js +153 -0
- package/build/api/workflows/index.d.ts +3 -0
- package/build/api/workflows/index.js +18 -0
- package/build/api/workflows/invocation.d.ts +67 -0
- package/build/api/workflows/invocation.js +188 -0
- package/build/api/yaml-workflows/cron.d.ts +39 -0
- package/build/api/yaml-workflows/cron.js +127 -0
- package/build/api/{yaml-workflows.d.ts → yaml-workflows/crud.d.ts} +22 -146
- package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +77 -378
- package/build/api/yaml-workflows/deploy.d.ts +71 -0
- package/build/api/yaml-workflows/deploy.js +223 -0
- package/build/api/yaml-workflows/helpers.d.ts +2 -0
- package/build/api/yaml-workflows/helpers.js +8 -0
- package/build/api/yaml-workflows/index.d.ts +4 -0
- package/build/api/yaml-workflows/index.js +27 -0
- package/build/api/yaml-workflows/versions.d.ts +43 -0
- package/build/api/yaml-workflows/versions.js +124 -0
- package/build/bin/ltc.d.ts +2 -0
- package/build/bin/ltc.js +220 -0
- package/build/examples/seed-data.d.ts +55 -0
- package/build/examples/seed-data.js +161 -0
- package/build/examples/seed.js +7 -164
- package/build/lib/cli/auth.d.ts +23 -0
- package/build/lib/cli/auth.js +167 -0
- package/build/lib/cli/client.d.ts +6 -0
- package/build/lib/cli/client.js +31 -0
- package/build/lib/cli/commands/escalations.d.ts +19 -0
- package/build/lib/cli/commands/escalations.js +69 -0
- package/build/lib/cli/commands/knowledge.d.ts +18 -0
- package/build/lib/cli/commands/knowledge.js +87 -0
- package/build/lib/cli/commands/mcp.d.ts +8 -0
- package/build/lib/cli/commands/mcp.js +33 -0
- package/build/lib/cli/commands/pipelines.d.ts +16 -0
- package/build/lib/cli/commands/pipelines.js +67 -0
- package/build/lib/cli/commands/status.d.ts +1 -0
- package/build/lib/cli/commands/status.js +28 -0
- package/build/lib/cli/commands/users.d.ts +7 -0
- package/build/lib/cli/commands/users.js +25 -0
- package/build/lib/cli/commands/workflows.d.ts +16 -0
- package/build/lib/cli/commands/workflows.js +104 -0
- package/build/lib/cli/compile.d.ts +2 -0
- package/build/lib/cli/compile.js +165 -0
- package/build/lib/cli/format.d.ts +23 -0
- package/build/lib/cli/format.js +94 -0
- package/build/lib/cli/init.d.ts +1 -0
- package/build/lib/cli/init.js +61 -0
- package/build/lib/cli/output.d.ts +27 -0
- package/build/lib/cli/output.js +126 -0
- package/build/lib/cli/scanner.d.ts +10 -0
- package/build/lib/cli/scanner.js +164 -0
- package/build/lib/cli/types.d.ts +16 -0
- package/build/lib/cli/types.js +2 -0
- package/build/lib/logger/index.d.ts +0 -9
- package/build/lib/logger/index.js +9 -4
- package/build/lib/storage/index.js +2 -2
- package/build/routes/file-browser.js +14 -0
- package/build/routes/index.js +2 -0
- package/build/routes/knowledge.d.ts +2 -0
- package/build/routes/knowledge.js +141 -0
- package/build/routes/yaml-workflows/crud.js +9 -0
- package/build/sdk/index.d.ts +17 -0
- package/build/sdk/index.js +19 -0
- package/build/services/mcp/client/connection-dispatch.d.ts +18 -0
- package/build/services/mcp/client/connection-dispatch.js +78 -0
- package/build/services/mcp/client/connection-lifecycle.d.ts +48 -0
- package/build/services/mcp/client/connection-lifecycle.js +296 -0
- package/build/services/mcp/client/connection-test.d.ts +10 -0
- package/build/services/mcp/client/connection-test.js +49 -0
- package/build/services/mcp/client/connection.d.ts +3 -68
- package/build/services/mcp/client/connection.js +15 -393
- package/build/services/mcp/server-lifecycle.d.ts +27 -0
- package/build/services/mcp/server-lifecycle.js +49 -0
- package/build/services/mcp/server-tools.d.ts +13 -0
- package/build/services/mcp/server-tools.js +287 -0
- package/build/services/mcp/server.d.ts +2 -26
- package/build/services/mcp/server.js +7 -315
- package/build/services/yaml-workflow/builder-regenerate.d.ts +25 -0
- package/build/services/yaml-workflow/builder-regenerate.js +111 -0
- package/build/services/yaml-workflow/db-versions.d.ts +17 -0
- package/build/services/yaml-workflow/db-versions.js +76 -0
- package/build/services/yaml-workflow/db.d.ts +3 -13
- package/build/services/yaml-workflow/db.js +15 -71
- package/build/services/yaml-workflow/deployer-helpers.js +48 -17
- package/build/services/yaml-workflow/durable-compiler/index.d.ts +22 -0
- package/build/services/yaml-workflow/durable-compiler/index.js +168 -0
- package/build/services/yaml-workflow/durable-compiler/parser.d.ts +12 -0
- package/build/services/yaml-workflow/durable-compiler/parser.js +110 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.d.ts +18 -0
- package/build/services/yaml-workflow/durable-compiler/prompts.js +570 -0
- package/build/services/yaml-workflow/durable-compiler/types.d.ts +51 -0
- package/build/services/yaml-workflow/durable-compiler/types.js +5 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.d.ts +17 -0
- package/build/services/yaml-workflow/pipeline/build/dag-assembly.js +192 -0
- package/build/services/yaml-workflow/pipeline/build/dag.d.ts +4 -13
- package/build/services/yaml-workflow/pipeline/build/dag.js +9 -185
- package/build/services/yaml-workflow/pipeline/prompt-templates.d.ts +10 -0
- package/build/services/yaml-workflow/pipeline/prompt-templates.js +270 -0
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +3 -6
- package/build/services/yaml-workflow/pipeline/prompts.js +8 -263
- package/build/start/workers.js +6 -5
- package/build/system/activities/file-storage.d.ts +4 -0
- package/build/system/activities/file-storage.js +7 -1
- package/build/system/activities/knowledge.d.ts +23 -0
- package/build/system/activities/knowledge.js +50 -10
- package/build/system/activities/sql.d.ts +3 -0
- package/build/system/activities/sql.js +25 -1
- package/build/system/mcp-servers/file-storage.js +3 -1
- package/build/system/mcp-servers/human-queue-schemas.d.ts +91 -0
- package/build/system/mcp-servers/human-queue-schemas.js +42 -0
- package/build/system/mcp-servers/human-queue.d.ts +2 -6
- package/build/system/mcp-servers/human-queue.js +9 -51
- package/build/system/mcp-servers/knowledge.js +43 -9
- package/build/system/mcp-servers/workflow-compiler.js +54 -0
- package/build/system/workflows/mcp-triage/activities-proxy.d.ts +21 -0
- package/build/system/workflows/mcp-triage/activities-proxy.js +70 -0
- package/build/system/workflows/mcp-triage/index.js +17 -75
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +1 -0
- package/build/system/workflows/mcp-workflow-planner/index.js +2 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js → AdminDashboard-NLryl1_B.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Cngijp4Q.js.map → AdminDashboard-NLryl1_B.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-6vexlrk3.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js → BotPicker-DWhn0tr1.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-B8Uvw9Si.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js → CollapsibleSection-CgYgQiOc.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DiFPuWOY.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CpXG9uyu.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js → CopyableId-DXkaAOYk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DKsTR9lK.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js → CredentialsPage-B361BOfU.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DlS7Kf40.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-B-9eW3pm.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js → DataTable-DXSUbA26.js} +2 -2
- package/dashboard/dist/assets/{DataTable-DkOokbtL.js.map → DataTable-DXSUbA26.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js → ElapsedCell-CQGqkXP_.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-DVtHqM-5.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js → EmptyState-Dep92Wkg.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-C7KIMIbE.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js → EscalationsOverview-DVEFVjs7.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BMKBlkPx.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js → EventTable-BMJAPkMi.js} +2 -2
- package/dashboard/dist/assets/{EventTable-BYZ5OVdQ.js.map → EventTable-BMJAPkMi.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js → FilterBar-DbVbCzH2.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-C5r3n6YO.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js → ListToolbar-0XNuXj0M.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-BGUajIsW.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js → McpOverview-CeYnCzBN.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-B_kJYHea.js.map → McpOverview-CeYnCzBN.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-t3qW3QNa.js.map +1 -0
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js → McpQueryPage-CfUcdzaj.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-BgAq_bQg.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js → McpRunDetailPage-CZtodW_Z.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-B8c0OszR.js.map → McpRunDetailPage-CZtodW_Z.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js → McpRunsPage-Dzgq7HGt.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-BY8C6k78.js.map → McpRunsPage-Dzgq7HGt.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js → Modal-yyhUeKoA.js} +2 -2
- package/dashboard/dist/assets/{Modal-E1yRnCeW.js.map → Modal-yyhUeKoA.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js → OperatorDashboard-Ceh7OQtZ.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-C8MSTzey.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js → PageHeader-CZ9a8cpr.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Cm5HBQF_.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-CNmWJFSN.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js → PriorityBadge-BrPikMFy.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-HSI4RVhs.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js → ProcessDetailPage-2miaYd8G.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-Dln8622H.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js → ProcessesListPage-DqpRDqjk.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-bIsd9N_h.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js → RolePill-DxbJMfJu.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BVUp2bF0.js.map → RolePill-DxbJMfJu.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-CYHRo21-.js +2 -0
- package/dashboard/dist/assets/{RolesPage-kH-Njt25.js.map → RolesPage-CYHRo21-.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js → RowActions-DurFwIwe.js} +2 -2
- package/dashboard/dist/assets/{RowActions-DbUJPfaW.js.map → RowActions-DurFwIwe.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-CNKraP6u.js.map +1 -0
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js → StatCard-CKplpK3w.js} +2 -2
- package/dashboard/dist/assets/{StatCard-Bs3JbyAz.js.map → StatCard-CKplpK3w.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js → StatusBadge-Dm0V1dNN.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-CakDdsCw.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js → StepIndicator-Dicx0WTZ.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-Cd_SG_yA.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js → StickyPagination-B2jYvU3-.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Bz0C18nC.js.map → StickyPagination-B2jYvU3-.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ClwumkT1.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js → TagInput-CypDZ6Kl.js} +2 -2
- package/dashboard/dist/assets/{TagInput-ClFhXG-U.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js → TaskDetailPage-DooDNJGT.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-SuMBdARt.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js → TaskQueuePill-C1hZ-j31.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-lJR1JW_W.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js → TasksListPage-D7CdkAeg.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-Dkq1Vtbt.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js → TimeAgo-B5LXB2aj.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-DgfDZ1pl.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js → TimestampCell-Crb9b0Gw.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-MpHZ1hMD.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DqsosA4B.js → UserName-OPg-nkRa.js} +2 -2
- package/dashboard/dist/assets/{UserName-DqsosA4B.js.map → UserName-OPg-nkRa.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CVlg38C3.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js → WorkflowPill-CCV4MMj7.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CRpZhjGR.js.map → WorkflowPill-CCV4MMj7.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-Ugzbs8mV.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js → WorkflowsOverview-DvShiYJV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CIp_lTNl.js.map → WorkflowsOverview-DvShiYJV.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DCBoMeGI.js.map +1 -0
- package/dashboard/dist/assets/{bots-DPfUpVqI.js → bots-Dqos20NE.js} +2 -2
- package/dashboard/dist/assets/{bots-DPfUpVqI.js.map → bots-Dqos20NE.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js → escalation-A0CsbvNV.js} +2 -2
- package/dashboard/dist/assets/{escalation-RrCDbMC3.js.map → escalation-A0CsbvNV.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js → escalation-columns-BpBJN6k4.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-CDGa9wsD.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js → helpers-CmznCuAx.js} +2 -2
- package/dashboard/dist/assets/{helpers-ZSKqdkdS.js.map → helpers-CmznCuAx.js.map} +1 -1
- package/dashboard/dist/assets/index-BIeYV5QK.js +2 -0
- package/dashboard/dist/assets/index-BIeYV5QK.js.map +1 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js +5 -0
- package/dashboard/dist/assets/index-BYwD3kHN.js.map +1 -0
- package/dashboard/dist/assets/index-C5TUqJu0.css +1 -0
- package/dashboard/dist/assets/{index-DX6zxr6t.js → index-C8-UaN4N.js} +2 -2
- package/dashboard/dist/assets/{index-DX6zxr6t.js.map → index-C8-UaN4N.js.map} +1 -1
- package/dashboard/dist/assets/index-CAj5LT9H.js +15 -0
- package/dashboard/dist/assets/index-CAj5LT9H.js.map +1 -0
- package/dashboard/dist/assets/index-CjxHCVxl.js +2 -0
- package/dashboard/dist/assets/{index-C90ZPzXk.js.map → index-CjxHCVxl.js.map} +1 -1
- package/dashboard/dist/assets/index-Cr0Rqsj7.js +2 -0
- package/dashboard/dist/assets/index-Cr0Rqsj7.js.map +1 -0
- package/dashboard/dist/assets/index-DZHNte4o.js +2 -0
- package/dashboard/dist/assets/{index-K40Qw1tk.js.map → index-DZHNte4o.js.map} +1 -1
- package/dashboard/dist/assets/{index-DNytWfSZ.js → index-VnYkWW8r.js} +2 -2
- package/dashboard/dist/assets/{index-DNytWfSZ.js.map → index-VnYkWW8r.js.map} +1 -1
- package/dashboard/dist/assets/{index-BbI2dzhJ.js → index-XGOmZ117.js} +2 -2
- package/dashboard/dist/assets/{index-BbI2dzhJ.js.map → index-XGOmZ117.js.map} +1 -1
- package/dashboard/dist/assets/index-ZjOUzWhc.js +2 -0
- package/dashboard/dist/assets/index-ZjOUzWhc.js.map +1 -0
- package/dashboard/dist/assets/{index-Cmgrk7PQ.js → index-puKKZ5l8.js} +71 -71
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
- package/dashboard/dist/assets/{index-BmVCyB6C.js → index-t5frSddy.js} +2 -2
- package/dashboard/dist/assets/{index-BmVCyB6C.js.map → index-t5frSddy.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CNE44TSp.js → mcp-DrWymhSu.js} +2 -2
- package/dashboard/dist/assets/{mcp-CNE44TSp.js.map → mcp-DrWymhSu.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js → mcp-query-BhUxVEMS.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-RQX0uN-5.js.map → mcp-query-BhUxVEMS.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js → mcp-runs-DUfz4mLd.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-0w40bdz-.js.map → mcp-runs-DUfz4mLd.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js → namespaces-Cm6AY5sh.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BbmdXuPp.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
- package/dashboard/dist/assets/{roles-DoHYlhWH.js → roles-2v1Kc7BJ.js} +2 -2
- package/dashboard/dist/assets/{roles-DoHYlhWH.js.map → roles-2v1Kc7BJ.js.map} +1 -1
- package/dashboard/dist/assets/{settings-BAiJiCHS.js → settings-DTQNp6tH.js} +2 -2
- package/dashboard/dist/assets/{settings-BAiJiCHS.js.map → settings-DTQNp6tH.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CvroqHtm.js → tasks-CS1rgG1s.js} +2 -2
- package/dashboard/dist/assets/{tasks-CvroqHtm.js.map → tasks-CS1rgG1s.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
- package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-D56KV14X.js.map → useYamlActivityEvents-BeR-nVWQ.js.map} +1 -1
- package/dashboard/dist/assets/{users-CxIMy_xw.js → users-DYsdQ7Md.js} +2 -2
- package/dashboard/dist/assets/{users-CxIMy_xw.js.map → users-DYsdQ7Md.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-AFGxSeQS.js → vendor-icons-CWl44VA6.js} +77 -77
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-yR9yais7.js → workflows-2QAXh3UD.js} +2 -2
- package/dashboard/dist/assets/{workflows-yR9yais7.js.map → workflows-2QAXh3UD.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js → yaml-workflows-sx8-UEE3.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-QVF2MZ0l.js.map → yaml-workflows-sx8-UEE3.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/file-browser.md +101 -0
- package/docs/api/http/knowledge.md +203 -0
- package/docs/api/http/settings.md +6 -4
- package/docs/api/sdk/files.md +68 -0
- package/docs/api/sdk/knowledge.md +126 -0
- package/docs/api/sdk/settings.md +3 -2
- package/docs/cli.md +171 -0
- package/docs/compilation.md +16 -0
- package/docs/compiler.md +311 -0
- package/docs/events.md +19 -0
- package/docs/workflows.md +19 -0
- package/package.json +13 -2
- package/build/api/escalations.d.ts +0 -271
- package/build/api/escalations.js +0 -932
- package/build/api/workflows.d.ts +0 -158
- package/build/api/workflows.js +0 -414
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CpBfGV1h.js.map +0 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-kH-Njt25.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-Cfe-xQRX.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +0 -1
- package/dashboard/dist/assets/helpers-rMEcLwKs.js +0 -2
- package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +0 -1
- package/dashboard/dist/assets/index-ABcJHHlN.js +0 -5
- package/dashboard/dist/assets/index-ABcJHHlN.js.map +0 -1
- package/dashboard/dist/assets/index-B91h_jZ0.js +0 -15
- package/dashboard/dist/assets/index-B91h_jZ0.js.map +0 -1
- package/dashboard/dist/assets/index-C1E5GTs9.js +0 -2
- package/dashboard/dist/assets/index-C1E5GTs9.js.map +0 -1
- package/dashboard/dist/assets/index-C90ZPzXk.js +0 -2
- package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +0 -1
- package/dashboard/dist/assets/index-DeX-ezqf.css +0 -1
- package/dashboard/dist/assets/index-K40Qw1tk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js +0 -2
- package/dashboard/dist/assets/index-lCyNr5Xk.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-BHMbzR_y.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +0 -2
- package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as e}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=namespaces-
|
|
1
|
+
import{u as e}from"./vendor-query-DLp59M9_.js";import{b as s}from"./index-puKKZ5l8.js";function u(){return e({queryKey:["namespaces"],queryFn:()=>s("/namespaces")})}export{u};
|
|
2
|
+
//# sourceMappingURL=namespaces-Cm6AY5sh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespaces-
|
|
1
|
+
{"version":3,"file":"namespaces-Cm6AY5sh.js","sources":["../../src/api/namespaces.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface LTNamespace {\n id: string;\n name: string;\n description: string | null;\n schema_name: string;\n is_default: boolean;\n metadata: Record<string, unknown> | null;\n created_at: string;\n updated_at: string;\n}\n\nexport function useNamespaces() {\n return useQuery<{ namespaces: LTNamespace[] }>({\n queryKey: ['namespaces'],\n queryFn: () => apiFetch('/namespaces'),\n });\n}\n"],"names":["useNamespaces","useQuery","apiFetch"],"mappings":"uFAcO,SAASA,GAAgB,CAC9B,OAAOC,EAAwC,CAC7C,SAAU,CAAC,YAAY,EACvB,QAAS,IAAMC,EAAS,aAAa,CAAA,CACtC,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t,b as o,c as r}from"./vendor-query-DLp59M9_.js";import{b as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=roles-
|
|
1
|
+
import{u as t,b as o,c as r}from"./vendor-query-DLp59M9_.js";import{b as n}from"./index-puKKZ5l8.js";function i(){return t({queryKey:["roles"],queryFn:()=>n("/roles")})}function l(){return t({queryKey:["roles","escalation-chains"],queryFn:()=>n("/roles/escalation-chains")})}function c(e){return t({queryKey:["roles",e,"escalation-targets"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/escalation-targets`),enabled:!!e})}function y(){const e=o();return r({mutationFn:s=>n("/roles/escalation-chains",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function d(){const e=o();return r({mutationFn:s=>n("/roles/escalation-chains",{method:"DELETE",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function q(){return t({queryKey:["roles","details"],queryFn:()=>n("/roles/details")})}function m(){const e=o();return r({mutationFn:s=>n("/roles",{method:"POST",body:JSON.stringify({role:s})}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function f(){const e=o();return r({mutationFn:s=>n(`/roles/${encodeURIComponent(s)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}export{c as a,m as b,l as c,y as d,d as e,q as f,f as g,i as u};
|
|
2
|
+
//# sourceMappingURL=roles-2v1Kc7BJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles-
|
|
1
|
+
{"version":3,"file":"roles-2v1Kc7BJ.js","sources":["../../src/api/roles.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface EscalationChain {\n source_role: string;\n target_role: string;\n}\n\nexport interface RoleDetail {\n role: string;\n user_count: number;\n chain_count: number;\n workflow_count: number;\n}\n\nexport function useRoles() {\n return useQuery<{ roles: string[] }>({\n queryKey: ['roles'],\n queryFn: () => apiFetch('/roles'),\n });\n}\n\nexport function useEscalationChains() {\n return useQuery<{ chains: EscalationChain[] }>({\n queryKey: ['roles', 'escalation-chains'],\n queryFn: () => apiFetch('/roles/escalation-chains'),\n });\n}\n\nexport function useEscalationTargets(role: string) {\n return useQuery<{ targets: string[] }>({\n queryKey: ['roles', role, 'escalation-targets'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`),\n enabled: !!role,\n });\n}\n\nexport function useUpdateEscalationTargets() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ role, targets }: { role: string; targets: string[] }) =>\n apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`, {\n method: 'PUT',\n body: JSON.stringify({ targets }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useAddEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'POST',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRemoveEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'DELETE',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRoleDetails() {\n return useQuery<{ roles: RoleDetail[] }>({\n queryKey: ['roles', 'details'],\n queryFn: () => apiFetch('/roles/details'),\n });\n}\n\nexport function useCreateRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch('/roles', {\n method: 'POST',\n body: JSON.stringify({ role }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useDeleteRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch(`/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n"],"names":["useRoles","useQuery","apiFetch","useEscalationChains","useEscalationTargets","role","useAddEscalationChain","queryClient","useQueryClient","useMutation","chain","useRemoveEscalationChain","useRoleDetails","useCreateRole","useDeleteRole"],"mappings":"qGAeO,SAASA,GAAW,CACzB,OAAOC,EAA8B,CACnC,SAAU,CAAC,OAAO,EAClB,QAAS,IAAMC,EAAS,QAAQ,CAAA,CACjC,CACH,CAEO,SAASC,GAAsB,CACpC,OAAOF,EAAwC,CAC7C,SAAU,CAAC,QAAS,mBAAmB,EACvC,QAAS,IAAMC,EAAS,0BAA0B,CAAA,CACnD,CACH,CAEO,SAASE,EAAqBC,EAAc,CACjD,OAAOJ,EAAgC,CACrC,SAAU,CAAC,QAASI,EAAM,oBAAoB,EAC9C,QAAS,IAAMH,EAAS,UAAU,mBAAmBG,CAAI,CAAC,qBAAqB,EAC/E,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAgBO,SAASC,GAAwB,CACtC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GACXR,EAAS,2BAA4B,CACnC,OAAQ,OACR,KAAM,KAAK,UAAUQ,CAAK,CAAA,CAC3B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASI,GAA2B,CACzC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GACXR,EAAS,2BAA4B,CACnC,OAAQ,SACR,KAAM,KAAK,UAAUQ,CAAK,CAAA,CAC3B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASK,GAAiB,CAC/B,OAAOX,EAAkC,CACvC,SAAU,CAAC,QAAS,SAAS,EAC7B,QAAS,IAAMC,EAAS,gBAAgB,CAAA,CACzC,CACH,CAEO,SAASW,GAAgB,CAC9B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAAS,SAAU,CACjB,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAG,EAAM,CAAA,CAC9B,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASO,GAAgB,CAC9B,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAAS,UAAU,mBAAmBG,CAAI,CAAC,GAAI,CAC7C,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t}from"./vendor-query-DLp59M9_.js";import{b as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=settings-
|
|
1
|
+
import{u as t}from"./vendor-query-DLp59M9_.js";import{b as e}from"./index-puKKZ5l8.js";function n(){return e("/settings")}function s(){return t({queryKey:["settings"],queryFn:n,staleTime:1/0})}export{s as u};
|
|
2
|
+
//# sourceMappingURL=settings-DTQNp6tH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-
|
|
1
|
+
{"version":3,"file":"settings-DTQNp6tH.js","sources":["../../src/api/settings.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\ninterface AppSettings {\n telemetry: {\n traceUrl: string | null;\n };\n escalation?: {\n claimDurations?: number[];\n };\n}\n\nfunction fetchSettings(): Promise<AppSettings> {\n return apiFetch<AppSettings>('/settings');\n}\n\nexport function useSettings() {\n return useQuery({\n queryKey: ['settings'],\n queryFn: fetchSettings,\n staleTime: Infinity,\n });\n}\n"],"names":["fetchSettings","apiFetch","useSettings","useQuery"],"mappings":"uFAYA,SAASA,GAAsC,CAC7C,OAAOC,EAAsB,WAAW,CAC1C,CAEO,SAASC,GAAc,CAC5B,OAAOC,EAAS,CACd,SAAU,CAAC,UAAU,EACrB,QAASH,EACT,UAAW,GAAA,CACZ,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as a}from"./vendor-query-DLp59M9_.js";import{b as t}from"./index-
|
|
2
|
-
//# sourceMappingURL=tasks-
|
|
1
|
+
import{u as a}from"./vendor-query-DLp59M9_.js";import{b as t}from"./index-puKKZ5l8.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-CS1rgG1s.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-
|
|
1
|
+
{"version":3,"file":"tasks-CS1rgG1s.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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as l,b as w}from"./vendor-query-DLp59M9_.js";import{u as a,N as e}from"./index-puKKZ5l8.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-BjXX8x3a.js.map
|
package/dashboard/dist/assets/{useEventHooks-BHMbzR_y.js.map → useEventHooks-BjXX8x3a.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEventHooks-BHMbzR_y.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","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useProcessListEvents"],"mappings":"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"}
|
|
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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as S,b as p,c as d,a as m}from"./vendor-query-DLp59M9_.js";import{b as u,u as g,N as v}from"./index-puKKZ5l8.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-BeR-nVWQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useYamlActivityEvents-
|
|
1
|
+
{"version":3,"file":"useYamlActivityEvents-BeR-nVWQ.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-DLp59M9_.js";import{b as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=users-
|
|
1
|
+
import{u as o,b as t,c as n}from"./vendor-query-DLp59M9_.js";import{b as u}from"./index-puKKZ5l8.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-DYsdQ7Md.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users-
|
|
1
|
+
{"version":3,"file":"users-DYsdQ7Md.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"}
|