@salesforce/graphiti 11.20.0 → 11.22.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/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [11.22.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v11.21.0...v11.22.0) (2026-07-10)
7
+
8
+ ### Features
9
+
10
+ - **graphiti:** promote whole aggregate filter/orderBy/first argument to one optional $var @W-23400202 ([#741](https://github.com/salesforce-experience-platform-emu/webapps/issues/741)) ([d068185](https://github.com/salesforce-experience-platform-emu/webapps/commit/d068185c78e40bcb88c7bf4706f951f6c3072070))
11
+
12
+ ## [11.21.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v11.20.0...v11.21.0) (2026-07-10)
13
+
14
+ **Note:** Version bump only for package @salesforce/graphiti
15
+
6
16
  ## [11.20.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v11.19.0...v11.20.0) (2026-07-10)
7
17
 
8
18
  **Note:** Version bump only for package @salesforce/graphiti
@@ -8,7 +8,7 @@ import { getSchemaWithPriming } from "./get-schema-with-priming.js";
8
8
  import { assertGraphqlName } from "../lib/graphql-name.js";
9
9
  import { addVariable, createSession, createSiblingFieldInstance, deepSetArg, selectLeaf, } from "../lib/session.js";
10
10
  import { aggregatePath } from "../lib/uiapi.js";
11
- import { normalizeOrderBy, promoteVariables } from "../lib/variable-promotion.js";
11
+ import { normalizeOrderBy, promoteArg } from "../lib/variable-promotion.js";
12
12
  const FIELD_REQUIRED_FNS = new Set(["sum", "avg", "min", "max"]);
13
13
  /**
14
14
  * Build a UIAPI aggregate query against a Salesforce org. Implements
@@ -53,19 +53,20 @@ export async function buildAggregate(spec, deps) {
53
53
  addVariable(session, "after", "String");
54
54
  deepSetArg(session, connectionPath, "after", [], "$after");
55
55
  if (spec.filter) {
56
- promoteVariables(session, schema, connectionPath, "where", spec.filter, extraWarnings);
57
- deepSetArg(session, connectionPath, "where", [], JSON.stringify(spec.filter));
56
+ const { rendered } = promoteArg(session, schema, connectionPath, "where", spec.filter, extraWarnings);
57
+ deepSetArg(session, connectionPath, "where", [], rendered);
58
58
  }
59
59
  const orderBy = normalizeOrderBy(spec.orderBy);
60
60
  if (Array.isArray(spec.orderBy) && spec.orderBy.length > 1) {
61
61
  extraWarnings.push("orderBy: array collapsed to first element. UIAPI accepts a single orderBy object — use multiple keys in one object for multi-field ordering (e.g. { Industry: { order: DESC }, Name: { order: ASC } }).");
62
62
  }
63
63
  if (orderBy) {
64
- promoteVariables(session, schema, connectionPath, "orderBy", orderBy, extraWarnings);
65
- deepSetArg(session, connectionPath, "orderBy", [], JSON.stringify(orderBy));
64
+ const { rendered } = promoteArg(session, schema, connectionPath, "orderBy", orderBy, extraWarnings);
65
+ deepSetArg(session, connectionPath, "orderBy", [], rendered);
66
66
  }
67
67
  if (spec.first !== undefined) {
68
- deepSetArg(session, connectionPath, "first", [], String(spec.first));
68
+ const { rendered } = promoteArg(session, schema, connectionPath, "first", spec.first);
69
+ deepSetArg(session, connectionPath, "first", [], rendered);
69
70
  }
70
71
  selectLeaf(session, [...connectionPath, "pageInfo", "hasNextPage"]);
71
72
  selectLeaf(session, [...connectionPath, "pageInfo", "endCursor"]);
@@ -1 +1 @@
1
- {"version":3,"file":"build-aggregate.js","sourceRoot":"","sources":["../../src/intent/build-aggregate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-aggregate.js","sourceRoot":"","sources":["../../src/intent/build-aggregate.ts"],"names":[],"mappings":"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"}
@@ -68,9 +68,9 @@ export interface AggregateSpec {
68
68
  object: string;
69
69
  groupBy?: GroupByElement[];
70
70
  aggregations?: AggregationSpec[];
71
- filter?: Record<string, unknown>;
72
- orderBy?: Record<string, unknown> | Record<string, unknown>[];
73
- first?: number;
71
+ filter?: Record<string, unknown> | string;
72
+ orderBy?: Record<string, unknown> | Record<string, unknown>[] | string;
73
+ first?: number | string;
74
74
  operationName?: string;
75
75
  }
76
76
  export type DiscoverMode = "list_objects" | "describe_object" | "describe_field";
@@ -191,17 +191,17 @@ export declare const AGGREGATE_INPUT: z.ZodObject<{
191
191
  field: string;
192
192
  alias?: string | undefined;
193
193
  }>]>, "many">>;
194
- filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
195
- orderBy: z.ZodOptional<z.ZodUnion<[z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">]>>;
196
- first: z.ZodOptional<z.ZodNumber>;
194
+ filter: z.ZodOptional<z.ZodEffects<z.ZodTypeAny, any, unknown>>;
195
+ orderBy: z.ZodOptional<z.ZodEffects<z.ZodTypeAny, any, unknown>>;
196
+ first: z.ZodOptional<z.ZodEffects<z.ZodTypeAny, any, unknown>>;
197
197
  operationName: z.ZodOptional<z.ZodString>;
198
198
  }, "strip", z.ZodTypeAny, {
199
199
  object: string;
200
200
  org: string;
201
- filter?: Record<string, unknown> | undefined;
201
+ filter?: any;
202
202
  operationName?: string | undefined;
203
- orderBy?: Record<string, unknown> | Record<string, unknown>[] | undefined;
204
- first?: number | undefined;
203
+ orderBy?: any;
204
+ first?: any;
205
205
  groupBy?: (string | {
206
206
  function: "CALENDAR_MONTH" | "CALENDAR_QUARTER" | "CALENDAR_YEAR" | "DAY_IN_MONTH" | "DAY_IN_WEEK" | "DAY_IN_YEAR" | "FISCAL_MONTH" | "FISCAL_QUARTER" | "FISCAL_YEAR" | "HOUR_IN_DAY" | "CALENDAR_MONTH_IN_YEAR" | "FISCAL_MONTH_IN_YEAR" | "WEEK_IN_YEAR";
207
207
  field: string;
@@ -218,10 +218,10 @@ export declare const AGGREGATE_INPUT: z.ZodObject<{
218
218
  }, {
219
219
  object: string;
220
220
  org: string;
221
- filter?: Record<string, unknown> | undefined;
221
+ filter?: unknown;
222
222
  operationName?: string | undefined;
223
- orderBy?: Record<string, unknown> | Record<string, unknown>[] | undefined;
224
- first?: number | undefined;
223
+ orderBy?: unknown;
224
+ first?: unknown;
225
225
  groupBy?: (string | {
226
226
  function: "CALENDAR_MONTH" | "CALENDAR_QUARTER" | "CALENDAR_YEAR" | "DAY_IN_MONTH" | "DAY_IN_WEEK" | "DAY_IN_YEAR" | "FISCAL_MONTH" | "FISCAL_QUARTER" | "FISCAL_YEAR" | "HOUR_IN_DAY" | "CALENDAR_MONTH_IN_YEAR" | "FISCAL_MONTH_IN_YEAR" | "WEEK_IN_YEAR";
227
227
  field: string;
@@ -151,20 +151,21 @@ export const AGGREGATE_INPUT = z.object({
151
151
  .array(aggregationSchema)
152
152
  .optional()
153
153
  .describe("List of aggregation functions to compute. Each entry projects under its alias (or default `<function><PascalCaseField>`)."),
154
- filter: z
155
- .record(z.unknown())
154
+ filter: jsonCoercible(z.union([z.record(z.unknown()), varPlaceholder(), jsonLiteralString(), quotedString()]))
156
155
  .optional()
157
- .describe("<Object>_Filter applied to every aggregation. String leaves matching $varName promote to typed query variables."),
158
- orderBy: z
159
- .union([z.record(z.unknown()), z.array(z.record(z.unknown()))])
156
+ .describe('<Object>_Filter applied to every aggregation. String leaves matching $varName promote to typed query variables. Pass a single "$varName" string to promote the WHOLE filter to one optional <Object>_Filter variable (bind it to null for "no filter → all buckets").'),
157
+ orderBy: jsonCoercible(z.union([
158
+ z.record(z.unknown()),
159
+ z.array(z.record(z.unknown())),
160
+ varPlaceholder(),
161
+ jsonLiteralString(),
162
+ quotedString(),
163
+ ]))
160
164
  .optional()
161
- .describe("<Object>_OrderBy. Singleton object preferred; arrays are collapsed to the first entry. String leaves matching $varName promote to typed query variables."),
162
- first: z
163
- .number()
164
- .int()
165
- .positive()
165
+ .describe('<Object>_OrderBy. Singleton object preferred; arrays are collapsed to the first entry. String leaves matching $varName promote to typed query variables. Pass a single "$varName" string to promote the whole orderBy to one optional <Object>_OrderBy variable.'),
166
+ first: jsonCoercible(z.union([z.number().int().positive(), varPlaceholder(), intLiteralString(), quotedString()]))
166
167
  .optional()
167
- .describe("Connection page size (top-N pattern). No default — omit for all buckets."),
168
+ .describe('Connection page size (top-N pattern). No default — omit for all buckets. Pass a single "$varName" string to promote it to an optional Int variable.'),
168
169
  operationName: graphqlName("Override the GraphQL operation name. Defaults to <Object>Aggregate.").optional(),
169
170
  });
170
171
  // --- sf_gql_raw -------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"input-schemas.js","sourceRoot":"","sources":["../../src/schemas/input-schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-schemas.js","sourceRoot":"","sources":["../../src/schemas/input-schemas.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/graphiti",
3
- "version": "11.20.0",
3
+ "version": "11.22.0",
4
4
  "description": "Progressive GraphQL query builder CLI for Salesforce orgs",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "type": "module",
@@ -482,6 +482,91 @@ describe("intent/build-aggregate", () => {
482
482
  expect(out.query).toMatch(/\$min\s*:\s*Float/);
483
483
  });
484
484
 
485
+ it("promotes a whole-argument $filter to a typed <Object>_Filter variable", async () => {
486
+ const out = await buildAggregate(
487
+ {
488
+ org: ORG,
489
+ object: "Account",
490
+ groupBy: [],
491
+ aggregations: [{ function: "count" }],
492
+ filter: "$filter",
493
+ },
494
+ noopPrimeDeps(),
495
+ );
496
+ const filter = out.variables.find((v) => v.name === "filter");
497
+ expect(filter).toBeDefined();
498
+ expect(filter!.type).toBe("Account_Filter");
499
+ expect(filter!.required).toBe(false);
500
+ expect(out.query).toMatch(/where\s*:\s*\$filter\b/);
501
+ });
502
+
503
+ it("promotes a whole-argument $orderBy to a typed <Object>_OrderBy variable", async () => {
504
+ const out = await buildAggregate(
505
+ {
506
+ org: ORG,
507
+ object: "Account",
508
+ groupBy: ["Industry"],
509
+ aggregations: [{ function: "count" }],
510
+ orderBy: "$sort",
511
+ },
512
+ noopPrimeDeps(),
513
+ );
514
+ const sort = out.variables.find((v) => v.name === "sort");
515
+ expect(sort).toBeDefined();
516
+ expect(sort!.type).toBe("Account_OrderBy");
517
+ expect(sort!.required).toBe(false);
518
+ expect(out.query).toMatch(/orderBy\s*:\s*\$sort\b/);
519
+ });
520
+
521
+ it("promotes a whole-argument $first to a typed Int variable", async () => {
522
+ const out = await buildAggregate(
523
+ {
524
+ org: ORG,
525
+ object: "Account",
526
+ groupBy: ["Industry"],
527
+ aggregations: [{ function: "count" }],
528
+ first: "$first",
529
+ },
530
+ noopPrimeDeps(),
531
+ );
532
+ const v = out.variables.find((x) => x.name === "first");
533
+ expect(v).toBeDefined();
534
+ expect(v!.type).toBe("Int");
535
+ expect(v!.required).toBe(false);
536
+ expect(out.query).toMatch(/first\s*:\s*\$first\b/);
537
+ });
538
+
539
+ it("numeric first still renders as a literal after whole-arg support", async () => {
540
+ const out = await buildAggregate(
541
+ {
542
+ org: ORG,
543
+ object: "Account",
544
+ groupBy: ["Industry"],
545
+ aggregations: [{ function: "count" }],
546
+ first: 5,
547
+ },
548
+ noopPrimeDeps(),
549
+ );
550
+ expect(out.variables.find((x) => x.name === "first")).toBeUndefined();
551
+ expect(out.query).toMatch(/first\s*:\s*5\b/);
552
+ });
553
+
554
+ it("leaf filter promotion still works after whole-arg support", async () => {
555
+ const out = await buildAggregate(
556
+ {
557
+ org: ORG,
558
+ object: "Order",
559
+ groupBy: [],
560
+ aggregations: [{ function: "count" }],
561
+ filter: { Status: { eq: "$status" } },
562
+ },
563
+ noopPrimeDeps(),
564
+ );
565
+ expect(out.variables.find((v) => v.name === "status")).toBeDefined();
566
+ expect(out.query).toMatch(/\$status\b/);
567
+ expect(out.query).not.toMatch(/where\s*:\s*\$status\b/); // leaf, not whole-arg
568
+ });
569
+
485
570
  it("filter without $vars renders inline values", async () => {
486
571
  const out = await buildAggregate(
487
572
  {
@@ -23,7 +23,7 @@ import {
23
23
  selectLeaf,
24
24
  } from "../lib/session.js";
25
25
  import { aggregatePath } from "../lib/uiapi.js";
26
- import { normalizeOrderBy, promoteVariables } from "../lib/variable-promotion.js";
26
+ import { normalizeOrderBy, promoteArg } from "../lib/variable-promotion.js";
27
27
 
28
28
  const FIELD_REQUIRED_FNS = new Set<AggregationSpec["function"]>(["sum", "avg", "min", "max"]);
29
29
 
@@ -76,8 +76,15 @@ export async function buildAggregate(spec: AggregateSpec, deps?: PrimeDeps): Pro
76
76
  deepSetArg(session, connectionPath, "after", [], "$after");
77
77
 
78
78
  if (spec.filter) {
79
- promoteVariables(session, schema, connectionPath, "where", spec.filter, extraWarnings);
80
- deepSetArg(session, connectionPath, "where", [], JSON.stringify(spec.filter));
79
+ const { rendered } = promoteArg(
80
+ session,
81
+ schema,
82
+ connectionPath,
83
+ "where",
84
+ spec.filter,
85
+ extraWarnings,
86
+ );
87
+ deepSetArg(session, connectionPath, "where", [], rendered);
81
88
  }
82
89
 
83
90
  const orderBy = normalizeOrderBy(spec.orderBy);
@@ -87,12 +94,20 @@ export async function buildAggregate(spec: AggregateSpec, deps?: PrimeDeps): Pro
87
94
  );
88
95
  }
89
96
  if (orderBy) {
90
- promoteVariables(session, schema, connectionPath, "orderBy", orderBy, extraWarnings);
91
- deepSetArg(session, connectionPath, "orderBy", [], JSON.stringify(orderBy));
97
+ const { rendered } = promoteArg(
98
+ session,
99
+ schema,
100
+ connectionPath,
101
+ "orderBy",
102
+ orderBy,
103
+ extraWarnings,
104
+ );
105
+ deepSetArg(session, connectionPath, "orderBy", [], rendered);
92
106
  }
93
107
 
94
108
  if (spec.first !== undefined) {
95
- deepSetArg(session, connectionPath, "first", [], String(spec.first));
109
+ const { rendered } = promoteArg(session, schema, connectionPath, "first", spec.first);
110
+ deepSetArg(session, connectionPath, "first", [], rendered);
96
111
  }
97
112
 
98
113
  selectLeaf(session, [...connectionPath, "pageInfo", "hasNextPage"]);
@@ -94,9 +94,9 @@ export interface AggregateSpec {
94
94
  object: string;
95
95
  groupBy?: GroupByElement[];
96
96
  aggregations?: AggregationSpec[];
97
- filter?: Record<string, unknown>;
98
- orderBy?: Record<string, unknown> | Record<string, unknown>[];
99
- first?: number;
97
+ filter?: Record<string, unknown> | string;
98
+ orderBy?: Record<string, unknown> | Record<string, unknown>[] | string;
99
+ first?: number | string;
100
100
  operationName?: string;
101
101
  }
102
102
 
@@ -26,12 +26,14 @@ const SCHEMA = buildSchema(`
26
26
  type Query { uiapi: UIAPI! }
27
27
  type UIAPI { aggregate: RecordQueryAggregate! }
28
28
  type RecordQueryAggregate {
29
- Account(first: Int, after: String, where: Account_Filter, groupBy: Account_GroupBy): AccountAggregateConnection
29
+ Account(first: Int, after: String, where: Account_Filter, orderBy: Account_OrderBy, groupBy: Account_GroupBy): AccountAggregateConnection
30
30
  }
31
31
  input Account_Filter { Industry: PicklistOperators }
32
32
  input Account_GroupBy { Industry: GroupByClause }
33
+ input Account_OrderBy { Industry: OrderByValue }
33
34
  input PicklistOperators { eq: String }
34
35
  input GroupByClause { group: Boolean }
36
+ input OrderByValue { order: String }
35
37
 
36
38
  type AccountAggregateConnection {
37
39
  edges: [AccountAggregateEdge!]!
@@ -176,6 +178,223 @@ describe("mcp/tools/sf-gql-aggregate", () => {
176
178
  }
177
179
  });
178
180
 
181
+ it("tools/call accepts a whole-argument $filter placeholder", async () => {
182
+ const { client, server } = await connect();
183
+ try {
184
+ const result = await client.callTool({
185
+ name: "sf_gql_aggregate",
186
+ arguments: {
187
+ org: ORG,
188
+ object: "Account",
189
+ groupBy: ["Industry"],
190
+ aggregations: [{ function: "count" }],
191
+ filter: "$filter",
192
+ },
193
+ });
194
+ expect(result.isError).toBeFalsy();
195
+ const content = result.content as { type: string; text?: string }[];
196
+ const parsed = JSON.parse(content[0]?.text ?? "{}") as {
197
+ query: string;
198
+ variables: { name: string; type: string }[];
199
+ };
200
+ expect(parsed.query).toMatch(/where\s*:\s*\$filter\b/);
201
+ expect(parsed.variables.find((v) => v.name === "filter")?.type).toBe("Account_Filter");
202
+ } finally {
203
+ await client.close();
204
+ await server.close();
205
+ }
206
+ });
207
+
208
+ it("tools/call rejects a malformed whole-argument filter placeholder", async () => {
209
+ const { client, server } = await connect();
210
+ try {
211
+ const result = await client.callTool({
212
+ name: "sf_gql_aggregate",
213
+ arguments: {
214
+ org: ORG,
215
+ object: "Account",
216
+ groupBy: ["Industry"],
217
+ aggregations: [{ function: "count" }],
218
+ filter: "not-a-placeholder",
219
+ },
220
+ });
221
+ expect(result.isError).toBe(true);
222
+ } finally {
223
+ await client.close();
224
+ await server.close();
225
+ }
226
+ });
227
+
228
+ it("tools/list advertises orderBy/filter/first $var branch inline (no lost $ref branches)", async () => {
229
+ const { client, server } = await connect();
230
+ try {
231
+ const list = await client.listTools();
232
+ const tool = list.tools.find((t) => t.name === "sf_gql_aggregate");
233
+ const props = (tool!.inputSchema as { properties: Record<string, unknown> }).properties;
234
+
235
+ // The filter/orderBy/first unions must be self-contained: their advertised
236
+ // JSON Schema must not rely on $ref to express the string branch, because
237
+ // the MCP SDK's converter resolves $refs in ways that have dropped that
238
+ // branch (regressing client-side validation of "$var" inputs). The
239
+ // per-use-site varPlaceholder() factory in AGGREGATE_INPUT exists to keep
240
+ // these branches inlined — this test guards against a DRY refactor to a
241
+ // shared instance silently reintroducing $refs on these args.
242
+ // (Note: aggregations[].alias legitimately emits a $ref elsewhere in the
243
+ // schema — a shared field deduped by zod-to-json-schema, unrelated to and
244
+ // harmless for the $var-promotion path — so we assert per-arg, not whole.)
245
+ for (const key of ["orderBy", "filter", "first"]) {
246
+ const schema = JSON.stringify(props[key]);
247
+ expect(schema, `${key} must not express its union via $ref`).not.toContain("$ref");
248
+ expect(schema, `${key} must inline a string $var branch`).toMatch(/"type":"string"/);
249
+ expect(schema, `${key} must carry the $var regex pattern`).toContain("\\\\$"); // pattern ^\$...
250
+ }
251
+ } finally {
252
+ await client.close();
253
+ await server.close();
254
+ }
255
+ });
256
+
257
+ it("accepts a whole-argument $first string and $orderBy string", async () => {
258
+ const { client, server } = await connect();
259
+ try {
260
+ const res = await client.callTool({
261
+ name: "sf_gql_aggregate",
262
+ arguments: {
263
+ org: ORG,
264
+ object: "Account",
265
+ groupBy: ["Industry"],
266
+ aggregations: [{ function: "count" }],
267
+ first: "$first",
268
+ orderBy: "$orderBy",
269
+ },
270
+ });
271
+ expect(res.isError).toBeFalsy();
272
+ const content = res.content as { type: string; text?: string }[];
273
+ const out = JSON.parse(content[0]?.text ?? "{}") as {
274
+ query: string;
275
+ variables: { name: string; type: string }[];
276
+ };
277
+ expect(out.query).toMatch(/first\s*:\s*\$first\b/);
278
+ expect(out.query).toMatch(/orderBy\s*:\s*\$orderBy\b/);
279
+ expect(out.variables.find((v) => v.name === "first")).toBeDefined();
280
+ expect(out.variables.find((v) => v.name === "orderBy")?.type).toBe("Account_OrderBy");
281
+ } finally {
282
+ await client.close();
283
+ await server.close();
284
+ }
285
+ });
286
+
287
+ it("rejects an invalid $first placeholder", async () => {
288
+ const { client, server } = await connect();
289
+ try {
290
+ const result = await client.callTool({
291
+ name: "sf_gql_aggregate",
292
+ arguments: { org: ORG, object: "Account", first: "$1bad" },
293
+ });
294
+ expect(result.isError).toBe(true);
295
+ } finally {
296
+ await client.close();
297
+ await server.close();
298
+ }
299
+ });
300
+
301
+ it("accepts a JSON-stringified filter object (model serialization tolerance)", async () => {
302
+ const { client, server } = await connect();
303
+ try {
304
+ const res = await client.callTool({
305
+ name: "sf_gql_aggregate",
306
+ arguments: {
307
+ org: ORG,
308
+ object: "Account",
309
+ groupBy: ["Industry"],
310
+ aggregations: [{ function: "count" }],
311
+ filter: '{"Industry":{"eq":"$q"}}',
312
+ },
313
+ });
314
+ const content = res.content as { type: string; text?: string }[];
315
+ const out = JSON.parse(content[0]?.text ?? "{}") as {
316
+ query: string;
317
+ variables: { name: string }[];
318
+ };
319
+ // coerced to object, leaf $q promoted
320
+ expect(out.variables.find((v) => v.name === "q")).toBeDefined();
321
+ expect(out.query).toMatch(/Industry\s*:\s*\{\s*eq\s*:\s*\$q/);
322
+ } finally {
323
+ await client.close();
324
+ await server.close();
325
+ }
326
+ });
327
+
328
+ it("accepts a stringified number for first", async () => {
329
+ const { client, server } = await connect();
330
+ try {
331
+ const res = await client.callTool({
332
+ name: "sf_gql_aggregate",
333
+ arguments: { org: ORG, object: "Account", first: "25" },
334
+ });
335
+ const content = res.content as { type: string; text?: string }[];
336
+ const out = JSON.parse(content[0]?.text ?? "{}") as { query: string };
337
+ expect(out.query).toMatch(/first\s*:\s*25\b/);
338
+ } finally {
339
+ await client.close();
340
+ await server.close();
341
+ }
342
+ });
343
+
344
+ it("accepts a double-quoted $var placeholder (model double-stringify)", async () => {
345
+ const { client, server } = await connect();
346
+ try {
347
+ const res = await client.callTool({
348
+ name: "sf_gql_aggregate",
349
+ arguments: {
350
+ org: ORG,
351
+ object: "Account",
352
+ groupBy: ["Industry"],
353
+ aggregations: [{ function: "count" }],
354
+ filter: '"$filter"',
355
+ },
356
+ });
357
+ const content = res.content as { type: string; text?: string }[];
358
+ const out = JSON.parse(content[0]?.text ?? "{}") as {
359
+ query: string;
360
+ variables: { name: string }[];
361
+ };
362
+ expect(out.query).toMatch(/where\s*:\s*\$filter\b/);
363
+ expect(out.variables.find((v) => v.name === "filter")).toBeDefined();
364
+ } finally {
365
+ await client.close();
366
+ await server.close();
367
+ }
368
+ });
369
+
370
+ it("rejects a non-JSON garbage string for filter", async () => {
371
+ const { client, server } = await connect();
372
+ try {
373
+ const result = await client.callTool({
374
+ name: "sf_gql_aggregate",
375
+ arguments: { org: ORG, object: "Account", filter: "not json{" },
376
+ });
377
+ expect(result.isError).toBe(true);
378
+ } finally {
379
+ await client.close();
380
+ await server.close();
381
+ }
382
+ });
383
+
384
+ it("rejects garbage string for first (abc)", async () => {
385
+ const { client, server } = await connect();
386
+ try {
387
+ const result = await client.callTool({
388
+ name: "sf_gql_aggregate",
389
+ arguments: { org: ORG, object: "Account", first: "abc" },
390
+ });
391
+ expect(result.isError).toBe(true);
392
+ } finally {
393
+ await client.close();
394
+ await server.close();
395
+ }
396
+ });
397
+
179
398
  it("tools/call rejects invalid GraphQL Names in object/operationName", async () => {
180
399
  const { client, server } = await connect();
181
400
  try {
@@ -205,24 +205,33 @@ export const AGGREGATE_INPUT = z.object({
205
205
  .describe(
206
206
  "List of aggregation functions to compute. Each entry projects under its alias (or default `<function><PascalCaseField>`).",
207
207
  ),
208
- filter: z
209
- .record(z.unknown())
208
+ filter: jsonCoercible(
209
+ z.union([z.record(z.unknown()), varPlaceholder(), jsonLiteralString(), quotedString()]),
210
+ )
210
211
  .optional()
211
212
  .describe(
212
- "<Object>_Filter applied to every aggregation. String leaves matching $varName promote to typed query variables.",
213
+ '<Object>_Filter applied to every aggregation. String leaves matching $varName promote to typed query variables. Pass a single "$varName" string to promote the WHOLE filter to one optional <Object>_Filter variable (bind it to null for "no filter → all buckets").',
213
214
  ),
214
- orderBy: z
215
- .union([z.record(z.unknown()), z.array(z.record(z.unknown()))])
215
+ orderBy: jsonCoercible(
216
+ z.union([
217
+ z.record(z.unknown()),
218
+ z.array(z.record(z.unknown())),
219
+ varPlaceholder(),
220
+ jsonLiteralString(),
221
+ quotedString(),
222
+ ]),
223
+ )
216
224
  .optional()
217
225
  .describe(
218
- "<Object>_OrderBy. Singleton object preferred; arrays are collapsed to the first entry. String leaves matching $varName promote to typed query variables.",
226
+ '<Object>_OrderBy. Singleton object preferred; arrays are collapsed to the first entry. String leaves matching $varName promote to typed query variables. Pass a single "$varName" string to promote the whole orderBy to one optional <Object>_OrderBy variable.',
219
227
  ),
220
- first: z
221
- .number()
222
- .int()
223
- .positive()
228
+ first: jsonCoercible(
229
+ z.union([z.number().int().positive(), varPlaceholder(), intLiteralString(), quotedString()]),
230
+ )
224
231
  .optional()
225
- .describe("Connection page size (top-N pattern). No default — omit for all buckets."),
232
+ .describe(
233
+ 'Connection page size (top-N pattern). No default — omit for all buckets. Pass a single "$varName" string to promote it to an optional Int variable.',
234
+ ),
226
235
  operationName: graphqlName(
227
236
  "Override the GraphQL operation name. Defaults to <Object>Aggregate.",
228
237
  ).optional(),