coalesce-transform-mcp 0.5.2 → 0.6.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"subgraphs.d.ts","sourceRoot":"","sources":["../../src/mcp/subgraphs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQnD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,cAAc,EAAE,CA8FlB"}
1
+ {"version":3,"file":"subgraphs.d.ts","sourceRoot":"","sources":["../../src/mcp/subgraphs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAWnD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,cAAc,EAAE,CAgJlB"}
@@ -1,5 +1,7 @@
1
1
  import { z } from "zod";
2
- import { listWorkspaceSubgraphs, getWorkspaceSubgraph, createWorkspaceSubgraph, updateWorkspaceSubgraph, deleteWorkspaceSubgraph, } from "../coalesce/api/subgraphs.js";
2
+ import { listWorkspaceSubgraphs, getWorkspaceSubgraph, } from "../coalesce/api/subgraphs.js";
3
+ import { createSubgraphWithCache, updateSubgraphResolved, deleteSubgraphByID, } from "../services/subgraphs/operations.js";
4
+ import { resolveSubgraphByName } from "../services/subgraphs/resolve.js";
3
5
  import { PaginationParams, READ_ONLY_ANNOTATIONS, WRITE_ANNOTATIONS, DESTRUCTIVE_ANNOTATIONS, } from "../coalesce/types.js";
4
6
  import { defineSimpleTool, defineDestructiveTool, extractEntityName } from "./tool-helpers.js";
5
7
  export function defineSubgraphTools(server, client) {
@@ -23,7 +25,7 @@ export function defineSubgraphTools(server, client) {
23
25
  }, getWorkspaceSubgraph),
24
26
  defineSimpleTool(client, "create_workspace_subgraph", {
25
27
  title: "Create Workspace Subgraph",
26
- description: "Create a subgraph in a Coalesce workspace. Subgraphs group nodes visually.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - name (string, required): Subgraph name\n - steps (string[], required): Array of node IDs to include\n\nReturns:\n Created subgraph with assigned ID.",
28
+ description: "Create a subgraph in a Coalesce workspace. Subgraphs group nodes visually. The assigned UUID is cached locally so future edits can reference the subgraph by name.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - name (string, required): Subgraph name\n - steps (string[], required): Array of node IDs to include\n\nReturns:\n { subgraphID, subgraph, cached, message } — subgraphID is the UUID; cache it if you need to edit this subgraph later.",
27
29
  inputSchema: z.object({
28
30
  workspaceID: z.string().describe("The workspace ID"),
29
31
  name: z.string().describe("Name for the subgraph"),
@@ -32,26 +34,48 @@ export function defineSubgraphTools(server, client) {
32
34
  .describe("Array of node IDs to include in the subgraph"),
33
35
  }),
34
36
  annotations: WRITE_ANNOTATIONS,
35
- }, createWorkspaceSubgraph),
37
+ }, createSubgraphWithCache),
36
38
  defineSimpleTool(client, "update_workspace_subgraph", {
37
39
  title: "Update Workspace Subgraph",
38
- description: "Update a subgraph's name and member nodes. Replaces the entire steps array.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - subgraphID (string, required): The subgraph ID\n - name (string, required): Updated name\n - steps (string[], required): Updated node IDs\n\nReturns:\n Updated subgraph object.",
40
+ description: "Update a subgraph's name and member nodes. Replaces the entire steps array. Pass either subgraphID (fastest) or subgraphName — if only the name is given, the ID is resolved from (1) the local UUID cache, (2) {repoPath}/subgraphs/*.yml, (3) the workspace subgraph list.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - subgraphID (string, optional): The subgraph ID. Preferred when known.\n - subgraphName (string, optional): The subgraph name. Used to resolve the ID when subgraphID is absent.\n - repoPath (string, optional): Coalesce repo path for subgraph YAML lookup.\n - name (string, required): Updated name\n - steps (string[], required): Updated node IDs\n\nReturns:\n { subgraphID, subgraph, resolvedFrom } where resolvedFrom is \"input\" | \"cache\" | \"repo\" | \"workspace\".",
39
41
  inputSchema: z.object({
40
42
  workspaceID: z.string().describe("The workspace ID"),
41
- subgraphID: z.string().describe("The subgraph ID to update"),
43
+ subgraphID: z
44
+ .string()
45
+ .optional()
46
+ .describe("The subgraph ID. Preferred when known — fastest path."),
47
+ subgraphName: z
48
+ .string()
49
+ .optional()
50
+ .describe("The subgraph name. Used to resolve the ID from the local cache, repo subgraphs/ folder, or workspace list when subgraphID is absent."),
51
+ repoPath: z
52
+ .string()
53
+ .optional()
54
+ .describe("Optional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile."),
42
55
  name: z.string().describe("Updated name for the subgraph"),
43
56
  steps: z
44
57
  .array(z.string())
45
58
  .describe("Updated array of node IDs to include in the subgraph"),
46
59
  }),
47
60
  annotations: WRITE_ANNOTATIONS,
48
- }, updateWorkspaceSubgraph),
61
+ }, updateSubgraphResolved),
49
62
  defineDestructiveTool(server, client, "delete_workspace_subgraph", {
50
63
  title: "Delete Workspace Subgraph",
51
- description: "Delete a subgraph from a workspace. Destructive — the subgraph is removed but its member nodes are NOT deleted.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - subgraphID (string, required): The subgraph ID\n - confirmed (boolean, optional): Set to true after the user explicitly confirms deletion\n\nReturns:\n Confirmation message.",
64
+ description: "Delete a subgraph from a workspace. Destructive — the subgraph is removed but its member nodes are NOT deleted. Pass either subgraphID (preferred) or subgraphName with optional repoPath.\n\nArgs:\n - workspaceID (string, required): The workspace ID\n - subgraphID (string, optional): The subgraph ID. Preferred when known.\n - subgraphName (string, optional): The subgraph name. Resolved via cache \u2192 repo \u2192 workspace when subgraphID is absent.\n - repoPath (string, optional): Coalesce repo path for subgraph YAML lookup.\n - confirmed (boolean, optional): Set to true after the user explicitly confirms deletion\n\nReturns:\n Confirmation message.",
52
65
  inputSchema: z.object({
53
66
  workspaceID: z.string().describe("The workspace ID"),
54
- subgraphID: z.string().describe("The subgraph ID to delete"),
67
+ subgraphID: z
68
+ .string()
69
+ .optional()
70
+ .describe("The subgraph ID to delete. Preferred when known."),
71
+ subgraphName: z
72
+ .string()
73
+ .optional()
74
+ .describe("The subgraph name. Resolved via cache \u2192 repo \u2192 workspace list when subgraphID is absent."),
75
+ repoPath: z
76
+ .string()
77
+ .optional()
78
+ .describe("Optional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile."),
55
79
  confirmed: z
56
80
  .boolean()
57
81
  .optional()
@@ -59,33 +83,51 @@ export function defineSubgraphTools(server, client) {
59
83
  }),
60
84
  annotations: DESTRUCTIVE_ANNOTATIONS,
61
85
  resolve: async (client, params) => {
86
+ if (!params.subgraphID && !params.subgraphName) {
87
+ throw new Error("Either subgraphID or subgraphName is required.");
88
+ }
89
+ if (!params.subgraphID) {
90
+ const resolved = await resolveSubgraphByName(client, {
91
+ workspaceID: params.workspaceID,
92
+ name: params.subgraphName,
93
+ repoPath: params.repoPath,
94
+ });
95
+ // Mutate params so the downstream apiFunc skips a second resolve.
96
+ // defineDestructiveTool passes the same params object to both callbacks.
97
+ params.subgraphID = resolved.id;
98
+ }
99
+ const id = params.subgraphID;
62
100
  const subgraph = await getWorkspaceSubgraph(client, {
63
101
  workspaceID: params.workspaceID,
64
- subgraphID: params.subgraphID,
102
+ subgraphID: id,
65
103
  });
66
104
  const steps = subgraph?.steps;
67
105
  const memberIDs = Array.isArray(steps) ? steps.filter((s) => typeof s === "string") : [];
68
106
  return {
69
107
  primary: {
70
108
  type: "workspace_subgraph",
71
- id: params.subgraphID,
109
+ id,
72
110
  name: extractEntityName(subgraph),
73
111
  },
74
- affected: memberIDs.map((id) => ({
112
+ affected: memberIDs.map((memberID) => ({
75
113
  type: "member_node",
76
- id: String(id),
114
+ id: String(memberID),
77
115
  note: "reference removed; node itself is not deleted",
78
116
  })),
79
117
  context: { workspaceID: params.workspaceID, memberCount: memberIDs.length },
80
118
  };
81
119
  },
82
120
  confirmMessage: (params, preview) => {
121
+ const resolvedID = preview?.primary.id ?? params.subgraphID ?? params.subgraphName ?? "unknown";
83
122
  const label = preview?.primary.name
84
- ? `"${preview.primary.name}" (${params.subgraphID})`
85
- : `"${params.subgraphID}"`;
123
+ ? `"${preview.primary.name}" (${resolvedID})`
124
+ : `"${resolvedID}"`;
86
125
  return `This will permanently delete subgraph ${label} from workspace "${params.workspaceID}". Member nodes will NOT be deleted.`;
87
126
  },
88
- }, deleteWorkspaceSubgraph),
127
+ }, async (client, params) => deleteSubgraphByID(client, {
128
+ workspaceID: params.workspaceID,
129
+ subgraphID: params.subgraphID,
130
+ })),
89
131
  ];
90
132
  }
91
133
  //# sourceMappingURL=subgraphs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../src/mcp/subgraphs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subgraphs.js","sourceRoot":"","sources":["../../src/mcp/subgraphs.ts"],"names":[],"mappings":"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"}
@@ -94,3 +94,4 @@ When creating pipeline nodes, choose the node type based on the actual purpose o
94
94
  | Using Dimension/Fact for GROUP BY | GROUP BY is a transform, not a dimensional model | Use Stage or Work |
95
95
  | Skipping `plan_pipeline` and guessing "Stage" | May miss better options or select an inappropriate type | Always call `plan_pipeline` with `repoPath` |
96
96
  | Using Incremental Load for small tables | Incremental overhead isn't worth it for fast full refreshes | Use Stage with full refresh |
97
+ | Picking Persistent Stage (PSTG) because the user said "staging" | PSTG is for CDC / SCD / change tracking — not general staging. The short name `PSTG` is a false friend for `STG`. | Use Stage (STG) for general staging. Only use Persistent Stage if the human explicitly asks for CDC, change tracking, SCD, historical snapshots, or names Persistent Stage / PSTG directly. |
@@ -0,0 +1,23 @@
1
+ export type CachedSubgraph = {
2
+ workspaceID: string;
3
+ id: string;
4
+ name: string;
5
+ steps: string[];
6
+ updatedAt: string;
7
+ };
8
+ /**
9
+ * Best-effort cache write. A failure (permissions, disk full, concurrent writer)
10
+ * must never abort a successful API mutation — the subgraph already exists on
11
+ * the server, the cache is just a convenience lookup that will be refilled by
12
+ * the next resolve call.
13
+ */
14
+ export declare function saveSubgraphToCache(entry: Omit<CachedSubgraph, "updatedAt">, baseDir?: string): void;
15
+ export declare function findSubgraphInCache(params: {
16
+ workspaceID: string;
17
+ name: string;
18
+ }, baseDir?: string): CachedSubgraph | null;
19
+ export declare function removeSubgraphFromCache(params: {
20
+ workspaceID: string;
21
+ id: string;
22
+ }, baseDir?: string): void;
23
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/services/subgraphs/cache.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAuCF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACxC,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAcN;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,GAAG,IAAI,CAMvB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAcN"}
@@ -0,0 +1,67 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { getCacheDir } from "../../cache-dir.js";
4
+ const SUBGRAPH_CACHE_FILE = "subgraphs.json";
5
+ function getCachePath(baseDir) {
6
+ return join(getCacheDir(baseDir), SUBGRAPH_CACHE_FILE);
7
+ }
8
+ function readCacheFile(baseDir) {
9
+ const path = getCachePath(baseDir);
10
+ if (!existsSync(path)) {
11
+ return { version: 1, entries: [] };
12
+ }
13
+ try {
14
+ const raw = readFileSync(path, "utf8");
15
+ const parsed = JSON.parse(raw);
16
+ if (parsed &&
17
+ typeof parsed === "object" &&
18
+ parsed.version === 1 &&
19
+ Array.isArray(parsed.entries)) {
20
+ return parsed;
21
+ }
22
+ }
23
+ catch {
24
+ // Corrupt cache is non-fatal — treat as empty so we can rewrite it.
25
+ }
26
+ return { version: 1, entries: [] };
27
+ }
28
+ function writeCacheFile(file, baseDir) {
29
+ const path = getCachePath(baseDir);
30
+ mkdirSync(dirname(path), { recursive: true });
31
+ writeFileSync(path, JSON.stringify(file, null, 2), "utf8");
32
+ }
33
+ /**
34
+ * Best-effort cache write. A failure (permissions, disk full, concurrent writer)
35
+ * must never abort a successful API mutation — the subgraph already exists on
36
+ * the server, the cache is just a convenience lookup that will be refilled by
37
+ * the next resolve call.
38
+ */
39
+ export function saveSubgraphToCache(entry, baseDir) {
40
+ try {
41
+ const file = readCacheFile(baseDir);
42
+ const filtered = file.entries.filter((e) => !(e.workspaceID === entry.workspaceID && (e.id === entry.id || e.name === entry.name)));
43
+ filtered.push({ ...entry, updatedAt: new Date().toISOString() });
44
+ writeCacheFile({ version: 1, entries: filtered }, baseDir);
45
+ }
46
+ catch (err) {
47
+ process.stderr.write(`[subgraph-cache] Failed to save ${entry.workspaceID}:${entry.name} — ${err instanceof Error ? err.message : String(err)}\n`);
48
+ }
49
+ }
50
+ export function findSubgraphInCache(params, baseDir) {
51
+ const file = readCacheFile(baseDir);
52
+ const match = file.entries.find((e) => e.workspaceID === params.workspaceID && e.name === params.name);
53
+ return match ?? null;
54
+ }
55
+ export function removeSubgraphFromCache(params, baseDir) {
56
+ try {
57
+ const file = readCacheFile(baseDir);
58
+ const filtered = file.entries.filter((e) => !(e.workspaceID === params.workspaceID && e.id === params.id));
59
+ if (filtered.length !== file.entries.length) {
60
+ writeCacheFile({ version: 1, entries: filtered }, baseDir);
61
+ }
62
+ }
63
+ catch (err) {
64
+ process.stderr.write(`[subgraph-cache] Failed to remove ${params.workspaceID}:${params.id} — ${err instanceof Error ? err.message : String(err)}\n`);
65
+ }
66
+ }
67
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/services/subgraphs/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CoalesceClient } from "../../client.js";
2
+ export type SubgraphTarget = {
3
+ workspaceID: string;
4
+ subgraphID?: string;
5
+ subgraphName?: string;
6
+ repoPath?: string;
7
+ };
8
+ export declare function createSubgraphWithCache(client: CoalesceClient, params: {
9
+ workspaceID: string;
10
+ name: string;
11
+ steps: string[];
12
+ }): Promise<Record<string, unknown>>;
13
+ export declare function updateSubgraphResolved(client: CoalesceClient, params: SubgraphTarget & {
14
+ name: string;
15
+ steps: string[];
16
+ }): Promise<Record<string, unknown>>;
17
+ export declare function deleteSubgraphByID(client: CoalesceClient, params: {
18
+ workspaceID: string;
19
+ subgraphID: string;
20
+ }): Promise<Record<string, unknown>>;
21
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/services/subgraphs/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAatD,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAsBF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqBlC;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACzD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBlC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAOlC"}
@@ -0,0 +1,69 @@
1
+ import { isPlainObject } from "../../utils.js";
2
+ import { createWorkspaceSubgraph as apiCreate, updateWorkspaceSubgraph as apiUpdate, deleteWorkspaceSubgraph as apiDelete, } from "../../coalesce/api/subgraphs.js";
3
+ import { removeSubgraphFromCache, saveSubgraphToCache, } from "./cache.js";
4
+ import { resolveSubgraphByName } from "./resolve.js";
5
+ async function resolveTarget(client, target) {
6
+ if (target.subgraphID) {
7
+ return { id: target.subgraphID, resolved: null };
8
+ }
9
+ if (!target.subgraphName) {
10
+ throw new Error("Either subgraphID or subgraphName is required. Pass subgraphID if you know it, or subgraphName (with optional repoPath) to resolve by name.");
11
+ }
12
+ const resolved = await resolveSubgraphByName(client, {
13
+ workspaceID: target.workspaceID,
14
+ name: target.subgraphName,
15
+ repoPath: target.repoPath,
16
+ });
17
+ return { id: resolved.id, resolved };
18
+ }
19
+ export async function createSubgraphWithCache(client, params) {
20
+ const created = await apiCreate(client, params);
21
+ const id = isPlainObject(created) && typeof created.id === "string" && created.id.length > 0
22
+ ? created.id
23
+ : null;
24
+ if (id) {
25
+ saveSubgraphToCache({
26
+ workspaceID: params.workspaceID,
27
+ id,
28
+ name: params.name,
29
+ steps: params.steps,
30
+ });
31
+ }
32
+ return {
33
+ subgraphID: id,
34
+ subgraph: created,
35
+ cached: id !== null,
36
+ message: id
37
+ ? `Subgraph "${params.name}" created with ID ${id}. ID cached for future edits by name.`
38
+ : `Subgraph "${params.name}" created, but no ID was returned by the API — edits by name will not find it.`,
39
+ };
40
+ }
41
+ export async function updateSubgraphResolved(client, params) {
42
+ const { id, resolved } = await resolveTarget(client, params);
43
+ const updated = await apiUpdate(client, {
44
+ workspaceID: params.workspaceID,
45
+ subgraphID: id,
46
+ name: params.name,
47
+ steps: params.steps,
48
+ });
49
+ saveSubgraphToCache({
50
+ workspaceID: params.workspaceID,
51
+ id,
52
+ name: params.name,
53
+ steps: params.steps,
54
+ });
55
+ return {
56
+ subgraphID: id,
57
+ subgraph: updated,
58
+ resolvedFrom: resolved?.source ?? "input",
59
+ };
60
+ }
61
+ export async function deleteSubgraphByID(client, params) {
62
+ const result = await apiDelete(client, params);
63
+ removeSubgraphFromCache({ workspaceID: params.workspaceID, id: params.subgraphID });
64
+ return {
65
+ subgraphID: params.subgraphID,
66
+ result,
67
+ };
68
+ }
69
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../../src/services/subgraphs/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type RepoSubgraph = {
2
+ id: string;
3
+ name: string;
4
+ steps: string[];
5
+ filePath: string;
6
+ };
7
+ /**
8
+ * Scan {repoPath}/subgraphs/ for YAML subgraph definitions.
9
+ * Returns an empty array if the directory does not exist.
10
+ */
11
+ export declare function scanRepoSubgraphs(repoPath: string): RepoSubgraph[];
12
+ export declare function findRepoSubgraphByName(repoPath: string, name: string): RepoSubgraph | null;
13
+ //# sourceMappingURL=repo-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-scan.d.ts","sourceRoot":"","sources":["../../../src/services/subgraphs/repo-scan.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAgCF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAWlE;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,YAAY,GAAG,IAAI,CAErB"}
@@ -0,0 +1,58 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import YAML from "yaml";
4
+ import { isPlainObject } from "../../utils.js";
5
+ function listYamlFiles(dir) {
6
+ const out = [];
7
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
8
+ const full = join(dir, entry.name);
9
+ if (entry.isDirectory()) {
10
+ out.push(...listYamlFiles(full));
11
+ }
12
+ else if (entry.isFile() && /\.ya?ml$/i.test(entry.name)) {
13
+ out.push(full);
14
+ }
15
+ }
16
+ return out;
17
+ }
18
+ function parseSubgraphFile(filePath) {
19
+ let parsed;
20
+ try {
21
+ parsed = YAML.parse(readFileSync(filePath, "utf8"));
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ if (!isPlainObject(parsed))
27
+ return null;
28
+ const id = parsed.id;
29
+ const name = parsed.name;
30
+ if (typeof id !== "string" || id.length === 0)
31
+ return null;
32
+ if (typeof name !== "string")
33
+ return null;
34
+ const rawSteps = Array.isArray(parsed.steps) ? parsed.steps : [];
35
+ const steps = rawSteps.filter((s) => typeof s === "string");
36
+ return { id, name, steps, filePath };
37
+ }
38
+ /**
39
+ * Scan {repoPath}/subgraphs/ for YAML subgraph definitions.
40
+ * Returns an empty array if the directory does not exist.
41
+ */
42
+ export function scanRepoSubgraphs(repoPath) {
43
+ const dir = join(repoPath, "subgraphs");
44
+ if (!existsSync(dir) || !statSync(dir).isDirectory()) {
45
+ return [];
46
+ }
47
+ const out = [];
48
+ for (const filePath of listYamlFiles(dir)) {
49
+ const parsed = parseSubgraphFile(filePath);
50
+ if (parsed)
51
+ out.push(parsed);
52
+ }
53
+ return out;
54
+ }
55
+ export function findRepoSubgraphByName(repoPath, name) {
56
+ return scanRepoSubgraphs(repoPath).find((s) => s.name === name) ?? null;
57
+ }
58
+ //# sourceMappingURL=repo-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-scan.js","sourceRoot":"","sources":["../../../src/services/subgraphs/repo-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { CoalesceClient } from "../../client.js";
2
+ export type ResolvedSubgraph = {
3
+ id: string;
4
+ name: string;
5
+ source: "cache" | "repo" | "workspace";
6
+ };
7
+ /**
8
+ * Resolve a subgraph ID given a name. Order:
9
+ * 1. Local cache (fastest, written on create)
10
+ * 2. Repo {repoPath}/subgraphs/ YAML files
11
+ * 3. Workspace API list_workspace_subgraphs
12
+ *
13
+ * Throws a clear error with candidate names if nothing matches.
14
+ */
15
+ export declare function resolveSubgraphByName(client: CoalesceClient, params: {
16
+ workspaceID: string;
17
+ name: string;
18
+ repoPath?: string;
19
+ }): Promise<ResolvedSubgraph>;
20
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/services/subgraphs/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOtD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;CACxC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE;IACN,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,gBAAgB,CAAC,CAgE3B"}
@@ -0,0 +1,73 @@
1
+ import { isPlainObject } from "../../utils.js";
2
+ import { listWorkspaceSubgraphs } from "../../coalesce/api/subgraphs.js";
3
+ import { resolveOptionalRepoPathInput } from "../repo/path.js";
4
+ import { findSubgraphInCache, saveSubgraphToCache } from "./cache.js";
5
+ import { findRepoSubgraphByName, scanRepoSubgraphs } from "./repo-scan.js";
6
+ /**
7
+ * Resolve a subgraph ID given a name. Order:
8
+ * 1. Local cache (fastest, written on create)
9
+ * 2. Repo {repoPath}/subgraphs/ YAML files
10
+ * 3. Workspace API list_workspace_subgraphs
11
+ *
12
+ * Throws a clear error with candidate names if nothing matches.
13
+ */
14
+ export async function resolveSubgraphByName(client, params) {
15
+ const cached = findSubgraphInCache({
16
+ workspaceID: params.workspaceID,
17
+ name: params.name,
18
+ });
19
+ if (cached) {
20
+ return { id: cached.id, name: cached.name, source: "cache" };
21
+ }
22
+ const repoPath = resolveOptionalRepoPathInput(params.repoPath);
23
+ if (repoPath) {
24
+ const repoMatch = findRepoSubgraphByName(repoPath, params.name);
25
+ if (repoMatch) {
26
+ saveSubgraphToCache({
27
+ workspaceID: params.workspaceID,
28
+ id: repoMatch.id,
29
+ name: repoMatch.name,
30
+ steps: repoMatch.steps,
31
+ });
32
+ return { id: repoMatch.id, name: repoMatch.name, source: "repo" };
33
+ }
34
+ }
35
+ const listResponse = await listWorkspaceSubgraphs(client, {
36
+ workspaceID: params.workspaceID,
37
+ });
38
+ const data = isPlainObject(listResponse) && Array.isArray(listResponse.data)
39
+ ? listResponse.data
40
+ : [];
41
+ const matches = data
42
+ .filter(isPlainObject)
43
+ .map((entry) => ({
44
+ id: typeof entry.id === "string" ? entry.id : "",
45
+ name: typeof entry.name === "string" ? entry.name : "",
46
+ steps: Array.isArray(entry.steps)
47
+ ? entry.steps.filter((s) => typeof s === "string")
48
+ : [],
49
+ }))
50
+ .filter((entry) => entry.id.length > 0 && entry.name.length > 0);
51
+ const workspaceMatch = matches.find((m) => m.name === params.name);
52
+ if (workspaceMatch) {
53
+ saveSubgraphToCache({
54
+ workspaceID: params.workspaceID,
55
+ id: workspaceMatch.id,
56
+ name: workspaceMatch.name,
57
+ steps: workspaceMatch.steps,
58
+ });
59
+ return { id: workspaceMatch.id, name: workspaceMatch.name, source: "workspace" };
60
+ }
61
+ const availableNames = matches.map((m) => m.name);
62
+ const repoNames = repoPath ? scanRepoSubgraphs(repoPath).map((s) => s.name) : [];
63
+ const combined = Array.from(new Set([...availableNames, ...repoNames]));
64
+ const listing = combined.length > 0
65
+ ? `Available: ${combined.slice(0, 20).join(", ")}${combined.length > 20 ? ", ..." : ""}`
66
+ : "No subgraphs found in workspace or repo.";
67
+ const searched = repoPath
68
+ ? "Searched local cache, repo subgraphs/ folder, and workspace."
69
+ : "Searched local cache and workspace. Pass repoPath to also check the repo subgraphs/ folder.";
70
+ throw new Error(`Could not find a subgraph named "${params.name}" in workspace "${params.workspaceID}". ` +
71
+ `${searched} Pass subgraphID directly if you already know it. ${listing}`);
72
+ }
73
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/services/subgraphs/resolve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coalesce-transform-mcp",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "mcpName": "io.github.jessemarshall/coalesce-transform",
5
5
  "description": "MCP server for the Coalesce Transform API; run tools support Snowflake Key Pair and PAT auth",
6
6
  "main": "dist/index.js",