test: make unsafe test coercion explicit
Move test coercion out of a hidden global and require each test to import the helper so review tools and runtime scripts can see the unsafe boundary. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -13,6 +13,7 @@ import { _resetForTesting, setMainSession, subagentSessions, registerAgentName,
|
||||
import { getAgentListDisplayName } from "../shared/agent-display-names"
|
||||
import { getOmoOpenCodeCacheDir, getOpenCodeCacheDir } from "../shared/data-path"
|
||||
import { clearSessionModel, getSessionModel, setSessionModel } from "../shared/session-model-state"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
type ChatMessagePart = { type: string; text?: string; [key: string]: unknown }
|
||||
type ChatMessageHandlerOutput = { message: Record<string, unknown>; parts: ChatMessagePart[] }
|
||||
@@ -56,13 +57,13 @@ function createMockHandlerArgs(overrides?: {
|
||||
}) {
|
||||
const appliedSessions: string[] = []
|
||||
return {
|
||||
ctx: testCoerce({ client: { tui: { showToast: async () => {} } } }),
|
||||
pluginConfig: testCoerce((overrides?.pluginConfig ?? {})),
|
||||
ctx: unsafeTestValue({ client: { tui: { showToast: async () => {} } } }),
|
||||
pluginConfig: unsafeTestValue((overrides?.pluginConfig ?? {})),
|
||||
firstMessageVariantGate: {
|
||||
shouldOverride: () => overrides?.shouldOverride ?? false,
|
||||
markApplied: (sessionID: string) => { appliedSessions.push(sessionID) },
|
||||
},
|
||||
hooks: testCoerce({
|
||||
hooks: unsafeTestValue({
|
||||
stopContinuationGuard: null,
|
||||
backgroundNotificationHook: null,
|
||||
keywordDetector: null,
|
||||
|
||||
@@ -6,6 +6,7 @@ import { createChatMessageHandler } from "./chat-message"
|
||||
import { _resetForTesting, setSessionAgent } from "../features/claude-code-session-state"
|
||||
import { clearPendingModelFallback, createModelFallbackHook, setSessionFallbackChain } from "../hooks/model-fallback/hook"
|
||||
import * as connectedProvidersCache from "../shared/connected-providers-cache"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
type EventInput = { event: { type: string; properties?: unknown } }
|
||||
type EventHandlerArgs = Parameters<typeof createEventHandler>[0]
|
||||
@@ -13,27 +14,27 @@ type EventHandlerInput = Parameters<ReturnType<typeof createEventHandler>>[0]
|
||||
type ChatMessageHandlerArgs = Parameters<typeof createChatMessageHandler>[0]
|
||||
|
||||
function asEventHandlerInput(input: EventInput): EventHandlerInput {
|
||||
return testCoerce<EventHandlerInput>(input)
|
||||
return unsafeTestValue<EventHandlerInput>(input)
|
||||
}
|
||||
|
||||
function asEventHandlerContext(ctx: unknown): EventHandlerArgs["ctx"] {
|
||||
return testCoerce<EventHandlerArgs["ctx"]>(ctx)
|
||||
return unsafeTestValue<EventHandlerArgs["ctx"]>(ctx)
|
||||
}
|
||||
|
||||
function asPluginConfig(config: unknown): EventHandlerArgs["pluginConfig"] {
|
||||
return testCoerce<EventHandlerArgs["pluginConfig"]>(config)
|
||||
return unsafeTestValue<EventHandlerArgs["pluginConfig"]>(config)
|
||||
}
|
||||
|
||||
function asChatMessageHandlerContext(ctx: unknown): ChatMessageHandlerArgs["ctx"] {
|
||||
return testCoerce<ChatMessageHandlerArgs["ctx"]>(ctx)
|
||||
return unsafeTestValue<ChatMessageHandlerArgs["ctx"]>(ctx)
|
||||
}
|
||||
|
||||
function asChatPluginConfig(config: unknown): ChatMessageHandlerArgs["pluginConfig"] {
|
||||
return testCoerce<ChatMessageHandlerArgs["pluginConfig"]>(config)
|
||||
return unsafeTestValue<ChatMessageHandlerArgs["pluginConfig"]>(config)
|
||||
}
|
||||
|
||||
function createEventHandlerManagers(): EventHandlerArgs["managers"] {
|
||||
return testCoerce<EventHandlerArgs["managers"]>({
|
||||
return unsafeTestValue<EventHandlerArgs["managers"]>({
|
||||
tmuxSessionManager: {
|
||||
onSessionCreated: async () => {},
|
||||
onSessionDeleted: async () => {},
|
||||
@@ -45,13 +46,13 @@ function createEventHandlerManagers(): EventHandlerArgs["managers"] {
|
||||
}
|
||||
|
||||
function createEventHandlerHooks(modelFallback: ReturnType<typeof createModelFallbackHook>): EventHandlerArgs["hooks"] {
|
||||
return testCoerce<EventHandlerArgs["hooks"]>({
|
||||
return unsafeTestValue<EventHandlerArgs["hooks"]>({
|
||||
modelFallback,
|
||||
})
|
||||
}
|
||||
|
||||
function createChatMessageHandlerHooks(modelFallback: ReturnType<typeof createModelFallbackHook>): ChatMessageHandlerArgs["hooks"] {
|
||||
return testCoerce<ChatMessageHandlerArgs["hooks"]>({
|
||||
return unsafeTestValue<ChatMessageHandlerArgs["hooks"]>({
|
||||
modelFallback,
|
||||
stopContinuationGuard: null,
|
||||
keywordDetector: null,
|
||||
|
||||
@@ -5,6 +5,7 @@ import { createEventHandler } from "./event"
|
||||
import { _resetForTesting, setMainSession } from "../features/claude-code-session-state"
|
||||
import { createModelFallbackHook, clearPendingModelFallback } from "../hooks/model-fallback/hook"
|
||||
import * as connectedProvidersCache from "../shared/connected-providers-cache"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
let readConnectedProvidersCacheSpy: { mockRestore: () => void } | undefined
|
||||
let readProviderModelsCacheSpy: { mockRestore: () => void } | undefined
|
||||
@@ -50,16 +51,16 @@ describe("createEventHandler - model-fallback auto-continuation pins agent/model
|
||||
}
|
||||
|
||||
const handler = createEventHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
directory: "/tmp",
|
||||
client: { session: sessionClient },
|
||||
}),
|
||||
pluginConfig: testCoerce((args?.pluginConfig ?? {})),
|
||||
pluginConfig: unsafeTestValue((args?.pluginConfig ?? {})),
|
||||
firstMessageVariantGate: {
|
||||
markSessionCreated: () => {},
|
||||
clear: () => {},
|
||||
},
|
||||
managers: testCoerce({
|
||||
managers: unsafeTestValue({
|
||||
tmuxSessionManager: {
|
||||
onSessionCreated: async () => {},
|
||||
onSessionDeleted: async () => {},
|
||||
@@ -68,7 +69,7 @@ describe("createEventHandler - model-fallback auto-continuation pins agent/model
|
||||
disconnectSession: async () => {},
|
||||
},
|
||||
}),
|
||||
hooks: args?.hooks ?? (testCoerce({})),
|
||||
hooks: args?.hooks ?? (unsafeTestValue({})),
|
||||
})
|
||||
|
||||
return { handler, promptAsyncBodies, promptBodies }
|
||||
|
||||
@@ -6,6 +6,7 @@ import { createChatMessageHandler } from "./chat-message"
|
||||
import { _resetForTesting, setMainSession } from "../features/claude-code-session-state"
|
||||
import { createModelFallbackHook, clearPendingModelFallback } from "../hooks/model-fallback/hook"
|
||||
import * as connectedProvidersCache from "../shared/connected-providers-cache"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
let readConnectedProvidersCacheSpy: { mockRestore: () => void } | undefined
|
||||
let readProviderModelsCacheSpy: { mockRestore: () => void } | undefined
|
||||
@@ -22,7 +23,7 @@ describe("createEventHandler - model fallback", () => {
|
||||
const promptCalls: string[] = []
|
||||
|
||||
const handler = createEventHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
directory: "/tmp",
|
||||
client: {
|
||||
session: {
|
||||
@@ -37,12 +38,12 @@ describe("createEventHandler - model fallback", () => {
|
||||
},
|
||||
},
|
||||
}),
|
||||
pluginConfig: testCoerce((args?.pluginConfig ?? {})),
|
||||
pluginConfig: unsafeTestValue((args?.pluginConfig ?? {})),
|
||||
firstMessageVariantGate: {
|
||||
markSessionCreated: () => {},
|
||||
clear: () => {},
|
||||
},
|
||||
managers: testCoerce({
|
||||
managers: unsafeTestValue({
|
||||
tmuxSessionManager: {
|
||||
onSessionCreated: async () => {},
|
||||
onSessionDeleted: async () => {},
|
||||
@@ -51,7 +52,7 @@ describe("createEventHandler - model fallback", () => {
|
||||
disconnectSession: async () => {},
|
||||
},
|
||||
}),
|
||||
hooks: args?.hooks ?? (testCoerce({})),
|
||||
hooks: args?.hooks ?? (unsafeTestValue({})),
|
||||
})
|
||||
|
||||
return { handler, abortCalls, promptCalls }
|
||||
@@ -148,19 +149,19 @@ describe("createEventHandler - model fallback", () => {
|
||||
const { handler, abortCalls, promptCalls } = createHandler({ hooks: { modelFallback } })
|
||||
|
||||
const chatMessageHandler = createChatMessageHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
client: {
|
||||
tui: {
|
||||
showToast: async () => ({}),
|
||||
},
|
||||
},
|
||||
}),
|
||||
pluginConfig: testCoerce({}),
|
||||
pluginConfig: unsafeTestValue({}),
|
||||
firstMessageVariantGate: {
|
||||
shouldOverride: () => false,
|
||||
markApplied: () => {},
|
||||
},
|
||||
hooks: testCoerce({
|
||||
hooks: unsafeTestValue({
|
||||
modelFallback,
|
||||
stopContinuationGuard: null,
|
||||
keywordDetector: null,
|
||||
@@ -358,19 +359,19 @@ describe("createEventHandler - model fallback", () => {
|
||||
const { handler, abortCalls, promptCalls } = createHandler({ hooks: { modelFallback }, pluginConfig })
|
||||
|
||||
const chatMessageHandler = createChatMessageHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
client: {
|
||||
tui: {
|
||||
showToast: async () => ({}),
|
||||
},
|
||||
},
|
||||
}),
|
||||
pluginConfig: testCoerce({}),
|
||||
pluginConfig: unsafeTestValue({}),
|
||||
firstMessageVariantGate: {
|
||||
shouldOverride: () => false,
|
||||
markApplied: () => {},
|
||||
},
|
||||
hooks: testCoerce({
|
||||
hooks: unsafeTestValue({
|
||||
modelFallback,
|
||||
stopContinuationGuard: null,
|
||||
keywordDetector: null,
|
||||
@@ -449,7 +450,7 @@ describe("createEventHandler - model fallback", () => {
|
||||
|
||||
setupConnectedProviderCacheMocks()
|
||||
const eventHandler = createEventHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
directory: "/tmp",
|
||||
client: {
|
||||
session: {
|
||||
@@ -464,12 +465,12 @@ describe("createEventHandler - model fallback", () => {
|
||||
},
|
||||
},
|
||||
}),
|
||||
pluginConfig: testCoerce({}),
|
||||
pluginConfig: unsafeTestValue({}),
|
||||
firstMessageVariantGate: {
|
||||
markSessionCreated: () => {},
|
||||
clear: () => {},
|
||||
},
|
||||
managers: testCoerce({
|
||||
managers: unsafeTestValue({
|
||||
tmuxSessionManager: {
|
||||
onSessionCreated: async () => {},
|
||||
onSessionDeleted: async () => {},
|
||||
@@ -478,13 +479,13 @@ describe("createEventHandler - model fallback", () => {
|
||||
disconnectSession: async () => {},
|
||||
},
|
||||
}),
|
||||
hooks: testCoerce({
|
||||
hooks: unsafeTestValue({
|
||||
modelFallback,
|
||||
}),
|
||||
})
|
||||
|
||||
const chatMessageHandler = createChatMessageHandler({
|
||||
ctx: testCoerce({
|
||||
ctx: unsafeTestValue({
|
||||
client: {
|
||||
tui: {
|
||||
showToast: async ({ body }: { body: { title?: string } }) => {
|
||||
@@ -494,12 +495,12 @@ describe("createEventHandler - model fallback", () => {
|
||||
},
|
||||
},
|
||||
}),
|
||||
pluginConfig: testCoerce({}),
|
||||
pluginConfig: unsafeTestValue({}),
|
||||
firstMessageVariantGate: {
|
||||
shouldOverride: () => false,
|
||||
markApplied: () => {},
|
||||
},
|
||||
hooks: testCoerce({
|
||||
hooks: unsafeTestValue({
|
||||
modelFallback,
|
||||
stopContinuationGuard: null,
|
||||
keywordDetector: null,
|
||||
|
||||
@@ -11,6 +11,7 @@ import type { RuntimeFallbackPluginInput } from "../hooks/runtime-fallback/types
|
||||
import { _resetForTesting } from "../features/claude-code-session-state"
|
||||
import { SessionCategoryRegistry } from "../shared/session-category-registry"
|
||||
import * as connectedProvidersCache from "../shared/connected-providers-cache"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
type EventHandlerArgs = Parameters<typeof createEventHandler>[0]
|
||||
type ChatMessageHandlerArgs = Parameters<typeof createChatMessageHandler>[0]
|
||||
@@ -18,17 +19,17 @@ type HarnessContext = EventHandlerArgs["ctx"] & RuntimeFallbackPluginInput
|
||||
type HarnessEventInput = Parameters<ReturnType<typeof createHarness>["eventHandler"]>[0]
|
||||
|
||||
function asHarnessEventInput(input: unknown): HarnessEventInput {
|
||||
return testCoerce<HarnessEventInput>(input)
|
||||
return unsafeTestValue<HarnessEventInput>(input)
|
||||
}
|
||||
|
||||
function asHarnessContext(ctx: unknown): HarnessContext {
|
||||
return testCoerce<HarnessContext>(ctx)
|
||||
return unsafeTestValue<HarnessContext>(ctx)
|
||||
}
|
||||
|
||||
function createEventHandlerManagers(
|
||||
overrides: Record<string, unknown> = {},
|
||||
): EventHandlerArgs["managers"] {
|
||||
return testCoerce<EventHandlerArgs["managers"]>({
|
||||
return unsafeTestValue<EventHandlerArgs["managers"]>({
|
||||
...({} as EventHandlerArgs["managers"]),
|
||||
tmuxSessionManager: {
|
||||
onSessionCreated: async () => {},
|
||||
@@ -41,7 +42,7 @@ function createEventHandlerManagers(
|
||||
function createEventHandlerHooks(
|
||||
overrides: Record<string, unknown>,
|
||||
): EventHandlerArgs["hooks"] {
|
||||
return testCoerce<EventHandlerArgs["hooks"]>({
|
||||
return unsafeTestValue<EventHandlerArgs["hooks"]>({
|
||||
...({} as EventHandlerArgs["hooks"]),
|
||||
...overrides,
|
||||
})
|
||||
@@ -50,7 +51,7 @@ function createEventHandlerHooks(
|
||||
function createChatMessageHandlerHooks(
|
||||
overrides: Record<string, unknown>,
|
||||
): ChatMessageHandlerArgs["hooks"] {
|
||||
return testCoerce<ChatMessageHandlerArgs["hooks"]>({
|
||||
return unsafeTestValue<ChatMessageHandlerArgs["hooks"]>({
|
||||
...({} as ChatMessageHandlerArgs["hooks"]),
|
||||
...overrides,
|
||||
})
|
||||
@@ -87,7 +88,7 @@ let readConnectedProvidersCacheSpy: { mockRestore: () => void } | undefined
|
||||
let readProviderModelsCacheSpy: { mockRestore: () => void } | undefined
|
||||
|
||||
function createPluginConfig(mode: HarnessMode) {
|
||||
return testCoerce<EventHandlerArgs["pluginConfig"]>({
|
||||
return unsafeTestValue<EventHandlerArgs["pluginConfig"]>({
|
||||
agents: {
|
||||
sisyphus: {
|
||||
fallback_models: CLIPROXYAPI_FALLBACKS,
|
||||
@@ -187,14 +188,14 @@ function createHarness(args: {
|
||||
timeout_seconds: args.sessionTimeoutMs ? 30 : 0,
|
||||
notify_on_fallback: false,
|
||||
},
|
||||
pluginConfig: testCoerce<EventHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
pluginConfig: unsafeTestValue<EventHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
...(args.sessionTimeoutMs ? { session_timeout_ms: args.sessionTimeoutMs } : {}),
|
||||
})
|
||||
}
|
||||
|
||||
const eventHandler = createEventHandler({
|
||||
ctx,
|
||||
pluginConfig: testCoerce<EventHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
pluginConfig: unsafeTestValue<EventHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
firstMessageVariantGate: {
|
||||
markSessionCreated: () => {},
|
||||
clear: () => {},
|
||||
@@ -209,7 +210,7 @@ function createHarness(args: {
|
||||
|
||||
const chatMessageHandler = createChatMessageHandler({
|
||||
ctx,
|
||||
pluginConfig: testCoerce<ChatMessageHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
pluginConfig: unsafeTestValue<ChatMessageHandlerArgs["pluginConfig"]>(pluginConfig),
|
||||
firstMessageVariantGate: {
|
||||
shouldOverride: () => false,
|
||||
markApplied: () => {},
|
||||
|
||||
@@ -3,8 +3,9 @@ import type { OhMyOpenCodeConfig } from "../../config"
|
||||
import type { ModelCacheState } from "../../plugin-state"
|
||||
import type { PluginContext } from "../types"
|
||||
import { createSessionHooks } from "./create-session-hooks"
|
||||
import { unsafeTestValue } from "../../../test-support/unsafe-test-value"
|
||||
|
||||
const mockContext = testCoerce<PluginContext>({
|
||||
const mockContext = unsafeTestValue<PluginContext>({
|
||||
directory: "/tmp",
|
||||
client: {
|
||||
tui: {
|
||||
|
||||
@@ -6,6 +6,7 @@ import { createToolExecuteAfterHandler } from "./tool-execute-after"
|
||||
import { createToolExecuteBeforeHandler } from "./tool-execute-before"
|
||||
import { ULTRAWORK_VERIFICATION_PROMISE } from "../hooks/ralph-loop/constants"
|
||||
import { clearState, readState, writeState } from "../hooks/ralph-loop/storage"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
function createCtx(directory: string) {
|
||||
@@ -56,7 +57,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
})
|
||||
|
||||
const handler = createToolExecuteBeforeHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"],
|
||||
})
|
||||
const output = { args: createOracleTaskArgs("Check it") }
|
||||
@@ -78,7 +79,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
const directory = join(tmpdir(), `tool-before-ulw-${Date.now()}-plain`)
|
||||
mkdirSync(directory, { recursive: true })
|
||||
const handler = createToolExecuteBeforeHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"],
|
||||
})
|
||||
const output = { args: createOracleTaskArgs("Check it") }
|
||||
@@ -96,8 +97,8 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
mkdirSync(directory, { recursive: true })
|
||||
const startLoopCalls: Array<{ sessionID: string; prompt: string; options: Record<string, unknown> }> = []
|
||||
const handler = createToolExecuteBeforeHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"]>({
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"]>({
|
||||
ralphLoop: {
|
||||
startLoop: (sessionID: string, prompt: string, options?: Record<string, unknown>) => {
|
||||
startLoopCalls.push({ sessionID, prompt, options: options ?? {} })
|
||||
@@ -148,7 +149,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
})
|
||||
|
||||
const beforeHandler = createToolExecuteBeforeHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"],
|
||||
})
|
||||
const beforeOutput = { args: createOracleTaskArgs("Check it") }
|
||||
@@ -156,7 +157,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
const metadataFromSyncTask = createSyncTaskMetadata(beforeOutput.args, "ses-oracle")
|
||||
|
||||
const handler = createToolExecuteAfterHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteAfterHandler>[0]["hooks"],
|
||||
})
|
||||
|
||||
@@ -191,7 +192,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
})
|
||||
|
||||
const handler = createToolExecuteAfterHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteAfterHandler>[0]["hooks"],
|
||||
})
|
||||
|
||||
@@ -230,7 +231,7 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
})
|
||||
|
||||
const handler = createToolExecuteAfterHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteAfterHandler>[0]["hooks"],
|
||||
})
|
||||
|
||||
@@ -269,11 +270,11 @@ describe("tool.execute.before ultrawork oracle verification", () => {
|
||||
})
|
||||
|
||||
const beforeHandler = createToolExecuteBeforeHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteBeforeHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteBeforeHandler>[0]["hooks"],
|
||||
})
|
||||
const afterHandler = createToolExecuteAfterHandler({
|
||||
ctx: testCoerce<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
ctx: unsafeTestValue<Parameters<typeof createToolExecuteAfterHandler>[0]["ctx"]>(createCtx(directory)),
|
||||
hooks: {} as Parameters<typeof createToolExecuteAfterHandler>[0]["hooks"],
|
||||
})
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { describe, expect, test, beforeEach, afterEach, spyOn } from "bun:test"
|
||||
import * as sharedModule from "../shared"
|
||||
import * as dbOverrideModule from "./ultrawork-db-model-override"
|
||||
import * as sessionStateModule from "../features/claude-code-session-state"
|
||||
import { unsafeTestValue } from "../../test-support/unsafe-test-value"
|
||||
|
||||
let resolveUltraworkOverride: (typeof import("./ultrawork-model-override"))["resolveUltraworkOverride"]
|
||||
let detectUltrawork: (typeof import("./ultrawork-model-override"))["detectUltrawork"]
|
||||
@@ -70,7 +71,7 @@ describe("resolveUltraworkOverride", () => {
|
||||
}
|
||||
|
||||
function createConfig(agentName: string, ultrawork: { model?: string; variant?: string }) {
|
||||
return testCoerce<Parameters<typeof resolveUltraworkOverride>[0]>({
|
||||
return unsafeTestValue<Parameters<typeof resolveUltraworkOverride>[0]>({
|
||||
agents: {
|
||||
[agentName]: { ultrawork },
|
||||
},
|
||||
@@ -139,7 +140,7 @@ describe("resolveUltraworkOverride", () => {
|
||||
|
||||
test("should return null when agent has no ultrawork config", () => {
|
||||
//#given
|
||||
const config = testCoerce<Parameters<typeof resolveUltraworkOverride>[0]>({
|
||||
const config = unsafeTestValue<Parameters<typeof resolveUltraworkOverride>[0]>({
|
||||
agents: { sisyphus: { model: "anthropic/claude-sonnet-4-6" } },
|
||||
})
|
||||
const output = createOutput("ultrawork do something")
|
||||
@@ -278,7 +279,7 @@ describe("applyUltraworkModelOverrideOnMessage", () => {
|
||||
}
|
||||
|
||||
function createConfig(agentName: string, ultrawork: { model?: string; variant?: string }) {
|
||||
return testCoerce<Parameters<typeof applyUltraworkModelOverrideOnMessage>[0]>({
|
||||
return unsafeTestValue<Parameters<typeof applyUltraworkModelOverrideOnMessage>[0]>({
|
||||
agents: {
|
||||
[agentName]: { ultrawork },
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user