@hotmeshio/long-tail 0.1.3 → 0.1.5
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 +118 -173
- package/build/examples/seed.js +1 -1
- package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
- package/build/examples/workflows/basic-echo/activities.js +7 -7
- package/build/examples/workflows/basic-echo/index.js +1 -1
- package/build/examples/workflows/kitchen-sink/index.js +2 -2
- package/build/index.d.ts +12 -10
- package/build/index.js +15 -12
- package/build/lib/db/index.d.ts +18 -0
- package/build/{services → lib}/db/index.js +9 -0
- package/build/{services → lib}/db/migrate.js +3 -3
- package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
- package/build/{services → lib}/telemetry/honeycomb.js +2 -2
- package/build/modules/defaults.d.ts +2 -0
- package/build/modules/defaults.js +3 -1
- package/build/routes/controlplane.js +1 -1
- package/build/routes/dba.js +4 -0
- package/build/routes/docs.d.ts +2 -0
- package/build/routes/docs.js +87 -0
- package/build/routes/escalations/bulk.js +120 -202
- package/build/routes/escalations/resolve.js +1 -1
- package/build/routes/escalations/single.js +1 -1
- package/build/routes/files.js +1 -1
- package/build/routes/index.js +2 -0
- package/build/routes/insight.js +2 -1
- package/build/routes/mcp.js +3 -2
- package/build/routes/oauth.js +1 -1
- package/build/routes/settings.js +4 -4
- package/build/routes/workflows/discovery.js +3 -3
- package/build/routes/workflows/invocation.js +1 -1
- package/build/routes/yaml-workflows/crud.js +1 -1
- package/build/routes/yaml-workflows/deployment.js +25 -0
- package/build/services/auth/bot-api-key.js +1 -1
- package/build/services/auth/index.d.ts +4 -0
- package/build/services/auth/index.js +17 -0
- package/build/services/auth/service-token.js +1 -1
- package/build/services/config/provider.js +1 -1
- package/build/services/config/read.js +1 -1
- package/build/services/config/write.js +1 -1
- package/build/services/controlplane/index.js +3 -4
- package/build/services/controlplane/quorum-bridge.js +2 -2
- package/build/services/cron/index.js +4 -5
- package/build/services/dba.d.ts +4 -0
- package/build/services/dba.js +3 -6
- package/build/services/escalation/bulk.js +1 -1
- package/build/services/escalation/crud.js +1 -1
- package/build/services/escalation/queries.js +1 -1
- package/build/services/export/client.js +2 -5
- package/build/services/export/index.js +14 -2
- package/build/services/hotmesh-utils.js +1 -1
- package/build/services/iam/bots.js +6 -12
- package/build/services/iam/context.d.ts +1 -1
- package/build/services/iam/context.js +5 -5
- package/build/services/iam/credentials.js +1 -1
- package/build/services/iam/ephemeral.js +8 -15
- package/build/services/iam/principal.js +3 -10
- package/build/services/iam/resolve.js +1 -1
- package/build/services/iam/sql.d.ts +10 -0
- package/build/services/iam/sql.js +42 -0
- package/build/services/insight/index.d.ts +1 -0
- package/build/services/insight/index.js +4 -6
- package/build/services/interceptor/activities/escalation.js +1 -1
- package/build/services/interceptor/activities/task.js +9 -6
- package/build/services/interceptor/activities/workflow.js +4 -5
- package/build/services/interceptor/activity-interceptor.d.ts +1 -1
- package/build/services/interceptor/activity-interceptor.js +5 -5
- package/build/services/interceptor/completion.js +1 -1
- package/build/services/interceptor/escalation.js +1 -1
- package/build/services/interceptor/index.js +4 -4
- package/build/services/interceptor/lifecycle.js +1 -1
- package/build/services/maintenance/index.js +4 -5
- package/build/services/mcp/adapter.js +1 -16
- package/build/services/mcp/client/connection.d.ts +1 -1
- package/build/services/mcp/client/connection.js +2 -2
- package/build/services/mcp/client/tools.js +1 -1
- package/build/services/mcp/db-server/index.js +1 -1
- package/build/services/mcp/db-server/tools.js +17 -4
- package/build/services/mcp/db.js +1 -1
- package/build/services/mcp/playwright-server/index.js +1 -1
- package/build/services/mcp/playwright-server/lifecycle.js +1 -1
- package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
- package/build/services/mcp/playwright-server/tools.js +1 -1
- package/build/services/mcp/register-tool.d.ts +11 -0
- package/build/services/mcp/register-tool.js +15 -0
- package/build/services/mcp/server.js +1 -1
- package/build/services/mcp/sql.d.ts +6 -0
- package/build/services/mcp/sql.js +34 -1
- package/build/services/mcp/workflow-compiler-server.js +1 -1
- package/build/services/mcp/workflow-server.js +1 -1
- package/build/services/mcp-runs/execution-builder.js +8 -6
- package/build/services/mcp-runs/queries.js +2 -2
- package/build/services/mcp-runs/sql.d.ts +4 -1
- package/build/services/mcp-runs/sql.js +23 -2
- package/build/services/namespace/index.js +1 -1
- package/build/services/oauth/db.js +9 -37
- package/build/services/oauth/index.js +1 -1
- package/build/services/oauth/providers/registry.js +1 -1
- package/build/services/oauth/sql.d.ts +7 -0
- package/build/services/oauth/sql.js +32 -0
- package/build/services/orchestrator/index.js +3 -3
- package/build/services/role/index.js +1 -1
- package/build/services/task/crud.js +1 -1
- package/build/services/task/process.js +1 -1
- package/build/services/task/resolve.js +1 -1
- package/build/services/user/auth.js +1 -1
- package/build/services/user/crud.js +1 -1
- package/build/services/user/rbac.js +1 -1
- package/build/services/user/roles.js +1 -1
- package/build/services/user/sql.d.ts +2 -0
- package/build/services/user/sql.js +3 -1
- package/build/services/yaml-workflow/db-utils.js +1 -1
- package/build/services/yaml-workflow/db.js +1 -1
- package/build/services/yaml-workflow/deployer-helpers.js +1 -1
- package/build/services/yaml-workflow/deployer.js +4 -4
- package/build/services/yaml-workflow/generator.js +1 -1
- package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
- package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
- package/build/services/yaml-workflow/input-analyzer.js +16 -3
- package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
- package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
- package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
- package/build/services/yaml-workflow/pipeline/extract.js +5 -3
- package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
- package/build/services/yaml-workflow/pipeline/index.js +22 -0
- package/build/services/yaml-workflow/pipeline/validate.js +2 -2
- package/build/services/yaml-workflow/workers/callbacks.js +1 -1
- package/build/services/yaml-workflow/workers/events.js +2 -2
- package/build/services/yaml-workflow/workers/register.js +8 -8
- package/build/start/adapters.js +7 -7
- package/build/start/index.js +4 -4
- package/build/start/server.js +1 -1
- package/build/start/workers.d.ts +1 -2
- package/build/start/workers.js +8 -7
- package/build/system/activities/claude-code.js +1 -1
- package/build/system/activities/file-storage.js +1 -1
- package/build/system/activities/knowledge.d.ts +58 -0
- package/build/system/activities/knowledge.js +128 -0
- package/build/system/activities/sql.d.ts +9 -0
- package/build/system/activities/sql.js +41 -0
- package/build/system/activities/triage/context.js +1 -1
- package/build/system/activities/triage/discovery.d.ts +2 -14
- package/build/system/activities/triage/discovery.js +5 -161
- package/build/system/activities/triage/llm.d.ts +1 -8
- package/build/system/activities/triage/llm.js +2 -28
- package/build/system/activities/triage/tools.d.ts +1 -17
- package/build/system/activities/triage/tools.js +8 -167
- package/build/system/index.js +5 -4
- package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
- package/build/system/mcp-servers/admin/escalations.js +149 -0
- package/build/system/mcp-servers/admin/index.d.ts +31 -0
- package/build/system/mcp-servers/admin/index.js +80 -0
- package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
- package/build/system/mcp-servers/admin/maintenance.js +58 -0
- package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
- package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
- package/build/system/mcp-servers/admin/schemas.js +177 -0
- package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
- package/build/system/mcp-servers/admin/tasks.js +112 -0
- package/build/system/mcp-servers/admin/users.d.ts +5 -0
- package/build/system/mcp-servers/admin/users.js +167 -0
- package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
- package/build/system/mcp-servers/admin/workflow-config.js +118 -0
- package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
- package/build/system/mcp-servers/admin/workflows.js +138 -0
- package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
- package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
- package/build/system/mcp-servers/claude-code.js +1 -1
- package/build/system/mcp-servers/db-query/index.js +1 -1
- package/build/system/mcp-servers/db-query/tools.js +17 -4
- package/build/system/mcp-servers/docs.d.ts +5 -0
- package/build/system/mcp-servers/docs.js +147 -0
- package/build/system/mcp-servers/file-storage.js +1 -1
- package/build/system/mcp-servers/http-fetch.js +1 -1
- package/build/system/mcp-servers/human-queue.js +1 -1
- package/build/system/mcp-servers/knowledge.d.ts +4 -0
- package/build/system/mcp-servers/knowledge.js +137 -0
- package/build/system/mcp-servers/oauth.js +1 -1
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
- package/build/system/mcp-servers/playwright/index.js +1 -1
- package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
- package/build/system/mcp-servers/playwright/schemas.js +3 -0
- package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
- package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
- package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
- package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
- package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
- package/build/system/mcp-servers/playwright-cli/index.js +1 -1
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
- package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
- package/build/system/mcp-servers/translation.d.ts +14 -0
- package/build/system/mcp-servers/translation.js +130 -0
- package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
- package/build/system/mcp-servers/vision-prompts.js +9 -0
- package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
- package/build/system/mcp-servers/vision.js +221 -0
- package/build/system/mcp-servers/workflow-compiler.js +1 -1
- package/build/system/mcp-servers/workflow.js +1 -1
- package/build/system/seed/index.js +13 -2
- package/build/system/seed/server-definitions.d.ts +1954 -322
- package/build/system/seed/server-definitions.js +65 -34
- package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
- package/build/system/seed/tool-manifests-admin.js +45 -0
- package/build/system/seed/tool-manifests-browser.d.ts +1 -1
- package/build/system/seed/tool-manifests-browser.js +3 -3
- package/build/system/seed/tool-manifests-data.d.ts +62 -21
- package/build/system/seed/tool-manifests-data.js +55 -17
- package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
- package/build/system/seed/tool-manifests-knowledge.js +94 -0
- package/build/system/workflows/mcp-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
- package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
- package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
- package/build/system/workflows/mcp-query/activities/llm.js +2 -27
- package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
- package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
- package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
- package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
- package/build/system/workflows/mcp-query/index.js +55 -5
- package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
- package/build/system/workflows/mcp-query/prompts.js +5 -32
- package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
- package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
- package/build/system/workflows/mcp-query/types.d.ts +2 -10
- package/build/system/workflows/mcp-query/types.js +0 -1
- package/build/system/workflows/mcp-query-router/index.js +1 -1
- package/build/system/workflows/mcp-triage/index.d.ts +2 -2
- package/build/system/workflows/mcp-triage/index.js +39 -7
- package/build/system/workflows/mcp-triage/prompts.js +7 -14
- package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
- package/build/system/workflows/mcp-triage-router/index.js +1 -1
- package/build/system/workflows/shared/discovery.d.ts +35 -0
- package/build/system/workflows/shared/discovery.js +175 -0
- package/build/system/workflows/shared/index.d.ts +7 -0
- package/build/system/workflows/shared/index.js +18 -0
- package/build/system/workflows/shared/llm-caller.d.ts +8 -0
- package/build/system/workflows/shared/llm-caller.js +31 -0
- package/build/system/workflows/shared/prompts.d.ts +2 -0
- package/build/system/workflows/shared/prompts.js +32 -0
- package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
- package/build/system/workflows/shared/strategy-advisors.js +109 -0
- package/build/system/workflows/shared/tool-executor.d.ts +11 -0
- package/build/system/workflows/shared/tool-executor.js +111 -0
- package/build/system/workflows/shared/tool-loader.d.ts +19 -0
- package/build/system/workflows/shared/tool-loader.js +94 -0
- package/build/system/workflows/shared/types.d.ts +9 -0
- package/build/system/workflows/shared/types.js +2 -0
- package/build/system/workflows/tool-result-guard.d.ts +14 -0
- package/build/system/workflows/tool-result-guard.js +78 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/user.d.ts +2 -0
- package/build/vitest.config.d.ts +1 -1
- package/build/vitest.integration.config.d.ts +1 -1
- package/build/workers/index.js +2 -8
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
- package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
- package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
- package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
- package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
- package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
- package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
- package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
- package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
- package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
- package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
- package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
- package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
- package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
- package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
- package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
- package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
- package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
- package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
- package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
- package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
- package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
- package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
- package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
- package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
- package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
- package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
- package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
- package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
- package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
- package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
- package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
- package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
- package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
- package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
- package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
- package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
- package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
- package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
- package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
- package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
- package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
- package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
- package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
- package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
- package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
- package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
- package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
- package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
- package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
- package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
- package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
- package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
- package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
- package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
- package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
- package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
- package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
- package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
- package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
- package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
- package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
- package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
- package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
- package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
- package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
- package/dashboard/dist/index.html +5 -5
- package/docs/api/dba.md +81 -0
- package/docs/api/escalations.md +575 -0
- package/docs/api/exports.md +170 -0
- package/docs/api/maintenance.md +93 -0
- package/docs/api/mcp-runs.md +128 -0
- package/docs/api/mcp-servers.md +195 -0
- package/docs/api/namespaces.md +48 -0
- package/docs/api/roles.md +390 -0
- package/docs/api/service-accounts.md +188 -0
- package/docs/api/settings.md +33 -0
- package/docs/api/tasks.md +167 -0
- package/docs/api/users.md +180 -0
- package/docs/api/workflows.md +616 -0
- package/docs/api/yaml-workflows.md +312 -0
- package/docs/architecture.md +221 -0
- package/docs/auth.md +181 -0
- package/docs/cloud.md +272 -0
- package/docs/compilation.md +136 -0
- package/docs/contributing.md +56 -0
- package/docs/dashboard.md +145 -0
- package/docs/data.md +478 -0
- package/docs/escalation-strategies.md +264 -0
- package/docs/events.md +251 -0
- package/docs/iam.md +222 -0
- package/docs/img/01-login.png +0 -0
- package/docs/img/02-dashboard-home.png +0 -0
- package/docs/img/03-processes-list.png +0 -0
- package/docs/img/04-escalations-list.png +0 -0
- package/docs/img/05-mcp-servers.png +0 -0
- package/docs/img/06-mcp-pipelines.png +0 -0
- package/docs/img/07-workflows-list.png +0 -0
- package/docs/img/compilation/01-query-submit.png +0 -0
- package/docs/img/compilation/02-mcp-servers.png +0 -0
- package/docs/img/compilation/03-query-completed.png +0 -0
- package/docs/img/compilation/04-wizard-original.png +0 -0
- package/docs/img/compilation/05-wizard-timeline.png +0 -0
- package/docs/img/compilation/06-wizard-profile.png +0 -0
- package/docs/img/compilation/07-wizard-deploy.png +0 -0
- package/docs/img/compilation/08-wizard-test-modal.png +0 -0
- package/docs/img/compilation/09-wizard-test-compare.png +0 -0
- package/docs/img/compilation/10-wizard-verify.png +0 -0
- package/docs/logging.md +110 -0
- package/docs/maintenance.md +221 -0
- package/docs/mcp.md +715 -0
- package/docs/oauth-and-delegation.md +469 -0
- package/docs/telemetry.md +144 -0
- package/docs/workflows.md +695 -0
- package/lib/db/schemas/015_knowledge.sql +23 -0
- package/package.json +8 -9
- package/build/services/db/index.d.ts +0 -3
- package/build/services/mcp/vision-server.d.ts +0 -15
- package/build/services/mcp/vision-server.js +0 -214
- package/build/system/mcp-servers/document-vision.js +0 -228
- package/build/system/mcp-servers/prompts.d.ts +0 -4
- package/build/system/mcp-servers/prompts.js +0 -10
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
- package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
- package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
- package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
- package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
- package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
- package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
- package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
- package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
- package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
- package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
- package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
- package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
- package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
- package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
- package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
- package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
- package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
- package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
- package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
- package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
- package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
- package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
- package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
- package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
- package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
- package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
- package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
- package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
- package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
- package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
- package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
- package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
- package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
- package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
- package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
- package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
- package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
- package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
- package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
- package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
- package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
- package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
- package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
- package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
- package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
- package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
- package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
- package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
- /package/build/{services → lib}/db/migrate.d.ts +0 -0
- /package/build/{services → lib}/events/index.d.ts +0 -0
- /package/build/{services → lib}/events/index.js +0 -0
- /package/build/{services → lib}/events/memory.d.ts +0 -0
- /package/build/{services → lib}/events/memory.js +0 -0
- /package/build/{services → lib}/events/nats.d.ts +0 -0
- /package/build/{services → lib}/events/nats.js +0 -0
- /package/build/{services → lib}/events/publish.d.ts +0 -0
- /package/build/{services → lib}/events/publish.js +0 -0
- /package/build/{services → lib}/events/socketio.d.ts +0 -0
- /package/build/{services → lib}/events/socketio.js +0 -0
- /package/build/{services → lib}/logger/index.d.ts +0 -0
- /package/build/{services → lib}/logger/index.js +0 -0
- /package/build/{services → lib}/logger/pino.d.ts +0 -0
- /package/build/{services → lib}/logger/pino.js +0 -0
- /package/build/{services → lib}/storage/index.d.ts +0 -0
- /package/build/{services → lib}/storage/index.js +0 -0
- /package/build/{services → lib}/storage/local.d.ts +0 -0
- /package/build/{services → lib}/storage/local.js +0 -0
- /package/build/{services → lib}/storage/s3.d.ts +0 -0
- /package/build/{services → lib}/storage/s3.js +0 -0
- /package/build/{services → lib}/storage/types.d.ts +0 -0
- /package/build/{services → lib}/storage/types.js +0 -0
- /package/build/{services → lib}/telemetry/index.d.ts +0 -0
- /package/build/{services → lib}/telemetry/index.js +0 -0
- /package/{services → lib}/db/README.md +0 -0
- /package/{services → lib}/db/schemas/001_schema.sql +0 -0
- /package/{services → lib}/db/schemas/002_seed.sql +0 -0
- /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
- /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
- /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
- /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
- /package/{services → lib}/db/schemas/007_security.sql +0 -0
- /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
- /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
- /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
- /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
- /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
- /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
- /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
package/README.md
CHANGED
|
@@ -1,230 +1,165 @@
|
|
|
1
1
|
# Long Tail
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Turn your PostgreSQL database into a workflow engine with identity-aware durable execution, human-in-the-loop escalation, and MCP tool orchestration.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
```bash
|
|
6
|
+
npm install @hotmeshio/long-tail
|
|
7
|
+
```
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
## Use Long Tail for
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
- **Durable execution** — Your functions run as workflows and checkpoint to Postgres. If the process crashes, execution resumes from the last completed step.
|
|
12
|
+
- **Identity everywhere** — Workflows know who started them, whose credentials govern their execution, and what permissions are in play. IAM is not bolted on — it's woven into every activity call.
|
|
13
|
+
- **Human-in-the-loop** — When confidence is low, the workflow escalates. RBAC-scoped escalation chains route work to the right reviewer. Approval workflows, content review, document verification — the pattern is the same.
|
|
14
|
+
- **AI triage** — When human-in-the-loop teams can't resolve a request, AI takes over. Its tool calls are checkpointed. And when the fix works, it compiles into a deterministic pipeline for next time.
|
|
15
|
+
- **MCP tool orchestration** — Describe what you need. If you've registered the tools, the Pipeline Designer builds the workflow. Every compiled pipeline deploys as a reusable MCP tool.
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
git clone https://github.com/hotmeshio/long-tail.git
|
|
13
|
-
cd long-tail
|
|
14
|
-
docker compose up -d --build
|
|
15
|
-
```
|
|
17
|
+
A dashboard, REST API, and live event stream ship with the package. Use what you need.
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
## Start
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| `reviewer` | `l0ngt@1l` | reviewer |
|
|
21
|
+
Point at Postgres. Everything else is optional.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { start } from '@hotmeshio/long-tail';
|
|
25
|
+
import * as myWorkflow from './workflows/my-workflow';
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
const lt = await start({
|
|
28
|
+
database: { host: 'localhost', port: 5432, user: 'postgres', password: 'password', database: 'mydb' },
|
|
29
|
+
workers: [{ taskQueue: 'default', workflow: myWorkflow.reviewContent }],
|
|
30
|
+
auth: { secret: process.env.JWT_SECRET },
|
|
31
|
+
});
|
|
32
|
+
```
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
Dashboard at [http://localhost:3000](http://localhost:3000). The [boilerplate](https://github.com/hotmeshio/long-tail-boilerplate) has a working project with custom MCP servers, MinIO, and example workflows.
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
## Write a Durable Workflow
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
A workflow receives an envelope and returns a result. Each activity call checkpoints — no work is lost, no step runs twice.
|
|
33
39
|
|
|
34
40
|
```typescript
|
|
35
41
|
import { Durable } from '@hotmeshio/hotmesh';
|
|
36
|
-
import type { LTEnvelope
|
|
42
|
+
import type { LTEnvelope } from '@hotmeshio/long-tail';
|
|
37
43
|
import * as activities from './activities';
|
|
38
44
|
|
|
39
|
-
const { analyzeContent } = Durable.workflow.proxyActivities<typeof activities>({
|
|
40
|
-
activities,
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
export async function reviewContent(
|
|
44
|
-
envelope: LTEnvelope,
|
|
45
|
-
): Promise<LTReturn | LTEscalation> {
|
|
46
|
-
|
|
47
|
-
// A resolved escalation re-enters here with the human's decision
|
|
48
|
-
if (envelope.resolver) {
|
|
49
|
-
return {
|
|
50
|
-
type: 'return',
|
|
51
|
-
data: {
|
|
52
|
-
...envelope.data,
|
|
53
|
-
resolution: envelope.resolver,
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
45
|
+
const { analyzeContent } = Durable.workflow.proxyActivities<typeof activities>({ activities });
|
|
57
46
|
|
|
47
|
+
export async function reviewContent(envelope: LTEnvelope) {
|
|
58
48
|
const analysis = await analyzeContent(envelope.data.content);
|
|
59
49
|
|
|
60
50
|
if (analysis.confidence >= 0.85) {
|
|
61
|
-
return {
|
|
62
|
-
type: 'return',
|
|
63
|
-
data: { approved: true, analysis },
|
|
64
|
-
};
|
|
51
|
+
return { type: 'return' as const, data: { approved: true, analysis } };
|
|
65
52
|
}
|
|
66
53
|
|
|
67
|
-
// Low confidence — escalate to a human reviewer
|
|
68
54
|
return {
|
|
69
|
-
type: 'escalation',
|
|
70
|
-
data: {
|
|
71
|
-
content: envelope.data.content,
|
|
72
|
-
analysis,
|
|
73
|
-
},
|
|
74
|
-
message: `Review needed (confidence: ${analysis.confidence})`,
|
|
55
|
+
type: 'escalation' as const,
|
|
75
56
|
role: 'reviewer',
|
|
57
|
+
message: `Review needed (confidence: ${analysis.confidence})`,
|
|
58
|
+
data: { content: envelope.data.content, analysis },
|
|
76
59
|
};
|
|
77
60
|
}
|
|
78
61
|
```
|
|
79
62
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
## Every Activity is a Tool
|
|
83
|
-
|
|
84
|
-
The `proxyActivities` call in the workflow above does more than checkpoint `analyzeContent` — it also registers it as an **MCP tool**. The function you write is both a durable workflow step and a tool that any agent, workflow, or compiled pipeline can invoke.
|
|
85
|
-
|
|
86
|
-
The same is true in reverse: register an MCP server and its tools become proxy activities automatically.
|
|
63
|
+
Activities are plain functions with side effects — API calls, LLM invocations, database queries. The `proxyActivities` call wraps them so the engine can checkpoint each result.
|
|
87
64
|
|
|
88
65
|
```typescript
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const response = await llm.analyze(args.content);
|
|
94
|
-
return { category: response.category, confidence: response.confidence };
|
|
66
|
+
// activities.ts
|
|
67
|
+
export async function analyzeContent(content: string) {
|
|
68
|
+
const result = await llm.classify(content);
|
|
69
|
+
return { confidence: result.confidence, flags: result.flags };
|
|
95
70
|
}
|
|
96
71
|
```
|
|
97
72
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
This uniformity is what makes the system composable — and it's what closes the loop from uncertainty to automation.
|
|
101
|
-
|
|
102
|
-
See the [Architecture Guide](docs/architecture.md) for project structure, conventions, built-in servers, and tag-based tool discovery. See the [MCP Guide](docs/mcp.md) for server registration, tool calls, and the human queue protocol.
|
|
73
|
+
## Certify a Workflow
|
|
103
74
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
Register and start. MCP Servers initialize, workers start, and the API listens. The only infrastructure is PostgreSQL.
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
import { start } from '@hotmeshio/long-tail';
|
|
110
|
-
import * as myWorkflow from './workflows/my-workflow';
|
|
111
|
-
|
|
112
|
-
const lt = await start({
|
|
113
|
-
database: {
|
|
114
|
-
host: 'localhost',
|
|
115
|
-
port: 5432,
|
|
116
|
-
user: 'postgres',
|
|
117
|
-
password: 'password',
|
|
118
|
-
database: 'mydb',
|
|
119
|
-
},
|
|
120
|
-
workers: [{
|
|
121
|
-
taskQueue: 'my-queue',
|
|
122
|
-
workflow: myWorkflow.reviewContent,
|
|
123
|
-
}],
|
|
124
|
-
});
|
|
75
|
+
Any durable workflow can be promoted to **certified** through the dashboard or API. A certified workflow gains interceptor guarantees: failures escalate instead of throwing, escalation chains route through roles, and every error is either handled or surfaced. It cannot silently fail.
|
|
125
76
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}],
|
|
131
|
-
taskQueue: 'my-queue',
|
|
132
|
-
workflowName: 'reviewContent',
|
|
133
|
-
workflowId: `review-${Date.now()}`,
|
|
134
|
-
});
|
|
77
|
+
```bash
|
|
78
|
+
curl -X PUT http://localhost:3000/api/workflows/reviewContent/config \
|
|
79
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
80
|
+
-d '{ "invocable": true, "task_queue": "default", "default_role": "reviewer" }'
|
|
135
81
|
```
|
|
136
82
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
## How the System Evolves
|
|
83
|
+
De-certifying removes the interceptor. The workflow continues as a standard durable workflow — same code, different guarantees.
|
|
140
84
|
|
|
141
|
-
|
|
85
|
+
## Register an MCP Server
|
|
142
86
|
|
|
143
|
-
|
|
87
|
+
Write an MCP server to expose your own tools. The `registerMcpTool` helper handles the SDK's type complexity.
|
|
144
88
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
89
|
+
```typescript
|
|
90
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
91
|
+
import { z } from 'zod';
|
|
92
|
+
import { registerMcpTool } from '@hotmeshio/long-tail';
|
|
93
|
+
|
|
94
|
+
export function createImageToolsServer(): McpServer {
|
|
95
|
+
const server = new McpServer({ name: 'image-tools', version: '1.0.0' });
|
|
96
|
+
|
|
97
|
+
registerMcpTool(server, 'resize_image', 'Resize an image.', {
|
|
98
|
+
path: z.string().describe('Path to the image'),
|
|
99
|
+
width: z.number().optional().describe('Target width'),
|
|
100
|
+
height: z.number().optional().describe('Target height'),
|
|
101
|
+
}, async (args: any) => ({
|
|
102
|
+
content: [{ type: 'text', text: JSON.stringify(await resize(args)) }],
|
|
103
|
+
}));
|
|
104
|
+
|
|
105
|
+
return server;
|
|
106
|
+
}
|
|
150
107
|
```
|
|
151
108
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
### 2. Triage
|
|
155
|
-
|
|
156
|
-
An upside-down page, a document in the wrong language, a missing API credential — the human flags `needsTriage` with a hint, and an AI triage agent takes over.
|
|
157
|
-
|
|
158
|
-
Because every activity is a tool, the triage agent already has what it needs. It queries the escalation history, discovers available tools by tag, and runs an agentic loop — rotate the page, re-extract data, call an external API, validate against a database. Every tool call is checkpointed. If the agent can't fix it either, it escalates to an engineer with a full diagnosis. The engineer might install a missing tool, fix a configuration, then send it back. The handoff is always bidirectional — human to AI, AI to human, human to different human — until the problem is resolved and the original workflow gets its answer.
|
|
109
|
+
Register it at startup and it appears in the dashboard:
|
|
159
110
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
extract_links(page) → step 2: extract_links
|
|
168
|
-
screenshot(link) × N step 3: screenshot (iterates over step 2 output)
|
|
111
|
+
```typescript
|
|
112
|
+
const lt = await start({
|
|
113
|
+
// ...
|
|
114
|
+
mcp: {
|
|
115
|
+
serverFactories: { 'image-tools': createImageToolsServer },
|
|
116
|
+
},
|
|
117
|
+
});
|
|
169
118
|
```
|
|
170
119
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
The compiled workflow deploys as a new MCP tool — tagged for discovery, versioned, and invocable by any agent, workflow, or API call. See the [Compilation Pipeline Guide](docs/compilation.md) for a detailed walkthrough with screenshots.
|
|
120
|
+
## Ask It Anything
|
|
174
121
|
|
|
175
|
-
|
|
122
|
+
Once your tools are registered, the Pipeline Designer orchestrates them. Describe what you need in plain language:
|
|
176
123
|
|
|
177
|
-
|
|
124
|
+
> *"Log into localhost:3000 as superadmin, navigate to every page in the sidebar, and save a screenshot of each."*
|
|
178
125
|
|
|
179
|
-
|
|
180
|
-
User prompt → Router → Discovery (FTS + tags) → LLM Judge (scope match?)
|
|
181
|
-
│ │
|
|
182
|
-
│ confidence ≥ 0.7 │ no match
|
|
183
|
-
▼ ▼
|
|
184
|
-
mcpDeterministic mcpQuery
|
|
185
|
-
(compiled YAML, no LLM) (dynamic, LLM agentic loop)
|
|
186
|
-
```
|
|
126
|
+
The system discovers the right MCP servers, calls the tools, chains the results. If it works, the compilation wizard converts the execution into a deterministic pipeline — parameterized inputs, typed schema, no LLM at runtime. It deploys as a new MCP tool that any workflow, agent, or API call can invoke.
|
|
187
127
|
|
|
188
|
-
The
|
|
128
|
+
The inventory of compiled tools grows over time. The need for LLM reasoning shrinks. Problems that once required a human, then required an AI, eventually require neither.
|
|
189
129
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
## Developer API
|
|
130
|
+
## Full Configuration
|
|
193
131
|
|
|
194
132
|
```typescript
|
|
195
|
-
import { start } from '@hotmeshio/long-tail';
|
|
196
|
-
|
|
197
133
|
const lt = await start({
|
|
198
134
|
database: { connectionString: process.env.DATABASE_URL },
|
|
199
|
-
workers: [{ taskQueue: '
|
|
135
|
+
workers: [{ taskQueue: 'default', workflow: myWorkflow.reviewContent }],
|
|
200
136
|
|
|
201
137
|
// Everything below is optional
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
138
|
+
mcp: {
|
|
139
|
+
server: { enabled: true },
|
|
140
|
+
serverFactories: { 'my-tools': createMyToolsServer },
|
|
141
|
+
},
|
|
142
|
+
escalation: { strategy: 'mcp' },
|
|
143
|
+
auth: { secret: process.env.JWT_SECRET },
|
|
144
|
+
telemetry: { honeycomb: { apiKey: process.env.HNY } },
|
|
145
|
+
logging: { pino: { level: 'info' } },
|
|
146
|
+
maintenance: true,
|
|
210
147
|
});
|
|
211
148
|
```
|
|
212
149
|
|
|
213
|
-
Every cross-cutting concern follows the same pattern: implement a typed interface, register at startup, done. Every workflow executes with identity context — who initiated the request, which user or bot it runs as, and what credentials it holds. Escalations carry the same context, so reviewers see exactly who triggered the work and what permissions were in play. See the [Docs](#docs) section for the full list of guides.
|
|
214
|
-
|
|
215
150
|
## Deployment
|
|
216
151
|
|
|
217
|
-
Two container types from the same codebase
|
|
152
|
+
Two container types from the same codebase:
|
|
218
153
|
|
|
219
154
|
```typescript
|
|
220
|
-
// api.ts —
|
|
155
|
+
// api.ts — dashboard + REST API
|
|
221
156
|
await start({ database: { connectionString: process.env.DATABASE_URL } });
|
|
222
157
|
|
|
223
158
|
// worker.ts — workflow execution, no HTTP server
|
|
224
159
|
await start({
|
|
225
160
|
database: { connectionString: process.env.DATABASE_URL },
|
|
226
161
|
server: { enabled: false },
|
|
227
|
-
workers: [{ taskQueue: '
|
|
162
|
+
workers: [{ taskQueue: 'default', workflow: reviewContent.reviewContent }],
|
|
228
163
|
});
|
|
229
164
|
```
|
|
230
165
|
|
|
@@ -234,29 +169,39 @@ Both share PostgreSQL and scale independently. See [Cloud Deployment](docs/cloud
|
|
|
234
169
|
|
|
235
170
|
| Guide | What it covers |
|
|
236
171
|
|-------|---------------|
|
|
237
|
-
| [
|
|
238
|
-
| [
|
|
239
|
-
| [
|
|
240
|
-
| [MCP](docs/mcp.md) | Server registration, tool calls, human queue
|
|
241
|
-
| [
|
|
242
|
-
| [
|
|
243
|
-
| [
|
|
244
|
-
| [
|
|
172
|
+
| [Workflows](docs/workflows.md) | Activities, interceptor, escalation lifecycle, composition |
|
|
173
|
+
| [IAM](docs/iam.md) | Identity propagation, service accounts, credential exchange |
|
|
174
|
+
| [Dashboard](docs/dashboard.md) | Navigation, key pages, event feed |
|
|
175
|
+
| [MCP](docs/mcp.md) | Server registration, tool calls, human queue |
|
|
176
|
+
| [Compilation](docs/compilation.md) | Dynamic → deterministic pipeline wizard |
|
|
177
|
+
| [Escalation Strategies](docs/escalation-strategies.md) | Default, MCP triage, custom handlers |
|
|
178
|
+
| [Architecture](docs/architecture.md) | Project structure, conventions, discovery |
|
|
179
|
+
| [Cloud](docs/cloud.md) | AWS ECS, GCP Cloud Run, Docker |
|
|
180
|
+
| [Data Model](docs/data.md) | Database schema |
|
|
245
181
|
|
|
246
|
-
|
|
182
|
+
**Adapters:** [Auth](docs/auth.md) · [Events](docs/events.md) · [Telemetry](docs/telemetry.md) · [Logging](docs/logging.md) · [Maintenance](docs/maintenance.md) · [OAuth](docs/oauth-and-delegation.md)
|
|
247
183
|
|
|
248
|
-
[
|
|
184
|
+
**API:** [Workflows](docs/api/workflows.md) · [Tasks](docs/api/tasks.md) · [Escalations](docs/api/escalations.md) · [YAML Workflows](docs/api/yaml-workflows.md) · [Users](docs/api/users.md) · [Roles](docs/api/roles.md) · [Service Accounts](docs/api/service-accounts.md) · [MCP Servers](docs/api/mcp-servers.md) · [MCP Runs](docs/api/mcp-runs.md) · [Exports](docs/api/exports.md)
|
|
249
185
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
[Workflows](docs/api/workflows.md) | [Tasks](docs/api/tasks.md) | [Escalations](docs/api/escalations.md) | [YAML Workflows](docs/api/yaml-workflows.md) | [Users](docs/api/users.md) | [Roles](docs/api/roles.md) | [MCP Servers](docs/api/mcp-servers.md) | [MCP Runs](docs/api/mcp-runs.md) | [Namespaces](docs/api/namespaces.md) | [Settings](docs/api/settings.md) | [Maintenance](docs/api/maintenance.md) | [DBA](docs/api/dba.md) | [Exports](docs/api/exports.md)
|
|
253
|
-
|
|
254
|
-
## Install
|
|
186
|
+
## Contributing
|
|
255
187
|
|
|
256
188
|
```bash
|
|
257
|
-
|
|
189
|
+
git clone https://github.com/hotmeshio/long-tail.git
|
|
190
|
+
cd long-tail
|
|
191
|
+
docker compose up -d --build
|
|
258
192
|
```
|
|
259
193
|
|
|
194
|
+
Open [http://localhost:3000](http://localhost:3000). Example workflows seed the dashboard.
|
|
195
|
+
|
|
196
|
+
| User | Password | Role |
|
|
197
|
+
|------|----------|------|
|
|
198
|
+
| `superadmin` | `l0ngt@1l` | superadmin |
|
|
199
|
+
| `admin` | `l0ngt@1l` | admin |
|
|
200
|
+
| `engineer` | `l0ngt@1l` | engineer |
|
|
201
|
+
| `reviewer` | `l0ngt@1l` | reviewer |
|
|
202
|
+
|
|
203
|
+
See [Contributing](docs/contributing.md).
|
|
204
|
+
|
|
260
205
|
## License
|
|
261
206
|
|
|
262
207
|
See [LICENSE](LICENSE).
|
package/build/examples/seed.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.seedExamples = seedExamples;
|
|
4
4
|
const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
5
5
|
const defaults_1 = require("../modules/defaults");
|
|
6
|
-
const logger_1 = require("../
|
|
6
|
+
const logger_1 = require("../lib/logger");
|
|
7
7
|
const user_1 = require("../services/user");
|
|
8
8
|
const roles_1 = require("../services/user/roles");
|
|
9
9
|
const role_1 = require("../services/role");
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 1. `getActivityIdentity()` — recommended: one-call access to principal + credential exchange
|
|
8
8
|
* 2. `getToolContext()` — lower-level access to ToolContext (principal, scopes, trace)
|
|
9
|
-
* 3. `Durable.activity.getContext()` — raw HotMesh API for
|
|
9
|
+
* 3. `Durable.activity.getContext()` — raw HotMesh API for headers
|
|
10
10
|
*
|
|
11
|
-
* All work across process boundaries because
|
|
11
|
+
* All work across process boundaries because headers travels
|
|
12
12
|
* with the activity call via HotMesh's schema pipeline.
|
|
13
13
|
*/
|
|
14
14
|
export declare function echo(input: {
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* 1. `getActivityIdentity()` — recommended: one-call access to principal + credential exchange
|
|
9
9
|
* 2. `getToolContext()` — lower-level access to ToolContext (principal, scopes, trace)
|
|
10
|
-
* 3. `Durable.activity.getContext()` — raw HotMesh API for
|
|
10
|
+
* 3. `Durable.activity.getContext()` — raw HotMesh API for headers
|
|
11
11
|
*
|
|
12
|
-
* All work across process boundaries because
|
|
12
|
+
* All work across process boundaries because headers travels
|
|
13
13
|
* with the activity call via HotMesh's schema pipeline.
|
|
14
14
|
*/
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -20,11 +20,11 @@ async function echo(input) {
|
|
|
20
20
|
// Recommended: getActivityIdentity() — principal + getCredential() in one call
|
|
21
21
|
// const identity = getActivityIdentity();
|
|
22
22
|
// const token = await identity.getCredential('anthropic'); // credential exchange
|
|
23
|
-
// Primary: getToolContext() reads from
|
|
23
|
+
// Primary: getToolContext() reads from headers (injected by activity interceptor)
|
|
24
24
|
const ctx = (0, context_1.getToolContext)();
|
|
25
|
-
// Direct access: Durable.activity.getContext() shows the raw
|
|
25
|
+
// Direct access: Durable.activity.getContext() shows the raw headers
|
|
26
26
|
const activityCtx = hotmesh_1.Durable.activity.getContext();
|
|
27
|
-
const rawPrincipal = activityCtx?.
|
|
27
|
+
const rawPrincipal = activityCtx?.headers?.principal;
|
|
28
28
|
const identity = ctx
|
|
29
29
|
? {
|
|
30
30
|
source: 'getActivityIdentity',
|
|
@@ -40,12 +40,12 @@ async function echo(input) {
|
|
|
40
40
|
}
|
|
41
41
|
: rawPrincipal
|
|
42
42
|
? {
|
|
43
|
-
source: '
|
|
43
|
+
source: 'headers',
|
|
44
44
|
principal: rawPrincipal,
|
|
45
45
|
}
|
|
46
46
|
: {
|
|
47
47
|
source: 'unavailable',
|
|
48
|
-
note: 'no principal in envelope or
|
|
48
|
+
note: 'no principal in envelope or headers',
|
|
49
49
|
};
|
|
50
50
|
return {
|
|
51
51
|
message: input.message,
|
|
@@ -53,7 +53,7 @@ const { echo } = hotmesh_1.Durable.workflow.proxyActivities({
|
|
|
53
53
|
});
|
|
54
54
|
async function basicEcho(envelope) {
|
|
55
55
|
const { message = 'Hello, Long Tail!', sleepSeconds = 1 } = envelope.data;
|
|
56
|
-
await hotmesh_1.Durable.workflow.
|
|
56
|
+
await hotmesh_1.Durable.workflow.sleep(`${sleepSeconds} seconds`);
|
|
57
57
|
const echoResult = await echo({ message });
|
|
58
58
|
return {
|
|
59
59
|
type: 'return',
|
|
@@ -58,7 +58,7 @@ const hotmesh_1 = require("@hotmeshio/hotmesh");
|
|
|
58
58
|
const activities = __importStar(require("./activities"));
|
|
59
59
|
const { greet, fetchData, transformData, notifyComplete } = hotmesh_1.Durable.workflow.proxyActivities({
|
|
60
60
|
activities,
|
|
61
|
-
|
|
61
|
+
retry: {
|
|
62
62
|
maximumAttempts: 3,
|
|
63
63
|
backoffCoefficient: 2,
|
|
64
64
|
maximumInterval: '10 seconds',
|
|
@@ -74,7 +74,7 @@ async function kitchenSink(envelope) {
|
|
|
74
74
|
// ── 2. Durable sleep ──────────────────────────────────────────────────
|
|
75
75
|
// Survives crashes. If the process restarts during the sleep, it resumes
|
|
76
76
|
// where it left off — no drift, no double-execution.
|
|
77
|
-
await hotmesh_1.Durable.workflow.
|
|
77
|
+
await hotmesh_1.Durable.workflow.sleep('2 seconds');
|
|
78
78
|
// ── 3. Parallel activities ────────────────────────────────────────────
|
|
79
79
|
// Promise.all works naturally. Both activities run concurrently and each
|
|
80
80
|
// is independently checkpointed.
|
package/build/index.d.ts
CHANGED
|
@@ -10,15 +10,15 @@ export * as EscalationService from './services/escalation';
|
|
|
10
10
|
export * as ConfigService from './services/config';
|
|
11
11
|
export * as UserService from './services/user';
|
|
12
12
|
export { ltConfig } from './modules/ltconfig';
|
|
13
|
-
export { eventRegistry } from './
|
|
14
|
-
export { NatsEventAdapter } from './
|
|
15
|
-
export { InMemoryEventAdapter } from './
|
|
16
|
-
export { SocketIOEventAdapter } from './
|
|
17
|
-
export { publishMilestoneEvent, publishTaskEvent, publishEscalationEvent, publishWorkflowEvent } from './
|
|
18
|
-
export { telemetryRegistry } from './
|
|
19
|
-
export { HoneycombTelemetryAdapter } from './
|
|
20
|
-
export { loggerRegistry } from './
|
|
21
|
-
export { PinoLoggerAdapter } from './
|
|
13
|
+
export { eventRegistry } from './lib/events';
|
|
14
|
+
export { NatsEventAdapter } from './lib/events/nats';
|
|
15
|
+
export { InMemoryEventAdapter } from './lib/events/memory';
|
|
16
|
+
export { SocketIOEventAdapter } from './lib/events/socketio';
|
|
17
|
+
export { publishMilestoneEvent, publishTaskEvent, publishEscalationEvent, publishWorkflowEvent } from './lib/events/publish';
|
|
18
|
+
export { telemetryRegistry } from './lib/telemetry';
|
|
19
|
+
export { HoneycombTelemetryAdapter } from './lib/telemetry/honeycomb';
|
|
20
|
+
export { loggerRegistry } from './lib/logger';
|
|
21
|
+
export { PinoLoggerAdapter } from './lib/logger/pino';
|
|
22
22
|
export { maintenanceRegistry } from './services/maintenance';
|
|
23
23
|
export { defaultMaintenanceConfig } from './modules/maintenance';
|
|
24
24
|
export { mcpRegistry } from './services/mcp';
|
|
@@ -26,12 +26,14 @@ export { BuiltInMcpAdapter } from './services/mcp/adapter';
|
|
|
26
26
|
export * as McpService from './services/mcp/db';
|
|
27
27
|
export * as McpClient from './services/mcp/client';
|
|
28
28
|
export * as McpServer from './services/mcp/server';
|
|
29
|
-
export * as
|
|
29
|
+
export * as McpTranslationServer from './system/mcp-servers/translation';
|
|
30
|
+
export * as McpVisionServer from './system/mcp-servers/vision';
|
|
30
31
|
export { escalationStrategyRegistry } from './services/escalation-strategy';
|
|
31
32
|
export { DefaultEscalationStrategy } from './services/escalation-strategy/default';
|
|
32
33
|
export { McpEscalationStrategy } from './services/escalation-strategy/mcp';
|
|
33
34
|
export { exampleWorkers, seedExamples } from './examples';
|
|
34
35
|
export { getActivityIdentity } from './services/iam/activity';
|
|
35
36
|
export { getToolContext } from './services/iam/context';
|
|
37
|
+
export { registerMcpTool } from './services/mcp/register-tool';
|
|
36
38
|
export { getSystemWorkers, builtinMcpServerFactories } from './system';
|
|
37
39
|
export { seedSystemMcpServers } from './system/seed';
|
package/build/index.js
CHANGED
|
@@ -36,9 +36,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
|
|
39
|
+
exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
|
|
40
40
|
const config_1 = require("./modules/config");
|
|
41
|
-
const logger_1 = require("./
|
|
41
|
+
const logger_1 = require("./lib/logger");
|
|
42
42
|
const start_1 = require("./start");
|
|
43
43
|
// ─── Package Exports ─────────────────────────────────────────────────────────
|
|
44
44
|
var start_2 = require("./start");
|
|
@@ -63,26 +63,26 @@ exports.ConfigService = __importStar(require("./services/config"));
|
|
|
63
63
|
exports.UserService = __importStar(require("./services/user"));
|
|
64
64
|
var ltconfig_1 = require("./modules/ltconfig");
|
|
65
65
|
Object.defineProperty(exports, "ltConfig", { enumerable: true, get: function () { return ltconfig_1.ltConfig; } });
|
|
66
|
-
var events_1 = require("./
|
|
66
|
+
var events_1 = require("./lib/events");
|
|
67
67
|
Object.defineProperty(exports, "eventRegistry", { enumerable: true, get: function () { return events_1.eventRegistry; } });
|
|
68
|
-
var nats_1 = require("./
|
|
68
|
+
var nats_1 = require("./lib/events/nats");
|
|
69
69
|
Object.defineProperty(exports, "NatsEventAdapter", { enumerable: true, get: function () { return nats_1.NatsEventAdapter; } });
|
|
70
|
-
var memory_1 = require("./
|
|
70
|
+
var memory_1 = require("./lib/events/memory");
|
|
71
71
|
Object.defineProperty(exports, "InMemoryEventAdapter", { enumerable: true, get: function () { return memory_1.InMemoryEventAdapter; } });
|
|
72
|
-
var socketio_1 = require("./
|
|
72
|
+
var socketio_1 = require("./lib/events/socketio");
|
|
73
73
|
Object.defineProperty(exports, "SocketIOEventAdapter", { enumerable: true, get: function () { return socketio_1.SocketIOEventAdapter; } });
|
|
74
|
-
var publish_1 = require("./
|
|
74
|
+
var publish_1 = require("./lib/events/publish");
|
|
75
75
|
Object.defineProperty(exports, "publishMilestoneEvent", { enumerable: true, get: function () { return publish_1.publishMilestoneEvent; } });
|
|
76
76
|
Object.defineProperty(exports, "publishTaskEvent", { enumerable: true, get: function () { return publish_1.publishTaskEvent; } });
|
|
77
77
|
Object.defineProperty(exports, "publishEscalationEvent", { enumerable: true, get: function () { return publish_1.publishEscalationEvent; } });
|
|
78
78
|
Object.defineProperty(exports, "publishWorkflowEvent", { enumerable: true, get: function () { return publish_1.publishWorkflowEvent; } });
|
|
79
|
-
var telemetry_1 = require("./
|
|
79
|
+
var telemetry_1 = require("./lib/telemetry");
|
|
80
80
|
Object.defineProperty(exports, "telemetryRegistry", { enumerable: true, get: function () { return telemetry_1.telemetryRegistry; } });
|
|
81
|
-
var honeycomb_1 = require("./
|
|
81
|
+
var honeycomb_1 = require("./lib/telemetry/honeycomb");
|
|
82
82
|
Object.defineProperty(exports, "HoneycombTelemetryAdapter", { enumerable: true, get: function () { return honeycomb_1.HoneycombTelemetryAdapter; } });
|
|
83
|
-
var logger_2 = require("./
|
|
83
|
+
var logger_2 = require("./lib/logger");
|
|
84
84
|
Object.defineProperty(exports, "loggerRegistry", { enumerable: true, get: function () { return logger_2.loggerRegistry; } });
|
|
85
|
-
var pino_1 = require("./
|
|
85
|
+
var pino_1 = require("./lib/logger/pino");
|
|
86
86
|
Object.defineProperty(exports, "PinoLoggerAdapter", { enumerable: true, get: function () { return pino_1.PinoLoggerAdapter; } });
|
|
87
87
|
var maintenance_1 = require("./services/maintenance");
|
|
88
88
|
Object.defineProperty(exports, "maintenanceRegistry", { enumerable: true, get: function () { return maintenance_1.maintenanceRegistry; } });
|
|
@@ -95,7 +95,8 @@ Object.defineProperty(exports, "BuiltInMcpAdapter", { enumerable: true, get: fun
|
|
|
95
95
|
exports.McpService = __importStar(require("./services/mcp/db"));
|
|
96
96
|
exports.McpClient = __importStar(require("./services/mcp/client"));
|
|
97
97
|
exports.McpServer = __importStar(require("./services/mcp/server"));
|
|
98
|
-
exports.
|
|
98
|
+
exports.McpTranslationServer = __importStar(require("./system/mcp-servers/translation"));
|
|
99
|
+
exports.McpVisionServer = __importStar(require("./system/mcp-servers/vision"));
|
|
99
100
|
var escalation_strategy_1 = require("./services/escalation-strategy");
|
|
100
101
|
Object.defineProperty(exports, "escalationStrategyRegistry", { enumerable: true, get: function () { return escalation_strategy_1.escalationStrategyRegistry; } });
|
|
101
102
|
var default_1 = require("./services/escalation-strategy/default");
|
|
@@ -109,6 +110,8 @@ var activity_1 = require("./services/iam/activity");
|
|
|
109
110
|
Object.defineProperty(exports, "getActivityIdentity", { enumerable: true, get: function () { return activity_1.getActivityIdentity; } });
|
|
110
111
|
var context_1 = require("./services/iam/context");
|
|
111
112
|
Object.defineProperty(exports, "getToolContext", { enumerable: true, get: function () { return context_1.getToolContext; } });
|
|
113
|
+
var register_tool_1 = require("./services/mcp/register-tool");
|
|
114
|
+
Object.defineProperty(exports, "registerMcpTool", { enumerable: true, get: function () { return register_tool_1.registerMcpTool; } });
|
|
112
115
|
var system_1 = require("./system");
|
|
113
116
|
Object.defineProperty(exports, "getSystemWorkers", { enumerable: true, get: function () { return system_1.getSystemWorkers; } });
|
|
114
117
|
Object.defineProperty(exports, "builtinMcpServerFactories", { enumerable: true, get: function () { return system_1.builtinMcpServerFactories; } });
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Client, Pool } from 'pg';
|
|
2
|
+
export declare function getPool(): Pool;
|
|
3
|
+
export declare function closePool(): Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* HotMesh connection descriptor: `{ class: Client, options: postgres_options }`.
|
|
6
|
+
* Use this everywhere HotMesh / Durable APIs need a connection config
|
|
7
|
+
* instead of importing `pg` and `postgres_options` directly.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getConnection(): {
|
|
10
|
+
class: typeof Client;
|
|
11
|
+
options: {
|
|
12
|
+
host: string;
|
|
13
|
+
port: number;
|
|
14
|
+
user: string;
|
|
15
|
+
password: string;
|
|
16
|
+
database: string;
|
|
17
|
+
};
|
|
18
|
+
};
|