import { describe, expect, it } from "vitest" ;
import { validateConfigObject } from "./validation.js" ;
import { AgentDefaultsSchema } from "./zod-schema.agent-defaults.js" ;
import { AgentEntrySchema } from "./zod-schema.agent-runtime.js" ;
describe("agent defaults schema" , () => {
it("accepts subagent archiveAfterMinutes=0 to disable archiving" , () => {
expect(() =>
AgentDefaultsSchema.parse({
subagents: {
archiveAfterMinutes: 0 ,
},
}),
).not.toThrow();
});
it("accepts videoGenerationModel" , () => {
expect(() =>
AgentDefaultsSchema.parse({
videoGenerationModel: {
primary: "qwen/wan2.6-t2v" ,
fallbacks: ["minimax/video-01" ],
},
}),
).not.toThrow();
});
it("accepts mediaGenerationAutoProviderFallback" , () => {
expect(() =>
AgentDefaultsSchema.parse({
mediaGenerationAutoProviderFallback: false ,
}),
).not.toThrow();
});
it("accepts experimental.localModelLean" , () => {
const result = AgentDefaultsSchema.parse({
experimental: {
localModelLean: true ,
},
})!;
expect(result.experimental?.localModelLean).toBe(true );
});
it("accepts contextInjection: always" , () => {
const result = AgentDefaultsSchema.parse({ contextInjection: "always" })!;
expect(result.contextInjection).toBe("always" );
});
it("accepts contextInjection: continuation-skip" , () => {
const result = AgentDefaultsSchema.parse({ contextInjection: "continuation-skip" })!;
expect(result.contextInjection).toBe("continuation-skip" );
});
it("accepts contextInjection: never" , () => {
const result = AgentDefaultsSchema.parse({ contextInjection: "never" })!;
expect(result.contextInjection).toBe("never" );
});
it("rejects invalid contextInjection values" , () => {
expect(() => AgentDefaultsSchema.parse({ contextInjection: "unknown" })).toThrow();
});
it("accepts embeddedPi.executionContract" , () => {
const result = AgentDefaultsSchema.parse({
embeddedPi: {
executionContract: "strict-agentic" ,
},
})!;
expect(result.embeddedPi?.executionContract).toBe("strict-agentic" );
});
it("accepts compaction.truncateAfterCompaction" , () => {
const result = AgentDefaultsSchema.parse({
compaction: {
truncateAfterCompaction: true ,
},
})!;
expect(result.compaction?.truncateAfterCompaction).toBe(true );
});
it("accepts focused contextLimits on defaults and agent entries" , () => {
const defaults = AgentDefaultsSchema.parse({
contextLimits: {
memoryGetMaxChars: 20 _000 ,
memoryGetDefaultLines: 200 ,
toolResultMaxChars: 24 _000 ,
postCompactionMaxChars: 4 _000 ,
},
})!;
const agent = AgentEntrySchema.parse({
id: "ops" ,
skillsLimits: {
maxSkillsPromptChars: 30 _000 ,
},
contextLimits: {
memoryGetMaxChars: 18 _000 ,
},
});
expect(defaults.contextLimits?.memoryGetMaxChars).toBe(20 _000 );
expect(defaults.contextLimits?.memoryGetDefaultLines).toBe(200 );
expect(defaults.contextLimits?.toolResultMaxChars).toBe(24 _000 );
expect(agent.skillsLimits?.maxSkillsPromptChars).toBe(30 _000 );
expect(agent.contextLimits?.memoryGetMaxChars).toBe(18 _000 );
});
it("accepts positive heartbeat timeoutSeconds on defaults and agent entries" , () => {
const defaults = AgentDefaultsSchema.parse({
heartbeat: { timeoutSeconds: 45 },
})!;
const agent = AgentEntrySchema.parse({
id: "ops" ,
heartbeat: { timeoutSeconds: 45 },
});
expect(defaults.heartbeat?.timeoutSeconds).toBe(45 );
expect(agent.heartbeat?.timeoutSeconds).toBe(45 );
});
it("rejects zero heartbeat timeoutSeconds" , () => {
expect(() => AgentDefaultsSchema.parse({ heartbeat: { timeoutSeconds: 0 } })).toThrow();
expect(() => AgentEntrySchema.parse({ id: "ops" , heartbeat: { timeoutSeconds: 0 } })).toThrow();
});
it("preserves per-agent contextTokens through config validation" , () => {
const result = validateConfigObject({
agents: {
list: [
{
id: "ops" ,
contextTokens: 1 _048 _576 ,
},
],
},
});
expect(result).toMatchObject({
ok: true ,
config: {
agents: {
list: [{ contextTokens: 1 _048 _576 }],
},
},
});
});
it("rejects non-positive contextTokens on agent entries and defaults" , () => {
expect(() => AgentEntrySchema.parse({ id: "ops" , contextTokens: 0 })).toThrow();
expect(() => AgentEntrySchema.parse({ id: "ops" , contextTokens: -1 })).toThrow();
expect(() => AgentEntrySchema.parse({ id: "ops" , contextTokens: 1 .5 })).toThrow();
expect(() => AgentDefaultsSchema.parse({ contextTokens: 0 })).toThrow();
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland