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
+41 -7
View File
@@ -1,17 +1,35 @@
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
import {
chmodSync,
closeSync,
fsyncSync,
mkdirSync,
openSync,
readFileSync,
renameSync,
rmSync,
writeFileSync,
} from "node:fs";
import { dirname, join } from "node:path";
export type ToolSearchDefaultResult = "updated" | "unchanged" | "skipped-invalid";
export const BUNDLE_TOOL_SEARCH_DEFAULTS = {
alwaysEnabled: ["codegraph_explore", "lsp_diagnostics"],
alwaysEnabled: [
"codegraph_explore",
"lsp_diagnostics",
"ctx_execute",
"ctx_execute_file",
"ctx_batch_execute",
],
showToolSearchFooterStatus: false,
maxActiveGroups: 3,
maxActiveGroups: 5,
maxToolsPerGroup: 8,
maxDynamicTools: 20,
maxDynamicTools: 28,
groupOverrides: {},
} as const;
export const BUNDLE_TOOL_SEARCH_DEFAULTS_VERSION = 2;
export interface ToolSearchConfig {
alwaysEnabled: string[];
showToolSearchFooterStatus: boolean;
@@ -100,12 +118,28 @@ export function ensureToolSearchDefaults(agentDir: string): ToolSearchDefaultRes
toolSearch[key] = Array.isArray(value) ? [...value] : isObject(value) ? { ...value } : value;
changed = true;
}
if (existing === undefined) {
toolSearch.bundleDefaultsVersion = BUNDLE_TOOL_SEARCH_DEFAULTS_VERSION;
changed = true;
}
if (!changed) return "unchanged";
settings.toolSearch = toolSearch;
mkdirSync(dirname(targetPath), { recursive: true });
const temporaryPath = `${targetPath}.my-pi.tmp`;
writeFileSync(temporaryPath, `${JSON.stringify(settings, null, 2)}\n`, "utf8");
renameSync(temporaryPath, targetPath);
const temporaryPath = `${targetPath}.my-pi-${process.pid}-${Math.random().toString(16).slice(2)}.tmp`;
let descriptor: number | undefined;
try {
descriptor = openSync(temporaryPath, "wx", 0o600);
writeFileSync(descriptor, `${JSON.stringify(settings, null, 2)}\n`, "utf8");
fsyncSync(descriptor);
closeSync(descriptor);
descriptor = undefined;
renameSync(temporaryPath, targetPath);
chmodSync(targetPath, 0o600);
} catch (error) {
if (descriptor !== undefined) closeSync(descriptor);
rmSync(temporaryPath, { force: true });
throw error;
}
return "updated";
}