llm-cli-gateway 2.13.2 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +139 -0
- package/README.md +68 -29
- package/dist/acp/client.d.ts +29 -1
- package/dist/acp/client.js +78 -4
- package/dist/acp/errors.d.ts +9 -1
- package/dist/acp/errors.js +19 -0
- package/dist/acp/event-normalizer.d.ts +12 -0
- package/dist/acp/event-normalizer.js +16 -0
- package/dist/acp/flight-redaction.d.ts +3 -0
- package/dist/acp/flight-redaction.js +3 -0
- package/dist/acp/permission-bridge.js +11 -5
- package/dist/acp/process-manager.d.ts +2 -1
- package/dist/acp/process-manager.js +43 -4
- package/dist/acp/provider-registry.js +19 -11
- package/dist/acp/runtime.d.ts +8 -0
- package/dist/acp/runtime.js +47 -4
- package/dist/acp/types.d.ts +3083 -55
- package/dist/acp/types.js +242 -5
- package/dist/async-job-manager.d.ts +38 -1
- package/dist/async-job-manager.js +287 -20
- package/dist/codex-json-parser.d.ts +1 -0
- package/dist/codex-json-parser.js +6 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.js +84 -1
- package/dist/flight-recorder.d.ts +2 -0
- package/dist/flight-recorder.js +20 -0
- package/dist/gemini-json-parser.d.ts +2 -0
- package/dist/gemini-json-parser.js +45 -8
- package/dist/grok-json-parser.d.ts +14 -0
- package/dist/grok-json-parser.js +156 -0
- package/dist/index.d.ts +47 -2
- package/dist/index.js +504 -122
- package/dist/job-store.d.ts +119 -11
- package/dist/job-store.js +372 -42
- package/dist/model-registry.d.ts +1 -0
- package/dist/model-registry.js +46 -0
- package/dist/oauth.js +2 -2
- package/dist/postgres-job-store-worker.d.ts +1 -0
- package/dist/postgres-job-store-worker.js +444 -0
- package/dist/pricing.d.ts +3 -2
- package/dist/provider-acp-capabilities.d.ts +52 -0
- package/dist/provider-acp-capabilities.js +101 -0
- package/dist/provider-admin-tools.d.ts +100 -0
- package/dist/provider-admin-tools.js +572 -0
- package/dist/provider-capability-cache.d.ts +46 -0
- package/dist/provider-capability-cache.js +248 -0
- package/dist/provider-capability-discovery.d.ts +85 -0
- package/dist/provider-capability-discovery.js +461 -0
- package/dist/provider-capability-resolver.d.ts +29 -0
- package/dist/provider-capability-resolver.js +92 -0
- package/dist/provider-definition-assertions.d.ts +9 -0
- package/dist/provider-definition-assertions.js +147 -0
- package/dist/provider-definitions.d.ts +127 -0
- package/dist/provider-definitions.js +758 -0
- package/dist/provider-help-parser.d.ts +34 -0
- package/dist/provider-help-parser.js +203 -0
- package/dist/provider-model-discovery.d.ts +30 -0
- package/dist/provider-model-discovery.js +229 -0
- package/dist/provider-output-metadata.d.ts +7 -0
- package/dist/provider-output-metadata.js +68 -0
- package/dist/provider-schema-builder.d.ts +22 -0
- package/dist/provider-schema-builder.js +55 -0
- package/dist/provider-surface-generator.d.ts +98 -0
- package/dist/provider-surface-generator.js +140 -0
- package/dist/provider-tool-capabilities.d.ts +3 -2
- package/dist/provider-tool-capabilities.js +77 -62
- package/dist/request-helpers.d.ts +37 -4
- package/dist/request-helpers.js +134 -0
- package/dist/resources.d.ts +6 -1
- package/dist/resources.js +64 -192
- package/dist/session-manager.js +18 -11
- package/dist/sqlite-driver.d.ts +1 -1
- package/dist/sqlite-driver.js +2 -1
- package/dist/stream-json-parser.d.ts +1 -0
- package/dist/stream-json-parser.js +3 -0
- package/dist/upstream-contracts.d.ts +17 -1
- package/dist/upstream-contracts.js +209 -36
- package/npm-shrinkwrap.json +2 -2
- package/package.json +8 -3
|
@@ -0,0 +1,758 @@
|
|
|
1
|
+
import { CLI_TYPES } from "./provider-types.js";
|
|
2
|
+
export { CLI_TYPES };
|
|
3
|
+
export function adminSurfaceKind(family) {
|
|
4
|
+
return family.kind ?? "cli-subcommand";
|
|
5
|
+
}
|
|
6
|
+
export const DEVIN_ACP_AGENT_TYPES = ["summarizer", "review"];
|
|
7
|
+
const PROVIDER_DEFINITIONS = {
|
|
8
|
+
claude: {
|
|
9
|
+
id: "claude",
|
|
10
|
+
displayName: "Anthropic Claude Code",
|
|
11
|
+
sessionLabel: "Claude Session",
|
|
12
|
+
icon: "🤖",
|
|
13
|
+
executables: ["claude"],
|
|
14
|
+
primaryExecutable: "claude",
|
|
15
|
+
requestSurface: {
|
|
16
|
+
sync: true,
|
|
17
|
+
async: true,
|
|
18
|
+
transport: "cli",
|
|
19
|
+
acpCapable: false,
|
|
20
|
+
syncToolName: "claude_request",
|
|
21
|
+
asyncToolName: "claude_request_async",
|
|
22
|
+
},
|
|
23
|
+
docs: { primary: ["https://code.claude.com/docs/en/cli-reference"] },
|
|
24
|
+
discovery: {
|
|
25
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
26
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
27
|
+
subcommandHelp: [
|
|
28
|
+
{ argv: ["mcp", "--help"], purpose: "subcommand-help" },
|
|
29
|
+
{ argv: ["plugin", "--help"], purpose: "subcommand-help" },
|
|
30
|
+
{ argv: ["doctor", "--help"], purpose: "subcommand-help" },
|
|
31
|
+
{ argv: ["auth", "--help"], purpose: "subcommand-help" },
|
|
32
|
+
],
|
|
33
|
+
modelDiscovery: {
|
|
34
|
+
strategy: "static-catalog",
|
|
35
|
+
argv: [],
|
|
36
|
+
parse: "curated-catalog",
|
|
37
|
+
fallbackPolicy: "curated-static-catalog",
|
|
38
|
+
configSources: [
|
|
39
|
+
{
|
|
40
|
+
kind: "env",
|
|
41
|
+
keys: ["CLAUDE_DEFAULT_MODEL", "CLAUDE_MODELS", "CLAUDE_MODEL_ALIASES"],
|
|
42
|
+
note: "Gateway env overrides for the Claude default model, extra models, and aliases.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
kind: "config-file",
|
|
46
|
+
path: ".claude/settings.json",
|
|
47
|
+
keys: ["model", "model.name"],
|
|
48
|
+
note: "Claude settings.json / settings.local.json default model.",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
facts: {
|
|
52
|
+
effortLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
53
|
+
supportsFallbackModelChain: true,
|
|
54
|
+
aliases: ["fable", "opus", "sonnet"],
|
|
55
|
+
agentProfiles: [],
|
|
56
|
+
},
|
|
57
|
+
evidence: "Claude Code has no read-only model-listing command; aliases ('fable'/'opus'/'sonnet') and full ids ('claude-fable-5'), --effort levels (low/medium/high/xhigh/max), and --fallback-model comma-separated chains come from claude --help and the CLI reference, curated as an accurate catalog.",
|
|
58
|
+
},
|
|
59
|
+
sessionContinuity: {
|
|
60
|
+
continue: true,
|
|
61
|
+
resume: true,
|
|
62
|
+
fork: true,
|
|
63
|
+
sessionIdSelection: true,
|
|
64
|
+
flags: ["--continue", "--session-id", "--resume", "--fork-session"],
|
|
65
|
+
evidence: "claude --help: --continue, --session-id, --resume, --fork-session.",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
adminSubcommands: [
|
|
69
|
+
{ family: "auth", safety: "mutating-gated", evidence: "claude auth login/logout/status" },
|
|
70
|
+
{ family: "agents", safety: "mutating-gated", evidence: "claude agents" },
|
|
71
|
+
{
|
|
72
|
+
family: "mcp",
|
|
73
|
+
safety: "mutating-gated",
|
|
74
|
+
evidence: "claude mcp add/list/get/remove/login/logout/enable/disable",
|
|
75
|
+
},
|
|
76
|
+
{ family: "plugin", safety: "mutating-gated", evidence: "claude plugin and plugins" },
|
|
77
|
+
{ family: "project", safety: "mutating-gated", evidence: "claude project purge" },
|
|
78
|
+
{ family: "doctor", safety: "read-only", evidence: "claude doctor" },
|
|
79
|
+
{ family: "update", safety: "mutating-gated", evidence: "claude update/upgrade" },
|
|
80
|
+
{ family: "install", safety: "mutating-gated", evidence: "claude install" },
|
|
81
|
+
{ family: "setup-token", safety: "mutating-gated", evidence: "claude setup-token" },
|
|
82
|
+
{ family: "ultrareview", safety: "read-only", evidence: "claude ultrareview" },
|
|
83
|
+
],
|
|
84
|
+
acp: {
|
|
85
|
+
classification: "none",
|
|
86
|
+
nativeEntrypoint: null,
|
|
87
|
+
entrypoint: null,
|
|
88
|
+
probeArgv: [],
|
|
89
|
+
evidence: "No native Claude Code ACP subcommand or flag in installed help (claude 2.1.198) or the official CLI reference. Coverage is CLI-first; ACP reporting says no native entrypoint is advertised.",
|
|
90
|
+
},
|
|
91
|
+
safetyModes: {
|
|
92
|
+
sandbox: false,
|
|
93
|
+
permissionMode: true,
|
|
94
|
+
approvalMode: false,
|
|
95
|
+
trust: false,
|
|
96
|
+
flags: ["--permission-mode", "--dangerously-skip-permissions"],
|
|
97
|
+
},
|
|
98
|
+
outputFormats: ["text", "json", "stream-json"],
|
|
99
|
+
streamingFormats: ["stream-json"],
|
|
100
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
101
|
+
upstreamContract: { targetVersion: "Claude Code 2.1.198", helpChecksumRef: "claude--help.txt" },
|
|
102
|
+
capabilityScope: "full",
|
|
103
|
+
},
|
|
104
|
+
codex: {
|
|
105
|
+
id: "codex",
|
|
106
|
+
displayName: "OpenAI Codex CLI",
|
|
107
|
+
sessionLabel: "Codex Session",
|
|
108
|
+
icon: "💻",
|
|
109
|
+
executables: ["codex"],
|
|
110
|
+
primaryExecutable: "codex",
|
|
111
|
+
requestSurface: {
|
|
112
|
+
sync: true,
|
|
113
|
+
async: true,
|
|
114
|
+
transport: "cli",
|
|
115
|
+
acpCapable: false,
|
|
116
|
+
syncToolName: "codex_request",
|
|
117
|
+
asyncToolName: "codex_request_async",
|
|
118
|
+
},
|
|
119
|
+
docs: {
|
|
120
|
+
primary: [
|
|
121
|
+
"https://developers.openai.com/codex/cli",
|
|
122
|
+
"https://developers.openai.com/codex/cli/reference",
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
discovery: {
|
|
126
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
127
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
128
|
+
subcommandHelp: [
|
|
129
|
+
{ argv: ["exec", "--help"], purpose: "subcommand-help" },
|
|
130
|
+
{ argv: ["exec", "resume", "--help"], purpose: "subcommand-help" },
|
|
131
|
+
{ argv: ["mcp", "--help"], purpose: "subcommand-help" },
|
|
132
|
+
{ argv: ["doctor", "--help"], purpose: "subcommand-help" },
|
|
133
|
+
{ argv: ["login", "--help"], purpose: "subcommand-help" },
|
|
134
|
+
],
|
|
135
|
+
modelDiscovery: {
|
|
136
|
+
strategy: "native-command",
|
|
137
|
+
argv: ["debug", "models"],
|
|
138
|
+
parse: "codex-debug-json",
|
|
139
|
+
fallbackPolicy: "live-catalog-primary",
|
|
140
|
+
configSources: [
|
|
141
|
+
{
|
|
142
|
+
kind: "config-file",
|
|
143
|
+
path: ".codex/config.toml",
|
|
144
|
+
keys: ["model", "profiles.*.model", "notice.model_migrations"],
|
|
145
|
+
note: "Codex config default model, profile model overrides, and migration targets.",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
kind: "env",
|
|
149
|
+
keys: ["CODEX_DEFAULT_MODEL", "CODEX_MODELS"],
|
|
150
|
+
note: "Gateway env overrides for the Codex default model and extra models.",
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
facts: {
|
|
154
|
+
effortLevels: ["low", "medium", "high", "xhigh"],
|
|
155
|
+
supportsFallbackModelChain: false,
|
|
156
|
+
aliases: [],
|
|
157
|
+
agentProfiles: [],
|
|
158
|
+
},
|
|
159
|
+
evidence: "codex debug models renders the raw model catalog as JSON ({models:[{slug,display_name,visibility,supported_in_api,supported_reasoning_levels}]}); visibility list vs hide distinguishes the live catalog, and the model-registry bundled fallback stays the offline/bundled catalog.",
|
|
160
|
+
},
|
|
161
|
+
sessionContinuity: {
|
|
162
|
+
continue: false,
|
|
163
|
+
resume: true,
|
|
164
|
+
fork: true,
|
|
165
|
+
sessionIdSelection: true,
|
|
166
|
+
flags: ["exec resume", "exec resume --last", "fork", "--all"],
|
|
167
|
+
evidence: "codex exec resume <UUID>/--last and codex fork; resume requires a real Codex UUID from ~/.codex/sessions/ (gw-* ids are rejected).",
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
adminSubcommands: [
|
|
171
|
+
{ family: "login", safety: "mutating-gated", evidence: "codex login/logout/status" },
|
|
172
|
+
{
|
|
173
|
+
family: "mcp",
|
|
174
|
+
safety: "mutating-gated",
|
|
175
|
+
evidence: "codex mcp list/get/add/remove/login/logout",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
family: "plugin",
|
|
179
|
+
safety: "mutating-gated",
|
|
180
|
+
evidence: "codex plugin list/add/remove and marketplace",
|
|
181
|
+
},
|
|
182
|
+
{ family: "doctor", safety: "read-only", evidence: "codex doctor" },
|
|
183
|
+
{ family: "features", safety: "mutating-gated", evidence: "codex features" },
|
|
184
|
+
{ family: "sandbox", safety: "mutating-gated", evidence: "codex sandbox" },
|
|
185
|
+
{ family: "debug", safety: "read-only", evidence: "codex debug models" },
|
|
186
|
+
{ family: "cloud", safety: "mutating-gated", evidence: "codex cloud list/exec" },
|
|
187
|
+
{ family: "apply", safety: "mutating-gated", evidence: "codex apply" },
|
|
188
|
+
{
|
|
189
|
+
family: "resume",
|
|
190
|
+
safety: "mutating-gated",
|
|
191
|
+
evidence: "codex resume (continue a saved session)",
|
|
192
|
+
},
|
|
193
|
+
{ family: "archive", safety: "mutating-gated", evidence: "codex archive <session>" },
|
|
194
|
+
{
|
|
195
|
+
family: "delete",
|
|
196
|
+
safety: "mutating-gated",
|
|
197
|
+
evidence: "codex delete <session> (destructive)",
|
|
198
|
+
},
|
|
199
|
+
{ family: "unarchive", safety: "mutating-gated", evidence: "codex unarchive <session>" },
|
|
200
|
+
{
|
|
201
|
+
family: "fork",
|
|
202
|
+
safety: "mutating-gated",
|
|
203
|
+
evidence: "codex fork (executes agent; not exposed)",
|
|
204
|
+
},
|
|
205
|
+
{ family: "completion", safety: "read-only", evidence: "codex completion" },
|
|
206
|
+
{ family: "update", safety: "mutating-gated", evidence: "codex update" },
|
|
207
|
+
{
|
|
208
|
+
family: "app-server",
|
|
209
|
+
safety: "mutating-gated",
|
|
210
|
+
evidence: "codex app-server / mcp-server (Codex transports, not native ACP)",
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
acp: {
|
|
214
|
+
classification: "none",
|
|
215
|
+
nativeEntrypoint: null,
|
|
216
|
+
entrypoint: null,
|
|
217
|
+
probeArgv: [],
|
|
218
|
+
evidence: "codex-cli 0.142.4 advertises mcp-server and app-server transports, not a native ACP agent entrypoint. Third-party adapters exist but are documentation only and are never treated as native gateway ACP.",
|
|
219
|
+
},
|
|
220
|
+
safetyModes: {
|
|
221
|
+
sandbox: true,
|
|
222
|
+
permissionMode: false,
|
|
223
|
+
approvalMode: true,
|
|
224
|
+
trust: true,
|
|
225
|
+
flags: [
|
|
226
|
+
"--sandbox",
|
|
227
|
+
"--ask-for-approval",
|
|
228
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
229
|
+
"--dangerously-bypass-hook-trust",
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
outputFormats: ["text", "json"],
|
|
233
|
+
streamingFormats: ["jsonl"],
|
|
234
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
235
|
+
upstreamContract: {
|
|
236
|
+
targetVersion: "codex-cli 0.142.4",
|
|
237
|
+
helpChecksumRef: "codex-exec--help.txt",
|
|
238
|
+
},
|
|
239
|
+
capabilityScope: "full",
|
|
240
|
+
},
|
|
241
|
+
gemini: {
|
|
242
|
+
id: "gemini",
|
|
243
|
+
displayName: "Google Antigravity CLI",
|
|
244
|
+
sessionLabel: "Gemini Session",
|
|
245
|
+
icon: "✨",
|
|
246
|
+
executables: ["agy"],
|
|
247
|
+
primaryExecutable: "agy",
|
|
248
|
+
requestSurface: {
|
|
249
|
+
sync: true,
|
|
250
|
+
async: true,
|
|
251
|
+
transport: "cli",
|
|
252
|
+
acpCapable: false,
|
|
253
|
+
syncToolName: "gemini_request",
|
|
254
|
+
asyncToolName: "gemini_request_async",
|
|
255
|
+
},
|
|
256
|
+
docs: {
|
|
257
|
+
primary: [
|
|
258
|
+
"https://antigravity.google/docs/cli-overview",
|
|
259
|
+
"https://antigravity.google/docs/cli-using",
|
|
260
|
+
"https://antigravity.google/docs/cli/plugins",
|
|
261
|
+
"https://antigravity.google/docs/cli-features",
|
|
262
|
+
],
|
|
263
|
+
},
|
|
264
|
+
discovery: {
|
|
265
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
266
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
267
|
+
subcommandHelp: [
|
|
268
|
+
{ argv: ["models", "--help"], purpose: "subcommand-help" },
|
|
269
|
+
{ argv: ["plugin", "--help"], purpose: "subcommand-help" },
|
|
270
|
+
],
|
|
271
|
+
modelDiscovery: {
|
|
272
|
+
strategy: "native-command",
|
|
273
|
+
argv: ["models"],
|
|
274
|
+
parse: "agy-models-text",
|
|
275
|
+
fallbackPolicy: "live-catalog-primary",
|
|
276
|
+
configSources: [
|
|
277
|
+
{
|
|
278
|
+
kind: "config-file",
|
|
279
|
+
path: ".gemini/settings.json",
|
|
280
|
+
keys: ["model", "model.name", "selectedModel", "defaultModel"],
|
|
281
|
+
note: "Antigravity settings.json default/selected model.",
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
kind: "env",
|
|
285
|
+
keys: ["GEMINI_DEFAULT_MODEL", "GEMINI_MODELS"],
|
|
286
|
+
note: "Gateway env overrides for the Gemini default model and extra models.",
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
facts: {
|
|
290
|
+
effortLevels: [],
|
|
291
|
+
supportsFallbackModelChain: false,
|
|
292
|
+
aliases: ["flash", "pro"],
|
|
293
|
+
agentProfiles: [],
|
|
294
|
+
},
|
|
295
|
+
evidence: "agy models is the primary account-aware model discovery command (agy --help lists it); it prints one account model label per line (e.g. 'Gemini 3.5 Flash (Medium)').",
|
|
296
|
+
},
|
|
297
|
+
sessionContinuity: {
|
|
298
|
+
continue: true,
|
|
299
|
+
resume: true,
|
|
300
|
+
fork: false,
|
|
301
|
+
sessionIdSelection: true,
|
|
302
|
+
flags: ["--continue", "--conversation", "--project"],
|
|
303
|
+
evidence: "agy --help: --continue (most recent), --conversation <ID> (resume), --project/--new-project continuity.",
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
adminSubcommands: [
|
|
307
|
+
{ family: "models", safety: "read-only", evidence: "agy models" },
|
|
308
|
+
{
|
|
309
|
+
family: "plugin",
|
|
310
|
+
safety: "mutating-gated",
|
|
311
|
+
evidence: "agy plugin list/install/uninstall/enable/disable; plugins alias",
|
|
312
|
+
},
|
|
313
|
+
{ family: "changelog", safety: "read-only", evidence: "agy changelog" },
|
|
314
|
+
{ family: "install", safety: "mutating-gated", evidence: "agy install" },
|
|
315
|
+
{ family: "update", safety: "mutating-gated", evidence: "agy update" },
|
|
316
|
+
],
|
|
317
|
+
acp: {
|
|
318
|
+
classification: "none",
|
|
319
|
+
nativeEntrypoint: null,
|
|
320
|
+
entrypoint: null,
|
|
321
|
+
probeArgv: [],
|
|
322
|
+
evidence: "agy 1.0.14 has no ACP flag or subcommand in installed help or the Antigravity CLI docs. Legacy Gemini CLI ACP evidence does not transfer. No native entrypoint advertised.",
|
|
323
|
+
},
|
|
324
|
+
safetyModes: {
|
|
325
|
+
sandbox: true,
|
|
326
|
+
permissionMode: false,
|
|
327
|
+
approvalMode: true,
|
|
328
|
+
trust: false,
|
|
329
|
+
flags: ["--sandbox", "--dangerously-skip-permissions"],
|
|
330
|
+
},
|
|
331
|
+
outputFormats: ["text"],
|
|
332
|
+
streamingFormats: [],
|
|
333
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
334
|
+
upstreamContract: { targetVersion: "agy 1.0.14", helpChecksumRef: "agy--help.txt" },
|
|
335
|
+
capabilityScope: "full",
|
|
336
|
+
},
|
|
337
|
+
grok: {
|
|
338
|
+
id: "grok",
|
|
339
|
+
displayName: "xAI Grok Build",
|
|
340
|
+
sessionLabel: "Grok Session",
|
|
341
|
+
icon: "⚡",
|
|
342
|
+
executables: ["grok"],
|
|
343
|
+
primaryExecutable: "grok",
|
|
344
|
+
requestSurface: {
|
|
345
|
+
sync: true,
|
|
346
|
+
async: true,
|
|
347
|
+
transport: "cli",
|
|
348
|
+
acpCapable: true,
|
|
349
|
+
syncToolName: "grok_request",
|
|
350
|
+
asyncToolName: "grok_request_async",
|
|
351
|
+
},
|
|
352
|
+
docs: {
|
|
353
|
+
primary: [
|
|
354
|
+
"https://docs.x.ai/build/overview",
|
|
355
|
+
"https://x.ai/build/changelog",
|
|
356
|
+
"https://docs.x.ai/developers/models",
|
|
357
|
+
],
|
|
358
|
+
},
|
|
359
|
+
discovery: {
|
|
360
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
361
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
362
|
+
subcommandHelp: [
|
|
363
|
+
{ argv: ["agent", "--help"], purpose: "subcommand-help" },
|
|
364
|
+
{ argv: ["mcp", "--help"], purpose: "subcommand-help" },
|
|
365
|
+
{ argv: ["sessions", "--help"], purpose: "subcommand-help" },
|
|
366
|
+
],
|
|
367
|
+
modelDiscovery: {
|
|
368
|
+
strategy: "native-command",
|
|
369
|
+
argv: ["models"],
|
|
370
|
+
parse: "grok-models-text",
|
|
371
|
+
fallbackPolicy: "live-catalog-primary",
|
|
372
|
+
configSources: [
|
|
373
|
+
{
|
|
374
|
+
kind: "config-file",
|
|
375
|
+
path: ".grok/config.toml",
|
|
376
|
+
keys: ["models.default", "models", "ui.fork_secondary_model"],
|
|
377
|
+
note: "Grok config.toml configured default ([models].default) and custom model facts.",
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
kind: "env",
|
|
381
|
+
keys: ["GROK_DEFAULT_MODEL", "GROK_MODELS"],
|
|
382
|
+
note: "Gateway env overrides for the Grok default model and extra models.",
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
facts: {
|
|
386
|
+
effortLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
387
|
+
supportsFallbackModelChain: false,
|
|
388
|
+
aliases: [],
|
|
389
|
+
agentProfiles: [],
|
|
390
|
+
},
|
|
391
|
+
evidence: "grok models lists the CLI-local catalog ('Default model: X' then '* id (default)'/'- id' lines); ~/.grok/config.toml [models].default and custom model facts are additional. Native Grok Build API models are catalogued separately.",
|
|
392
|
+
},
|
|
393
|
+
sessionContinuity: {
|
|
394
|
+
continue: true,
|
|
395
|
+
resume: true,
|
|
396
|
+
fork: true,
|
|
397
|
+
sessionIdSelection: true,
|
|
398
|
+
flags: ["--continue", "--resume", "--fork-session", "--session-id"],
|
|
399
|
+
evidence: "grok --help: --resume/--continue/--fork-session/--session-id.",
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
adminSubcommands: [
|
|
403
|
+
{ family: "models", safety: "read-only", evidence: "grok models" },
|
|
404
|
+
{ family: "inspect", safety: "read-only", evidence: "grok inspect" },
|
|
405
|
+
{ family: "mcp", safety: "mutating-gated", evidence: "grok mcp" },
|
|
406
|
+
{ family: "plugin", safety: "mutating-gated", evidence: "grok plugin" },
|
|
407
|
+
{
|
|
408
|
+
family: "sessions",
|
|
409
|
+
safety: "mutating-gated",
|
|
410
|
+
evidence: "grok sessions; grok export/import",
|
|
411
|
+
},
|
|
412
|
+
{ family: "worktree", safety: "mutating-gated", evidence: "grok worktree" },
|
|
413
|
+
{ family: "dashboard", safety: "mutating-gated", evidence: "grok dashboard" },
|
|
414
|
+
{ family: "leader", safety: "mutating-gated", evidence: "grok leader" },
|
|
415
|
+
{ family: "memory", safety: "mutating-gated", evidence: "grok memory" },
|
|
416
|
+
{ family: "trace", safety: "read-only", evidence: "grok trace" },
|
|
417
|
+
{ family: "setup", safety: "mutating-gated", evidence: "grok setup" },
|
|
418
|
+
{ family: "auth", safety: "mutating-gated", evidence: "grok login/logout" },
|
|
419
|
+
{ family: "update", safety: "mutating-gated", evidence: "grok update" },
|
|
420
|
+
],
|
|
421
|
+
acp: {
|
|
422
|
+
classification: "native",
|
|
423
|
+
nativeEntrypoint: "grok agent stdio",
|
|
424
|
+
entrypoint: { command: "grok", args: ["agent", "stdio"] },
|
|
425
|
+
probeArgv: [["agent", "stdio", "--help"]],
|
|
426
|
+
evidence: "Official xAI docs: Grok Build runs via TUI, headless scripts, or ACP in other apps. Installed help advertises `grok agent stdio`. `grok agent stdio --help` is the safe probe; bare `grok agent stdio` starts the live server and is never probed.",
|
|
427
|
+
},
|
|
428
|
+
safetyModes: {
|
|
429
|
+
sandbox: true,
|
|
430
|
+
permissionMode: true,
|
|
431
|
+
approvalMode: true,
|
|
432
|
+
trust: false,
|
|
433
|
+
flags: ["--sandbox", "--permission-mode", "--always-approve", "--allow", "--deny"],
|
|
434
|
+
},
|
|
435
|
+
outputFormats: ["text", "json"],
|
|
436
|
+
streamingFormats: ["json"],
|
|
437
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
438
|
+
upstreamContract: {
|
|
439
|
+
targetVersion: "grok 0.2.77 (44e77bec3a)",
|
|
440
|
+
helpChecksumRef: "grok--help.txt",
|
|
441
|
+
},
|
|
442
|
+
capabilityScope: "full",
|
|
443
|
+
},
|
|
444
|
+
mistral: {
|
|
445
|
+
id: "mistral",
|
|
446
|
+
displayName: "Mistral Vibe",
|
|
447
|
+
sessionLabel: "Mistral Session",
|
|
448
|
+
icon: "🌬",
|
|
449
|
+
executables: ["vibe", "vibe-acp"],
|
|
450
|
+
primaryExecutable: "vibe",
|
|
451
|
+
requestSurface: {
|
|
452
|
+
sync: true,
|
|
453
|
+
async: true,
|
|
454
|
+
transport: "cli",
|
|
455
|
+
acpCapable: true,
|
|
456
|
+
syncToolName: "mistral_request",
|
|
457
|
+
asyncToolName: "mistral_request_async",
|
|
458
|
+
},
|
|
459
|
+
docs: { primary: ["https://github.com/mistralai/mistral-vibe"] },
|
|
460
|
+
discovery: {
|
|
461
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
462
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
463
|
+
subcommandHelp: [{ argv: ["--help"], purpose: "subcommand-help", executable: "vibe-acp" }],
|
|
464
|
+
modelDiscovery: {
|
|
465
|
+
strategy: "config-inspection",
|
|
466
|
+
argv: [],
|
|
467
|
+
parse: "config-or-env",
|
|
468
|
+
fallbackPolicy: "config-active-model",
|
|
469
|
+
configSources: [
|
|
470
|
+
{
|
|
471
|
+
kind: "env",
|
|
472
|
+
keys: ["VIBE_ACTIVE_MODEL", "MISTRAL_DEFAULT_MODEL", "VIBE_MODELS"],
|
|
473
|
+
note: "Vibe active model via env; there is NO --model flag (VIBE_* overrides config).",
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
kind: "config-file",
|
|
477
|
+
path: ".vibe/config.toml",
|
|
478
|
+
keys: ["active_model", "default_agent", "models"],
|
|
479
|
+
note: "Vibe config.toml active_model, default_agent, and custom models.",
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
facts: {
|
|
483
|
+
effortLevels: [],
|
|
484
|
+
supportsFallbackModelChain: false,
|
|
485
|
+
aliases: [],
|
|
486
|
+
agentProfiles: ["default", "plan", "accept-edits", "auto-approve", "custom"],
|
|
487
|
+
},
|
|
488
|
+
evidence: "Vibe has NO --model flag; the active model is selected via VIBE_ACTIVE_MODEL and config.toml active_model. default_agent plus --agent profiles (default, plan, accept-edits, auto-approve, or custom from ~/.vibe/agents/NAME.toml) are the vibe --help agent-profile facts.",
|
|
489
|
+
},
|
|
490
|
+
sessionContinuity: {
|
|
491
|
+
continue: true,
|
|
492
|
+
resume: true,
|
|
493
|
+
fork: false,
|
|
494
|
+
sessionIdSelection: true,
|
|
495
|
+
flags: ["--continue", "--resume"],
|
|
496
|
+
evidence: "vibe --help: --continue/--resume.",
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
adminSubcommands: [
|
|
500
|
+
{
|
|
501
|
+
family: "setup",
|
|
502
|
+
safety: "mutating-gated",
|
|
503
|
+
kind: "cli-flag",
|
|
504
|
+
evidence: "vibe --help: --setup (Setup API key and exit).",
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
family: "check-upgrade",
|
|
508
|
+
safety: "mutating-gated",
|
|
509
|
+
kind: "cli-flag",
|
|
510
|
+
evidence: "vibe --help: --check-upgrade (Check for a Vibe update now, prompt to install it, and exit); mutating.",
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
family: "config",
|
|
514
|
+
safety: "read-only",
|
|
515
|
+
kind: "config-projection",
|
|
516
|
+
evidence: "Projection of VIBE_HOME/config.toml (vibe --help env: VIBE_HOME, VIBE_*).",
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
family: "mcp",
|
|
520
|
+
safety: "read-only",
|
|
521
|
+
kind: "config-projection",
|
|
522
|
+
evidence: "Projection of MCP server config from VIBE_HOME config; no vibe mcp subcommand.",
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
family: "skills",
|
|
526
|
+
safety: "read-only",
|
|
527
|
+
kind: "config-projection",
|
|
528
|
+
evidence: "Projection of discovered skills from VIBE_HOME; no vibe skills subcommand.",
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
family: "agents",
|
|
532
|
+
safety: "read-only",
|
|
533
|
+
kind: "config-projection",
|
|
534
|
+
evidence: "Projection of agent profiles (~/.vibe/agents/*.toml, per --agent help); no vibe agents subcommand.",
|
|
535
|
+
},
|
|
536
|
+
],
|
|
537
|
+
acp: {
|
|
538
|
+
classification: "native",
|
|
539
|
+
nativeEntrypoint: "vibe-acp",
|
|
540
|
+
entrypoint: { command: "vibe-acp", args: [] },
|
|
541
|
+
probeArgv: [["--version"], ["--help"]],
|
|
542
|
+
evidence: "Mistral Vibe README: ACP-capable editors/IDEs can use Vibe. Installed `vibe-acp --help` advertises ACP mode. Probes are `vibe-acp --version`/`--help`; bare `vibe-acp` starts the live server and is never probed.",
|
|
543
|
+
},
|
|
544
|
+
safetyModes: {
|
|
545
|
+
sandbox: false,
|
|
546
|
+
permissionMode: false,
|
|
547
|
+
approvalMode: true,
|
|
548
|
+
trust: true,
|
|
549
|
+
flags: ["--auto-approve", "--yolo", "--trust"],
|
|
550
|
+
},
|
|
551
|
+
outputFormats: ["text", "json"],
|
|
552
|
+
streamingFormats: [],
|
|
553
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
554
|
+
upstreamContract: { targetVersion: "vibe 2.18.3", helpChecksumRef: "vibe--help.txt" },
|
|
555
|
+
capabilityScope: "full",
|
|
556
|
+
},
|
|
557
|
+
devin: {
|
|
558
|
+
id: "devin",
|
|
559
|
+
displayName: "Cognition Devin CLI",
|
|
560
|
+
sessionLabel: "Devin Session",
|
|
561
|
+
icon: "🔷",
|
|
562
|
+
executables: ["devin"],
|
|
563
|
+
primaryExecutable: "devin",
|
|
564
|
+
requestSurface: {
|
|
565
|
+
sync: true,
|
|
566
|
+
async: true,
|
|
567
|
+
transport: "cli",
|
|
568
|
+
acpCapable: true,
|
|
569
|
+
syncToolName: "devin_request",
|
|
570
|
+
asyncToolName: "devin_request_async",
|
|
571
|
+
},
|
|
572
|
+
docs: { primary: ["https://docs.devin.ai/cli/reference/commands"] },
|
|
573
|
+
discovery: {
|
|
574
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
575
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
576
|
+
subcommandHelp: [
|
|
577
|
+
{ argv: ["acp", "--help"], purpose: "subcommand-help" },
|
|
578
|
+
{ argv: ["mcp", "--help"], purpose: "subcommand-help" },
|
|
579
|
+
{ argv: ["auth", "--help"], purpose: "subcommand-help" },
|
|
580
|
+
],
|
|
581
|
+
modelDiscovery: {
|
|
582
|
+
strategy: "config-inspection",
|
|
583
|
+
argv: [],
|
|
584
|
+
parse: "config-or-env",
|
|
585
|
+
fallbackPolicy: "cli-owned-surface-only",
|
|
586
|
+
configSources: [
|
|
587
|
+
{
|
|
588
|
+
kind: "env",
|
|
589
|
+
keys: ["DEVIN_MODEL"],
|
|
590
|
+
note: "devin --help: --model <MODEL> reads [env: DEVIN_MODEL]. Account decides availability.",
|
|
591
|
+
},
|
|
592
|
+
],
|
|
593
|
+
facts: {
|
|
594
|
+
effortLevels: [],
|
|
595
|
+
supportsFallbackModelChain: false,
|
|
596
|
+
aliases: ["opus", "codex"],
|
|
597
|
+
agentProfiles: [],
|
|
598
|
+
},
|
|
599
|
+
evidence: "Devin exposes --model <MODEL> (e.g. 'claude-sonnet-4', 'claude-opus-4.6', 'opus', 'codex'; [env: DEVIN_MODEL]); the CLI owns model selection and the account decides available models, so no static account-specific list is hardcoded.",
|
|
600
|
+
},
|
|
601
|
+
sessionContinuity: {
|
|
602
|
+
continue: true,
|
|
603
|
+
resume: true,
|
|
604
|
+
fork: false,
|
|
605
|
+
sessionIdSelection: true,
|
|
606
|
+
flags: ["--continue", "--resume"],
|
|
607
|
+
evidence: "devin --help / docs: --continue and --resume <id>.",
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
adminSubcommands: [
|
|
611
|
+
{ family: "auth", safety: "mutating-gated", evidence: "devin auth login/logout/status" },
|
|
612
|
+
{
|
|
613
|
+
family: "mcp",
|
|
614
|
+
safety: "mutating-gated",
|
|
615
|
+
evidence: "devin mcp add/list/get/remove/login/logout/enable/disable",
|
|
616
|
+
},
|
|
617
|
+
{ family: "rules", safety: "read-only", evidence: "devin rules list/show/paths" },
|
|
618
|
+
{ family: "skills", safety: "read-only", evidence: "devin skills list/show/paths" },
|
|
619
|
+
{
|
|
620
|
+
family: "plugins",
|
|
621
|
+
safety: "mutating-gated",
|
|
622
|
+
evidence: "devin plugins install/list/info/update/remove",
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
family: "cloud",
|
|
626
|
+
safety: "mutating-gated",
|
|
627
|
+
evidence: "devin cloud environment/sandbox/build",
|
|
628
|
+
},
|
|
629
|
+
{ family: "list", safety: "read-only", evidence: "devin list/ls (JSON and CSV)" },
|
|
630
|
+
{ family: "update", safety: "mutating-gated", evidence: "devin update" },
|
|
631
|
+
{ family: "version", safety: "read-only", evidence: "devin version" },
|
|
632
|
+
{ family: "sandbox", safety: "mutating-gated", evidence: "devin sandbox setup" },
|
|
633
|
+
{ family: "setup", safety: "mutating-gated", evidence: "devin setup; devin shell setup" },
|
|
634
|
+
],
|
|
635
|
+
acp: {
|
|
636
|
+
classification: "native",
|
|
637
|
+
nativeEntrypoint: "devin acp",
|
|
638
|
+
entrypoint: { command: "devin", args: ["acp"] },
|
|
639
|
+
probeArgv: [["acp", "--help"]],
|
|
640
|
+
agentTypes: [
|
|
641
|
+
{
|
|
642
|
+
id: "summarizer",
|
|
643
|
+
description: "Summarizer agent with no tools; outputs the full summary as text (persisted by a PostAgentIteration cog).",
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
id: "review",
|
|
647
|
+
description: "Code-review agent with read-only + shell tools; reviews diffs for correctness, style, security, performance, and completeness.",
|
|
648
|
+
},
|
|
649
|
+
],
|
|
650
|
+
evidence: "Official Devin docs advertise `devin acp` as an ACP stdio server; installed `devin acp --help` confirms it with --agent-type summarizer/review options. `devin acp --help` is the safe probe; bare `devin acp` starts the live server and is never probed.",
|
|
651
|
+
},
|
|
652
|
+
safetyModes: {
|
|
653
|
+
sandbox: true,
|
|
654
|
+
permissionMode: true,
|
|
655
|
+
approvalMode: false,
|
|
656
|
+
trust: true,
|
|
657
|
+
flags: ["--sandbox", "--permission-mode", "--respect-workspace-trust"],
|
|
658
|
+
},
|
|
659
|
+
outputFormats: ["text", "json"],
|
|
660
|
+
streamingFormats: [],
|
|
661
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
662
|
+
upstreamContract: {
|
|
663
|
+
targetVersion: "devin 2026.8.18 (16737566)",
|
|
664
|
+
helpChecksumRef: "devin--help.txt",
|
|
665
|
+
},
|
|
666
|
+
capabilityScope: "full",
|
|
667
|
+
},
|
|
668
|
+
cursor: {
|
|
669
|
+
id: "cursor",
|
|
670
|
+
displayName: "Cursor Agent CLI",
|
|
671
|
+
sessionLabel: "Cursor Session",
|
|
672
|
+
icon: "🖱",
|
|
673
|
+
executables: ["cursor-agent"],
|
|
674
|
+
primaryExecutable: "cursor-agent",
|
|
675
|
+
requestSurface: {
|
|
676
|
+
sync: true,
|
|
677
|
+
async: true,
|
|
678
|
+
transport: "cli",
|
|
679
|
+
acpCapable: true,
|
|
680
|
+
syncToolName: "cursor_request",
|
|
681
|
+
asyncToolName: "cursor_request_async",
|
|
682
|
+
},
|
|
683
|
+
docs: { primary: ["https://docs.cursor.com/en/cli/overview"] },
|
|
684
|
+
discovery: {
|
|
685
|
+
version: { argv: ["--version"], purpose: "version" },
|
|
686
|
+
rootHelp: { argv: ["--help"], purpose: "root-help" },
|
|
687
|
+
subcommandHelp: [{ argv: ["acp", "--help"], purpose: "subcommand-help" }],
|
|
688
|
+
modelDiscovery: {
|
|
689
|
+
strategy: "static-catalog",
|
|
690
|
+
argv: [],
|
|
691
|
+
parse: "curated-catalog",
|
|
692
|
+
fallbackPolicy: "curated-static-catalog",
|
|
693
|
+
configSources: [],
|
|
694
|
+
facts: {
|
|
695
|
+
effortLevels: [],
|
|
696
|
+
supportsFallbackModelChain: false,
|
|
697
|
+
aliases: [],
|
|
698
|
+
agentProfiles: [],
|
|
699
|
+
},
|
|
700
|
+
evidence: "Cursor is maintain-only in this initiative; the CLI owns model selection and the gateway keeps a curated catalog. No new model-discovery capability is added here.",
|
|
701
|
+
},
|
|
702
|
+
sessionContinuity: {
|
|
703
|
+
continue: true,
|
|
704
|
+
resume: true,
|
|
705
|
+
fork: false,
|
|
706
|
+
sessionIdSelection: true,
|
|
707
|
+
flags: ["--resume", "--continue"],
|
|
708
|
+
evidence: "cursor-agent --help: --resume [chatId] (Resume a specific Cursor chat/session) and --continue (Continue the latest Cursor chat).",
|
|
709
|
+
},
|
|
710
|
+
},
|
|
711
|
+
adminSubcommands: [
|
|
712
|
+
{
|
|
713
|
+
family: "version",
|
|
714
|
+
safety: "read-only",
|
|
715
|
+
kind: "cli-flag",
|
|
716
|
+
evidence: "cursor-agent --help: -v, --version (maintain-only).",
|
|
717
|
+
},
|
|
718
|
+
],
|
|
719
|
+
acp: {
|
|
720
|
+
classification: "native",
|
|
721
|
+
nativeEntrypoint: "cursor-agent acp",
|
|
722
|
+
entrypoint: { command: "cursor-agent", args: ["acp"] },
|
|
723
|
+
probeArgv: [["acp", "--help"]],
|
|
724
|
+
evidence: "Native ACP entrypoint `cursor-agent acp` (stdio JSON-RPC). Captured `cursor-agent acp --help` (help/cursor-agent-acp--help.txt) confirms: 'Start the Cursor Agent as an ACP (Agent Client Protocol) server'. Maintain-only in this initiative; kept complete so shared generation covers cursor.",
|
|
725
|
+
},
|
|
726
|
+
safetyModes: {
|
|
727
|
+
sandbox: true,
|
|
728
|
+
permissionMode: false,
|
|
729
|
+
approvalMode: true,
|
|
730
|
+
trust: true,
|
|
731
|
+
flags: ["--mode", "--force", "--auto-review", "--sandbox", "--trust"],
|
|
732
|
+
},
|
|
733
|
+
outputFormats: ["text", "json", "stream-json"],
|
|
734
|
+
streamingFormats: ["stream-json"],
|
|
735
|
+
resourcePolicy: { exposesModelsResource: true, exposesSessionsResource: true },
|
|
736
|
+
upstreamContract: {
|
|
737
|
+
targetVersion: "cursor-agent 2026.06.29-2ad2186",
|
|
738
|
+
helpChecksumRef: "cursor-agent--help.txt",
|
|
739
|
+
},
|
|
740
|
+
capabilityScope: "maintain-only",
|
|
741
|
+
},
|
|
742
|
+
};
|
|
743
|
+
export const PROVIDER_DEFINITIONS_BY_ID = Object.freeze(PROVIDER_DEFINITIONS);
|
|
744
|
+
export function getAllProviderDefinitions() {
|
|
745
|
+
return CLI_TYPES.map(id => PROVIDER_DEFINITIONS_BY_ID[id]);
|
|
746
|
+
}
|
|
747
|
+
export function getProviderDefinition(id) {
|
|
748
|
+
return PROVIDER_DEFINITIONS_BY_ID[id];
|
|
749
|
+
}
|
|
750
|
+
export function listProviderIds() {
|
|
751
|
+
return CLI_TYPES;
|
|
752
|
+
}
|
|
753
|
+
export function getProviderDisplayName(id) {
|
|
754
|
+
return PROVIDER_DEFINITIONS_BY_ID[id].displayName;
|
|
755
|
+
}
|
|
756
|
+
export function getProviderSessionLabel(id) {
|
|
757
|
+
return PROVIDER_DEFINITIONS_BY_ID[id].sessionLabel;
|
|
758
|
+
}
|