coalesce-transform-mcp 0.3.0 → 0.4.2
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 +74 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +6 -2
- package/dist/client.js.map +1 -1
- package/dist/coalesce/api/environments.d.ts +0 -12
- package/dist/coalesce/api/environments.d.ts.map +1 -1
- package/dist/coalesce/api/environments.js +0 -4
- package/dist/coalesce/api/environments.js.map +1 -1
- package/dist/coalesce/api/jobs.d.ts +3 -5
- package/dist/coalesce/api/jobs.d.ts.map +1 -1
- package/dist/coalesce/api/jobs.js +3 -6
- package/dist/coalesce/api/jobs.js.map +1 -1
- package/dist/coalesce/api/nodes.d.ts +3 -3
- package/dist/coalesce/api/nodes.d.ts.map +1 -1
- package/dist/coalesce/api/nodes.js +6 -4
- package/dist/coalesce/api/nodes.js.map +1 -1
- package/dist/coalesce/api/runs.d.ts.map +1 -1
- package/dist/coalesce/api/runs.js +11 -1
- package/dist/coalesce/api/runs.js.map +1 -1
- package/dist/coalesce/api/scan.d.ts +14 -0
- package/dist/coalesce/api/scan.d.ts.map +1 -0
- package/dist/coalesce/api/scan.js +64 -0
- package/dist/coalesce/api/scan.js.map +1 -0
- package/dist/coalesce/api/subgraphs.d.ts +3 -2
- package/dist/coalesce/api/subgraphs.d.ts.map +1 -1
- package/dist/coalesce/api/subgraphs.js +3 -2
- package/dist/coalesce/api/subgraphs.js.map +1 -1
- package/dist/coalesce/run-schemas.d.ts.map +1 -1
- package/dist/coalesce/run-schemas.js +26 -16
- package/dist/coalesce/run-schemas.js.map +1 -1
- package/dist/coalesce/tool-response.d.ts +1 -13
- package/dist/coalesce/tool-response.d.ts.map +1 -1
- package/dist/coalesce/tool-response.js +20 -6
- package/dist/coalesce/tool-response.js.map +1 -1
- package/dist/coalesce/tool-schemas.d.ts +1 -2
- package/dist/coalesce/tool-schemas.d.ts.map +1 -1
- package/dist/coalesce/tool-schemas.js +368 -5
- package/dist/coalesce/tool-schemas.js.map +1 -1
- package/dist/coalesce/types.d.ts +8 -0
- package/dist/coalesce/types.d.ts.map +1 -1
- package/dist/coalesce/types.js +3 -1
- package/dist/coalesce/types.js.map +1 -1
- package/dist/constants.d.ts +18 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/mcp/cache.d.ts +2 -1
- package/dist/mcp/cache.d.ts.map +1 -1
- package/dist/mcp/cache.js +122 -138
- package/dist/mcp/cache.js.map +1 -1
- package/dist/mcp/environments.d.ts +2 -1
- package/dist/mcp/environments.d.ts.map +1 -1
- package/dist/mcp/environments.js +56 -112
- package/dist/mcp/environments.js.map +1 -1
- package/dist/mcp/git-accounts.d.ts +2 -1
- package/dist/mcp/git-accounts.d.ts.map +1 -1
- package/dist/mcp/git-accounts.js +74 -96
- package/dist/mcp/git-accounts.js.map +1 -1
- package/dist/mcp/jobs.d.ts +2 -1
- package/dist/mcp/jobs.d.ts.map +1 -1
- package/dist/mcp/jobs.js +68 -122
- package/dist/mcp/jobs.js.map +1 -1
- package/dist/mcp/lineage.d.ts +5 -0
- package/dist/mcp/lineage.d.ts.map +1 -0
- package/dist/mcp/lineage.js +410 -0
- package/dist/mcp/lineage.js.map +1 -0
- package/dist/mcp/node-type-corpus.d.ts +2 -1
- package/dist/mcp/node-type-corpus.d.ts.map +1 -1
- package/dist/mcp/node-type-corpus.js +148 -151
- package/dist/mcp/node-type-corpus.js.map +1 -1
- package/dist/mcp/nodes.d.ts +2 -1
- package/dist/mcp/nodes.d.ts.map +1 -1
- package/dist/mcp/nodes.js +358 -464
- package/dist/mcp/nodes.js.map +1 -1
- package/dist/mcp/pipelines.d.ts +2 -1
- package/dist/mcp/pipelines.d.ts.map +1 -1
- package/dist/mcp/pipelines.js +514 -314
- package/dist/mcp/pipelines.js.map +1 -1
- package/dist/mcp/projects.d.ts +2 -1
- package/dist/mcp/projects.d.ts.map +1 -1
- package/dist/mcp/projects.js +66 -100
- package/dist/mcp/projects.js.map +1 -1
- package/dist/mcp/repo-node-types.d.ts +2 -1
- package/dist/mcp/repo-node-types.d.ts.map +1 -1
- package/dist/mcp/repo-node-types.js +92 -121
- package/dist/mcp/repo-node-types.js.map +1 -1
- package/dist/mcp/runs.d.ts +3 -2
- package/dist/mcp/runs.d.ts.map +1 -1
- package/dist/mcp/runs.js +93 -148
- package/dist/mcp/runs.js.map +1 -1
- package/dist/mcp/skills.d.ts +13 -0
- package/dist/mcp/skills.d.ts.map +1 -0
- package/dist/mcp/skills.js +85 -0
- package/dist/mcp/skills.js.map +1 -0
- package/dist/mcp/subgraphs.d.ts +2 -1
- package/dist/mcp/subgraphs.d.ts.map +1 -1
- package/dist/mcp/subgraphs.js +61 -98
- package/dist/mcp/subgraphs.js.map +1 -1
- package/dist/mcp/tool-helpers.d.ts +37 -0
- package/dist/mcp/tool-helpers.d.ts.map +1 -0
- package/dist/mcp/tool-helpers.js +82 -0
- package/dist/mcp/tool-helpers.js.map +1 -0
- package/dist/mcp/users.d.ts +2 -1
- package/dist/mcp/users.d.ts.map +1 -1
- package/dist/mcp/users.js +92 -145
- package/dist/mcp/users.js.map +1 -1
- package/dist/mcp/workshop.d.ts +2 -1
- package/dist/mcp/workshop.d.ts.map +1 -1
- package/dist/mcp/workshop.js +66 -101
- package/dist/mcp/workshop.js.map +1 -1
- package/dist/mcp/workspaces.d.ts +2 -1
- package/dist/mcp/workspaces.d.ts.map +1 -1
- package/dist/mcp/workspaces.js +19 -34
- package/dist/mcp/workspaces.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +85 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/context/pipeline-workshop-guide.md +1 -1
- package/dist/resources/context/tool-usage.md +7 -0
- package/dist/resources/index.d.ts +13 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +105 -5
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/node-payloads.d.ts +2 -2
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +158 -41
- package/dist/server.js.map +1 -1
- package/dist/services/cache/snapshots.d.ts.map +1 -1
- package/dist/services/cache/snapshots.js +9 -5
- package/dist/services/cache/snapshots.js.map +1 -1
- package/dist/services/config/schema-resolver.d.ts.map +1 -1
- package/dist/services/config/schema-resolver.js +3 -6
- package/dist/services/config/schema-resolver.js.map +1 -1
- package/dist/services/lineage/lineage-cache.d.ts +53 -0
- package/dist/services/lineage/lineage-cache.d.ts.map +1 -0
- package/dist/services/lineage/lineage-cache.js +335 -0
- package/dist/services/lineage/lineage-cache.js.map +1 -0
- package/dist/services/lineage/lineage-documentation.d.ts +29 -0
- package/dist/services/lineage/lineage-documentation.d.ts.map +1 -0
- package/dist/services/lineage/lineage-documentation.js +80 -0
- package/dist/services/lineage/lineage-documentation.js.map +1 -0
- package/dist/services/lineage/lineage-propagation.d.ts +47 -0
- package/dist/services/lineage/lineage-propagation.d.ts.map +1 -0
- package/dist/services/lineage/lineage-propagation.js +176 -0
- package/dist/services/lineage/lineage-propagation.js.map +1 -0
- package/dist/services/lineage/lineage-search.d.ts +33 -0
- package/dist/services/lineage/lineage-search.d.ts.map +1 -0
- package/dist/services/lineage/lineage-search.js +133 -0
- package/dist/services/lineage/lineage-search.js.map +1 -0
- package/dist/services/lineage/lineage-traversal.d.ts +34 -0
- package/dist/services/lineage/lineage-traversal.d.ts.map +1 -0
- package/dist/services/lineage/lineage-traversal.js +283 -0
- package/dist/services/lineage/lineage-traversal.js.map +1 -0
- package/dist/services/pipelines/clause-extraction.d.ts +3 -0
- package/dist/services/pipelines/clause-extraction.d.ts.map +1 -0
- package/dist/services/pipelines/clause-extraction.js +27 -0
- package/dist/services/pipelines/clause-extraction.js.map +1 -0
- package/dist/services/pipelines/column-helpers.d.ts +8 -0
- package/dist/services/pipelines/column-helpers.d.ts.map +1 -0
- package/dist/services/pipelines/column-helpers.js +125 -0
- package/dist/services/pipelines/column-helpers.js.map +1 -0
- package/dist/services/pipelines/cte-parsing.d.ts +29 -0
- package/dist/services/pipelines/cte-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/cte-parsing.js +160 -0
- package/dist/services/pipelines/cte-parsing.js.map +1 -0
- package/dist/services/pipelines/cte-planning.d.ts +22 -0
- package/dist/services/pipelines/cte-planning.d.ts.map +1 -0
- package/dist/services/pipelines/cte-planning.js +206 -0
- package/dist/services/pipelines/cte-planning.js.map +1 -0
- package/dist/services/pipelines/execution.d.ts.map +1 -1
- package/dist/services/pipelines/execution.js +0 -1
- package/dist/services/pipelines/execution.js.map +1 -1
- package/dist/services/pipelines/intent-parsing.d.ts +24 -0
- package/dist/services/pipelines/intent-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/intent-parsing.js +245 -0
- package/dist/services/pipelines/intent-parsing.js.map +1 -0
- package/dist/services/pipelines/intent-resolution.d.ts +24 -0
- package/dist/services/pipelines/intent-resolution.d.ts.map +1 -0
- package/dist/services/pipelines/intent-resolution.js +141 -0
- package/dist/services/pipelines/intent-resolution.js.map +1 -0
- package/dist/services/pipelines/intent.d.ts +4 -45
- package/dist/services/pipelines/intent.d.ts.map +1 -1
- package/dist/services/pipelines/intent.js +14 -408
- package/dist/services/pipelines/intent.js.map +1 -1
- package/dist/services/pipelines/node-type-candidates.d.ts +6 -0
- package/dist/services/pipelines/node-type-candidates.d.ts.map +1 -0
- package/dist/services/pipelines/node-type-candidates.js +165 -0
- package/dist/services/pipelines/node-type-candidates.js.map +1 -0
- package/dist/services/pipelines/node-type-intent.d.ts +1 -5
- package/dist/services/pipelines/node-type-intent.d.ts.map +1 -1
- package/dist/services/pipelines/node-type-intent.js +1 -5
- package/dist/services/pipelines/node-type-intent.js.map +1 -1
- package/dist/services/pipelines/node-type-scoring.d.ts +13 -0
- package/dist/services/pipelines/node-type-scoring.d.ts.map +1 -0
- package/dist/services/pipelines/node-type-scoring.js +322 -0
- package/dist/services/pipelines/node-type-scoring.js.map +1 -0
- package/dist/services/pipelines/node-type-selection.d.ts +22 -2
- package/dist/services/pipelines/node-type-selection.d.ts.map +1 -1
- package/dist/services/pipelines/node-type-selection.js +16 -538
- package/dist/services/pipelines/node-type-selection.js.map +1 -1
- package/dist/services/pipelines/plan-builder.d.ts +33 -0
- package/dist/services/pipelines/plan-builder.d.ts.map +1 -0
- package/dist/services/pipelines/plan-builder.js +224 -0
- package/dist/services/pipelines/plan-builder.js.map +1 -0
- package/dist/services/pipelines/planning-types.d.ts +543 -0
- package/dist/services/pipelines/planning-types.d.ts.map +1 -0
- package/dist/services/pipelines/planning-types.js +85 -0
- package/dist/services/pipelines/planning-types.js.map +1 -0
- package/dist/services/pipelines/planning.d.ts +8 -537
- package/dist/services/pipelines/planning.d.ts.map +1 -1
- package/dist/services/pipelines/planning.js +10 -1956
- package/dist/services/pipelines/planning.js.map +1 -1
- package/dist/services/pipelines/review.d.ts.map +1 -1
- package/dist/services/pipelines/review.js +3 -8
- package/dist/services/pipelines/review.js.map +1 -1
- package/dist/services/pipelines/select-parsing.d.ts +7 -0
- package/dist/services/pipelines/select-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/select-parsing.js +185 -0
- package/dist/services/pipelines/select-parsing.js.map +1 -0
- package/dist/services/pipelines/source-parsing.d.ts +8 -0
- package/dist/services/pipelines/source-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/source-parsing.js +151 -0
- package/dist/services/pipelines/source-parsing.js.map +1 -0
- package/dist/services/pipelines/sql-parsing.d.ts +8 -0
- package/dist/services/pipelines/sql-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/sql-parsing.js +9 -0
- package/dist/services/pipelines/sql-parsing.js.map +1 -0
- package/dist/services/pipelines/sql-tokenizer.d.ts +42 -0
- package/dist/services/pipelines/sql-tokenizer.d.ts.map +1 -0
- package/dist/services/pipelines/sql-tokenizer.js +493 -0
- package/dist/services/pipelines/sql-tokenizer.js.map +1 -0
- package/dist/services/pipelines/sql-utils.d.ts +30 -0
- package/dist/services/pipelines/sql-utils.d.ts.map +1 -0
- package/dist/services/pipelines/sql-utils.js +62 -0
- package/dist/services/pipelines/sql-utils.js.map +1 -0
- package/dist/services/pipelines/workshop.d.ts.map +1 -1
- package/dist/services/pipelines/workshop.js +53 -25
- package/dist/services/pipelines/workshop.js.map +1 -1
- package/dist/services/pipelines/workspace-resolution.d.ts +18 -0
- package/dist/services/pipelines/workspace-resolution.d.ts.map +1 -0
- package/dist/services/pipelines/workspace-resolution.js +279 -0
- package/dist/services/pipelines/workspace-resolution.js.map +1 -0
- package/dist/services/runs/diagnostics.d.ts.map +1 -1
- package/dist/services/runs/diagnostics.js +3 -8
- package/dist/services/runs/diagnostics.js.map +1 -1
- package/dist/services/shared/elicitation.d.ts +14 -0
- package/dist/services/shared/elicitation.d.ts.map +1 -0
- package/dist/services/shared/elicitation.js +56 -0
- package/dist/services/shared/elicitation.js.map +1 -0
- package/dist/services/workspace/node-creation.d.ts.map +1 -1
- package/dist/services/workspace/node-creation.js +5 -1
- package/dist/services/workspace/node-creation.js.map +1 -1
- package/dist/services/workspace/node-update-helpers.d.ts.map +1 -1
- package/dist/services/workspace/node-update-helpers.js +3 -8
- package/dist/services/workspace/node-update-helpers.js.map +1 -1
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +20 -1
- package/dist/utils.js.map +1 -1
- package/dist/workflows/get-environment-health.d.ts +49 -0
- package/dist/workflows/get-environment-health.d.ts.map +1 -0
- package/dist/workflows/get-environment-health.js +310 -0
- package/dist/workflows/get-environment-health.js.map +1 -0
- package/dist/workflows/get-environment-overview.d.ts +2 -1
- package/dist/workflows/get-environment-overview.d.ts.map +1 -1
- package/dist/workflows/get-environment-overview.js +13 -19
- package/dist/workflows/get-environment-overview.js.map +1 -1
- package/dist/workflows/get-run-details.d.ts +2 -2
- package/dist/workflows/get-run-details.d.ts.map +1 -1
- package/dist/workflows/get-run-details.js +14 -19
- package/dist/workflows/get-run-details.js.map +1 -1
- package/dist/workflows/retry-and-wait.d.ts.map +1 -1
- package/dist/workflows/retry-and-wait.js +3 -2
- package/dist/workflows/retry-and-wait.js.map +1 -1
- package/dist/workflows/run-and-wait.d.ts.map +1 -1
- package/dist/workflows/run-and-wait.js +3 -2
- package/dist/workflows/run-and-wait.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,6 +7,7 @@ import { filterSqlOverrideControls, sanitizeNodeDefinitionSqlOverridePolicy, } f
|
|
|
7
7
|
import { getWorkspaceNode } from "../coalesce/api/nodes.js";
|
|
8
8
|
import { buildJsonToolResponse, getToolOutputSchema, handleToolError, READ_ONLY_LOCAL_ANNOTATIONS, } from "../coalesce/types.js";
|
|
9
9
|
import { isPlainObject } from "../utils.js";
|
|
10
|
+
import { defineLocalTool } from "./tool-helpers.js";
|
|
10
11
|
function sanitizeVariantForResponse(variant) {
|
|
11
12
|
if (!variant.nodeDefinition) {
|
|
12
13
|
return {
|
|
@@ -27,166 +28,162 @@ function sanitizeVariantForResponse(variant) {
|
|
|
27
28
|
warnings: sanitized.warnings,
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
|
-
export function
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
try {
|
|
31
|
+
export function defineNodeTypeCorpusTools(_server, client) {
|
|
32
|
+
return [
|
|
33
|
+
defineLocalTool("search_node_type_variants", {
|
|
34
|
+
title: "Search Node Type Variants",
|
|
35
|
+
description: "Search the generated node-type corpus snapshot by normalized family, package, primitive, or support status. This tool queries the committed snapshot and does not require access to the original external node source repo at runtime.",
|
|
36
|
+
inputSchema: z.object({
|
|
37
|
+
normalizedFamily: z
|
|
38
|
+
.string()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Case-insensitive exact match against the normalized family name."),
|
|
41
|
+
packageName: z
|
|
42
|
+
.string()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("Case-insensitive exact match against one of the package names that carries the variant."),
|
|
45
|
+
primitive: z
|
|
46
|
+
.string()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Case-insensitive match against a primitive used in the node definition, such as tabular or materializationSelector."),
|
|
49
|
+
supportStatus: z
|
|
50
|
+
.enum(["supported", "partial"])
|
|
51
|
+
.or(z.literal("parse_error"))
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Filter by current MCP support classification."),
|
|
54
|
+
limit: z
|
|
55
|
+
.number()
|
|
56
|
+
.int()
|
|
57
|
+
.positive()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Maximum number of matches to return. Defaults to 25, max 200."),
|
|
60
|
+
}),
|
|
61
|
+
annotations: READ_ONLY_LOCAL_ANNOTATIONS,
|
|
62
|
+
}, (params) => {
|
|
63
63
|
const snapshot = loadNodeTypeCorpusSnapshot();
|
|
64
|
-
|
|
64
|
+
return {
|
|
65
65
|
summary: summarizeNodeTypeCorpus(snapshot),
|
|
66
66
|
...searchNodeTypeCorpusVariants(snapshot, params),
|
|
67
67
|
};
|
|
68
|
-
return buildJsonToolResponse("search_node_type_variants", result);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
return handleToolError(error);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
server.registerTool("get_node_type_variant", {
|
|
75
|
-
title: "Get Node Type Variant",
|
|
76
|
-
description: "Get one node-type corpus variant from the committed snapshot by variantKey. Use search_node_type_variants first when you need discovery.",
|
|
77
|
-
inputSchema: z.object({
|
|
78
|
-
variantKey: z.string().describe("The exact node-type corpus variant key."),
|
|
79
68
|
}),
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
defineLocalTool("get_node_type_variant", {
|
|
70
|
+
title: "Get Node Type Variant",
|
|
71
|
+
description: "Get one node-type corpus variant from the committed snapshot by variantKey. Use search_node_type_variants first when you need discovery.",
|
|
72
|
+
inputSchema: z.object({
|
|
73
|
+
variantKey: z.string().describe("The exact node-type corpus variant key."),
|
|
74
|
+
}),
|
|
75
|
+
annotations: READ_ONLY_LOCAL_ANNOTATIONS,
|
|
76
|
+
}, (params) => {
|
|
84
77
|
const snapshot = loadNodeTypeCorpusSnapshot();
|
|
85
78
|
const variant = getNodeTypeCorpusVariant(snapshot, params.variantKey);
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
return handleToolError(error);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
server.registerTool("generate_set_workspace_node_template_from_variant", {
|
|
93
|
-
title: "Generate Set Workspace Node Template from Variant",
|
|
94
|
-
description: "Generate a set_workspace_node body template from a node-type corpus variant stored in the committed snapshot. This avoids requiring the original external node source repo at runtime, rejects partial variants unless allowPartial=true, and can optionally compare the inferred template against a live workspace node. SQL override controls are removed from returned templates because they are disallowed in this project.",
|
|
95
|
-
inputSchema: z.object({
|
|
96
|
-
variantKey: z.string().describe("The exact node-type corpus variant key."),
|
|
97
|
-
nodeName: z
|
|
98
|
-
.string()
|
|
99
|
-
.optional()
|
|
100
|
-
.describe("Optional node name to inject into the generated template."),
|
|
101
|
-
nodeType: z
|
|
102
|
-
.string()
|
|
103
|
-
.optional()
|
|
104
|
-
.describe("Optional nodeType override. Defaults to the variant definition capitalized field."),
|
|
105
|
-
locationName: z
|
|
106
|
-
.string()
|
|
107
|
-
.optional()
|
|
108
|
-
.describe("Optional storage location name to include in the template."),
|
|
109
|
-
database: z
|
|
110
|
-
.string()
|
|
111
|
-
.optional()
|
|
112
|
-
.describe("Optional database value to include in the template."),
|
|
113
|
-
schema: z
|
|
114
|
-
.string()
|
|
115
|
-
.optional()
|
|
116
|
-
.describe("Optional schema value to include in the template."),
|
|
117
|
-
allowPartial: z
|
|
118
|
-
.boolean()
|
|
119
|
-
.optional()
|
|
120
|
-
.describe("When true, allow best-effort generation for variants currently marked partial."),
|
|
121
|
-
workspaceID: z
|
|
122
|
-
.string()
|
|
123
|
-
.optional()
|
|
124
|
-
.describe("Optional workspace ID for comparing inferred mappings to a live workspace node."),
|
|
125
|
-
nodeID: z
|
|
126
|
-
.string()
|
|
127
|
-
.optional()
|
|
128
|
-
.describe("Optional node ID for comparing inferred mappings to a live workspace node."),
|
|
79
|
+
return sanitizeVariantForResponse(variant);
|
|
129
80
|
}),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
81
|
+
// generate_set_workspace_node_template_from_variant has complex inline logic
|
|
82
|
+
// (variant validation, template generation, optional live comparison via client)
|
|
83
|
+
// that doesn't fit the simple helper pattern.
|
|
84
|
+
[
|
|
85
|
+
"generate_set_workspace_node_template_from_variant",
|
|
86
|
+
{
|
|
87
|
+
title: "Generate Set Workspace Node Template from Variant",
|
|
88
|
+
description: "Generate a set_workspace_node body template from a node-type corpus variant stored in the committed snapshot. This avoids requiring the original external node source repo at runtime, rejects partial variants unless allowPartial=true, and can optionally compare the inferred template against a live workspace node. SQL override controls are removed from returned templates because they are disallowed in this project.",
|
|
89
|
+
inputSchema: z.object({
|
|
90
|
+
variantKey: z.string().describe("The exact node-type corpus variant key."),
|
|
91
|
+
nodeName: z
|
|
92
|
+
.string()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("Optional node name to inject into the generated template."),
|
|
95
|
+
nodeType: z
|
|
96
|
+
.string()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe("Optional nodeType override. Defaults to the variant definition capitalized field."),
|
|
99
|
+
locationName: z
|
|
100
|
+
.string()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe("Optional storage location name to include in the template."),
|
|
103
|
+
database: z
|
|
104
|
+
.string()
|
|
105
|
+
.optional()
|
|
106
|
+
.describe("Optional database value to include in the template."),
|
|
107
|
+
schema: z
|
|
108
|
+
.string()
|
|
109
|
+
.optional()
|
|
110
|
+
.describe("Optional schema value to include in the template."),
|
|
111
|
+
allowPartial: z
|
|
112
|
+
.boolean()
|
|
113
|
+
.optional()
|
|
114
|
+
.describe("When true, allow best-effort generation for variants currently marked partial."),
|
|
115
|
+
workspaceID: z
|
|
116
|
+
.string()
|
|
117
|
+
.optional()
|
|
118
|
+
.describe("Optional workspace ID for comparing inferred mappings to a live workspace node."),
|
|
119
|
+
nodeID: z
|
|
120
|
+
.string()
|
|
121
|
+
.optional()
|
|
122
|
+
.describe("Optional node ID for comparing inferred mappings to a live workspace node."),
|
|
123
|
+
}),
|
|
124
|
+
outputSchema: getToolOutputSchema("generate_set_workspace_node_template_from_variant"),
|
|
125
|
+
annotations: READ_ONLY_LOCAL_ANNOTATIONS,
|
|
126
|
+
},
|
|
127
|
+
async (params) => {
|
|
128
|
+
try {
|
|
129
|
+
if ((params.workspaceID && !params.nodeID) || (!params.workspaceID && params.nodeID)) {
|
|
130
|
+
throw new Error("workspaceID and nodeID must be provided together when requesting a live node comparison.");
|
|
131
|
+
}
|
|
132
|
+
const snapshot = loadNodeTypeCorpusSnapshot();
|
|
133
|
+
const variant = getNodeTypeCorpusVariant(snapshot, params.variantKey);
|
|
134
|
+
validateVariantTemplateGeneration(variant, {
|
|
135
|
+
allowPartial: params.allowPartial,
|
|
136
|
+
});
|
|
137
|
+
const sanitizedVariant = sanitizeVariantForResponse(variant);
|
|
138
|
+
if (!sanitizedVariant.nodeDefinition || !isPlainObject(sanitizedVariant.nodeDefinition)) {
|
|
139
|
+
throw new Error("Sanitized node definition was not an object.");
|
|
140
|
+
}
|
|
141
|
+
const generated = buildSetWorkspaceNodeTemplateFromDefinition(variant.nodeDefinition, {
|
|
142
|
+
nodeName: params.nodeName,
|
|
143
|
+
nodeType: params.nodeType,
|
|
144
|
+
locationName: params.locationName,
|
|
145
|
+
database: params.database,
|
|
146
|
+
schema: params.schema,
|
|
147
|
+
});
|
|
148
|
+
const filteredUnsupportedPrimitives = filterSqlOverrideControls(variant.unsupportedPrimitives);
|
|
149
|
+
const warnings = Array.from(new Set(variant.supportStatus === "partial"
|
|
150
|
+
? [
|
|
151
|
+
`Best-effort template only. This variant uses unsupported primitives: ${filteredUnsupportedPrimitives.length > 0
|
|
152
|
+
? filteredUnsupportedPrimitives.join(", ")
|
|
153
|
+
: "none after SQL override controls were removed"}.`,
|
|
154
|
+
...generated.warnings,
|
|
155
|
+
]
|
|
156
|
+
: generated.warnings));
|
|
157
|
+
let comparison;
|
|
158
|
+
if (params.workspaceID && params.nodeID) {
|
|
159
|
+
const workspaceNode = await getWorkspaceNode(client, {
|
|
160
|
+
workspaceID: params.workspaceID,
|
|
161
|
+
nodeID: params.nodeID,
|
|
162
|
+
});
|
|
163
|
+
if (!isPlainObject(workspaceNode)) {
|
|
164
|
+
throw new Error("Workspace node comparison target was not an object");
|
|
165
|
+
}
|
|
166
|
+
comparison = {
|
|
167
|
+
workspaceID: params.workspaceID,
|
|
168
|
+
nodeID: params.nodeID,
|
|
169
|
+
result: compareGeneratedTemplateToWorkspaceNode(generated, workspaceNode),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
const result = {
|
|
173
|
+
variant: buildVariantSummary(variant),
|
|
174
|
+
nodeMetadataSpecYaml: sanitizedVariant.nodeMetadataSpec,
|
|
175
|
+
...generated,
|
|
176
|
+
warnings,
|
|
177
|
+
setWorkspaceNodeBodyTemplateYaml: renderYaml(generated.setWorkspaceNodeBodyTemplate),
|
|
178
|
+
...(comparison ? { comparison } : {}),
|
|
179
|
+
};
|
|
180
|
+
return buildJsonToolResponse("generate_set_workspace_node_template_from_variant", result);
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return handleToolError(error);
|
|
170
184
|
}
|
|
171
|
-
comparison = {
|
|
172
|
-
workspaceID: params.workspaceID,
|
|
173
|
-
nodeID: params.nodeID,
|
|
174
|
-
result: compareGeneratedTemplateToWorkspaceNode(generated, workspaceNode),
|
|
175
|
-
};
|
|
176
185
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
nodeMetadataSpecYaml: sanitizedVariant.nodeMetadataSpec,
|
|
180
|
-
...generated,
|
|
181
|
-
warnings,
|
|
182
|
-
setWorkspaceNodeBodyTemplateYaml: renderYaml(generated.setWorkspaceNodeBodyTemplate),
|
|
183
|
-
...(comparison ? { comparison } : {}),
|
|
184
|
-
};
|
|
185
|
-
return buildJsonToolResponse("generate_set_workspace_node_template_from_variant", result);
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
return handleToolError(error);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
186
|
+
],
|
|
187
|
+
];
|
|
191
188
|
}
|
|
192
189
|
//# sourceMappingURL=node-type-corpus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-type-corpus.js","sourceRoot":"","sources":["../../src/mcp/node-type-corpus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,0BAA0B,
|
|
1
|
+
{"version":3,"file":"node-type-corpus.js","sourceRoot":"","sources":["../../src/mcp/node-type-corpus.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/nodes.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { CoalesceClient } from "../client.js";
|
|
3
|
-
|
|
3
|
+
import { type ToolDefinition } from "../coalesce/types.js";
|
|
4
|
+
export declare function defineNodeTools(server: McpServer, client: CoalesceClient): ToolDefinition[];
|
|
4
5
|
//# sourceMappingURL=nodes.d.ts.map
|
package/dist/mcp/nodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/mcp/nodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/mcp/nodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgCnD,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,cAAc,EAAE,CAsZlB"}
|