@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,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { COMMANDS } from "./command-registry.js";
|
|
7
|
+
import type { QuerySession } from "./session.js";
|
|
8
|
+
import type { WalkerResult } from "./walker.js";
|
|
9
|
+
export declare function setInteractiveMode(on: boolean): void;
|
|
10
|
+
export declare function isInteractiveMode(): boolean;
|
|
11
|
+
export { COMMANDS as QUERY_COMMANDS };
|
|
12
|
+
export declare function formatHelp(topic?: string): string;
|
|
13
|
+
export interface NextStepsContext {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
command: string;
|
|
16
|
+
walkerResult?: WalkerResult;
|
|
17
|
+
session?: QuerySession;
|
|
18
|
+
}
|
|
19
|
+
export declare function formatNextSteps(ctx: NextStepsContext): string;
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
import { COMMANDS } from "./command-registry.js";
|
|
7
|
+
// ── Interactive mode flag ─────────────────────────────────────────────────────
|
|
8
|
+
let _interactiveMode = false;
|
|
9
|
+
export function setInteractiveMode(on) {
|
|
10
|
+
_interactiveMode = on;
|
|
11
|
+
}
|
|
12
|
+
export function isInteractiveMode() {
|
|
13
|
+
return _interactiveMode;
|
|
14
|
+
}
|
|
15
|
+
// ── Backward-compatible re-export ─────────────────────────────────────────────
|
|
16
|
+
// QUERY_COMMANDS was the original registry. It now delegates to the canonical
|
|
17
|
+
// COMMANDS array in command-registry.ts so there is a single source of truth.
|
|
18
|
+
export { COMMANDS as QUERY_COMMANDS };
|
|
19
|
+
// ── Formatting helpers ───────────────────────────────────────────────────────
|
|
20
|
+
export function formatHelp(topic) {
|
|
21
|
+
const lines = [];
|
|
22
|
+
if (topic) {
|
|
23
|
+
const spec = COMMANDS.find((c) => c.name === topic);
|
|
24
|
+
if (!spec) {
|
|
25
|
+
return `Unknown help topic: "${topic}". Run \`help\` with no arguments for a full list.`;
|
|
26
|
+
}
|
|
27
|
+
lines.push(`${spec.name} — ${spec.summary}`);
|
|
28
|
+
lines.push("");
|
|
29
|
+
const usagePrefix = _interactiveMode ? "" : "graphiti ";
|
|
30
|
+
const usageStr = spec.usage.startsWith("graphiti ")
|
|
31
|
+
? spec.usage
|
|
32
|
+
: `${usagePrefix}${spec.usage}`;
|
|
33
|
+
lines.push(`Usage: ${usageStr}`);
|
|
34
|
+
if (spec.subcommands && spec.subcommands.length > 0) {
|
|
35
|
+
lines.push("");
|
|
36
|
+
lines.push("Subcommands:");
|
|
37
|
+
for (const sub of spec.subcommands) {
|
|
38
|
+
lines.push(` ${sub.usage.padEnd(32)} ${sub.description}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (topic === "ls") {
|
|
42
|
+
lines.push("");
|
|
43
|
+
lines.push("Search behavior (--search):");
|
|
44
|
+
lines.push(' Multiple terms are OR-matched: --search "Name Id" matches fields');
|
|
45
|
+
lines.push(' containing either "Name" or "Id". Each term is prefix-matched');
|
|
46
|
+
lines.push(' against CamelCase word segments, so "Id" matches "AccountId"');
|
|
47
|
+
lines.push(' but not "Hide".');
|
|
48
|
+
}
|
|
49
|
+
if (topic === "alias" || topic === "mkdir") {
|
|
50
|
+
lines.push("");
|
|
51
|
+
lines.push("Multi-query composition:");
|
|
52
|
+
lines.push(" Use alias to create multiple named instances of the same field,");
|
|
53
|
+
lines.push(" each with different arguments. This lets you combine several queries");
|
|
54
|
+
lines.push(" into a single GraphQL request (e.g. dashboard tiles + lists).");
|
|
55
|
+
lines.push("");
|
|
56
|
+
lines.push(" # Full end-to-end example (from /query/uiapi/query):");
|
|
57
|
+
lines.push(" alias newCases Case");
|
|
58
|
+
lines.push(' set newCases/@args/where \'{"Status":{"eq":"New"}}\'');
|
|
59
|
+
lines.push(" set newCases/@args/first 10");
|
|
60
|
+
lines.push(" select newCases/edges/node/Id newCases/edges/node/Subject/value");
|
|
61
|
+
lines.push("");
|
|
62
|
+
lines.push(" alias myCases Case");
|
|
63
|
+
lines.push(" set myCases/@args/scope MINE");
|
|
64
|
+
lines.push(" set myCases/@args/first 20");
|
|
65
|
+
lines.push(" select myCases/edges/node/Id myCases/edges/node/Status/value");
|
|
66
|
+
lines.push("");
|
|
67
|
+
lines.push(" show # see the combined query");
|
|
68
|
+
}
|
|
69
|
+
if (topic === "chain") {
|
|
70
|
+
lines.push("");
|
|
71
|
+
lines.push("Note: session management commands (new, use, connect, describe,");
|
|
72
|
+
lines.push("interactive) must be run as separate commands before chaining.");
|
|
73
|
+
lines.push("Only session-scoped commands (cd, ls, select, set, var, etc.)");
|
|
74
|
+
lines.push("can be used inside a chain.");
|
|
75
|
+
}
|
|
76
|
+
if (topic === "set" || topic === "assign") {
|
|
77
|
+
lines.push("");
|
|
78
|
+
lines.push("Inline key=value syntax (preferred):");
|
|
79
|
+
lines.push(" set first=10 # set on current field");
|
|
80
|
+
lines.push(" set uiapi/query/Case first=10 scope=MINE # with absolute field path");
|
|
81
|
+
lines.push(' set where=\'{"Status":{"eq":"New"}}\' # JSON value');
|
|
82
|
+
lines.push("");
|
|
83
|
+
lines.push("Legacy pair syntax:");
|
|
84
|
+
lines.push(" set @args/first 10");
|
|
85
|
+
lines.push(' set @args/where/Name/like "Acme%"');
|
|
86
|
+
}
|
|
87
|
+
lines.push("");
|
|
88
|
+
lines.push("Examples:");
|
|
89
|
+
for (const ex of spec.examples) {
|
|
90
|
+
const exPrefix = _interactiveMode ? " " : " ";
|
|
91
|
+
lines.push(`${exPrefix}${ex}`);
|
|
92
|
+
}
|
|
93
|
+
return lines.join("\n");
|
|
94
|
+
}
|
|
95
|
+
lines.push("Graphiti CLI — Progressive GraphQL query builder for Salesforce");
|
|
96
|
+
lines.push("");
|
|
97
|
+
lines.push("Session resolution: --session / -s flag > GRAPHITI_SESSION env var > ~/.graphiti/active");
|
|
98
|
+
lines.push("JSON output: --json flag or GRAPHITI_AGENT=1 env var");
|
|
99
|
+
lines.push("");
|
|
100
|
+
lines.push("Setup:");
|
|
101
|
+
for (const name of ["new", "use", "connect"]) {
|
|
102
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
103
|
+
if (spec)
|
|
104
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
105
|
+
}
|
|
106
|
+
lines.push("");
|
|
107
|
+
lines.push("Navigation:");
|
|
108
|
+
for (const name of ["pwd", "ls", "cd"]) {
|
|
109
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
110
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
111
|
+
}
|
|
112
|
+
lines.push("");
|
|
113
|
+
lines.push("Query Building:");
|
|
114
|
+
for (const name of ["select", "drop", "alias", "optional", "undo"]) {
|
|
115
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
116
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
117
|
+
}
|
|
118
|
+
lines.push("");
|
|
119
|
+
lines.push("Arguments & Variables:");
|
|
120
|
+
for (const name of ["set", "unset", "var"]) {
|
|
121
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
122
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
123
|
+
}
|
|
124
|
+
lines.push("");
|
|
125
|
+
lines.push("Review & Execute:");
|
|
126
|
+
for (const name of ["show", "check", "run", "describe", "codegen"]) {
|
|
127
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
128
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
129
|
+
}
|
|
130
|
+
lines.push("");
|
|
131
|
+
lines.push("Session Management:");
|
|
132
|
+
for (const name of ["sessions", "clone", "reset"]) {
|
|
133
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
134
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
135
|
+
}
|
|
136
|
+
lines.push("");
|
|
137
|
+
lines.push("Other:");
|
|
138
|
+
const otherCommands = _interactiveMode ? ["chain", "help"] : ["chain", "help", "interactive"];
|
|
139
|
+
for (const name of otherCommands) {
|
|
140
|
+
const spec = COMMANDS.find((c) => c.name === name);
|
|
141
|
+
if (spec)
|
|
142
|
+
lines.push(` ${spec.name.padEnd(12)} ${spec.summary}`);
|
|
143
|
+
}
|
|
144
|
+
lines.push("");
|
|
145
|
+
lines.push("Run `help <subcommand>` for detailed usage and examples.");
|
|
146
|
+
return lines.join("\n");
|
|
147
|
+
}
|
|
148
|
+
export function formatNextSteps(ctx) {
|
|
149
|
+
const { sessionId: sid, command, walkerResult: wr, session } = ctx;
|
|
150
|
+
const lines = [];
|
|
151
|
+
const p = (cmd, desc) => {
|
|
152
|
+
if (_interactiveMode) {
|
|
153
|
+
lines.push(` ${cmd.padEnd(36)} # ${desc}`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
lines.push(` graphiti query ${sid} ${cmd.padEnd(36)} # ${desc}`);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const isRoot = !session || session.navigationPath.length === 0;
|
|
160
|
+
const hasSelections = session ? session.nodes.length > 0 : false;
|
|
161
|
+
const hasArgs = wr && wr.args.length > 0;
|
|
162
|
+
const isLeaf = wr?.isLeaf ?? false;
|
|
163
|
+
const _hasFragments = wr && wr.possibleTypes.length > 0;
|
|
164
|
+
const hasFields = wr && !wr.isLeaf && wr.fields.length > 0;
|
|
165
|
+
lines.push("");
|
|
166
|
+
lines.push("Next steps:");
|
|
167
|
+
switch (command) {
|
|
168
|
+
case "new": {
|
|
169
|
+
p("cd query", "navigate into the query tree");
|
|
170
|
+
p("ls", "see available root fields");
|
|
171
|
+
p("interactive", "start an interactive session");
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case "ls": {
|
|
175
|
+
if (isLeaf) {
|
|
176
|
+
if (!isRoot && session) {
|
|
177
|
+
const leaf = session.navigationPath[session.navigationPath.length - 1];
|
|
178
|
+
p(`cd ..`, "go up to parent directory");
|
|
179
|
+
p(`select ${leaf}`, "select this leaf field");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
if (hasFields) {
|
|
184
|
+
const firstDir = wr.fields.find((f) => f.typeKind !== "SCALAR" && f.typeKind !== "ENUM");
|
|
185
|
+
const firstLeaf = wr.fields.find((f) => f.typeKind === "SCALAR" || f.typeKind === "ENUM");
|
|
186
|
+
if (firstDir)
|
|
187
|
+
p(`cd ${firstDir.name}`, `navigate into ${firstDir.name}/`);
|
|
188
|
+
if (firstLeaf)
|
|
189
|
+
p(`select ${firstLeaf.name}`, `add ${firstLeaf.name} to projection`);
|
|
190
|
+
const hasConnections = wr.fields.some((f) => f.typeName.includes("Connection"));
|
|
191
|
+
if (hasConnections && firstDir)
|
|
192
|
+
p(`alias myAlias ${firstDir.name}`, "compose multiple queries via aliases");
|
|
193
|
+
}
|
|
194
|
+
if (hasArgs)
|
|
195
|
+
p(`cd @args`, "navigate into arguments");
|
|
196
|
+
if (!isRoot)
|
|
197
|
+
p(`cd ..`, "go up one level");
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case "cd": {
|
|
202
|
+
p(`ls`, "see contents at this path");
|
|
203
|
+
if (hasArgs)
|
|
204
|
+
p(`cd @args`, "configure field arguments");
|
|
205
|
+
if (hasFields) {
|
|
206
|
+
const firstLeaf = wr.fields.find((f) => f.typeKind === "SCALAR" || f.typeKind === "ENUM");
|
|
207
|
+
if (firstLeaf)
|
|
208
|
+
p(`select ${firstLeaf.name}`, `add ${firstLeaf.name} to projection`);
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case "select": {
|
|
213
|
+
p(`ls`, "see more available fields");
|
|
214
|
+
if (!isRoot)
|
|
215
|
+
p(`cd ..`, "go up to parent");
|
|
216
|
+
if (hasSelections) {
|
|
217
|
+
p(`show`, "preview the current query string");
|
|
218
|
+
p(`check`, "validate the query");
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case "assign":
|
|
223
|
+
case "set": {
|
|
224
|
+
p(`show`, "preview query with arguments");
|
|
225
|
+
p(`ls`, "see other fields to set");
|
|
226
|
+
if (hasSelections)
|
|
227
|
+
p(`check`, "validate the query");
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
case "define":
|
|
231
|
+
case "var": {
|
|
232
|
+
p(`cd /variables/$varName`, "navigate into the variable to set values");
|
|
233
|
+
p(`show`, "preview the query signature");
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "show": {
|
|
237
|
+
p(`check`, "validate the query");
|
|
238
|
+
if (hasSelections)
|
|
239
|
+
p(`run`, "execute the query against the org");
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
case "validate":
|
|
243
|
+
case "check": {
|
|
244
|
+
if (hasSelections)
|
|
245
|
+
p(`run`, "execute the validated query");
|
|
246
|
+
p(`show`, "preview the query string");
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
default: {
|
|
250
|
+
p(`ls`, "list contents at current path");
|
|
251
|
+
p(`show`, "preview the current query");
|
|
252
|
+
if (hasSelections)
|
|
253
|
+
p(`check`, "validate the query");
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (lines.length <= 2) {
|
|
258
|
+
p(`help`, "show all available commands");
|
|
259
|
+
}
|
|
260
|
+
return lines.join("\n");
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=query-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-commands.js","sourceRoot":"","sources":["../../src/lib/query-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
export interface DirectiveNode {
|
|
7
|
+
name: string;
|
|
8
|
+
args: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface VariableDefinition {
|
|
11
|
+
name: string;
|
|
12
|
+
type: string;
|
|
13
|
+
defaultValue?: string;
|
|
14
|
+
runtimeValue?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface BaseProjectionNode {
|
|
17
|
+
id: string;
|
|
18
|
+
kind: "field" | "fragment";
|
|
19
|
+
parentId: string | null;
|
|
20
|
+
schemaPath: string[];
|
|
21
|
+
directives: DirectiveNode[];
|
|
22
|
+
}
|
|
23
|
+
export interface FieldProjectionNode extends BaseProjectionNode {
|
|
24
|
+
kind: "field";
|
|
25
|
+
fieldName: string;
|
|
26
|
+
alias?: string;
|
|
27
|
+
args: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
export interface FragmentProjectionNode extends BaseProjectionNode {
|
|
30
|
+
kind: "fragment";
|
|
31
|
+
onType: string;
|
|
32
|
+
}
|
|
33
|
+
export type ProjectionNode = FieldProjectionNode | FragmentProjectionNode;
|
|
34
|
+
export type OperationType = "query" | "mutation" | "aggregate";
|
|
35
|
+
export interface QuerySession {
|
|
36
|
+
id: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
/** GraphQL operation name emitted by `renderQuery`. Distinct from `name`, which is the session's user-facing label. */
|
|
39
|
+
operationName?: string;
|
|
40
|
+
orgAlias: string;
|
|
41
|
+
/** Resolved Salesforce instance URL stored at session creation to avoid repeated sf-auth calls. */
|
|
42
|
+
instanceUrl?: string;
|
|
43
|
+
operation: OperationType;
|
|
44
|
+
navigationPath: string[];
|
|
45
|
+
nodes: ProjectionNode[];
|
|
46
|
+
variables: VariableDefinition[];
|
|
47
|
+
focusByPath: Record<string, string>;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
undoStack?: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Snapshots the current session state (excluding undoStack) and pushes it
|
|
53
|
+
* onto the undo stack. Call this before any state-mutating operation.
|
|
54
|
+
*/
|
|
55
|
+
export declare function pushUndoSnapshot(session: QuerySession): void;
|
|
56
|
+
/**
|
|
57
|
+
* Pops the most recent undo snapshot and returns a restored session.
|
|
58
|
+
* The restored session inherits the current (truncated) undo stack.
|
|
59
|
+
* Returns null if there is nothing to undo.
|
|
60
|
+
*/
|
|
61
|
+
export declare function popUndo(session: QuerySession): QuerySession | null;
|
|
62
|
+
export declare function isFragmentSegment(segment: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Normalizes a fragment segment to the canonical `[Type]` form.
|
|
65
|
+
* Accepts `on:Type` as a shell-safe alternative that avoids zsh glob/redirect
|
|
66
|
+
* issues with `[Type]` and `<Type>`.
|
|
67
|
+
*
|
|
68
|
+
* Examples: `on:User` → `[User]`, `[User]` stays as-is.
|
|
69
|
+
*/
|
|
70
|
+
export declare function normalizeFragmentSegment(segment: string): string;
|
|
71
|
+
/** Returns true for alias-encoded path segments like `openOpps(Opportunity)`. */
|
|
72
|
+
export declare function isAliasedSegment(segment: string): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Parses an alias-encoded segment into its alias name and underlying field name.
|
|
75
|
+
* Returns null for plain or fragment segments.
|
|
76
|
+
*/
|
|
77
|
+
export declare function parseAliasedSegment(segment: string): {
|
|
78
|
+
alias: string;
|
|
79
|
+
fieldName: string;
|
|
80
|
+
} | null;
|
|
81
|
+
/** Strips the alias wrapper from a single path segment, leaving just the schema field name. */
|
|
82
|
+
export declare function schemaSegment(segment: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Converts a navigation path (which may contain alias-encoded segments) to a
|
|
85
|
+
* pure schema path suitable for schema resolution and focus-map lookups.
|
|
86
|
+
*/
|
|
87
|
+
export declare function toSchemaPath(navPath: string[]): string[];
|
|
88
|
+
export declare function pathKey(pathSegments: string[]): string;
|
|
89
|
+
export declare function formatPath(pathSegments: string[]): string;
|
|
90
|
+
export declare function createSession(orgAlias: string, operation?: OperationType, instanceUrl?: string, name?: string): QuerySession;
|
|
91
|
+
export declare function cloneSession(source: QuerySession, newName?: string): QuerySession;
|
|
92
|
+
export declare function getNodeById(session: QuerySession, id: string | null | undefined): ProjectionNode | null;
|
|
93
|
+
export declare function getChildren(session: QuerySession, parentId: string | null): ProjectionNode[];
|
|
94
|
+
export declare function listInstancesAtPath(session: QuerySession, schemaPath: string[]): ProjectionNode[];
|
|
95
|
+
export declare function getFocusedNodeAtPath(session: QuerySession, schemaPath: string[], createMissing?: boolean): ProjectionNode | null;
|
|
96
|
+
export declare function ensureFocusedChain(session: QuerySession, schemaPath: string[]): ProjectionNode | null;
|
|
97
|
+
/**
|
|
98
|
+
* Walks the query portion of the navigation path and syncs focusByPath entries
|
|
99
|
+
* for any aliased segments (e.g. `recentAccounts(Account)`). This ensures that
|
|
100
|
+
* subsequent select/assign operations target the correct aliased instance.
|
|
101
|
+
*/
|
|
102
|
+
export declare function syncFocusFromNavigationPath(session: QuerySession): void;
|
|
103
|
+
export declare function focusNodeAtPath(session: QuerySession, schemaPath: string[], nodeId: string): void;
|
|
104
|
+
export declare function createSiblingFieldInstance(session: QuerySession, schemaPath: string[], alias?: string): FieldProjectionNode;
|
|
105
|
+
export declare function setAliasOnPath(session: QuerySession, schemaPath: string[], aliasName: string): FieldProjectionNode;
|
|
106
|
+
export declare function clearAliasOnPath(session: QuerySession, schemaPath: string[]): void;
|
|
107
|
+
export declare function focusInstanceByAliasOrId(session: QuerySession, schemaPath: string[], selector: string): ProjectionNode;
|
|
108
|
+
export declare function setArg(session: QuerySession, schemaPath: string[], argName: string, value: string): void;
|
|
109
|
+
export declare function getArg(session: QuerySession, schemaPath: string[], argName: string): string | undefined;
|
|
110
|
+
export declare function removeArg(session: QuerySession, schemaPath: string[], argName: string): boolean;
|
|
111
|
+
export declare function getEffectiveArgs(_session: QuerySession, node: ProjectionNode): Record<string, string>;
|
|
112
|
+
export type NavigationContext = "root" | "query" | "variables";
|
|
113
|
+
export declare function getNavigationContext(navPath: string[]): NavigationContext;
|
|
114
|
+
export declare const ARGS_SEGMENT = "@args";
|
|
115
|
+
export declare function isArgsSegment(segment: string): boolean;
|
|
116
|
+
/** Returns the index of the @args segment in the path, or -1 if not present. */
|
|
117
|
+
export declare function argsSegmentIndex(navPath: string[]): number;
|
|
118
|
+
/** Returns true if the navigation path is inside an @args context. */
|
|
119
|
+
export declare function isInArgsContext(navPath: string[]): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Extracts the schema path of the field whose args are being navigated.
|
|
122
|
+
* E.g. ["query", "uiapi", "query", "Account", "@args", "where", "Name"]
|
|
123
|
+
* → ["uiapi", "query", "Account"]
|
|
124
|
+
*/
|
|
125
|
+
export declare function getArgsFieldPath(navPath: string[]): string[];
|
|
126
|
+
/**
|
|
127
|
+
* Extracts the input sub-path after @args.
|
|
128
|
+
* E.g. ["query", "uiapi", "query", "Account", "@args", "where", "Name"]
|
|
129
|
+
* → ["where", "Name"]
|
|
130
|
+
*/
|
|
131
|
+
export declare function getInputSubPath(navPath: string[]): string[];
|
|
132
|
+
/**
|
|
133
|
+
* For paths in the /query context, strips the "query" prefix and alias wrappers
|
|
134
|
+
* to produce a pure schema path. Stops at @args if present.
|
|
135
|
+
* E.g. ["query", "uiapi", "query", "Account"] → ["uiapi", "query", "Account"]
|
|
136
|
+
*/
|
|
137
|
+
export declare function queryNavToSchemaPath(navPath: string[]): string[];
|
|
138
|
+
/**
|
|
139
|
+
* For paths in /variables, extracts the variable name (without $) and the
|
|
140
|
+
* sub-path into its input type.
|
|
141
|
+
*/
|
|
142
|
+
export declare function parseVariablePath(navPath: string[]): {
|
|
143
|
+
varName: string;
|
|
144
|
+
inputSubPath: string[];
|
|
145
|
+
} | null;
|
|
146
|
+
/**
|
|
147
|
+
* Incrementally sets a value deep inside a field argument's JSON structure.
|
|
148
|
+
* If inputPath is empty, sets the top-level arg directly.
|
|
149
|
+
* E.g. deepSetArg(session, path, "where", ["Name", "like"], '"Acme%"')
|
|
150
|
+
* results in node.args["where"] = '{"Name":{"like":"Acme%"}}'
|
|
151
|
+
*/
|
|
152
|
+
export declare function deepSetArg(session: QuerySession, schemaPath: string[], argName: string, inputPath: string[], value: string): void;
|
|
153
|
+
/**
|
|
154
|
+
* Reads the current value at a nested path inside a field argument.
|
|
155
|
+
*/
|
|
156
|
+
export declare function deepGetArg(session: QuerySession, schemaPath: string[], argName: string, inputPath: string[]): unknown;
|
|
157
|
+
/**
|
|
158
|
+
* Removes a value at a nested path inside a field argument.
|
|
159
|
+
*/
|
|
160
|
+
export declare function deepRemoveArg(session: QuerySession, schemaPath: string[], argName: string, inputPath: string[]): boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Incrementally sets a value deep inside a variable's runtime value.
|
|
163
|
+
* If inputPath is empty, sets the runtime value directly.
|
|
164
|
+
*/
|
|
165
|
+
export declare function deepSetVariableValue(session: QuerySession, varName: string, inputPath: string[], value: string): void;
|
|
166
|
+
/**
|
|
167
|
+
* Appends a new empty object to a list-type arg array. Returns the new index.
|
|
168
|
+
*/
|
|
169
|
+
export declare function appendListElement(session: QuerySession, schemaPath: string[], argName: string, inputPath: string[]): number;
|
|
170
|
+
/**
|
|
171
|
+
* Removes an element from a list-type arg by index and compacts remaining indices.
|
|
172
|
+
*/
|
|
173
|
+
export declare function removeListElement(session: QuerySession, schemaPath: string[], argName: string, inputPath: string[], index: number): boolean;
|
|
174
|
+
export declare function selectLeaf(session: QuerySession, schemaPath: string[], alias?: string): FieldProjectionNode;
|
|
175
|
+
export declare function removeSelectionAtPath(session: QuerySession, schemaPath: string[], selector?: string): boolean;
|
|
176
|
+
export declare function findDescendantByAlias(session: QuerySession, parentId: string | null, alias: string): FieldProjectionNode | null;
|
|
177
|
+
export declare function removeNodeByIdWithPrune(session: QuerySession, nodeId: string): boolean;
|
|
178
|
+
export declare function addVariable(session: QuerySession, name: string, type: string, defaultValue?: string): void;
|
|
179
|
+
export declare function setVariableRuntimeValue(session: QuerySession, name: string, runtimeValue: string): void;
|
|
180
|
+
export declare function setVariableDefault(session: QuerySession, name: string, defaultValue: string | undefined): void;
|
|
181
|
+
/**
|
|
182
|
+
* Finds all arg paths where a variable is referenced.
|
|
183
|
+
* Returns entries like `["Account", "where"] → "$filter"` for display.
|
|
184
|
+
*/
|
|
185
|
+
export declare function findVariableReferences(session: QuerySession, varName: string): {
|
|
186
|
+
fieldPath: string[];
|
|
187
|
+
argName: string;
|
|
188
|
+
subPath: string[];
|
|
189
|
+
}[];
|
|
190
|
+
export declare function removeVariable(session: QuerySession, name: string): boolean;
|
|
191
|
+
/**
|
|
192
|
+
* Builds the variables map for query execution.
|
|
193
|
+
* Priority: ad-hoc overrides > session runtimeValue > defaultValue.
|
|
194
|
+
*/
|
|
195
|
+
export declare function buildRuntimeVariables(session: QuerySession, overrides?: Record<string, string>): Record<string, unknown>;
|
|
196
|
+
export declare function saveSession(session: QuerySession): void;
|
|
197
|
+
export declare function loadSession(id: string): QuerySession;
|
|
198
|
+
export declare function listSessions(): {
|
|
199
|
+
id: string;
|
|
200
|
+
name?: string;
|
|
201
|
+
orgAlias: string;
|
|
202
|
+
operation: string;
|
|
203
|
+
createdAt: string;
|
|
204
|
+
}[];
|
|
205
|
+
export declare function deleteSession(id: string): boolean;
|