Skip to content

feat(debug): add interactive sessions - #9

Merged
pocky merged 1 commit into
mainfrom
feature/F004-interactive-debug-session-sidecar
Jun 24, 2026
Merged

feat(debug): add interactive sessions#9
pocky merged 1 commit into
mainfrom
feature/F004-interactive-debug-session-sidecar

Conversation

@pocky

@pocky pocky commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add opt-in interactive debugging support through a bundled native debug sidecar extension backed by Debug Adapter Protocol sessions.
  • Introduce validated [debug.<language>] configuration and pass per-extension initialization payloads into sidecars.
  • Extract shared sidecar JSON-RPC harness logic so lint, LSP, and debug extensions handle HostCall response waits without dropping inbound host requests.
  • Document the new debug tool surface and add deterministic e2e coverage with a fixture debug adapter.

Changes

Workspace and Build

  • .gitignore: Keep the repository-level debug/ ignore while allowing extensions/debug/ to be tracked.
  • Cargo.toml: Add extension_sidecar_harness, extensions/debug, and extensions/fixtures/debug_adapter to workspace members and default members.
  • Cargo.lock: Lock new debug extension, debug adapter fixture, and sidecar harness packages.
  • crates/core_engine/Cargo.toml: Add extension_sidecar_harness as a dev dependency for protocol and e2e tests.
  • extensions/lint/Cargo.toml: Add dependency on the shared sidecar harness.
  • extensions/lsp/Cargo.toml: Add dependency on the shared sidecar harness.

Debug Configuration and Registration

  • crates/core_engine/src/adapters/config/debug.rs: Add validated debug language configuration parsing, initialization payload generation, and config unit tests.
  • crates/core_engine/src/adapters/config/mod.rs: Expose DebugConfig and include [debug] in TowerConfig.
  • crates/core_engine/src/adapters/daemon/engine.rs: Pass extension init configs, register the bundled debug extension when debug config is present, and resolve the debug sidecar binary.
  • crates/core_engine/src/adapters/extension/discovery.rs: Add extension init config mapping and thread it through extension discovery.
  • crates/core_engine/src/adapters/extension/host_deps.rs: Extend host dependencies needed by the debug extension path.
  • crates/core_engine/src/adapters/extension/mod.rs: Re-export extension initialization configuration support.
  • crates/core_engine/src/adapters/extension/sidecar.rs: Send extension-specific initialize payloads and tighten sidecar cleanup behavior.
  • crates/core_engine/src/adapters/extension/supervisor.rs: Store and forward initialize config into supervised sidecar processes.
  • crates/core_engine/src/adapters/mcp/extension_merged_registry.rs: Preserve extension-provided debug tools in the merged MCP registry.

Debug Extension

  • extensions/debug/Cargo.toml: Add the native debug sidecar crate.
  • extensions/debug/extension.toml: Define debug extension metadata, activation, and contributed tower_debug_* tools.
  • extensions/debug/src/dap.rs: Implement DAP framing, request/response correlation, events, timeout handling, and adapter communication.
  • extensions/debug/src/main.rs: Add the debug sidecar entrypoint, initialization flow, tool dispatch, and sidecar harness integration.
  • extensions/debug/src/process.rs: Manage debug adapter child process startup, shutdown, and cleanup.
  • extensions/debug/src/protocol.rs: Define sidecar protocol helpers and initialization config parsing for debug sessions.
  • extensions/debug/src/session.rs: Add session lifecycle management, breakpoints, stepping, pause/resume, variable inspection, and cleanup.
  • extensions/debug/src/tools.rs: Implement debug MCP tool request parsing, validation, dispatch, and JSON-RPC error mapping.
  • extensions/debug/src/types.rs: Define debug session, breakpoint, stack frame, scope, variable, stop, and output DTOs.

Shared Sidecar Harness

  • crates/extension_sidecar_harness/Cargo.toml: Add the shared harness crate manifest.
  • crates/extension_sidecar_harness/src/jsonrpc.rs: Add JSON-RPC envelope parsing, response writing, HostCall handling, and queued inbound-frame support.
  • crates/extension_sidecar_harness/src/lib.rs: Expose shared sidecar JSON-RPC helpers.
  • crates/extension_protocol/src/lib.rs: Export updated protocol initialization types.
  • crates/extension_protocol/src/messages.rs: Add extension initialization config payload support.
  • crates/extension_protocol/tests/protocol_tests.rs: Cover initialize config serialization and validation contracts.

Lint and LSP Harness Migration

  • extensions/lint/src/lib.rs: Expose lint protocol components required by the harness migration.
  • extensions/lint/src/main.rs: Move lint sidecar dispatch onto the shared harness.
  • extensions/lint/src/protocol.rs: Replace local protocol loop behavior with shared harness-compatible helpers.
  • extensions/lint/tests/protocol_tests.rs: Update lint protocol tests for the harness-backed behavior.
  • extensions/lsp/src/main.rs: Move LSP sidecar dispatch onto the shared harness.
  • extensions/lsp/src/protocol.rs: Replace local protocol loop behavior with shared harness-compatible helpers and queued-frame handling.
  • extensions/lsp/src/push.rs: Adjust push forwarding for the shared protocol loop.
  • extensions/lsp/src/tools.rs: Update LSP tool dispatch and error handling for harness integration.

Tests and Fixtures

  • crates/core_engine/src/adapters/extension/supervisor_tests.rs: Update supervisor tests for initialize config and cleanup behavior.
  • crates/core_engine/src/adapters/extension/tests.rs: Add discovery, initialization payload, disabled extension, and sidecar registration coverage.
  • crates/core_engine/tests/extension_ast_e2e.rs: Update AST extension e2e setup for the shared extension loading path.
  • crates/core_engine/tests/extension_debug_e2e.rs: Add debug extension e2e coverage for registration, launch, stack, scopes, variables, breakpoints, continue, output, and termination.
  • crates/core_engine/tests/extension_fmt_e2e.rs: Update format extension e2e setup for the shared extension loading path.
  • crates/core_engine/tests/extension_lint_e2e.rs: Update lint e2e coverage for harness-backed sidecar behavior.
  • crates/core_engine/tests/extension_lsp_process_e2e.rs: Add LSP process and queued-frame regression coverage.
  • crates/core_engine/tests/functional_lint_fix_mcp.rs: Update functional lint fix setup for extension registry changes.
  • crates/core_engine/tests/functional_lint_mcp.rs: Update functional lint setup for extension registry changes.
  • extensions/fixtures/debug_adapter/Cargo.toml: Add deterministic debug adapter fixture crate.
  • extensions/fixtures/debug_adapter/src/main.rs: Implement a fixture DAP adapter for repeatable debug extension e2e tests.

Documentation and Project Knowledge

  • README.md: Add interactive debugging to the feature list, crate layout, and documentation index.
  • docs/README.md: Link debug session user documentation.
  • docs/architecture.md: Document the debug extension and sidecar harness additions in the architecture overview.
  • docs/extensions.md: Update extension authoring guidance for initialization config and shared sidecar harness behavior.
  • docs/mcp-tools.md: Document the tower_debug_* MCP tools, request shapes, responses, and errors.
  • docs/user-guide/debug-sessions.md: Add a user guide for configuring and driving interactive debug sessions.
  • .zpm/kb/feedback/journal.wal: Record reusable project rules learned during F004 implementation and review remediation.

Test plan

  • Run cargo fmt --check
  • Run cargo clippy --workspace --all-targets -- -D warnings
  • Run cargo build --workspace --bins
  • Run cargo test --workspace

Closes #8


Generated with awf commit workflow

- `.gitignore`: Ignore tower runtime and debug artifacts
- `.zpm/kb/feedback/journal.wal`: Record project feedback memory updates
- `Cargo.lock`: Add debug extension and sidecar harness dependencies
- `Cargo.toml`: Register debug and harness workspace crates
- `README.md`: Document debug session capability
- `crates/core_engine/Cargo.toml`: Add dependencies for debug extension integration tests
- `crates/core_engine/src/adapters/config/debug.rs`: Add debug adapter configuration parsing
- `crates/core_engine/src/adapters/config/mod.rs`: Wire debug configuration into project config
- `crates/core_engine/src/adapters/daemon/engine.rs`: Pass debug config into extension loading
- `crates/core_engine/src/adapters/extension/discovery.rs`: Discover debug extension manifests
- `crates/core_engine/src/adapters/extension/host_deps.rs`: Expose debug host dependencies
- `crates/core_engine/src/adapters/extension/mod.rs`: Export debug extension adapter wiring
- `crates/core_engine/src/adapters/extension/sidecar.rs`: Support sidecar initialization config
- `crates/core_engine/src/adapters/extension/supervisor.rs`: Pass config payloads to sidecar supervisors
- `crates/core_engine/src/adapters/extension/supervisor_tests.rs`: Cover supervisor config initialization
- `crates/core_engine/src/adapters/extension/tests.rs`: Update extension discovery and config tests
- `crates/core_engine/src/adapters/mcp/extension_merged_registry.rs`: Merge debug tools into MCP registry
- `crates/core_engine/tests/extension_ast_e2e.rs`: Update extension e2e harness usage
- `crates/core_engine/tests/extension_debug_e2e.rs`: Add debug extension lifecycle e2e coverage
- `crates/core_engine/tests/extension_fmt_e2e.rs`: Update format extension e2e wiring
- `crates/core_engine/tests/extension_lint_e2e.rs`: Update lint extension e2e wiring
- `crates/core_engine/tests/extension_lsp_process_e2e.rs`: Update LSP process e2e wiring
- `crates/core_engine/tests/functional_lint_fix_mcp.rs`: Update functional lint fix integration wiring
- `crates/core_engine/tests/functional_lint_mcp.rs`: Update functional lint integration wiring
- `crates/extension_protocol/src/lib.rs`: Export extension initialization config types
- `crates/extension_protocol/src/messages.rs`: Add initialization config payloads to protocol messages
- `crates/extension_protocol/tests/protocol_tests.rs`: Cover protocol config serialization contracts
- `crates/extension_sidecar_harness/Cargo.toml`: Add shared sidecar harness crate manifest
- `crates/extension_sidecar_harness/src/jsonrpc.rs`: Add JSON-RPC framing helpers
- `crates/extension_sidecar_harness/src/lib.rs`: Add queued sidecar protocol harness
- `docs/README.md`: Link debug session documentation
- `docs/architecture.md`: Document debug sidecar architecture
- `docs/extensions.md`: Document debug extension behavior
- `docs/mcp-tools.md`: Document debug MCP tools
- `docs/user-guide/debug-sessions.md`: Add debug sessions user guide
- `extensions/debug/Cargo.toml`: Add debug extension crate manifest
- `extensions/debug/extension.toml`: Add debug extension manifest
- `extensions/debug/src/dap.rs`: Implement Debug Adapter Protocol client
- `extensions/debug/src/main.rs`: Add debug extension sidecar entrypoint
- `extensions/debug/src/process.rs`: Manage debug adapter child processes
- `extensions/debug/src/protocol.rs`: Implement debug sidecar protocol handling
- `extensions/debug/src/session.rs`: Add debug session lifecycle manager
- `extensions/debug/src/tools.rs`: Add debug MCP tool handlers
- `extensions/debug/src/types.rs`: Add debug protocol DTOs
- `extensions/fixtures/debug_adapter/Cargo.toml`: Add fixture debug adapter crate
- `extensions/fixtures/debug_adapter/src/main.rs`: Add deterministic debug adapter fixture
- `extensions/lint/Cargo.toml`: Depend on shared sidecar harness
- `extensions/lint/src/lib.rs`: Update lint extension exports
- `extensions/lint/src/main.rs`: Migrate lint sidecar to shared harness
- `extensions/lint/src/protocol.rs`: Remove duplicated sidecar loop code
- `extensions/lint/tests/protocol_tests.rs`: Update lint protocol harness tests
- `extensions/lsp/Cargo.toml`: Depend on shared sidecar harness
- `extensions/lsp/src/main.rs`: Migrate LSP sidecar to shared harness
- `extensions/lsp/src/protocol.rs`: Remove duplicated protocol loop code
- `extensions/lsp/src/push.rs`: Queue host frames during LSP host calls
- `extensions/lsp/src/tools.rs`: Preserve LSP tool error mapping

Closes #8
@pocky
pocky force-pushed the feature/F004-interactive-debug-session-sidecar branch from 9acf072 to 1e84576 Compare June 24, 2026 10:32
@pocky
pocky marked this pull request as ready for review June 24, 2026 10:35
@pocky
pocky merged commit 5e4a761 into main Jun 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

F004: Interactive Debug Session Sidecar

1 participant