import type { ClawdbotConfig } from "../config/config.js"; import { applyBootstrapHookOverrides } from "./bootstrap-hooks.js"; import { filterBootstrapFilesForSession, loadWorkspaceBootstrapFiles, type WorkspaceBootstrapFile, } from "./workspace.js"; import { buildBootstrapContextFiles, resolveBootstrapMaxChars } from "./pi-embedded-helpers.js"; import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; export function makeBootstrapWarn(params: { sessionLabel: string; warn?: (message: string) => void; }): ((message: string) => void) | undefined { if (!params.warn) return undefined; return (message: string) => params.warn?.(`${message} (sessionKey=${params.sessionLabel})`); } export async function resolveBootstrapFilesForRun(params: { workspaceDir: string; config?: ClawdbotConfig; sessionKey?: string; sessionId?: string; agentId?: string; }): Promise { const sessionKey = params.sessionKey ?? params.sessionId; const bootstrapFiles = filterBootstrapFilesForSession( await loadWorkspaceBootstrapFiles(params.workspaceDir), sessionKey, ); return applyBootstrapHookOverrides({ files: bootstrapFiles, workspaceDir: params.workspaceDir, config: params.config, sessionKey: params.sessionKey, sessionId: params.sessionId, agentId: params.agentId, }); } export async function resolveBootstrapContextForRun(params: { workspaceDir: string; config?: ClawdbotConfig; sessionKey?: string; sessionId?: string; agentId?: string; warn?: (message: string) => void; }): Promise<{ bootstrapFiles: WorkspaceBootstrapFile[]; contextFiles: EmbeddedContextFile[]; }> { const bootstrapFiles = await resolveBootstrapFilesForRun(params); const contextFiles = buildBootstrapContextFiles(bootstrapFiles, { maxChars: resolveBootstrapMaxChars(params.config), warn: params.warn, }); return { bootstrapFiles, contextFiles }; }