





















@@ -26,6 +26,7 @@ const state = vi.hoisted(() => ({
2626resolveAcpExplicitTurnPolicyErrorMock: vi.fn(),
2727runWithModelFallbackMock: vi.fn(),
2828runAgentAttemptMock: vi.fn(),
29+resolveAgentSkillsFilterMock: vi.fn((): string[] | undefined => undefined),
2930resolveEffectiveModelFallbacksMock: vi.fn().mockReturnValue(undefined),
3031emitAgentEventMock: vi.fn(),
3132registerAgentRunContextMock: vi.fn(),
@@ -312,7 +313,7 @@ vi.mock("./agent-scope.js", () => ({
312313resolveEffectiveModelFallbacks: state.resolveEffectiveModelFallbacksMock,
313314resolveSessionAgentIds: () => ({ defaultAgentId: "default", sessionAgentId: "default" }),
314315resolveSessionAgentId: () => "default",
315-resolveAgentSkillsFilter: () => undefined,
316+resolveAgentSkillsFilter: (...args: unknown[]) => state.resolveAgentSkillsFilterMock(...args),
316317resolveAgentWorkspaceDir: () => "/tmp/workspace",
317318}));
318319@@ -757,6 +758,7 @@ describe("agentCommand – LiveSessionModelSwitchError retry", () => {
757758state.runtimeConfigMock = undefined;
758759state.isThinkingLevelSupportedMock.mockReturnValue(true);
759760state.resolveThinkingDefaultMock.mockReturnValue("low");
761+state.resolveAgentSkillsFilterMock.mockReturnValue(undefined);
760762state.loadManifestModelCatalogMock.mockReturnValue([]);
761763state.acpRunTurnMock.mockImplementation(async (params: unknown) => {
762764const onEvent = (params as { onEvent?: (event: unknown) => void }).onEvent;
@@ -1002,6 +1004,7 @@ describe("agentCommand – LiveSessionModelSwitchError retry", () => {
10021004],
10031005},
10041006},
1007+list: [{ id: "main", default: true, skills: [] }],
10051008},
10061009};
10071010state.runWithModelFallbackMock.mockImplementation(async (params: FallbackRunnerParams) => {
@@ -1426,6 +1429,42 @@ describe("agentCommand – LiveSessionModelSwitchError retry", () => {
14261429expect(state.buildWorkspaceSkillSnapshotMock).toHaveBeenCalledTimes(1);
14271430});
142814311432+it("uses an empty skill snapshot without loading workspace skills for an empty skill filter", async () => {
1433+state.runtimeConfigMock = {
1434+agents: {
1435+defaults: {
1436+models: {
1437+"anthropic/claude": {},
1438+"openai/claude": {},
1439+"openai/gpt-5.4": {},
1440+},
1441+skills: [],
1442+},
1443+},
1444+};
1445+state.sessionEntryMock = {
1446+sessionId: "session-1",
1447+updatedAt: Date.now(),
1448+};
1449+state.resolveAgentSkillsFilterMock.mockReturnValue([]);
1450+setupSingleAttemptFallback();
1451+state.runAgentAttemptMock.mockResolvedValue(makeSuccessResult("anthropic", "claude"));
1452+1453+await runBasicAgentCommand();
1454+1455+const attemptParams = mockCallArg(state.runAgentAttemptMock) as {
1456+skillsSnapshot?: Record<string, unknown>;
1457+};
1458+expectRecordFields(attemptParams?.skillsSnapshot, {
1459+prompt: "",
1460+skills: [],
1461+resolvedSkills: [],
1462+skillFilter: [],
1463+version: 0,
1464+});
1465+expect(state.buildWorkspaceSkillSnapshotMock).not.toHaveBeenCalled();
1466+});
1467+14291468it("classifies empty embedded run results before model fallback accepts them", async () => {
14301469let observedClassification: unknown;
14311470state.runWithModelFallbackMock.mockImplementation(async (params: FallbackRunnerParams) => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。