g06.035 — Gemini CLI ACP consumer HTTP MCP wiring - #377
Conversation
…n/new (g06.035) Emit one Contract 063 consumer-supplied streamable-HTTP MCP entry on production gemini-cli.acp session/new at the route's current point 0.59.0. Encoding emits ACP type "http" under the route-owned name swallowtail-gemini-acp, which the provider maps to httpUrl with declared headers on requestInit.headers (Research 351). Values pass verbatim and stay out of failures, Debug, activity, and fingerprints; omission keeps mcpServers byte-identically empty. An unauthenticated open fails typed as swallowtail.gemini.acp.auth_required and never drops the entry. The prepared facade admits the placement through GeminiSessionProfileInput::with_http_mcp_placement and carries it onto working-state restoration. Headless stays MCP-disabled; the composite client_mcp_servers cell stays a producer gap naming the live gate.
Changes requiredReviewed Blocking
Non-blocking
OtherwiseEncoder emits ACP Validation on this head, tree left clean: |
…nt row (g06.035 review) Review findings on 0140c13: - Bind the unauthenticated gate to the error strings Gemini CLI 0.59.0 actually sends on session/new: RequestError(-32000, 'Authentication required.'), the missing-key arm 'Gemini API key is missing or not configured.', and the bundled SDK authRequired() default 'Authentication required'. The fixture now uses those exact strings and code, and the camelCase authRequired identifier appears nowhere on the wire. The refused open still proves the HTTP entry stays emitted. - Publish the consumer-supplied-http placement through Contract 061: a bound placement adds one namespaced mcp.placement row (route gemini-cli.acp, segment acp-v1) enumerating consumer-supplied-http and swallowtail-gemini-acp, with no URL or header values; omission keeps the 7-row census silent. The observed projected-open path carries the row too, and working-state restoration now proves the restored session/new wire. - Fixture agent records the messages it sends so exact wire errors are assertable.
Ready to mergeReviewed Prior blockers
Acceptance
Non-blocking: the CHANGELOG entry repeats the honouring/auth sentence once; the matrix evidence JSON still cites g06.005 while the notes name g06.035 and the live gate. Validation on this head, tree left clean: |
…-8fab-d00cb356bc6d # Conflicts: # CHANGELOG.md
Ready to mergeReviewed MergeThe only conflict was Prior blockers (still fixed)
Encoder, verbatim values, empty omission, Debug redaction, restoration wire, ValidationOn this head, tree left clean:
Non-blocking: Gemini |
…-8fab-d00cb356bc6d
Ready to mergeReviewed PR-vs-main scope is still the 18 owned Gemini/docs/changelog/API-baseline paths. CHANGELOG still carries the g06.035 Unreleased entry. Prior blockers remain fixed: unauthenticated Validation on this head, tree left clean: Non-blocking: Gemini |
What changed
Wire Contract 063's consumer-supplied streamable-HTTP MCP placement into
gemini-cli.acpproductionsession/newat the route's current point(
0.59.0, Research 351).GeminiAcpHttpMcpPlacementmodels the admittedhttpentry under theroute-owned name
swallowtail-gemini-acp; validation is structural only(route-owned non-empty name, absolute
http/httpsURL, well-formedheader names) and values pass verbatim.
type: "http", which the provider maps onto itshttpUrltransport with declared headers onrequestInit.headers(
acpSessionManager.ts/mcp-client.tsper Research 351).mcpServersbyte-identically empty(
{"cwd":…,"mcpServers":[]}fixture asserted).authRequiredgate) fails asswallowtail.gemini.acp.auth_requiredandthe recorded wire still carries the entry — it is never dropped to make the
open succeed.
Debug, activity,or fingerprints; canary-tested on the placement, encoder, prepared session,
and typed failure.
GeminiSessionProfileInput::with_http_mcp_placementand carries it ontoworking-state restoration;
gemini-cli.headlessstays untouched.Emission is not honouring: the composite
client_mcp_serverscell stays aproducer gap naming the live gate; no cell becomes
Yes.Validation
cargo fmt -p swallowtail-adapter-gemini -- --check— passeffigy validate:focused swallowtail-adapter-gemini— passeffigy package:verify-affected swallowtail-adapter-gemini— passeffigy qa:routes— passeffigy qa:docs— passgit diff --check— cleanswallowtail-adapter-geminiregenerated(purely additive exports)
Research 351, g06.035. Task: d1ab50a1-71ef-4fcd-8fab-d00cb356bc6d.