import { describe, expect, it } from "vitest" ;
import { buildSystemPromptReport } from "./system-prompt-report.js" ;
import type { WorkspaceBootstrapFile } from "./workspace.js" ;
function makeBootstrapFile(overrides: Partial<WorkspaceBootstrapFile>): WorkspaceBootstrapFile {
return {
name: "AGENTS.md" ,
path: "/tmp/workspace/AGENTS.md" ,
content: "alpha" ,
missing: false ,
...overrides,
};
}
describe("buildSystemPromptReport" , () => {
const makeReport = (params: {
file: WorkspaceBootstrapFile;
injectedPath: string;
injectedContent: string;
bootstrapMaxChars?: number;
bootstrapTotalMaxChars?: number;
}) =>
buildSystemPromptReport({
source: "run" ,
generatedAt: 0 ,
bootstrapMaxChars: params.bootstrapMaxChars ?? 20 _000 ,
bootstrapTotalMaxChars: params.bootstrapTotalMaxChars,
systemPrompt: "system" ,
bootstrapFiles: [params.file],
injectedFiles: [{ path: params.injectedPath, content: params.injectedContent }],
skillsPrompt: "" ,
tools: [],
});
it("counts injected chars when injected file paths are absolute" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = makeReport({
file,
injectedPath: "/tmp/workspace/policies/AGENTS.md" ,
injectedContent: "trimmed" ,
});
expect(report.injectedWorkspaceFiles[0 ]?.injectedChars).toBe("trimmed" .length);
});
it("keeps legacy basename matching for injected files" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = makeReport({
file,
injectedPath: "AGENTS.md" ,
injectedContent: "trimmed" ,
});
expect(report.injectedWorkspaceFiles[0 ]?.injectedChars).toBe("trimmed" .length);
});
it("marks workspace files truncated when injected chars are smaller than raw chars" , () => {
const file = makeBootstrapFile({
path: "/tmp/workspace/policies/AGENTS.md" ,
content: "abcdefghijklmnopqrstuvwxyz" ,
});
const report = makeReport({
file,
injectedPath: "/tmp/workspace/policies/AGENTS.md" ,
injectedContent: "trimmed" ,
});
expect(report.injectedWorkspaceFiles[0 ]?.truncated).toBe(true );
});
it("includes both bootstrap caps in the report payload" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = makeReport({
file,
injectedPath: "AGENTS.md" ,
injectedContent: "trimmed" ,
bootstrapMaxChars: 11 _111 ,
bootstrapTotalMaxChars: 22 _222 ,
});
expect(report.bootstrapMaxChars).toBe(11 _111 );
expect(report.bootstrapTotalMaxChars).toBe(22 _222 );
});
it("reports zero in-band tool list chars when tool info stays structured" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = makeReport({
file,
injectedPath: "AGENTS.md" ,
injectedContent: "trimmed" ,
});
expect(report.tools.listChars).toBe(0 );
});
it("reports injectedChars=0 when injected file does not match by path or basename" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = makeReport({
file,
injectedPath: "/tmp/workspace/policies/OTHER.md" ,
injectedContent: "trimmed" ,
});
expect(report.injectedWorkspaceFiles[0 ]?.injectedChars).toBe(0 );
expect(report.injectedWorkspaceFiles[0 ]?.truncated).toBe(true );
});
it("ignores malformed injected file paths and still matches valid entries" , () => {
const file = makeBootstrapFile({ path: "/tmp/workspace/policies/AGENTS.md" });
const report = buildSystemPromptReport({
source: "run" ,
generatedAt: 0 ,
bootstrapMaxChars: 20 _000 ,
systemPrompt: "system" ,
bootstrapFiles: [file],
injectedFiles: [
{ path: 123 as unknown as string, content: "bad" },
{ path: "/tmp/workspace/policies/AGENTS.md" , content: "trimmed" },
],
skillsPrompt: "" ,
tools: [],
});
expect(report.injectedWorkspaceFiles[0 ]?.injectedChars).toBe("trimmed" .length);
});
});
Messung V0.5 in Prozent C=99 H=96 G=97
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland