You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(acp): the model a turn runs on cannot be changed by a concurrent spawn
Other
chore(tronc): move to dravr-tronc 0.8.0
[0.22.4] — 2026-08-30
[0.22.3] — 2026-08-30
Other
perf(acp): the production chat path runs on the pool, and only reads its own session
[0.22.2] — 2026-08-28
Fixed
fix(ci): clear the expect/panic gate, red on main since db6de60
fix(acp): derive the session ceiling from measured memory, not a guess
[0.22.1] — 2026-08-28
[0.22.0] — 2026-08-27
Added
feat(usage): TokenUsage carries the cache counts providers already send
feat(examples): a probe that asks the model whether it owns a host tool
[0.21.3] — 2026-08-25
Fixed
fix(tests): assert the parser's output without .expect()
fix(copilot-headless): an empty turn is retried, not returned
[0.21.2] — 2026-08-22
[0.21.1] — 2026-08-19
[0.21.0] — 2026-08-19
Added
feat(tool-host): ask the caller's surface per call, not once per session
feat(copilot): give the non-ACP runner real tools, via MCP
feat(tool-host): host a caller's tools to an ACP agent over loopback MCP
Fixed
fix(tool-host): keep the error kind when adapting an McpToolExecutor
fix(tool-host): survive a poisoned lock, and pin isolation and shutdown
fix: repair the SessionStart bootstrap guard for an empty .build
Other
ci(release): bump and publish embacle-tool-host with the rest
test(tool-host): prove streaming carries the caller's tools
style(tests): rustfmt and SPDX header for the permission policy test
[0.20.0] — 2026-08-07
Fixed
fix: clear the warnings the flag removal left behind
[0.19.7] — 2026-07-28
[0.19.6] — 2026-07-13
[0.19.5] — 2026-07-10
Fixed
fix(claude-code): classify prompt-too-long as ContextLength (400), not 502
fix(clippy): backtick doc addrs, is_ok_and, unwrap-free auth tests CI clippy --all-targets flagged doc_markdown (127.0.0.0/8, ::1) + map().unwrap_or -> is_ok_and in is_loopback_host; arch-validation counted 3 test unwrap()s — replaced with matches!. Fixes the 52d04d6 CI failure.
Other
test(copilot_headless): annotate safe test unwraps for arch-validation 15 test-only unwrap sites (tempdir/fs/serde setup) get same-line // Safe: comments; zero flagged remain
[0.19.4] — 2026-06-29
Added
feat(ci): auto-validate Homebrew install after release release.yml now calls homebrew.yml (reusable workflow_call) as a final gated job once the tap formula is pushed, passing the released version for an exact match; drops the vestigial push:tags trigger (GITHUB_TOKEN tag pushes never fired it and would race the formula update). workflow_dispatch retained for manual runs.
Fixed
fix(copilot-headless): route ACP sessions to the configured model via settings.json copilot --acp routes by ~/.copilot/settings.json "model" and ignores both the session/new model field and the --model flag (cosmetic label only); write the model into settings.json before each spawn (preserving other keys), track the warm-process model and respawn on change, and log the real routing model — fixes ACP sessions silently falling through to the account GPT/Gemini default while logs claimed the requested model.
fix(ci): trust dravr-ai tap for Homebrew 6.0 install (ubuntu) Homebrew 6.0 refuses untrusted third-party taps; brew trust dravr-ai/tap (|| true for older brew) before install. Last of 4 Homebrew jobs.
fix(ci): make Homebrew test harness pass (llvm-nm, linuxbrew PATH, 503 health) macOS FFI symbols via toolchain llvm-nm (Apple nm can't read Rust 1.96 LLVM objects); add linuxbrew to PATH on ubuntu (brew not found); smoke test accepts degraded 503 /health (no provider CLIs in CI) by dropping curl -f. All validated locally.
[0.19.3] — 2026-06-22
Added
feat(mcp): migrate to dravr-tronc 0.5.3; release v0.19.2 ActiveConfig->interior RwLock (provider/model/multiplex accessors &self async); init protocolVersion now 2025-11-25; -mcp/-server only.
feat(release): adopt dravr-tronc 0.3 via coordinated republish (embacle-mcp/server 0.19.1) Republish embacle-mcp+embacle-server 0.19.1 on tronc 0.3.1 so the publish graph resolves a single tronc version; root embacle (no tronc dep) stays 0.19.0.
Fixed
fix(ci): combine publish dry-run into one workspace invocation Per-crate dry-run resolved internal embacle dep vs crates.io (only 0.19.0 there, not the unpublished 0.19.2) and failed; co-publishing all three resolves siblings locally. Verified cargo 1.96.0 exit 0.
Other
style(lints): enforce error-handling restriction lints; create_runner_with_config -> Result Sole prod fix: ClaudeWeb embedded-config parse propagated via ? (was expect); crate-root cfg_attr(test, allow) + tests/examples allow attrs; --all-targets clippy green.
Revert "chore(deps): bump dravr-tronc 0.2 -> 0.3" (publish-dry-run version skew) embacle-server publishes against registry embacle-mcp 0.19.0 (tronc 0.2) -> two tronc versions clash; needs a coordinated member-crate release to adopt 0.3.
chore(deps): bump dravr-tronc 0.2 -> 0.3 (now published to crates.io) Server/mcp crates compile against 0.3.1; picks up otel + NotifyLayer + error-handling fixes.
[0.19.2] — 2026-06-19
Changed
deps: migrate embacle-mcp and embacle-server to dravr-tronc 0.5.3 (dual-era
MCP engine). tronc 0.5 hands tools/handlers a shared &Arc<ServerState> with no
outer RwLock, so the active provider/model/multiplex config moved to a
per-field interior RwLock<ActiveConfig>; those accessors are now &self async
(the runner cache was already interior Mutex). All three crates aligned to a
single workspace version. The core embacle crate is unchanged.
[0.19.0] — 2026-06-07
[0.18.0] — 2026-06-06
Added
feat(acp): per-request mcp_servers for native Copilot ACP tool calling ChatRequest.mcp_servers flows into session/new; opt-in mcp_tool_calling re-enables SDK_TOOL_CALLING to route tool turns through converse().
Fixed
fix(example): Duration::from_mins in web_login for clippy 1.96
[0.17.0] — 2026-06-05
Added
feat(web-ui): browser-driven Claude.ai provider (REST + MCP) via dravr-browser
Other
test(e2e): skip Copilot headless E2E when backend auth unavailable
[0.16.0] — 2026-06-04
[0.15.15] — 2026-06-02
[0.15.14] — 2026-05-29
Fixed
fix(tool-sim): strip echoed <tool_result> scaffolding from CLI replies
[0.15.13] — 2026-05-19
[0.15.12] — 2026-05-19
[0.15.11] — 2026-05-19
[0.15.10] — 2026-05-19
[0.15.9] — 2026-05-19
[0.15.8] — 2026-05-19
[0.15.7] — 2026-05-13
Fixed
fix(cli): surface stdout when stderr is empty claude-code on exit=1 writes the error to stdout while emitting zero bytes to stderr. Prefer stderr, fall back to stdout, truncate at 500 chars.
Other
build(deps): bump softprops/action-gh-release to v3
build(deps): bump agent-client-protocol-schema to 0.12
[0.15.6] — 2026-05-08
[0.15.5] — 2026-05-01
Other
obs: payload logging across CLI runners, ACP path, and openai_api Process::run_cli_command emits info (lengths, latency) + trace (argv, full output) covering all 12 runners; copilot_headless::complete and openai_api gain matching pre/post call info+trace; agent::run logs each multi-turn iteration.
[0.15.4] — 2026-04-23
[0.15.3] — 2026-04-21
[0.15.2] — 2026-04-21
[0.15.1] — 2026-04-20
[0.15.0] — 2026-04-17
Added
feat: ranked Copilot model catalog with self-heal + reasoning effort Replaces hardcoded default; adds ModelUnavailable kind and 1.95 clippy fixes.
[0.14.11] — 2026-04-10
Other
build: reduce tokio feature footprint to minimal set
[0.14.10] — 2026-04-03
Fixed
fix: use backticks for code identifiers in doc comment
[0.14.9] — 2026-03-31
[0.14.8] — 2026-03-31
[0.14.7] — 2026-03-31
Fixed
fix: repair broken expect annotations in openai_types test code
fix: add Safe annotation to test expect() calls in openai_types
fix: resolve error handling violations found by dravr-build-config validation
[0.14.6] — 2026-03-30
[0.14.5] — 2026-03-30
[0.14.4] — 2026-03-30
Fixed
fix: stop re-injecting system prompt into ACP prompt text, forward max_tokens
Other
deps: bump opentelemetry and opentelemetry_sdk from 0.28 to 0.31
deps: bump toml from 0.8.23 to 1.1.0
deps: bump agent-client-protocol-schema from 0.11.3 to 0.11.4
deps: bump docker/build-push-action from 6 to 7
deps: bump docker/login-action from 3 to 4
deps: bump docker/setup-buildx-action from 3 to 4
[0.14.3] — 2026-03-28
[0.14.2] — 2026-03-26
Other
deps: bump dravr-tronc to 0.2 with error notification support
[0.14.1] — 2026-03-23
[0.13.5] — 2026-03-18
[0.13.4] — 2026-03-18
Added
feat: make ACP session and prompt timeouts configurable via env vars
[0.13.3] — 2026-03-18
[0.13.2] — 2026-03-18
[0.13.1] — 2026-03-18
Fixed
fix: inject system prompt into ACP prompt blocks
[0.13.0] — 2026-03-13
Added
feat: add C FFI static library for Swift integration
feat: materialize images to temp files for all 12 CLI runners
[0.12.0] — 2026-03-13
Added
feat: add vision/image support and wire CopilotHeadless into provider system
Fixed
fix: resolve clippy and test count for copilot-headless wiring
[0.11.0] — 2026-03-12
Added
feat: add Kilo Code CLI runner with NDJSON parsing and streaming
feat: unify embacle-server with embacle-mcp into single binary
feat: add guardrail middleware and cross-decorator scenario tests GuardrailProvider with 3 built-in guards, ScriptedProvider, 7 scenarios
feat: add cost tracking, response cache, and OTel metrics export TokenPricing/PricingTable, CacheProvider, otel feature flag with instruments
feat: add TOML config file loading behind config-file feature flag Declarative provider, fallback, alias setup via embacle.toml or ~/.config/embacle/
feat: add retry with exponential backoff to FallbackProvider Add ErrorKind::is_transient(), RetryConfig, FallbackProvider::with_retry()
feat: add Kiro CLI runner as 11th LLM provider
Fixed
fix: add kilo to --provider help text in server and mcp binaries
fix: add permissions block to homebrew workflow
fix: resolve clippy doc_markdown warnings for provider help strings
fix: update health endpoint test to expect 11 providers
[0.10.2] — 2026-03-11
Added
feat: add Kiro CLI runner as 11th LLM provider
feat: add retry with exponential backoff to FallbackProvider
feat: add TOML config file loading behind config-file feature flag
feat: add cost tracking, response cache, and OTel metrics export
feat: add guardrail middleware and cross-decorator scenario tests
feat: unify embacle-server with embacle-mcp into single binary
feat: add Kilo Code CLI runner with NDJSON parsing and streaming
Fixed
fix: resolve clippy doc_markdown warnings for provider help strings
fix: filter artifact download to exclude Docker buildx cache
[0.10.1] — 2026-03-11
Fixed
fix: Docker build uses -p flag for workspace binary targets
[0.10.0] — 2026-03-11
Added
feat: add MCP Streamable HTTP to embacle-server, Homebrew tap with CI
docs: add OpenAI API runner section to README
[0.9.0] — 2026-03-11
Added
feat: add with_client() constructor for HTTP client injection
feat: add OpenAI-compatible HTTP API client runner (openai-api feature) SSE streaming, tool calling, model discovery, 30 unit tests
feat: add Docker image with ghcr.io release workflow
Fixed
fix: resolve 3 CodeQL uncontrolled-allocation-size alerts in stop field Use bounded to_bounded_vec() instead of clone+truncate to avoid copying unbounded user input
fix: revert accidental version bump in Cargo.toml files
fix: update OpenAI API default model to gpt-5.4
fix: resolve 9 CodeQL security alerts (stop bounds, CI permissions)
[0.8.1] — 2026-03-09
[0.8.0] — 2026-03-09
Added
feat: add Warp terminal (oz) CLI runner as 10th provider
fix: streaming downgrade for non-streaming providers, reduce lock scope Permissive mode now falls back to complete() + SSE instead of erroring
Other
refactor: deduplicate runners, remove as_any, async model discovery CliRunnerBase + macro (-528 lines), #[must_use] on RunnerError
[0.4.1] — 2026-03-04
Added
feat: fix tool calling for coding-assistant LLMs, add index to ToolCall Code-generation framing for catalogs, ToolCall.index per OpenAI spec, live Copilot tests
feat: add Goose, Cline, and Continue CLI runners Expand embacle from 6 to 9 CLI runners with JSON parsing, session resume, and streaming
Fixed
fix: restore trailing newlines stripped by LinesStream in SSE deltas
[0.2.1] — 2026-03-02
Added
feat: add Gemini CLI and Codex CLI runners Add GeminiCliRunner and CodexCliRunner with streaming JSONL support, expanding embacle to 6 CLI tools
Fixed
fix: add GeminiCli and CodexCli to subcrate runner factories and provider lists
[0.2.0] — 2026-03-02
Added
feat: add Gemini CLI and Codex CLI runners Add GeminiCliRunner and CodexCliRunner with streaming JSONL support, expanding embacle to 6 CLI tools
[0.1.3] — 2026-03-01
[0.1.2] — 2026-03-01
[0.1.1] — 2026-03-01
[0.1.0] — 2026-03-01
Added
feat: add embacle-server crate with OpenAI-compatible REST API Axum HTTP server with /v1/chat/completions, /v1/models, /health, SSE streaming, multiplex fan-out, bearer auth
feat: add embacle-mcp binary crate with MCP server Stdio/HTTP transports, 7 tools, JSON-RPC 2.0, multiplex fan-out, README MCP section
feat: add Timeout error kind, enhanced logging, and stdout capture on failure
feat: add tool_simulation module for text-based tool calling Text-based tool loop for CLI runners with catalog generation, XML parsing, and async execution
feat: make available_models() configurable at runtime Change LlmProvider::available_models() return type from &'static [&'static str] to &[String] so models can be determined at runtime. Each runner stores its model list in a Vec. CopilotRunner and CopilotSdkRunner discover models via gh copilot models at construction time, falling back to static defaults if the command fails.
feat: default to claude-opus-4.6 for Copilot SDK, Copilot CLI, and Claude Code runners
feat: add SDK_TOOL_CALLING capability and as_any() for downcasting Add flag for SDK-managed tool loops, as_any() on LlmProvider trait, re-export ToolHandler types
feat: add Copilot SDK provider behind copilot-sdk feature flag
Fixed
fix: release workflow — use macos-14, build --workspace, reset versions to 0.0.1
fix: rename remaining capitalized Embache references to Embacle
fix: rename crate from embache to embacle
fix: wire env keys to sandbox, guard streaming child lifecycle, remove dead ExecutionMode
fix: use RunnerConfig::new in doc examples
fix: correct rust-toolchain.toml format
[0.1.0] — 2026-03-01
Added
feat: add embacle-server crate with OpenAI-compatible REST API Axum HTTP server with /v1/chat/completions, /v1/models, /health, SSE streaming, multiplex fan-out, bearer auth
feat: add embacle-mcp binary crate with MCP server Stdio/HTTP transports, 7 tools, JSON-RPC 2.0, multiplex fan-out, README MCP section
feat: add Timeout error kind, enhanced logging, and stdout capture on failure
feat: add tool_simulation module for text-based tool calling Text-based tool loop for CLI runners with catalog generation, XML parsing, and async execution
feat: make available_models() configurable at runtime Change LlmProvider::available_models() return type from &'static [&'static str] to &[String] so models can be determined at runtime. Each runner stores its model list in a Vec. CopilotRunner and CopilotSdkRunner discover models via gh copilot models at construction time, falling back to static defaults if the command fails.
feat: default to claude-opus-4.6 for Copilot SDK, Copilot CLI, and Claude Code runners
feat: add SDK_TOOL_CALLING capability and as_any() for downcasting Add flag for SDK-managed tool loops, as_any() on LlmProvider trait, re-export ToolHandler types
feat: add Copilot SDK provider behind copilot-sdk feature flag
Fixed
fix: rename remaining capitalized Embache references to Embacle
fix: rename crate from embache to embacle
fix: wire env keys to sandbox, guard streaming child lifecycle, remove dead ExecutionMode