mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-29 04:00:36 +00:00
feat(subagents): add disallowedTools field to agent definitions (#3064)
* feat(subagents): add disallowedTools field to agent definitions Add a `disallowedTools` blocklist to agent frontmatter, letting agents specify tools they should not have access to. Supports exact tool names, MCP server-level patterns (e.g., `mcp__slack`), and display name aliases. Applied as a post-filter in AgentCore.prepareTools() after the existing `tools` allowlist. Persisted through serialize/parse roundtrips. * docs: document disallowedTools and MCP tool behavior for subagents Add Tool Configuration section to sub-agents docs explaining: - tools allowlist and disallowedTools blocklist - How MCP tools follow the same allowlist/blocklist rules - MCP server-level patterns in disallowedTools * fix(subagents): validate disallowedTools in SubagentValidator Reuse the existing validateTools() method to validate disallowedTools entries at config validation time, catching non-string and empty entries before they reach runtime. * test: remove flaky BaseSelectionList scroll test on Windows
This commit is contained in:
parent
35420b03bc
commit
8d74a0cf0a
13 changed files with 285 additions and 48 deletions
|
|
@ -260,7 +260,8 @@ function hasAnyProviderEntries(modelProviders: unknown): boolean {
|
|||
}
|
||||
|
||||
return Object.values(modelProviders).some(
|
||||
(providerModels) => Array.isArray(providerModels) && providerModels.length > 0,
|
||||
(providerModels) =>
|
||||
Array.isArray(providerModels) && providerModels.length > 0,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -272,15 +273,15 @@ function getModelProvidersOverrideWarnings(
|
|||
return [];
|
||||
}
|
||||
|
||||
const userOriginal =
|
||||
loadedSettings.user.originalSettings as unknown as Record<string, unknown>;
|
||||
const workspaceOriginal =
|
||||
loadedSettings.workspace.originalSettings as unknown as Record<
|
||||
string,
|
||||
unknown
|
||||
>;
|
||||
const userOriginal = loadedSettings.user
|
||||
.originalSettings as unknown as Record<string, unknown>;
|
||||
const workspaceOriginal = loadedSettings.workspace
|
||||
.originalSettings as unknown as Record<string, unknown>;
|
||||
|
||||
if (!hasOwnModelProviders(userOriginal) || !hasOwnModelProviders(workspaceOriginal)) {
|
||||
if (
|
||||
!hasOwnModelProviders(userOriginal) ||
|
||||
!hasOwnModelProviders(workspaceOriginal)
|
||||
) {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
|
@ -290,7 +291,10 @@ function getModelProvidersOverrideWarnings(
|
|||
isPlainObject(workspaceModelProviders) &&
|
||||
Object.keys(workspaceModelProviders).length === 0;
|
||||
|
||||
if (!workspaceIsEmptyModelProviders || !hasAnyProviderEntries(userModelProviders)) {
|
||||
if (
|
||||
!workspaceIsEmptyModelProviders ||
|
||||
!hasAnyProviderEntries(userModelProviders)
|
||||
) {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue