feat(tool-search): expand dynamic group activation

This commit is contained in:
云服务部-叶林立
2026-08-28 12:05:11 +08:00
parent bf874455db
commit 2dcec0207c
15 changed files with 897 additions and 119 deletions
+22 -13
View File
@@ -1,5 +1,5 @@
import assert from "node:assert/strict";
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
import { mkdtemp, readFile, rm, stat, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import test from "node:test";
@@ -18,16 +18,25 @@ async function withAgentDir(run: (agentDir: string) => Promise<void>): Promise<v
test("writes bundle defaults when toolSearch is absent", async () => {
await withAgentDir(async (agentDir) => {
assert.equal(ensureToolSearchDefaults(agentDir), "updated");
assert.deepEqual(BUNDLE_TOOL_SEARCH_DEFAULTS.alwaysEnabled, [
"codegraph_explore",
"lsp_diagnostics",
"ctx_execute",
"ctx_execute_file",
"ctx_batch_execute",
]);
assert.deepEqual(JSON.parse(await readFile(join(agentDir, "settings.json"), "utf8")), {
toolSearch: {
alwaysEnabled: [...BUNDLE_TOOL_SEARCH_DEFAULTS.alwaysEnabled],
showToolSearchFooterStatus: false,
maxActiveGroups: 3,
maxActiveGroups: 5,
maxToolsPerGroup: 8,
maxDynamicTools: 20,
maxDynamicTools: 28,
groupOverrides: {},
bundleDefaultsVersion: 2,
},
});
assert.equal((await stat(join(agentDir, "settings.json"))).mode & 0o777, 0o600);
});
});
@@ -43,7 +52,7 @@ test("fills missing defaults and preserves explicit settings", async () => {
maxActiveGroups: 2,
showToolSearchFooterStatus: false,
maxToolsPerGroup: 8,
maxDynamicTools: 20,
maxDynamicTools: 28,
groupOverrides: {},
},
});
@@ -67,26 +76,26 @@ test("normalizes invalid runtime values without overwriting the file", async ()
assert.deepEqual(readToolSearchConfig(agentDir), {
alwaysEnabled: ["one"],
showToolSearchFooterStatus: false,
maxActiveGroups: 3,
maxActiveGroups: 5,
maxToolsPerGroup: 4,
maxDynamicTools: 20,
maxDynamicTools: 28,
groupOverrides: { web: ["search"] },
});
assert.equal(await readFile(path, "utf8"), original);
});
});
test("preserves explicit complete configuration", async () => {
test("preserves a complete explicit configuration including former defaults", async () => {
await withAgentDir(async (agentDir) => {
const path = join(agentDir, "settings.json");
const original = `${JSON.stringify({
toolSearch: {
alwaysEnabled: [],
showToolSearchFooterStatus: true,
maxActiveGroups: 1,
maxToolsPerGroup: 2,
maxDynamicTools: 2,
groupOverrides: { custom: ["one"] },
alwaysEnabled: ["codegraph_explore", "lsp_diagnostics"],
showToolSearchFooterStatus: false,
maxActiveGroups: 3,
maxToolsPerGroup: 8,
maxDynamicTools: 20,
groupOverrides: {},
},
}, null, 2)}\n`;
await writeFile(path, original, "utf8");