import { randomUUID } from 'crypto' import { queryModelWithStreaming } from '../services/api/claude.js' import { autoCompactIfNeeded } from '../services/compact/autoCompact.js' import { microcompactMessages } from '../services/compact/microCompact.js' // -- deps // I/O dependencies for query(). Passing a `deps` override into QueryParams // lets tests inject fakes directly instead of spyOn-per-module — the most // common mocks (callModel, autocompact) are each spied in 6-8 test files // today with module-import-and-spy boilerplate. // // Using `typeof fn` keeps signatures in sync with the real implementations // automatically. This file imports the real functions for both typing and // the production factory — tests that import this file for typing are // already importing query.ts (which imports everything), so there's no // new module-graph cost. // // Scope is intentionally narrow (4 deps) to prove the pattern. Followup // PRs can add runTools, handleStopHooks, logEvent, queue ops, etc. export type QueryDeps = { // -- model callModel: typeof queryModelWithStreaming // -- compaction microcompact: typeof microcompactMessages autocompact: typeof autoCompactIfNeeded // -- platform uuid: () => string } export function productionDeps(): QueryDeps { return { callModel: queryModelWithStreaming, microcompact: microcompactMessages, autocompact: autoCompactIfNeeded, uuid: randomUUID, } }