From aead9c14d50f3705d3f7083682f10811bf1cfc6a Mon Sep 17 00:00:00 2001 From: Yves Gugger Date: Sun, 11 Oct 2026 19:58:46 +0200 Subject: [PATCH] chore: pair the SDK with LeanCTX Engine 3.11.4 Engine 3.11.4 is a bugfix release; the Agent Tools protocol (interface 1.0.0, schema 1, transport 1) is unchanged. All six language constants, their tests, the [agent] extras, the contract and docs move to 3.11.4. The release-candidate evidence stays bound to the signed v3.11.3 until v3.11.4 is tagged. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 7 ++++--- COMPATIBILITY.md | 16 +++++++++------- README.md | 8 ++++---- contracts/agent-tools-v1.json | 2 +- docs/CUSTOM-AGENTS.md | 4 ++-- docs/LANGUAGE-PACKAGES.md | 2 +- packages/dotnet/README.md | 2 +- packages/dotnet/Thinkery.LeanCtx.csproj | 2 +- packages/dotnet/src/Protocol.cs | 2 +- .../tests/Thinkery.LeanCtx.Tests/Program.cs | 10 +++++----- packages/go/README.md | 2 +- packages/go/agent_test.go | 4 ++-- packages/go/version.go | 2 +- packages/jvm/README.md | 2 +- .../java/com/thinkery/leanctx/AgentContext.java | 2 +- .../main/java/com/thinkery/leanctx/LeanCtx.java | 2 +- .../com/thinkery/leanctx/AgentToolsTest.java | 2 +- packages/rust/README.md | 2 +- packages/rust/src/agent.rs | 2 +- packages/rust/src/async_agent.rs | 4 ++-- packages/rust/tests/sdk.rs | 4 ++-- packages/typescript/README.md | 2 +- packages/typescript/src/agent.ts | 2 +- packages/typescript/test/agent-negative.test.mjs | 6 +++--- packages/typescript/test/core.test.mjs | 2 +- scripts/inspect_release_artifact.py | 6 +++--- setup.cfg | 6 +++--- src/leanctx_sdk/agent.py | 2 +- tests/test_agent_context.py | 4 ++-- tests/test_language_versions.py | 8 ++++---- tests/test_release_gate.py | 6 +++--- 31 files changed, 65 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4c8a6d..e679565 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## Unreleased (1.2.0) -SDK 1.2.0 pairs all six language packages with LeanCTX Engine **3.11.3** and +SDK 1.2.0 pairs all six language packages with LeanCTX Engine **3.11.4** and adds the v4 preview surfaces below. Interface, schema and transport versions and the stable public-surface contract are unchanged. The published 1.1.x packages keep their release identity. @@ -44,8 +44,9 @@ packages keep their release identity. ### Changed - Every language package, the `[agent]` companion-Engine extras and the Agent - Tools contract target **LeanCTX Engine 3.11.3** (the Agent Tools protocol - is unchanged). `main` previously targeted 3.11.2, 3.11.1 and before that + Tools contract target **LeanCTX Engine 3.11.4**, a bugfix release (the + Agent Tools protocol is unchanged). `main` previously targeted 3.11.3, 3.11.2, + 3.11.1 and before that 3.10.5; before that, only the Python constant had moved past 3.10.1 (#18–#21), so a Python `[agent]` install from `main` pulled an Engine its own SDK rejected. All six languages agree again. diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md index 6dbd6af..dcaaa03 100644 --- a/COMPATIBILITY.md +++ b/COMPATIBILITY.md @@ -3,20 +3,22 @@ ## `main` (unreleased) The current `main` source is SDK **1.2.0**, paired with LeanCTX Engine -**3.11.3** (published 2026-10-11). The public SDK 1.1.1 release below remains -bound to Engine 3.10.1. Package version fields in this source checkout do not -establish that an artifact has been published; verify the specific registry -artifact before installation. A source checkout of `main` needs Engine 3.11.3. +**3.11.4**, a bugfix release that is not yet published. The public SDK 1.1.1 +release below remains bound to Engine 3.10.1. Package version fields in this +source checkout do not establish that an artifact has been published; verify +the specific registry artifact before installation. A source checkout of +`main` needs Engine 3.11.4. | Component | Declared scope | Status | | --- | --- | --- | -| Agent Tools Engine | `v3.11.3` | published 2026-10-11; required by `main` in every language package | +| Agent Tools Engine | `v3.11.4` | unreleased; required by `main` in every language package | | Agent Tools protocol | interface `1.0.0`, schema `1`, transport `1` | unchanged from 1.1.0 | -| Companion Engine wheels | `thinkery-leanctx-engine`, `-cuda`, `-windows-gnu` `==3.11.3` | published with Engine 3.11.3 | +| Companion Engine wheels | `thinkery-leanctx-engine`, `-cuda`, `-windows-gnu` `==3.11.4` | published with Engine 3.11.4 | | Gateway preview | `leanctx-gateway-preview` 0.1 | preview; see `docs/gateway-preview.md` | | Rust package | Rust 1.77+ and stable | raised from 1.76 (see CHANGELOG) | -The release-candidate pipeline binds the signed Engine release +Until v3.11.4 is tagged, the release-candidate pipeline keeps the last +signed Engine release [`v3.11.3`](https://github.com/yvgude/lean-ctx/releases/tag/v3.11.3). The tag resolves to commit `a6a20406b0fc0a4c1b020657387a41a127d4a9a6`. diff --git a/README.md b/README.md index 89294d6..de457a7 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,11 @@ project-jailed files, cache, search, patches, approved commands ## Install The public SDK 1.1.1 release uses Engine 3.10.1 and its companion wheels. The -current `main` source targets Engine 3.11.3. Install the public Python SDK and +current `main` source targets Engine 3.11.4. Install the public Python SDK and Engine together with: > These commands install the published SDK 1.1.1, which requires Engine -> 3.10.1. Current `main` sources target Engine 3.11.3; package version metadata +> 3.10.1. Current `main` sources target Engine 3.11.4; package version metadata > alone does not identify a published artifact. See > [COMPATIBILITY.md](COMPATIBILITY.md#main-unreleased). @@ -78,7 +78,7 @@ CUDA and Windows-GNU builds use the documented `agent-cuda` and All six language SDKs implement the five Stable lifecycle primitives and the separate Stable Agent Tools surface. The table describes current `main` source compatibility. The published SDK 1.1.1 release requires Engine 3.10.1; current -`main` targets Engine 3.11.3. Registry publication is per artifact and must be +`main` targets Engine 3.11.4. Registry publication is per artifact and must be verified at that registry. | Runtime | Package source | Package identity | @@ -161,7 +161,7 @@ The five SDK 1.0 lifecycle primitives remain available unchanged: `ContextSession`, `ContextSource`, `ContextView`, `ContextPlan`, and `ContextReceipt`. Stable Agent Tools is a separate API surface. The published SDK 1.1.1 requires Agent Tools Interface v1 from Engine 3.10.1; current `main` -targets Engine 3.11.3. The older context-view/recover Engine Interface v1 +targets Engine 3.11.4. The older context-view/recover Engine Interface v1 remains separate. See: diff --git a/contracts/agent-tools-v1.json b/contracts/agent-tools-v1.json index 90d6d5c..8b5f892 100644 --- a/contracts/agent-tools-v1.json +++ b/contracts/agent-tools-v1.json @@ -3,7 +3,7 @@ "version": "1.0.0", "schema_version": 1, "transport_version": 1, - "engine_version": "3.11.3", + "engine_version": "3.11.4", "transport": { "encoding": "UTF-8 JSONL", "session": "persistent child process", diff --git a/docs/CUSTOM-AGENTS.md b/docs/CUSTOM-AGENTS.md index fd34421..c3f4a2c 100644 --- a/docs/CUSTOM-AGENTS.md +++ b/docs/CUSTOM-AGENTS.md @@ -113,12 +113,12 @@ cache. Async task cancellation terminates the process before propagating ## Reproduce the Agent Tools evidence For the public SDK 1.1.0 release, use an Engine 3.10.1 binary; current `main` -sources target Engine 3.11.3. Both commands below are provider-free and make no +sources target Engine 3.11.4. Both commands below are provider-free and make no network calls: ```bash PYTHONPATH=src:. python scripts/verify_agent_context_e2e.py \ - --engine /path/to/lean-ctx --expected-engine-version 3.11.3 + --engine /path/to/lean-ctx --expected-engine-version 3.11.4 PYTHONPATH=src:. python -m benchmarks.agent_tools.retrieval_benchmark \ --engine /path/to/lean-ctx ``` diff --git a/docs/LANGUAGE-PACKAGES.md b/docs/LANGUAGE-PACKAGES.md index 38bad84..ec58806 100644 --- a/docs/LANGUAGE-PACKAGES.md +++ b/docs/LANGUAGE-PACKAGES.md @@ -83,7 +83,7 @@ language tags publish only after all five non-Python SDK build, test, package, and clean-install jobs pass. The public SDK 1.1.0 release requires Engine 3.10.1; current `main` sources -target Engine 3.11.3. Verify each registry artifact before describing it as +target Engine 3.11.4. Verify each registry artifact before describing it as published; source package version metadata alone is not publication evidence. ## Registry trust diff --git a/packages/dotnet/README.md b/packages/dotnet/README.md index 0468674..6bc3518 100644 --- a/packages/dotnet/README.md +++ b/packages/dotnet/README.md @@ -9,7 +9,7 @@ loop, and UI. It provides the five Stable lifecycle primitives plus the separate Stable Agent Tools API. The published SDK 1.1.1 release requires Engine 3.10.1; current `main` sources -target Engine 3.11.3. Check the release-specific compatibility record before +target Engine 3.11.4. Check the release-specific compatibility record before choosing an Engine binary. The package does not embed an Engine and does not grant Engine rights. Use `LEANCTX_ENGINE_BIN` or an explicit executable path for a separately installed diff --git a/packages/dotnet/Thinkery.LeanCtx.csproj b/packages/dotnet/Thinkery.LeanCtx.csproj index 70f7b35..e3828a9 100644 --- a/packages/dotnet/Thinkery.LeanCtx.csproj +++ b/packages/dotnet/Thinkery.LeanCtx.csproj @@ -15,7 +15,7 @@ https://github.com/Thinkery-AG/leanctx-sdk git https://github.com/Thinkery-AG/leanctx-sdk - LeanCTX SDK 1.2.0. Requires LeanCTX Engine 3.11.3 for Agent Tools. + LeanCTX SDK 1.2.0. Requires LeanCTX Engine 3.11.4 for Agent Tools. true true snupkg diff --git a/packages/dotnet/src/Protocol.cs b/packages/dotnet/src/Protocol.cs index ab9d25d..0933ae7 100644 --- a/packages/dotnet/src/Protocol.cs +++ b/packages/dotnet/src/Protocol.cs @@ -14,7 +14,7 @@ public static class Constants public const string AGENT_TOOLS_INTERFACE_VERSION = "1.0.0"; public const int AGENT_TOOLS_SCHEMA_VERSION = 1; public const int AGENT_TOOLS_TRANSPORT_VERSION = 1; - public const string SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.3"; + public const string SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.4"; } public enum FailureCode diff --git a/packages/dotnet/tests/Thinkery.LeanCtx.Tests/Program.cs b/packages/dotnet/tests/Thinkery.LeanCtx.Tests/Program.cs index 84dec06..011a9cc 100644 --- a/packages/dotnet/tests/Thinkery.LeanCtx.Tests/Program.cs +++ b/packages/dotnet/tests/Thinkery.LeanCtx.Tests/Program.cs @@ -49,7 +49,7 @@ private static void ConstantsTest() Equal("1.2.0", Constants.__version__); Equal("1.0.0", Constants.ENGINE_INTERFACE_VERSION); Equal("1.0.0", Constants.AGENT_TOOLS_INTERFACE_VERSION); - Equal("3.11.3", Constants.SUPPORTED_AGENT_TOOLS_ENGINE_VERSION); + Equal("3.11.4", Constants.SUPPORTED_AGENT_TOOLS_ENGINE_VERSION); Equal(1, Constants.SCHEMA_VERSION); Equal(1, Constants.TRANSPORT_VERSION); } @@ -294,7 +294,7 @@ private static string FakeAgent(string root, string behavior) #!/bin/sh IFS= read -r line id=$(printf '%s' "$line" | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') -printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":[],"engine_version":"3.11.3","schema_version":1,"transport_version":1}}\n' "$id" +printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":[],"engine_version":"3.11.4","schema_version":1,"transport_version":1}}\n' "$id" while :; do sleep 10; done """; } @@ -303,7 +303,7 @@ private static string FakeAgent(string root, string behavior) script = """ #!/bin/sh IFS= read -r line -printf '{"id":"1","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.3","schema_version":1,"transport_version":1}}\n' +printf '{"id":"1","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.4","schema_version":1,"transport_version":1}}\n' IFS= read -r line while :; do sleep 10; done """; @@ -323,7 +323,7 @@ private static string FakeAgent(string root, string behavior) while IFS= read -r line; do id=$(printf '%s' "$line" | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') case "$line" in - *'"op":"hello"'*) printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_provider","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.3","schema_version":1,"transport_version":1}}\n' "$id" ;; + *'"op":"hello"'*) printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_provider","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.4","schema_version":1,"transport_version":1}}\n' "$id" ;; *'"op":"close"'*) printf '{"id":"%s","ok":true,"result":{}}\n' "$id"; exit 0 ;; *) printf '{"id":"%s","ok":true,"result":{"text":"ctx_read:ok","content_blocks":[],"original_tokens":10,"output_tokens":4,"saved_tokens":6,"mode":null,"changed":false,"shell":null}}\n' "$id" ;; esac @@ -345,7 +345,7 @@ private static string FakeAgent(string root, string behavior) while IFS= read -r line; do id=$(printf '%s' "$line" | sed -n 's/.*"id":"\([^"]*\)".*/\1/p') case "$line" in - *'"op":"hello"'*) printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.3","schema_version":1,"transport_version":1}}\n' "$id" ;; + *'"op":"hello"'*) printf '{"id":"%s","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":["ctx_compose","ctx_glob","ctx_read","ctx_search","ctx_symbol","ctx_tree"],"engine_version":"3.11.4","schema_version":1,"transport_version":1}}\n' "$id" ;; *'"op":"close"'*) printf '{"id":"%s","ok":true,"result":{}}\n' "$id"; exit 0 ;; *) printf '{"id":"%s","ok":true,"result":{"text":"ctx_read:ok","content_blocks":[],"original_tokens":10,"output_tokens":4,"saved_tokens":6,"mode":null,"changed":false,"shell":null}}\n' "$id" ;; esac diff --git a/packages/go/README.md b/packages/go/README.md index 39ac828..11245d2 100644 --- a/packages/go/README.md +++ b/packages/go/README.md @@ -10,7 +10,7 @@ primitives plus the separate Stable Agent Tools API. The module uses the Go-standard `packages/go/vX.Y.Z` tag. The published SDK 1.1.1 release requires Engine 3.10.1; current `main` sources target Engine -3.11.3. Check the release-specific compatibility record before choosing an +3.11.4. Check the release-specific compatibility record before choosing an Engine binary. ```go diff --git a/packages/go/agent_test.go b/packages/go/agent_test.go index 422d6be..7288eff 100644 --- a/packages/go/agent_test.go +++ b/packages/go/agent_test.go @@ -63,7 +63,7 @@ func fakeAgentScript(t *testing.T, behavior string, capturePolicyPath ...string) withWrite := `["ctx_compose","ctx_edit","ctx_fill","ctx_glob","ctx_patch","ctx_read","ctx_search","ctx_symbol","ctx_tree"]` full := `["ctx_compose","ctx_edit","ctx_fill","ctx_glob","ctx_patch","ctx_read","ctx_search","ctx_shell","ctx_symbol","ctx_tree"]` result := `{"changed":false,"content_blocks":[],"mode":"auto","original_tokens":100,"output_tokens":25,"saved_tokens":75,"shell":null,"text":"ok"}` - hello := `{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":CAPS,"engine_version":"3.11.3","schema_version":1,"transport_version":1}` + hello := `{"agent_tools_interface_version":"1.0.0","allow_exec":false,"allow_write":false,"capabilities":CAPS,"engine_version":"3.11.4","schema_version":1,"transport_version":1}` hello = strings.Replace(hello, "CAPS", readOnly, 1) providerHello := strings.Replace(hello, readOnly, providerReadOnly, 1) if behavior == "badhello" { @@ -88,7 +88,7 @@ func fakeAgentFullScript(t *testing.T) string { while IFS= read -r line; do id=$(/usr/bin/printf '%s' "$line" | /usr/bin/sed -n 's/.*"id":"\([^"]*\)".*/\1/p') if /usr/bin/printf '%s' "$line" | /usr/bin/grep -q '"op":"hello"'; then - /usr/bin/printf '%s\n' '{"id":"'$id'","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":true,"allow_write":true,"capabilities":["ctx_compose","ctx_edit","ctx_fill","ctx_glob","ctx_patch","ctx_read","ctx_search","ctx_shell","ctx_symbol","ctx_tree"],"engine_version":"3.11.3","schema_version":1,"transport_version":1}}' + /usr/bin/printf '%s\n' '{"id":"'$id'","ok":true,"result":{"agent_tools_interface_version":"1.0.0","allow_exec":true,"allow_write":true,"capabilities":["ctx_compose","ctx_edit","ctx_fill","ctx_glob","ctx_patch","ctx_read","ctx_search","ctx_shell","ctx_symbol","ctx_tree"],"engine_version":"3.11.4","schema_version":1,"transport_version":1}}' elif /usr/bin/printf '%s' "$line" | /usr/bin/grep -q '"op":"close"'; then /usr/bin/printf '%s\n' '{"id":"'$id'","ok":true,"result":{}}' exit 0 diff --git a/packages/go/version.go b/packages/go/version.go index 2e523cb..77838b3 100644 --- a/packages/go/version.go +++ b/packages/go/version.go @@ -10,7 +10,7 @@ const ( AgentToolsInterfaceVersion = "1.0.0" AgentToolsSchemaVersion = 1 AgentToolsTransportVersion = 1 - SupportedAgentToolsEngineVersion = "3.11.3" + SupportedAgentToolsEngineVersion = "3.11.4" // Contract-spelling aliases keep generated integrations source-compatible // with the other SDKs, whose constants use uppercase names. diff --git a/packages/jvm/README.md b/packages/jvm/README.md index 570f007..b6fe18d 100644 --- a/packages/jvm/README.md +++ b/packages/jvm/README.md @@ -53,7 +53,7 @@ bounded. Explicit `allowLoopbackHttp` is reserved for literal loopback addresses in local tests. SDK and Engine licensing remain separate. The published SDK 1.1.1 release requires Engine 3.10.1; current `main` sources -target Engine 3.11.3. Check the release-specific compatibility record before +target Engine 3.11.4. Check the release-specific compatibility record before choosing an Engine binary. The SDK source license permits non-production use; production use, OEM embedding, and commercial redistribution require a separate written agreement signed by Thinkery AG. diff --git a/packages/jvm/src/main/java/com/thinkery/leanctx/AgentContext.java b/packages/jvm/src/main/java/com/thinkery/leanctx/AgentContext.java index 580eccf..d7d716a 100644 --- a/packages/jvm/src/main/java/com/thinkery/leanctx/AgentContext.java +++ b/packages/jvm/src/main/java/com/thinkery/leanctx/AgentContext.java @@ -37,7 +37,7 @@ public final class AgentContext implements AutoCloseable { public static final String AGENT_TOOLS_INTERFACE_VERSION = "1.0.0"; public static final int AGENT_TOOLS_SCHEMA_VERSION = 1; public static final int AGENT_TOOLS_TRANSPORT_VERSION = 1; - public static final String SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.3"; + public static final String SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.4"; private static final int MAX_REQUEST_BYTES = 1024 * 1024; private static final int MAX_RESPONSE_BYTES = 16 * 1024 * 1024; diff --git a/packages/jvm/src/main/java/com/thinkery/leanctx/LeanCtx.java b/packages/jvm/src/main/java/com/thinkery/leanctx/LeanCtx.java index 10026cd..ae27424 100644 --- a/packages/jvm/src/main/java/com/thinkery/leanctx/LeanCtx.java +++ b/packages/jvm/src/main/java/com/thinkery/leanctx/LeanCtx.java @@ -10,7 +10,7 @@ public final class LeanCtx { public static final String AGENT_TOOLS_INTERFACE_VERSION = "1.0.0"; public static final int AGENT_TOOLS_SCHEMA_VERSION = 1; public static final int AGENT_TOOLS_TRANSPORT_VERSION = 1; - public static final String SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.3"; + public static final String SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.4"; private LeanCtx() { } diff --git a/packages/jvm/src/test/java/com/thinkery/leanctx/AgentToolsTest.java b/packages/jvm/src/test/java/com/thinkery/leanctx/AgentToolsTest.java index 989a5e6..42391bf 100644 --- a/packages/jvm/src/test/java/com/thinkery/leanctx/AgentToolsTest.java +++ b/packages/jvm/src/test/java/com/thinkery/leanctx/AgentToolsTest.java @@ -278,7 +278,7 @@ private static Path fakeAgent(Path root, boolean badHello, boolean delayCall, + "while IFS= read -r line; do\n" + " id=$((id + 1))\n" + " case \"$line\" in\n" - + " *hello*) printf '%s\\n' '{\"id\":\"'\"$id\"'\",\"ok\":true,\"result\":{\"agent_tools_interface_version\":\"1.0.0\",\"allow_exec\":" + allowExec + ",\"allow_write\":" + allowWrite + ",\"capabilities\":" + capabilities + ",\"engine_version\":\"3.11.3\",\"schema_version\":1,\"transport_version\":1}}' ;;\n" + + " *hello*) printf '%s\\n' '{\"id\":\"'\"$id\"'\",\"ok\":true,\"result\":{\"agent_tools_interface_version\":\"1.0.0\",\"allow_exec\":" + allowExec + ",\"allow_write\":" + allowWrite + ",\"capabilities\":" + capabilities + ",\"engine_version\":\"3.11.4\",\"schema_version\":1,\"transport_version\":1}}' ;;\n" + " *\\\"tool\\\":\\\"ctx_shell\\\"*) printf '%s\\n' '{\"id\":\"'\"$id\"'\",\"ok\":true,\"result\":{\"text\":\"ctx_shell:ok\",\"content_blocks\":[],\"original_tokens\":10,\"output_tokens\":4,\"saved_tokens\":6,\"mode\":null,\"changed\":false,\"shell\":{\"exit_code\":0}}}' ;;\n" + " *call*) " + delay + "printf '%s\\n' '{\"id\":\"'\"$id\"'\",\"ok\":true,\"result\":{\"text\":\"ctx_read:ok\",\"content_blocks\":[],\"original_tokens\":10,\"output_tokens\":4,\"saved_tokens\":6,\"mode\":null,\"changed\":false,\"shell\":null}}' ;;\n" + " *close*) printf '%s\\n' '{\"id\":\"'\"$id\"'\",\"ok\":true,\"result\":{}}'; exit 0 ;;\n" diff --git a/packages/rust/README.md b/packages/rust/README.md index 34db383..07d995f 100644 --- a/packages/rust/README.md +++ b/packages/rust/README.md @@ -24,7 +24,7 @@ context.close()?; ``` The published SDK 1.1.1 release requires Engine 3.10.1; current `main` sources -target Engine 3.11.3. Check the release-specific compatibility record before +target Engine 3.11.4. Check the release-specific compatibility record before choosing an Engine binary. The SDK source license permits non-production use; production use, OEM embedding, and commercial redistribution require a separate written agreement signed by Thinkery AG. diff --git a/packages/rust/src/agent.rs b/packages/rust/src/agent.rs index 4172252..c7a1fe7 100644 --- a/packages/rust/src/agent.rs +++ b/packages/rust/src/agent.rs @@ -27,7 +27,7 @@ use crate::protocol::{ pub const AGENT_TOOLS_INTERFACE_VERSION: &str = "1.0.0"; pub const AGENT_TOOLS_SCHEMA_VERSION: u64 = 1; pub const AGENT_TOOLS_TRANSPORT_VERSION: u64 = 1; -pub const SUPPORTED_AGENT_TOOLS_ENGINE_VERSION: &str = "3.11.3"; +pub const SUPPORTED_AGENT_TOOLS_ENGINE_VERSION: &str = "3.11.4"; const MAX_REQUEST_BYTES: usize = 1024 * 1024; const MAX_STDERR_BYTES: usize = 64 * 1024; const MAX_TASK_BYTES: usize = 16 * 1024; diff --git a/packages/rust/src/async_agent.rs b/packages/rust/src/async_agent.rs index 44a4428..fad8810 100644 --- a/packages/rust/src/async_agent.rs +++ b/packages/rust/src/async_agent.rs @@ -865,7 +865,7 @@ mod tests { "ctx_symbol", "ctx_tree" ], - "engine_version": "3.11.3", + "engine_version": "3.11.4", "schema_version": 1, "transport_version": 1 }); @@ -905,7 +905,7 @@ done"#, "ctx_symbol", "ctx_tree" ], - "engine_version": "3.11.3", + "engine_version": "3.11.4", "schema_version": 1, "transport_version": 1 }); diff --git a/packages/rust/tests/sdk.rs b/packages/rust/tests/sdk.rs index 0f1b8c3..67a10e1 100644 --- a/packages/rust/tests/sdk.rs +++ b/packages/rust/tests/sdk.rs @@ -439,7 +439,7 @@ fn agent_script( "allow_exec": false, "allow_write": false, "capabilities": capabilities, - "engine_version": "3.11.3", + "engine_version": "3.11.4", "schema_version": 1, "transport_version": 1 } @@ -539,7 +539,7 @@ fn public_constants_are_frozen() { assert_eq!(leanctx_sdk::TRANSPORT_VERSION, 1); assert_eq!(leanctx_sdk::ENGINE_INTERFACE_VERSION, "1.0.0"); assert_eq!(leanctx_sdk::AGENT_TOOLS_INTERFACE_VERSION, "1.0.0"); - assert_eq!(leanctx_sdk::SUPPORTED_AGENT_TOOLS_ENGINE_VERSION, "3.11.3"); + assert_eq!(leanctx_sdk::SUPPORTED_AGENT_TOOLS_ENGINE_VERSION, "3.11.4"); } #[test] diff --git a/packages/typescript/README.md b/packages/typescript/README.md index 833ddd6..8f7c35f 100644 --- a/packages/typescript/README.md +++ b/packages/typescript/README.md @@ -26,7 +26,7 @@ try { ``` The published SDK 1.1.1 release requires Engine 3.10.1; current `main` sources -target Engine 3.11.3. Check the release-specific compatibility record before +target Engine 3.11.4. Check the release-specific compatibility record before choosing an Engine binary. The SDK source license permits non-production use; production use, OEM embedding, and commercial redistribution require a separate written agreement signed by Thinkery AG. diff --git a/packages/typescript/src/agent.ts b/packages/typescript/src/agent.ts index ad69f4e..6ea469f 100644 --- a/packages/typescript/src/agent.ts +++ b/packages/typescript/src/agent.ts @@ -20,7 +20,7 @@ import { canonicalBytes, strictJsonLoads } from "./protocol.js"; export const AGENT_TOOLS_INTERFACE_VERSION = "1.0.0" as const; export const AGENT_TOOLS_SCHEMA_VERSION = 1 as const; export const AGENT_TOOLS_TRANSPORT_VERSION = 1 as const; -export const SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.3" as const; +export const SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.4" as const; const MAX_REQUEST_BYTES = 1024 * 1024; const MAX_RESPONSE_BYTES = 16 * 1024 * 1024; const MAX_TEXT_BYTES = 8 * 1024 * 1024; diff --git a/packages/typescript/test/agent-negative.test.mjs b/packages/typescript/test/agent-negative.test.mjs index d093227..d073edb 100644 --- a/packages/typescript/test/agent-negative.test.mjs +++ b/packages/typescript/test/agent-negative.test.mjs @@ -58,7 +58,7 @@ const rl = readline.createInterface({ input: process.stdin }); rl.on("line", (line) => { const request = JSON.parse(line); if (request.op === "hello") { - process.stdout.write(JSON.stringify({ id: request.id, ok: true, result: { agent_tools_interface_version: "1.0.0", allow_exec: allowExec, allow_write: false, capabilities, engine_version: "3.11.3", schema_version: 1, transport_version: 1 } }) + "\\n"); + process.stdout.write(JSON.stringify({ id: request.id, ok: true, result: { agent_tools_interface_version: "1.0.0", allow_exec: allowExec, allow_write: false, capabilities, engine_version: "3.11.4", schema_version: 1, transport_version: 1 } }) + "\\n"); return; } ${body} @@ -85,7 +85,7 @@ test("project root is canonicalized through symlinks", async () => { for (const [name, source] of [ ["malformed hello", "process.stdout.write('{\"bad\":true}\\n');"], - ["incompatible hello", "process.stdout.write(JSON.stringify({ agent_tools_interface_version: '9.0.0', allow_exec: false, allow_write: false, capabilities: [], engine_version: '3.11.3', schema_version: 1, transport_version: 1 }) + '\\n');"], + ["incompatible hello", "process.stdout.write(JSON.stringify({ agent_tools_interface_version: '9.0.0', allow_exec: false, allow_write: false, capabilities: [], engine_version: '3.11.4', schema_version: 1, transport_version: 1 }) + '\\n');"], ]) { test(`${name} tears down process and exact temp policy`, async () => { const { root, dirs } = project(); @@ -110,7 +110,7 @@ rl.on("line", (line) => { if (request.op !== "hello") return; const descendant = spawn(process.execPath, ["-e", "setInterval(() => {}, 1000)"], { stdio: ["ignore", "inherit", "inherit"] }); writeFileSync(join(projectRoot, "descendant.pid"), String(descendant.pid)); - process.stdout.write(JSON.stringify({ id: request.id, ok: true, result: { agent_tools_interface_version: "1.0.0", allow_exec: false, allow_write: false, capabilities: ${JSON.stringify(READ_CAPABILITIES)}, engine_version: "3.11.3", schema_version: 1, transport_version: 1 } }) + "\\n"); + process.stdout.write(JSON.stringify({ id: request.id, ok: true, result: { agent_tools_interface_version: "1.0.0", allow_exec: false, allow_write: false, capabilities: ${JSON.stringify(READ_CAPABILITIES)}, engine_version: "3.11.4", schema_version: 1, transport_version: 1 } }) + "\\n"); process.exit(0); }); `; diff --git a/packages/typescript/test/core.test.mjs b/packages/typescript/test/core.test.mjs index 1cd1b93..a1f832d 100644 --- a/packages/typescript/test/core.test.mjs +++ b/packages/typescript/test/core.test.mjs @@ -147,7 +147,7 @@ lines.on("line", (line) => { const request = JSON.parse(line); let result; if (request.op === "hello") { - result = { agent_tools_interface_version: "1.0.0", allow_exec: policy.allow_exec, allow_write: policy.allow_write, capabilities, engine_version: "3.11.3", schema_version: 1, transport_version: 1 }; + result = { agent_tools_interface_version: "1.0.0", allow_exec: policy.allow_exec, allow_write: policy.allow_write, capabilities, engine_version: "3.11.4", schema_version: 1, transport_version: 1 }; } else if (request.op === "call") { result = { text: request.tool + ":ok", content_blocks: [], original_tokens: 10, output_tokens: 4, saved_tokens: 6, mode: null, changed: request.tool === "ctx_patch", shell: request.tool === "ctx_shell" ? { exit_code: 0 } : null }; } else if (request.op === "close") { diff --git a/scripts/inspect_release_artifact.py b/scripts/inspect_release_artifact.py index 0121876..29b21ea 100644 --- a/scripts/inspect_release_artifact.py +++ b/scripts/inspect_release_artifact.py @@ -157,9 +157,9 @@ def inspect_wheel(path: Path) -> Dict[str, object]: expected_requirements = sorted( _canonical_requirement(value) for value in [ - "thinkery-leanctx-engine (==3.11.3) ; extra == 'agent'", - 'thinkery-leanctx-engine-cuda (==3.11.3) ; (platform_system == "Linux" and platform_machine == "x86_64") and extra == \'agent-cuda\'', - 'thinkery-leanctx-engine-windows-gnu (==3.11.3) ; (platform_system == "Windows" and platform_machine == "AMD64") and extra == \'agent-windows-gnu\'', + "thinkery-leanctx-engine (==3.11.4) ; extra == 'agent'", + 'thinkery-leanctx-engine-cuda (==3.11.4) ; (platform_system == "Linux" and platform_machine == "x86_64") and extra == \'agent-cuda\'', + 'thinkery-leanctx-engine-windows-gnu (==3.11.4) ; (platform_system == "Windows" and platform_machine == "AMD64") and extra == \'agent-windows-gnu\'', "openai (==2.19.0) ; (python_version >= \"3.10\") and extra == 'openai-agents'", "openai-agents (==0.8.4) ; (python_version >= \"3.10\") and extra == 'openai-agents'", "pydantic (==2.12.3) ; (python_version >= \"3.10\") and extra == 'openai-agents'", diff --git a/setup.cfg b/setup.cfg index 04a7024..09746ba 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,11 +42,11 @@ leanctx_sdk = py.typed [options.extras_require] agent = - thinkery-leanctx-engine==3.11.3 + thinkery-leanctx-engine==3.11.4 agent-cuda = - thinkery-leanctx-engine-cuda==3.11.3; platform_system == "Linux" and platform_machine == "x86_64" + thinkery-leanctx-engine-cuda==3.11.4; platform_system == "Linux" and platform_machine == "x86_64" agent-windows-gnu = - thinkery-leanctx-engine-windows-gnu==3.11.3; platform_system == "Windows" and platform_machine == "AMD64" + thinkery-leanctx-engine-windows-gnu==3.11.4; platform_system == "Windows" and platform_machine == "AMD64" openai-agents = openai-agents==0.8.4; python_version >= "3.10" openai==2.19.0; python_version >= "3.10" diff --git a/src/leanctx_sdk/agent.py b/src/leanctx_sdk/agent.py index 3f13691..fb94ff2 100644 --- a/src/leanctx_sdk/agent.py +++ b/src/leanctx_sdk/agent.py @@ -36,7 +36,7 @@ AGENT_TOOLS_INTERFACE_VERSION = "1.0.0" AGENT_TOOLS_SCHEMA_VERSION = 1 AGENT_TOOLS_TRANSPORT_VERSION = 1 -SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.3" +SUPPORTED_AGENT_TOOLS_ENGINE_VERSION = "3.11.4" MAX_REQUEST_BYTES = 1024 * 1024 MAX_RESPONSE_BYTES = 16 * 1024 * 1024 _READ_TOOLS = frozenset( diff --git a/tests/test_agent_context.py b/tests/test_agent_context.py index 22a91c0..bbe8bf7 100644 --- a/tests/test_agent_context.py +++ b/tests/test_agent_context.py @@ -79,7 +79,7 @@ def respond(self, request): "allow_exec": self.policy["allow_exec"], "allow_write": self.policy["allow_write"], "capabilities": sorted(capabilities), - "engine_version": "3.11.3", + "engine_version": "3.11.4", "schema_version": 1, "transport_version": 1, } @@ -341,7 +341,7 @@ def test_capability_injection_is_rejected(self): "allow_exec": False, "allow_write": False, "capabilities": sorted((*context.capabilities, "ctx_provider")), - "engine_version": "3.11.3", + "engine_version": "3.11.4", "schema_version": 1, "transport_version": 1, } diff --git a/tests/test_language_versions.py b/tests/test_language_versions.py index 99e5bb5..a8073a8 100644 --- a/tests/test_language_versions.py +++ b/tests/test_language_versions.py @@ -12,7 +12,7 @@ class LanguageVersionContractTests(unittest.TestCase): def test_current_clients_and_installer_require_the_same_engine(self) -> None: root = Path(__file__).resolve().parents[1] - self.assertEqual(set(check_agent_tools_versions(root).values()), {"3.11.3"}) + self.assertEqual(set(check_agent_tools_versions(root).values()), {"3.11.4"}) def test_rejects_stale_client_installer_and_engine_before_build(self) -> None: repository = Path(__file__).resolve().parents[1] @@ -43,14 +43,14 @@ def test_rejects_stale_client_installer_and_engine_before_build(self) -> None: shutil.copyfile(repository / "setup.cfg", root / "setup.cfg") manifest = root / "engine.toml" manifest.write_text( - '[package]\nname = "lean-ctx"\nversion = "3.11.3"\n' + '[package]\nname = "lean-ctx"\nversion = "3.11.4"\n' ) (root / "Cargo.lock").write_text( - 'version = 4\n[[package]]\nname = "lean-ctx"\nversion = "3.11.3"\n' + 'version = 4\n[[package]]\nname = "lean-ctx"\nversion = "3.11.4"\n' ) check_agent_tools_versions(root, manifest) path = root / changed - path.write_text(path.read_text().replace("3.11.3", "3.11.4")) + path.write_text(path.read_text().replace("3.11.4", "3.11.5")) with self.assertRaisesRegex(ValueError, "Engine pairing mismatch"): check_agent_tools_versions(root, manifest) diff --git a/tests/test_release_gate.py b/tests/test_release_gate.py index f4e07fe..8a20955 100644 --- a/tests/test_release_gate.py +++ b/tests/test_release_gate.py @@ -33,11 +33,11 @@ def _wheel(path, *, extra=None, python_requires=">=3.9,<3.15"): Requires-Python: {python_requires} Provides-Extra: openai-agents Provides-Extra: agent -Requires-Dist: thinkery-leanctx-engine (==3.11.3) ; extra == 'agent' +Requires-Dist: thinkery-leanctx-engine (==3.11.4) ; extra == 'agent' Provides-Extra: agent-cuda -Requires-Dist: thinkery-leanctx-engine-cuda (==3.11.3) ; (platform_system == "Linux" and platform_machine == "x86_64") and extra == 'agent-cuda' +Requires-Dist: thinkery-leanctx-engine-cuda (==3.11.4) ; (platform_system == "Linux" and platform_machine == "x86_64") and extra == 'agent-cuda' Provides-Extra: agent-windows-gnu -Requires-Dist: thinkery-leanctx-engine-windows-gnu (==3.11.3) ; (platform_system == "Windows" and platform_machine == "AMD64") and extra == 'agent-windows-gnu' +Requires-Dist: thinkery-leanctx-engine-windows-gnu (==3.11.4) ; (platform_system == "Windows" and platform_machine == "AMD64") and extra == 'agent-windows-gnu' Requires-Dist: openai-agents (==0.8.4) ; (python_version >= "3.10") and extra == 'openai-agents' Requires-Dist: openai (==2.19.0) ; (python_version >= "3.10") and extra == 'openai-agents' Requires-Dist: pydantic (==2.12.3) ; (python_version >= "3.10") and extra == 'openai-agents'