Release v4.11.7
Release v4.11.7
Release v4.11.6
Release v4.11.6
v2.0.5
AgentScope Java 2.0.5 is a maintenance release that backports fixes from the main branch to 2.0.x. It hardens state persistence and cancellation, tool-call argument handling, context compaction, memory durability, skills, and sandboxes, and updates the default Anthropic and Gemini models. There are no new modules and no removed public APIs.
- Default model changes.
AnthropicChatModel.builder()now defaults toclaude-sonnet-5-5, andGeminiChatModel.builder()defaults togemini-3.8-flash. SetmodelName(...)explicitly to keep model selection, behavior, and pricing independent of library upgrades; these defaults do not override a model name set in Spring Boot properties. - Filesystem queue layout. The filesystem-backed
WorkspaceMessageBusnow writes{id}.payloadplus a{id}.readyclaim marker instead of a single{id}.json(#3281). Older drain-side instances only scan.jsonand cannot see new entries. On a shared backend, upgrade every drain-side instance before new writers publish, or pause queue traffic during the rollout; legacy.jsonentries remain readable. - Namespaced memory reads. For callers with a namespace,
MEMORY.mdandmemory/*.mdnow fall back only inside that namespace; a root-level copy is no longer served to identified callers. Move existing root memory files into the namespace directory when upgrading. Contexts without a namespace or filesystem keep the root read (workspace). - Structured output no longer forces strict mode. The framework stops setting
strict: trueon the JSON schema it generates for structured output (#2608). Enable it per model where the endpoint supports it withOpenAIChatModel.builder().strictJsonSchema(true); a schema that already declaresstrictis left unchanged. - Stricter tool schemas.
@Tool(strict = true)now recursively injectsadditionalProperties: falseinto every object node of the generated schema, so undeclared arguments are rejected on any provider and the schema satisfies OpenAI strict mode (#1392). Hand-written schemas (SchemaOnlyToolor a customAgentTool) are unchanged. - SQL schema changes. New PostgreSQL and H2 tables in
agentscope-extensions-jdbcuseitem_key VARCHAR(2048)(#3464); new MySQL tables pin the key columns toutf8mb4_bin(#3288). Existing tables are never altered automatically and need a manual migration — see MySQL / JDBC and MySQL session storage. After the MySQL migration, key comparisons become case-sensitive. - Kubernetes workspace setup fails fast. A non-zero
mkdirexit code now fails the call withSandboxErrorCode.WORKSPACE_START_ERRORinstead of continuing with a workspace that was never created (#3951). - Opt-in Redis cluster key layout.
RedisAgentStateStorecan wrap theuserId/sessionIdsegment in a Redis hash tag withkeyLayoutVersion(KeyLayoutVersion.V1)so multi-key operations stay in one cluster slot (#3129). The V0 layout remains the default; configure the same version on every store sharing a key prefix.
Core / State / Cancellation
- Persist
ConfirmResultrules into the session permission context, and make declared permission rules authoritative on every call (#3377, #3361). - Persist the paused state before publishing a HITL authorization request, and accept a resume while the paused run is still unwinding (#3699, #3602).
- Persist agent state under the caller's identity, survive concurrent state writes and null tool-call names, and hold the same-session gate until a cancelled call's state write lands (#3335, #4048, #3924).
- Complete stream cancellation when the response body stalls, and retry streaming transport errors that arrive without an HTTP status (#4021, #3058).
- Compare messages by value, hash every list element, reject trailing content during JSON decoding, and make
JacksonJsonCodecread back every string it can write (#3842, #3697, #3468). - Preserve id, timestamp, and usage when extracting a
generate_responseresult, routecallToolthrough the shared tool infrastructure, and preserveSubAgentToolsession history (#3032, #3130, #3915). - Separate subagent waits from ordinary tool timeouts, and preserve tool completion, hook feedback, and error states (#3879, #3803).
Tool Calls / Structured Output
- Reject incomplete and malformed tool-call arguments, align schema validation with the resolved arguments, and log argument parse failures instead of swallowing them (#3739, #3728, #2869).
- Stop empty-object tool-call content from masking intact parsed arguments (#3886).
- Improve the structured-output degradation path and preserve business tool history in mixed structured-output batches (#2697, #4086).
- Validate line ranges in
write_text_fileto prevent file corruption, and readWriteFileToolsnippets from the resolved path (#3208, #3918).
Harness / Compaction / Context
- Persist compacted state and avoid duplicating input on an overflow retry (#3661).
- Retain tool arguments and continuation context in summaries, and reject incomplete or non-reducing summaries (#3693, #3855).
- Preserve rich tool results, tool-result metadata and state, and message identity when truncating parameters (#3845, #3326, #3649).
- Count pruning budgets per tool result and return a lightweight pruning result when the safe cutoff is zero (#3538, #3571).
- Cap
AGENTS.mdwhile preserving workspace instruction content, boundread_fileoutput with Unicode-safe pagination, and clamp model-supplied limits insession_search/session_history(#3723, #3821, #3382). - Deliver attachments and inbox context to the next request (#3738).
Memory / Tasks
- Add a consolidation commit gate: only a complete, text-only, non-empty body within the token target replaces
MEMORY.md, and the watermark advances only after reading back the written body (memory). - Replay the completing turn's Reactor context in background flush and consolidation, keeping context-scoped token metering and tracing, and keep memory IO off the per-call sandbox (#3113).
- Isolate subagent task handles by storage namespace, recover orphan tasks in persisted
SESSIONandUSERscopes, and fix nested task route synthesis (#4043, #3600). - Keep sandbox task records under the host workspace root while memory files follow the caller namespace.
Skills
- Move blocking skill reload off reactive event-loop threads, and remove O(n²) signature copies and the unbounded file lock map (#3792, #3795).
- Align skill resources and execution guidance with the resources actually available (#3797, #3779).
- Match
SkillFilteragainst the skill name inAgentSkillPromptProvider, require standalone frontmatter closing delimiters, and accept a UTF-8 BOM inSKILL.md(#3302, #3655, #3385).
Workspace / Sandbox / Filesystem
- Enforce the namespace boundary for absolute paths in the ROOTED local filesystem, and honor the active sandbox workspace root (#3292, #3646).
- Share one default
HttpClientacross web tools instead of creating one per build (#3833). - Close index connections when initialization fails, and match index prefixes literally instead of as
LIKEpatterns (#3912, #3875). - Close snapshot archives when workspace setup fails, and avoid session mirrors after a sandbox release (#3597, #3039).
- Make
DockerFilesystemSpecadditionalRunArgsappend, handle CRLF in the patch fuzziness ladder, avoid command substitution when creating sandbox write parents, and fix sandboxeditprograms containing literal sequences (#3545, #3416, #3871, #3226). - Claim workspace queue entries atomically (#3281); scope gateway turn leases to each subscription and evict idle turn gates (#3550, #3533).
- Expose and inherit
ConflictPolicyonHarnessAgent.Builder(#3263), and reportNONEwhen a lazy repository stages no resources (#3374).
Sandbox Backends
- Kubernetes: enforce runtime execution timeout contracts, apply the command budget to response headers, and bound complete HTTP exchanges (#3951, #4006, #3884).
- E2B: honor the
WorkspaceSpecroot and rebind remote snapshots, implement reliable exec timeouts with a server-side kill, fail calls when snapshots cannot be restored, restoreNATIVE_SNAPSHOTsessions with a single sandbox, and harden envd streaming response parsing (#4081, #2976, #3609, #3562, #3341).
Security
- With a nonempty shell whitelist, commands using expansions, pipes, redirection, separators, grouping, or incomplete quoting/escaping now require approval; the approval callback receives the original complete command, and only an explicit
truepermits execution (#3286). - Block path traversal in skill materialization and staging (#3787, #3314).
Protocol / Integrations
- A2A client: stop the remote stream and task when a call is cancelled, stop hanging on unfinished tasks, preserve completed status messages, prefer completed artifacts over status messages, fail fast when the agent card cannot be resolved, resolve the card once per execution, and close the client of cancelled calls (#4097, #3992, #3784, #3775, #3867, #3767, #3663).
- AG-UI: emit schema-valid event, message, and patch payloads; preserve error tool-result content; report a frontend tool error as an
ERRORtool result; keep MVC runs alive after an SSE disconnect; and sanitize document rejection and map conversion errors (#3747, #3932, #3324, #3745, #3397). - Serialize concurrent task submissions in the protocol module (#3643).
- Nacos: preserve A2A capability extensions, and build the Nacos prompt
ReActAgentonly when Nacos prompts are enabled (#3801, #3994). - XXL-Job: count a single execution per trigger (#3507).
Model Providers
- Anthropic: preserve parallel tool-call batches, serialize non-streaming tool arguments as JSON, report the stop reason as the finish reason, and tolerate a missing message id (#4019, #4031, #3852, #3394).
- Gemini: keep generated function-call ids distinct, honor the default tool choice, report the finish reason code, and fix media URL extension parsing (#3982, #3858, #3701, #1646).
- OpenAI: omit streaming indexes from reasoning replay and honor
ToolChoice.Nonein the MiniMax formatters (#4000, #3430). - Ollama: preserve per-call execution options and use native schemas for structured agent output (#3859, #3455).
- DeepSeek: pass
reasoning_contentback for all assistant turns, and add the canonicaldeepseek-flashid to the context window table (#3272, #3380). - Evict the
ModelRegistrycache onregisterFactoryand share a concurrent first creation; read Responses usage breakdowns as optional JSON fields; and stop inventing tool-call ids for DashScope argument fragments (#3791, #3580, #3474).
Storage / RAG / Dependencies
- Create the pgvector extension before registering the vector type, parse scheme-less IP locations in
QdrantStore, and accept a bare string for the Dify retrieval response query field (#3802, #3804, #3504). - Give every
TikaReaderread its own content handler, and reuse and close the OpenAI embedding client (#3196, #3730). - Pin
com.aliyun:teaandaliyun-java-sdk-coreto fixed versions to remove version-range resolution (#3257). - Accept Jev probability sums within the API's 4-decimal rounding bound (#3366).
v17.1.0
- ff5e131 allow setting a clock on SchedulerClient.Builder (#958), closes #489 #958
- bb838d0 run a cron schedule once when the clocks change (#957), closes #944 #957
- 8a30bd5 prevent concurrent client rescheduling failures (#775) (#945), closes #775 #945
- b8bfb23 make cancel remove the execution atomically (#918), closes #786 #918
- 4f72604 respect scheduler clock in completion and recovery handlers (#954), closes #783 #954
- 2dadf52 add consolidate-deps skill for batching dependency bumps (#964), closes #964
- 5eb1637 bump README dependency version to 17.0.0 (#956), closes #956
- ca267bc gate release on a protected environment and set explicit workflow permissions (#968), closes #968
- 8b4f424 deps: bump Spring Boot 4 to 4.1.2 (#963), closes #963
- d285680 deps: consolidate dependency bumps (#962), closes #951 #953 #960 #961 #962
- 8ed664f add pre-PR self-review guidance for AI-assisted contributions (#966), closes #966
We'd like to thank the following people for their contributions:
- Abdullah Alqahtani (@anqorithm)
- Daniel Schmidt (@schmidti159)
- Gustav Karlsson (@kagkarlsson)
- Lee Seokwon (@leerura)
- 오규찬 (B팀 서버) (@ohchanKyu)
Nightly
- [rb] download the Server jar with Selenium Manager instead of the GitHub API by @titusfortner in https://github.com/SeleniumHQ/selenium/pull/18245
- [java] Escape quotes and backslashes in name locators sent to the driver by @Mochxd in https://github.com/SeleniumHQ/selenium/pull/18151
- [dotnet] [test] Unify assembly names for testing by @nvborisenko in https://github.com/SeleniumHQ/selenium/pull/18261
- [rb] Allocate websocket command ids atomically by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18262
- [py] Add WebDriver cookie type annotations by @adamtheturtle in https://github.com/SeleniumHQ/selenium/pull/17537
- [py] Deprecate driver.webextension by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18265
- [py] Return a protocol-neutral driver.script by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18264
- [build] run the Redis-backed Grid suites from the Java smoke matrix instead of a separate workflow by @titusfortner in https://github.com/SeleniumHQ/selenium/pull/18267
- fix(#18263): keep Selenium Manager stderr empty in --output json by @macoladik in https://github.com/SeleniumHQ/selenium/pull/18268
- [js] hold BiDi numbers to their declared ranges by @saiyam-jain-dev in https://github.com/SeleniumHQ/selenium/pull/18272
- [build] Add weekly CI check for Plausible pageview usage by @titusfortner in https://github.com/SeleniumHQ/selenium/pull/17900
- [java] hold generated BiDi numbers to their declared ranges by @yashp676 in https://github.com/SeleniumHQ/selenium/pull/18266
- [build] use the EngFlow cache for the Java GHA smoke test job by @titusfortner in https://github.com/SeleniumHQ/selenium/pull/18276
- [py] Support relative locators from WebElement and ShadowRoot by @gjreddy in https://github.com/SeleniumHQ/selenium/pull/18241
- [js][py][rb][java][dotnet] add the accessibility snapshot atom and the binding methods by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18232
- [grid] Spread new sessions across Nodes again by @diemol in https://github.com/SeleniumHQ/selenium/pull/18281
- [js] Add @selenium/mcp, an MCP server for coding agents (v0) by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18280
- [js] MCP v1: drag, file upload, resize, network requests, evaluate by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18284
- [rust] Fix Firefox and Electron download URLs on Windows arm64 by @dennisameling in https://github.com/SeleniumHQ/selenium/pull/18285
- [java] Escape frame ids that are not valid CSS identifiers by @Mochxd in https://github.com/SeleniumHQ/selenium/pull/18274
- [py][rb][js] Fix tests failing in the nightly CI run by @diemol in https://github.com/SeleniumHQ/selenium/pull/18289
- [js] Move selenium-mcp to the SeleniumHQ/mcp repo by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18290
- [java] Log remote-client diagnostics at a fixed FINE level by @MohabMohie in https://github.com/SeleniumHQ/selenium/pull/18254
- [rb] Allow to set environment variables when staring a browser by @y-yagi in https://github.com/SeleniumHQ/selenium/pull/17395
- [py][rb] Fix tests failing after the browser version update by @diemol in https://github.com/SeleniumHQ/selenium/pull/18294
- [js] Publish @selenium/manager in releases by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18296
- [rust] Update Rust dependencies by @bonigarcia in https://github.com/SeleniumHQ/selenium/pull/18297
- [py] narrow pytest.raises(Exception) in bidi tests by @saiyam-jain-dev in https://github.com/SeleniumHQ/selenium/pull/18286
- [java] stop reading and writing Response.status internally by @yashp676 in https://github.com/SeleniumHQ/selenium/pull/18171
- [rust] Restrict Selenium Manager stats to vetted values before sending to Plausible by @titusfortner in https://github.com/SeleniumHQ/selenium/pull/17892
- [java] Speed up JSON serialisation and parsing by @shs96c in https://github.com/SeleniumHQ/selenium/pull/17750
- [py] Fix Select escaping of trailing double quotes by @Mohsintl in https://github.com/SeleniumHQ/selenium/pull/18292
- [java] remove Response.status by @yashp676 in https://github.com/SeleniumHQ/selenium/pull/18172
- [js] Snapshot accessibility in Classic sessions too by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18308
- [py] Snapshot accessibility in Classic sessions too by @AutomatedTester in https://github.com/SeleniumHQ/selenium/pull/18307
- [java] publish auto-service-annotations again so -Xlint builds pass by @diemol in https://github.com/SeleniumHQ/selenium/pull/18313
- @macoladik made their first contribution in https://github.com/SeleniumHQ/selenium/pull/18268
- @Mohsintl made their first contribution in https://github.com/SeleniumHQ/selenium/pull/18292
Full Changelog: https://github.com/SeleniumHQ/selenium/compare/selenium-4.52.0...nightly
24.5
This is a dependency maintenance release for GraphQL Java 24.x to resolve security-scanner findings for CVE-2026-102554 in the bundled Guava dependency.
GraphQL Java's own request processing is not affected by this CVE. The vulnerability concerns native Java object deserialization, which GraphQL Java does not use to parse, validate, or execute GraphQL documents.
The release upgrades bundled Guava from 32.1.2-jre to 33.8.0-jre to remove the affected dependency version from the GraphQL Java JAR and address these scanner findings.
- #4553 Upgrade Guava to 33.8.0-jre for CVE-2026-102554.
Full Changelog: v24.4...v24.5
25.2
This is a dependency maintenance release for GraphQL Java 25.x to resolve security-scanner findings for CVE-2026-102554 in the bundled Guava dependency.
GraphQL Java's own request processing is not affected by this CVE. The vulnerability concerns native Java object deserialization, which GraphQL Java does not use to parse, validate, or execute GraphQL documents.
The release upgrades bundled Guava from 32.1.2-jre to 33.8.0-jre to remove the affected dependency version from the GraphQL Java JAR and address these scanner findings.
- #4554 Upgrade Guava to 33.8.0-jre for CVE-2026-102554.
Full Changelog: v25.1...v25.2