Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@ live in `anvil-client`; CLI and Python use `HostedClient`. Keep package and path
dependency versions in lockstep. Python task cancellation must cancel native work,
and client close must cancel outstanding calls. Build wheels and run installed-wheel
tests before publishing. The existing `python/` package remains the CLI launcher.
DeepSeek structured inference uses the stateless Responses backend; agent chat
keeps its Chat Completions backend. Native schema requests must not
prepend dynamic schema text ahead of caller messages. Reject incomplete Responses
output even when its text parses as valid JSON. DeepSeek Responses and beta
strict tool calls have returned schema violations in live probes: native format
support is not an enforcement guarantee, and local validation must remain.

## Release workflow

Expand Down
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ default-members = ["."]

[package]
name = "brokk-anvil"
version = "0.28.3"
version = "0.28.4"
edition = "2024"
description = "Anvil: Rust ACP server with first-run setup for Codex, Ollama, and OpenRouter"
license = "LGPL-3.0-only"
Expand Down Expand Up @@ -36,8 +36,8 @@ axum = { version = "0.8", optional = true }
# the published crates are namespaced. Both are versioned in lockstep with this
# crate: bump the requirement, the sub-crate's version, and the root version
# together on every release (CI enforces the match).
anvil-minimizer = { package = "brokk-anvil-minimizer", version = "0.28.3", path = "crates/anvil-minimizer" }
anvil-client = { package = "brokk-anvil-client", version = "0.28.3", path = "crates/anvil-client", features = ["bedrock-credits"] }
anvil-minimizer = { package = "brokk-anvil-minimizer", version = "0.28.4", path = "crates/anvil-minimizer" }
anvil-client = { package = "brokk-anvil-client", version = "0.28.4", path = "crates/anvil-client", features = ["bedrock-credits"] }
anyhow = "1"
clap = { version = "4", features = ["derive", "env"] }
# Pure-parsing library, also built as a wasm32-wasip2 binary that
Expand Down Expand Up @@ -114,7 +114,7 @@ tempfile = "3"
# Enables anvil-client's `test-support` feature so Anvil's tests can use
# `openrouter_auth::test_support` (env-var guard/scope helpers). Feature
# unification means only test builds see it; published binaries never do.
anvil-client = { package = "brokk-anvil-client", version = "0.28.3", path = "crates/anvil-client", features = ["bedrock-credits", "test-support"] }
anvil-client = { package = "brokk-anvil-client", version = "0.28.4", path = "crates/anvil-client", features = ["bedrock-credits", "test-support"] }

[build-dependencies]
serde = { version = "1", features = ["derive"] }
Expand Down
4 changes: 2 additions & 2 deletions crates/anvil-client-python/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "brokk-anvil-client-python"
version = "0.28.3"
version = "0.28.4"
edition = "2024"
license = "LGPL-3.0-only"
description = "Native asynchronous Python bindings for Anvil's LLM client"
Expand All @@ -12,7 +12,7 @@ name = "_native"
crate-type = ["cdylib"]

[dependencies]
anvil-client = { package = "brokk-anvil-client", path = "../anvil-client", version = "0.28.3" }
anvil-client = { package = "brokk-anvil-client", path = "../anvil-client", version = "0.28.4" }
pyo3 = { version = "0.29", features = ["abi3-py311"] }
pyo3-async-runtimes = { version = "0.29", features = ["tokio-runtime"] }
serde = { version = "1", features = ["derive"] }
Expand Down
5 changes: 4 additions & 1 deletion crates/anvil-client-python/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ def log_message(self, *args):
def do_POST(self):
request = json.loads(self.rfile.read(int(self.headers["Content-Length"])))
self.server.requests.append(request)
prompt = request["messages"][-1]["content"]
# The native client may append an in-band schema for JSON-mode
# providers. Dispatch mock behavior from the original caller input.
prompt = next(message["content"] for message in request["messages"]
if message["role"] == "user")
if "slow" in prompt:
time.sleep(0.5)
output = {"wrong": True} if "invalid" in prompt else {"ok": True}
Expand Down
2 changes: 1 addition & 1 deletion crates/anvil-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "brokk-anvil-client"
version = "0.28.3"
version = "0.28.4"
edition = "2024"
description = "Standalone LLM client extracted from Anvil: OpenAI-compatible, Bedrock, Codex, Meta/Muse, Grok, Ollama, OpenRouter, DeepSeek, and Kimi backends with auth, discovery, usage accounting, and ChatGPT-subscription transcription"
license = "LGPL-3.0-only"
Expand Down
Loading
Loading