@salesforce/graphiti 10.10.2
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/AGENT_GUIDE.md +424 -0
- package/CHANGELOG.md +448 -0
- package/LICENSE.txt +82 -0
- package/README.md +204 -0
- package/TASK.md +249 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +683 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/args.d.ts +13 -0
- package/dist/commands/args.js +207 -0
- package/dist/commands/args.js.map +1 -0
- package/dist/commands/build.d.ts +11 -0
- package/dist/commands/build.js +209 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/connect.d.ts +8 -0
- package/dist/commands/connect.js +55 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/describe.d.ts +6 -0
- package/dist/commands/describe.js +229 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/meta.d.ts +9 -0
- package/dist/commands/meta.js +140 -0
- package/dist/commands/meta.js.map +1 -0
- package/dist/commands/navigate.d.ts +14 -0
- package/dist/commands/navigate.js +105 -0
- package/dist/commands/navigate.js.map +1 -0
- package/dist/commands/query-helpers.d.ts +80 -0
- package/dist/commands/query-helpers.js +865 -0
- package/dist/commands/query-helpers.js.map +1 -0
- package/dist/commands/query.d.ts +26 -0
- package/dist/commands/query.js +901 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/review.d.ts +18 -0
- package/dist/commands/review.js +533 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/session-mgmt.d.ts +25 -0
- package/dist/commands/session-mgmt.js +206 -0
- package/dist/commands/session-mgmt.js.map +1 -0
- package/dist/commands/type.d.ts +6 -0
- package/dist/commands/type.js +342 -0
- package/dist/commands/type.js.map +1 -0
- package/dist/commands/validate-input.d.ts +6 -0
- package/dist/commands/validate-input.js +32 -0
- package/dist/commands/validate-input.js.map +1 -0
- package/dist/intent/build-aggregate.d.ts +33 -0
- package/dist/intent/build-aggregate.js +134 -0
- package/dist/intent/build-aggregate.js.map +1 -0
- package/dist/intent/build-create.d.ts +14 -0
- package/dist/intent/build-create.js +16 -0
- package/dist/intent/build-create.js.map +1 -0
- package/dist/intent/build-delete.d.ts +30 -0
- package/dist/intent/build-delete.js +53 -0
- package/dist/intent/build-delete.js.map +1 -0
- package/dist/intent/build-detail.d.ts +32 -0
- package/dist/intent/build-detail.js +80 -0
- package/dist/intent/build-detail.js.map +1 -0
- package/dist/intent/build-discover.d.ts +30 -0
- package/dist/intent/build-discover.js +149 -0
- package/dist/intent/build-discover.js.map +1 -0
- package/dist/intent/build-list.d.ts +28 -0
- package/dist/intent/build-list.js +75 -0
- package/dist/intent/build-list.js.map +1 -0
- package/dist/intent/build-mutation.d.ts +23 -0
- package/dist/intent/build-mutation.js +54 -0
- package/dist/intent/build-mutation.js.map +1 -0
- package/dist/intent/build-output.d.ts +27 -0
- package/dist/intent/build-output.js +60 -0
- package/dist/intent/build-output.js.map +1 -0
- package/dist/intent/build-raw.d.ts +23 -0
- package/dist/intent/build-raw.js +54 -0
- package/dist/intent/build-raw.js.map +1 -0
- package/dist/intent/build-update.d.ts +14 -0
- package/dist/intent/build-update.js +16 -0
- package/dist/intent/build-update.js.map +1 -0
- package/dist/intent/get-schema-with-priming.d.ts +26 -0
- package/dist/intent/get-schema-with-priming.js +32 -0
- package/dist/intent/get-schema-with-priming.js.map +1 -0
- package/dist/intent/select-child-relationship.d.ts +19 -0
- package/dist/intent/select-child-relationship.js +38 -0
- package/dist/intent/select-child-relationship.js.map +1 -0
- package/dist/intent/types.d.ts +159 -0
- package/dist/intent/types.js +21 -0
- package/dist/intent/types.js.map +1 -0
- package/dist/lib/apply-command.d.ts +15 -0
- package/dist/lib/apply-command.js +238 -0
- package/dist/lib/apply-command.js.map +1 -0
- package/dist/lib/auth.d.ts +38 -0
- package/dist/lib/auth.js +113 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/codegen.d.ts +32 -0
- package/dist/lib/codegen.js +700 -0
- package/dist/lib/codegen.js.map +1 -0
- package/dist/lib/command-registry.d.ts +59 -0
- package/dist/lib/command-registry.js +366 -0
- package/dist/lib/command-registry.js.map +1 -0
- package/dist/lib/formatter.d.ts +76 -0
- package/dist/lib/formatter.js +419 -0
- package/dist/lib/formatter.js.map +1 -0
- package/dist/lib/fs-utils.d.ts +23 -0
- package/dist/lib/fs-utils.js +46 -0
- package/dist/lib/fs-utils.js.map +1 -0
- package/dist/lib/graphql-name.d.ts +27 -0
- package/dist/lib/graphql-name.js +32 -0
- package/dist/lib/graphql-name.js.map +1 -0
- package/dist/lib/interactive.d.ts +6 -0
- package/dist/lib/interactive.js +562 -0
- package/dist/lib/interactive.js.map +1 -0
- package/dist/lib/introspect.d.ts +40 -0
- package/dist/lib/introspect.js +280 -0
- package/dist/lib/introspect.js.map +1 -0
- package/dist/lib/object-info.d.ts +79 -0
- package/dist/lib/object-info.js +313 -0
- package/dist/lib/object-info.js.map +1 -0
- package/dist/lib/path-selection.d.ts +50 -0
- package/dist/lib/path-selection.js +146 -0
- package/dist/lib/path-selection.js.map +1 -0
- package/dist/lib/prime-schema.d.ts +59 -0
- package/dist/lib/prime-schema.js +158 -0
- package/dist/lib/prime-schema.js.map +1 -0
- package/dist/lib/query-builder.d.ts +10 -0
- package/dist/lib/query-builder.js +168 -0
- package/dist/lib/query-builder.js.map +1 -0
- package/dist/lib/query-commands.d.ts +19 -0
- package/dist/lib/query-commands.js +262 -0
- package/dist/lib/query-commands.js.map +1 -0
- package/dist/lib/session.d.ts +205 -0
- package/dist/lib/session.js +1075 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/tokenize.d.ts +12 -0
- package/dist/lib/tokenize.js +48 -0
- package/dist/lib/tokenize.js.map +1 -0
- package/dist/lib/uiapi.d.ts +109 -0
- package/dist/lib/uiapi.js +159 -0
- package/dist/lib/uiapi.js.map +1 -0
- package/dist/lib/validator.d.ts +27 -0
- package/dist/lib/validator.js +100 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/lib/variable-promotion.d.ts +69 -0
- package/dist/lib/variable-promotion.js +95 -0
- package/dist/lib/variable-promotion.js.map +1 -0
- package/dist/lib/walker.d.ts +147 -0
- package/dist/lib/walker.js +723 -0
- package/dist/lib/walker.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +34 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stdio.d.ts +7 -0
- package/dist/mcp/stdio.js +25 -0
- package/dist/mcp/stdio.js.map +1 -0
- package/dist/mcp/tools/echo.d.ts +7 -0
- package/dist/mcp/tools/echo.js +17 -0
- package/dist/mcp/tools/echo.js.map +1 -0
- package/dist/mcp/tools/sf-gql-aggregate.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-aggregate.js +75 -0
- package/dist/mcp/tools/sf-gql-aggregate.js.map +1 -0
- package/dist/mcp/tools/sf-gql-create.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-create.js +35 -0
- package/dist/mcp/tools/sf-gql-create.js.map +1 -0
- package/dist/mcp/tools/sf-gql-delete.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-delete.js +31 -0
- package/dist/mcp/tools/sf-gql-delete.js.map +1 -0
- package/dist/mcp/tools/sf-gql-detail.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-detail.js +58 -0
- package/dist/mcp/tools/sf-gql-detail.js.map +1 -0
- package/dist/mcp/tools/sf-gql-discover.d.ts +9 -0
- package/dist/mcp/tools/sf-gql-discover.js +51 -0
- package/dist/mcp/tools/sf-gql-discover.js.map +1 -0
- package/dist/mcp/tools/sf-gql-list.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-list.js +53 -0
- package/dist/mcp/tools/sf-gql-list.js.map +1 -0
- package/dist/mcp/tools/sf-gql-raw.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-raw.js +39 -0
- package/dist/mcp/tools/sf-gql-raw.js.map +1 -0
- package/dist/mcp/tools/sf-gql-update.d.ts +11 -0
- package/dist/mcp/tools/sf-gql-update.js +35 -0
- package/dist/mcp/tools/sf-gql-update.js.map +1 -0
- package/dist/mcp/tools/shared/zod-schemas.d.ts +49 -0
- package/dist/mcp/tools/shared/zod-schemas.js +46 -0
- package/dist/mcp/tools/shared/zod-schemas.js.map +1 -0
- package/package.json +36 -0
- package/ralph-loop.sh +120 -0
- package/scripts/smoke-orderby.sh +190 -0
- package/src/__tests__/helpers/prime-deps.ts +46 -0
- package/src/__tests__/helpers/schema.ts +73 -0
- package/src/__tests__/helpers/stdout.ts +33 -0
- package/src/__tests__/setup.ts +19 -0
- package/src/cli.ts +764 -0
- package/src/commands/__tests__/query.spec.ts +137 -0
- package/src/commands/args.ts +306 -0
- package/src/commands/build.ts +288 -0
- package/src/commands/connect.ts +60 -0
- package/src/commands/describe.ts +246 -0
- package/src/commands/meta.ts +171 -0
- package/src/commands/navigate.ts +134 -0
- package/src/commands/query-helpers.ts +1202 -0
- package/src/commands/query.ts +1085 -0
- package/src/commands/review.ts +670 -0
- package/src/commands/session-mgmt.ts +256 -0
- package/src/commands/type.ts +437 -0
- package/src/commands/validate-input.ts +38 -0
- package/src/intent/__tests__/build-aggregate.spec.ts +931 -0
- package/src/intent/__tests__/build-create-validation.spec.ts +135 -0
- package/src/intent/__tests__/build-delete.spec.ts +121 -0
- package/src/intent/__tests__/build-detail.spec.ts +333 -0
- package/src/intent/__tests__/build-discover.spec.ts +432 -0
- package/src/intent/__tests__/build-list.spec.ts +284 -0
- package/src/intent/__tests__/build-mutation.spec.ts +108 -0
- package/src/intent/__tests__/build-output.spec.ts +55 -0
- package/src/intent/__tests__/build-raw.spec.ts +153 -0
- package/src/intent/__tests__/build-update-validation.spec.ts +134 -0
- package/src/intent/build-aggregate.ts +182 -0
- package/src/intent/build-create.ts +19 -0
- package/src/intent/build-delete.ts +62 -0
- package/src/intent/build-detail.ts +95 -0
- package/src/intent/build-discover.ts +199 -0
- package/src/intent/build-list.ts +91 -0
- package/src/intent/build-mutation.ts +75 -0
- package/src/intent/build-output.ts +72 -0
- package/src/intent/build-raw.ts +61 -0
- package/src/intent/build-update.ts +19 -0
- package/src/intent/get-schema-with-priming.ts +43 -0
- package/src/intent/select-child-relationship.ts +48 -0
- package/src/intent/types.ts +181 -0
- package/src/lib/__tests__/apply-command.parity.spec.ts +97 -0
- package/src/lib/__tests__/apply-command.spec.ts +171 -0
- package/src/lib/__tests__/auth.spec.ts +292 -0
- package/src/lib/__tests__/formatter.spec.ts +86 -0
- package/src/lib/__tests__/graphql-name.spec.ts +64 -0
- package/src/lib/__tests__/introspect.spec.ts +399 -0
- package/src/lib/__tests__/object-info.spec.ts +124 -0
- package/src/lib/__tests__/path-selection.spec.ts +219 -0
- package/src/lib/__tests__/prime-schema.spec.ts +269 -0
- package/src/lib/__tests__/query-builder.spec.ts +95 -0
- package/src/lib/__tests__/query-commands.spec.ts +74 -0
- package/src/lib/__tests__/session.spec.ts +292 -0
- package/src/lib/__tests__/tokenize.spec.ts +33 -0
- package/src/lib/__tests__/uiapi.spec.ts +192 -0
- package/src/lib/__tests__/variable-promotion.spec.ts +211 -0
- package/src/lib/__tests__/walker.spec.ts +250 -0
- package/src/lib/apply-command.ts +286 -0
- package/src/lib/auth.ts +157 -0
- package/src/lib/codegen.ts +899 -0
- package/src/lib/command-registry.ts +434 -0
- package/src/lib/formatter.ts +587 -0
- package/src/lib/fs-utils.ts +46 -0
- package/src/lib/graphql-name.ts +35 -0
- package/src/lib/interactive.ts +634 -0
- package/src/lib/introspect.ts +320 -0
- package/src/lib/object-info.ts +409 -0
- package/src/lib/path-selection.ts +162 -0
- package/src/lib/prime-schema.ts +195 -0
- package/src/lib/query-builder.ts +193 -0
- package/src/lib/query-commands.ts +290 -0
- package/src/lib/session.ts +1304 -0
- package/src/lib/tokenize.ts +43 -0
- package/src/lib/uiapi.ts +176 -0
- package/src/lib/validator.ts +143 -0
- package/src/lib/variable-promotion.ts +145 -0
- package/src/lib/walker.ts +975 -0
- package/src/mcp/__tests__/server.spec.ts +155 -0
- package/src/mcp/server.ts +38 -0
- package/src/mcp/stdio.ts +29 -0
- package/src/mcp/tools/__tests__/sf-gql-aggregate.spec.ts +173 -0
- package/src/mcp/tools/__tests__/sf-gql-create.spec.ts +235 -0
- package/src/mcp/tools/__tests__/sf-gql-delete.spec.ts +194 -0
- package/src/mcp/tools/__tests__/sf-gql-detail.spec.ts +246 -0
- package/src/mcp/tools/__tests__/sf-gql-discover.spec.ts +320 -0
- package/src/mcp/tools/__tests__/sf-gql-list.spec.ts +128 -0
- package/src/mcp/tools/__tests__/sf-gql-raw.spec.ts +141 -0
- package/src/mcp/tools/__tests__/sf-gql-update.spec.ts +207 -0
- package/src/mcp/tools/echo.ts +24 -0
- package/src/mcp/tools/sf-gql-aggregate.ts +102 -0
- package/src/mcp/tools/sf-gql-create.ts +55 -0
- package/src/mcp/tools/sf-gql-delete.ts +49 -0
- package/src/mcp/tools/sf-gql-detail.ts +85 -0
- package/src/mcp/tools/sf-gql-discover.ts +67 -0
- package/src/mcp/tools/sf-gql-list.ts +73 -0
- package/src/mcp/tools/sf-gql-raw.ts +56 -0
- package/src/mcp/tools/sf-gql-update.ts +55 -0
- package/src/mcp/tools/shared/zod-schemas.ts +55 -0
- package/tsconfig.json +18 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/commands/type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { getOrgAuth } from "../lib/auth.js";
|
|
7
|
+
import { validateInputValue } from "../lib/validator.js";
|
|
8
|
+
import { getSchema } from "../lib/walker.js";
|
|
9
|
+
export async function validateInputCommand(orgAlias, typeName, jsonValue) {
|
|
10
|
+
const auth = await getOrgAuth(orgAlias);
|
|
11
|
+
const schema = getSchema(auth.instanceUrl);
|
|
12
|
+
let parsed;
|
|
13
|
+
try {
|
|
14
|
+
parsed = JSON.parse(jsonValue);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
console.error(`Invalid JSON: ${jsonValue}`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const errors = validateInputValue(schema, typeName, parsed);
|
|
21
|
+
if (errors.length === 0) {
|
|
22
|
+
console.log(`Valid. All fields and operators match ${typeName} schema.`);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(`${errors.length} validation error${errors.length === 1 ? "" : "s"}:`);
|
|
26
|
+
errors.forEach((e, i) => {
|
|
27
|
+
console.log(` ${i + 1}. ${e.path ? `${e.path}: ` : ""}${e.message}`);
|
|
28
|
+
});
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=validate-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-input.js","sourceRoot":"","sources":["../../src/commands/validate-input.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB,EAChB,QAAgB,EAChB,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,UAAU,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { type AggregateSpec, type ToolOutput } from "./types.js";
|
|
7
|
+
import { type PrimeDeps } from "../lib/prime-schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* Build a UIAPI aggregate query against a Salesforce org. Implements
|
|
10
|
+
* `sf_gql_aggregate` intent for the graphiti MCP server (FR-8).
|
|
11
|
+
*
|
|
12
|
+
* Implicit behaviors not visible in the signature:
|
|
13
|
+
* - `aggregations[]` projects each entry under the SObject's aggregate node
|
|
14
|
+
* using `<function><PascalCaseField>` as the default GraphQL alias; pass
|
|
15
|
+
* `alias` to override. Default field is `Id` for `count`/`countDistinct`;
|
|
16
|
+
* `sum`/`avg`/`min`/`max` require a field (FR-8.3).
|
|
17
|
+
* - Duplicate result keys (default or explicit) throw — the caller must
|
|
18
|
+
* disambiguate with aliases (FR-8.4).
|
|
19
|
+
* - `groupBy` accepts flat field names only in v1; each renders as
|
|
20
|
+
* `{Field: {group: true}}` and selects `Field { value }` on the
|
|
21
|
+
* aggregate node so the grouping leaf comes back in the response.
|
|
22
|
+
* Dotted paths throw.
|
|
23
|
+
* - `filter` applies to every aggregation in the call. `$varName` leaves
|
|
24
|
+
* in the filter promote to typed query variables. Per-aggregation
|
|
25
|
+
* filters are not supported (FR-8.6).
|
|
26
|
+
* - Operation name defaults to `<Object>Aggregate`.
|
|
27
|
+
*
|
|
28
|
+
* Throws on invalid `object` or `operationName` (must be valid GraphQL Names),
|
|
29
|
+
* auth-missing or introspection failure (via `getSchemaWithPriming`), on
|
|
30
|
+
* FR-8.3/8.4 spec violations, and on dotted groupBy paths. Never throws on
|
|
31
|
+
* validation or codegen failure (those surface as `warnings[]`).
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildAggregate(spec: AggregateSpec, deps?: PrimeDeps): Promise<ToolOutput>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { buildOutput } from "./build-output.js";
|
|
7
|
+
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
|
+
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
9
|
+
import { addVariable, createSession, createSiblingFieldInstance, deepSetArg, selectLeaf, } from "../lib/session.js";
|
|
10
|
+
import { aggregatePath } from "../lib/uiapi.js";
|
|
11
|
+
import { normalizeOrderBy, promoteVariables } from "../lib/variable-promotion.js";
|
|
12
|
+
const FIELD_REQUIRED_FNS = new Set(["sum", "avg", "min", "max"]);
|
|
13
|
+
/**
|
|
14
|
+
* Build a UIAPI aggregate query against a Salesforce org. Implements
|
|
15
|
+
* `sf_gql_aggregate` intent for the graphiti MCP server (FR-8).
|
|
16
|
+
*
|
|
17
|
+
* Implicit behaviors not visible in the signature:
|
|
18
|
+
* - `aggregations[]` projects each entry under the SObject's aggregate node
|
|
19
|
+
* using `<function><PascalCaseField>` as the default GraphQL alias; pass
|
|
20
|
+
* `alias` to override. Default field is `Id` for `count`/`countDistinct`;
|
|
21
|
+
* `sum`/`avg`/`min`/`max` require a field (FR-8.3).
|
|
22
|
+
* - Duplicate result keys (default or explicit) throw — the caller must
|
|
23
|
+
* disambiguate with aliases (FR-8.4).
|
|
24
|
+
* - `groupBy` accepts flat field names only in v1; each renders as
|
|
25
|
+
* `{Field: {group: true}}` and selects `Field { value }` on the
|
|
26
|
+
* aggregate node so the grouping leaf comes back in the response.
|
|
27
|
+
* Dotted paths throw.
|
|
28
|
+
* - `filter` applies to every aggregation in the call. `$varName` leaves
|
|
29
|
+
* in the filter promote to typed query variables. Per-aggregation
|
|
30
|
+
* filters are not supported (FR-8.6).
|
|
31
|
+
* - Operation name defaults to `<Object>Aggregate`.
|
|
32
|
+
*
|
|
33
|
+
* Throws on invalid `object` or `operationName` (must be valid GraphQL Names),
|
|
34
|
+
* auth-missing or introspection failure (via `getSchemaWithPriming`), on
|
|
35
|
+
* FR-8.3/8.4 spec violations, and on dotted groupBy paths. Never throws on
|
|
36
|
+
* validation or codegen failure (those surface as `warnings[]`).
|
|
37
|
+
*/
|
|
38
|
+
export async function buildAggregate(spec, deps) {
|
|
39
|
+
assertGraphqlName(spec.object, "buildAggregate", "object");
|
|
40
|
+
const { schema, primingNote, instanceUrl } = await getSchemaWithPriming(spec.org, deps);
|
|
41
|
+
const session = createSession(spec.org, "aggregate", instanceUrl);
|
|
42
|
+
session.operationName = spec.operationName ?? `${spec.object}Aggregate`;
|
|
43
|
+
assertGraphqlName(session.operationName, "buildAggregate", "operationName");
|
|
44
|
+
const connectionPath = aggregatePath(spec.object);
|
|
45
|
+
const aggregateNodePath = [...connectionPath, "edges", "node", "aggregate"];
|
|
46
|
+
const groupBy = spec.groupBy ?? [];
|
|
47
|
+
const extraWarnings = [];
|
|
48
|
+
applyGroupBy(session, connectionPath, aggregateNodePath, groupBy);
|
|
49
|
+
if (spec.filter) {
|
|
50
|
+
promoteVariables(session, schema, connectionPath, "where", spec.filter, extraWarnings);
|
|
51
|
+
deepSetArg(session, connectionPath, "where", [], JSON.stringify(spec.filter));
|
|
52
|
+
}
|
|
53
|
+
const orderBy = normalizeOrderBy(spec.orderBy);
|
|
54
|
+
if (Array.isArray(spec.orderBy) && spec.orderBy.length > 1) {
|
|
55
|
+
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 } }).");
|
|
56
|
+
}
|
|
57
|
+
if (orderBy) {
|
|
58
|
+
promoteVariables(session, schema, connectionPath, "orderBy", orderBy, extraWarnings);
|
|
59
|
+
deepSetArg(session, connectionPath, "orderBy", [], JSON.stringify(orderBy));
|
|
60
|
+
}
|
|
61
|
+
if (spec.first !== undefined) {
|
|
62
|
+
deepSetArg(session, connectionPath, "first", [], String(spec.first));
|
|
63
|
+
}
|
|
64
|
+
addVariable(session, "after", "String");
|
|
65
|
+
deepSetArg(session, connectionPath, "after", [], "$after");
|
|
66
|
+
selectLeaf(session, [...connectionPath, "pageInfo", "hasNextPage"]);
|
|
67
|
+
selectLeaf(session, [...connectionPath, "pageInfo", "endCursor"]);
|
|
68
|
+
// FR-8.2 — `aggregate(Account)` with no aggregations and no groupBy
|
|
69
|
+
// defaults to `count` over `Id` (the SOQL `select count(*)` analogue).
|
|
70
|
+
const requested = spec.aggregations ?? [];
|
|
71
|
+
const aggregations = requested.length === 0 && groupBy.length === 0 ? [{ function: "count" }] : requested;
|
|
72
|
+
// Pre-seed with groupBy field names: each renders as a top-level response
|
|
73
|
+
// key on the aggregate node alongside aggregation aliases. An aggregation
|
|
74
|
+
// alias colliding with a groupBy key produces invalid GraphQL (different
|
|
75
|
+
// shapes, same response key — spec §5.3.2).
|
|
76
|
+
const seenKeys = new Set(groupBy.map((el) => (typeof el === "string" ? el : el.field)));
|
|
77
|
+
for (const agg of aggregations) {
|
|
78
|
+
if (agg.field === undefined && FIELD_REQUIRED_FNS.has(agg.function)) {
|
|
79
|
+
throw new Error(`buildAggregate: aggregation '${agg.function}' requires a field (FR-8.3)`);
|
|
80
|
+
}
|
|
81
|
+
if (agg.alias !== undefined) {
|
|
82
|
+
assertGraphqlName(agg.alias, "buildAggregate", "alias");
|
|
83
|
+
}
|
|
84
|
+
const field = agg.field ?? "Id";
|
|
85
|
+
const key = agg.alias ?? defaultKey(agg.function, field);
|
|
86
|
+
if (seenKeys.has(key)) {
|
|
87
|
+
throw new Error(`buildAggregate: duplicate aggregation key '${key}' — set distinct aliases (FR-8.4)`);
|
|
88
|
+
}
|
|
89
|
+
seenKeys.add(key);
|
|
90
|
+
applyAggregation(session, aggregateNodePath, agg, field, key);
|
|
91
|
+
}
|
|
92
|
+
return buildOutput(session, schema, primingNote, extraWarnings);
|
|
93
|
+
}
|
|
94
|
+
function applyGroupBy(session, connectionPath, aggregateNodePath, groupBy) {
|
|
95
|
+
if (groupBy.length === 0)
|
|
96
|
+
return;
|
|
97
|
+
const seenGroupByFields = new Set();
|
|
98
|
+
for (const element of groupBy) {
|
|
99
|
+
const field = typeof element === "string" ? element : element.field;
|
|
100
|
+
if (seenGroupByFields.has(field)) {
|
|
101
|
+
throw new Error(`buildAggregate: duplicate groupBy field '${field}'`);
|
|
102
|
+
}
|
|
103
|
+
seenGroupByFields.add(field);
|
|
104
|
+
if (field.includes(".")) {
|
|
105
|
+
throw new Error(`buildAggregate: dotted groupBy field '${field}' is not supported in v1 (flat-only)`);
|
|
106
|
+
}
|
|
107
|
+
assertGraphqlName(field, "buildAggregate", "groupBy field");
|
|
108
|
+
if (typeof element === "string") {
|
|
109
|
+
deepSetArg(session, connectionPath, "groupBy", [field, "group"], "true");
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
deepSetArg(session, connectionPath, "groupBy", [field, "function"], element.function);
|
|
113
|
+
}
|
|
114
|
+
selectLeaf(session, [...aggregateNodePath, field, "value"]);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function applyAggregation(session, aggregateNodePath, agg, field, key) {
|
|
118
|
+
const fieldPath = [...aggregateNodePath, field];
|
|
119
|
+
createSiblingFieldInstance(session, fieldPath, key);
|
|
120
|
+
selectLeaf(session, [...fieldPath, agg.function, "value"]);
|
|
121
|
+
}
|
|
122
|
+
function defaultKey(fn, field) {
|
|
123
|
+
return `${fn}${pascalCase(field)}`;
|
|
124
|
+
}
|
|
125
|
+
function pascalCase(field) {
|
|
126
|
+
const stripped = field.endsWith("__c") ? field.slice(0, -3) : field;
|
|
127
|
+
return stripped
|
|
128
|
+
.replace(/[^a-zA-Z0-9]/g, " ")
|
|
129
|
+
.split(/\s+/)
|
|
130
|
+
.filter(Boolean)
|
|
131
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
132
|
+
.join("");
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=build-aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-aggregate.js","sourceRoot":"","sources":["../../src/intent/build-aggregate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAOpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EACN,WAAW,EACX,aAAa,EACb,0BAA0B,EAC1B,UAAU,EAEV,UAAU,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAElF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAA8B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAmB,EAAE,IAAgB;IACzE,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAE3D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAClE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,IAAI,CAAC,MAAM,WAAW,CAAC;IACxE,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAE5E,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,CAAC,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAElE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACvF,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,aAAa,CAAC,IAAI,CACjB,yMAAyM,CACzM,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACb,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACrF,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE3D,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAElE,oEAAoE;IACpE,uEAAuE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IAC1C,MAAM,YAAY,GACjB,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtF,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChG,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,QAAQ,6BAA6B,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACd,8CAA8C,GAAG,mCAAmC,CACpF,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CACpB,OAAqB,EACrB,cAAwB,EACxB,iBAA2B,EAC3B,OAAyB;IAEzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACpE,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,GAAG,CAAC,CAAC;QACvE,CAAC;QACD,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACd,yCAAyC,KAAK,sCAAsC,CACpF,CAAC;QACH,CAAC;QACD,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACP,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvF,CAAC;QACD,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,iBAAiB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CACxB,OAAqB,EACrB,iBAA2B,EAC3B,GAAoB,EACpB,KAAa,EACb,GAAW;IAEX,MAAM,SAAS,GAAG,CAAC,GAAG,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAChD,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACpD,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,EAAU,EAAE,KAAa;IAC5C,OAAO,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,OAAO,QAAQ;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { type CreateSpec, type ToolOutput } from "./types.js";
|
|
7
|
+
import { type PrimeDeps } from "../lib/prime-schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* Build a UIAPI create mutation against a Salesforce org. Implements
|
|
10
|
+
* `sf_gql_create` intent for the graphiti MCP server (FR-5.6). Thin
|
|
11
|
+
* wrapper around `buildMutation` with `op = "Create"`; see that helper
|
|
12
|
+
* for behavior details.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildCreate(spec: CreateSpec, deps?: PrimeDeps): Promise<ToolOutput>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { buildMutation } from "./build-mutation.js";
|
|
7
|
+
/**
|
|
8
|
+
* Build a UIAPI create mutation against a Salesforce org. Implements
|
|
9
|
+
* `sf_gql_create` intent for the graphiti MCP server (FR-5.6). Thin
|
|
10
|
+
* wrapper around `buildMutation` with `op = "Create"`; see that helper
|
|
11
|
+
* for behavior details.
|
|
12
|
+
*/
|
|
13
|
+
export async function buildCreate(spec, deps) {
|
|
14
|
+
return buildMutation(spec, "Create", deps);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=build-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-create.js","sourceRoot":"","sources":["../../src/intent/build-create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAgB;IACnE,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { type DeleteSpec, type ToolOutput } from "./types.js";
|
|
7
|
+
import { type PrimeDeps } from "../lib/prime-schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* Build a UIAPI delete mutation against a Salesforce org. Implements
|
|
10
|
+
* `sf_gql_delete` intent for the graphiti MCP server (FR-5.7).
|
|
11
|
+
*
|
|
12
|
+
* Unlike create/update, delete is uniform across SObjects:
|
|
13
|
+
* - The input type is the schema-wide `RecordDeleteInput!`, NOT an
|
|
14
|
+
* `<Object>`-specific input. Every `<Object>Delete` mutation field
|
|
15
|
+
* accepts the same `RecordDeleteInput!` carrying the record `Id`.
|
|
16
|
+
* - The result is a `RecordDeletePayload` exposing only `Id` (a plain
|
|
17
|
+
* `ID`, not a value wrapper), so the selection is always `Id` and
|
|
18
|
+
* there is no `Record` sub-path — hence no `returnFields`.
|
|
19
|
+
*
|
|
20
|
+
* Implicit behaviors not visible in the signature:
|
|
21
|
+
* - `inputVariable` defaults to `"input"`, declared as
|
|
22
|
+
* `$<name>: RecordDeleteInput!`. A leading `$` is stripped.
|
|
23
|
+
* - Operation name defaults to `Delete<Object>` (e.g. `DeleteAccount`).
|
|
24
|
+
*
|
|
25
|
+
* Throws on invalid `object`, `inputVariable`, or `operationName` (must be
|
|
26
|
+
* valid GraphQL Names), auth-missing, or introspection failure (via
|
|
27
|
+
* `getSchemaWithPriming`); never throws on validation or codegen
|
|
28
|
+
* failure (those surface as `warnings[]`).
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildDelete(spec: DeleteSpec, deps?: PrimeDeps): Promise<ToolOutput>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { buildOutput } from "./build-output.js";
|
|
7
|
+
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
|
+
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
9
|
+
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
10
|
+
import { addVariable, createSession, deepSetArg } from "../lib/session.js";
|
|
11
|
+
import { mutationFieldPath } from "../lib/uiapi.js";
|
|
12
|
+
/**
|
|
13
|
+
* Build a UIAPI delete mutation against a Salesforce org. Implements
|
|
14
|
+
* `sf_gql_delete` intent for the graphiti MCP server (FR-5.7).
|
|
15
|
+
*
|
|
16
|
+
* Unlike create/update, delete is uniform across SObjects:
|
|
17
|
+
* - The input type is the schema-wide `RecordDeleteInput!`, NOT an
|
|
18
|
+
* `<Object>`-specific input. Every `<Object>Delete` mutation field
|
|
19
|
+
* accepts the same `RecordDeleteInput!` carrying the record `Id`.
|
|
20
|
+
* - The result is a `RecordDeletePayload` exposing only `Id` (a plain
|
|
21
|
+
* `ID`, not a value wrapper), so the selection is always `Id` and
|
|
22
|
+
* there is no `Record` sub-path — hence no `returnFields`.
|
|
23
|
+
*
|
|
24
|
+
* Implicit behaviors not visible in the signature:
|
|
25
|
+
* - `inputVariable` defaults to `"input"`, declared as
|
|
26
|
+
* `$<name>: RecordDeleteInput!`. A leading `$` is stripped.
|
|
27
|
+
* - Operation name defaults to `Delete<Object>` (e.g. `DeleteAccount`).
|
|
28
|
+
*
|
|
29
|
+
* Throws on invalid `object`, `inputVariable`, or `operationName` (must be
|
|
30
|
+
* valid GraphQL Names), auth-missing, or introspection failure (via
|
|
31
|
+
* `getSchemaWithPriming`); never throws on validation or codegen
|
|
32
|
+
* failure (those surface as `warnings[]`).
|
|
33
|
+
*/
|
|
34
|
+
export async function buildDelete(spec, deps) {
|
|
35
|
+
assertGraphqlName(spec.object, "buildDelete", "object");
|
|
36
|
+
const inputVar = (spec.inputVariable ?? "input").replace(/^\$/, "");
|
|
37
|
+
assertGraphqlName(inputVar, "buildDelete", "inputVariable");
|
|
38
|
+
const { schema, primingNote, instanceUrl } = await getSchemaWithPriming(spec.org, deps);
|
|
39
|
+
const session = createSession(spec.org, "mutation", instanceUrl);
|
|
40
|
+
session.operationName = spec.operationName ?? "Delete" + spec.object;
|
|
41
|
+
assertGraphqlName(session.operationName, "buildDelete", "operationName");
|
|
42
|
+
const fieldPath = mutationFieldPath(spec.object, "Delete");
|
|
43
|
+
addVariable(session, inputVar, "RecordDeleteInput!");
|
|
44
|
+
deepSetArg(session, fieldPath, "input", [], "$" + inputVar);
|
|
45
|
+
// Delete payloads expose only `Id` (a plain ID — never a value wrapper).
|
|
46
|
+
// The selection is a literal single segment on the mutation field, so
|
|
47
|
+
// `selectDottedFieldPath` cannot realistically throw here: there is no
|
|
48
|
+
// user-supplied dotted path (unlike `buildMutation`'s `returnFields`) and
|
|
49
|
+
// no top-level mutation-arg context that raises `MutationContextError`.
|
|
50
|
+
selectDottedFieldPath(session, schema, fieldPath, "Id");
|
|
51
|
+
return buildOutput(session, schema, primingNote, []);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=build-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-delete.js","sourceRoot":"","sources":["../../src/intent/build-delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,IAAgB;IACnE,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAE5D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExF,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IACrE,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACrD,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;IAE5D,yEAAyE;IACzE,sEAAsE;IACtE,uEAAuE;IACvE,0EAA0E;IAC1E,wEAAwE;IACxE,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAExD,OAAO,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { type DetailSpec, type ToolOutput } from "./types.js";
|
|
7
|
+
import { type PrimeDeps } from "../lib/prime-schema.js";
|
|
8
|
+
/**
|
|
9
|
+
* Build a UIAPI single-record detail query against a Salesforce org. Implements
|
|
10
|
+
* `sf_gql_detail` intent for the graphiti MCP server (FR-5.5).
|
|
11
|
+
*
|
|
12
|
+
* Implicit behaviors not visible in the signature:
|
|
13
|
+
* - Always declares `<idVariable>: ID!` (default name `id`) and binds it via
|
|
14
|
+
* `where: { Id: { eq: $<idVariable> } }`, with `first: 1` set on the
|
|
15
|
+
* connection. Single-record by Id is the whole point of this tool.
|
|
16
|
+
* - Unlike `sf_gql_list`: no `$after` cursor, no `pageInfo` selection, and no
|
|
17
|
+
* top-level `filter` / `orderBy` / `scope`.
|
|
18
|
+
* - Scalar fields auto-wrap with `{ value }` per UIAPI; `Id` is selected bare.
|
|
19
|
+
* - Dotted paths in `fields` / `parentFields` expand polymorphic unions into
|
|
20
|
+
* per-member inline fragments; members lacking the field are silently skipped.
|
|
21
|
+
* - `childRelationships` render as `<rel> { edges { node { ... } } }`
|
|
22
|
+
* connections with their own `first` / `filter` / `orderBy` (and `$varName`
|
|
23
|
+
* leaves promote the same way they do on `sf_gql_list`).
|
|
24
|
+
* - Operation name defaults to `<Object>Detail`.
|
|
25
|
+
*
|
|
26
|
+
* Throws on invalid `object` or `operationName` (must be valid GraphQL Names),
|
|
27
|
+
* auth-missing or introspection failure (via `getSchemaWithPriming`), on FR-5.5
|
|
28
|
+
* spec violations (empty `idVariable`, collision with a child-filter `$varName`
|
|
29
|
+
* of a different type); never throws on validation or codegen failure (those
|
|
30
|
+
* surface as `warnings[]`).
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildDetail(spec: DetailSpec, deps?: PrimeDeps): Promise<ToolOutput>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { buildOutput } from "./build-output.js";
|
|
7
|
+
import { getSchemaWithPriming } from "./get-schema-with-priming.js";
|
|
8
|
+
import { selectChildRelationship } from "./select-child-relationship.js";
|
|
9
|
+
import { assertGraphqlName } from "../lib/graphql-name.js";
|
|
10
|
+
import { selectDottedFieldPath } from "../lib/path-selection.js";
|
|
11
|
+
import { addVariable, createSession, deepSetArg } from "../lib/session.js";
|
|
12
|
+
import { connectionNodePath, connectionPath } from "../lib/uiapi.js";
|
|
13
|
+
/**
|
|
14
|
+
* Build a UIAPI single-record detail query against a Salesforce org. Implements
|
|
15
|
+
* `sf_gql_detail` intent for the graphiti MCP server (FR-5.5).
|
|
16
|
+
*
|
|
17
|
+
* Implicit behaviors not visible in the signature:
|
|
18
|
+
* - Always declares `<idVariable>: ID!` (default name `id`) and binds it via
|
|
19
|
+
* `where: { Id: { eq: $<idVariable> } }`, with `first: 1` set on the
|
|
20
|
+
* connection. Single-record by Id is the whole point of this tool.
|
|
21
|
+
* - Unlike `sf_gql_list`: no `$after` cursor, no `pageInfo` selection, and no
|
|
22
|
+
* top-level `filter` / `orderBy` / `scope`.
|
|
23
|
+
* - Scalar fields auto-wrap with `{ value }` per UIAPI; `Id` is selected bare.
|
|
24
|
+
* - Dotted paths in `fields` / `parentFields` expand polymorphic unions into
|
|
25
|
+
* per-member inline fragments; members lacking the field are silently skipped.
|
|
26
|
+
* - `childRelationships` render as `<rel> { edges { node { ... } } }`
|
|
27
|
+
* connections with their own `first` / `filter` / `orderBy` (and `$varName`
|
|
28
|
+
* leaves promote the same way they do on `sf_gql_list`).
|
|
29
|
+
* - Operation name defaults to `<Object>Detail`.
|
|
30
|
+
*
|
|
31
|
+
* Throws on invalid `object` or `operationName` (must be valid GraphQL Names),
|
|
32
|
+
* auth-missing or introspection failure (via `getSchemaWithPriming`), on FR-5.5
|
|
33
|
+
* spec violations (empty `idVariable`, collision with a child-filter `$varName`
|
|
34
|
+
* of a different type); never throws on validation or codegen failure (those
|
|
35
|
+
* surface as `warnings[]`).
|
|
36
|
+
*/
|
|
37
|
+
export async function buildDetail(spec, deps) {
|
|
38
|
+
if (spec.idVariable !== undefined && spec.idVariable.length === 0) {
|
|
39
|
+
throw new Error("buildDetail: idVariable must be a non-empty string (FR-5.5)");
|
|
40
|
+
}
|
|
41
|
+
assertGraphqlName(spec.object, "buildDetail", "object");
|
|
42
|
+
const { schema, primingNote, instanceUrl } = await getSchemaWithPriming(spec.org, deps);
|
|
43
|
+
const session = createSession(spec.org, "query", instanceUrl);
|
|
44
|
+
session.operationName = spec.operationName ?? `${spec.object}Detail`;
|
|
45
|
+
assertGraphqlName(session.operationName, "buildDetail", "operationName");
|
|
46
|
+
const connection = connectionPath(spec.object);
|
|
47
|
+
const node = connectionNodePath(connection);
|
|
48
|
+
for (const field of spec.fields) {
|
|
49
|
+
selectDottedFieldPath(session, schema, node, field);
|
|
50
|
+
}
|
|
51
|
+
if (spec.parentFields) {
|
|
52
|
+
for (const pf of spec.parentFields) {
|
|
53
|
+
selectDottedFieldPath(session, schema, node, pf);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (spec.childRelationships) {
|
|
57
|
+
for (const child of spec.childRelationships) {
|
|
58
|
+
selectChildRelationship(session, schema, node, child);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// FR-5.5: <idVariable>: ID! + where: { Id: { eq: $<idVariable> } } + first: 1.
|
|
62
|
+
// Per-leaf deepSetArg is the cleanest form for a hardcoded shape: session.ts
|
|
63
|
+
// preserves the leading `$` raw, and query-builder.ts emits it as an unquoted
|
|
64
|
+
// variable reference. Same machinery the aggregate builder uses for groupBy.
|
|
65
|
+
const idVar = spec.idVariable ?? "id";
|
|
66
|
+
// Children promote variables before the ID var is added; if a child filter
|
|
67
|
+
// already declared a variable with this name AND a different type, we'd
|
|
68
|
+
// silently overwrite it to `ID!` — corrupting the user's filter binding.
|
|
69
|
+
// Detect and throw rather than mask the conflict.
|
|
70
|
+
const existing = session.variables.find((v) => v.name === idVar);
|
|
71
|
+
if (existing && existing.type !== "ID!") {
|
|
72
|
+
throw new Error(`buildDetail: idVariable "${idVar}" collides with a $${idVar} reference in childRelationships ` +
|
|
73
|
+
`(declared as ${existing.type}); choose a different idVariable.`);
|
|
74
|
+
}
|
|
75
|
+
addVariable(session, idVar, "ID!");
|
|
76
|
+
deepSetArg(session, connection, "where", ["Id", "eq"], `$${idVar}`);
|
|
77
|
+
deepSetArg(session, connection, "first", [], "1");
|
|
78
|
+
return buildOutput(session, schema, primingNote);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=build-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-detail.js","sourceRoot":"","sources":["../../src/intent/build-detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { type DiscoverOutput, type DiscoverSpec } from "./types.js";
|
|
7
|
+
import { type OrgAuth } from "../lib/auth.js";
|
|
8
|
+
import { type ObjectInfoResult } from "../lib/object-info.js";
|
|
9
|
+
import { type PrimeDeps } from "../lib/prime-schema.js";
|
|
10
|
+
export interface DiscoverDeps {
|
|
11
|
+
primeDeps?: PrimeDeps;
|
|
12
|
+
getOrgAuth?: (orgAlias: string) => Promise<OrgAuth>;
|
|
13
|
+
getObjectInfo?: (auth: OrgAuth, orgAlias: string, sObjectName: string) => Promise<ObjectInfoResult>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build the `sf_gql_discover` payload. Three modes:
|
|
17
|
+
*
|
|
18
|
+
* - `list_objects`: enumerate queryable SObjects from the schema's
|
|
19
|
+
* `uiapi.query` selection. Optional `search` substring-filters names.
|
|
20
|
+
* - `describe_object`: fetch ObjectInfo for `spec.object` and project it
|
|
21
|
+
* onto the spec-defined `ObjectDescription` shape.
|
|
22
|
+
* - `describe_field`: same as `describe_object`, narrowed to one field.
|
|
23
|
+
*
|
|
24
|
+
* Schema priming follows FR-13.3 — first call against an unprimed org
|
|
25
|
+
* triggers introspection and surfaces a `Note: Primed schema cache ...`
|
|
26
|
+
* warning. ObjectInfo carries its own per-object cache inside
|
|
27
|
+
* `lib/object-info.ts` (1-hour TTL), so describe_* modes do not
|
|
28
|
+
* re-introspect on every call.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildDiscover(spec: DiscoverSpec, deps?: DiscoverDeps): Promise<DiscoverOutput>;
|