* feat(core): make list_directory opt-in (disabled by default)
glob covers directory listing in most cases, so list_directory is now disabled by default to keep the tool surface lean. Enable it with tools.listDirectory.enabled=true or by listing it in the coreTools allowlist (--core-tools / tools.core). The plan-mode reminder no longer steers the model toward the tool.
* fix(core): align list_directory opt-in gate with prompts and allowlist parsing
Round-1 review findings on the opt-in gate:
- Normalise coreTools entries with parseRule so specifier forms such as
list_directory(/src) still re-enable the tool. isLsToolEnabled used
resolveToolName, which does not strip specifiers, while
PermissionManager admits the same entry via parseRule — so the
allowlist accepted the tool and the registry never got it (R1-1).
- Drop list_directory from the plan-mode block error. That message is
returned to the model as the tool result of every blocked call, so it
kept steering the model at an unregistered tool even after the system
prompt stopped doing so (R1-2).
- Remove the now-inert ToolNames.LS entries and the prompt text that
advertised the tool to built-in agents. The gate also guards the
forked-registry rebuild path, so these agents were silently stripped
of a tool their own prompts told them to use (R1-3).
- Say why the tool is missing and how to enable it in the tool-not-found
message, instead of offering unrelated Levenshtein suggestions (R1-6).
- Cover the alias and specifier forms in the registration tests (R1-4),
and drop the stale examples from the sub-agents and Java SDK docs,
where the listed entry can no longer register the tool (R1-5, R1-7).
* fix(core): address list_directory opt-in round-2 review findings
- Reword the skill-review agent task prompt so the inspection guidance
only references read_file; the run's tool filter has no
list_directory, glob, or shell, so the old `ls` instruction was
unsatisfiable for the turn-budgeted background agent.
- Resolve tool-name aliases (ListFiles, ListFilesTool, ReadFolder) in
the list_directory not-found message so aliased calls get the
enablement explanation instead of a Levenshtein suggestion.
- Attribute a missing list_directory to the workspace tools toggle when
the workspace disabledTools set blocks it, since the opt-in setting
cannot lift that state.
- Drop the coreTools allowlist advice from the enablement message:
setting tools.core to ["list_directory"] alone would exclude every
other tool.
- Switch the two remaining sdk-java runTransportOptionsExample copies
from list_directory to glob; setAllowedTools only adds auto-approve
rules and never registers a tool.
- Extract the shared fake-server scaffolding in the list_directory
integration tests into a local helper, keeping the load-bearing
CLI-flag comment.
- Pin the skill-review agent tools array and assert the learn-skill
prompt steers to read_file / glob, matching the sibling planners.
* fix(core): only claim list_directory is opt-in-disabled when it is unregistered
The not-found explanation resolved aliases (ListFiles, ReadFolder) before
checking whether the tool was actually absent. The registry is keyed by
canonical names while the lookup that reaches this path resolves legacy
migrations only, so an alias call missed even when list_directory was
enabled — and the message then told the user to switch on a setting that was
already on, hiding the generic path's "Did you mean list_directory"
self-correction.
Gate the branch on the canonical name being absent from the registry, and pin
the two alias combinations that were unpinned: an alias against a non-empty
workspace disabledTools set, and an alias against a registered tool.
* fix(serve): coordinate caller-supplied session IDs
Complete daemon-wide admission across REST, ACP, workspace generations, SDKs, and MCP.
Closes#8411
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
* test(serve): wire session bridges in hot-reload harness
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
* fix(serve): address review round for caller-supplied session IDs (#8415)
Restore the observability and fail-loud guarantees flagged in review:
log every session-id admission routing failure, name the live foreign
owner workspace in restore conflicts, make the ACP dispatcher's
admission dependency required so load/resume cannot run on a mount
without one, and require mountAcpHttp hosts to inject the daemon-wide
admission instead of silently building a weak fallback. Harden the SDK
WS transport against environments without global fetch and against
non-capabilities 200 envelopes, and align the design doc with the
implemented restore-sharing and persistence-failure semantics.
* fix(sdk): harden session ID capability fallback
Preserve REST capability errors, fail closed on malformed envelopes, retain restore routing diagnostics, and align retry documentation.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
* fix(serve): normalize restored session IDs
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
* fix(session): preserve mixed-case legacy session access
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
---------
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: qwen-code-dev-bot <qwen-code-dev@service.alibaba.com>