import type { ExtensionContext } from "@earendil-works/pi-coding-agent"; import { loadConfig, resolveArtifactRoot, saveActiveLoadout } from "../config/config.js"; import { renderLoadoutCatalog, renderLoadoutList } from "../loadout/loadouts.js"; import { clearCastState, listLatestCastStates, listResumableCastStates, listRevivableCastStates, loadActiveCastState } from "./castStateRepository.js"; import { renderGrid, resolvePipeline } from "../runtime/pipeline.js"; import type { ArtifactCatalog, CastStateRepository, ConfigRepository, EnvironmentLookup, Logger, PipelinePresenter } from "../application/index.js"; import { renderCastList } from "./castCatalog.js"; export function createConfigRepository(): ConfigRepository { return { load: loadConfig, saveActiveLoadout, resolveArtifactRoot }; } export function createPipelinePresenter(): PipelinePresenter { return { resolve: resolvePipeline, renderGrid, renderLoadoutList, renderLoadoutCatalog }; } export function createCastStateRepository(): CastStateRepository { return { loadActive: loadActiveCastState, listLatest: listLatestCastStates, listResumable: listResumableCastStates, listRevivable: listRevivableCastStates, }; } export function createArtifactCatalog(): ArtifactCatalog { return { renderCastList }; } export function createProcessEnvironmentLookup(env: NodeJS.ProcessEnv = process.env): EnvironmentLookup { return { get: (name) => env[name] }; } export function createConsoleLogger(logger: Pick = console): Logger { const write = (level: "info" | "warn" | "error", message: string, details?: Record) => { if (details && Object.keys(details).length > 0) logger[level](`[pi-materia] ${message}`, details); else logger[level](`[pi-materia] ${message}`); }; return { info: (message, details) => write("info", message, details), warn: (message, details) => write("warn", message, details), error: (message, details) => write("error", message, details), }; }