0946a6c8f3
Adds §8 to compaction prompt instructing the LLM to preserve spawned agent session IDs and resume them post-compaction instead of starting fresh. Injects actual TaskHistory data when BackgroundManager is available.
117 lines
3.7 KiB
TypeScript
117 lines
3.7 KiB
TypeScript
import { describe, expect, it, mock } from "bun:test"
|
|
|
|
mock.module("../../shared/system-directive", () => ({
|
|
createSystemDirective: (type: string) => `[DIRECTIVE:${type}]`,
|
|
SystemDirectiveTypes: {
|
|
TODO_CONTINUATION: "TODO CONTINUATION",
|
|
RALPH_LOOP: "RALPH LOOP",
|
|
BOULDER_CONTINUATION: "BOULDER CONTINUATION",
|
|
DELEGATION_REQUIRED: "DELEGATION REQUIRED",
|
|
SINGLE_TASK_ONLY: "SINGLE TASK ONLY",
|
|
COMPACTION_CONTEXT: "COMPACTION CONTEXT",
|
|
CONTEXT_WINDOW_MONITOR: "CONTEXT WINDOW MONITOR",
|
|
PROMETHEUS_READ_ONLY: "PROMETHEUS READ-ONLY",
|
|
},
|
|
}))
|
|
|
|
import { createCompactionContextInjector } from "./index"
|
|
import { TaskHistory } from "../../features/background-agent/task-history"
|
|
|
|
describe("createCompactionContextInjector", () => {
|
|
describe("Agent Verification State preservation", () => {
|
|
it("includes Agent Verification State section in compaction prompt", async () => {
|
|
//#given
|
|
const injector = createCompactionContextInjector()
|
|
|
|
//#when
|
|
const prompt = injector()
|
|
|
|
//#then
|
|
expect(prompt).toContain("Agent Verification State")
|
|
expect(prompt).toContain("Current Agent")
|
|
expect(prompt).toContain("Verification Progress")
|
|
})
|
|
|
|
it("includes reviewer-agent continuity fields", async () => {
|
|
//#given
|
|
const injector = createCompactionContextInjector()
|
|
|
|
//#when
|
|
const prompt = injector()
|
|
|
|
//#then
|
|
expect(prompt).toContain("Previous Rejections")
|
|
expect(prompt).toContain("Acceptance Status")
|
|
expect(prompt).toContain("reviewer agents")
|
|
})
|
|
|
|
it("preserves file verification progress fields", async () => {
|
|
//#given
|
|
const injector = createCompactionContextInjector()
|
|
|
|
//#when
|
|
const prompt = injector()
|
|
|
|
//#then
|
|
expect(prompt).toContain("Pending Verifications")
|
|
expect(prompt).toContain("Files already verified")
|
|
})
|
|
})
|
|
|
|
it("restricts constraints to explicit verbatim statements", async () => {
|
|
//#given
|
|
const injector = createCompactionContextInjector()
|
|
|
|
//#when
|
|
const prompt = injector()
|
|
|
|
//#then
|
|
expect(prompt).toContain("Explicit Constraints (Verbatim Only)")
|
|
expect(prompt).toContain("Do NOT invent")
|
|
expect(prompt).toContain("Quote constraints verbatim")
|
|
})
|
|
|
|
describe("Delegated Agent Sessions", () => {
|
|
it("includes delegated sessions section in compaction prompt", async () => {
|
|
//#given
|
|
const injector = createCompactionContextInjector()
|
|
|
|
//#when
|
|
const prompt = injector()
|
|
|
|
//#then
|
|
expect(prompt).toContain("Delegated Agent Sessions")
|
|
expect(prompt).toContain("RESUME, DON'T RESTART")
|
|
expect(prompt).toContain("session_id")
|
|
})
|
|
|
|
it("injects actual task history when backgroundManager and sessionID provided", async () => {
|
|
//#given
|
|
const mockManager = { taskHistory: new TaskHistory() } as any
|
|
mockManager.taskHistory.record("ses_parent", { id: "t1", sessionID: "ses_child", agent: "explore", description: "Find patterns", status: "completed", category: "quick" })
|
|
const injector = createCompactionContextInjector(mockManager)
|
|
|
|
//#when
|
|
const prompt = injector("ses_parent")
|
|
|
|
//#then
|
|
expect(prompt).toContain("Active/Recent Delegated Sessions")
|
|
expect(prompt).toContain("**explore**")
|
|
expect(prompt).toContain("[quick]")
|
|
expect(prompt).toContain("`ses_child`")
|
|
})
|
|
|
|
it("does not inject task history section when no entries exist", async () => {
|
|
//#given
|
|
const mockManager = { taskHistory: new TaskHistory() } as any
|
|
const injector = createCompactionContextInjector(mockManager)
|
|
|
|
//#when
|
|
const prompt = injector("ses_empty")
|
|
|
|
//#then
|
|
expect(prompt).not.toContain("Active/Recent Delegated Sessions")
|
|
})
|
|
})
|
|
})
|