@hotmeshio/long-tail 0.1.13 → 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 +16 -0
- package/build/api/files.js +61 -0
- 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/mcp-runs.d.ts +2 -0
- package/build/api/mcp-runs.js +2 -0
- package/build/api/settings.js +9 -1
- package/build/api/workflow-sets.d.ts +11 -0
- package/build/api/workflow-sets.js +62 -0
- 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 -137
- package/build/api/{yaml-workflows.js → yaml-workflows/crud.js} +86 -358
- 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/lib/storage/local.d.ts +15 -0
- package/build/lib/storage/local.js +63 -0
- package/build/lib/storage/mime.d.ts +4 -0
- package/build/lib/storage/mime.js +31 -0
- package/build/lib/storage/s3.d.ts +16 -0
- package/build/lib/storage/s3.js +70 -0
- package/build/lib/storage/types.d.ts +18 -0
- package/build/modules/utils.d.ts +73 -0
- package/build/modules/utils.js +84 -0
- package/build/routes/file-browser.d.ts +2 -0
- package/build/routes/file-browser.js +126 -0
- package/build/routes/files.js +25 -17
- package/build/routes/index.js +4 -0
- package/build/routes/knowledge.d.ts +2 -0
- package/build/routes/knowledge.js +141 -0
- package/build/routes/mcp-runs.js +2 -0
- package/build/routes/workflow-sets.js +9 -0
- package/build/routes/yaml-workflows/crud.js +9 -0
- package/build/routes/yaml-workflows/deployment.js +8 -0
- package/build/sdk/index.d.ts +17 -0
- package/build/sdk/index.js +19 -0
- package/build/services/insight/index.d.ts +13 -0
- package/build/services/insight/index.js +4 -7
- package/build/services/insight/prompts.d.ts +1 -1
- package/build/services/insight/prompts.js +1 -1
- 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/mcp-runs/queries.d.ts +2 -0
- package/build/services/mcp-runs/queries.js +11 -1
- package/build/services/mcp-runs/sql.d.ts +1 -1
- package/build/services/mcp-runs/sql.js +2 -2
- package/build/services/workflow-sets/db.d.ts +1 -0
- package/build/services/workflow-sets/db.js +6 -0
- package/build/services/workflow-sets/index.d.ts +1 -1
- package/build/services/workflow-sets/index.js +2 -1
- package/build/services/workflow-sets/sql.d.ts +1 -0
- package/build/services/workflow-sets/sql.js +6 -1
- 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 +14 -12
- package/build/services/yaml-workflow/db.js +32 -70
- 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/generator.js +4 -4
- 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/build/index.d.ts +2 -1
- package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
- package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
- package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
- 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/services/yaml-workflow/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +10 -3
- 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/schema-exchange.d.ts +50 -0
- package/build/system/activities/schema-exchange.js +210 -0
- package/build/system/activities/sql.d.ts +4 -1
- package/build/system/activities/sql.js +37 -2
- package/build/system/index.js +1 -0
- 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 +69 -6
- package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
- package/build/system/mcp-servers/schema-exchange.js +93 -0
- package/build/system/mcp-servers/workflow-compiler.js +54 -0
- package/build/system/seed/server-definitions.d.ts +112 -1
- package/build/system/seed/server-definitions.js +37 -0
- package/build/system/seed/tool-manifests-data.d.ts +87 -0
- package/build/system/seed/tool-manifests-data.js +37 -1
- package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
- package/build/system/seed/tool-manifests-knowledge.js +6 -5
- 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-builder/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +2 -1
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +4 -3
- package/build/system/workflows/mcp-workflow-planner/index.js +41 -5
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-NLryl1_B.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.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-Cg5iNEkm.js → BotPicker-DWhn0tr1.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-DWhn0tr1.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-CgYgQiOc.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-CgYgQiOc.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-DCKAPXD3.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-DCKAPXD3.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DXkaAOYk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DXkaAOYk.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-B361BOfU.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-B361BOfU.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-D2G1ldiF.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-D2G1ldiF.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DXSUbA26.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DXSUbA26.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-CQGqkXP_.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-CQGqkXP_.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-Dep92Wkg.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-Dep92Wkg.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-DVEFVjs7.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-DVEFVjs7.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BMJAPkMi.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BMJAPkMi.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-DbVbCzH2.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-DbVbCzH2.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-0XNuXj0M.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-0XNuXj0M.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-CeYnCzBN.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.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-CfUcdzaj.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-CfUcdzaj.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-CZtodW_Z.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-Dzgq7HGt.js.map +1 -0
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-yyhUeKoA.js} +2 -2
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-yyhUeKoA.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Ceh7OQtZ.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-Ceh7OQtZ.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-CZ9a8cpr.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-CZ9a8cpr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-BJuNs5NM.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-BJuNs5NM.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-BrPikMFy.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-BrPikMFy.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-2miaYd8G.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-2miaYd8G.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-DqpRDqjk.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-DqpRDqjk.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-DxbJMfJu.js} +2 -2
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-DxbJMfJu.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js → RolesPage-CYHRo21-.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-CYHRo21-.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DurFwIwe.js} +2 -2
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.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-BrBnQFxh.js → StatCard-CKplpK3w.js} +2 -2
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-CKplpK3w.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-Dm0V1dNN.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-Dm0V1dNN.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Dicx0WTZ.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Dicx0WTZ.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-B2jYvU3-.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.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-CdNUuqk4.js → TagInput-CypDZ6Kl.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-CypDZ6Kl.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-DooDNJGT.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-DooDNJGT.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-C1hZ-j31.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-C1hZ-j31.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-D7CdkAeg.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-D7CdkAeg.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-B5LXB2aj.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-B5LXB2aj.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-Crb9b0Gw.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-Crb9b0Gw.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-OPg-nkRa.js} +2 -2
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-OPg-nkRa.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CcLVrs9b.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CcLVrs9b.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-CCV4MMj7.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-DB1SncBi.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-DB1SncBi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-DvShiYJV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.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-DIM6lBoY.js → bots-Dqos20NE.js} +2 -2
- package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-Dqos20NE.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-A0CsbvNV.js} +2 -2
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-A0CsbvNV.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-BpBJN6k4.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-BpBJN6k4.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-CmznCuAx.js} +2 -2
- package/dashboard/dist/assets/{helpers-B1BDxBZd.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-C8-UaN4N.js +2 -0
- package/dashboard/dist/assets/{index-Cg5nfiYX.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-Cf60K3x9.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-Di12t56M.js.map → index-DZHNte4o.js.map} +1 -1
- package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-VnYkWW8r.js} +2 -2
- package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-VnYkWW8r.js.map} +1 -1
- package/dashboard/dist/assets/{index-BcR6PfpY.js → index-XGOmZ117.js} +2 -2
- package/dashboard/dist/assets/{index-BcR6PfpY.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-BYZX9tOb.js → index-puKKZ5l8.js} +77 -77
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +1 -0
- package/dashboard/dist/assets/{index-BizfauqT.js → index-t5frSddy.js} +4 -4
- package/dashboard/dist/assets/{index-BizfauqT.js.map → index-t5frSddy.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-DrWymhSu.js} +2 -2
- package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-DrWymhSu.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-BhUxVEMS.js +2 -0
- package/dashboard/dist/assets/mcp-query-BhUxVEMS.js.map +1 -0
- package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js +2 -0
- package/dashboard/dist/assets/mcp-runs-DUfz4mLd.js.map +1 -0
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-Cm6AY5sh.js} +2 -2
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-Cm6AY5sh.js.map} +1 -1
- package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-2v1Kc7BJ.js} +2 -2
- package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-2v1Kc7BJ.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-DTQNp6tH.js} +2 -2
- package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-DTQNp6tH.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CS1rgG1s.js} +2 -2
- package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CS1rgG1s.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-BjXX8x3a.js +2 -0
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BjXX8x3a.js.map} +1 -1
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js +2 -0
- package/dashboard/dist/assets/useYamlActivityEvents-BeR-nVWQ.js.map +1 -0
- package/dashboard/dist/assets/{users-CFcxB4v6.js → users-DYsdQ7Md.js} +2 -2
- package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-DYsdQ7Md.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-CWl44VA6.js} +132 -82
- package/dashboard/dist/assets/vendor-icons-CWl44VA6.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-2QAXh3UD.js} +2 -2
- package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-2QAXh3UD.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-sx8-UEE3.js.map +1 -0
- 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/schema-exchange.md +173 -0
- package/docs/self-test.md +106 -0
- package/docs/workflows.md +19 -0
- package/package.json +15 -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-Dbd1qUK_.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-Dbd1qUK_.js.map +0 -1
- package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-RK4Yu66z.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
- package/dashboard/dist/assets/index-BUK3qR-1.js +0 -2
- package/dashboard/dist/assets/index-BUK3qR-1.js.map +0 -1
- package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
- package/dashboard/dist/assets/index-Cf60K3x9.js +0 -2
- package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
- package/dashboard/dist/assets/index-D1wVX50Z.js +0 -15
- package/dashboard/dist/assets/index-D1wVX50Z.js.map +0 -1
- package/dashboard/dist/assets/index-DDYFpi4l.js +0 -5
- package/dashboard/dist/assets/index-DDYFpi4l.js.map +0 -1
- package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
- package/dashboard/dist/assets/index-Di12t56M.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-anv_B2Yy.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Schema-driven data exchange with external service endpoints.
|
|
4
|
+
*
|
|
5
|
+
* Three pillars: endpoint + schema + identity.
|
|
6
|
+
* Transport (fetch, Playwright, gRPC) is an implementation detail.
|
|
7
|
+
* The value is schema enforcement and credential resolution —
|
|
8
|
+
* validating both sides of the exchange and resolving auth from
|
|
9
|
+
* the connection store at the last mile.
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.validateSchema = validateSchema;
|
|
16
|
+
exports.exchange = exchange;
|
|
17
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
18
|
+
const context_1 = require("../../services/iam/context");
|
|
19
|
+
const credentials_1 = require("../../services/iam/credentials");
|
|
20
|
+
const DEFAULT_TIMEOUT = parseInt(process.env.LT_SCHEMA_EXCHANGE_TIMEOUT_MS || '30000', 10);
|
|
21
|
+
const ajv = new ajv_1.default({ allErrors: true, strict: false });
|
|
22
|
+
/**
|
|
23
|
+
* Normalize a JSON Schema object before validation.
|
|
24
|
+
*
|
|
25
|
+
* HotMesh YAML maps serialize JSON arrays as indexed objects
|
|
26
|
+
* (e.g. `required: {"0":"username","1":"password"}` instead of
|
|
27
|
+
* `required: ["username","password"]`). This recursively converts
|
|
28
|
+
* any indexed-object `required` fields back to arrays so Ajv
|
|
29
|
+
* validates correctly.
|
|
30
|
+
*/
|
|
31
|
+
function normalizeSchema(obj) {
|
|
32
|
+
if (obj === null || obj === undefined || typeof obj !== 'object')
|
|
33
|
+
return obj;
|
|
34
|
+
if (Array.isArray(obj))
|
|
35
|
+
return obj.map(normalizeSchema);
|
|
36
|
+
const result = {};
|
|
37
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
38
|
+
if (key === 'required' && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
39
|
+
// Convert indexed object {"0":"a","1":"b"} to array ["a","b"]
|
|
40
|
+
const keys = Object.keys(value);
|
|
41
|
+
if (keys.every(k => /^\d+$/.test(k))) {
|
|
42
|
+
result[key] = keys.sort((a, b) => Number(a) - Number(b)).map(k => value[k]);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
result[key] = normalizeSchema(value);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validate data against a JSON Schema.
|
|
52
|
+
*
|
|
53
|
+
* Returns a list of human-readable error strings (empty when valid).
|
|
54
|
+
*/
|
|
55
|
+
function validateSchema(data, schema) {
|
|
56
|
+
const normalized = normalizeSchema(schema);
|
|
57
|
+
const validate = ajv.compile(normalized);
|
|
58
|
+
const valid = validate(data);
|
|
59
|
+
if (valid)
|
|
60
|
+
return { valid: true, errors: [] };
|
|
61
|
+
const errors = (validate.errors || []).map((e) => {
|
|
62
|
+
const path = e.instancePath || '(root)';
|
|
63
|
+
return `${path}: ${e.message}${e.params ? ` (${JSON.stringify(e.params)})` : ''}`;
|
|
64
|
+
});
|
|
65
|
+
return { valid: false, errors };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Exchange data with an external service endpoint under schema enforcement.
|
|
69
|
+
*
|
|
70
|
+
* 1. If request_schema provided, validate body before sending.
|
|
71
|
+
* On failure: return immediately (never send the request).
|
|
72
|
+
* 2. Make the HTTP call (transport layer — currently Node.js fetch).
|
|
73
|
+
* 3. Parse response body (JSON auto-detect).
|
|
74
|
+
* 4. If response_schema provided, validate response after receiving.
|
|
75
|
+
* 5. Return result with validated flag and any validation_errors.
|
|
76
|
+
*/
|
|
77
|
+
async function exchange(args) {
|
|
78
|
+
// 1. Validate request body against schema (if provided)
|
|
79
|
+
if (args.request_schema && args.body !== undefined) {
|
|
80
|
+
const result = validateSchema(args.body, args.request_schema);
|
|
81
|
+
if (!result.valid) {
|
|
82
|
+
return {
|
|
83
|
+
status: 0,
|
|
84
|
+
data: null,
|
|
85
|
+
headers: {},
|
|
86
|
+
elapsed_ms: 0,
|
|
87
|
+
validated: false,
|
|
88
|
+
validation_errors: result.errors.map((e) => `request: ${e}`),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// 2. Resolve credential from connection store (if credential_provider set)
|
|
93
|
+
if (args.credential_provider) {
|
|
94
|
+
const ctx = (0, context_1.getToolContext)();
|
|
95
|
+
if (!ctx?.principal) {
|
|
96
|
+
return {
|
|
97
|
+
status: 0, data: null, headers: {}, elapsed_ms: 0,
|
|
98
|
+
validated: false,
|
|
99
|
+
validation_errors: ['credential: no identity context — cannot resolve credential_provider without a principal'],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const cred = await (0, credentials_1.resolveCredential)(ctx.principal, args.credential_provider, args.credential_label, ctx.initiatingPrincipal ? { fallbackPrincipal: ctx.initiatingPrincipal } : undefined);
|
|
103
|
+
if (!cred) {
|
|
104
|
+
return {
|
|
105
|
+
status: 0, data: null, headers: {}, elapsed_ms: 0,
|
|
106
|
+
validated: false,
|
|
107
|
+
validation_errors: [`credential: no credential found for provider "${args.credential_provider}" — register one at Settings > Connections`],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const scheme = args.auth_scheme || 'Bearer';
|
|
111
|
+
const headerName = args.auth_header || 'Authorization';
|
|
112
|
+
args.headers = { ...args.headers, [headerName]: `${scheme} ${cred.value}` };
|
|
113
|
+
}
|
|
114
|
+
// 3. Build URL with query parameters (accept endpoint or url)
|
|
115
|
+
let url = args.endpoint || args.url;
|
|
116
|
+
if (!url) {
|
|
117
|
+
return {
|
|
118
|
+
status: 0, data: null, headers: {}, elapsed_ms: 0,
|
|
119
|
+
validated: false, validation_errors: ['endpoint or url is required'],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (args.query && Object.keys(args.query).length > 0) {
|
|
123
|
+
const params = new URLSearchParams(args.query);
|
|
124
|
+
url += (url.includes('?') ? '&' : '?') + params.toString();
|
|
125
|
+
}
|
|
126
|
+
// 3. Make the HTTP call
|
|
127
|
+
const start = performance.now();
|
|
128
|
+
const controller = new AbortController();
|
|
129
|
+
const timeout = setTimeout(() => controller.abort(), args.timeout_ms || DEFAULT_TIMEOUT);
|
|
130
|
+
let status;
|
|
131
|
+
let responseHeaders = {};
|
|
132
|
+
let rawBody;
|
|
133
|
+
try {
|
|
134
|
+
const fetchOpts = {
|
|
135
|
+
method: args.method,
|
|
136
|
+
headers: args.headers,
|
|
137
|
+
signal: controller.signal,
|
|
138
|
+
};
|
|
139
|
+
if (args.body !== undefined && args.method !== 'GET' && args.method !== 'HEAD') {
|
|
140
|
+
fetchOpts.body = typeof args.body === 'string' ? args.body : JSON.stringify(args.body);
|
|
141
|
+
if (!args.headers?.['Content-Type'] && !args.headers?.['content-type']) {
|
|
142
|
+
fetchOpts.headers = { ...fetchOpts.headers, 'Content-Type': 'application/json' };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const response = await fetch(url, fetchOpts);
|
|
146
|
+
status = response.status;
|
|
147
|
+
response.headers.forEach((value, key) => { responseHeaders[key] = value; });
|
|
148
|
+
rawBody = await response.text();
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const elapsed = performance.now() - start;
|
|
152
|
+
return {
|
|
153
|
+
status: 0,
|
|
154
|
+
data: null,
|
|
155
|
+
headers: {},
|
|
156
|
+
elapsed_ms: Math.round(elapsed),
|
|
157
|
+
validated: false,
|
|
158
|
+
validation_errors: [`transport: ${err.name === 'AbortError' ? 'request timed out' : err.message}`],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
clearTimeout(timeout);
|
|
163
|
+
}
|
|
164
|
+
const elapsed = performance.now() - start;
|
|
165
|
+
// 3b. Fail fast on auth errors — don't silently return a 401 as a "result"
|
|
166
|
+
if (status === 401 || status === 403) {
|
|
167
|
+
return {
|
|
168
|
+
status,
|
|
169
|
+
data: null,
|
|
170
|
+
headers: responseHeaders,
|
|
171
|
+
elapsed_ms: Math.round(elapsed),
|
|
172
|
+
validated: false,
|
|
173
|
+
validation_errors: [
|
|
174
|
+
status === 401
|
|
175
|
+
? 'authentication: token expired or invalid — refresh credentials and retry'
|
|
176
|
+
: 'authorization: insufficient permissions for this endpoint',
|
|
177
|
+
],
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
// 4. Parse response body
|
|
181
|
+
let data;
|
|
182
|
+
const contentType = responseHeaders['content-type'] || '';
|
|
183
|
+
if (contentType.includes('json') || (rawBody.startsWith('{') || rawBody.startsWith('['))) {
|
|
184
|
+
try {
|
|
185
|
+
data = JSON.parse(rawBody);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
data = rawBody;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
data = rawBody;
|
|
193
|
+
}
|
|
194
|
+
// 5. Validate response against schema (if provided)
|
|
195
|
+
let validated = true;
|
|
196
|
+
let validationErrors = [];
|
|
197
|
+
if (args.response_schema) {
|
|
198
|
+
const result = validateSchema(data, args.response_schema);
|
|
199
|
+
validated = result.valid;
|
|
200
|
+
validationErrors = result.errors.map((e) => `response: ${e}`);
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
status,
|
|
204
|
+
data,
|
|
205
|
+
headers: responseHeaders,
|
|
206
|
+
elapsed_ms: Math.round(elapsed),
|
|
207
|
+
validated,
|
|
208
|
+
validation_errors: validationErrors,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export declare const UPSERT_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = lt_knowledge.data || EXCLUDED.data,\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
|
|
1
|
+
export declare const UPSERT_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = CASE\n WHEN jsonb_typeof(lt_knowledge.data) = 'object'\n THEN lt_knowledge.data || EXCLUDED.data\n ELSE EXCLUDED.data\n END,\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
|
|
2
|
+
export declare const REPLACE_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = EXCLUDED.data,\n tags = EXCLUDED.tags\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
|
|
2
3
|
export declare const GET_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, created_at, updated_at\n FROM lt_knowledge WHERE domain = $1 AND key = $2";
|
|
3
4
|
export declare const SEARCH_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, created_at, updated_at\n FROM lt_knowledge\n WHERE domain = $1 AND data @> $2::jsonb";
|
|
4
5
|
export declare const COUNT_KNOWLEDGE_SEARCH = "\n SELECT COUNT(*)::int AS total FROM lt_knowledge\n WHERE domain = $1 AND data @> $2::jsonb";
|
|
@@ -6,4 +7,6 @@ export declare const LIST_KNOWLEDGE = "\n SELECT id, domain, key, data, tags, c
|
|
|
6
7
|
export declare const COUNT_KNOWLEDGE_LIST = "\n SELECT COUNT(*)::int AS total FROM lt_knowledge WHERE domain = $1";
|
|
7
8
|
export declare const DELETE_KNOWLEDGE = "\n DELETE FROM lt_knowledge WHERE domain = $1 AND key = $2";
|
|
8
9
|
export declare const LIST_DOMAINS = "\n SELECT domain, COUNT(*)::int AS count, MAX(updated_at) AS latest\n FROM lt_knowledge GROUP BY domain ORDER BY latest DESC";
|
|
10
|
+
export declare const SET_KNOWLEDGE_FIELD = "\n INSERT INTO lt_knowledge (domain, key, data, tags)\n VALUES ($1, $2, $3::jsonb, $4)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = jsonb_set(lt_knowledge.data, $5::text[], $6::jsonb, true),\n tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))\n RETURNING id, domain, key, (xmax = 0) AS created, updated_at";
|
|
11
|
+
export declare const REMOVE_KNOWLEDGE_FIELD = "\n UPDATE lt_knowledge\n SET data = data #- $3::text[]\n WHERE domain = $1 AND key = $2\n RETURNING id, domain, key, updated_at";
|
|
9
12
|
export declare const APPEND_KNOWLEDGE = "\n INSERT INTO lt_knowledge (domain, key, data)\n VALUES ($1, $2, $3::jsonb)\n ON CONFLICT (domain, key) DO UPDATE SET\n data = CASE\n WHEN lt_knowledge.data #> $4::text[] IS NULL\n THEN jsonb_set(lt_knowledge.data, $4::text[], jsonb_build_array($5::jsonb))\n ELSE jsonb_set(lt_knowledge.data, $4::text[], (lt_knowledge.data #> $4::text[]) || jsonb_build_array($5::jsonb))\n END\n RETURNING id, domain, key, updated_at";
|
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── Knowledge CRUD ─────────────────────────────────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.APPEND_KNOWLEDGE = exports.LIST_DOMAINS = exports.DELETE_KNOWLEDGE = exports.COUNT_KNOWLEDGE_LIST = exports.LIST_KNOWLEDGE = exports.COUNT_KNOWLEDGE_SEARCH = exports.SEARCH_KNOWLEDGE = exports.GET_KNOWLEDGE = exports.UPSERT_KNOWLEDGE = void 0;
|
|
4
|
+
exports.APPEND_KNOWLEDGE = exports.REMOVE_KNOWLEDGE_FIELD = exports.SET_KNOWLEDGE_FIELD = exports.LIST_DOMAINS = exports.DELETE_KNOWLEDGE = exports.COUNT_KNOWLEDGE_LIST = exports.LIST_KNOWLEDGE = exports.COUNT_KNOWLEDGE_SEARCH = exports.SEARCH_KNOWLEDGE = exports.GET_KNOWLEDGE = exports.REPLACE_KNOWLEDGE = exports.UPSERT_KNOWLEDGE = void 0;
|
|
5
|
+
// Upsert knowledge entry. On conflict (domain+key), merges JSONB data at
|
|
6
|
+
// the top level — new keys are added, existing keys are overwritten.
|
|
7
|
+
//
|
|
8
|
+
// Guard: if the existing `data` column is not a JSON object (e.g. it was
|
|
9
|
+
// corrupted into an array by a prior string merge), replace it entirely
|
|
10
|
+
// rather than appending to the array. The CASE expression ensures the
|
|
11
|
+
// `||` operator always receives object || object, which produces a merge.
|
|
5
12
|
exports.UPSERT_KNOWLEDGE = `
|
|
6
13
|
INSERT INTO lt_knowledge (domain, key, data, tags)
|
|
7
14
|
VALUES ($1, $2, $3, $4)
|
|
8
15
|
ON CONFLICT (domain, key) DO UPDATE SET
|
|
9
|
-
data =
|
|
16
|
+
data = CASE
|
|
17
|
+
WHEN jsonb_typeof(lt_knowledge.data) = 'object'
|
|
18
|
+
THEN lt_knowledge.data || EXCLUDED.data
|
|
19
|
+
ELSE EXCLUDED.data
|
|
20
|
+
END,
|
|
10
21
|
tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))
|
|
11
22
|
RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
|
|
23
|
+
// Full replacement — overwrites data and tags entirely (no merge).
|
|
24
|
+
// Used when removing fields or tags.
|
|
25
|
+
exports.REPLACE_KNOWLEDGE = `
|
|
26
|
+
INSERT INTO lt_knowledge (domain, key, data, tags)
|
|
27
|
+
VALUES ($1, $2, $3, $4)
|
|
28
|
+
ON CONFLICT (domain, key) DO UPDATE SET
|
|
29
|
+
data = EXCLUDED.data,
|
|
30
|
+
tags = EXCLUDED.tags
|
|
31
|
+
RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
|
|
12
32
|
exports.GET_KNOWLEDGE = `
|
|
13
33
|
SELECT id, domain, key, data, tags, created_at, updated_at
|
|
14
34
|
FROM lt_knowledge WHERE domain = $1 AND key = $2`;
|
|
@@ -29,6 +49,21 @@ exports.DELETE_KNOWLEDGE = `
|
|
|
29
49
|
exports.LIST_DOMAINS = `
|
|
30
50
|
SELECT domain, COUNT(*)::int AS count, MAX(updated_at) AS latest
|
|
31
51
|
FROM lt_knowledge GROUP BY domain ORDER BY latest DESC`;
|
|
52
|
+
// Set a value at a specific JSONB path without clobbering siblings.
|
|
53
|
+
// Creates the entry if it doesn't exist. Uses jsonb_set for surgical updates.
|
|
54
|
+
exports.SET_KNOWLEDGE_FIELD = `
|
|
55
|
+
INSERT INTO lt_knowledge (domain, key, data, tags)
|
|
56
|
+
VALUES ($1, $2, $3::jsonb, $4)
|
|
57
|
+
ON CONFLICT (domain, key) DO UPDATE SET
|
|
58
|
+
data = jsonb_set(lt_knowledge.data, $5::text[], $6::jsonb, true),
|
|
59
|
+
tags = ARRAY(SELECT DISTINCT unnest(lt_knowledge.tags || EXCLUDED.tags))
|
|
60
|
+
RETURNING id, domain, key, (xmax = 0) AS created, updated_at`;
|
|
61
|
+
// Remove a field at a specific JSONB path. Entry survives; only the targeted path is removed.
|
|
62
|
+
exports.REMOVE_KNOWLEDGE_FIELD = `
|
|
63
|
+
UPDATE lt_knowledge
|
|
64
|
+
SET data = data #- $3::text[]
|
|
65
|
+
WHERE domain = $1 AND key = $2
|
|
66
|
+
RETURNING id, domain, key, updated_at`;
|
|
32
67
|
exports.APPEND_KNOWLEDGE = `
|
|
33
68
|
INSERT INTO lt_knowledge (domain, key, data)
|
|
34
69
|
VALUES ($1, $2, $3::jsonb)
|
package/build/system/index.js
CHANGED
|
@@ -110,4 +110,5 @@ exports.builtinMcpServerFactories = {
|
|
|
110
110
|
'long-tail-claude-code': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/claude-code'))).then((m) => m.createClaudeCodeServer()),
|
|
111
111
|
'long-tail-admin': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/admin'))).then((m) => m.createAdminServer()),
|
|
112
112
|
'long-tail-knowledge': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/knowledge'))).then((m) => m.createKnowledgeServer()),
|
|
113
|
+
'long-tail-schema-exchange': () => Promise.resolve().then(() => __importStar(require('./mcp-servers/schema-exchange'))).then((m) => m.createSchemaExchangeServer()),
|
|
113
114
|
};
|
|
@@ -52,6 +52,8 @@ const readFileSchema = zod_1.z.object({
|
|
|
52
52
|
const listFilesSchema = zod_1.z.object({
|
|
53
53
|
directory: zod_1.z.string().optional().describe('Subdirectory to list (default: root)'),
|
|
54
54
|
pattern: zod_1.z.string().optional().describe('Glob-like filter pattern (e.g., "*.json")'),
|
|
55
|
+
page_size: zod_1.z.number().optional().describe('Max results per page (default 100)'),
|
|
56
|
+
continuation_token: zod_1.z.string().optional().describe('Pagination token from a previous response'),
|
|
55
57
|
});
|
|
56
58
|
const deleteFileSchema = zod_1.z.object({
|
|
57
59
|
path: zod_1.z.string().describe('File path relative to storage root'),
|
|
@@ -82,7 +84,7 @@ async function createFileStorageServer(options) {
|
|
|
82
84
|
});
|
|
83
85
|
instance.registerTool('list_files', {
|
|
84
86
|
title: 'List Files',
|
|
85
|
-
description: 'List files
|
|
87
|
+
description: 'List files and directories at a storage prefix. Supports cursor-based pagination via continuation tokens. Returns file paths, sizes, timestamps, subdirectories, and a nextToken for the next page.',
|
|
86
88
|
inputSchema: listFilesSchema,
|
|
87
89
|
}, async (args) => {
|
|
88
90
|
const result = await fileStorage.listFiles(args);
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const escalateSchema: z.ZodObject<{
|
|
3
|
+
role: z.ZodString;
|
|
4
|
+
message: z.ZodString;
|
|
5
|
+
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
6
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
7
|
+
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
8
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
role: string;
|
|
11
|
+
type: string;
|
|
12
|
+
message: string;
|
|
13
|
+
priority: number;
|
|
14
|
+
subtype: string;
|
|
15
|
+
data?: Record<string, any> | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
role: string;
|
|
18
|
+
message: string;
|
|
19
|
+
data?: Record<string, any> | undefined;
|
|
20
|
+
type?: string | undefined;
|
|
21
|
+
priority?: number | undefined;
|
|
22
|
+
subtype?: string | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const checkResolutionSchema: z.ZodObject<{
|
|
25
|
+
escalation_id: z.ZodString;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
escalation_id: string;
|
|
28
|
+
}, {
|
|
29
|
+
escalation_id: string;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const getAvailableWorkSchema: z.ZodObject<{
|
|
32
|
+
role: z.ZodString;
|
|
33
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
34
|
+
}, "strip", z.ZodTypeAny, {
|
|
35
|
+
role: string;
|
|
36
|
+
limit: number;
|
|
37
|
+
}, {
|
|
38
|
+
role: string;
|
|
39
|
+
limit?: number | undefined;
|
|
40
|
+
}>;
|
|
41
|
+
export declare const claimAndResolveSchema: z.ZodObject<{
|
|
42
|
+
escalation_id: z.ZodString;
|
|
43
|
+
resolver_id: z.ZodString;
|
|
44
|
+
payload: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
escalation_id: string;
|
|
47
|
+
resolver_id: string;
|
|
48
|
+
payload: Record<string, any>;
|
|
49
|
+
}, {
|
|
50
|
+
escalation_id: string;
|
|
51
|
+
resolver_id: string;
|
|
52
|
+
payload: Record<string, any>;
|
|
53
|
+
}>;
|
|
54
|
+
export declare const resolveEscalationSchema: z.ZodObject<{
|
|
55
|
+
escalation_id: z.ZodString;
|
|
56
|
+
payload: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
57
|
+
}, "strip", z.ZodTypeAny, {
|
|
58
|
+
escalation_id: string;
|
|
59
|
+
payload: Record<string, any>;
|
|
60
|
+
}, {
|
|
61
|
+
escalation_id: string;
|
|
62
|
+
payload: Record<string, any>;
|
|
63
|
+
}>;
|
|
64
|
+
export declare const escalateAndWaitSchema: z.ZodObject<{
|
|
65
|
+
role: z.ZodString;
|
|
66
|
+
message: z.ZodString;
|
|
67
|
+
form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
68
|
+
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
69
|
+
assigned_to: z.ZodOptional<z.ZodString>;
|
|
70
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
71
|
+
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
72
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
73
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
74
|
+
role: z.ZodString;
|
|
75
|
+
message: z.ZodString;
|
|
76
|
+
form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
77
|
+
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
78
|
+
assigned_to: z.ZodOptional<z.ZodString>;
|
|
79
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
80
|
+
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
81
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
82
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
83
|
+
role: z.ZodString;
|
|
84
|
+
message: z.ZodString;
|
|
85
|
+
form_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
86
|
+
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
87
|
+
assigned_to: z.ZodOptional<z.ZodString>;
|
|
88
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
89
|
+
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
90
|
+
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
91
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escalateAndWaitSchema = exports.resolveEscalationSchema = exports.claimAndResolveSchema = exports.getAvailableWorkSchema = exports.checkResolutionSchema = exports.escalateSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// ── Schemas (extracted to break TS2589 deep-instantiation in registerTool generics) ──
|
|
6
|
+
exports.escalateSchema = zod_1.z.object({
|
|
7
|
+
role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
|
|
8
|
+
message: zod_1.z.string().describe('Description of what needs human review'),
|
|
9
|
+
data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
|
|
10
|
+
type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
|
|
11
|
+
subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
|
|
12
|
+
priority: zod_1.z.number().min(1).max(4).optional().default(2)
|
|
13
|
+
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
14
|
+
});
|
|
15
|
+
exports.checkResolutionSchema = zod_1.z.object({
|
|
16
|
+
escalation_id: zod_1.z.string().describe('The escalation ID to check'),
|
|
17
|
+
});
|
|
18
|
+
exports.getAvailableWorkSchema = zod_1.z.object({
|
|
19
|
+
role: zod_1.z.string().describe('Role to filter by'),
|
|
20
|
+
limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
|
|
21
|
+
});
|
|
22
|
+
exports.claimAndResolveSchema = zod_1.z.object({
|
|
23
|
+
escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
|
|
24
|
+
resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
|
|
25
|
+
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
26
|
+
});
|
|
27
|
+
exports.resolveEscalationSchema = zod_1.z.object({
|
|
28
|
+
escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
|
|
29
|
+
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
30
|
+
});
|
|
31
|
+
exports.escalateAndWaitSchema = zod_1.z.object({
|
|
32
|
+
role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
|
|
33
|
+
message: zod_1.z.string().describe('Description of what input is needed from the human'),
|
|
34
|
+
form_schema: zod_1.z.record(zod_1.z.any()).optional()
|
|
35
|
+
.describe('JSON Schema for the resolver form. Use format:"password" for sensitive fields.'),
|
|
36
|
+
data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
|
|
37
|
+
assigned_to: zod_1.z.string().optional().describe('Auto-assign to a specific user'),
|
|
38
|
+
type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
|
|
39
|
+
subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
|
|
40
|
+
priority: zod_1.z.number().min(1).max(4).optional().default(1)
|
|
41
|
+
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
42
|
+
}).passthrough();
|
|
@@ -16,11 +16,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
16
16
|
export declare function createHumanQueueServer(options?: {
|
|
17
17
|
name?: string;
|
|
18
18
|
}): Promise<McpServer>;
|
|
19
|
-
/**
|
|
20
|
-
* Get the current MCP server instance.
|
|
21
|
-
*/
|
|
19
|
+
/** Get the current MCP server instance. */
|
|
22
20
|
export declare function getServer(): McpServer | null;
|
|
23
|
-
/**
|
|
24
|
-
* Stop the MCP server and release resources.
|
|
25
|
-
*/
|
|
21
|
+
/** Stop the MCP server and release resources. */
|
|
26
22
|
export declare function stopServer(): Promise<void>;
|
|
@@ -38,48 +38,10 @@ exports.getServer = getServer;
|
|
|
38
38
|
exports.stopServer = stopServer;
|
|
39
39
|
const crypto = __importStar(require("crypto"));
|
|
40
40
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
41
|
-
const zod_1 = require("zod");
|
|
42
41
|
const logger_1 = require("../../lib/logger");
|
|
43
42
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
43
|
+
const human_queue_schemas_1 = require("./human-queue-schemas");
|
|
44
44
|
let server = null;
|
|
45
|
-
// ── Schemas (extracted to break TS2589 deep-instantiation in registerTool generics) ──
|
|
46
|
-
const escalateSchema = zod_1.z.object({
|
|
47
|
-
role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
|
|
48
|
-
message: zod_1.z.string().describe('Description of what needs human review'),
|
|
49
|
-
data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
|
|
50
|
-
type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
|
|
51
|
-
subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
|
|
52
|
-
priority: zod_1.z.number().min(1).max(4).optional().default(2)
|
|
53
|
-
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
54
|
-
});
|
|
55
|
-
const checkResolutionSchema = zod_1.z.object({
|
|
56
|
-
escalation_id: zod_1.z.string().describe('The escalation ID to check'),
|
|
57
|
-
});
|
|
58
|
-
const getAvailableWorkSchema = zod_1.z.object({
|
|
59
|
-
role: zod_1.z.string().describe('Role to filter by'),
|
|
60
|
-
limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
|
|
61
|
-
});
|
|
62
|
-
const claimAndResolveSchema = zod_1.z.object({
|
|
63
|
-
escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
|
|
64
|
-
resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
|
|
65
|
-
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
66
|
-
});
|
|
67
|
-
const resolveEscalationSchema = zod_1.z.object({
|
|
68
|
-
escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
|
|
69
|
-
payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
|
|
70
|
-
});
|
|
71
|
-
const escalateAndWaitSchema = zod_1.z.object({
|
|
72
|
-
role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
|
|
73
|
-
message: zod_1.z.string().describe('Description of what input is needed from the human'),
|
|
74
|
-
form_schema: zod_1.z.record(zod_1.z.any()).optional()
|
|
75
|
-
.describe('JSON Schema for the resolver form. Use format:"password" for sensitive fields.'),
|
|
76
|
-
data: zod_1.z.record(zod_1.z.any()).optional().describe('Contextual data for the reviewer'),
|
|
77
|
-
assigned_to: zod_1.z.string().optional().describe('Auto-assign to a specific user'),
|
|
78
|
-
type: zod_1.z.string().optional().default('mcp').describe('Escalation type classification'),
|
|
79
|
-
subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
|
|
80
|
-
priority: zod_1.z.number().min(1).max(4).optional().default(1)
|
|
81
|
-
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
82
|
-
}).passthrough();
|
|
83
45
|
/**
|
|
84
46
|
* Create the Long Tail Human Queue MCP server.
|
|
85
47
|
*
|
|
@@ -103,7 +65,7 @@ async function createHumanQueueServer(options) {
|
|
|
103
65
|
server.registerTool('escalate_to_human', {
|
|
104
66
|
title: 'Escalate to Human',
|
|
105
67
|
description: 'Create a new escalation for human review. Returns the escalation ID.',
|
|
106
|
-
inputSchema: escalateSchema,
|
|
68
|
+
inputSchema: human_queue_schemas_1.escalateSchema,
|
|
107
69
|
}, async (args) => {
|
|
108
70
|
const escalation = await escalationService.createEscalation({
|
|
109
71
|
type: args.type || 'mcp',
|
|
@@ -130,7 +92,7 @@ async function createHumanQueueServer(options) {
|
|
|
130
92
|
server.registerTool('check_resolution', {
|
|
131
93
|
title: 'Check Escalation Resolution',
|
|
132
94
|
description: 'Check the status of an escalation. Returns status and resolver payload if resolved.',
|
|
133
|
-
inputSchema: checkResolutionSchema,
|
|
95
|
+
inputSchema: human_queue_schemas_1.checkResolutionSchema,
|
|
134
96
|
}, async (args) => {
|
|
135
97
|
const escalation = await escalationService.getEscalation(args.escalation_id);
|
|
136
98
|
if (!escalation) {
|
|
@@ -163,7 +125,7 @@ async function createHumanQueueServer(options) {
|
|
|
163
125
|
server.registerTool('get_available_work', {
|
|
164
126
|
title: 'Get Available Work',
|
|
165
127
|
description: 'List available escalations for a role. Returns pending, unassigned escalations.',
|
|
166
|
-
inputSchema: getAvailableWorkSchema,
|
|
128
|
+
inputSchema: human_queue_schemas_1.getAvailableWorkSchema,
|
|
167
129
|
}, async (args) => {
|
|
168
130
|
const { escalations } = await escalationService.listAvailableEscalations({
|
|
169
131
|
role: args.role,
|
|
@@ -189,7 +151,7 @@ async function createHumanQueueServer(options) {
|
|
|
189
151
|
server.registerTool('claim_and_resolve', {
|
|
190
152
|
title: 'Claim and Resolve',
|
|
191
153
|
description: 'Claim an escalation and immediately resolve it with a payload. Atomic operation.',
|
|
192
|
-
inputSchema: claimAndResolveSchema,
|
|
154
|
+
inputSchema: human_queue_schemas_1.claimAndResolveSchema,
|
|
193
155
|
}, async (args) => {
|
|
194
156
|
const claimed = await escalationService.claimEscalation(args.escalation_id, args.resolver_id, 5);
|
|
195
157
|
if (!claimed) {
|
|
@@ -226,7 +188,7 @@ async function createHumanQueueServer(options) {
|
|
|
226
188
|
server.registerTool('resolve_escalation', {
|
|
227
189
|
title: 'Resolve Escalation',
|
|
228
190
|
description: 'Resolve an already-claimed escalation with a payload. Use when the claim happened externally (e.g. via API).',
|
|
229
|
-
inputSchema: resolveEscalationSchema,
|
|
191
|
+
inputSchema: human_queue_schemas_1.resolveEscalationSchema,
|
|
230
192
|
}, async (args) => {
|
|
231
193
|
const resolved = await escalationService.resolveEscalation(args.escalation_id, args.payload);
|
|
232
194
|
if (!resolved) {
|
|
@@ -255,7 +217,7 @@ async function createHumanQueueServer(options) {
|
|
|
255
217
|
description: 'Create an escalation and pause the workflow until a human responds. ' +
|
|
256
218
|
'Returns a signal ID that the workflow uses to wait. ' +
|
|
257
219
|
'Preferred over escalate_to_human + check_resolution polling.',
|
|
258
|
-
inputSchema: escalateAndWaitSchema,
|
|
220
|
+
inputSchema: human_queue_schemas_1.escalateAndWaitSchema,
|
|
259
221
|
}, async (args) => {
|
|
260
222
|
const signalId = `wait-for-human-${crypto.randomUUID()}`;
|
|
261
223
|
// YAML workflows inject _yaml_signal_routing to override Durable's signalId-based routing
|
|
@@ -300,15 +262,11 @@ async function createHumanQueueServer(options) {
|
|
|
300
262
|
logger_1.loggerRegistry.info(`[lt-mcp:server] ${name} ready (5 tools registered)`);
|
|
301
263
|
return server;
|
|
302
264
|
}
|
|
303
|
-
/**
|
|
304
|
-
* Get the current MCP server instance.
|
|
305
|
-
*/
|
|
265
|
+
/** Get the current MCP server instance. */
|
|
306
266
|
function getServer() {
|
|
307
267
|
return server;
|
|
308
268
|
}
|
|
309
|
-
/**
|
|
310
|
-
* Stop the MCP server and release resources.
|
|
311
|
-
*/
|
|
269
|
+
/** Stop the MCP server and release resources. */
|
|
312
270
|
async function stopServer() {
|
|
313
271
|
if (server) {
|
|
314
272
|
await server.close();
|