llm-cli-gateway 2.11.0 → 2.11.1
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 +23 -1
- package/README.md +39 -9
- package/dist/acp/provider-registry.js +6 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -4
- package/dist/provider-tool-capabilities.d.ts +4 -0
- package/dist/provider-tool-capabilities.js +16 -13
- package/dist/upstream-contracts.js +83 -33
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the llm-cli-gateway project.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## [2.11.1] - 2026-06-22: Provider contract refresh and stable upstream scans
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **Upstream contracts refreshed for all providers.** Live `--probe-installed` probes were run across the installed provider CLIs. Synced contract surfaces and bumped ACP `targetVersion` pins:
|
|
10
|
+
- claude → 2.1.185 (added `--ax-screen-reader`, `--safe-mode` to acknowledged flags; `agents --all` to subcommand contract)
|
|
11
|
+
- codex → 0.141.0 (aligned `exec resume` / `exec review` / top-level `review` flag lists with current advertised surfaces)
|
|
12
|
+
- gemini (agy) → 1.0.10
|
|
13
|
+
- grok → 0.2.60 (474c2bbfc)
|
|
14
|
+
- mistral (vibe) → 2.17.1
|
|
15
|
+
- devin → 2026.7.23 (3bd47f77) (added new flags to `acknowledgedUpstreamFlags`)
|
|
16
|
+
- **Mistral upstream scan source stabilized.** The scanner now tracks GitHub's latest-release API for Mistral Vibe instead of the volatile HTML releases page, so `--live --fail-on-critical` no longer trips on release-page chrome/hash churn.
|
|
17
|
+
- **Provider skill docs updated.** All five `.agents/skills/provider-*` files bumped to metadata version 1.2. Descriptions now call out `/subcommand` behaviour changes; added current-version "Tested against" notes and usage examples for the cache levers (Grok compaction, Claude `cacheControl`).
|
|
18
|
+
- **Cache usage documentation expanded with concrete examples.** Added exact parameters, emitted CLI flags, and stream-json payload shapes for Grok `compactionMode`/`compactionDetail` and Claude `promptParts.cacheControl` (including the `assembleClaudeCacheBlocks` NDJSON structure with `cache_control: {type:"ephemeral", ttl:"1h"}`) to:
|
|
19
|
+
- `docs/personal-mcp/PROVIDER_CACHE_SURFACES.md`
|
|
20
|
+
- `README.md` (updated Cache-aware operation section and matrix)
|
|
21
|
+
- `.agents/skills/session-workflow/SKILL.md`
|
|
22
|
+
- Cross-LLM reviews (Claude, Codex, Mistral) on the implementation plan were incorporated: kept provider-specific levers (no new unifying `CacheDirective` abstraction); focused on documentation and discoverability.
|
|
23
|
+
- **Internal caching hygiene.** Promoted the ad-hoc capability cache in `provider-tool-capabilities.ts` to a documented reusable TTL structure (`CAPABILITY_CACHE`, helpers, test accessors) for easier future reuse.
|
|
24
|
+
|
|
25
|
+
### Tests / CI
|
|
26
|
+
|
|
27
|
+
- `npm run upstream:contracts`, relevant cache/session/provider-tool tests, and build all green.
|
|
6
28
|
|
|
7
29
|
## [2.11.0] - 2026-06-18: API providers, Devin, ACP runtime, and a strip-at-publish internal-MCP boundary
|
|
8
30
|
|
package/README.md
CHANGED
|
@@ -188,17 +188,47 @@ Every `*_request` and `*_request_async` tool accepts an optional `promptParts` f
|
|
|
188
188
|
|
|
189
189
|
`prompt` and `promptParts` are mutually exclusive — pass exactly one.
|
|
190
190
|
|
|
191
|
-
Per-CLI capability matrix:
|
|
191
|
+
Per-CLI capability matrix (prefix discipline is automatic via `promptParts` for all; explicit levers are provider-specific):
|
|
192
|
+
|
|
193
|
+
| CLI | Prefix discipline | Explicit lever(s) |
|
|
194
|
+
| ------- | ----------------- | ----------------- |
|
|
195
|
+
| claude | yes | `promptParts.cacheControl` + `outputFormat: "stream-json"` (Anthropic `cache_control` breakpoints on stable blocks; `ttl="1h"` forced) |
|
|
196
|
+
| codex | yes | none (OpenAI implicit) |
|
|
197
|
+
| gemini | yes | none (implicit server-side) |
|
|
198
|
+
| grok | yes | `compactionMode` / `compactionDetail` (context compaction: `summary|transcript|segments`; `segments` writes per-segment markdown) |
|
|
199
|
+
| mistral | yes | none (implicit) |
|
|
200
|
+
|
|
201
|
+
**Claude example (explicit cacheControl)**
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
claude_request({
|
|
205
|
+
promptParts: {
|
|
206
|
+
system: "You are a helpful code reviewer.",
|
|
207
|
+
context: "<long stable file dump>",
|
|
208
|
+
task: "Review the diff.",
|
|
209
|
+
cacheControl: { system: true, context: true } // task is never marked
|
|
210
|
+
},
|
|
211
|
+
outputFormat: "stream-json"
|
|
212
|
+
})
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Gateway emits the `stream-json` stdin path with `cache_control: {type:"ephemeral", ttl:"1h"}` on marked blocks only.
|
|
216
|
+
|
|
217
|
+
**Grok example (compaction)**
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
grok_request({
|
|
221
|
+
promptParts: { system: "...", context: "...", task: "..." },
|
|
222
|
+
compactionMode: "segments",
|
|
223
|
+
compactionDetail: "balanced"
|
|
224
|
+
})
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Emits `--compaction-mode segments --compaction-detail balanced`.
|
|
192
228
|
|
|
193
|
-
|
|
194
|
-
| ------- | ------------------------------------------ | ---------------------------------------------------------------------------- |
|
|
195
|
-
| claude | yes | yes, opt-in via `promptParts.cacheControl` and `outputFormat: "stream-json"` |
|
|
196
|
-
| codex | yes | n/a (OpenAI implicit cache, no CLI lever) |
|
|
197
|
-
| gemini | yes | n/a (implicit prefix cache server-side) |
|
|
198
|
-
| grok | yes | n/a (no surfaced cache lever) |
|
|
199
|
-
| mistral | yes | n/a (no surfaced cache lever) |
|
|
229
|
+
See `docs/personal-mcp/PROVIDER_CACHE_SURFACES.md` for full surfaces, telemetry differences (e.g. Grok `-p` vs ACP), exact stream-json payload shapes, and cross-LLM review notes.
|
|
200
230
|
|
|
201
|
-
Opt-in flags (all default off) live under `[cache_awareness]` in `~/.llm-cli-gateway/config.toml`.
|
|
231
|
+
Opt-in flags (all default off) live under `[cache_awareness]` in `~/.llm-cli-gateway/config.toml`.
|
|
202
232
|
|
|
203
233
|
### Reliability & Performance
|
|
204
234
|
|
|
@@ -4,7 +4,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
4
4
|
displayName: "Mistral Vibe",
|
|
5
5
|
status: "native_smoke_passed",
|
|
6
6
|
supportKind: "native",
|
|
7
|
-
targetVersion: "vibe 2.
|
|
7
|
+
targetVersion: "vibe 2.17.1",
|
|
8
8
|
entrypoint: Object.freeze({ command: "vibe-acp", args: Object.freeze([]) }),
|
|
9
9
|
runtimeEnabledDefault: false,
|
|
10
10
|
shipRuntimePilot: true,
|
|
@@ -17,7 +17,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
17
17
|
displayName: "xAI Grok CLI",
|
|
18
18
|
status: "native_smoke_passed",
|
|
19
19
|
supportKind: "native",
|
|
20
|
-
targetVersion: "grok 0.2.
|
|
20
|
+
targetVersion: "grok 0.2.60 (474c2bbfc)",
|
|
21
21
|
entrypoint: Object.freeze({ command: "grok", args: Object.freeze(["agent", "stdio"]) }),
|
|
22
22
|
runtimeEnabledDefault: false,
|
|
23
23
|
shipRuntimePilot: true,
|
|
@@ -30,7 +30,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
30
30
|
displayName: "OpenAI Codex CLI",
|
|
31
31
|
status: "adapter_mediated_deferred",
|
|
32
32
|
supportKind: "adapter_mediated",
|
|
33
|
-
targetVersion: "codex-cli 0.
|
|
33
|
+
targetVersion: "codex-cli 0.141.0",
|
|
34
34
|
entrypoint: null,
|
|
35
35
|
runtimeEnabledDefault: false,
|
|
36
36
|
shipRuntimePilot: false,
|
|
@@ -43,7 +43,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
43
43
|
displayName: "Anthropic Claude Code",
|
|
44
44
|
status: "adapter_mediated_deferred",
|
|
45
45
|
supportKind: "adapter_mediated",
|
|
46
|
-
targetVersion: "claude 2.1.
|
|
46
|
+
targetVersion: "claude 2.1.185",
|
|
47
47
|
entrypoint: null,
|
|
48
48
|
runtimeEnabledDefault: false,
|
|
49
49
|
shipRuntimePilot: false,
|
|
@@ -56,7 +56,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
56
56
|
displayName: "Google Antigravity",
|
|
57
57
|
status: "absent_watchlist",
|
|
58
58
|
supportKind: "none",
|
|
59
|
-
targetVersion: "agy 1.0.
|
|
59
|
+
targetVersion: "agy 1.0.10",
|
|
60
60
|
entrypoint: null,
|
|
61
61
|
runtimeEnabledDefault: false,
|
|
62
62
|
shipRuntimePilot: false,
|
|
@@ -69,7 +69,7 @@ const ACP_PROVIDER_REGISTRY = Object.freeze({
|
|
|
69
69
|
displayName: "Cognition Devin CLI",
|
|
70
70
|
status: "native_smoke_passed",
|
|
71
71
|
supportKind: "native",
|
|
72
|
-
targetVersion: "devin 2026.
|
|
72
|
+
targetVersion: "devin 2026.7.23 (3bd47f77)",
|
|
73
73
|
entrypoint: Object.freeze({ command: "devin", args: Object.freeze(["acp"]) }),
|
|
74
74
|
runtimeEnabledDefault: false,
|
|
75
75
|
shipRuntimePilot: true,
|
package/dist/index.d.ts
CHANGED
|
@@ -448,7 +448,7 @@ export declare function handleGrokRequestAsync(deps: AsyncHandlerDeps, params: O
|
|
|
448
448
|
export interface DevinRequestParams {
|
|
449
449
|
prompt?: string;
|
|
450
450
|
model?: string;
|
|
451
|
-
permissionMode?: "
|
|
451
|
+
permissionMode?: "auto" | "smart" | "dangerous";
|
|
452
452
|
promptFile?: string;
|
|
453
453
|
transport?: "cli" | "acp";
|
|
454
454
|
sessionId?: string;
|
|
@@ -463,7 +463,7 @@ export interface DevinRequestParams {
|
|
|
463
463
|
export declare function prepareDevinRequest(params: {
|
|
464
464
|
prompt?: string;
|
|
465
465
|
model?: string;
|
|
466
|
-
permissionMode?:
|
|
466
|
+
permissionMode?: DevinRequestParams["permissionMode"];
|
|
467
467
|
promptFile?: string;
|
|
468
468
|
correlationId?: string;
|
|
469
469
|
optimizePrompt: boolean;
|
package/dist/index.js
CHANGED
|
@@ -4683,9 +4683,9 @@ export function createGatewayServer(deps = {}) {
|
|
|
4683
4683
|
.default("cli")
|
|
4684
4684
|
.describe("Transport: 'cli' (default) runs the Devin CLI; 'acp' routes through `devin acp` when [acp].enabled and the provider's runtime_enabled are set (fails closed otherwise)."),
|
|
4685
4685
|
permissionMode: z
|
|
4686
|
-
.enum(["
|
|
4686
|
+
.enum(["auto", "smart", "dangerous"])
|
|
4687
4687
|
.optional()
|
|
4688
|
-
.describe("Devin CLI permission mode (--permission-mode).
|
|
4688
|
+
.describe("Devin CLI permission mode (--permission-mode). auto auto-approves read-only tools; smart additionally auto-runs actions a fast model judges safe; dangerous auto-approves all."),
|
|
4689
4689
|
promptFile: z
|
|
4690
4690
|
.string()
|
|
4691
4691
|
.optional()
|
|
@@ -5617,9 +5617,9 @@ export function createGatewayServer(deps = {}) {
|
|
|
5617
5617
|
.describe("Prompt text for Devin CLI"),
|
|
5618
5618
|
model: z.string().optional().describe("Model name or alias (e.g. opus, latest)"),
|
|
5619
5619
|
permissionMode: z
|
|
5620
|
-
.enum(["
|
|
5620
|
+
.enum(["auto", "smart", "dangerous"])
|
|
5621
5621
|
.optional()
|
|
5622
|
-
.describe("Devin CLI permission mode (--permission-mode)"),
|
|
5622
|
+
.describe("Devin CLI permission mode (--permission-mode). auto, smart, or dangerous."),
|
|
5623
5623
|
promptFile: z
|
|
5624
5624
|
.string()
|
|
5625
5625
|
.optional()
|
|
@@ -133,4 +133,8 @@ export type ProviderToolCapabilitiesMap = Partial<Record<ProviderCapabilityId, P
|
|
|
133
133
|
export declare function getProviderToolCapabilities(queryOrCli?: ProviderCapabilityQuery | ProviderCapabilityId): ProviderToolCapabilitiesMap;
|
|
134
134
|
export declare function getOneProviderToolCapabilities(cli: ProviderCapabilityId, queryOrCli?: ProviderCapabilityQuery | ProviderCapabilityId): ProviderToolCapabilities;
|
|
135
135
|
export declare function clearProviderToolCapabilitiesCache(): void;
|
|
136
|
+
export declare function _getCapabilityCacheForTest(): Map<string, {
|
|
137
|
+
loadedAt: number;
|
|
138
|
+
value: ProviderToolCapabilities;
|
|
139
|
+
}>;
|
|
136
140
|
export declare function providerCapabilityIds(): readonly KnownProviderCapabilityId[];
|
|
@@ -49,7 +49,7 @@ export const ACP_CONTRACT = {
|
|
|
49
49
|
},
|
|
50
50
|
gemini: {
|
|
51
51
|
classification: "absent_watchlist",
|
|
52
|
-
summary: "Google Antigravity agy 1.0.
|
|
52
|
+
summary: "Google Antigravity agy 1.0.10 has no ACP surface; watchlist item only.",
|
|
53
53
|
},
|
|
54
54
|
grok_api: {
|
|
55
55
|
classification: "absent_watchlist",
|
|
@@ -66,7 +66,7 @@ const ACP_CAPABILITIES = {
|
|
|
66
66
|
mistral: {
|
|
67
67
|
status: "native_smoke_passed",
|
|
68
68
|
mediation: "native",
|
|
69
|
-
targetVersion: "vibe 2.
|
|
69
|
+
targetVersion: "vibe 2.17.1",
|
|
70
70
|
entrypoint: { command: "vibe-acp", args: [] },
|
|
71
71
|
runtimeEnabled: false,
|
|
72
72
|
smokeSupported: true,
|
|
@@ -80,7 +80,7 @@ const ACP_CAPABILITIES = {
|
|
|
80
80
|
grok: {
|
|
81
81
|
status: "native_smoke_passed",
|
|
82
82
|
mediation: "native",
|
|
83
|
-
targetVersion: "grok 0.2.
|
|
83
|
+
targetVersion: "grok 0.2.60 (474c2bbfc)",
|
|
84
84
|
entrypoint: { command: "grok", args: ["agent", "stdio"] },
|
|
85
85
|
runtimeEnabled: false,
|
|
86
86
|
smokeSupported: true,
|
|
@@ -95,7 +95,7 @@ const ACP_CAPABILITIES = {
|
|
|
95
95
|
codex: {
|
|
96
96
|
status: "adapter_mediated_deferred",
|
|
97
97
|
mediation: "adapter_mediated",
|
|
98
|
-
targetVersion: "codex-cli 0.
|
|
98
|
+
targetVersion: "codex-cli 0.141.0",
|
|
99
99
|
entrypoint: null,
|
|
100
100
|
runtimeEnabled: false,
|
|
101
101
|
smokeSupported: false,
|
|
@@ -109,7 +109,7 @@ const ACP_CAPABILITIES = {
|
|
|
109
109
|
claude: {
|
|
110
110
|
status: "adapter_mediated_deferred",
|
|
111
111
|
mediation: "adapter_mediated",
|
|
112
|
-
targetVersion: "claude 2.1.
|
|
112
|
+
targetVersion: "claude 2.1.185",
|
|
113
113
|
entrypoint: null,
|
|
114
114
|
runtimeEnabled: false,
|
|
115
115
|
smokeSupported: false,
|
|
@@ -123,13 +123,13 @@ const ACP_CAPABILITIES = {
|
|
|
123
123
|
gemini: {
|
|
124
124
|
status: "absent_watchlist",
|
|
125
125
|
mediation: "none",
|
|
126
|
-
targetVersion: "agy 1.0.
|
|
126
|
+
targetVersion: "agy 1.0.10",
|
|
127
127
|
entrypoint: null,
|
|
128
128
|
runtimeEnabled: false,
|
|
129
129
|
smokeSupported: false,
|
|
130
130
|
smokeStatus: "unsupported",
|
|
131
131
|
caveats: [
|
|
132
|
-
"Antigravity agy 1.0.
|
|
132
|
+
"Antigravity agy 1.0.10 has no ACP flag or subcommand.",
|
|
133
133
|
"Legacy Gemini CLI ACP evidence does not transfer to agy; kept on the upstream drift watchlist.",
|
|
134
134
|
],
|
|
135
135
|
docs: ACP_DOCS_REFERENCE,
|
|
@@ -148,7 +148,7 @@ const ACP_CAPABILITIES = {
|
|
|
148
148
|
devin: {
|
|
149
149
|
status: "native_smoke_passed",
|
|
150
150
|
mediation: "native",
|
|
151
|
-
targetVersion: "devin 2026.
|
|
151
|
+
targetVersion: "devin 2026.7.23 (3bd47f77)",
|
|
152
152
|
entrypoint: { command: "devin", args: ["acp"] },
|
|
153
153
|
runtimeEnabled: false,
|
|
154
154
|
smokeSupported: true,
|
|
@@ -777,7 +777,7 @@ const TOOL_CONTROLS = {
|
|
|
777
777
|
supported: true,
|
|
778
778
|
requestField: "permissionMode",
|
|
779
779
|
cliFlag: "--permission-mode",
|
|
780
|
-
behavior: "Maps to Devin CLI --permission-mode:
|
|
780
|
+
behavior: "Maps to Devin CLI --permission-mode: auto auto-approves read-only tools; smart additionally auto-runs actions a fast model judges safe; dangerous auto-approves all.",
|
|
781
781
|
},
|
|
782
782
|
promptControl: {
|
|
783
783
|
supported: true,
|
|
@@ -806,7 +806,7 @@ const TOOL_CONTROLS = {
|
|
|
806
806
|
],
|
|
807
807
|
},
|
|
808
808
|
};
|
|
809
|
-
|
|
809
|
+
const CAPABILITY_CACHE = new Map();
|
|
810
810
|
export function getProviderToolCapabilities(queryOrCli = {}) {
|
|
811
811
|
const query = normalizeQuery(queryOrCli);
|
|
812
812
|
const providers = query.cli ? [query.cli] : PROVIDER_CAPABILITY_IDS;
|
|
@@ -819,16 +819,19 @@ export function getProviderToolCapabilities(queryOrCli = {}) {
|
|
|
819
819
|
export function getOneProviderToolCapabilities(cli, queryOrCli = {}) {
|
|
820
820
|
const query = normalizeQuery(typeof queryOrCli === "string" ? { cli: queryOrCli } : queryOrCli);
|
|
821
821
|
const cacheKey = capabilityCacheKey(cli, query);
|
|
822
|
-
const cached =
|
|
822
|
+
const cached = CAPABILITY_CACHE.get(cacheKey);
|
|
823
823
|
if (!query.refresh && cached && Date.now() - cached.loadedAt < CAPABILITY_CACHE_TTL_MS) {
|
|
824
824
|
return cached.value;
|
|
825
825
|
}
|
|
826
826
|
const value = buildOneProviderToolCapabilities(cli, query);
|
|
827
|
-
|
|
827
|
+
CAPABILITY_CACHE.set(cacheKey, { loadedAt: Date.now(), value });
|
|
828
828
|
return value;
|
|
829
829
|
}
|
|
830
830
|
export function clearProviderToolCapabilitiesCache() {
|
|
831
|
-
|
|
831
|
+
CAPABILITY_CACHE.clear();
|
|
832
|
+
}
|
|
833
|
+
export function _getCapabilityCacheForTest() {
|
|
834
|
+
return CAPABILITY_CACHE;
|
|
832
835
|
}
|
|
833
836
|
export function providerCapabilityIds() {
|
|
834
837
|
return PROVIDER_CAPABILITY_IDS;
|
|
@@ -8,7 +8,7 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
8
8
|
status: "native",
|
|
9
9
|
executable: "vibe-acp",
|
|
10
10
|
entrypointArgs: [],
|
|
11
|
-
targetVersion: "vibe 2.
|
|
11
|
+
targetVersion: "vibe 2.17.1",
|
|
12
12
|
probeArgs: [["--version"], ["--help"]],
|
|
13
13
|
evidence: "Native ACP executable vibe-acp; manual initialize + session/new smoke passed. First runtime pilot.",
|
|
14
14
|
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.mistral",
|
|
@@ -19,9 +19,9 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
19
19
|
status: "native",
|
|
20
20
|
executable: "grok",
|
|
21
21
|
entrypointArgs: ["agent", "stdio"],
|
|
22
|
-
targetVersion: "grok 0.2.
|
|
22
|
+
targetVersion: "grok 0.2.60 (474c2bbfc)",
|
|
23
23
|
probeArgs: [["agent", "stdio", "--help"]],
|
|
24
|
-
evidence: "Native ACP via `grok agent stdio`; initialize + session/new smoke passed with isolated leader socket. Second runtime pilot.",
|
|
24
|
+
evidence: "Native ACP via `grok agent stdio`; initialize + session/new smoke passed with isolated leader socket. Second runtime pilot. Bumped for 0.2.60.",
|
|
25
25
|
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.grok",
|
|
26
26
|
},
|
|
27
27
|
codex: {
|
|
@@ -30,10 +30,10 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
30
30
|
status: "adapter_mediated_deferred",
|
|
31
31
|
executable: "codex",
|
|
32
32
|
entrypointArgs: [],
|
|
33
|
-
targetVersion: "codex-cli 0.
|
|
33
|
+
targetVersion: "codex-cli 0.141.0",
|
|
34
34
|
probeArgs: [],
|
|
35
35
|
adapterCandidates: ["zed-industries/codex-acp", "agentclientprotocol/codex-acp"],
|
|
36
|
-
evidence: "No native ACP entrypoint at codex-cli 0.
|
|
36
|
+
evidence: "No native ACP entrypoint at codex-cli 0.141.0. Adapter evidence tracked as documentation only; not native gateway ACP support.",
|
|
37
37
|
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.codex",
|
|
38
38
|
},
|
|
39
39
|
claude: {
|
|
@@ -42,10 +42,10 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
42
42
|
status: "adapter_mediated_deferred",
|
|
43
43
|
executable: "claude",
|
|
44
44
|
entrypointArgs: [],
|
|
45
|
-
targetVersion: "claude 2.1.
|
|
45
|
+
targetVersion: "claude 2.1.185",
|
|
46
46
|
probeArgs: [],
|
|
47
47
|
adapterCandidates: ["Claude Agent SDK ACP adapter"],
|
|
48
|
-
evidence: "No native Claude Code CLI ACP entrypoint at claude 2.1.
|
|
48
|
+
evidence: "No native Claude Code CLI ACP entrypoint at claude 2.1.185. Adapter ownership/permission bridging unresolved; deferred.",
|
|
49
49
|
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.claude",
|
|
50
50
|
},
|
|
51
51
|
gemini: {
|
|
@@ -54,9 +54,9 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
54
54
|
status: "absent_watchlist",
|
|
55
55
|
executable: "agy",
|
|
56
56
|
entrypointArgs: [],
|
|
57
|
-
targetVersion: "agy 1.0.
|
|
57
|
+
targetVersion: "agy 1.0.10",
|
|
58
58
|
probeArgs: [],
|
|
59
|
-
evidence: "agy 1.0.
|
|
59
|
+
evidence: "agy 1.0.10 has no ACP flag or subcommand. Legacy Gemini CLI ACP evidence does not transfer. Watchlist item.",
|
|
60
60
|
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.gemini",
|
|
61
61
|
},
|
|
62
62
|
devin: {
|
|
@@ -65,10 +65,10 @@ export const ACP_ENTRYPOINT_CONTRACTS = {
|
|
|
65
65
|
status: "native",
|
|
66
66
|
executable: "devin",
|
|
67
67
|
entrypointArgs: ["acp"],
|
|
68
|
-
targetVersion: "devin 2026.
|
|
68
|
+
targetVersion: "devin 2026.7.23 (3bd47f77)",
|
|
69
69
|
probeArgs: [["--version"]],
|
|
70
70
|
evidence: 'Native ACP entrypoint `devin acp` (stdio JSON-RPC). Slice D1 manual initialize + session/new smoke passed (protocolVersion 1, agent "Affogato", session created). Third native runtime pilot; routing stays config-gated.',
|
|
71
|
-
docsRef: "docs/plans/
|
|
71
|
+
docsRef: "docs/plans/first-class-acp-gateway-extension.dag.toml#provider_matrix.devin",
|
|
72
72
|
},
|
|
73
73
|
};
|
|
74
74
|
const PERMISSION_MODES = [
|
|
@@ -147,6 +147,7 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
147
147
|
agents: subcommand(["agents"], "Inspect and manage Claude agent definitions.", "writes_local_config", [
|
|
148
148
|
"--add-dir",
|
|
149
149
|
"--agent",
|
|
150
|
+
"--all",
|
|
150
151
|
"--allow-dangerously-skip-permissions",
|
|
151
152
|
"--cwd",
|
|
152
153
|
"--dangerously-skip-permissions",
|
|
@@ -305,6 +306,7 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
305
306
|
acknowledgedUpstreamFlags: [
|
|
306
307
|
"--allow-dangerously-skip-permissions",
|
|
307
308
|
"--allowed",
|
|
309
|
+
"--ax-screen-reader",
|
|
308
310
|
"--bare",
|
|
309
311
|
"--betas",
|
|
310
312
|
"--brief",
|
|
@@ -329,6 +331,7 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
329
331
|
"--remote-control-session-name-prefix",
|
|
330
332
|
"--replay-user-messages",
|
|
331
333
|
"--resume",
|
|
334
|
+
"--safe-mode",
|
|
332
335
|
"--tmux",
|
|
333
336
|
"--version",
|
|
334
337
|
"--worktree",
|
|
@@ -471,33 +474,40 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
471
474
|
], {
|
|
472
475
|
children: {
|
|
473
476
|
resume: subcommand(["exec", "resume"], "Resume Codex sessions from the interactive CLI.", "executes_agent", [
|
|
474
|
-
"--add-dir",
|
|
475
477
|
"--all",
|
|
476
|
-
"--cd",
|
|
477
478
|
"--config",
|
|
478
479
|
"--dangerously-bypass-approvals-and-sandbox",
|
|
479
480
|
"--dangerously-bypass-hook-trust",
|
|
480
481
|
"--disable",
|
|
481
482
|
"--enable",
|
|
483
|
+
"--ephemeral",
|
|
484
|
+
"--ignore-rules",
|
|
485
|
+
"--ignore-user-config",
|
|
482
486
|
"--image",
|
|
483
|
-
"--
|
|
487
|
+
"--json",
|
|
484
488
|
"--last",
|
|
485
|
-
"--local-provider",
|
|
486
489
|
"--model",
|
|
487
|
-
"--
|
|
488
|
-
"--
|
|
489
|
-
"--
|
|
490
|
-
"--remote",
|
|
491
|
-
"--remote-auth-token-env",
|
|
492
|
-
"--sandbox",
|
|
490
|
+
"--output-last-message",
|
|
491
|
+
"--output-schema",
|
|
492
|
+
"--skip-git-repo-check",
|
|
493
493
|
"--strict-config",
|
|
494
494
|
]),
|
|
495
495
|
review: subcommand(["exec", "review"], "Run Codex code review workflows.", "executes_agent", [
|
|
496
496
|
"--base",
|
|
497
497
|
"--commit",
|
|
498
498
|
"--config",
|
|
499
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
500
|
+
"--dangerously-bypass-hook-trust",
|
|
499
501
|
"--disable",
|
|
500
502
|
"--enable",
|
|
503
|
+
"--ephemeral",
|
|
504
|
+
"--ignore-rules",
|
|
505
|
+
"--ignore-user-config",
|
|
506
|
+
"--json",
|
|
507
|
+
"--model",
|
|
508
|
+
"--output-last-message",
|
|
509
|
+
"--output-schema",
|
|
510
|
+
"--skip-git-repo-check",
|
|
501
511
|
"--strict-config",
|
|
502
512
|
"--title",
|
|
503
513
|
"--uncommitted",
|
|
@@ -1022,6 +1032,17 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1022
1032
|
},
|
|
1023
1033
|
}),
|
|
1024
1034
|
completions: subcommand(["completions"], "Generate Grok shell completions.", "read_only", ["--leader-socket"], { tier: "inspect" }),
|
|
1035
|
+
dashboard: subcommand(["dashboard"], "Open the Agent Dashboard view at startup.", "read_only", ["--leader-socket"], {
|
|
1036
|
+
tier: "inspect",
|
|
1037
|
+
fixtures: [
|
|
1038
|
+
{
|
|
1039
|
+
id: "grok-dashboard",
|
|
1040
|
+
description: "grok dashboard subcommand (leader socket passthrough)",
|
|
1041
|
+
args: ["--leader-socket", "/tmp/dash.sock"],
|
|
1042
|
+
expect: "pass",
|
|
1043
|
+
},
|
|
1044
|
+
],
|
|
1045
|
+
}),
|
|
1025
1046
|
export: subcommand(["export"], "Export Grok session data.", "read_only", ["--clipboard", "--leader-socket"], { tier: "inspect" }),
|
|
1026
1047
|
import: subcommand(["import"], "Import Grok session data.", "writes_local_config", [
|
|
1027
1048
|
"--json",
|
|
@@ -1197,7 +1218,11 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1197
1218
|
description: "Custom leader socket path (isolated leader, Grok 0.2.32+)",
|
|
1198
1219
|
},
|
|
1199
1220
|
"--single": { arity: "one", description: "Single-turn prompt" },
|
|
1200
|
-
"--todo-gate": {
|
|
1221
|
+
"--todo-gate": {
|
|
1222
|
+
arity: "none",
|
|
1223
|
+
description: "Enable runtime turn-end TodoGate (accepted at 0.2.60+ but hidden from --help)",
|
|
1224
|
+
hiddenFromHelp: true,
|
|
1225
|
+
},
|
|
1201
1226
|
"--verbatim": { arity: "none", description: "Send prompt exactly as given" },
|
|
1202
1227
|
"--version": { arity: "none", description: "Print version" },
|
|
1203
1228
|
"--worktree": {
|
|
@@ -1208,11 +1233,13 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1208
1233
|
arity: "one",
|
|
1209
1234
|
values: ["summary", "transcript", "segments"],
|
|
1210
1235
|
description: "Compaction mode (default summary; sets GROK_COMPACTION_MODE). `segments` persists per-segment markdown.",
|
|
1236
|
+
hiddenFromHelp: true,
|
|
1211
1237
|
},
|
|
1212
1238
|
"--compaction-detail": {
|
|
1213
1239
|
arity: "one",
|
|
1214
1240
|
values: ["none", "minimal", "balanced", "verbose"],
|
|
1215
1241
|
description: "Segment verbatim detail (default verbose; sets GROK_COMPACTION_DETAIL). Only affects `--compaction-mode segments`.",
|
|
1242
|
+
hiddenFromHelp: true,
|
|
1216
1243
|
},
|
|
1217
1244
|
},
|
|
1218
1245
|
env: {},
|
|
@@ -1377,7 +1404,7 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1377
1404
|
executable: "vibe",
|
|
1378
1405
|
upstream: "Mistral Vibe CLI",
|
|
1379
1406
|
upstreamMetadata: {
|
|
1380
|
-
sourceUrls: ["https://github.com/mistralai/mistral-vibe/releases"],
|
|
1407
|
+
sourceUrls: ["https://api.github.com/repos/mistralai/mistral-vibe/releases/latest"],
|
|
1381
1408
|
packageName: "mistral-vibe",
|
|
1382
1409
|
repo: "https://github.com/mistralai/mistral-vibe",
|
|
1383
1410
|
installDocsUrl: "https://github.com/mistralai/mistral-vibe#installation",
|
|
@@ -1459,7 +1486,7 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1459
1486
|
description: "Additional writable workspace directory (Phase 4 slice ζ; repeat once per directory)",
|
|
1460
1487
|
},
|
|
1461
1488
|
},
|
|
1462
|
-
acknowledgedUpstreamFlags: ["--auto-approve"],
|
|
1489
|
+
acknowledgedUpstreamFlags: ["--auto-approve", "--check-upgrade", "--yolo"],
|
|
1463
1490
|
env: {
|
|
1464
1491
|
VIBE_ACTIVE_MODEL: {
|
|
1465
1492
|
arity: "one",
|
|
@@ -1558,11 +1585,25 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1558
1585
|
},
|
|
1559
1586
|
{
|
|
1560
1587
|
id: "mistral-current-help-surface",
|
|
1561
|
-
description: "Vibe 2.
|
|
1588
|
+
description: "Vibe 2.17.1 request-time help surface: --prompt, -v, --version, --setup accepted",
|
|
1562
1589
|
args: ["--prompt", "hello", "--agent", "auto-approve", "-v", "--version", "--setup"],
|
|
1563
1590
|
env: { VIBE_ACTIVE_MODEL: "mistral-medium-3.5" },
|
|
1564
1591
|
expect: "pass",
|
|
1565
1592
|
},
|
|
1593
|
+
{
|
|
1594
|
+
id: "mistral-yolo-shortcut-rejected",
|
|
1595
|
+
description: "Vibe 2.17.1 advertises --yolo as a shortcut, but the gateway keeps using explicit --agent auto-approve",
|
|
1596
|
+
args: ["-p", "hello", "--yolo"],
|
|
1597
|
+
env: { VIBE_ACTIVE_MODEL: "mistral-medium-3.5" },
|
|
1598
|
+
expect: "fail",
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
id: "mistral-check-upgrade-rejected",
|
|
1602
|
+
description: "Vibe 2.17.1 advertises --check-upgrade, but gateway request validation rejects update-prompt flags",
|
|
1603
|
+
args: ["--check-upgrade"],
|
|
1604
|
+
env: { VIBE_ACTIVE_MODEL: "mistral-medium-3.5" },
|
|
1605
|
+
expect: "fail",
|
|
1606
|
+
},
|
|
1566
1607
|
{
|
|
1567
1608
|
id: "mistral-resume-bare",
|
|
1568
1609
|
description: "Vibe --resume without session ID is accepted (optional arity)",
|
|
@@ -1604,13 +1645,22 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1604
1645
|
"--model": { arity: "one", description: "AI model for this session" },
|
|
1605
1646
|
"--permission-mode": {
|
|
1606
1647
|
arity: "one",
|
|
1607
|
-
values: ["
|
|
1608
|
-
description: "Permission mode (
|
|
1648
|
+
values: ["auto", "smart", "dangerous"],
|
|
1649
|
+
description: "Permission mode (auto = read-only auto-approve; smart = additionally auto-runs safe actions per fast model; dangerous = approve all)",
|
|
1609
1650
|
},
|
|
1610
1651
|
"--prompt-file": { arity: "one", description: "Load the initial prompt from a file" },
|
|
1611
1652
|
"--resume": { arity: "one", description: "Resume a specific session by ID" },
|
|
1612
1653
|
"--continue": { arity: "none", description: "Resume the most recent session in cwd" },
|
|
1613
1654
|
},
|
|
1655
|
+
acknowledgedUpstreamFlags: [
|
|
1656
|
+
"--agent-config",
|
|
1657
|
+
"--config",
|
|
1658
|
+
"--export",
|
|
1659
|
+
"--print",
|
|
1660
|
+
"--respect-workspace-trust",
|
|
1661
|
+
"--sandbox",
|
|
1662
|
+
"--version",
|
|
1663
|
+
],
|
|
1614
1664
|
env: {},
|
|
1615
1665
|
conformanceFixtures: [
|
|
1616
1666
|
{
|
|
@@ -1633,20 +1683,20 @@ export const UPSTREAM_CLI_CONTRACTS = {
|
|
|
1633
1683
|
},
|
|
1634
1684
|
{
|
|
1635
1685
|
id: "devin-permission-mode",
|
|
1636
|
-
description: "Valid --permission-mode
|
|
1637
|
-
args: ["-p", "hello", "--permission-mode", "
|
|
1686
|
+
description: "Valid --permission-mode 'dangerous' accepted",
|
|
1687
|
+
args: ["-p", "hello", "--permission-mode", "dangerous"],
|
|
1638
1688
|
expect: "pass",
|
|
1639
1689
|
},
|
|
1640
1690
|
{
|
|
1641
1691
|
id: "devin-permission-mode-auto",
|
|
1642
|
-
description: "Valid --permission-mode
|
|
1692
|
+
description: "Valid --permission-mode 'auto' accepted",
|
|
1643
1693
|
args: ["-p", "hello", "--permission-mode", "auto"],
|
|
1644
1694
|
expect: "pass",
|
|
1645
1695
|
},
|
|
1646
1696
|
{
|
|
1647
|
-
id: "devin-permission-mode-
|
|
1648
|
-
description: "Valid --permission-mode
|
|
1649
|
-
args: ["-p", "hello", "--permission-mode", "
|
|
1697
|
+
id: "devin-permission-mode-smart",
|
|
1698
|
+
description: "Valid --permission-mode 'smart' accepted",
|
|
1699
|
+
args: ["-p", "hello", "--permission-mode", "smart"],
|
|
1650
1700
|
expect: "pass",
|
|
1651
1701
|
},
|
|
1652
1702
|
{
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-cli-gateway",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "llm-cli-gateway",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.11.1",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llm-cli-gateway",
|
|
3
|
-
"version": "2.11.
|
|
3
|
+
"version": "2.11.1",
|
|
4
4
|
"mcpName": "io.github.verivus-oss/llm-cli-gateway",
|
|
5
5
|
"description": "MCP server providing unified access to Claude Code, Codex, Gemini, Grok, and Mistral Vibe CLIs with session management, retry logic, async job orchestration, durable job results, and cross-LLM validation.",
|
|
6
6
|
"license": "MIT",
|