Files
shockbot/toolState.ts

85 lines
2.4 KiB
TypeScript

import { log } from "./utils/cli.ts";
import type { DiffCoverageState } from "./utils/diffCoverage.ts";
import {
type ProgressComment,
type ProgressCommentType,
parseProgressComment,
} from "./utils/progressComment.ts";
import type { TodoTracker } from "./utils/todoTracking.ts";
export type BackgroundProcess = {
pid: number;
outputPath: string;
pidPath: string;
};
export type BrowserDaemon = { binDir: string; error?: never } | { binDir?: never; error: string };
export type StoredPushDest = {
remoteName: string;
remoteBranch: string;
localBranch: string;
};
export type CommentableLines = { RIGHT: Set<number>; LEFT: Set<number> };
export interface ToolState {
pushUrl?: string;
pushDest?: StoredPushDest;
initialHead?: { kind: "branch"; name: string } | { kind: "detached"; sha: string };
issueNumber?: number;
checkoutSha?: string;
commentableLinesByFile?: Map<string, CommentableLines>;
commentableLinesPullNumber?: number;
commentableLinesCheckoutSha?: string | undefined;
beforeSha?: string;
selectedMode?: string;
prepushFailureCount: number;
backgroundProcesses: Map<string, BackgroundProcess>;
browserDaemon?: BrowserDaemon | undefined;
review?: {
id: number;
nodeId: string;
reviewedSha: string | undefined;
};
reviewReplies?: Map<
number,
{ commentId: number; url: string | undefined; bodyWithFooter: string }
>;
dependencyInstallation?: {
status: "not_started" | "in_progress" | "completed" | "failed";
promise: Promise<unknown[]> | undefined;
results: unknown[] | undefined;
};
progressComment: ProgressComment | null | undefined;
hadProgressComment: boolean;
lastProgressBody?: string;
wasUpdated?: boolean;
finalSummaryWritten?: boolean;
existingPlanCommentId?: number;
previousPlanBody?: string;
output?: string | undefined;
model?: string | undefined;
todoTracker?: TodoTracker | undefined;
diffCoverage?: DiffCoverageState | undefined;
}
interface InitToolStateParams {
progressComment: { id: string; type: ProgressCommentType } | undefined;
}
export function initToolState(params: InitToolStateParams): ToolState {
const resolved = parseProgressComment(params.progressComment);
if (resolved) {
log.info(`» using pre-created progress comment: ${resolved.id} (${resolved.type})`);
}
return {
progressComment: resolved,
hadProgressComment: !!resolved,
prepushFailureCount: 0,
backgroundProcesses: new Map(),
};
}