41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
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,
|
|
}
|
|
}
|