@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,235 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import * as z from "zod/v4";
3
+ import packageJson from "../../package.json" with { type: "json" };
4
+ import { toCliError } from "../lib/errors.js";
5
+ import { redact } from "../lib/output.js";
6
+ import { queryMetrics, } from "../lib/query-metrics.js";
7
+ const metricCategory = z.enum(["METRICS_TYPE_A", "METRICS_TYPE_B", "METRICS_TYPE_C"]);
8
+ export const queryMetricsInputSchema = z
9
+ .object({
10
+ athlete_id: z
11
+ .string()
12
+ .trim()
13
+ .min(1)
14
+ .optional()
15
+ .describe("Exact Dataworks athlete public ID. Use this instead of athlete_name when known."),
16
+ athlete_name: z
17
+ .string()
18
+ .trim()
19
+ .min(1)
20
+ .optional()
21
+ .describe("Athlete full or short name. The tool resolves a unique authorized athlete and never guesses when ambiguous."),
22
+ metric: z
23
+ .string()
24
+ .trim()
25
+ .min(1)
26
+ .describe("Metric name or common alias. Built-in aliases include GPS/location/latlong and heart rate/HR/BPM."),
27
+ metric_category: metricCategory
28
+ .optional()
29
+ .describe("Required only for an unknown/custom metric. Known aliases infer their Data Explorer category."),
30
+ limit: z
31
+ .number()
32
+ .int()
33
+ .min(1)
34
+ .max(500)
35
+ .default(30)
36
+ .describe("Maximum rows to return; defaults to 30."),
37
+ order: z
38
+ .enum(["newest", "oldest"])
39
+ .default("newest")
40
+ .describe("Sort by timestamp, newest-first by default."),
41
+ from: z
42
+ .string()
43
+ .optional()
44
+ .describe("Optional inclusive start time as an ISO 8601 date-time."),
45
+ to: z
46
+ .string()
47
+ .optional()
48
+ .describe("Optional inclusive end time as an ISO 8601 date-time."),
49
+ event_id: z
50
+ .string()
51
+ .trim()
52
+ .min(1)
53
+ .optional()
54
+ .describe("Optional exact event public ID filter."),
55
+ dataset_datasource_id: z
56
+ .string()
57
+ .trim()
58
+ .min(1)
59
+ .optional()
60
+ .describe("Optional exact dataset-datasource public ID filter."),
61
+ tenant_id: z
62
+ .string()
63
+ .trim()
64
+ .min(1)
65
+ .optional()
66
+ .describe("Optional authorized tenant override; otherwise use the selected CLI tenant."),
67
+ timeout_ms: z
68
+ .number()
69
+ .int()
70
+ .min(1_000)
71
+ .max(120_000)
72
+ .default(30_000)
73
+ .describe("Maximum time to poll an asynchronous Data Explorer query."),
74
+ })
75
+ .superRefine((input, context) => {
76
+ if (Number(Boolean(input.athlete_id)) + Number(Boolean(input.athlete_name)) !== 1) {
77
+ context.addIssue({
78
+ code: "custom",
79
+ message: "Provide exactly one of athlete_id or athlete_name",
80
+ path: ["athlete_id"],
81
+ });
82
+ }
83
+ });
84
+ const nullableString = z.string().nullable();
85
+ export const queryMetricsOutputSchema = z.object({
86
+ environment: z.enum(["uat", "live"]),
87
+ tenant_id: z.string(),
88
+ athlete: z.object({
89
+ public_id: z.string(),
90
+ name: nullableString,
91
+ matched_by: z.enum(["public_id", "name", "partial_name"]),
92
+ }),
93
+ metric: z.object({
94
+ requested: z.string(),
95
+ canonical: z.string(),
96
+ category: metricCategory,
97
+ unit: nullableString,
98
+ }),
99
+ filters: z.object({
100
+ event_id: nullableString,
101
+ dataset_datasource_id: nullableString,
102
+ from: nullableString,
103
+ to: nullableString,
104
+ }),
105
+ order: z.enum(["newest", "oldest"]),
106
+ limit: z.number().int(),
107
+ count: z.number().int(),
108
+ row_count: z.number().int(),
109
+ status: z.string(),
110
+ query_execution_id: nullableString,
111
+ query_time_ms: z.number().int().nullable(),
112
+ rows: z.array(z.object({
113
+ timestamp: z.union([z.string(), z.number()]).nullable(),
114
+ timestamp_iso: nullableString,
115
+ athlete_id: nullableString,
116
+ metric: nullableString,
117
+ value: z.unknown(),
118
+ unit: nullableString,
119
+ position: z.object({ latitude: z.number(), longitude: z.number() }).nullable(),
120
+ event_id: nullableString,
121
+ dataset_datasource_id: nullableString,
122
+ })),
123
+ });
124
+ function structuredOutput(output) {
125
+ return {
126
+ environment: output.environment,
127
+ tenant_id: output.tenantId,
128
+ athlete: {
129
+ public_id: output.athlete.publicId,
130
+ name: output.athlete.name,
131
+ matched_by: output.athlete.matchedBy,
132
+ },
133
+ metric: output.metric,
134
+ filters: {
135
+ event_id: output.filters.eventId,
136
+ dataset_datasource_id: output.filters.datasetDatasourceId,
137
+ from: output.filters.from,
138
+ to: output.filters.to,
139
+ },
140
+ order: output.order,
141
+ limit: output.limit,
142
+ count: output.count,
143
+ row_count: output.rowCount,
144
+ status: output.status,
145
+ query_execution_id: output.queryExecutionId,
146
+ query_time_ms: output.queryTimeMs,
147
+ rows: output.rows.map((row) => ({
148
+ timestamp: row.timestamp,
149
+ timestamp_iso: row.timestampIso,
150
+ athlete_id: row.athleteId,
151
+ metric: row.metric,
152
+ value: row.value,
153
+ unit: row.unit,
154
+ position: row.position,
155
+ event_id: row.eventId,
156
+ dataset_datasource_id: row.datasetDatasourceId,
157
+ })),
158
+ };
159
+ }
160
+ function summary(output) {
161
+ const athlete = output.athlete.name
162
+ ? `${output.athlete.name} (${output.athlete.public_id})`
163
+ : output.athlete.public_id;
164
+ return [
165
+ `Returned ${output.count} ${output.metric.canonical} metric value${output.count === 1 ? "" : "s"} for ${athlete}.`,
166
+ `Environment: ${output.environment}; tenant: ${output.tenant_id}; order: ${output.order}.`,
167
+ ].join("\n");
168
+ }
169
+ export function createDataworksMcpServer(handler = (input, options) => queryMetrics(input, options)) {
170
+ const server = new McpServer({
171
+ name: "dataworks",
172
+ title: "Dataworks",
173
+ version: packageJson.version,
174
+ }, {
175
+ instructions: "Use query_metrics for read-only athlete metric requests. Prefer athlete_id when the user supplies an ID; otherwise pass athlete_name and let the tool resolve it. Do not guess IDs.",
176
+ });
177
+ server.registerTool("query_metrics", {
178
+ title: "Query athlete metrics",
179
+ description: "Return normalized Dataworks metric values for one athlete. Resolves an athlete name safely, maps common aliases such as GPS and heart rate, applies optional time/event/dataset filters, polls asynchronous Data Explorer queries, and decodes GPS coordinates. Read-only. Requires an existing `dw auth login` session and selected tenant unless tenant_id is supplied.",
180
+ inputSchema: queryMetricsInputSchema,
181
+ outputSchema: queryMetricsOutputSchema,
182
+ annotations: {
183
+ readOnlyHint: true,
184
+ destructiveHint: false,
185
+ idempotentHint: true,
186
+ openWorldHint: false,
187
+ },
188
+ }, async (input, extra) => {
189
+ try {
190
+ const output = structuredOutput(await handler({
191
+ athleteId: input.athlete_id,
192
+ athleteName: input.athlete_name,
193
+ metric: input.metric,
194
+ metricCategory: input.metric_category,
195
+ limit: input.limit,
196
+ order: input.order,
197
+ from: input.from,
198
+ to: input.to,
199
+ eventId: input.event_id,
200
+ datasetDatasourceId: input.dataset_datasource_id,
201
+ tenantId: input.tenant_id,
202
+ timeoutMs: input.timeout_ms,
203
+ }, { signal: extra.signal }));
204
+ return {
205
+ content: [{ type: "text", text: summary(output) }],
206
+ structuredContent: output,
207
+ };
208
+ }
209
+ catch (error) {
210
+ const cliError = toCliError(error);
211
+ return {
212
+ isError: true,
213
+ content: [
214
+ {
215
+ type: "text",
216
+ text: JSON.stringify({
217
+ error: {
218
+ code: cliError.code,
219
+ message: cliError.message,
220
+ details: redact(cliError.details),
221
+ recovery: cliError.code === "AUTH_REQUIRED"
222
+ ? "Run `dw auth login`, then retry."
223
+ : cliError.code === "TENANT_REQUIRED"
224
+ ? "Run `dw tenant select`, then retry."
225
+ : null,
226
+ },
227
+ }),
228
+ },
229
+ ],
230
+ };
231
+ }
232
+ });
233
+ return server;
234
+ }
235
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}