Conversation
…A-382) Implements Phase 7b of the Anvil roadmap: a WebSocket gateway that streams agent events to connected clients and accepts control commands. - New `harness-gateway` crate with `Gateway`, `GatewayHandle`, `AgentEvent`, `ControlCommand`, and `GatewayConfig` types - Axum-based WebSocket server with graceful shutdown via oneshot channel - `tokio::sync::broadcast` fan-out for zero-copy event delivery to N clients - Lagging clients drop events rather than blocking the agent - `ControlCommand` variants: Interrupt, Pause, Resume, Ping (pong response) - `/health` HTTP endpoint for readiness checks - 5 tests: health OK, emit-with-no-clients, event delivery, ping/pong, control command forwarding Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Remove useless .into() conversions in WsMessage::Text calls (server.rs) - Drop unused SinkExt import in test_ws_event_delivery - Drop unused StreamExt as _ import in test_ws_control_command_forwarded - Add ENV_MUTEX to harness-core auth tests to serialise env-var access and prevent flaky failures when new crates increase test parallelism Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
…heck` Previously `--check` only showed whether the API key was set. Now it also instantiates the configured provider and sends a minimal ping message to verify end-to-end connectivity, reporting OK with latency or a clean error message. Closes ANGA-575 Co-Authored-By: Paperclip <noreply@paperclip.ing>
…ing (ANGA-70) Adds a new `harness-tui` binary crate (`anvil-tui`) that connects to a running harness-gateway WebSocket endpoint and renders: - Live event feed: TurnStart, Token, ToolCall, ToolResult, TurnComplete, Error - Color-coded event labels (cyan/white/yellow/green/blue/red) - Detail panel: scrollable full JSON of the selected event - Auto-reconnecting WebSocket client with exponential backoff - Status bar: event count + gateway connection state Controls: j/k navigate, d/u detail scroll, g/G top/end, q quit. Note: cargo compilation not verified locally (toolchain unavailable in agent WSL2 env). Logic follows established patterns from harness-paperclip and harness-gateway crates. Co-Authored-By: Paperclip <noreply@paperclip.ing>
Downgrade ratatui 0.29→0.28 and crossterm 0.28→0.27 to avoid darling/instability crates requiring rustc 1.88 (CI has 1.86). Apply cargo fmt corrections to app.rs and ui.rs. Co-Authored-By: Paperclip <noreply@paperclip.ing>
Remove Cargo.lock from .gitignore and commit the lockfile. Binary crates should always commit their lockfile (per Rust guidelines) to ensure reproducible builds. This pins instability to 0.3.7 and darling to 0.20.11, avoiding MSRV breakage from newer releases requiring rustc 1.88. Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Allow dead_code on AppEvent::Key variant (reserved for future channel-based input) - Allow dead_code on AgentEvent::label() utility method - Replace `if let Some(text) = msg.into_text().ok()` with `if let Ok(text) = msg.into_text()` - Remove useless `.into()` calls on Rect values in ui.rs Co-Authored-By: Paperclip <noreply@paperclip.ing>
Enhance EchoProvider with scripted tool-call mode for deterministic end-to-end testing of the full agent loop without real LLM calls. - Add EchoProvider::scripted() to queue tool calls that drain in order before falling back to normal echo behaviour - Add lib.rs to harness-cli crate to expose agent module for integration tests - Create crates/cli/tests/echo_integration.rs with 9 tests covering: plain echo, scripted tool dispatch, multi-tool sequences, max-iteration caps, memory persistence, named-session continuity, and RunOptions override - Update README with echo provider testing documentation Closes ANGA-576 Co-Authored-By: Paperclip <noreply@paperclip.ing>
The provider connectivity check added in 345ce05 used the old EchoProvider unit struct syntax. Update to EchoProvider::new() to match the scripted-mode refactor. Co-Authored-By: Paperclip <noreply@paperclip.ing>
The two auth::resolve() tests both mutate CLAUDE_CONFIG_DIR and ANTHROPIC_API_KEY env vars. When cargo runs them in parallel, one test can clear the vars while the other is still using them, causing a spurious "No Anthropic credentials found" failure. Add a static Mutex so the tests serialize their env-var access. Co-Authored-By: Paperclip <noreply@paperclip.ing>
…ails When the ClaudeCodeProvider subprocess fails (spawn error or non-zero exit), the error message now includes a hint suggesting the user try --provider claude with ANTHROPIC_API_KEY. The hint is suppressed when the key is already set. Closes ANGA-574 Co-Authored-By: Paperclip <noreply@paperclip.ing>
PR #49 Review: "Dev" — Request ChangesThis is a dev→main integration PR bundling 14 commits across 5 features (gateway crate, TUI crate, CLI healthcheck, echo provider integration tests, provider fallback hints) plus infra changes (Cargo.lock commit, auth test race fix). Issues:
The individual commits are well-structured with good messages. Code quality across gateway/TUI looks solid (broadcast fan-out, graceful shutdown, clippy fixes). The echo provider scripted mode is a good testing pattern. Action needed: Add a PR body summarizing the release, confirm CI passes end-to-end. |
anhermon
left a comment
There was a problem hiding this comment.
CTO Review — Request Changes
This is an integration merge (dev→main, 14 commits, +5833/-220) bundling 5 features (gateway WebSocket, TUI, CLI healthcheck, echo tests, provider fallback hints). Most of the diff is Cargo.lock.
Issues:
- No PR description/body — needs a summary of what's being merged
- Confirm CI is green before merging
- TUI crate should have local compilation verified
Add a proper PR body listing the included features and CI status.
Remove board/human approval gate for dev→main merges. Agents merge autonomously when CI passes and review is complete. Add .github/PULL_REQUEST_TEMPLATE.md with Rust-oriented checklist. Closes ANGA-589 Co-Authored-By: Paperclip <noreply@paperclip.ing>
Document the evolution workflow, long-lived branch model, and benchmark-driven merge decisions as directed by ANGA-599. Co-Authored-By: Paperclip <noreply@paperclip.ing>
Add benchmarks/run.sh that measures build time, test pass rate, clippy/fmt compliance, and binary size. Outputs standard benchmark-results.json format. Integrate benchmark job into CI workflow. Closes ANGA-593 Co-Authored-By: Paperclip <noreply@paperclip.ing>
… error The multi-line awk expression for weighted score calculation broke because awk treats newlines as statement terminators — a trailing `+` operator before a newline has no right operand. Switch all awk calls from double-quoted shell expansion to `-v` variable passing with single-quoted programs, which is both more portable and avoids shell injection of malformed values. Closes ANGA-601 Co-Authored-By: Paperclip <noreply@paperclip.ing>
- anvil.svg: graceful Q-bezier horn (~26% body width), chevron-flared feet with inner arch, rim lighting, two-layer ember glow system - anvil-mascot.svg: migrate palette from blue-gray (#2D3748/#4A5568) to warm dark-metal (#252525/#444444/#909090) for brand consistency - Add deployment variants: anvil-mono.svg (currentColor, transparent), anvil-light.svg (warm-white bg), anvil-favicon.svg (32x32 simplified), anvil-social.svg (1200x630 OG card), anvil-github-avatar.svg (400x400) - TOOLS.md: document all assets, differentiate primary vs alt lockup, add usage guidelines and updated design token table Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
User Agent validated — LGTM. All CI checks passing.
* fix(test): stabilize workspace gate on Windows Co-Authored-By: Paperclip <noreply@paperclip.ing> * fix(test): clear skill test temp dirs Co-Authored-By: Paperclip <noreply@paperclip.ing> --------- Co-authored-by: Paperclip <noreply@paperclip.ing>
…68) Co-authored-by: Dev Agent — Platform <dev-agent-platform@paperclip.ing> Co-authored-by: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Paperclip <noreply@paperclip.ing>
feat(cli): expose gateway serve command
No description provided.