Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/strata/types.ts

Raw
export type Source = { kind: "working" | "staged" | "base"; ref?: string };
export type DiffLine = {
	kind: "context" | "add" | "delete" | "meta";
	text: string;
	oldLine?: number;
	newLine?: number;
};
export type Hunk = {
	id: string;
	path: string;
	oldPath?: string;
	header: string;
	lines: DiffLine[];
};
export type Snapshot = {
	id: string;
	repoRoot: string;
	source: Source;
	base: string;
	head: string;
	hunks: Hunk[];
	skipped: Array<{ path: string; reason: string }>;
};
export type Layer = {
	id: string;
	title: string;
	summary: string;
	hunks: Array<{ id: string; summary: string }>;
	flow?: string[];
};
export type Plan = {
	summary: string;
	cohorts: Array<{ title: string; layers: Layer[] }>;
};
export type Finding = {
	id: string;
	hunkId: string;
	side: "old" | "new";
	line: number;
	severity: "question" | "minor" | "major";
	text: string;
};
export type Draft = {
	reviewed: string[];
	findings: Finding[];
	notes: string;
};
export type ForgeComment = {
	id: string;
	url: string;
	author: string;
	body: string;
	kind: "discussion" | "review" | "inline";
	path?: string;
	side?: "old" | "new";
	line?: number;
	commit?: string;
	replyTo?: string;
	outdated: boolean;
};
export type ForgeReview = {
	provider: string;
	providerLabel: string;
	repository: string;
	number: number;
	url: string;
	title: string;
	body: string;
	author: string;
	baseRef: string;
	baseSha: string;
	headRef: string;
	headSha: string;
	checkoutBranch: string;
	comments: ForgeComment[];
};
export type Review = {
	snapshot: Snapshot;
	plan: Plan;
	draft: Draft;
	forge?: ForgeReview;
};
export type Feedback = Draft & { snapshotId: string };
export type AskExchange = {
	question: string;
	answer: string;
	hunkId: string | null;
};
export type AskThread = {
	layerId: string | null;
	messages: AskExchange[];
};
export type AskRequest = {
	layerId: string | null;
	hunkId: string | null;
	question: string;
	history: AskExchange[];
};
export type ReviewServer = {
	url: string;
	close(): Promise<void>;
};
export type ReviewLifecycleEvent =
	| { type: "draft"; draft: Draft }
	| { type: "verified-current" }
	| { type: "answering" }
	| { type: "refreshing" }
	| { type: "ready"; review: Review }
	| { type: "stale" }
	| { type: "feedback-sent" }
	| { type: "error"; message: string };
export type ServerOptions = {
	review: Review;
	isCurrent(signal: AbortSignal): Promise<boolean>;
	refresh(signal: AbortSignal): Promise<Review>;
	ask(request: AskRequest, signal: AbortSignal): Promise<string>;
	save(draft: Draft): void;
	submit(feedback: Feedback): Promise<void>;
	onLifecycle?(event: ReviewLifecycleEvent): void;
	onClose?(): void;
};