feat: enable permission-aware subagents

This commit is contained in:
叶林立
2026-08-26 10:49:26 +08:00
parent d3bf562189
commit 7571ba6dd9
185 changed files with 48365 additions and 26 deletions
@@ -0,0 +1,96 @@
import { beforeEach, describe, expect, it } from "vitest";
import {
getDefaultMaxTurns,
getGraceTurns,
normalizeMaxTurns,
setDefaultMaxTurns,
setGraceTurns,
} from "../src/agent-runner.js";
describe("setDefaultMaxTurns / getDefaultMaxTurns", () => {
beforeEach(() => {
setDefaultMaxTurns(undefined);
});
it("defaults to undefined (unlimited)", () => {
expect(getDefaultMaxTurns()).toBeUndefined();
});
it("stores a positive integer", () => {
setDefaultMaxTurns(30);
expect(getDefaultMaxTurns()).toBe(30);
});
it("accepts boundary value 1", () => {
setDefaultMaxTurns(1);
expect(getDefaultMaxTurns()).toBe(1);
});
it("treats 0 as unlimited", () => {
setDefaultMaxTurns(0);
expect(getDefaultMaxTurns()).toBeUndefined();
});
it("clamps negative values to 1", () => {
setDefaultMaxTurns(-10);
expect(getDefaultMaxTurns()).toBe(1);
});
it("undefined resets to unlimited after being set", () => {
setDefaultMaxTurns(50);
expect(getDefaultMaxTurns()).toBe(50);
setDefaultMaxTurns(undefined);
expect(getDefaultMaxTurns()).toBeUndefined();
});
});
describe("normalizeMaxTurns", () => {
it("treats undefined as unlimited", () => {
expect(normalizeMaxTurns(undefined)).toBeUndefined();
});
it("treats 0 as unlimited", () => {
expect(normalizeMaxTurns(0)).toBeUndefined();
});
it("keeps positive values", () => {
expect(normalizeMaxTurns(7)).toBe(7);
});
it("clamps negative values to 1", () => {
expect(normalizeMaxTurns(-3)).toBe(1);
});
});
describe("setGraceTurns / getGraceTurns", () => {
beforeEach(() => {
setGraceTurns(5);
});
it("round-trips the value this suite set up", () => {
// NOT a default assertion — the beforeEach above sets 5, so this only
// proves the setter/getter pair agree. The real module default is asserted
// against a freshly-imported module in test/documented-defaults.test.ts.
expect(getGraceTurns()).toBe(5);
});
it("stores a positive integer", () => {
setGraceTurns(10);
expect(getGraceTurns()).toBe(10);
});
it("accepts boundary value 1", () => {
setGraceTurns(1);
expect(getGraceTurns()).toBe(1);
});
it("clamps 0 to 1", () => {
setGraceTurns(0);
expect(getGraceTurns()).toBe(1);
});
it("clamps negative values to 1", () => {
setGraceTurns(-5);
expect(getGraceTurns()).toBe(1);
});
});