GDB/AI 1.2.0
Changes since v1.1.1
GDB/AI 1.2.0 improves compound debugging calls, session correctness, bounded evidence handling, and the Python and TypeScript SDKs. Review the upgrade notes below before deploying with an existing configuration or MCP client.
Agent interface and inspection
- Combine run control, byte-exact input, stop-or-exit waits, requested observations, and target output in one call. Projected continue and step now wait for a stop or exit by default; asynchronous operation remains available explicitly. Add direct restart and richer bounded probes.
- Expose eleven default MCP tools, including inspection batching and probes. Compact projected replies omit repeated state and healthy defaults while preserving errors, truncation, continuation, and evidence-gap information. Bound large replies after projection and preserve artifact ownership.
- Add bounded symbol/type facts, paged mappings, thread stacks captured at one stop, ABI argument views, ordered expression batches, address-expression memory reads, and GDB-side searches over large memory ranges.
- Return native GDB helper output with raw command replies, including output preceding errors. Consecutive raw commands defer registry reconciliation until a structured operation needs that state.
Correctness and reliability
- Preserve literal launch arguments across supported GDB versions, resolve relative targets from workspace roots, validate executable inputs, and preserve supported environment values exactly. Runtime selection remains the caller's responsibility.
- Keep interrupt and cancellation ordering independent of ordinary mutation waits. Preserve stops at deadline boundaries, known exit codes, and parent state across child exits; isolate reused inferior generations and retire closed sessions promptly. GDB hangups no longer terminate the server.
- Preserve binary PTY input, restore EOF behavior, support prompt-synchronized input steps, and drain the current PTY generation before returning exit. Control-heavy output uses lossless binary encoding; resource ranges retain byte-exact UTF-8 and binary content.
- Retain operation results after response delivery failures, isolate reused HTTP request reservations, and honor stateless request metadata. Sessionless HTTP requests default to the stateless protocol path.
- Coalesce concurrent artifact verification and event resynchronization, reject blocking special-file inspection inputs, and mark abandoned stored sessions failed after restart instead of presenting them as live targets.
Performance and history
- Reduce full-state copying in session publication, request admission, coordination reads, and inspection. Reuse journal encoding buffers, incrementally frame fragmented MI records and verify replay evidence, decode C-string spans in bulk, and copy ring-buffer reads in bounded spans.
- In the default performance history mode, coalesce checkpoints and keep live debugging available after history-storage failures, with explicit evidence gaps. Durable mode retains required evidence writes and fails the session when those writes fail. Replay distinguishes complete journals from prefixes; it does not restore or execute an inferior.
- Release builds now use
opt-level = 3, fat LTO, and one codegen unit. Portable CPU targets and panic unwinding are retained. These settings trade longer compilation for optimization opportunities; no universal runtime speedup or Agent-accuracy improvement is claimed.
SDKs and target coverage
- Synchronize Rust packages, fuzz dependency locks, both SDK packages, and MCP client identities to 1.2.0.
- Bring Python and TypeScript to parity for canonical calls, projected tools, resource discovery, and bounded resource reads. Add optional stateless
2026-07-28support while retaining the sessionful2025-11-25default. - Preserve structured
RpcErrordata, close/abort evidence, and monotonic revisions. Forward explicit idempotency keys without automatically changing the request fingerprint; reuse HTTP sessions and tolerate already-evicted sessions on disconnect. Accept base URLs and complete/mcpendpoints. - Keep Python dependency-free on Python 3.10+ and TypeScript on Node.js 22+ native
fetch. Include typing declarations, installation guidance, and a required real-server SDK check covering both protocols and history modes. - Extend conditional Linux kernel inspection with stripped-target bootstrap, runtime symbols/modules, page-table views, and bounded kernel logs. Symbol-free bootstrap and page-table paths remain limited to supported x86-64 QEMU targets; typed traversal requires matching symbols.
- Add native GDB comparisons for V8/Node.js, PHP/CGI, Clang, and LLVM MCJIT. These checks qualify the tested builds and helpers, not a separate language debugger or every runtime/GDB combination. Stabilize the GDB compatibility build/cache recipe and legacy x86 XSAVE handling.
- Update the 10,000-cycle lifecycle soak to verify closure through canonical response state after nested-state deduplication, retaining the check on every session close.
Upgrade and security notes
- Defaults have changed: ordinary sessions use
lab_mutation, bubblewrap is disabled by default, the kernel provider is enabled, and an empty remote allowlist accepts parsed GDB endpoints. Set an appropriate observer/control profile, sandbox mode, and nonempty endpoint allowlist when required. - GDB and its children inherit OS resource limits unless positive caps are configured.
limits.process_file_bytesis independent of artifact quotas. Configure explicit limits or an external container/VM boundary for untrusted workloads; evidence quotas do not constrain target file writes. - Raw console administration accepts native GDB commands only after explicit authorization. GDB helpers and probe trigger processes run with host-account permissions. Target auto-load remains disabled and HTTP remains loopback-only; a bearer token does not enable a non-loopback listener.
- MCP-created sessions use fixed caller control without renewable write leases. Canonical clients retain revision and lease coordination. An omitted projected
stop_idbinds the current stop; an explicit ID remains a stale-stop check. - MCP clients should consume
structuredContentand tolerate omitted defaults. Canonical clients should use the envelope'sstaterather than depend on an identical nestedresult.state. Waiter timeout does not cancel execution: retainoperation_idand inspect its status before considering another call. - The canonical namespace remains
gdb.ai/v1. Use the versioned protocol guide, security model, and SDK guide when upgrading.
Verification and release assets
- Tag: v1.2.0
- Source commit: 3676f60
- Tagged CI and release provenance: the required Rust tests, Clippy, schema checks, Python/TypeScript SDK tests and real-server checks, native runtime comparisons, fuzz campaigns, GDB 9.2–17.2 matrix, AArch64 system tests, and Linux kernel 6.1/6.12/6.12-arm64 checks passed.
- The 10,000-cycle real GDB lifecycle soak passed both locally and in the tagged CI run, with eight concurrent sessions. This long-running check remains independent of the packaging gate.
- The qualified bundle contains a static x86-64 musl binary, deterministic source archive, CycloneDX 1.5 SBOM, SHA-256 checksums, and GitHub build provenance. All downloaded artifact checksums passed; the binary reports
v1.2.0, the source commit above, anddirty: false. - Both SDKs also passed all 16 real GDB sessions against the downloaded static release binary, across both HTTP protocols and both history modes, including complete journal replay.
The tag was corrected before Release publication from 172000a to 3676f60 for the soak-only assertion fix. Refresh any previously fetched v1.2.0 tag that still resolves to the earlier commit; release artifacts use the final source commit above.
Full changelog: v1.1.1...v1.2.0