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'