@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
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listEscalations = listEscalations;
|
|
7
|
+
exports.getEscalation = getEscalation;
|
|
8
|
+
exports.claimEscalation = claimEscalation;
|
|
9
|
+
exports.releaseEscalation = releaseEscalation;
|
|
10
|
+
exports.resolveEscalation = resolveEscalation;
|
|
11
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
const format_1 = require("../format");
|
|
14
|
+
const COLUMNS = [
|
|
15
|
+
{ key: 'id', label: 'ID', width: 12, format: (v) => v?.slice(0, 12) || '' },
|
|
16
|
+
{ key: 'type', label: 'Type', width: 16 },
|
|
17
|
+
{ key: 'role', label: 'Role', width: 12 },
|
|
18
|
+
{ key: 'status', label: 'Status', width: 10, format: format_1.formatStatus },
|
|
19
|
+
{ key: 'priority', label: 'Pri', width: 4, align: 'right' },
|
|
20
|
+
{ key: 'created_at', label: 'Created', width: 12, format: format_1.formatTime },
|
|
21
|
+
];
|
|
22
|
+
async function listEscalations(opts) {
|
|
23
|
+
const params = new URLSearchParams();
|
|
24
|
+
if (opts.status)
|
|
25
|
+
params.set('status', opts.status);
|
|
26
|
+
if (opts.role)
|
|
27
|
+
params.set('role', opts.role);
|
|
28
|
+
if (opts.limit)
|
|
29
|
+
params.set('limit', opts.limit);
|
|
30
|
+
const data = await (0, client_1.apiFetch)(`/escalations?${params}`);
|
|
31
|
+
(0, format_1.output)(data, data.escalations || [], COLUMNS, opts);
|
|
32
|
+
}
|
|
33
|
+
async function getEscalation(id, opts) {
|
|
34
|
+
const data = await (0, client_1.apiFetch)(`/escalations/${id}`);
|
|
35
|
+
if (opts.json) {
|
|
36
|
+
console.log(JSON.stringify(data, null, 2));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(`\n ${picocolors_1.default.bold(data.type)} ${picocolors_1.default.dim(data.id)}`);
|
|
40
|
+
console.log(` Status: ${(0, format_1.formatStatus)(data.status)} Priority: ${data.priority} Role: ${data.role}`);
|
|
41
|
+
if (data.description)
|
|
42
|
+
console.log(` ${data.description}`);
|
|
43
|
+
if (data.assigned_to)
|
|
44
|
+
console.log(` Assigned: ${data.assigned_to}`);
|
|
45
|
+
console.log(` Created: ${(0, format_1.formatTime)(data.created_at)} Updated: ${(0, format_1.formatTime)(data.updated_at)}`);
|
|
46
|
+
console.log();
|
|
47
|
+
}
|
|
48
|
+
async function claimEscalation(id, opts) {
|
|
49
|
+
const body = {};
|
|
50
|
+
if (opts.duration)
|
|
51
|
+
body.durationMinutes = parseInt(opts.duration, 10);
|
|
52
|
+
const data = await (0, client_1.apiFetch)(`/escalations/${id}/claim`, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
body: JSON.stringify(body),
|
|
55
|
+
});
|
|
56
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Claimed ${picocolors_1.default.dim(id)}\n`);
|
|
57
|
+
}
|
|
58
|
+
async function releaseEscalation(id) {
|
|
59
|
+
await (0, client_1.apiFetch)(`/escalations/${id}/release`, { method: 'POST' });
|
|
60
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Released ${picocolors_1.default.dim(id)}\n`);
|
|
61
|
+
}
|
|
62
|
+
async function resolveEscalation(id, opts) {
|
|
63
|
+
const resolverPayload = opts.data ? JSON.parse(opts.data) : {};
|
|
64
|
+
await (0, client_1.apiFetch)(`/escalations/${id}/resolve`, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
body: JSON.stringify({ resolverPayload }),
|
|
67
|
+
});
|
|
68
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Resolved ${picocolors_1.default.dim(id)}\n`);
|
|
69
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function listDomains(opts: {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
quiet?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function listEntries(domain: string, opts: {
|
|
6
|
+
search?: string;
|
|
7
|
+
limit?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
quiet?: boolean;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
export declare function getEntry(domain: string, key: string, opts: {
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function setField(domain: string, key: string, path: string, value: string, opts: {
|
|
15
|
+
json?: boolean;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
export declare function removeField(domain: string, key: string, path: string): Promise<void>;
|
|
18
|
+
export declare function deleteEntry(domain: string, key: string): Promise<void>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listDomains = listDomains;
|
|
7
|
+
exports.listEntries = listEntries;
|
|
8
|
+
exports.getEntry = getEntry;
|
|
9
|
+
exports.setField = setField;
|
|
10
|
+
exports.removeField = removeField;
|
|
11
|
+
exports.deleteEntry = deleteEntry;
|
|
12
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
13
|
+
const client_1 = require("../client");
|
|
14
|
+
const format_1 = require("../format");
|
|
15
|
+
const DOMAIN_COLUMNS = [
|
|
16
|
+
{ key: 'domain', label: 'Domain', width: 24 },
|
|
17
|
+
{ key: 'count', label: 'Entries', width: 8, align: 'right' },
|
|
18
|
+
{ key: 'latest', label: 'Latest', width: 12, format: format_1.formatTime },
|
|
19
|
+
];
|
|
20
|
+
const ENTRY_COLUMNS = [
|
|
21
|
+
{ key: 'key', label: 'Key', width: 24 },
|
|
22
|
+
{ key: '_fieldCount', label: 'Fields', width: 8, align: 'right' },
|
|
23
|
+
{ key: 'tags', label: 'Tags', width: 20, format: (v) => (v || []).join(', ') },
|
|
24
|
+
{ key: 'updated_at', label: 'Updated', width: 12, format: format_1.formatTime },
|
|
25
|
+
];
|
|
26
|
+
async function listDomains(opts) {
|
|
27
|
+
const data = await (0, client_1.apiFetch)('/knowledge/domains');
|
|
28
|
+
(0, format_1.output)(data, data.domains || [], DOMAIN_COLUMNS, opts, 'domain');
|
|
29
|
+
}
|
|
30
|
+
async function listEntries(domain, opts) {
|
|
31
|
+
const params = new URLSearchParams({ domain });
|
|
32
|
+
if (opts.search)
|
|
33
|
+
params.set('search', opts.search);
|
|
34
|
+
if (opts.limit)
|
|
35
|
+
params.set('limit', opts.limit);
|
|
36
|
+
const data = await (0, client_1.apiFetch)(`/knowledge/entries?${params}`);
|
|
37
|
+
const entries = (data.entries || []).map((e) => ({
|
|
38
|
+
...e,
|
|
39
|
+
_fieldCount: e.data ? Object.keys(e.data).length : 0,
|
|
40
|
+
}));
|
|
41
|
+
(0, format_1.output)(data, entries, ENTRY_COLUMNS, opts, 'key');
|
|
42
|
+
}
|
|
43
|
+
async function getEntry(domain, key, opts) {
|
|
44
|
+
const params = new URLSearchParams({ domain, key });
|
|
45
|
+
const data = await (0, client_1.apiFetch)(`/knowledge/entry?${params}`);
|
|
46
|
+
if (opts.json) {
|
|
47
|
+
console.log(JSON.stringify(data, null, 2));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (data.found === false) {
|
|
51
|
+
console.log(picocolors_1.default.yellow(`\n Not found: ${domain}/${key}\n`));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(`\n ${picocolors_1.default.bold(`${domain}/${key}`)} ${picocolors_1.default.dim(data.id)}`);
|
|
55
|
+
if (data.tags?.length)
|
|
56
|
+
console.log(` Tags: ${data.tags.join(', ')}`);
|
|
57
|
+
console.log(` Updated: ${(0, format_1.formatTime)(data.updated_at)}\n`);
|
|
58
|
+
console.log(JSON.stringify(data.data, null, 2));
|
|
59
|
+
console.log();
|
|
60
|
+
}
|
|
61
|
+
async function setField(domain, key, path, value, opts) {
|
|
62
|
+
// Try to parse as JSON, fall back to string
|
|
63
|
+
let parsed = value;
|
|
64
|
+
try {
|
|
65
|
+
parsed = JSON.parse(value);
|
|
66
|
+
}
|
|
67
|
+
catch { /* keep as string */ }
|
|
68
|
+
const data = await (0, client_1.apiFetch)('/knowledge/field', {
|
|
69
|
+
method: 'PUT',
|
|
70
|
+
body: JSON.stringify({ domain, key, path, value: parsed }),
|
|
71
|
+
});
|
|
72
|
+
if (opts.json) {
|
|
73
|
+
console.log(JSON.stringify(data, null, 2));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Set ${picocolors_1.default.bold(`${domain}/${key}`)} → ${path}\n`);
|
|
77
|
+
}
|
|
78
|
+
async function removeField(domain, key, path) {
|
|
79
|
+
const params = new URLSearchParams({ domain, key, path });
|
|
80
|
+
await (0, client_1.apiFetch)(`/knowledge/field?${params}`, { method: 'DELETE' });
|
|
81
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Removed ${path} from ${picocolors_1.default.bold(`${domain}/${key}`)}\n`);
|
|
82
|
+
}
|
|
83
|
+
async function deleteEntry(domain, key) {
|
|
84
|
+
const params = new URLSearchParams({ domain, key });
|
|
85
|
+
await (0, client_1.apiFetch)(`/knowledge/entry?${params}`, { method: 'DELETE' });
|
|
86
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Deleted ${picocolors_1.default.bold(`${domain}/${key}`)}\n`);
|
|
87
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listServers = listServers;
|
|
4
|
+
exports.listTools = listTools;
|
|
5
|
+
const client_1 = require("../client");
|
|
6
|
+
const format_1 = require("../format");
|
|
7
|
+
const SERVER_COLUMNS = [
|
|
8
|
+
{ key: 'id', label: 'ID', width: 12, format: (v) => v?.slice(0, 12) || '' },
|
|
9
|
+
{ key: 'name', label: 'Name', width: 28 },
|
|
10
|
+
{ key: 'transport_type', label: 'Transport', width: 10 },
|
|
11
|
+
{ key: 'status', label: 'Status', width: 10 },
|
|
12
|
+
];
|
|
13
|
+
async function listServers(opts) {
|
|
14
|
+
const data = await (0, client_1.apiFetch)('/mcp/servers');
|
|
15
|
+
const servers = data.servers || data;
|
|
16
|
+
(0, format_1.output)(data, Array.isArray(servers) ? servers : [], SERVER_COLUMNS, opts);
|
|
17
|
+
}
|
|
18
|
+
async function listTools(serverId, opts) {
|
|
19
|
+
const data = await (0, client_1.apiFetch)(`/mcp/servers/${serverId}/tools`);
|
|
20
|
+
const tools = data.tools || [];
|
|
21
|
+
if (opts.json) {
|
|
22
|
+
console.log(JSON.stringify(data, null, 2));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (opts.quiet) {
|
|
26
|
+
tools.forEach((t) => console.log(t.name));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
(0, format_1.output)(data, tools, [
|
|
30
|
+
{ key: 'name', label: 'Tool', width: 30 },
|
|
31
|
+
{ key: 'description', label: 'Description', width: 50 },
|
|
32
|
+
], {});
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function listPipelines(opts: {
|
|
2
|
+
status?: string;
|
|
3
|
+
limit?: string;
|
|
4
|
+
json?: boolean;
|
|
5
|
+
quiet?: boolean;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function getPipeline(id: string, opts: {
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function deployPipeline(id: string): Promise<void>;
|
|
11
|
+
export declare function invokePipeline(id: string, opts: {
|
|
12
|
+
data?: string;
|
|
13
|
+
sync?: boolean;
|
|
14
|
+
json?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function archivePipeline(id: string): Promise<void>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listPipelines = listPipelines;
|
|
7
|
+
exports.getPipeline = getPipeline;
|
|
8
|
+
exports.deployPipeline = deployPipeline;
|
|
9
|
+
exports.invokePipeline = invokePipeline;
|
|
10
|
+
exports.archivePipeline = archivePipeline;
|
|
11
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
12
|
+
const client_1 = require("../client");
|
|
13
|
+
const format_1 = require("../format");
|
|
14
|
+
const COLUMNS = [
|
|
15
|
+
{ key: 'id', label: 'ID', width: 12, format: (v) => v?.slice(0, 12) || '' },
|
|
16
|
+
{ key: 'name', label: 'Name', width: 24 },
|
|
17
|
+
{ key: 'app_id', label: 'Namespace', width: 14 },
|
|
18
|
+
{ key: 'status', label: 'Status', width: 10, format: format_1.formatStatus },
|
|
19
|
+
{ key: 'updated_at', label: 'Updated', width: 12, format: format_1.formatTime },
|
|
20
|
+
];
|
|
21
|
+
async function listPipelines(opts) {
|
|
22
|
+
const params = new URLSearchParams();
|
|
23
|
+
if (opts.status)
|
|
24
|
+
params.set('status', opts.status);
|
|
25
|
+
if (opts.limit)
|
|
26
|
+
params.set('limit', opts.limit);
|
|
27
|
+
const data = await (0, client_1.apiFetch)(`/yaml-workflows?${params}`);
|
|
28
|
+
const workflows = data.workflows || data;
|
|
29
|
+
(0, format_1.output)(data, Array.isArray(workflows) ? workflows : [], COLUMNS, opts);
|
|
30
|
+
}
|
|
31
|
+
async function getPipeline(id, opts) {
|
|
32
|
+
const data = await (0, client_1.apiFetch)(`/yaml-workflows/${id}`);
|
|
33
|
+
if (opts.json) {
|
|
34
|
+
console.log(JSON.stringify(data, null, 2));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(`\n ${picocolors_1.default.bold(data.name)} ${picocolors_1.default.dim(data.id)}`);
|
|
38
|
+
console.log(` Namespace: ${data.app_id} Topic: ${data.graph_topic} Status: ${(0, format_1.formatStatus)(data.status)}`);
|
|
39
|
+
if (data.description)
|
|
40
|
+
console.log(` ${data.description}`);
|
|
41
|
+
console.log(` Activities: ${data.activity_manifest?.length || 0} Version: ${data.app_version || '—'}`);
|
|
42
|
+
console.log(` Created: ${(0, format_1.formatTime)(data.created_at)} Updated: ${(0, format_1.formatTime)(data.updated_at)}`);
|
|
43
|
+
console.log();
|
|
44
|
+
}
|
|
45
|
+
async function deployPipeline(id) {
|
|
46
|
+
const data = await (0, client_1.apiFetch)(`/yaml-workflows/${id}/deploy`, { method: 'POST' });
|
|
47
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Deployed ${picocolors_1.default.bold(data.name || id)} → ${(0, format_1.formatStatus)(data.status || 'active')}\n`);
|
|
48
|
+
}
|
|
49
|
+
async function invokePipeline(id, opts) {
|
|
50
|
+
const inputData = opts.data ? JSON.parse(opts.data) : {};
|
|
51
|
+
const body = { id, data: inputData };
|
|
52
|
+
if (opts.sync)
|
|
53
|
+
body.sync = true;
|
|
54
|
+
const data = await (0, client_1.apiFetch)(`/yaml-workflows/${id}/invoke`, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
body: JSON.stringify(body),
|
|
57
|
+
});
|
|
58
|
+
if (opts.json) {
|
|
59
|
+
console.log(JSON.stringify(data, null, 2));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Invoked → ${picocolors_1.default.dim(data.job_id || data.workflowId || 'ok')}\n`);
|
|
63
|
+
}
|
|
64
|
+
async function archivePipeline(id) {
|
|
65
|
+
await (0, client_1.apiFetch)(`/yaml-workflows/${id}/archive`, { method: 'POST' });
|
|
66
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Archived ${picocolors_1.default.dim(id)}\n`);
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function statusCommand(): Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.statusCommand = statusCommand;
|
|
7
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
8
|
+
const client_1 = require("../client");
|
|
9
|
+
const auth_1 = require("../auth");
|
|
10
|
+
async function statusCommand() {
|
|
11
|
+
const server = (0, auth_1.getServerUrl)();
|
|
12
|
+
console.log(`\n ${picocolors_1.default.bold('Long Tail')} ${picocolors_1.default.dim(server || 'unknown')}\n`);
|
|
13
|
+
const [settings, escalations, workflows, pipelines] = await Promise.all([
|
|
14
|
+
(0, client_1.apiFetch)('/settings').catch(() => null),
|
|
15
|
+
(0, client_1.apiFetch)('/escalations?status=pending&limit=1').catch(() => null),
|
|
16
|
+
(0, client_1.apiFetch)('/workflows/discovered?include_system=false').catch(() => null),
|
|
17
|
+
(0, client_1.apiFetch)('/yaml-workflows?status=active&limit=1').catch(() => null),
|
|
18
|
+
]);
|
|
19
|
+
const pending = escalations?.total ?? '?';
|
|
20
|
+
const workerCount = workflows?.workflows?.length ?? '?';
|
|
21
|
+
const pipelineCount = pipelines?.total ?? pipelines?.workflows?.length ?? '?';
|
|
22
|
+
const transport = settings?.events?.transport ?? '?';
|
|
23
|
+
console.log(` ${picocolors_1.default.yellow('●')} Pending escalations ${picocolors_1.default.bold(String(pending))}`);
|
|
24
|
+
console.log(` ${picocolors_1.default.green('●')} Active workers ${picocolors_1.default.bold(String(workerCount))}`);
|
|
25
|
+
console.log(` ${picocolors_1.default.cyan('●')} Pipeline tools ${picocolors_1.default.bold(String(pipelineCount))}`);
|
|
26
|
+
console.log(` ${picocolors_1.default.dim('●')} Event transport ${transport}`);
|
|
27
|
+
console.log();
|
|
28
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listUsers = listUsers;
|
|
4
|
+
exports.getUser = getUser;
|
|
5
|
+
const client_1 = require("../client");
|
|
6
|
+
const format_1 = require("../format");
|
|
7
|
+
const COLUMNS = [
|
|
8
|
+
{ key: 'id', label: 'ID', width: 12, format: (v) => v?.slice(0, 12) || '' },
|
|
9
|
+
{ key: 'external_id', label: 'Username', width: 20 },
|
|
10
|
+
{ key: 'display_name', label: 'Name', width: 20 },
|
|
11
|
+
{ key: 'status', label: 'Status', width: 10 },
|
|
12
|
+
];
|
|
13
|
+
async function listUsers(opts) {
|
|
14
|
+
const data = await (0, client_1.apiFetch)('/users');
|
|
15
|
+
const users = data.users || data;
|
|
16
|
+
(0, format_1.output)(data, Array.isArray(users) ? users : [], COLUMNS, opts);
|
|
17
|
+
}
|
|
18
|
+
async function getUser(id, opts) {
|
|
19
|
+
const data = await (0, client_1.apiFetch)(`/users/${id}`);
|
|
20
|
+
if (opts.json) {
|
|
21
|
+
console.log(JSON.stringify(data, null, 2));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
console.log(JSON.stringify(data, null, 2));
|
|
25
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function listWorkflows(opts: {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
quiet?: boolean;
|
|
4
|
+
includeSystem?: boolean;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
export declare function invokeWorkflow(type: string, opts: {
|
|
7
|
+
data?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}): Promise<void>;
|
|
10
|
+
export declare function getWorkflowStatus(id: string, opts: {
|
|
11
|
+
json?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
export declare function getWorkflowResult(id: string, opts: {
|
|
14
|
+
json?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function terminateWorkflow(id: string): Promise<void>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.listWorkflows = listWorkflows;
|
|
40
|
+
exports.invokeWorkflow = invokeWorkflow;
|
|
41
|
+
exports.getWorkflowStatus = getWorkflowStatus;
|
|
42
|
+
exports.getWorkflowResult = getWorkflowResult;
|
|
43
|
+
exports.terminateWorkflow = terminateWorkflow;
|
|
44
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
45
|
+
const client_1 = require("../client");
|
|
46
|
+
const format_1 = require("../format");
|
|
47
|
+
const COLUMNS = [
|
|
48
|
+
{ key: 'workflow_type', label: 'Type', width: 24 },
|
|
49
|
+
{ key: 'task_queue', label: 'Queue', width: 16 },
|
|
50
|
+
{ key: 'tier', label: 'Tier', width: 12 },
|
|
51
|
+
{ key: 'active', label: 'Active', width: 8, format: (v) => v ? picocolors_1.default.green('yes') : picocolors_1.default.dim('no') },
|
|
52
|
+
{ key: 'invocable', label: 'Invocable', width: 10, format: (v) => v ? 'yes' : picocolors_1.default.dim('no') },
|
|
53
|
+
];
|
|
54
|
+
async function listWorkflows(opts) {
|
|
55
|
+
const params = new URLSearchParams();
|
|
56
|
+
if (opts.includeSystem)
|
|
57
|
+
params.set('include_system', 'true');
|
|
58
|
+
const data = await (0, client_1.apiFetch)(`/workflows/discovered?${params}`);
|
|
59
|
+
(0, format_1.output)(data, data.workflows || [], COLUMNS, opts, 'workflow_type');
|
|
60
|
+
}
|
|
61
|
+
async function invokeWorkflow(type, opts) {
|
|
62
|
+
const inputData = opts.data ? JSON.parse(opts.data) : {};
|
|
63
|
+
const data = await (0, client_1.apiFetch)(`/workflows/${type}/invoke`, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
body: JSON.stringify({ data: inputData }),
|
|
66
|
+
});
|
|
67
|
+
if (opts.json) {
|
|
68
|
+
console.log(JSON.stringify(data, null, 2));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Started ${picocolors_1.default.bold(type)} → ${picocolors_1.default.dim(data.workflowId)}\n`);
|
|
72
|
+
}
|
|
73
|
+
async function getWorkflowStatus(id, opts) {
|
|
74
|
+
const data = await (0, client_1.apiFetch)(`/workflows/status/${id}`);
|
|
75
|
+
if (opts.json) {
|
|
76
|
+
console.log(JSON.stringify(data, null, 2));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const status = data.status === 0 ? picocolors_1.default.green('completed') : picocolors_1.default.blue('running');
|
|
80
|
+
console.log(`\n ${data.workflowId} ${status}\n`);
|
|
81
|
+
}
|
|
82
|
+
async function getWorkflowResult(id, opts) {
|
|
83
|
+
const { server, token } = await (await Promise.resolve().then(() => __importStar(require('../auth')))).resolveAuth();
|
|
84
|
+
const res = await fetch(`${server}/api/workflows/${id}/result`, {
|
|
85
|
+
headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
|
86
|
+
});
|
|
87
|
+
const data = await res.json();
|
|
88
|
+
if (opts.json) {
|
|
89
|
+
console.log(JSON.stringify(data, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (res.status === 202) {
|
|
93
|
+
console.log(`\n ${picocolors_1.default.blue('⏳')} Still running: ${id}\n`);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Result for ${picocolors_1.default.dim(id)}:`);
|
|
97
|
+
console.log(JSON.stringify(data.result?.data ?? data.result ?? data, null, 2));
|
|
98
|
+
console.log();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function terminateWorkflow(id) {
|
|
102
|
+
await (0, client_1.apiFetch)(`/workflows/terminate/${id}`, { method: 'POST' });
|
|
103
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Terminated ${picocolors_1.default.dim(id)}\n`);
|
|
104
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.compileCommand = compileCommand;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
43
|
+
const ora_1 = __importDefault(require("ora"));
|
|
44
|
+
const durable_compiler_1 = require("../../services/yaml-workflow/durable-compiler");
|
|
45
|
+
const llm_1 = require("../../services/llm");
|
|
46
|
+
const scanner_1 = require("./scanner");
|
|
47
|
+
const output_1 = require("./output");
|
|
48
|
+
// ── Orchestrator ─────────────────────────────────────────────────────────
|
|
49
|
+
async function compileCommand(target, options) {
|
|
50
|
+
const model = options.model || process.env.LT_LLM_MODEL_PRIMARY || 'claude-sonnet-4-6';
|
|
51
|
+
const quiet = !!options.quiet;
|
|
52
|
+
// 1. Validate LLM API key
|
|
53
|
+
if (!(0, llm_1.hasLLMApiKey)(model)) {
|
|
54
|
+
if (!quiet) {
|
|
55
|
+
console.error(picocolors_1.default.red('\n No LLM API key found.'));
|
|
56
|
+
console.error(picocolors_1.default.dim(' Set ANTHROPIC_API_KEY or OPENAI_API_KEY in your environment.'));
|
|
57
|
+
console.error(picocolors_1.default.dim(' Or create a .env file in the current directory:\n'));
|
|
58
|
+
console.error(picocolors_1.default.dim(' ANTHROPIC_API_KEY=sk-ant-...\n'));
|
|
59
|
+
}
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
// 2. Resolve target path
|
|
63
|
+
const resolved = resolveTarget(target, quiet);
|
|
64
|
+
// 3. Discover workflows
|
|
65
|
+
const workflows = discoverWorkflows(resolved, options.function, quiet);
|
|
66
|
+
if (workflows.length === 0) {
|
|
67
|
+
if (!quiet)
|
|
68
|
+
console.log(picocolors_1.default.yellow('\n No workflow files found.\n'));
|
|
69
|
+
process.exit(0);
|
|
70
|
+
}
|
|
71
|
+
// 4. Dry run — show discoveries and exit
|
|
72
|
+
if (options.dryRun) {
|
|
73
|
+
if (!quiet)
|
|
74
|
+
(0, output_1.printDiscovery)(workflows);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// 5. Compile each workflow
|
|
78
|
+
if (!quiet)
|
|
79
|
+
console.log();
|
|
80
|
+
const t0 = Date.now();
|
|
81
|
+
let compiled = 0;
|
|
82
|
+
for (const wf of workflows) {
|
|
83
|
+
compiled += await compileOne(wf.path, wf.relativePath, wf.functionName, model, quiet, options.output)
|
|
84
|
+
? 1 : 0;
|
|
85
|
+
}
|
|
86
|
+
// 6. Summary
|
|
87
|
+
if (!quiet)
|
|
88
|
+
(0, output_1.printSummary)(compiled, Date.now() - t0);
|
|
89
|
+
if (compiled < workflows.length) {
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ── Helpers ──────────────────────────────────────────────────────────────
|
|
94
|
+
function resolveTarget(target, quiet) {
|
|
95
|
+
const resolved = path.resolve(target || '.');
|
|
96
|
+
if (!fs.existsSync(resolved)) {
|
|
97
|
+
if (!quiet)
|
|
98
|
+
console.error(picocolors_1.default.red(`\n Not found: ${resolved}\n`));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
const stat = fs.statSync(resolved);
|
|
102
|
+
return { type: stat.isDirectory() ? 'directory' : 'file', path: resolved };
|
|
103
|
+
}
|
|
104
|
+
function discoverWorkflows(resolved, functionFilter, quiet) {
|
|
105
|
+
if (resolved.type === 'file') {
|
|
106
|
+
const baseDir = path.dirname(resolved.path);
|
|
107
|
+
const wf = (0, scanner_1.analyzeFile)(resolved.path, baseDir, functionFilter);
|
|
108
|
+
if (!wf) {
|
|
109
|
+
if (!quiet)
|
|
110
|
+
console.log(picocolors_1.default.yellow(`\n ${path.basename(resolved.path)} does not appear to be a durable workflow.\n`));
|
|
111
|
+
process.exit(0);
|
|
112
|
+
}
|
|
113
|
+
return [wf];
|
|
114
|
+
}
|
|
115
|
+
return (0, scanner_1.scanForWorkflows)(resolved.path, functionFilter);
|
|
116
|
+
}
|
|
117
|
+
async function compileOne(filePath, relativePath, functionName, model, quiet, outputDir) {
|
|
118
|
+
const modelShort = model.replace(/^claude-/, '').replace(/^gpt-/, '');
|
|
119
|
+
const spinner = quiet
|
|
120
|
+
? null
|
|
121
|
+
: (0, ora_1.default)({
|
|
122
|
+
text: `Compiling ${picocolors_1.default.bold(relativePath)} ${picocolors_1.default.dim(`(${functionName} · ${modelShort})`)}`,
|
|
123
|
+
indent: 2,
|
|
124
|
+
}).start();
|
|
125
|
+
try {
|
|
126
|
+
const result = await (0, durable_compiler_1.compileDurableToYaml)({
|
|
127
|
+
source: filePath,
|
|
128
|
+
isFilePath: true,
|
|
129
|
+
workflowName: functionName,
|
|
130
|
+
name: functionName,
|
|
131
|
+
});
|
|
132
|
+
const outputPath = (0, output_1.resolveOutputPath)(filePath, outputDir);
|
|
133
|
+
(0, output_1.writeCompiledYaml)(outputPath, result, filePath, functionName, model);
|
|
134
|
+
const outputRelative = path.relative(process.cwd(), outputPath);
|
|
135
|
+
spinner?.stop();
|
|
136
|
+
if (!quiet)
|
|
137
|
+
(0, output_1.printCompiled)(relativePath, outputRelative, result);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
spinner?.stop();
|
|
142
|
+
if (!quiet)
|
|
143
|
+
(0, output_1.printError)(relativePath, formatCompileError(err));
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function formatCompileError(err) {
|
|
148
|
+
const msg = err.message || String(err);
|
|
149
|
+
// LLM API errors
|
|
150
|
+
if (msg.includes('401') || msg.includes('authentication')) {
|
|
151
|
+
return 'API key rejected — check ANTHROPIC_API_KEY or OPENAI_API_KEY';
|
|
152
|
+
}
|
|
153
|
+
if (msg.includes('429') || msg.includes('rate limit')) {
|
|
154
|
+
return 'Rate limited — wait a moment and retry';
|
|
155
|
+
}
|
|
156
|
+
if (msg.includes('Failed to get valid JSON')) {
|
|
157
|
+
return 'LLM returned invalid output after 3 attempts — try a different model with --model';
|
|
158
|
+
}
|
|
159
|
+
// File errors
|
|
160
|
+
if (msg.includes('ENOENT')) {
|
|
161
|
+
return `File not found: ${msg.split("'").at(1) || msg}`;
|
|
162
|
+
}
|
|
163
|
+
// Truncate long errors
|
|
164
|
+
return msg.length > 200 ? msg.slice(0, 200) + '...' : msg;
|
|
165
|
+
}
|