@dataworks-technology/cli 1.4.1 → 1.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.
package/README.md CHANGED
@@ -131,8 +131,8 @@ after installing a release that adds commands.
131
131
 
132
132
  ## AI agent metric queries
133
133
 
134
- The package includes a focused, read-only MCP server with one tool:
135
- `query_metrics`. It uses the same OS-backed login session and selected tenant as
134
+ The package includes a focused, read-only MCP server with three tools:
135
+ `query_metrics`, `list_athletes`, and `list_events`. It uses the same OS-backed login session and selected tenant as
136
136
  `dw`, resolves an athlete by exact ID or unique name, resolves metric names
137
137
  against the canonical Dataworks catalogue, polls asynchronous Data Explorer
138
138
  queries, and returns normalized structured rows. GPS values include decoded
@@ -199,8 +199,19 @@ exactly one of `athlete_id` or `athlete_name`, plus `metric`; optional inputs ar
199
199
  `limit`, `order`, `from`, `to`, `event_id`, `dataset_datasource_id`,
200
200
  `tenant_id`, `metric_category`, and `timeout_ms`.
201
201
 
202
+ A query must be scoped by `athlete_id`, `athlete_name`, `event_id`, or
203
+ `dataset_datasource_id`. Supplying only an event or datasource answers questions
204
+ about a whole race — "the latest heart rate values at T100 San Francisco" — and
205
+ returns a null `athlete` with each row still carrying its own `athlete_id`.
206
+
207
+ `list_athletes` and `list_events` exist so an agent can resolve an ID instead of
208
+ guessing one, and can tell "not in this tenant" apart from "misspelled". When
209
+ `list_events` reports `unavailable: true` the event API returned nothing for that
210
+ session, which is a permissions problem rather than an empty tenant.
211
+
202
212
  The server never performs mutations. If name resolution is ambiguous, it
203
213
  returns candidates and requires an explicit athlete ID rather than guessing.
214
+ Every error carries a `recovery` field naming the command that fixes it.
204
215
 
205
216
  ---
206
217
 
@@ -12,4 +12,14 @@ export declare const metricLabels: Record<string, string>;
12
12
  export declare const allMetricNames: readonly string[];
13
13
  /** Category lookup for a canonical metric name. */
14
14
  export declare const metricCategoryByName: Record<string, MetricCategory>;
15
+ /**
16
+ * Columns the Data Explorer accepts per category. It allowlists the column names
17
+ * it will place in SQL, and silently ignores an aggregate naming anything else,
18
+ * so grouping and aggregate fields must be checked against this.
19
+ */
20
+ export declare const metricColumns: {
21
+ METRICS_TYPE_A: string[];
22
+ METRICS_TYPE_B: string[];
23
+ METRICS_TYPE_C: string[];
24
+ };
15
25
  //# sourceMappingURL=metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/generated/metrics.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEpF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB;;;;CA4CwB,CAAC;AAEtD,sDAAsD;AACtD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsC/C,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAA2C,CAAC;AAExF,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAsC/D,CAAC"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/generated/metrics.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEpF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB;;;;CA4CwB,CAAC;AAEtD,sDAAsD;AACtD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsC/C,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAA2C,CAAC;AAExF,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAsC/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;CA6C2B,CAAC"}
@@ -128,4 +128,55 @@ export const metricCategoryByName = {
128
128
  "power-cycling": "METRICS_TYPE_C",
129
129
  "pwr_instant": "METRICS_TYPE_C"
130
130
  };
131
+ /**
132
+ * Columns the Data Explorer accepts per category. It allowlists the column names
133
+ * it will place in SQL, and silently ignores an aggregate naming anything else,
134
+ * so grouping and aggregate fields must be checked against this.
135
+ */
136
+ export const metricColumns = {
137
+ "METRICS_TYPE_A": [
138
+ "timestamp",
139
+ "datasetdatasourcepublicid",
140
+ "eventpublicid",
141
+ "athletepublicid",
142
+ "metric",
143
+ "current"
144
+ ],
145
+ "METRICS_TYPE_B": [
146
+ "timestamp",
147
+ "datasetdatasourcepublicid",
148
+ "eventpublicid",
149
+ "athletepublicid",
150
+ "metric",
151
+ "current",
152
+ "max",
153
+ "min",
154
+ "avg"
155
+ ],
156
+ "METRICS_TYPE_C": [
157
+ "timestamp",
158
+ "datasetdatasourcepublicid",
159
+ "eventpublicid",
160
+ "athletepublicid",
161
+ "metric",
162
+ "current",
163
+ "max",
164
+ "min",
165
+ "avg",
166
+ "z1_timespent",
167
+ "z1_percentage",
168
+ "z2_timespent",
169
+ "z2_percentage",
170
+ "z3_timespent",
171
+ "z3_percentage",
172
+ "z4_timespent",
173
+ "z4_percentage",
174
+ "z5_timespent",
175
+ "z5_percentage",
176
+ "z6_timespent",
177
+ "z6_percentage",
178
+ "z7_timespent",
179
+ "z7_percentage"
180
+ ]
181
+ };
131
182
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/generated/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/generated/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Roster and event lookup for agents.
3
+ *
4
+ * Without this an agent that hits ATHLETE_NOT_FOUND has no sanctioned way to find
5
+ * out what does exist, and drops to raw GraphQL to go looking — which is how a
6
+ * simple question turns into twenty exploratory shell commands.
7
+ */
8
+ import { executeGraphql } from "./graphql-transport.js";
9
+ import { requireSession } from "./session.js";
10
+ export interface DiscoverDependencies {
11
+ graphql: typeof executeGraphql;
12
+ session: typeof requireSession;
13
+ }
14
+ export interface AthleteSummary {
15
+ publicId: string;
16
+ name: string | null;
17
+ externalId: string | null;
18
+ }
19
+ export interface EventSummary {
20
+ publicId: string;
21
+ name: string | null;
22
+ startsAt: string | null;
23
+ location: string | null;
24
+ type: string | null;
25
+ /** Dataset the event was reached through, when discovered that way. */
26
+ datasetPublicId?: string;
27
+ }
28
+ export interface DiscoverInput {
29
+ search?: string;
30
+ limit?: number;
31
+ tenantId?: string;
32
+ }
33
+ export interface AthleteListOutput {
34
+ tenantId: string;
35
+ total: number;
36
+ count: number;
37
+ search: string | null;
38
+ athletes: AthleteSummary[];
39
+ }
40
+ export interface EventListOutput {
41
+ tenantId: string;
42
+ total: number;
43
+ count: number;
44
+ search: string | null;
45
+ events: EventSummary[];
46
+ /**
47
+ * Set when listEvents returned null AND no events could be reached through
48
+ * datasets. Callers must not read that as "no events exist".
49
+ */
50
+ unavailable: boolean;
51
+ /** Where the events came from: the events API, or the dataset relation. */
52
+ source: "events" | "datasets" | "none";
53
+ }
54
+ export declare function listAthletes(input?: DiscoverInput, options?: {
55
+ dependencies?: Partial<DiscoverDependencies>;
56
+ }): Promise<AthleteListOutput>;
57
+ export declare function listEvents(input?: DiscoverInput, options?: {
58
+ dependencies?: Partial<DiscoverDependencies>;
59
+ }): Promise<EventListOutput>;
60
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/lib/discover.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;CACxC;AA2FD,wBAAsB,YAAY,CAChC,KAAK,GAAE,aAAkB,EACzB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAAO,GAC7D,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAED,wBAAsB,UAAU,CAC9B,KAAK,GAAE,aAAkB,EACzB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;CAAO,GAC7D,OAAO,CAAC,eAAe,CAAC,CAqE1B"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Roster and event lookup for agents.
3
+ *
4
+ * Without this an agent that hits ATHLETE_NOT_FOUND has no sanctioned way to find
5
+ * out what does exist, and drops to raw GraphQL to go looking — which is how a
6
+ * simple question turns into twenty exploratory shell commands.
7
+ */
8
+ import { executeGraphql } from "./graphql-transport.js";
9
+ import { CliError, toCliError } from "./errors.js";
10
+ import { requireSession } from "./session.js";
11
+ const listAthletesDocument = `query listAthletes($limit: Int, $nextToken: String, $tenant: String!) {
12
+ listAthletes(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
13
+ items { publicId externalId forename surname name nameShort }
14
+ nextToken
15
+ }
16
+ }`;
17
+ const listEventsDocument = `query listEvents($limit: Int, $nextToken: String, $tenant: String!) {
18
+ listEvents(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
19
+ items { publicId name startsAt location type }
20
+ nextToken
21
+ }
22
+ }`;
23
+ /**
24
+ * Events reached through their datasets.
25
+ *
26
+ * listEvents currently returns null on this API, but every dataset exposes its
27
+ * event, so a race can still be identified by name rather than inferred from an
28
+ * ID prefix. Used only when the events API gives nothing.
29
+ */
30
+ const datasetEventsDocument = `query listDatasets($limit: Int, $nextToken: String, $tenant: String!) {
31
+ listDatasets(limit: $limit, nextToken: $nextToken, tenant: $tenant) {
32
+ items { publicId name event { publicId name startsAt location type } }
33
+ nextToken
34
+ }
35
+ }`;
36
+ const defaultDependencies = {
37
+ graphql: executeGraphql,
38
+ session: requireSession,
39
+ };
40
+ function normalize(value) {
41
+ return value
42
+ .trim()
43
+ .toLocaleLowerCase()
44
+ .replaceAll(/[^a-z0-9]/g, "");
45
+ }
46
+ function athleteName(athlete) {
47
+ const full = [athlete.forename, athlete.surname]
48
+ .filter((part) => Boolean(String(part ?? "").trim()))
49
+ .join(" ");
50
+ return athlete.name?.trim() || full || athlete.nameShort?.trim() || null;
51
+ }
52
+ async function resolveTenant(input, dependencies) {
53
+ const session = await dependencies.session();
54
+ const tenantId = input.tenantId?.trim() || session.tenant;
55
+ if (!tenantId) {
56
+ throw new CliError("No tenant selected; run `dw tenant select` or provide tenant_id", "TENANT_REQUIRED", 2);
57
+ }
58
+ return tenantId;
59
+ }
60
+ /** Page through a connection, stopping at a page cap rather than looping forever. */
61
+ async function collect(document, field, tenantId, dependencies) {
62
+ const items = [];
63
+ let nextToken;
64
+ let pages = 0;
65
+ let sawConnection = false;
66
+ do {
67
+ const result = await dependencies.graphql(document, {
68
+ limit: 100,
69
+ nextToken,
70
+ tenant: tenantId,
71
+ });
72
+ const connection = result?.[field];
73
+ if (connection)
74
+ sawConnection = true;
75
+ items.push(...(connection?.items ?? []));
76
+ nextToken = connection?.nextToken;
77
+ pages += 1;
78
+ } while (nextToken && pages < 100);
79
+ return { items, unavailable: !sawConnection };
80
+ }
81
+ export async function listAthletes(input = {}, options = {}) {
82
+ const dependencies = { ...defaultDependencies, ...options.dependencies };
83
+ try {
84
+ const tenantId = await resolveTenant(input, dependencies);
85
+ const { items } = await collect(listAthletesDocument, "listAthletes", tenantId, dependencies);
86
+ const all = items.map((athlete) => ({
87
+ publicId: String(athlete.publicId),
88
+ name: athleteName(athlete),
89
+ externalId: athlete.externalId ?? null,
90
+ }));
91
+ const search = input.search?.trim() || null;
92
+ const needle = search ? normalize(search) : null;
93
+ const matched = needle
94
+ ? all.filter((athlete) => [athlete.name, athlete.externalId, athlete.publicId]
95
+ .filter((value) => Boolean(value))
96
+ .some((value) => normalize(value).includes(needle)))
97
+ : all;
98
+ const limit = input.limit ?? 50;
99
+ return {
100
+ tenantId,
101
+ total: matched.length,
102
+ count: Math.min(matched.length, limit),
103
+ search,
104
+ athletes: matched.slice(0, limit),
105
+ };
106
+ }
107
+ catch (error) {
108
+ throw toCliError(error);
109
+ }
110
+ }
111
+ export async function listEvents(input = {}, options = {}) {
112
+ const dependencies = { ...defaultDependencies, ...options.dependencies };
113
+ try {
114
+ const tenantId = await resolveTenant(input, dependencies);
115
+ const toSummary = (event, datasetPublicId) => ({
116
+ publicId: String(event.publicId),
117
+ name: event.name ?? null,
118
+ startsAt: event.startsAt ?? null,
119
+ location: event.location ?? null,
120
+ type: event.type ?? null,
121
+ ...(datasetPublicId ? { datasetPublicId } : {}),
122
+ });
123
+ const direct = await collect(listEventsDocument, "listEvents", tenantId, dependencies);
124
+ let source = direct.unavailable ? "none" : "events";
125
+ let all = direct.items.map((event) => toSummary(event));
126
+ // The events API returns null on this deployment. Datasets still carry their
127
+ // event, so fall back rather than leaving the caller to infer an ID.
128
+ if (!all.length) {
129
+ const viaDatasets = await collect(datasetEventsDocument, "listDatasets", tenantId, dependencies);
130
+ const seen = new Set();
131
+ const derived = [];
132
+ for (const dataset of viaDatasets.items) {
133
+ const event = dataset.event;
134
+ if (!event?.publicId || seen.has(String(event.publicId)))
135
+ continue;
136
+ seen.add(String(event.publicId));
137
+ derived.push(toSummary(event, String(dataset.publicId)));
138
+ }
139
+ if (derived.length) {
140
+ all = derived;
141
+ source = "datasets";
142
+ }
143
+ }
144
+ const search = input.search?.trim() || null;
145
+ const needle = search ? normalize(search) : null;
146
+ const matched = needle
147
+ ? all.filter((event) => [event.name, event.publicId]
148
+ .filter((value) => Boolean(value))
149
+ .some((value) => normalize(value).includes(needle)))
150
+ : all;
151
+ const limit = input.limit ?? 50;
152
+ return {
153
+ tenantId,
154
+ total: matched.length,
155
+ count: Math.min(matched.length, limit),
156
+ search,
157
+ events: matched.slice(0, limit),
158
+ unavailable: all.length === 0 && direct.unavailable,
159
+ source,
160
+ };
161
+ }
162
+ catch (error) {
163
+ throw toCliError(error);
164
+ }
165
+ }
166
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/lib/discover.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,27 @@
1
+ export interface GraphqlError {
2
+ message: string;
3
+ path?: Array<string | number>;
4
+ }
5
+ export interface GraphqlPayload<T> {
6
+ data?: T | null;
7
+ errors?: GraphqlError[];
8
+ }
9
+ /**
10
+ * Decide what a GraphQL response means.
11
+ *
12
+ * AppSync reports a partial failure as `{data: {field: null}, errors: [...]}`.
13
+ * Because `data` is present, an `errors` check keyed on `data` being undefined
14
+ * discards the explanation and hands back a bare null, which is indistinguishable
15
+ * from "there is genuinely nothing here". Callers then debug a silent null.
16
+ *
17
+ * Errors with no usable data are fatal. Errors alongside usable data are a real
18
+ * partial success, so the data is returned rather than thrown away — but the
19
+ * failure is reported to the caller so it cannot vanish.
20
+ */
21
+ export declare function interpretGraphqlPayload<T>(payload: GraphqlPayload<T>): {
22
+ data: T;
23
+ warnings: string[];
24
+ };
1
25
  export declare function executeGraphql<T = unknown>(document: string, variables: Record<string, unknown>): Promise<T>;
2
26
  export declare function subscribeGraphql(document: string, variables: Record<string, unknown>, onData: (data: unknown) => void): Promise<void>;
3
27
  //# sourceMappingURL=graphql-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-transport.d.ts","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAkCZ;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"graphql-transport.d.ts","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG;IACtE,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAcA;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC,CAgCZ;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -3,6 +3,36 @@ import { createSubscriptionHandshakeLink } from "aws-appsync-subscription-link";
3
3
  import { resolveEnvironment } from "./environment.js";
4
4
  import { CliError } from "./errors.js";
5
5
  import { requireSession } from "./session.js";
6
+ /** "listEvents: Unauthorized tenant access", or just the message when there is no path. */
7
+ function describe(error) {
8
+ const path = error.path?.join(".");
9
+ return path ? `${path}: ${error.message}` : error.message;
10
+ }
11
+ /**
12
+ * Decide what a GraphQL response means.
13
+ *
14
+ * AppSync reports a partial failure as `{data: {field: null}, errors: [...]}`.
15
+ * Because `data` is present, an `errors` check keyed on `data` being undefined
16
+ * discards the explanation and hands back a bare null, which is indistinguishable
17
+ * from "there is genuinely nothing here". Callers then debug a silent null.
18
+ *
19
+ * Errors with no usable data are fatal. Errors alongside usable data are a real
20
+ * partial success, so the data is returned rather than thrown away — but the
21
+ * failure is reported to the caller so it cannot vanish.
22
+ */
23
+ export function interpretGraphqlPayload(payload) {
24
+ const errors = payload.errors ?? [];
25
+ if (!errors.length)
26
+ return { data: payload.data, warnings: [] };
27
+ const values = payload.data && typeof payload.data === "object"
28
+ ? Object.values(payload.data)
29
+ : [];
30
+ const hasUsableData = values.some((value) => value !== null && value !== undefined);
31
+ if (!hasUsableData) {
32
+ throw new CliError(errors.map(describe).join("; "), "GRAPHQL_ERROR", 1, errors);
33
+ }
34
+ return { data: payload.data, warnings: errors.map(describe) };
35
+ }
6
36
  export async function executeGraphql(document, variables) {
7
37
  const session = await requireSession();
8
38
  const environment = resolveEnvironment(session.environment, session.clientId);
@@ -25,10 +55,13 @@ export async function executeGraphql(document, variables) {
25
55
  catch {
26
56
  throw new CliError("GraphQL returned invalid JSON", "GRAPHQL_RESPONSE_INVALID");
27
57
  }
28
- if (payload.errors?.length && typeof payload.data === "undefined") {
29
- throw new CliError(payload.errors.map((error) => error.message).join("; "), "GRAPHQL_ERROR", 1, payload.errors);
58
+ const { data, warnings } = interpretGraphqlPayload(payload);
59
+ // Partial success: stdout keeps carrying the usable data, including under
60
+ // --json, while the failure still reaches the operator on stderr.
61
+ for (const warning of warnings) {
62
+ process.stderr.write(`Warning: GraphQL partial failure — ${warning}\n`);
30
63
  }
31
- return payload.data;
64
+ return data;
32
65
  }
33
66
  export async function subscribeGraphql(document, variables, onData) {
34
67
  const session = await requireSession();
@@ -1 +1 @@
1
- {"version":3,"file":"graphql-transport.js","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphql-transport.js","sourceRoot":"","sources":["../../src/lib/graphql-transport.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,8 @@
6
6
  * What lives here is the CLI-owned layer the SDK does not define: the everyday
7
7
  * wordings a user or model is likely to type, and display units.
8
8
  */
9
- import { allMetricNames, metricCategories, metricLabels, type MetricCategory } from "../generated/metrics.js";
10
- export { allMetricNames, metricCategories, metricLabels, type MetricCategory };
9
+ import { allMetricNames, metricCategories, metricColumns, metricLabels, type MetricCategory } from "../generated/metrics.js";
10
+ export { allMetricNames, metricCategories, metricColumns, metricLabels, type MetricCategory, };
11
11
  /** Normalize wording to a lookup key: "Heart Rate" and "heart-rate" both give "heartrate". */
12
12
  export declare function compactMetricName(value: string): string;
13
13
  export interface ResolvedMetricName {
@@ -1 +1 @@
1
- {"version":3,"file":"metric-names.d.ts","sourceRoot":"","sources":["../../src/lib/metric-names.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,YAAY,EACZ,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,CAAC;AA+F/E,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAOD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAQnF;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAyBzE;AASD,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C"}
1
+ {"version":3,"file":"metric-names.d.ts","sourceRoot":"","sources":["../../src/lib/metric-names.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,cAAc,EACd,gBAAgB,EAEhB,aAAa,EACb,YAAY,EACZ,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,KAAK,cAAc,GACpB,CAAC;AA+FF,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAOD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAQnF;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAyBzE;AASD,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C"}
@@ -6,8 +6,8 @@
6
6
  * What lives here is the CLI-owned layer the SDK does not define: the everyday
7
7
  * wordings a user or model is likely to type, and display units.
8
8
  */
9
- import { allMetricNames, metricCategories, metricCategoryByName, metricLabels, } from "../generated/metrics.js";
10
- export { allMetricNames, metricCategories, metricLabels };
9
+ import { allMetricNames, metricCategories, metricCategoryByName, metricColumns, metricLabels, } from "../generated/metrics.js";
10
+ export { allMetricNames, metricCategories, metricColumns, metricLabels, };
11
11
  /**
12
12
  * Units for metrics whose scale the catalogue states explicitly, either in the
13
13
  * SDK's category comments or its label text. Metrics whose unit upstream leaves
@@ -1 +1 @@
1
- {"version":3,"file":"metric-names.js","sourceRoot":"","sources":["../../src/lib/metric-names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metric-names.js","sourceRoot":"","sources":["../../src/lib/metric-names.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,11 @@ import { executeGraphql } from "./graphql-transport.js";
2
2
  import { type MetricCategory } from "./metric-names.js";
3
3
  import { requireSession } from "./session.js";
4
4
  export type { MetricCategory };
5
+ export type MetricAggregate = "count" | "avg" | "sum" | "max" | "min";
5
6
  export interface QueryMetricsInput {
6
7
  athleteId?: string;
8
+ /** Several athletes at once, for comparing them in one query. */
9
+ athleteIds?: string[];
7
10
  athleteName?: string;
8
11
  metric: string;
9
12
  metricCategory?: MetricCategory;
@@ -15,6 +18,20 @@ export interface QueryMetricsInput {
15
18
  datasetDatasourceId?: string;
16
19
  tenantId?: string;
17
20
  timeoutMs?: number;
21
+ /** Compute server-side instead of returning rows, e.g. a maximum over all history. */
22
+ aggregate?: MetricAggregate;
23
+ /** Column to aggregate; defaults to `current`, the metric value. */
24
+ aggregateField?: string;
25
+ /** Column to group by; defaults to `athletepublicid`. */
26
+ groupBy?: string;
27
+ /** Keep only samples whose value is at least this. */
28
+ minValue?: number;
29
+ /** Keep only samples whose value is at most this. */
30
+ maxValue?: number;
31
+ /** Column to sort by; defaults to `timestamp`. */
32
+ orderBy?: string;
33
+ /** Several events at once, for spanning a series of races. */
34
+ eventIds?: string[];
18
35
  }
19
36
  export interface MetricPosition {
20
37
  latitude: number;
@@ -30,15 +47,26 @@ export interface MetricRow {
30
47
  position: MetricPosition | null;
31
48
  eventId: string | null;
32
49
  datasetDatasourceId: string | null;
50
+ /**
51
+ * Every other column the category provides — the rolling max/min/avg, and the
52
+ * seven training zones for heart rate and power. Kept as a map so a column
53
+ * added upstream reaches callers without a code change here.
54
+ */
55
+ extra: Record<string, unknown>;
56
+ }
57
+ export interface MetricAggregateGroup {
58
+ key: string | null;
59
+ value: number | null;
33
60
  }
34
61
  export interface QueryMetricsOutput {
35
62
  environment: "uat" | "live";
36
63
  tenantId: string;
64
+ /** Null when the query is scoped by event or datasource rather than an athlete. */
37
65
  athlete: {
38
66
  publicId: string;
39
67
  name: string | null;
40
68
  matchedBy: "public_id" | "name" | "partial_name";
41
- };
69
+ } | null;
42
70
  metric: {
43
71
  requested: string;
44
72
  canonical: string;
@@ -47,6 +75,10 @@ export interface QueryMetricsOutput {
47
75
  };
48
76
  filters: {
49
77
  eventId: string | null;
78
+ /** Echoes a multi-event request; compare against each row's eventId. */
79
+ eventIds: string[] | null;
80
+ /** Echoes a multi-athlete request; an athlete with no data simply has no rows. */
81
+ athleteIds: string[] | null;
50
82
  datasetDatasourceId: string | null;
51
83
  from: string | null;
52
84
  to: string | null;
@@ -59,6 +91,13 @@ export interface QueryMetricsOutput {
59
91
  queryExecutionId: string | null;
60
92
  queryTimeMs: number | null;
61
93
  rows: MetricRow[];
94
+ /** Present only when an aggregate was requested; `rows` is empty in that case. */
95
+ aggregate: {
96
+ function: MetricAggregate;
97
+ field: string;
98
+ groupBy: string;
99
+ groups: MetricAggregateGroup[];
100
+ } | null;
62
101
  }
63
102
  export interface QueryMetricsDependencies {
64
103
  graphql: typeof executeGraphql;
@@ -66,6 +105,8 @@ export interface QueryMetricsDependencies {
66
105
  sleep: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
67
106
  now: () => number;
68
107
  }
108
+ /** Trimmed, de-duplicated, empties dropped. */
109
+ export declare function normalizeIdList(values: string[] | undefined): string[];
69
110
  export declare function queryMetrics(input: QueryMetricsInput, options?: {
70
111
  dependencies?: Partial<QueryMetricsDependencies>;
71
112
  signal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"query-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/query-metrics.ts"],"names":[],"mappings":"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"}