Files
learnharness/src/server/stores.ts
T

54 lines
2.1 KiB
TypeScript
Raw Normal View History

/**
* THE COMPOSITION ROOT for storage — the single place concrete store
* adapters are wired. Everything else (core, services, agents) codes against
* the port types in core/ports.ts and receives instances through this
* module. Swapping the fs adapter for SQLite later changes exactly this
* file (and the adapter implementations in src/store/).
*/
import { MODELS } from "../../config.ts";
import { chatStore } from "../store/chats.ts";
import { graphStore } from "../store/graph.ts";
import { jobStore } from "../store/jobs.ts";
import { settingsStore } from "../store/settings.ts";
import { resolveSettings, type EffectiveSettings, type ModelRoleSpecs } from "../core/settings-resolution.ts";
/** The wired adapters. Satisfies core/graph.ts's GraphDeps structurally. */
export const stores = {
chatStore,
graphStore,
jobStore,
settingsStore,
};
export type Stores = typeof stores;
/** config.ts's MODELS as the compiled factory layer the resolution reads —
* ALL NINE roles since the model-slots wave (2026-09-20): the strong
* slot's factory fallback IS the prober pin. core stays pure (it takes
* this as a parameter, never imports config at runtime). Per-role
* OVERRIDES stay background-only (the conversation pair is
* chat-settings-controlled) — that split lives in core's
* BACKGROUND_MODEL_ROLES, unchanged. */
const MODEL_PINS: ModelRoleSpecs = {
prober: MODELS.prober,
teacher: MODELS.teacher,
researcher: MODELS.researcher,
demoBuilder: MODELS.demoBuilder,
visualMaker: MODELS.visualMaker,
pdfReader: MODELS.pdfReader,
extractor: MODELS.extractor,
auditor: MODELS.auditor,
labeler: MODELS.labeler,
};
export { MODEL_PINS };
/**
* The resolved view of the settings record (core/settings-resolution.ts):
* every knob concrete, record overrides over config.ts factory pins. Read
* fresh on every call — the record is a small file and turns are rare, so
* no caching layer (stale toggles after a settings PUT would be worse).
*/
export function effectiveSettings(): EffectiveSettings {
return resolveSettings(settingsStore.readSettings(), MODEL_PINS);
}