fix(coding-agent): remove process-cwd tool singletons and use tool-name allowlists

- switch SDK/CLI tool selection to name-based allowlists
- apply allowlists across built-in, extension, and SDK tools
- remove ambient process.cwd defaults from core tooling and resource helpers
- update tests, examples, and TUI callers for explicit cwd plumbing
- add regression coverage for extension tool filtering

closes #3452
closes #2835
This commit is contained in:
Mario Zechner
2026-04-20 21:57:31 +02:00
parent 27c1544839
commit 5a4e22ea44
42 changed files with 254 additions and 201 deletions

View File

@@ -112,7 +112,7 @@ describe("FooterDataProvider reftable branch detection", () => {
mkdirSync(nestedDir, { recursive: true });
process.chdir(nestedDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(nestedDir);
try {
expect(provider.getGitBranch()).toBe("main");
expect(vi.mocked(spawnSync)).not.toHaveBeenCalled();
@@ -125,7 +125,7 @@ describe("FooterDataProvider reftable branch detection", () => {
const repoDir = createPlainReftableRepo(tempDir);
process.chdir(repoDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(repoDir);
try {
expect(provider.getGitBranch()).toBe("main");
expect(vi.mocked(spawnSync)).toHaveBeenCalledWith(
@@ -146,7 +146,7 @@ describe("FooterDataProvider reftable branch detection", () => {
const { worktreeDir } = createReftableWorktree(tempDir);
process.chdir(worktreeDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(worktreeDir);
try {
expect(provider.getGitBranch()).toBe("main");
} finally {
@@ -159,7 +159,7 @@ describe("FooterDataProvider reftable branch detection", () => {
process.chdir(repoDir);
resolvedBranch = "";
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(repoDir);
try {
expect(provider.getGitBranch()).toBe("detached");
} finally {
@@ -171,7 +171,7 @@ describe("FooterDataProvider reftable branch detection", () => {
const { worktreeDir, reftableDir } = createReftableWorktree(tempDir);
process.chdir(worktreeDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(worktreeDir);
try {
expect(provider.getGitBranch()).toBe("main");
vi.mocked(spawnSync).mockClear();
@@ -194,7 +194,7 @@ describe("FooterDataProvider reftable branch detection", () => {
const { worktreeDir, reftableDir } = createReftableWorktree(tempDir);
process.chdir(worktreeDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(worktreeDir);
try {
expect(provider.getGitBranch()).toBe("main");
vi.mocked(execFile).mockClear();
@@ -215,7 +215,7 @@ describe("FooterDataProvider reftable branch detection", () => {
const { worktreeDir, reftableDir } = createReftableWorktree(tempDir);
process.chdir(worktreeDir);
const provider = new FooterDataProvider();
const provider = new FooterDataProvider(worktreeDir);
try {
expect(provider.getGitBranch()).toBe("main");
resolvedBranch = "foo";