@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,23 @@
|
|
|
1
|
+
interface Column {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
align?: 'left' | 'right';
|
|
6
|
+
format?: (value: any) => string;
|
|
7
|
+
}
|
|
8
|
+
/** Print a formatted table to stdout */
|
|
9
|
+
export declare function printTable(rows: Record<string, any>[], columns: Column[]): void;
|
|
10
|
+
/** Print JSON to stdout (for piping) */
|
|
11
|
+
export declare function printJson(data: any): void;
|
|
12
|
+
/** Print IDs only, one per line (quiet mode) */
|
|
13
|
+
export declare function printIds(rows: Record<string, any>[], idKey?: string): void;
|
|
14
|
+
/** Format a timestamp for table display */
|
|
15
|
+
export declare function formatTime(iso: string | null | undefined): string;
|
|
16
|
+
/** Format a status with color */
|
|
17
|
+
export declare function formatStatus(status: string): string;
|
|
18
|
+
/** Standard output handler — table, json, or quiet based on flags */
|
|
19
|
+
export declare function output(data: any, rows: Record<string, any>[], columns: Column[], opts: {
|
|
20
|
+
json?: boolean;
|
|
21
|
+
quiet?: boolean;
|
|
22
|
+
}, idKey?: string): void;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
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.printTable = printTable;
|
|
7
|
+
exports.printJson = printJson;
|
|
8
|
+
exports.printIds = printIds;
|
|
9
|
+
exports.formatTime = formatTime;
|
|
10
|
+
exports.formatStatus = formatStatus;
|
|
11
|
+
exports.output = output;
|
|
12
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
13
|
+
/** Print a formatted table to stdout */
|
|
14
|
+
function printTable(rows, columns) {
|
|
15
|
+
if (rows.length === 0) {
|
|
16
|
+
console.log(picocolors_1.default.dim('\n No results.\n'));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Calculate column widths
|
|
20
|
+
const widths = columns.map((col) => {
|
|
21
|
+
const headerLen = col.label.length;
|
|
22
|
+
const maxDataLen = rows.reduce((max, row) => {
|
|
23
|
+
const val = col.format ? col.format(row[col.key]) : String(row[col.key] ?? '');
|
|
24
|
+
return Math.max(max, val.length);
|
|
25
|
+
}, 0);
|
|
26
|
+
return col.width || Math.min(Math.max(headerLen, maxDataLen) + 2, 40);
|
|
27
|
+
});
|
|
28
|
+
// Header
|
|
29
|
+
const header = columns.map((col, i) => {
|
|
30
|
+
const text = col.label.toUpperCase();
|
|
31
|
+
return col.align === 'right' ? text.padStart(widths[i]) : text.padEnd(widths[i]);
|
|
32
|
+
}).join(' ');
|
|
33
|
+
console.log(`\n ${picocolors_1.default.dim(header)}`);
|
|
34
|
+
// Rows
|
|
35
|
+
for (const row of rows) {
|
|
36
|
+
const line = columns.map((col, i) => {
|
|
37
|
+
const raw = row[col.key];
|
|
38
|
+
const text = col.format ? col.format(raw) : String(raw ?? '');
|
|
39
|
+
const truncated = text.length > widths[i] ? text.slice(0, widths[i] - 1) + '…' : text;
|
|
40
|
+
return col.align === 'right' ? truncated.padStart(widths[i]) : truncated.padEnd(widths[i]);
|
|
41
|
+
}).join(' ');
|
|
42
|
+
console.log(` ${line}`);
|
|
43
|
+
}
|
|
44
|
+
console.log();
|
|
45
|
+
}
|
|
46
|
+
/** Print JSON to stdout (for piping) */
|
|
47
|
+
function printJson(data) {
|
|
48
|
+
console.log(JSON.stringify(data, null, 2));
|
|
49
|
+
}
|
|
50
|
+
/** Print IDs only, one per line (quiet mode) */
|
|
51
|
+
function printIds(rows, idKey = 'id') {
|
|
52
|
+
for (const row of rows) {
|
|
53
|
+
console.log(row[idKey]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Format a timestamp for table display */
|
|
57
|
+
function formatTime(iso) {
|
|
58
|
+
if (!iso)
|
|
59
|
+
return '—';
|
|
60
|
+
const d = new Date(iso);
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
const diff = now - d.getTime();
|
|
63
|
+
if (diff < 60_000)
|
|
64
|
+
return 'just now';
|
|
65
|
+
if (diff < 3600_000)
|
|
66
|
+
return `${Math.floor(diff / 60_000)}m ago`;
|
|
67
|
+
if (diff < 86400_000)
|
|
68
|
+
return `${Math.floor(diff / 3600_000)}h ago`;
|
|
69
|
+
return d.toLocaleDateString();
|
|
70
|
+
}
|
|
71
|
+
/** Format a status with color */
|
|
72
|
+
function formatStatus(status) {
|
|
73
|
+
switch (status) {
|
|
74
|
+
case 'pending': return picocolors_1.default.yellow(status);
|
|
75
|
+
case 'claimed': return picocolors_1.default.blue(status);
|
|
76
|
+
case 'resolved': return picocolors_1.default.green(status);
|
|
77
|
+
case 'active': return picocolors_1.default.green(status);
|
|
78
|
+
case 'draft': return picocolors_1.default.dim(status);
|
|
79
|
+
case 'deployed': return picocolors_1.default.cyan(status);
|
|
80
|
+
case 'archived': return picocolors_1.default.dim(status);
|
|
81
|
+
case 'failed': return picocolors_1.default.red(status);
|
|
82
|
+
case 'running': return picocolors_1.default.blue(status);
|
|
83
|
+
case 'completed': return picocolors_1.default.green(status);
|
|
84
|
+
default: return status;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Standard output handler — table, json, or quiet based on flags */
|
|
88
|
+
function output(data, rows, columns, opts, idKey = 'id') {
|
|
89
|
+
if (opts.json)
|
|
90
|
+
return printJson(data);
|
|
91
|
+
if (opts.quiet)
|
|
92
|
+
return printIds(rows, idKey);
|
|
93
|
+
printTable(rows, columns);
|
|
94
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function initCommand(): void;
|
|
@@ -0,0 +1,61 @@
|
|
|
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.initCommand = initCommand;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
43
|
+
const ENV_TEMPLATE = `# Long Tail Compiler Configuration
|
|
44
|
+
# Set your LLM API key to enable compilation
|
|
45
|
+
|
|
46
|
+
ANTHROPIC_API_KEY=
|
|
47
|
+
# OPENAI_API_KEY=
|
|
48
|
+
|
|
49
|
+
# Optional: override default model
|
|
50
|
+
# LT_LLM_MODEL_PRIMARY=claude-sonnet-4-6
|
|
51
|
+
`;
|
|
52
|
+
function initCommand() {
|
|
53
|
+
const envPath = path.resolve(process.cwd(), '.env');
|
|
54
|
+
if (fs.existsSync(envPath)) {
|
|
55
|
+
console.log(`\n ${picocolors_1.default.yellow('⚠')} .env already exists — not overwriting.\n`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
fs.writeFileSync(envPath, ENV_TEMPLATE, 'utf-8');
|
|
59
|
+
console.log(`\n ${picocolors_1.default.green('✓')} Created .env`);
|
|
60
|
+
console.log(picocolors_1.default.dim(' Add your ANTHROPIC_API_KEY and run ltc compile.\n'));
|
|
61
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CompileDurableResult } from '../../services/yaml-workflow/durable-compiler';
|
|
2
|
+
import type { DiscoveredWorkflow } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Build the output file path for a compiled workflow.
|
|
5
|
+
* Default: adjacent to source — assembly-line.ts → assembly-line.compiled.yaml
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveOutputPath(sourcePath: string, outputDir?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Write the compiled YAML with a header comment.
|
|
10
|
+
*/
|
|
11
|
+
export declare function writeCompiledYaml(outputPath: string, result: CompileDurableResult, sourcePath: string, functionName: string, model: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Print a discovery summary (dry-run mode).
|
|
14
|
+
*/
|
|
15
|
+
export declare function printDiscovery(workflows: DiscoveredWorkflow[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Print a compilation success line.
|
|
18
|
+
*/
|
|
19
|
+
export declare function printCompiled(relativePath: string, outputRelative: string, result: CompileDurableResult): void;
|
|
20
|
+
/**
|
|
21
|
+
* Print final summary.
|
|
22
|
+
*/
|
|
23
|
+
export declare function printSummary(count: number, elapsedMs: number): void;
|
|
24
|
+
/**
|
|
25
|
+
* Print an error for a single workflow.
|
|
26
|
+
*/
|
|
27
|
+
export declare function printError(relativePath: string, error: string): void;
|
|
@@ -0,0 +1,126 @@
|
|
|
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.resolveOutputPath = resolveOutputPath;
|
|
40
|
+
exports.writeCompiledYaml = writeCompiledYaml;
|
|
41
|
+
exports.printDiscovery = printDiscovery;
|
|
42
|
+
exports.printCompiled = printCompiled;
|
|
43
|
+
exports.printSummary = printSummary;
|
|
44
|
+
exports.printError = printError;
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
48
|
+
/**
|
|
49
|
+
* Build the output file path for a compiled workflow.
|
|
50
|
+
* Default: adjacent to source — assembly-line.ts → assembly-line.compiled.yaml
|
|
51
|
+
*/
|
|
52
|
+
function resolveOutputPath(sourcePath, outputDir) {
|
|
53
|
+
const base = path.basename(sourcePath, path.extname(sourcePath));
|
|
54
|
+
const outputFile = `${base}.compiled.yaml`;
|
|
55
|
+
if (outputDir) {
|
|
56
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
57
|
+
return path.join(outputDir, outputFile);
|
|
58
|
+
}
|
|
59
|
+
return path.join(path.dirname(sourcePath), outputFile);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Write the compiled YAML with a header comment.
|
|
63
|
+
*/
|
|
64
|
+
function writeCompiledYaml(outputPath, result, sourcePath, functionName, model) {
|
|
65
|
+
const header = [
|
|
66
|
+
`# Compiled from: ${path.basename(sourcePath)}`,
|
|
67
|
+
`# Function: ${functionName}`,
|
|
68
|
+
`# Generated: ${new Date().toISOString()}`,
|
|
69
|
+
`# Model: ${model}`,
|
|
70
|
+
'#',
|
|
71
|
+
'# This YAML DAG is functionally equivalent to the source durable workflow',
|
|
72
|
+
'# but runs without replay overhead. Each step executes exactly once.',
|
|
73
|
+
'',
|
|
74
|
+
].join('\n');
|
|
75
|
+
fs.writeFileSync(outputPath, header + result.yaml, 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Print a discovery summary (dry-run mode).
|
|
79
|
+
*/
|
|
80
|
+
function printDiscovery(workflows) {
|
|
81
|
+
console.log();
|
|
82
|
+
console.log(picocolors_1.default.bold(` Found ${workflows.length} workflow${workflows.length === 1 ? '' : 's'}:`));
|
|
83
|
+
console.log();
|
|
84
|
+
for (const wf of workflows) {
|
|
85
|
+
const framework = wf.framework === 'hotmesh-durable'
|
|
86
|
+
? picocolors_1.default.cyan('HotMesh Durable')
|
|
87
|
+
: wf.framework === 'temporal'
|
|
88
|
+
? picocolors_1.default.magenta('Temporal')
|
|
89
|
+
: picocolors_1.default.dim('unknown');
|
|
90
|
+
console.log(` ${picocolors_1.default.green('●')} ${picocolors_1.default.bold(wf.relativePath)}`);
|
|
91
|
+
console.log(` Function: ${picocolors_1.default.white(wf.functionName)} · ${framework}`);
|
|
92
|
+
if (wf.activities.length > 0) {
|
|
93
|
+
console.log(` Activities: ${wf.activities.join(', ')}`);
|
|
94
|
+
}
|
|
95
|
+
if (wf.primitives.length > 0) {
|
|
96
|
+
console.log(` Control flow: ${wf.primitives.join(', ')}`);
|
|
97
|
+
}
|
|
98
|
+
console.log();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Print a compilation success line.
|
|
103
|
+
*/
|
|
104
|
+
function printCompiled(relativePath, outputRelative, result) {
|
|
105
|
+
const activityCount = result.activityManifest.filter((a) => a.type === 'worker').length;
|
|
106
|
+
const inputKeys = Object.keys(result.inputSchema?.properties || {});
|
|
107
|
+
const inputs = inputKeys.length > 0 ? inputKeys.join(', ') : 'none';
|
|
108
|
+
console.log(` ${picocolors_1.default.green('✓')} ${relativePath} ${picocolors_1.default.dim('→')} ${picocolors_1.default.bold(outputRelative)}`);
|
|
109
|
+
console.log(` ${activityCount} activities · ${inputKeys.length} inputs (${inputs}) · topic: ${picocolors_1.default.cyan(result.graphTopic)}`);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Print final summary.
|
|
113
|
+
*/
|
|
114
|
+
function printSummary(count, elapsedMs) {
|
|
115
|
+
const seconds = (elapsedMs / 1000).toFixed(1);
|
|
116
|
+
console.log();
|
|
117
|
+
console.log(` ${picocolors_1.default.bold(`Compiled ${count} workflow${count === 1 ? '' : 's'}`)} in ${seconds}s`);
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Print an error for a single workflow.
|
|
122
|
+
*/
|
|
123
|
+
function printError(relativePath, error) {
|
|
124
|
+
console.log(` ${picocolors_1.default.red('✗')} ${relativePath}`);
|
|
125
|
+
console.log(` ${picocolors_1.default.red(error)}`);
|
|
126
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DiscoveredWorkflow } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Scan a directory tree for durable/temporal workflow files.
|
|
4
|
+
* Returns discovered workflows sorted by path.
|
|
5
|
+
*/
|
|
6
|
+
export declare function scanForWorkflows(rootDir: string, functionFilter?: string): DiscoveredWorkflow[];
|
|
7
|
+
/**
|
|
8
|
+
* Analyze a single file. Returns a DiscoveredWorkflow if it's a workflow, null otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export declare function analyzeFile(filePath: string, baseDir: string, functionFilter?: string): DiscoveredWorkflow | null;
|
|
@@ -0,0 +1,164 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.scanForWorkflows = scanForWorkflows;
|
|
37
|
+
exports.analyzeFile = analyzeFile;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const SKIP_DIRS = new Set(['node_modules', 'build', 'dist', '.git', '.docker-data', 'dashboard']);
|
|
41
|
+
const SKIP_PATTERNS = [/\.test\.ts$/, /\.spec\.ts$/, /\.compiled\.yaml$/, /\.d\.ts$/];
|
|
42
|
+
// ── Detection patterns ──────────────────────────────────────────────────
|
|
43
|
+
const HOTMESH_DURABLE = /(?:Durable\.workflow\.)?proxyActivities/;
|
|
44
|
+
const TEMPORAL_IMPORT = /@temporalio\/workflow/;
|
|
45
|
+
const WORKFLOW_PRIMITIVES = /(?:Durable\.workflow\.)?(sleep|condition|startChild|signal)/;
|
|
46
|
+
const COMPOSITION = /(?:executeChild|startChild|executeLT)/;
|
|
47
|
+
const EXPORTED_ASYNC = /export\s+async\s+function\s+(\w+)/g;
|
|
48
|
+
function detectFramework(source) {
|
|
49
|
+
if (HOTMESH_DURABLE.test(source))
|
|
50
|
+
return 'hotmesh-durable';
|
|
51
|
+
if (TEMPORAL_IMPORT.test(source))
|
|
52
|
+
return 'temporal';
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function hasWorkflowControlFlow(source) {
|
|
56
|
+
return WORKFLOW_PRIMITIVES.test(source) || COMPOSITION.test(source);
|
|
57
|
+
}
|
|
58
|
+
function extractExportedFunctions(source) {
|
|
59
|
+
const names = [];
|
|
60
|
+
let match;
|
|
61
|
+
const pattern = new RegExp(EXPORTED_ASYNC.source, 'g');
|
|
62
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
63
|
+
names.push(match[1]);
|
|
64
|
+
}
|
|
65
|
+
return names;
|
|
66
|
+
}
|
|
67
|
+
function extractActivityNames(source) {
|
|
68
|
+
const names = [];
|
|
69
|
+
const pattern = /(?:const|let)\s*\{\s*([^}]+)\}\s*=\s*(?:Durable\.workflow\.)?proxyActivities/g;
|
|
70
|
+
let match;
|
|
71
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
72
|
+
for (const name of match[1].split(',')) {
|
|
73
|
+
const trimmed = name.trim();
|
|
74
|
+
if (trimmed)
|
|
75
|
+
names.push(trimmed);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return names;
|
|
79
|
+
}
|
|
80
|
+
function extractPrimitives(source) {
|
|
81
|
+
const primitives = [];
|
|
82
|
+
const seen = new Set();
|
|
83
|
+
const pattern = /Durable\.workflow\.(\w+)/g;
|
|
84
|
+
let match;
|
|
85
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
86
|
+
const p = match[1];
|
|
87
|
+
if (p !== 'proxyActivities' && !seen.has(p)) {
|
|
88
|
+
seen.add(p);
|
|
89
|
+
primitives.push(p);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (/conditionLT/.test(source) && !seen.has('conditionLT'))
|
|
93
|
+
primitives.push('conditionLT');
|
|
94
|
+
if (/executeLT/.test(source) && !seen.has('executeLT'))
|
|
95
|
+
primitives.push('executeLT');
|
|
96
|
+
return primitives;
|
|
97
|
+
}
|
|
98
|
+
function extractActivityImports(source) {
|
|
99
|
+
const imports = [];
|
|
100
|
+
const pattern = /import\s+\*\s+as\s+\w+\s+from\s+['"]([^'"]+)['"]/g;
|
|
101
|
+
let match;
|
|
102
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
103
|
+
imports.push(match[1]);
|
|
104
|
+
}
|
|
105
|
+
return imports;
|
|
106
|
+
}
|
|
107
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Scan a directory tree for durable/temporal workflow files.
|
|
110
|
+
* Returns discovered workflows sorted by path.
|
|
111
|
+
*/
|
|
112
|
+
function scanForWorkflows(rootDir, functionFilter) {
|
|
113
|
+
const results = [];
|
|
114
|
+
walkDir(rootDir, rootDir, results, functionFilter);
|
|
115
|
+
return results.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Analyze a single file. Returns a DiscoveredWorkflow if it's a workflow, null otherwise.
|
|
119
|
+
*/
|
|
120
|
+
function analyzeFile(filePath, baseDir, functionFilter) {
|
|
121
|
+
const source = fs.readFileSync(filePath, 'utf-8');
|
|
122
|
+
const framework = detectFramework(source);
|
|
123
|
+
if (!framework && !hasWorkflowControlFlow(source))
|
|
124
|
+
return null;
|
|
125
|
+
const exported = extractExportedFunctions(source);
|
|
126
|
+
if (exported.length === 0)
|
|
127
|
+
return null;
|
|
128
|
+
const functionName = functionFilter
|
|
129
|
+
? exported.find((n) => n === functionFilter) || exported[0]
|
|
130
|
+
: exported[0];
|
|
131
|
+
return {
|
|
132
|
+
path: filePath,
|
|
133
|
+
relativePath: path.relative(baseDir, filePath),
|
|
134
|
+
functionName,
|
|
135
|
+
activities: extractActivityNames(source),
|
|
136
|
+
primitives: extractPrimitives(source),
|
|
137
|
+
activityImportPaths: extractActivityImports(source),
|
|
138
|
+
framework: framework || 'unknown',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function walkDir(dir, baseDir, results, functionFilter) {
|
|
142
|
+
let entries;
|
|
143
|
+
try {
|
|
144
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
for (const entry of entries) {
|
|
150
|
+
if (entry.isDirectory()) {
|
|
151
|
+
if (SKIP_DIRS.has(entry.name))
|
|
152
|
+
continue;
|
|
153
|
+
walkDir(path.join(dir, entry.name), baseDir, results, functionFilter);
|
|
154
|
+
}
|
|
155
|
+
else if (entry.isFile() && entry.name.endsWith('.ts')) {
|
|
156
|
+
if (SKIP_PATTERNS.some((p) => p.test(entry.name)))
|
|
157
|
+
continue;
|
|
158
|
+
const filePath = path.join(dir, entry.name);
|
|
159
|
+
const workflow = analyzeFile(filePath, baseDir, functionFilter);
|
|
160
|
+
if (workflow)
|
|
161
|
+
results.push(workflow);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface DiscoveredWorkflow {
|
|
2
|
+
path: string;
|
|
3
|
+
relativePath: string;
|
|
4
|
+
functionName: string;
|
|
5
|
+
activities: string[];
|
|
6
|
+
primitives: string[];
|
|
7
|
+
activityImportPaths: string[];
|
|
8
|
+
framework: 'hotmesh-durable' | 'temporal' | 'unknown';
|
|
9
|
+
}
|
|
10
|
+
export interface CompileOptions {
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
output?: string;
|
|
13
|
+
model?: string;
|
|
14
|
+
function?: string;
|
|
15
|
+
quiet?: boolean;
|
|
16
|
+
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
import type { LTLoggerAdapter } from '../../types/logger';
|
|
2
|
-
/**
|
|
3
|
-
* Singleton registry for the logging adapter.
|
|
4
|
-
*
|
|
5
|
-
* Follows the same pattern as telemetryRegistry and eventRegistry:
|
|
6
|
-
* - register(adapter) — set the logging adapter
|
|
7
|
-
* - clear() — reset (for tests)
|
|
8
|
-
*
|
|
9
|
-
* When no adapter is registered, all methods fall back to console.*.
|
|
10
|
-
*/
|
|
11
2
|
declare class LTLoggerRegistry implements LTLoggerAdapter {
|
|
12
3
|
private adapter;
|
|
13
4
|
/**
|
|
@@ -10,6 +10,11 @@ exports.loggerRegistry = void 0;
|
|
|
10
10
|
*
|
|
11
11
|
* When no adapter is registered, all methods fall back to console.*.
|
|
12
12
|
*/
|
|
13
|
+
const LOG_LEVELS = { error: 0, warn: 1, info: 2, debug: 3 };
|
|
14
|
+
function shouldLog(level) {
|
|
15
|
+
const threshold = LOG_LEVELS[process.env.LOG_LEVEL || 'debug'] ?? 3;
|
|
16
|
+
return (LOG_LEVELS[level] ?? 3) <= threshold;
|
|
17
|
+
}
|
|
13
18
|
class LTLoggerRegistry {
|
|
14
19
|
constructor() {
|
|
15
20
|
this.adapter = null;
|
|
@@ -36,7 +41,7 @@ class LTLoggerRegistry {
|
|
|
36
41
|
if (this.adapter) {
|
|
37
42
|
this.adapter.info(msg, context);
|
|
38
43
|
}
|
|
39
|
-
else {
|
|
44
|
+
else if (shouldLog('info')) {
|
|
40
45
|
console.log(msg);
|
|
41
46
|
}
|
|
42
47
|
}
|
|
@@ -44,7 +49,7 @@ class LTLoggerRegistry {
|
|
|
44
49
|
if (this.adapter) {
|
|
45
50
|
this.adapter.warn(msg, context);
|
|
46
51
|
}
|
|
47
|
-
else {
|
|
52
|
+
else if (shouldLog('warn')) {
|
|
48
53
|
console.warn(msg);
|
|
49
54
|
}
|
|
50
55
|
}
|
|
@@ -52,7 +57,7 @@ class LTLoggerRegistry {
|
|
|
52
57
|
if (this.adapter) {
|
|
53
58
|
this.adapter.error(msg, context);
|
|
54
59
|
}
|
|
55
|
-
else {
|
|
60
|
+
else if (shouldLog('error')) {
|
|
56
61
|
console.error(msg);
|
|
57
62
|
}
|
|
58
63
|
}
|
|
@@ -60,7 +65,7 @@ class LTLoggerRegistry {
|
|
|
60
65
|
if (this.adapter) {
|
|
61
66
|
this.adapter.debug(msg, context);
|
|
62
67
|
}
|
|
63
|
-
else {
|
|
68
|
+
else if (shouldLog('debug')) {
|
|
64
69
|
console.debug(msg);
|
|
65
70
|
}
|
|
66
71
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getStorageBackend = getStorageBackend;
|
|
4
4
|
exports.resetStorageBackend = resetStorageBackend;
|
|
5
|
+
const local_1 = require("./local");
|
|
5
6
|
let _backend = null;
|
|
6
7
|
/**
|
|
7
8
|
* Returns the singleton storage backend.
|
|
@@ -19,8 +20,7 @@ function getStorageBackend() {
|
|
|
19
20
|
_backend = new S3StorageBackend();
|
|
20
21
|
}
|
|
21
22
|
else {
|
|
22
|
-
|
|
23
|
-
_backend = new LocalStorageBackend();
|
|
23
|
+
_backend = new local_1.LocalStorageBackend();
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
return _backend;
|
|
@@ -86,6 +86,20 @@ router.post('/signed-url', async (req, res) => {
|
|
|
86
86
|
});
|
|
87
87
|
res.status(result.status).json(result.data ?? { error: result.error });
|
|
88
88
|
});
|
|
89
|
+
/**
|
|
90
|
+
* DELETE /api/file-browser/delete/*
|
|
91
|
+
* Permanently delete a file.
|
|
92
|
+
*/
|
|
93
|
+
router.delete('/delete/{*filePath}', async (req, res) => {
|
|
94
|
+
const raw = req.params.filePath;
|
|
95
|
+
const filePath = Array.isArray(raw) ? raw.join('/') : raw;
|
|
96
|
+
if (!filePath) {
|
|
97
|
+
res.status(400).json({ error: 'File path required' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const result = await api.deleteFile({ filePath });
|
|
101
|
+
res.status(result.status).json(result.data ?? { error: result.error });
|
|
102
|
+
});
|
|
89
103
|
/**
|
|
90
104
|
* GET /api/file-browser/download/*
|
|
91
105
|
* Download a file with Content-Disposition: attachment.
|
package/build/routes/index.js
CHANGED
|
@@ -28,6 +28,7 @@ const controlplane_1 = __importDefault(require("./controlplane"));
|
|
|
28
28
|
const bot_accounts_1 = __importDefault(require("./bot-accounts"));
|
|
29
29
|
const docs_1 = __importDefault(require("./docs"));
|
|
30
30
|
const workflow_sets_1 = __importDefault(require("./workflow-sets"));
|
|
31
|
+
const knowledge_1 = __importDefault(require("./knowledge"));
|
|
31
32
|
const router = (0, express_1.Router)();
|
|
32
33
|
// Public routes (no auth required — they handle their own auth)
|
|
33
34
|
router.use('/auth', auth_2.default);
|
|
@@ -55,4 +56,5 @@ router.use('/controlplane', controlplane_1.default);
|
|
|
55
56
|
router.use('/bot-accounts', bot_accounts_1.default);
|
|
56
57
|
router.use('/docs', docs_1.default);
|
|
57
58
|
router.use('/workflow-sets', workflow_sets_1.default);
|
|
59
|
+
router.use('/knowledge', knowledge_1.default);
|
|
58
60
|
exports.default = router;
|