(args: {
service: AIService;
config: Config;
historyService: HistoryService;
initStateManager: InitStateManager;
metadata: WorkspaceMetadata;
startStreamCalls?: unknown[][];
routeProvider?: ProviderName;
allTools?: Record<string, Tool>;
workspacePathOverride?: string;
historySequence?: number;
effectiveModelString?: string;
canonicalProviderName?: ProviderName;
canonicalModelId?: string;
useRequestedModelString?: boolean;
onPlanPayloadMessageIds?: (messageIds: string[]) => void;
onBuildStreamSystemContext?: (
args: Parameters<typeof streamContextBuilder.buildStreamSystemContext>[0]
) => void;
onPrepareMessagesForProvider?: (
args: Parameters<typeof messagePipeline.prepareMessagesForProvider>[0]
) => void;
})
| 284 | } |
| 285 | |
| 286 | function stubCommonStreamMessageDependencies(args: { |
| 287 | service: AIService; |
| 288 | config: Config; |
| 289 | historyService: HistoryService; |
| 290 | initStateManager: InitStateManager; |
| 291 | metadata: WorkspaceMetadata; |
| 292 | startStreamCalls?: unknown[][]; |
| 293 | routeProvider?: ProviderName; |
| 294 | allTools?: Record<string, Tool>; |
| 295 | workspacePathOverride?: string; |
| 296 | historySequence?: number; |
| 297 | effectiveModelString?: string; |
| 298 | canonicalProviderName?: ProviderName; |
| 299 | canonicalModelId?: string; |
| 300 | useRequestedModelString?: boolean; |
| 301 | onPlanPayloadMessageIds?: (messageIds: string[]) => void; |
| 302 | onBuildStreamSystemContext?: ( |
| 303 | args: Parameters<typeof streamContextBuilder.buildStreamSystemContext>[0] |
| 304 | ) => void; |
| 305 | onPrepareMessagesForProvider?: ( |
| 306 | args: Parameters<typeof messagePipeline.prepareMessagesForProvider>[0] |
| 307 | ) => void; |
| 308 | }): ReturnType<typeof spyOn<typeof toolsModule, "getToolsForModel">> { |
| 309 | spyOn(agentResolution, "resolveAgentForStream").mockResolvedValue( |
| 310 | resolvedAgentResultFor(args.metadata) |
| 311 | ); |
| 312 | spyOn(streamContextBuilder, "buildPlanInstructions").mockImplementation((planArgs) => { |
| 313 | args.onPlanPayloadMessageIds?.(planArgs.requestPayloadMessages.map((message) => message.id)); |
| 314 | return Promise.resolve({ |
| 315 | effectiveAdditionalInstructions: undefined, |
| 316 | planFilePath: path.join(args.metadata.projectPath, "plan.md"), |
| 317 | planContentForTransition: undefined, |
| 318 | }); |
| 319 | }); |
| 320 | spyOn(streamContextBuilder, "buildStreamSystemContext").mockImplementation((contextArgs) => { |
| 321 | args.onBuildStreamSystemContext?.(contextArgs); |
| 322 | return Promise.resolve({ |
| 323 | agentSystemPromptSections: ["test-agent-prompt"], |
| 324 | systemMessage: "test-system-message", |
| 325 | systemMessageTokens: 1, |
| 326 | agentDefinitions: undefined, |
| 327 | availableSkills: undefined, |
| 328 | ancestorPlanFilePaths: [], |
| 329 | }); |
| 330 | }); |
| 331 | spyOn(messagePipeline, "prepareMessagesForProvider").mockImplementation((pipelineArgs) => { |
| 332 | args.onPrepareMessagesForProvider?.(pipelineArgs); |
| 333 | return Promise.resolve( |
| 334 | pipelineArgs.messagesWithSentinel as unknown as Awaited< |
| 335 | ReturnType<typeof messagePipeline.prepareMessagesForProvider> |
| 336 | > |
| 337 | ); |
| 338 | }); |
| 339 | const getToolsForModelSpy = spyOn(toolsModule, "getToolsForModel").mockResolvedValue( |
| 340 | args.allTools ?? {} |
| 341 | ); |
| 342 | spyOn(systemMessageModule, "readToolInstructions").mockResolvedValue({}); |
| 343 |
no test coverage detected