@dataworks-technology/cli 1.1.0 → 1.3.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.
Files changed (100) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +16 -0
  3. package/README.md +174 -12
  4. package/bin/mcp.js +9 -0
  5. package/bin/postinstall.js +23 -0
  6. package/dist/commands/agents/install.d.ts +17 -0
  7. package/dist/commands/agents/install.d.ts.map +1 -0
  8. package/dist/commands/agents/install.js +57 -0
  9. package/dist/commands/agents/install.js.map +1 -0
  10. package/dist/commands/agents/reminder.d.ts +16 -0
  11. package/dist/commands/agents/reminder.d.ts.map +1 -0
  12. package/dist/commands/agents/reminder.js +45 -0
  13. package/dist/commands/agents/reminder.js.map +1 -0
  14. package/dist/commands/auth/login.d.ts.map +1 -1
  15. package/dist/commands/auth/login.js +1 -1
  16. package/dist/commands/auth/login.js.map +1 -1
  17. package/dist/commands/commands.d.ts.map +1 -1
  18. package/dist/commands/commands.js +4 -0
  19. package/dist/commands/commands.js.map +1 -1
  20. package/dist/commands/events/subscribe.d.ts +7 -1
  21. package/dist/commands/events/subscribe.d.ts.map +1 -1
  22. package/dist/commands/events/subscribe.js +56 -3
  23. package/dist/commands/events/subscribe.js.map +1 -1
  24. package/dist/commands/ingest.d.ts +31 -3
  25. package/dist/commands/ingest.d.ts.map +1 -1
  26. package/dist/commands/ingest.js +69 -9
  27. package/dist/commands/ingest.js.map +1 -1
  28. package/dist/commands/tenant/list.d.ts +13 -0
  29. package/dist/commands/tenant/list.d.ts.map +1 -0
  30. package/dist/commands/tenant/list.js +45 -0
  31. package/dist/commands/tenant/list.js.map +1 -0
  32. package/dist/commands/tenant/select.d.ts.map +1 -1
  33. package/dist/commands/tenant/select.js +12 -5
  34. package/dist/commands/tenant/select.js.map +1 -1
  35. package/dist/generated/operations.d.ts +46 -4
  36. package/dist/generated/operations.d.ts.map +1 -1
  37. package/dist/generated/operations.js +39 -11
  38. package/dist/generated/operations.js.map +1 -1
  39. package/dist/help.js +4 -4
  40. package/dist/help.js.map +1 -1
  41. package/dist/lib/agent-install.d.ts +24 -0
  42. package/dist/lib/agent-install.d.ts.map +1 -0
  43. package/dist/lib/agent-install.js +196 -0
  44. package/dist/lib/agent-install.js.map +1 -0
  45. package/dist/lib/agent-reminder.d.ts +17 -0
  46. package/dist/lib/agent-reminder.d.ts.map +1 -0
  47. package/dist/lib/agent-reminder.js +81 -0
  48. package/dist/lib/agent-reminder.js.map +1 -0
  49. package/dist/lib/browser-auth.d.ts +1 -0
  50. package/dist/lib/browser-auth.d.ts.map +1 -1
  51. package/dist/lib/browser-auth.js +58 -4
  52. package/dist/lib/browser-auth.js.map +1 -1
  53. package/dist/lib/cognito.d.ts +2 -0
  54. package/dist/lib/cognito.d.ts.map +1 -1
  55. package/dist/lib/cognito.js +38 -9
  56. package/dist/lib/cognito.js.map +1 -1
  57. package/dist/lib/command.d.ts +1 -0
  58. package/dist/lib/command.d.ts.map +1 -1
  59. package/dist/lib/command.js +5 -0
  60. package/dist/lib/command.js.map +1 -1
  61. package/dist/lib/http-transport.d.ts.map +1 -1
  62. package/dist/lib/http-transport.js +31 -8
  63. package/dist/lib/http-transport.js.map +1 -1
  64. package/dist/lib/operation-command.d.ts.map +1 -1
  65. package/dist/lib/operation-command.js +15 -3
  66. package/dist/lib/operation-command.js.map +1 -1
  67. package/dist/lib/operation-types.d.ts +4 -0
  68. package/dist/lib/operation-types.d.ts.map +1 -1
  69. package/dist/lib/output.d.ts.map +1 -1
  70. package/dist/lib/output.js +47 -6
  71. package/dist/lib/output.js.map +1 -1
  72. package/dist/lib/query-metrics.d.ts +72 -0
  73. package/dist/lib/query-metrics.d.ts.map +1 -0
  74. package/dist/lib/query-metrics.js +383 -0
  75. package/dist/lib/query-metrics.js.map +1 -0
  76. package/dist/lib/raw-graphql-command.d.ts.map +1 -1
  77. package/dist/lib/raw-graphql-command.js +4 -2
  78. package/dist/lib/raw-graphql-command.js.map +1 -1
  79. package/dist/lib/tenants.d.ts +1 -1
  80. package/dist/lib/tenants.d.ts.map +1 -1
  81. package/dist/lib/tenants.js +5 -1
  82. package/dist/lib/tenants.js.map +1 -1
  83. package/dist/mcp/main.d.ts +2 -0
  84. package/dist/mcp/main.d.ts.map +1 -0
  85. package/dist/mcp/main.js +7 -0
  86. package/dist/mcp/main.js.map +1 -0
  87. package/dist/mcp/server.d.ts +85 -0
  88. package/dist/mcp/server.d.ts.map +1 -0
  89. package/dist/mcp/server.js +235 -0
  90. package/dist/mcp/server.js.map +1 -0
  91. package/oclif.manifest.json +1026 -831
  92. package/package.json +24 -4
  93. package/plugins/dataworks/.claude-plugin/plugin.json +17 -0
  94. package/plugins/dataworks/.codex-plugin/plugin.json +37 -0
  95. package/plugins/dataworks/.mcp.json +8 -0
  96. package/plugins/dataworks/skills/query-dataworks-metrics/SKILL.md +48 -0
  97. package/plugins/dataworks/skills/query-dataworks-metrics/agents/openai.yaml +13 -0
  98. package/schema/operation-overrides.json +49 -0
  99. package/skills/dataworks-cli/SKILL.md +129 -15
  100. package/skills/dataworks-cli/agents/openai.yaml +4 -0
@@ -0,0 +1,383 @@
1
+ import { executeGraphql } from "./graphql-transport.js";
2
+ import { CliError, toCliError } from "./errors.js";
3
+ import { requireSession } from "./session.js";
4
+ const listAthletesDocument = `query listAthletes($limit: Int, $nextToken: String, $tenant: String!) {
5
+ listAthletes(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
6
+ items { publicId externalId forename surname name nameShort }
7
+ nextToken
8
+ }
9
+ }`;
10
+ const getAthleteDocument = `query getAthlete($publicId: ID!, $tenant: String!) {
11
+ getAthlete(publicId: $publicId, tenant: $tenant) {
12
+ publicId externalId forename surname name nameShort
13
+ }
14
+ }`;
15
+ const executeDataExplorerDocument = `query executeDataExplorerQuery($input: DataExplorerQueryInput!, $tenant: String!) {
16
+ executeDataExplorerQuery(input: $input, tenant: $tenant) {
17
+ columns queryExecutionId queryTimeMs rowCount rows status
18
+ }
19
+ }`;
20
+ const knownMetrics = {
21
+ gps: { canonical: "latlong", category: "METRICS_TYPE_A", unit: null },
22
+ gpsposition: { canonical: "latlong", category: "METRICS_TYPE_A", unit: null },
23
+ heartrate: { canonical: "heartrate", category: "METRICS_TYPE_C", unit: "bpm" },
24
+ bpm: { canonical: "heartrate", category: "METRICS_TYPE_C", unit: "bpm" },
25
+ latlong: { canonical: "latlong", category: "METRICS_TYPE_A", unit: null },
26
+ location: { canonical: "latlong", category: "METRICS_TYPE_A", unit: null },
27
+ position: { canonical: "latlong", category: "METRICS_TYPE_A", unit: null },
28
+ timing: { canonical: "timing", category: "METRICS_TYPE_A", unit: null },
29
+ speed: { canonical: "speed", category: "METRICS_TYPE_B", unit: null },
30
+ altitude: { canonical: "altitude", category: "METRICS_TYPE_B", unit: null },
31
+ cadence: { canonical: "cadence", category: "METRICS_TYPE_B", unit: null },
32
+ power: { canonical: "power", category: "METRICS_TYPE_C", unit: null },
33
+ };
34
+ const defaultDependencies = {
35
+ graphql: executeGraphql,
36
+ session: requireSession,
37
+ sleep: (milliseconds, signal) => new Promise((resolve, reject) => {
38
+ if (signal?.aborted) {
39
+ reject(new CliError("Metric query cancelled", "QUERY_CANCELLED", 4));
40
+ return;
41
+ }
42
+ const timeout = setTimeout(resolve, milliseconds);
43
+ signal?.addEventListener("abort", () => {
44
+ clearTimeout(timeout);
45
+ reject(new CliError("Metric query cancelled", "QUERY_CANCELLED", 4));
46
+ }, { once: true });
47
+ }),
48
+ now: Date.now,
49
+ };
50
+ function compact(value) {
51
+ return value
52
+ .trim()
53
+ .toLocaleLowerCase()
54
+ .replaceAll(/[^a-z0-9]/g, "");
55
+ }
56
+ function displayName(athlete) {
57
+ const full = [athlete.forename, athlete.surname]
58
+ .filter((part) => Boolean(part?.trim()))
59
+ .join(" ");
60
+ return athlete.name?.trim() || full || athlete.nameShort?.trim() || null;
61
+ }
62
+ function candidate(athlete) {
63
+ return { publicId: athlete.publicId, name: displayName(athlete) };
64
+ }
65
+ function searchableNames(athlete) {
66
+ return [
67
+ athlete.name,
68
+ [athlete.forename, athlete.surname].filter(Boolean).join(" "),
69
+ athlete.nameShort,
70
+ athlete.externalId,
71
+ ]
72
+ .filter((value) => Boolean(value?.trim()))
73
+ .map(compact);
74
+ }
75
+ async function listAllAthletes(tenantId, dependencies) {
76
+ const athletes = [];
77
+ let nextToken;
78
+ let pages = 0;
79
+ do {
80
+ const result = await dependencies.graphql(listAthletesDocument, {
81
+ limit: 100,
82
+ nextToken,
83
+ tenant: tenantId,
84
+ });
85
+ const connection = result?.listAthletes;
86
+ athletes.push(...(connection?.items ?? []));
87
+ nextToken = connection?.nextToken;
88
+ pages += 1;
89
+ if (pages >= 100 && nextToken) {
90
+ throw new CliError("Athlete lookup exceeded 10,000 records; use athlete_id instead", "ATHLETE_LOOKUP_LIMIT");
91
+ }
92
+ } while (nextToken);
93
+ return athletes;
94
+ }
95
+ async function resolveAthlete(input, tenantId, dependencies) {
96
+ if (input.athleteId) {
97
+ const result = await dependencies.graphql(getAthleteDocument, {
98
+ publicId: input.athleteId,
99
+ tenant: tenantId,
100
+ });
101
+ if (!result?.getAthlete) {
102
+ throw new CliError(`No athlete found with public ID ${input.athleteId}`, "ATHLETE_NOT_FOUND", 1, { athleteId: input.athleteId });
103
+ }
104
+ return { athlete: result.getAthlete, matchedBy: "public_id" };
105
+ }
106
+ const requested = input.athleteName?.trim();
107
+ if (!requested) {
108
+ throw new CliError("Provide exactly one of athlete_id or athlete_name", "ATHLETE_REQUIRED", 2);
109
+ }
110
+ const normalized = compact(requested);
111
+ const athletes = await listAllAthletes(tenantId, dependencies);
112
+ const exact = athletes.filter((athlete) => searchableNames(athlete).includes(normalized));
113
+ const matches = exact.length > 0
114
+ ? exact
115
+ : athletes.filter((athlete) => searchableNames(athlete).some((name) => name.includes(normalized)));
116
+ if (matches.length === 0) {
117
+ throw new CliError(`No athlete matched “${requested}”`, "ATHLETE_NOT_FOUND", 1, {
118
+ athleteName: requested,
119
+ });
120
+ }
121
+ if (matches.length > 1) {
122
+ throw new CliError(`Athlete name “${requested}” is ambiguous; retry with athlete_id`, "ATHLETE_AMBIGUOUS", 2, { candidates: matches.slice(0, 20).map(candidate) });
123
+ }
124
+ return {
125
+ athlete: matches[0],
126
+ matchedBy: exact.length === 1 ? "name" : "partial_name",
127
+ };
128
+ }
129
+ function resolveMetric(input) {
130
+ const requested = input.metric.trim();
131
+ if (!requested)
132
+ throw new CliError("Metric cannot be empty", "METRIC_REQUIRED", 2);
133
+ const known = knownMetrics[compact(requested)];
134
+ if (known) {
135
+ if (input.metricCategory && input.metricCategory !== known.category) {
136
+ throw new CliError(`${requested} belongs to ${known.category}, not ${input.metricCategory}`, "METRIC_CATEGORY_CONFLICT", 2, { canonical: known.canonical, expectedCategory: known.category });
137
+ }
138
+ return { requested, ...known };
139
+ }
140
+ if (!input.metricCategory) {
141
+ throw new CliError(`Metric “${requested}” is not a known alias; provide metric_category explicitly`, "METRIC_CATEGORY_REQUIRED", 2, {
142
+ supportedAliases: Object.keys(knownMetrics).sort(),
143
+ categories: ["METRICS_TYPE_A", "METRICS_TYPE_B", "METRICS_TYPE_C"],
144
+ });
145
+ }
146
+ return {
147
+ requested,
148
+ canonical: requested,
149
+ category: input.metricCategory,
150
+ unit: null,
151
+ };
152
+ }
153
+ function isoFilter(value, field) {
154
+ const milliseconds = Date.parse(value);
155
+ if (!Number.isFinite(milliseconds)) {
156
+ throw new CliError(`${field} must be an ISO 8601 date-time`, "TIME_INVALID", 2, {
157
+ field,
158
+ value,
159
+ });
160
+ }
161
+ return {
162
+ iso: new Date(milliseconds).toISOString(),
163
+ timestamp: Math.floor(milliseconds / 1000),
164
+ };
165
+ }
166
+ function decodeJson(value) {
167
+ let decoded = value;
168
+ for (let depth = 0; depth < 5 && typeof decoded === "string"; depth += 1) {
169
+ const trimmed = decoded.trim();
170
+ if (!/^[\[{\"]/.test(trimmed))
171
+ break;
172
+ try {
173
+ decoded = JSON.parse(trimmed);
174
+ }
175
+ catch {
176
+ break;
177
+ }
178
+ }
179
+ return decoded;
180
+ }
181
+ function rowsFrom(result) {
182
+ const decoded = decodeJson(result.rows);
183
+ if (!Array.isArray(decoded)) {
184
+ throw new CliError("Data Explorer rows were not a JSON array", "QUERY_RESPONSE_INVALID", 1);
185
+ }
186
+ return decoded.map((row) => {
187
+ if (Array.isArray(row)) {
188
+ return Object.fromEntries(result.columns.map((column, index) => [column, row[index] ?? null]));
189
+ }
190
+ if (row && typeof row === "object")
191
+ return row;
192
+ throw new CliError("Data Explorer returned a row that was not an object or array", "QUERY_RESPONSE_INVALID", 1);
193
+ });
194
+ }
195
+ function optionalString(value) {
196
+ if (typeof value === "string")
197
+ return value;
198
+ if (typeof value === "number")
199
+ return String(value);
200
+ return null;
201
+ }
202
+ function timestampIso(value) {
203
+ const numeric = typeof value === "number" ? value : Number(value);
204
+ if (!Number.isFinite(numeric))
205
+ return null;
206
+ const milliseconds = numeric > 10_000_000_000 ? numeric : numeric * 1000;
207
+ const date = new Date(milliseconds);
208
+ return Number.isNaN(date.valueOf()) ? null : date.toISOString();
209
+ }
210
+ function positionFrom(value) {
211
+ if (typeof value !== "string")
212
+ return null;
213
+ const [latitudeText, longitudeText, ...rest] = value.split(":");
214
+ if (rest.length > 0 || !latitudeText || !longitudeText)
215
+ return null;
216
+ const latitude = Number(latitudeText);
217
+ const longitude = Number(longitudeText);
218
+ if (!Number.isFinite(latitude) ||
219
+ !Number.isFinite(longitude) ||
220
+ latitude < -90 ||
221
+ latitude > 90 ||
222
+ longitude < -180 ||
223
+ longitude > 180)
224
+ return null;
225
+ return { latitude, longitude };
226
+ }
227
+ function parsedValue(value, canonicalMetric) {
228
+ const decoded = decodeJson(value);
229
+ if (typeof decoded === "undefined")
230
+ return null;
231
+ if (canonicalMetric === "latlong")
232
+ return decoded;
233
+ if (typeof decoded === "string" && decoded.trim() !== "") {
234
+ const numeric = Number(decoded);
235
+ if (Number.isFinite(numeric))
236
+ return numeric;
237
+ }
238
+ return decoded;
239
+ }
240
+ function normalizedRow(row, metric) {
241
+ const timestamp = row.timestamp;
242
+ const rawValue = row.current;
243
+ return {
244
+ timestamp: typeof timestamp === "string" || typeof timestamp === "number" ? timestamp : null,
245
+ timestampIso: timestampIso(timestamp),
246
+ athleteId: optionalString(row.athletepublicid),
247
+ metric: optionalString(row.metric) ?? metric.canonical,
248
+ value: parsedValue(rawValue, metric.canonical),
249
+ unit: metric.unit,
250
+ position: metric.canonical === "latlong" ? positionFrom(rawValue) : null,
251
+ eventId: optionalString(row.eventpublicid),
252
+ datasetDatasourceId: optionalString(row.datasetdatasourcepublicid),
253
+ };
254
+ }
255
+ function ensureSingleAthleteSelector(input) {
256
+ const count = Number(Boolean(input.athleteId?.trim())) +
257
+ Number(Boolean(input.athleteName?.trim()));
258
+ if (count !== 1) {
259
+ throw new CliError("Provide exactly one of athlete_id or athlete_name", "ATHLETE_SELECTOR_INVALID", 2);
260
+ }
261
+ }
262
+ async function executeAndPoll(queryInput, tenantId, timeoutMs, dependencies, signal) {
263
+ const deadline = dependencies.now() + timeoutMs;
264
+ let delay = 300;
265
+ let input = queryInput;
266
+ while (true) {
267
+ if (signal?.aborted)
268
+ throw new CliError("Metric query cancelled", "QUERY_CANCELLED", 4);
269
+ const response = await dependencies.graphql(executeDataExplorerDocument, { input, tenant: tenantId });
270
+ const result = response?.executeDataExplorerQuery;
271
+ if (!result) {
272
+ throw new CliError("Data Explorer returned no query result", "QUERY_RESPONSE_INVALID");
273
+ }
274
+ const status = result.status?.toUpperCase() ?? "COMPLETED";
275
+ if (status !== "RUNNING") {
276
+ if (["FAILED", "ERROR", "CANCELLED"].includes(status)) {
277
+ throw new CliError(`Data Explorer query ended with status ${status}`, "QUERY_FAILED", 1, { queryExecutionId: result.queryExecutionId ?? null, status });
278
+ }
279
+ return result;
280
+ }
281
+ if (!result.queryExecutionId) {
282
+ throw new CliError("Data Explorer returned RUNNING without a query execution ID", "QUERY_RESPONSE_INVALID");
283
+ }
284
+ if (dependencies.now() >= deadline) {
285
+ throw new CliError(`Metric query did not finish within ${timeoutMs}ms`, "QUERY_TIMEOUT", 1, { queryExecutionId: result.queryExecutionId, timeoutMs });
286
+ }
287
+ await dependencies.sleep(delay, signal);
288
+ delay = Math.min(Math.round(delay * 1.5), 2_000);
289
+ input = { ...queryInput, queryExecutionId: result.queryExecutionId };
290
+ }
291
+ }
292
+ export async function queryMetrics(input, options = {}) {
293
+ const dependencies = { ...defaultDependencies, ...options.dependencies };
294
+ try {
295
+ ensureSingleAthleteSelector(input);
296
+ const session = await dependencies.session();
297
+ const tenantId = input.tenantId?.trim() || session.tenant;
298
+ if (!tenantId) {
299
+ throw new CliError("No tenant selected; run `dw tenant select` or provide tenant_id", "TENANT_REQUIRED", 2);
300
+ }
301
+ const limit = input.limit ?? 30;
302
+ if (!Number.isInteger(limit) || limit < 1 || limit > 500) {
303
+ throw new CliError("limit must be an integer from 1 to 500", "LIMIT_INVALID", 2);
304
+ }
305
+ const timeoutMs = input.timeoutMs ?? 30_000;
306
+ if (!Number.isInteger(timeoutMs) || timeoutMs < 1_000 || timeoutMs > 120_000) {
307
+ throw new CliError("timeout_ms must be an integer from 1000 to 120000", "TIMEOUT_INVALID", 2);
308
+ }
309
+ const metric = resolveMetric(input);
310
+ const athlete = await resolveAthlete(input, tenantId, dependencies);
311
+ const from = input.from ? isoFilter(input.from, "from") : null;
312
+ const to = input.to ? isoFilter(input.to, "to") : null;
313
+ if (from && to && from.timestamp > to.timestamp) {
314
+ throw new CliError("from must not be later than to", "TIME_RANGE_INVALID", 2);
315
+ }
316
+ const rules = [
317
+ { field: "metric", operator: "in", value: metric.canonical },
318
+ {
319
+ field: "athletepublicid",
320
+ operator: "in",
321
+ value: athlete.athlete.publicId,
322
+ },
323
+ ];
324
+ if (input.eventId)
325
+ rules.push({ field: "eventpublicid", operator: "in", value: input.eventId });
326
+ if (input.datasetDatasourceId)
327
+ rules.push({
328
+ field: "datasetdatasourcepublicid",
329
+ operator: "in",
330
+ value: input.datasetDatasourceId,
331
+ });
332
+ if (from)
333
+ rules.push({ field: "timestamp", operator: ">=", value: String(from.timestamp) });
334
+ if (to)
335
+ rules.push({ field: "timestamp", operator: "<=", value: String(to.timestamp) });
336
+ const order = input.order ?? "newest";
337
+ const queryInput = {
338
+ columns: [
339
+ "timestamp",
340
+ "datasetdatasourcepublicid",
341
+ "eventpublicid",
342
+ "athletepublicid",
343
+ "metric",
344
+ "current",
345
+ ],
346
+ metricCategory: metric.category,
347
+ filterRules: JSON.stringify({ combinator: "and", rules }),
348
+ limit,
349
+ orderBy: "timestamp",
350
+ orderDirection: order === "newest" ? "DESC" : "ASC",
351
+ };
352
+ const result = await executeAndPoll(queryInput, tenantId, timeoutMs, dependencies, options.signal);
353
+ const rows = rowsFrom(result).map((row) => normalizedRow(row, metric));
354
+ return {
355
+ environment: session.environment,
356
+ tenantId,
357
+ athlete: {
358
+ publicId: athlete.athlete.publicId,
359
+ name: displayName(athlete.athlete),
360
+ matchedBy: athlete.matchedBy,
361
+ },
362
+ metric,
363
+ filters: {
364
+ eventId: input.eventId ?? null,
365
+ datasetDatasourceId: input.datasetDatasourceId ?? null,
366
+ from: from?.iso ?? null,
367
+ to: to?.iso ?? null,
368
+ },
369
+ order,
370
+ limit,
371
+ count: rows.length,
372
+ rowCount: result.rowCount,
373
+ status: result.status ?? "COMPLETED",
374
+ queryExecutionId: result.queryExecutionId ?? null,
375
+ queryTimeMs: result.queryTimeMs ?? null,
376
+ rows,
377
+ };
378
+ }
379
+ catch (error) {
380
+ throw toCliError(error);
381
+ }
382
+ }
383
+ //# sourceMappingURL=query-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-metrics.js","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"raw-graphql-command.d.ts","sourceRoot":"","sources":["../../src/lib/raw-graphql-command.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,GAC1C,OAAO,gBAAgB,CAmDzB"}
1
+ {"version":3,"file":"raw-graphql-command.d.ts","sourceRoot":"","sources":["../../src/lib/raw-graphql-command.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,GAC1C,OAAO,gBAAgB,CAsDzB"}
@@ -15,7 +15,9 @@ export function createRawGraphqlCommand(kind) {
15
15
  description: "GraphQL text, @file, or - for stdin",
16
16
  }),
17
17
  "dry-run": Flags.boolean({ description: "Render a mutation without sending it" }),
18
- json: Flags.boolean({ description: "Emit stable JSON output" }),
18
+ json: Flags.boolean({
19
+ description: kind === "subscription" ? "Emit NDJSON events" : "Emit stable JSON output",
20
+ }),
19
21
  variables: Flags.string({ description: "Variables JSON, @file, or - for stdin" }),
20
22
  yes: Flags.boolean({ char: "y", description: "Confirm mutation execution" }),
21
23
  };
@@ -37,7 +39,7 @@ export function createRawGraphqlCommand(kind) {
37
39
  }
38
40
  }
39
41
  if (kind === "subscription") {
40
- await subscribeGraphql(document, variables, (data) => writeResult(data, { stream: true }));
42
+ await subscribeGraphql(document, variables, (data) => writeResult(data, { json: flags.json, stream: true }));
41
43
  return;
42
44
  }
43
45
  writeResult(await executeGraphql(document, variables), { json: flags.json });
@@ -1 +1 @@
1
- {"version":3,"file":"raw-graphql-command.js","sourceRoot":"","sources":["../../src/lib/raw-graphql-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raw-graphql-command.js","sourceRoot":"","sources":["../../src/lib/raw-graphql-command.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@ export interface AvailableTenant {
2
2
  id: string;
3
3
  name: string | null;
4
4
  }
5
- export declare function listAvailableTenants(): Promise<AvailableTenant[]>;
5
+ export declare function listAvailableTenants(authorizedTenantIds?: readonly string[]): Promise<AvailableTenant[]>;
6
6
  //# sourceMappingURL=tenants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/lib/tenants.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAyBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAuBvE"}
1
+ {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/lib/tenants.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAyBD,wBAAsB,oBAAoB,CACxC,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,OAAO,CAAC,eAAe,EAAE,CAAC,CA0B5B"}
@@ -13,8 +13,12 @@ function compareTenants(left, right) {
13
13
  return ((left.name ?? left.id).localeCompare(right.name ?? right.id) ||
14
14
  left.id.localeCompare(right.id));
15
15
  }
16
- export async function listAvailableTenants() {
16
+ export async function listAvailableTenants(authorizedTenantIds = []) {
17
17
  const tenants = new Map();
18
+ for (const id of authorizedTenantIds) {
19
+ if (id)
20
+ tenants.set(id, { id, name: null });
21
+ }
18
22
  const seenTokens = new Set();
19
23
  let nextToken;
20
24
  do {
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/lib/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,MAAM,mBAAmB,GAAG;;;;;EAK1B,CAAC;AAEH,SAAS,cAAc,CAAC,IAAqB,EAAE,KAAsB;IACnE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,SAA6B,CAAC;IAElC,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAoB,mBAAmB,EAAE;YACxE,SAAS;SACV,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACzB,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;aACpE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC;QAC3C,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM;QAClD,IAAI,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,QAAQ,SAAS,EAAE;IAEpB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/lib/tenants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,MAAM,mBAAmB,GAAG;;;;;EAK1B,CAAC;AAEH,SAAS,cAAc,CAAC,IAAqB,EAAE,KAAsB;IACnE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,sBAAyC,EAAE;IAE3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,KAAK,MAAM,EAAE,IAAI,mBAAmB,EAAE,CAAC;QACrC,IAAI,EAAE;YAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,SAA6B,CAAC;IAElC,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAoB,mBAAmB,EAAE;YACxE,SAAS;SACV,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACzB,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;aACpE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC;QAC3C,SAAS,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM;QAClD,IAAI,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,QAAQ,SAAS,EAAE;IAEpB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runDataworksMcpServer(): Promise<void>;
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/mcp/main.ts"],"names":[],"mappings":"AAGA,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3D"}
@@ -0,0 +1,7 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { createDataworksMcpServer } from "./server.js";
3
+ export async function runDataworksMcpServer() {
4
+ const server = createDataworksMcpServer();
5
+ await server.connect(new StdioServerTransport());
6
+ }
7
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/mcp/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC1C,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import * as z from "zod/v4";
3
+ import { type QueryMetricsInput, type QueryMetricsOutput } from "../lib/query-metrics.js";
4
+ export type QueryMetricsHandler = (input: QueryMetricsInput, options?: {
5
+ signal?: AbortSignal;
6
+ }) => Promise<QueryMetricsOutput>;
7
+ export declare const queryMetricsInputSchema: z.ZodObject<{
8
+ athlete_id: z.ZodOptional<z.ZodString>;
9
+ athlete_name: z.ZodOptional<z.ZodString>;
10
+ metric: z.ZodString;
11
+ metric_category: z.ZodOptional<z.ZodEnum<{
12
+ METRICS_TYPE_A: "METRICS_TYPE_A";
13
+ METRICS_TYPE_B: "METRICS_TYPE_B";
14
+ METRICS_TYPE_C: "METRICS_TYPE_C";
15
+ }>>;
16
+ limit: z.ZodDefault<z.ZodNumber>;
17
+ order: z.ZodDefault<z.ZodEnum<{
18
+ newest: "newest";
19
+ oldest: "oldest";
20
+ }>>;
21
+ from: z.ZodOptional<z.ZodString>;
22
+ to: z.ZodOptional<z.ZodString>;
23
+ event_id: z.ZodOptional<z.ZodString>;
24
+ dataset_datasource_id: z.ZodOptional<z.ZodString>;
25
+ tenant_id: z.ZodOptional<z.ZodString>;
26
+ timeout_ms: z.ZodDefault<z.ZodNumber>;
27
+ }, z.core.$strip>;
28
+ export declare const queryMetricsOutputSchema: z.ZodObject<{
29
+ environment: z.ZodEnum<{
30
+ uat: "uat";
31
+ live: "live";
32
+ }>;
33
+ tenant_id: z.ZodString;
34
+ athlete: z.ZodObject<{
35
+ public_id: z.ZodString;
36
+ name: z.ZodNullable<z.ZodString>;
37
+ matched_by: z.ZodEnum<{
38
+ name: "name";
39
+ public_id: "public_id";
40
+ partial_name: "partial_name";
41
+ }>;
42
+ }, z.core.$strip>;
43
+ metric: z.ZodObject<{
44
+ requested: z.ZodString;
45
+ canonical: z.ZodString;
46
+ category: z.ZodEnum<{
47
+ METRICS_TYPE_A: "METRICS_TYPE_A";
48
+ METRICS_TYPE_B: "METRICS_TYPE_B";
49
+ METRICS_TYPE_C: "METRICS_TYPE_C";
50
+ }>;
51
+ unit: z.ZodNullable<z.ZodString>;
52
+ }, z.core.$strip>;
53
+ filters: z.ZodObject<{
54
+ event_id: z.ZodNullable<z.ZodString>;
55
+ dataset_datasource_id: z.ZodNullable<z.ZodString>;
56
+ from: z.ZodNullable<z.ZodString>;
57
+ to: z.ZodNullable<z.ZodString>;
58
+ }, z.core.$strip>;
59
+ order: z.ZodEnum<{
60
+ newest: "newest";
61
+ oldest: "oldest";
62
+ }>;
63
+ limit: z.ZodNumber;
64
+ count: z.ZodNumber;
65
+ row_count: z.ZodNumber;
66
+ status: z.ZodString;
67
+ query_execution_id: z.ZodNullable<z.ZodString>;
68
+ query_time_ms: z.ZodNullable<z.ZodNumber>;
69
+ rows: z.ZodArray<z.ZodObject<{
70
+ timestamp: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
71
+ timestamp_iso: z.ZodNullable<z.ZodString>;
72
+ athlete_id: z.ZodNullable<z.ZodString>;
73
+ metric: z.ZodNullable<z.ZodString>;
74
+ value: z.ZodUnknown;
75
+ unit: z.ZodNullable<z.ZodString>;
76
+ position: z.ZodNullable<z.ZodObject<{
77
+ latitude: z.ZodNumber;
78
+ longitude: z.ZodNumber;
79
+ }, z.core.$strip>>;
80
+ event_id: z.ZodNullable<z.ZodString>;
81
+ dataset_datasource_id: z.ZodNullable<z.ZodString>;
82
+ }, z.core.$strip>>;
83
+ }, z.core.$strip>;
84
+ export declare function createDataworksMcpServer(handler?: QueryMetricsHandler): McpServer;
85
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAIjC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;iBAqFhC,CAAC;AAIL,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCnC,CAAC;AAmDH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,mBAAsE,GAC9E,SAAS,CAiFX"}