@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.
Files changed (282) hide show
  1. package/AGENT_GUIDE.md +424 -0
  2. package/CHANGELOG.md +448 -0
  3. package/LICENSE.txt +82 -0
  4. package/README.md +204 -0
  5. package/TASK.md +249 -0
  6. package/dist/cli.d.ts +7 -0
  7. package/dist/cli.js +683 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/args.d.ts +13 -0
  10. package/dist/commands/args.js +207 -0
  11. package/dist/commands/args.js.map +1 -0
  12. package/dist/commands/build.d.ts +11 -0
  13. package/dist/commands/build.js +209 -0
  14. package/dist/commands/build.js.map +1 -0
  15. package/dist/commands/connect.d.ts +8 -0
  16. package/dist/commands/connect.js +55 -0
  17. package/dist/commands/connect.js.map +1 -0
  18. package/dist/commands/describe.d.ts +6 -0
  19. package/dist/commands/describe.js +229 -0
  20. package/dist/commands/describe.js.map +1 -0
  21. package/dist/commands/meta.d.ts +9 -0
  22. package/dist/commands/meta.js +140 -0
  23. package/dist/commands/meta.js.map +1 -0
  24. package/dist/commands/navigate.d.ts +14 -0
  25. package/dist/commands/navigate.js +105 -0
  26. package/dist/commands/navigate.js.map +1 -0
  27. package/dist/commands/query-helpers.d.ts +80 -0
  28. package/dist/commands/query-helpers.js +865 -0
  29. package/dist/commands/query-helpers.js.map +1 -0
  30. package/dist/commands/query.d.ts +26 -0
  31. package/dist/commands/query.js +901 -0
  32. package/dist/commands/query.js.map +1 -0
  33. package/dist/commands/review.d.ts +18 -0
  34. package/dist/commands/review.js +533 -0
  35. package/dist/commands/review.js.map +1 -0
  36. package/dist/commands/session-mgmt.d.ts +25 -0
  37. package/dist/commands/session-mgmt.js +206 -0
  38. package/dist/commands/session-mgmt.js.map +1 -0
  39. package/dist/commands/type.d.ts +6 -0
  40. package/dist/commands/type.js +342 -0
  41. package/dist/commands/type.js.map +1 -0
  42. package/dist/commands/validate-input.d.ts +6 -0
  43. package/dist/commands/validate-input.js +32 -0
  44. package/dist/commands/validate-input.js.map +1 -0
  45. package/dist/intent/build-aggregate.d.ts +33 -0
  46. package/dist/intent/build-aggregate.js +134 -0
  47. package/dist/intent/build-aggregate.js.map +1 -0
  48. package/dist/intent/build-create.d.ts +14 -0
  49. package/dist/intent/build-create.js +16 -0
  50. package/dist/intent/build-create.js.map +1 -0
  51. package/dist/intent/build-delete.d.ts +30 -0
  52. package/dist/intent/build-delete.js +53 -0
  53. package/dist/intent/build-delete.js.map +1 -0
  54. package/dist/intent/build-detail.d.ts +32 -0
  55. package/dist/intent/build-detail.js +80 -0
  56. package/dist/intent/build-detail.js.map +1 -0
  57. package/dist/intent/build-discover.d.ts +30 -0
  58. package/dist/intent/build-discover.js +149 -0
  59. package/dist/intent/build-discover.js.map +1 -0
  60. package/dist/intent/build-list.d.ts +28 -0
  61. package/dist/intent/build-list.js +75 -0
  62. package/dist/intent/build-list.js.map +1 -0
  63. package/dist/intent/build-mutation.d.ts +23 -0
  64. package/dist/intent/build-mutation.js +54 -0
  65. package/dist/intent/build-mutation.js.map +1 -0
  66. package/dist/intent/build-output.d.ts +27 -0
  67. package/dist/intent/build-output.js +60 -0
  68. package/dist/intent/build-output.js.map +1 -0
  69. package/dist/intent/build-raw.d.ts +23 -0
  70. package/dist/intent/build-raw.js +54 -0
  71. package/dist/intent/build-raw.js.map +1 -0
  72. package/dist/intent/build-update.d.ts +14 -0
  73. package/dist/intent/build-update.js +16 -0
  74. package/dist/intent/build-update.js.map +1 -0
  75. package/dist/intent/get-schema-with-priming.d.ts +26 -0
  76. package/dist/intent/get-schema-with-priming.js +32 -0
  77. package/dist/intent/get-schema-with-priming.js.map +1 -0
  78. package/dist/intent/select-child-relationship.d.ts +19 -0
  79. package/dist/intent/select-child-relationship.js +38 -0
  80. package/dist/intent/select-child-relationship.js.map +1 -0
  81. package/dist/intent/types.d.ts +159 -0
  82. package/dist/intent/types.js +21 -0
  83. package/dist/intent/types.js.map +1 -0
  84. package/dist/lib/apply-command.d.ts +15 -0
  85. package/dist/lib/apply-command.js +238 -0
  86. package/dist/lib/apply-command.js.map +1 -0
  87. package/dist/lib/auth.d.ts +38 -0
  88. package/dist/lib/auth.js +113 -0
  89. package/dist/lib/auth.js.map +1 -0
  90. package/dist/lib/codegen.d.ts +32 -0
  91. package/dist/lib/codegen.js +700 -0
  92. package/dist/lib/codegen.js.map +1 -0
  93. package/dist/lib/command-registry.d.ts +59 -0
  94. package/dist/lib/command-registry.js +366 -0
  95. package/dist/lib/command-registry.js.map +1 -0
  96. package/dist/lib/formatter.d.ts +76 -0
  97. package/dist/lib/formatter.js +419 -0
  98. package/dist/lib/formatter.js.map +1 -0
  99. package/dist/lib/fs-utils.d.ts +23 -0
  100. package/dist/lib/fs-utils.js +46 -0
  101. package/dist/lib/fs-utils.js.map +1 -0
  102. package/dist/lib/graphql-name.d.ts +27 -0
  103. package/dist/lib/graphql-name.js +32 -0
  104. package/dist/lib/graphql-name.js.map +1 -0
  105. package/dist/lib/interactive.d.ts +6 -0
  106. package/dist/lib/interactive.js +562 -0
  107. package/dist/lib/interactive.js.map +1 -0
  108. package/dist/lib/introspect.d.ts +40 -0
  109. package/dist/lib/introspect.js +280 -0
  110. package/dist/lib/introspect.js.map +1 -0
  111. package/dist/lib/object-info.d.ts +79 -0
  112. package/dist/lib/object-info.js +313 -0
  113. package/dist/lib/object-info.js.map +1 -0
  114. package/dist/lib/path-selection.d.ts +50 -0
  115. package/dist/lib/path-selection.js +146 -0
  116. package/dist/lib/path-selection.js.map +1 -0
  117. package/dist/lib/prime-schema.d.ts +59 -0
  118. package/dist/lib/prime-schema.js +158 -0
  119. package/dist/lib/prime-schema.js.map +1 -0
  120. package/dist/lib/query-builder.d.ts +10 -0
  121. package/dist/lib/query-builder.js +168 -0
  122. package/dist/lib/query-builder.js.map +1 -0
  123. package/dist/lib/query-commands.d.ts +19 -0
  124. package/dist/lib/query-commands.js +262 -0
  125. package/dist/lib/query-commands.js.map +1 -0
  126. package/dist/lib/session.d.ts +205 -0
  127. package/dist/lib/session.js +1075 -0
  128. package/dist/lib/session.js.map +1 -0
  129. package/dist/lib/tokenize.d.ts +12 -0
  130. package/dist/lib/tokenize.js +48 -0
  131. package/dist/lib/tokenize.js.map +1 -0
  132. package/dist/lib/uiapi.d.ts +109 -0
  133. package/dist/lib/uiapi.js +159 -0
  134. package/dist/lib/uiapi.js.map +1 -0
  135. package/dist/lib/validator.d.ts +27 -0
  136. package/dist/lib/validator.js +100 -0
  137. package/dist/lib/validator.js.map +1 -0
  138. package/dist/lib/variable-promotion.d.ts +69 -0
  139. package/dist/lib/variable-promotion.js +95 -0
  140. package/dist/lib/variable-promotion.js.map +1 -0
  141. package/dist/lib/walker.d.ts +147 -0
  142. package/dist/lib/walker.js +723 -0
  143. package/dist/lib/walker.js.map +1 -0
  144. package/dist/mcp/server.d.ts +7 -0
  145. package/dist/mcp/server.js +34 -0
  146. package/dist/mcp/server.js.map +1 -0
  147. package/dist/mcp/stdio.d.ts +7 -0
  148. package/dist/mcp/stdio.js +25 -0
  149. package/dist/mcp/stdio.js.map +1 -0
  150. package/dist/mcp/tools/echo.d.ts +7 -0
  151. package/dist/mcp/tools/echo.js +17 -0
  152. package/dist/mcp/tools/echo.js.map +1 -0
  153. package/dist/mcp/tools/sf-gql-aggregate.d.ts +11 -0
  154. package/dist/mcp/tools/sf-gql-aggregate.js +75 -0
  155. package/dist/mcp/tools/sf-gql-aggregate.js.map +1 -0
  156. package/dist/mcp/tools/sf-gql-create.d.ts +11 -0
  157. package/dist/mcp/tools/sf-gql-create.js +35 -0
  158. package/dist/mcp/tools/sf-gql-create.js.map +1 -0
  159. package/dist/mcp/tools/sf-gql-delete.d.ts +11 -0
  160. package/dist/mcp/tools/sf-gql-delete.js +31 -0
  161. package/dist/mcp/tools/sf-gql-delete.js.map +1 -0
  162. package/dist/mcp/tools/sf-gql-detail.d.ts +11 -0
  163. package/dist/mcp/tools/sf-gql-detail.js +58 -0
  164. package/dist/mcp/tools/sf-gql-detail.js.map +1 -0
  165. package/dist/mcp/tools/sf-gql-discover.d.ts +9 -0
  166. package/dist/mcp/tools/sf-gql-discover.js +51 -0
  167. package/dist/mcp/tools/sf-gql-discover.js.map +1 -0
  168. package/dist/mcp/tools/sf-gql-list.d.ts +11 -0
  169. package/dist/mcp/tools/sf-gql-list.js +53 -0
  170. package/dist/mcp/tools/sf-gql-list.js.map +1 -0
  171. package/dist/mcp/tools/sf-gql-raw.d.ts +11 -0
  172. package/dist/mcp/tools/sf-gql-raw.js +39 -0
  173. package/dist/mcp/tools/sf-gql-raw.js.map +1 -0
  174. package/dist/mcp/tools/sf-gql-update.d.ts +11 -0
  175. package/dist/mcp/tools/sf-gql-update.js +35 -0
  176. package/dist/mcp/tools/sf-gql-update.js.map +1 -0
  177. package/dist/mcp/tools/shared/zod-schemas.d.ts +49 -0
  178. package/dist/mcp/tools/shared/zod-schemas.js +46 -0
  179. package/dist/mcp/tools/shared/zod-schemas.js.map +1 -0
  180. package/package.json +36 -0
  181. package/ralph-loop.sh +120 -0
  182. package/scripts/smoke-orderby.sh +190 -0
  183. package/src/__tests__/helpers/prime-deps.ts +46 -0
  184. package/src/__tests__/helpers/schema.ts +73 -0
  185. package/src/__tests__/helpers/stdout.ts +33 -0
  186. package/src/__tests__/setup.ts +19 -0
  187. package/src/cli.ts +764 -0
  188. package/src/commands/__tests__/query.spec.ts +137 -0
  189. package/src/commands/args.ts +306 -0
  190. package/src/commands/build.ts +288 -0
  191. package/src/commands/connect.ts +60 -0
  192. package/src/commands/describe.ts +246 -0
  193. package/src/commands/meta.ts +171 -0
  194. package/src/commands/navigate.ts +134 -0
  195. package/src/commands/query-helpers.ts +1202 -0
  196. package/src/commands/query.ts +1085 -0
  197. package/src/commands/review.ts +670 -0
  198. package/src/commands/session-mgmt.ts +256 -0
  199. package/src/commands/type.ts +437 -0
  200. package/src/commands/validate-input.ts +38 -0
  201. package/src/intent/__tests__/build-aggregate.spec.ts +931 -0
  202. package/src/intent/__tests__/build-create-validation.spec.ts +135 -0
  203. package/src/intent/__tests__/build-delete.spec.ts +121 -0
  204. package/src/intent/__tests__/build-detail.spec.ts +333 -0
  205. package/src/intent/__tests__/build-discover.spec.ts +432 -0
  206. package/src/intent/__tests__/build-list.spec.ts +284 -0
  207. package/src/intent/__tests__/build-mutation.spec.ts +108 -0
  208. package/src/intent/__tests__/build-output.spec.ts +55 -0
  209. package/src/intent/__tests__/build-raw.spec.ts +153 -0
  210. package/src/intent/__tests__/build-update-validation.spec.ts +134 -0
  211. package/src/intent/build-aggregate.ts +182 -0
  212. package/src/intent/build-create.ts +19 -0
  213. package/src/intent/build-delete.ts +62 -0
  214. package/src/intent/build-detail.ts +95 -0
  215. package/src/intent/build-discover.ts +199 -0
  216. package/src/intent/build-list.ts +91 -0
  217. package/src/intent/build-mutation.ts +75 -0
  218. package/src/intent/build-output.ts +72 -0
  219. package/src/intent/build-raw.ts +61 -0
  220. package/src/intent/build-update.ts +19 -0
  221. package/src/intent/get-schema-with-priming.ts +43 -0
  222. package/src/intent/select-child-relationship.ts +48 -0
  223. package/src/intent/types.ts +181 -0
  224. package/src/lib/__tests__/apply-command.parity.spec.ts +97 -0
  225. package/src/lib/__tests__/apply-command.spec.ts +171 -0
  226. package/src/lib/__tests__/auth.spec.ts +292 -0
  227. package/src/lib/__tests__/formatter.spec.ts +86 -0
  228. package/src/lib/__tests__/graphql-name.spec.ts +64 -0
  229. package/src/lib/__tests__/introspect.spec.ts +399 -0
  230. package/src/lib/__tests__/object-info.spec.ts +124 -0
  231. package/src/lib/__tests__/path-selection.spec.ts +219 -0
  232. package/src/lib/__tests__/prime-schema.spec.ts +269 -0
  233. package/src/lib/__tests__/query-builder.spec.ts +95 -0
  234. package/src/lib/__tests__/query-commands.spec.ts +74 -0
  235. package/src/lib/__tests__/session.spec.ts +292 -0
  236. package/src/lib/__tests__/tokenize.spec.ts +33 -0
  237. package/src/lib/__tests__/uiapi.spec.ts +192 -0
  238. package/src/lib/__tests__/variable-promotion.spec.ts +211 -0
  239. package/src/lib/__tests__/walker.spec.ts +250 -0
  240. package/src/lib/apply-command.ts +286 -0
  241. package/src/lib/auth.ts +157 -0
  242. package/src/lib/codegen.ts +899 -0
  243. package/src/lib/command-registry.ts +434 -0
  244. package/src/lib/formatter.ts +587 -0
  245. package/src/lib/fs-utils.ts +46 -0
  246. package/src/lib/graphql-name.ts +35 -0
  247. package/src/lib/interactive.ts +634 -0
  248. package/src/lib/introspect.ts +320 -0
  249. package/src/lib/object-info.ts +409 -0
  250. package/src/lib/path-selection.ts +162 -0
  251. package/src/lib/prime-schema.ts +195 -0
  252. package/src/lib/query-builder.ts +193 -0
  253. package/src/lib/query-commands.ts +290 -0
  254. package/src/lib/session.ts +1304 -0
  255. package/src/lib/tokenize.ts +43 -0
  256. package/src/lib/uiapi.ts +176 -0
  257. package/src/lib/validator.ts +143 -0
  258. package/src/lib/variable-promotion.ts +145 -0
  259. package/src/lib/walker.ts +975 -0
  260. package/src/mcp/__tests__/server.spec.ts +155 -0
  261. package/src/mcp/server.ts +38 -0
  262. package/src/mcp/stdio.ts +29 -0
  263. package/src/mcp/tools/__tests__/sf-gql-aggregate.spec.ts +173 -0
  264. package/src/mcp/tools/__tests__/sf-gql-create.spec.ts +235 -0
  265. package/src/mcp/tools/__tests__/sf-gql-delete.spec.ts +194 -0
  266. package/src/mcp/tools/__tests__/sf-gql-detail.spec.ts +246 -0
  267. package/src/mcp/tools/__tests__/sf-gql-discover.spec.ts +320 -0
  268. package/src/mcp/tools/__tests__/sf-gql-list.spec.ts +128 -0
  269. package/src/mcp/tools/__tests__/sf-gql-raw.spec.ts +141 -0
  270. package/src/mcp/tools/__tests__/sf-gql-update.spec.ts +207 -0
  271. package/src/mcp/tools/echo.ts +24 -0
  272. package/src/mcp/tools/sf-gql-aggregate.ts +102 -0
  273. package/src/mcp/tools/sf-gql-create.ts +55 -0
  274. package/src/mcp/tools/sf-gql-delete.ts +49 -0
  275. package/src/mcp/tools/sf-gql-detail.ts +85 -0
  276. package/src/mcp/tools/sf-gql-discover.ts +67 -0
  277. package/src/mcp/tools/sf-gql-list.ts +73 -0
  278. package/src/mcp/tools/sf-gql-raw.ts +56 -0
  279. package/src/mcp/tools/sf-gql-update.ts +55 -0
  280. package/src/mcp/tools/shared/zod-schemas.ts +55 -0
  281. package/tsconfig.json +18 -0
  282. 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
+ }