- Rename agent "OpenCode-Builder" to "opencode-builder" (kebab-case) - Rename tool "slashcommand" to "slash_command" (snake_case) - Add "Hook" suffix to 3 factory functions: - createCompactionContextInjector → createCompactionContextInjectorHook - createSessionNotification → createSessionNotificationHook - createTodoContinuationEnforcer → createTodoContinuationEnforcerHook - Rename createCommentCheckerHooks → createCommentCheckerHook (singular) BREAKING CHANGE: Config files using "OpenCode-Builder" must update to "opencode-builder". BREAKING CHANGE: Agent prompts referencing "slashcommand" must update to "slash_command".
103 lines
3.4 KiB
TypeScript
103 lines
3.4 KiB
TypeScript
import { describe, expect, it, mock, beforeEach } from "bun:test"
|
|
|
|
// Mock dependencies before importing
|
|
const mockInjectHookMessage = mock(() => true)
|
|
mock.module("../../features/hook-message-injector", () => ({
|
|
injectHookMessage: mockInjectHookMessage,
|
|
}))
|
|
|
|
mock.module("../../shared/logger", () => ({
|
|
log: () => {},
|
|
}))
|
|
|
|
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 { createCompactionContextInjectorHook } from "./index"
|
|
import type { SummarizeContext } from "./index"
|
|
|
|
describe("createCompactionContextInjector", () => {
|
|
beforeEach(() => {
|
|
mockInjectHookMessage.mockClear()
|
|
})
|
|
|
|
describe("Agent Verification State preservation", () => {
|
|
it("includes Agent Verification State section in compaction prompt", async () => {
|
|
// given
|
|
const injector = createCompactionContextInjectorHook()
|
|
const context: SummarizeContext = {
|
|
sessionID: "test-session",
|
|
providerID: "anthropic",
|
|
modelID: "claude-sonnet-4-5",
|
|
usageRatio: 0.85,
|
|
directory: "/test/dir",
|
|
}
|
|
|
|
// when
|
|
await injector(context)
|
|
|
|
// then
|
|
expect(mockInjectHookMessage).toHaveBeenCalledTimes(1)
|
|
const calls = mockInjectHookMessage.mock.calls as unknown as [string, string, unknown][]
|
|
const injectedPrompt = calls[0]?.[1] ?? ""
|
|
expect(injectedPrompt).toContain("Agent Verification State")
|
|
expect(injectedPrompt).toContain("Current Agent")
|
|
expect(injectedPrompt).toContain("Verification Progress")
|
|
})
|
|
|
|
it("includes Momus-specific context for reviewer agents", async () => {
|
|
// given
|
|
const injector = createCompactionContextInjectorHook()
|
|
const context: SummarizeContext = {
|
|
sessionID: "test-session",
|
|
providerID: "anthropic",
|
|
modelID: "claude-sonnet-4-5",
|
|
usageRatio: 0.9,
|
|
directory: "/test/dir",
|
|
}
|
|
|
|
// when
|
|
await injector(context)
|
|
|
|
// then
|
|
const calls = mockInjectHookMessage.mock.calls as unknown as [string, string, unknown][]
|
|
const injectedPrompt = calls[0]?.[1] ?? ""
|
|
expect(injectedPrompt).toContain("Previous Rejections")
|
|
expect(injectedPrompt).toContain("Acceptance Status")
|
|
expect(injectedPrompt).toContain("reviewer agents")
|
|
})
|
|
|
|
it("preserves file verification progress in compaction prompt", async () => {
|
|
// given
|
|
const injector = createCompactionContextInjectorHook()
|
|
const context: SummarizeContext = {
|
|
sessionID: "test-session",
|
|
providerID: "anthropic",
|
|
modelID: "claude-sonnet-4-5",
|
|
usageRatio: 0.95,
|
|
directory: "/test/dir",
|
|
}
|
|
|
|
// when
|
|
await injector(context)
|
|
|
|
// then
|
|
const calls = mockInjectHookMessage.mock.calls as unknown as [string, string, unknown][]
|
|
const injectedPrompt = calls[0]?.[1] ?? ""
|
|
expect(injectedPrompt).toContain("Pending Verifications")
|
|
expect(injectedPrompt).toContain("Files already verified")
|
|
})
|
|
})
|
|
})
|