@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,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026, Salesforce, Inc.,
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* For full license text, see the LICENSE.txt file
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { GraphQLSchema } from "graphql";
|
|
8
|
+
import type { QuerySession } from "./session.js";
|
|
9
|
+
|
|
10
|
+
export type OutputMode = "human" | "json" | "quiet";
|
|
11
|
+
|
|
12
|
+
export interface CommandOpts {
|
|
13
|
+
search?: string;
|
|
14
|
+
regex?: string;
|
|
15
|
+
long?: boolean;
|
|
16
|
+
all?: boolean;
|
|
17
|
+
as?: string;
|
|
18
|
+
quiet?: boolean;
|
|
19
|
+
dataCloud?: boolean;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
strict?: boolean;
|
|
22
|
+
force?: boolean;
|
|
23
|
+
mutation?: boolean;
|
|
24
|
+
name?: string;
|
|
25
|
+
out?: string;
|
|
26
|
+
var?: string[];
|
|
27
|
+
json?: boolean;
|
|
28
|
+
olderThan?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface CommandContext {
|
|
32
|
+
session: QuerySession;
|
|
33
|
+
schema: GraphQLSchema;
|
|
34
|
+
args: string[];
|
|
35
|
+
opts: CommandOpts;
|
|
36
|
+
output: OutputMode;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type CommandResult = Record<string, unknown>;
|
|
40
|
+
|
|
41
|
+
export interface CommandSubcommand {
|
|
42
|
+
name: string;
|
|
43
|
+
usage: string;
|
|
44
|
+
description: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CommandDef {
|
|
48
|
+
name: string;
|
|
49
|
+
aliases: string[];
|
|
50
|
+
summary: string;
|
|
51
|
+
usage: string;
|
|
52
|
+
examples: string[];
|
|
53
|
+
subcommands?: CommandSubcommand[];
|
|
54
|
+
mutates: boolean;
|
|
55
|
+
requiresSession: boolean;
|
|
56
|
+
category: "navigation" | "building" | "args" | "review" | "session" | "meta";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const COMMANDS: CommandDef[] = [
|
|
60
|
+
// Navigation
|
|
61
|
+
{
|
|
62
|
+
name: "pwd",
|
|
63
|
+
aliases: [],
|
|
64
|
+
summary: "Print current navigation path",
|
|
65
|
+
usage: "pwd",
|
|
66
|
+
examples: [],
|
|
67
|
+
mutates: false,
|
|
68
|
+
requiresSession: true,
|
|
69
|
+
category: "navigation",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "cd",
|
|
73
|
+
aliases: [],
|
|
74
|
+
summary: "Navigate the schema tree",
|
|
75
|
+
usage: "cd <path>",
|
|
76
|
+
examples: ["cd uiapi/query/Account", "cd edges/node", "cd @args/where", "cd ..", "cd /"],
|
|
77
|
+
mutates: true,
|
|
78
|
+
requiresSession: true,
|
|
79
|
+
category: "navigation",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "ls",
|
|
83
|
+
aliases: [],
|
|
84
|
+
summary: "List fields at current or specified path",
|
|
85
|
+
usage: "ls [-l] [-a] [--search <terms>] [<dir> ...]",
|
|
86
|
+
examples: ["ls", "ls -l", "ls -a", "ls --search Name", "ls Name Owner Status"],
|
|
87
|
+
mutates: false,
|
|
88
|
+
requiresSession: true,
|
|
89
|
+
category: "navigation",
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
// Building
|
|
93
|
+
{
|
|
94
|
+
name: "select",
|
|
95
|
+
aliases: [],
|
|
96
|
+
summary: "Select leaf fields for the query projection",
|
|
97
|
+
usage: "select <path[:alias]> [...] | select ls",
|
|
98
|
+
examples: [
|
|
99
|
+
"select Id Name.value:name",
|
|
100
|
+
"select uiapi/query/Case/edges/node/Id",
|
|
101
|
+
"select Owner.on:User.Name.value:ownerName",
|
|
102
|
+
"select ls",
|
|
103
|
+
],
|
|
104
|
+
subcommands: [
|
|
105
|
+
{ name: "ls", usage: "select ls", description: "List all currently selected fields" },
|
|
106
|
+
],
|
|
107
|
+
mutates: true,
|
|
108
|
+
requiresSession: true,
|
|
109
|
+
category: "building",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "drop",
|
|
113
|
+
aliases: [],
|
|
114
|
+
summary: "Remove a field, alias, variable, or arg value",
|
|
115
|
+
usage: "drop <alias-or-path>",
|
|
116
|
+
examples: ["drop ownerName", "drop Owner.Name.value", "drop $filter"],
|
|
117
|
+
mutates: true,
|
|
118
|
+
requiresSession: true,
|
|
119
|
+
category: "building",
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: "alias",
|
|
123
|
+
aliases: [],
|
|
124
|
+
summary: "Create an aliased field instance or add a list element",
|
|
125
|
+
usage: "alias <name> <field>",
|
|
126
|
+
examples: ["alias openCases Case", "alias myCases Case"],
|
|
127
|
+
mutates: true,
|
|
128
|
+
requiresSession: true,
|
|
129
|
+
category: "building",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "undo",
|
|
133
|
+
aliases: [],
|
|
134
|
+
summary: "Revert the last state-mutating operation",
|
|
135
|
+
usage: "undo",
|
|
136
|
+
examples: [],
|
|
137
|
+
mutates: false,
|
|
138
|
+
requiresSession: true,
|
|
139
|
+
category: "building",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: "optional",
|
|
143
|
+
aliases: [],
|
|
144
|
+
summary: "Toggle @optional directive on selected fields (FLS safety)",
|
|
145
|
+
usage: "optional <field> [...] | optional --remove <field> [...]",
|
|
146
|
+
examples: ["optional Status Subject", "optional --remove Status"],
|
|
147
|
+
mutates: true,
|
|
148
|
+
requiresSession: true,
|
|
149
|
+
category: "building",
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
// Args & Variables
|
|
153
|
+
{
|
|
154
|
+
name: "set",
|
|
155
|
+
aliases: [],
|
|
156
|
+
summary: "Set field arguments or variable values",
|
|
157
|
+
usage: "set [<field-path>] <key>=<value> [...] | set <path> <value>",
|
|
158
|
+
examples: [
|
|
159
|
+
"set first=10",
|
|
160
|
+
"set uiapi/query/Case first=10 scope=MINE",
|
|
161
|
+
'set where \'{"Status":{"eq":"New"}}\'',
|
|
162
|
+
"set @args/first 10",
|
|
163
|
+
],
|
|
164
|
+
mutates: true,
|
|
165
|
+
requiresSession: true,
|
|
166
|
+
category: "args",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: "unset",
|
|
170
|
+
aliases: [],
|
|
171
|
+
summary: "Remove an assigned argument value",
|
|
172
|
+
usage: "unset <path>",
|
|
173
|
+
examples: ["unset first", "unset where/Name/like"],
|
|
174
|
+
mutates: true,
|
|
175
|
+
requiresSession: true,
|
|
176
|
+
category: "args",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "var",
|
|
180
|
+
aliases: [],
|
|
181
|
+
summary: "Define a query variable (type auto-inferred from path)",
|
|
182
|
+
usage: "var $name <path> [default]",
|
|
183
|
+
examples: [
|
|
184
|
+
"var $filter @args/where",
|
|
185
|
+
"var $limit @args/first 10",
|
|
186
|
+
"var $caseId uiapi/query/Case/@args/where/Id/eq",
|
|
187
|
+
],
|
|
188
|
+
mutates: true,
|
|
189
|
+
requiresSession: true,
|
|
190
|
+
category: "args",
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
// Review & Execute
|
|
194
|
+
{
|
|
195
|
+
name: "show",
|
|
196
|
+
aliases: [],
|
|
197
|
+
summary: "Full session snapshot: path, query, variables, args",
|
|
198
|
+
usage: "show",
|
|
199
|
+
examples: [],
|
|
200
|
+
mutates: false,
|
|
201
|
+
requiresSession: true,
|
|
202
|
+
category: "review",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "check",
|
|
206
|
+
aliases: [],
|
|
207
|
+
summary: "Validate the query against the schema",
|
|
208
|
+
usage: "check [--strict]",
|
|
209
|
+
examples: [],
|
|
210
|
+
mutates: false,
|
|
211
|
+
requiresSession: true,
|
|
212
|
+
category: "review",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: "run",
|
|
216
|
+
aliases: [],
|
|
217
|
+
summary: "Execute the query against the org",
|
|
218
|
+
usage: "run [--dry-run] [--var key=value ...]",
|
|
219
|
+
examples: ["run", "run --dry-run", "run --var caseId=500xxx"],
|
|
220
|
+
mutates: false,
|
|
221
|
+
requiresSession: true,
|
|
222
|
+
category: "review",
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: "describe",
|
|
226
|
+
aliases: [],
|
|
227
|
+
summary: "Inspect an SObject with enriched metadata",
|
|
228
|
+
usage: "describe [<SObjectName>]",
|
|
229
|
+
examples: ["describe Case", "describe Account", "describe"],
|
|
230
|
+
mutates: false,
|
|
231
|
+
requiresSession: false,
|
|
232
|
+
category: "review",
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "codegen",
|
|
236
|
+
aliases: [],
|
|
237
|
+
summary: "Generate client types for the query (default: TypeScript)",
|
|
238
|
+
usage: "codegen [--language <lang>] [--out <file>] [--name <TypeName>]",
|
|
239
|
+
examples: [
|
|
240
|
+
"codegen",
|
|
241
|
+
"codegen --language typescript",
|
|
242
|
+
"codegen -l ts --out types.ts",
|
|
243
|
+
"codegen --name CaseDetail",
|
|
244
|
+
],
|
|
245
|
+
mutates: false,
|
|
246
|
+
requiresSession: true,
|
|
247
|
+
category: "review",
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
// Session management
|
|
251
|
+
{
|
|
252
|
+
name: "new",
|
|
253
|
+
aliases: [],
|
|
254
|
+
summary: "Create a new query session",
|
|
255
|
+
usage: "new <org> [--mutation] [--aggregate] [--name <n>] [--force]",
|
|
256
|
+
examples: [
|
|
257
|
+
"new myorg",
|
|
258
|
+
"new myorg --mutation --name createCase",
|
|
259
|
+
"new myorg --aggregate --name orderCounts",
|
|
260
|
+
],
|
|
261
|
+
mutates: false,
|
|
262
|
+
requiresSession: false,
|
|
263
|
+
category: "session",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: "use",
|
|
267
|
+
aliases: [],
|
|
268
|
+
summary: "Set the active session",
|
|
269
|
+
usage: "use <session-id-or-name>",
|
|
270
|
+
examples: ["use s_abc123", "use myQuery"],
|
|
271
|
+
mutates: false,
|
|
272
|
+
requiresSession: false,
|
|
273
|
+
category: "session",
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
name: "sessions",
|
|
277
|
+
aliases: [],
|
|
278
|
+
summary: "List, delete, prune, or clean sessions",
|
|
279
|
+
usage: "sessions [rm <id> | prune --older-than <dur> | clean]",
|
|
280
|
+
examples: [
|
|
281
|
+
"sessions",
|
|
282
|
+
"sessions rm myQuery",
|
|
283
|
+
"sessions prune --older-than 7d",
|
|
284
|
+
"sessions clean",
|
|
285
|
+
],
|
|
286
|
+
subcommands: [
|
|
287
|
+
{ name: "ls", usage: "sessions", description: "List all saved sessions (default)" },
|
|
288
|
+
{
|
|
289
|
+
name: "rm",
|
|
290
|
+
usage: "sessions rm <id-or-name> | sessions rm --all",
|
|
291
|
+
description: "Delete a session (or all sessions)",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: "prune",
|
|
295
|
+
usage: "sessions prune --older-than <duration>",
|
|
296
|
+
description: "Delete old sessions",
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: "clean",
|
|
300
|
+
usage: "sessions clean",
|
|
301
|
+
description: "Remove all sessions that fail validation",
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
mutates: false,
|
|
305
|
+
requiresSession: false,
|
|
306
|
+
category: "session",
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: "clone",
|
|
310
|
+
aliases: [],
|
|
311
|
+
summary: "Duplicate session into a new one",
|
|
312
|
+
usage: "clone [name] [--force] [--set path key=val] [--var $name path] [--unset path]",
|
|
313
|
+
examples: [
|
|
314
|
+
"clone myClone",
|
|
315
|
+
"clone variant --force --set uiapi/query/Case where=...",
|
|
316
|
+
"clone mine --force --unset where/Status -s base",
|
|
317
|
+
],
|
|
318
|
+
mutates: false,
|
|
319
|
+
requiresSession: true,
|
|
320
|
+
category: "session",
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: "reset",
|
|
324
|
+
aliases: [],
|
|
325
|
+
summary: "Reset session to empty state",
|
|
326
|
+
usage: "reset",
|
|
327
|
+
examples: [],
|
|
328
|
+
mutates: true,
|
|
329
|
+
requiresSession: true,
|
|
330
|
+
category: "session",
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
// Meta / Other
|
|
334
|
+
{
|
|
335
|
+
name: "chain",
|
|
336
|
+
aliases: [],
|
|
337
|
+
summary: "Run multiple commands in one invocation, separated by semicolons",
|
|
338
|
+
usage: 'graphiti chain -s <session> "cmd1; cmd2; cmd3" [--json]',
|
|
339
|
+
examples: [
|
|
340
|
+
'graphiti chain -s cases "cd uiapi/query/Case; set first=10; select edges/node/Id; check"',
|
|
341
|
+
],
|
|
342
|
+
mutates: false,
|
|
343
|
+
requiresSession: true,
|
|
344
|
+
category: "meta",
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: "connect",
|
|
348
|
+
aliases: [],
|
|
349
|
+
summary: "Download and cache a schema for an org",
|
|
350
|
+
usage: "connect <org> [--refresh]",
|
|
351
|
+
examples: ["connect myorg", "connect myorg --refresh"],
|
|
352
|
+
mutates: false,
|
|
353
|
+
requiresSession: false,
|
|
354
|
+
category: "meta",
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "orgs",
|
|
358
|
+
aliases: [],
|
|
359
|
+
summary: "List available Salesforce orgs",
|
|
360
|
+
usage: "orgs",
|
|
361
|
+
examples: [],
|
|
362
|
+
mutates: false,
|
|
363
|
+
requiresSession: false,
|
|
364
|
+
category: "meta",
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: "help",
|
|
368
|
+
aliases: [],
|
|
369
|
+
summary: "Show help for a command or topic",
|
|
370
|
+
usage: "help [<command>]",
|
|
371
|
+
examples: ["help", "help select", "help set"],
|
|
372
|
+
mutates: false,
|
|
373
|
+
requiresSession: false,
|
|
374
|
+
category: "meta",
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
name: "interactive",
|
|
378
|
+
aliases: [],
|
|
379
|
+
summary: "Start an interactive REPL session",
|
|
380
|
+
usage: "interactive",
|
|
381
|
+
examples: [],
|
|
382
|
+
mutates: false,
|
|
383
|
+
requiresSession: true,
|
|
384
|
+
category: "meta",
|
|
385
|
+
},
|
|
386
|
+
];
|
|
387
|
+
|
|
388
|
+
export const MUTATING_COMMANDS = new Set(COMMANDS.filter((c) => c.mutates).map((c) => c.name));
|
|
389
|
+
|
|
390
|
+
const commandsByName = new Map<string, CommandDef>();
|
|
391
|
+
const commandsByAlias = new Map<string, CommandDef>();
|
|
392
|
+
for (const cmd of COMMANDS) {
|
|
393
|
+
commandsByName.set(cmd.name, cmd);
|
|
394
|
+
for (const alias of cmd.aliases) {
|
|
395
|
+
commandsByAlias.set(alias, cmd);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
export function resolveCommand(name: string): CommandDef | undefined {
|
|
400
|
+
return commandsByName.get(name) ?? commandsByAlias.get(name);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export function getCommandNames(): string[] {
|
|
404
|
+
return COMMANDS.map((c) => c.name);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
export function getAllCommandNamesAndAliases(): string[] {
|
|
408
|
+
const names: string[] = [];
|
|
409
|
+
for (const cmd of COMMANDS) {
|
|
410
|
+
names.push(cmd.name);
|
|
411
|
+
names.push(...cmd.aliases);
|
|
412
|
+
}
|
|
413
|
+
return names;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
let _outputMode: OutputMode = "human";
|
|
417
|
+
|
|
418
|
+
export function setOutputMode(mode: OutputMode): void {
|
|
419
|
+
_outputMode = mode;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export function getOutputMode(): OutputMode {
|
|
423
|
+
return _outputMode;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
let _interactiveMode = false;
|
|
427
|
+
|
|
428
|
+
export function setInteractiveMode(on: boolean): void {
|
|
429
|
+
_interactiveMode = on;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export function isInteractiveMode(): boolean {
|
|
433
|
+
return _interactiveMode;
|
|
434
|
+
}
|