@heyhuynhgiabuu/pi-diff 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +55 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/diff.d.ts +14 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +72 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1738 -0
- package/dist/index.js.map +1 -0
- package/dist/review/command.d.ts +2 -0
- package/dist/review/command.d.ts.map +1 -0
- package/dist/review/command.js +365 -0
- package/dist/review/command.js.map +1 -0
- package/dist/review/export.d.ts +7 -0
- package/dist/review/export.d.ts.map +1 -0
- package/dist/review/export.js +77 -0
- package/dist/review/export.js.map +1 -0
- package/dist/review/file-preview.d.ts +9 -0
- package/dist/review/file-preview.d.ts.map +1 -0
- package/dist/review/file-preview.js +228 -0
- package/dist/review/file-preview.js.map +1 -0
- package/dist/review/git.d.ts +49 -0
- package/dist/review/git.d.ts.map +1 -0
- package/dist/review/git.js +200 -0
- package/dist/review/git.js.map +1 -0
- package/dist/review/hunk-preview.d.ts +25 -0
- package/dist/review/hunk-preview.d.ts.map +1 -0
- package/dist/review/hunk-preview.js +973 -0
- package/dist/review/hunk-preview.js.map +1 -0
- package/dist/review/interactive.d.ts +27 -0
- package/dist/review/interactive.d.ts.map +1 -0
- package/dist/review/interactive.js +146 -0
- package/dist/review/interactive.js.map +1 -0
- package/dist/review/model.d.ts +33 -0
- package/dist/review/model.d.ts.map +1 -0
- package/dist/review/model.js +208 -0
- package/dist/review/model.js.map +1 -0
- package/dist/review/prompt.d.ts +4 -0
- package/dist/review/prompt.d.ts.map +1 -0
- package/dist/review/prompt.js +43 -0
- package/dist/review/prompt.js.map +1 -0
- package/dist/review/session.d.ts +69 -0
- package/dist/review/session.d.ts.map +1 -0
- package/dist/review/session.js +190 -0
- package/dist/review/session.js.map +1 -0
- package/dist/review/tui.d.ts +57 -0
- package/dist/review/tui.d.ts.map +1 -0
- package/dist/review/tui.js +486 -0
- package/dist/review/tui.js.map +1 -0
- package/media/review-diff.png +0 -0
- package/package.json +69 -5
- package/prompts/review-diff-agent.md +19 -0
- package/biome.json +0 -29
- package/src/index.ts +0 -1635
- package/tsconfig.json +0 -19
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ReviewDiff, ReviewDiffMode, ReviewFileDiff, ReviewHunk } from "./git.js";
|
|
2
|
+
export declare const REVIEW_DIFF_SESSION_TYPE = "review-diff-session";
|
|
3
|
+
export type ReviewCommentStatus = "approved" | "dismissed" | "edited";
|
|
4
|
+
export interface ReviewDraftComment {
|
|
5
|
+
id: string;
|
|
6
|
+
file: string;
|
|
7
|
+
line?: number;
|
|
8
|
+
hunkId?: string;
|
|
9
|
+
previewLineId?: string;
|
|
10
|
+
oldNum?: number | null;
|
|
11
|
+
newNum?: number | null;
|
|
12
|
+
lineType?: ReviewHunk["lines"][number]["type"];
|
|
13
|
+
body: string;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
status: ReviewCommentStatus;
|
|
16
|
+
originalBody?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ReviewDiffSession {
|
|
19
|
+
mode: ReviewDiffMode;
|
|
20
|
+
selectedFile?: string;
|
|
21
|
+
selectedHunk?: string;
|
|
22
|
+
selectedPreviewLineId?: string;
|
|
23
|
+
previewScrollTop?: number;
|
|
24
|
+
selectedCommentId?: string;
|
|
25
|
+
comments: ReviewDraftComment[];
|
|
26
|
+
updatedAt: number;
|
|
27
|
+
submittedAt?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function createReviewDiffSession(mode: ReviewDiffMode): ReviewDiffSession;
|
|
30
|
+
export declare function cloneReviewDiffSession(session: ReviewDiffSession): ReviewDiffSession;
|
|
31
|
+
export declare function getLatestReviewDiffSession(ctx: {
|
|
32
|
+
sessionManager: {
|
|
33
|
+
getBranch(): Array<{
|
|
34
|
+
type: string;
|
|
35
|
+
customType?: string;
|
|
36
|
+
data?: unknown;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
}): ReviewDiffSession | null;
|
|
40
|
+
export declare function persistReviewDiffSession(pi: {
|
|
41
|
+
appendEntry(customType: string, data?: unknown): void;
|
|
42
|
+
}, session: ReviewDiffSession): void;
|
|
43
|
+
export declare function syncReviewDiffSession(session: ReviewDiffSession, diff: ReviewDiff): ReviewDiffSession;
|
|
44
|
+
export declare function getSelectedFile(diff: ReviewDiff, session: ReviewDiffSession): ReviewFileDiff | null;
|
|
45
|
+
export declare function getSelectedHunk(diff: ReviewDiff, session: ReviewDiffSession): ReviewHunk | null;
|
|
46
|
+
export declare function getSelectedComment(session: ReviewDiffSession): ReviewDraftComment | null;
|
|
47
|
+
export declare function moveSelectedFile(session: ReviewDiffSession, diff: ReviewDiff, delta: number): void;
|
|
48
|
+
export declare function moveSelectedHunk(session: ReviewDiffSession, diff: ReviewDiff, delta: number): void;
|
|
49
|
+
export declare function moveSelectedComment(session: ReviewDiffSession, delta: number): void;
|
|
50
|
+
export declare function createDraftComment(input: {
|
|
51
|
+
session: ReviewDiffSession;
|
|
52
|
+
file: string;
|
|
53
|
+
body: string;
|
|
54
|
+
line?: number;
|
|
55
|
+
hunkId?: string;
|
|
56
|
+
previewLineId?: string;
|
|
57
|
+
oldNum?: number | null;
|
|
58
|
+
newNum?: number | null;
|
|
59
|
+
lineType?: ReviewHunk["lines"][number]["type"];
|
|
60
|
+
now?: Date;
|
|
61
|
+
}): ReviewDraftComment;
|
|
62
|
+
export declare function addDraftComment(session: ReviewDiffSession, comment: ReviewDraftComment): void;
|
|
63
|
+
export declare function editSelectedComment(session: ReviewDiffSession, body: string): ReviewDraftComment | null;
|
|
64
|
+
export declare function deleteSelectedComment(session: ReviewDiffSession): ReviewDraftComment | null;
|
|
65
|
+
export declare function toggleSelectedCommentStatus(session: ReviewDiffSession, status: Exclude<ReviewCommentStatus, "edited">): ReviewDraftComment | null;
|
|
66
|
+
export declare function approveAllComments(session: ReviewDiffSession): void;
|
|
67
|
+
export declare function getSubmittableComments(session: ReviewDiffSession): ReviewDraftComment[];
|
|
68
|
+
export declare function countCommentStatuses(session: ReviewDiffSession): Record<ReviewCommentStatus, number>;
|
|
69
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/review/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REVIEW_DIFF_SESSION_TYPE = void 0;
|
|
4
|
+
exports.createReviewDiffSession = createReviewDiffSession;
|
|
5
|
+
exports.cloneReviewDiffSession = cloneReviewDiffSession;
|
|
6
|
+
exports.getLatestReviewDiffSession = getLatestReviewDiffSession;
|
|
7
|
+
exports.persistReviewDiffSession = persistReviewDiffSession;
|
|
8
|
+
exports.syncReviewDiffSession = syncReviewDiffSession;
|
|
9
|
+
exports.getSelectedFile = getSelectedFile;
|
|
10
|
+
exports.getSelectedHunk = getSelectedHunk;
|
|
11
|
+
exports.getSelectedComment = getSelectedComment;
|
|
12
|
+
exports.moveSelectedFile = moveSelectedFile;
|
|
13
|
+
exports.moveSelectedHunk = moveSelectedHunk;
|
|
14
|
+
exports.moveSelectedComment = moveSelectedComment;
|
|
15
|
+
exports.createDraftComment = createDraftComment;
|
|
16
|
+
exports.addDraftComment = addDraftComment;
|
|
17
|
+
exports.editSelectedComment = editSelectedComment;
|
|
18
|
+
exports.deleteSelectedComment = deleteSelectedComment;
|
|
19
|
+
exports.toggleSelectedCommentStatus = toggleSelectedCommentStatus;
|
|
20
|
+
exports.approveAllComments = approveAllComments;
|
|
21
|
+
exports.getSubmittableComments = getSubmittableComments;
|
|
22
|
+
exports.countCommentStatuses = countCommentStatuses;
|
|
23
|
+
exports.REVIEW_DIFF_SESSION_TYPE = "review-diff-session";
|
|
24
|
+
function createReviewDiffSession(mode) {
|
|
25
|
+
return {
|
|
26
|
+
mode,
|
|
27
|
+
comments: [],
|
|
28
|
+
previewScrollTop: 0,
|
|
29
|
+
updatedAt: Date.now(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function cloneReviewDiffSession(session) {
|
|
33
|
+
return {
|
|
34
|
+
...session,
|
|
35
|
+
comments: session.comments.map((comment) => ({ ...comment })),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function getLatestReviewDiffSession(ctx) {
|
|
39
|
+
const entries = ctx.sessionManager.getBranch();
|
|
40
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
41
|
+
const entry = entries[i];
|
|
42
|
+
if (entry.type === "custom" && entry.customType === exports.REVIEW_DIFF_SESSION_TYPE && entry.data?.mode) {
|
|
43
|
+
return entry.data;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
function persistReviewDiffSession(pi, session) {
|
|
49
|
+
session.updatedAt = Date.now();
|
|
50
|
+
pi.appendEntry(exports.REVIEW_DIFF_SESSION_TYPE, session);
|
|
51
|
+
}
|
|
52
|
+
function syncReviewDiffSession(session, diff) {
|
|
53
|
+
const next = cloneReviewDiffSession(session);
|
|
54
|
+
const previousFile = next.selectedFile;
|
|
55
|
+
const previousHunk = next.selectedHunk;
|
|
56
|
+
const selectedFile = getSelectedFile(diff, next) ?? diff.files[0] ?? null;
|
|
57
|
+
next.selectedFile = selectedFile?.path;
|
|
58
|
+
const selectedHunk = selectedFile ? (getSelectedHunk(diff, next) ?? selectedFile.hunks[0] ?? null) : null;
|
|
59
|
+
next.selectedHunk = selectedHunk?.id;
|
|
60
|
+
if (next.selectedFile !== previousFile || next.selectedHunk !== previousHunk) {
|
|
61
|
+
next.previewScrollTop = 0;
|
|
62
|
+
}
|
|
63
|
+
if (next.comments.length === 0) {
|
|
64
|
+
next.selectedCommentId = undefined;
|
|
65
|
+
}
|
|
66
|
+
else if (!next.selectedCommentId || !next.comments.some((comment) => comment.id === next.selectedCommentId)) {
|
|
67
|
+
next.selectedCommentId = next.comments[0]?.id;
|
|
68
|
+
}
|
|
69
|
+
return next;
|
|
70
|
+
}
|
|
71
|
+
function getSelectedFile(diff, session) {
|
|
72
|
+
if (!session.selectedFile)
|
|
73
|
+
return null;
|
|
74
|
+
return diff.files.find((file) => file.path === session.selectedFile || file.oldPath === session.selectedFile) ?? null;
|
|
75
|
+
}
|
|
76
|
+
function getSelectedHunk(diff, session) {
|
|
77
|
+
const file = getSelectedFile(diff, session);
|
|
78
|
+
if (!file || !session.selectedHunk)
|
|
79
|
+
return null;
|
|
80
|
+
return file.hunks.find((hunk) => hunk.id === session.selectedHunk) ?? null;
|
|
81
|
+
}
|
|
82
|
+
function getSelectedComment(session) {
|
|
83
|
+
if (!session.selectedCommentId)
|
|
84
|
+
return null;
|
|
85
|
+
return session.comments.find((comment) => comment.id === session.selectedCommentId) ?? null;
|
|
86
|
+
}
|
|
87
|
+
function moveSelectedFile(session, diff, delta) {
|
|
88
|
+
if (diff.files.length === 0) {
|
|
89
|
+
session.selectedFile = undefined;
|
|
90
|
+
session.selectedHunk = undefined;
|
|
91
|
+
session.previewScrollTop = 0;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const currentPath = getSelectedFile(diff, session)?.path;
|
|
95
|
+
const currentIndex = Math.max(0, diff.files.findIndex((file) => file.path === currentPath));
|
|
96
|
+
const nextIndex = clampIndex(currentIndex + delta, diff.files.length);
|
|
97
|
+
const file = diff.files[nextIndex];
|
|
98
|
+
session.selectedFile = file?.path;
|
|
99
|
+
session.selectedHunk = file?.hunks[0]?.id;
|
|
100
|
+
session.selectedPreviewLineId = undefined;
|
|
101
|
+
session.previewScrollTop = 0;
|
|
102
|
+
}
|
|
103
|
+
function moveSelectedHunk(session, diff, delta) {
|
|
104
|
+
const file = getSelectedFile(diff, session);
|
|
105
|
+
if (!file || file.hunks.length === 0) {
|
|
106
|
+
session.selectedHunk = undefined;
|
|
107
|
+
session.previewScrollTop = 0;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const currentId = getSelectedHunk(diff, session)?.id;
|
|
111
|
+
const currentIndex = Math.max(0, file.hunks.findIndex((hunk) => hunk.id === currentId));
|
|
112
|
+
const nextIndex = clampIndex(currentIndex + delta, file.hunks.length);
|
|
113
|
+
session.selectedHunk = file.hunks[nextIndex]?.id;
|
|
114
|
+
session.selectedPreviewLineId = undefined;
|
|
115
|
+
session.previewScrollTop = 0;
|
|
116
|
+
}
|
|
117
|
+
function moveSelectedComment(session, delta) {
|
|
118
|
+
if (session.comments.length === 0) {
|
|
119
|
+
session.selectedCommentId = undefined;
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const currentIndex = Math.max(0, session.comments.findIndex((comment) => comment.id === session.selectedCommentId));
|
|
123
|
+
const nextIndex = clampIndex(currentIndex + delta, session.comments.length);
|
|
124
|
+
session.selectedCommentId = session.comments[nextIndex]?.id;
|
|
125
|
+
}
|
|
126
|
+
function createDraftComment(input) {
|
|
127
|
+
const next = input.session.comments.length + 1;
|
|
128
|
+
return {
|
|
129
|
+
id: `C${String(next).padStart(3, "0")}`,
|
|
130
|
+
file: input.file,
|
|
131
|
+
line: input.line,
|
|
132
|
+
hunkId: input.hunkId,
|
|
133
|
+
previewLineId: input.previewLineId,
|
|
134
|
+
oldNum: input.oldNum,
|
|
135
|
+
newNum: input.newNum,
|
|
136
|
+
lineType: input.lineType,
|
|
137
|
+
body: input.body,
|
|
138
|
+
createdAt: (input.now ?? new Date()).toISOString(),
|
|
139
|
+
status: "approved",
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function addDraftComment(session, comment) {
|
|
143
|
+
session.comments.push(comment);
|
|
144
|
+
session.selectedCommentId = comment.id;
|
|
145
|
+
}
|
|
146
|
+
function editSelectedComment(session, body) {
|
|
147
|
+
const comment = getSelectedComment(session);
|
|
148
|
+
if (!comment)
|
|
149
|
+
return null;
|
|
150
|
+
if (comment.body !== body) {
|
|
151
|
+
comment.originalBody ??= comment.body;
|
|
152
|
+
comment.body = body;
|
|
153
|
+
comment.status = "edited";
|
|
154
|
+
}
|
|
155
|
+
return comment;
|
|
156
|
+
}
|
|
157
|
+
function deleteSelectedComment(session) {
|
|
158
|
+
const currentIndex = session.comments.findIndex((comment) => comment.id === session.selectedCommentId);
|
|
159
|
+
if (currentIndex < 0)
|
|
160
|
+
return null;
|
|
161
|
+
const [removed] = session.comments.splice(currentIndex, 1);
|
|
162
|
+
session.selectedCommentId = session.comments[Math.min(currentIndex, session.comments.length - 1)]?.id;
|
|
163
|
+
return removed ?? null;
|
|
164
|
+
}
|
|
165
|
+
function toggleSelectedCommentStatus(session, status) {
|
|
166
|
+
const comment = getSelectedComment(session);
|
|
167
|
+
if (!comment)
|
|
168
|
+
return null;
|
|
169
|
+
comment.status = comment.status === status ? "approved" : status;
|
|
170
|
+
return comment;
|
|
171
|
+
}
|
|
172
|
+
function approveAllComments(session) {
|
|
173
|
+
for (const comment of session.comments) {
|
|
174
|
+
comment.status = comment.status === "edited" ? "edited" : "approved";
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function getSubmittableComments(session) {
|
|
178
|
+
return session.comments.filter((comment) => comment.status === "approved" || comment.status === "edited");
|
|
179
|
+
}
|
|
180
|
+
function countCommentStatuses(session) {
|
|
181
|
+
return {
|
|
182
|
+
approved: session.comments.filter((comment) => comment.status === "approved").length,
|
|
183
|
+
dismissed: session.comments.filter((comment) => comment.status === "dismissed").length,
|
|
184
|
+
edited: session.comments.filter((comment) => comment.status === "edited").length,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function clampIndex(index, length) {
|
|
188
|
+
return Math.max(0, Math.min(index, length - 1));
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/review/session.ts"],"names":[],"mappings":";;;AAiCA,0DAOC;AAED,wDAKC;AAED,gEAWC;AAED,4DAMC;AAED,sDAiBC;AAED,0CAGC;AAED,0CAIC;AAED,gDAGC;AAED,4CAkBC;AAED,4CAgBC;AAED,kDAWC;AAED,gDA0BC;AAED,0CAGC;AAED,kDASC;AAED,sDAMC;AAED,kEAQC;AAED,gDAIC;AAED,wDAEC;AAED,oDAMC;AAxOY,QAAA,wBAAwB,GAAG,qBAAqB,CAAC;AA+B9D,SAAgB,uBAAuB,CAAC,IAAoB;IAC3D,OAAO;QACN,IAAI;QACJ,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,CAAC;QACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACrB,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAA0B;IAChE,OAAO;QACN,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7D,CAAC;AACH,CAAC;AAED,SAAgB,0BAA0B,CAAC,GAE1C;IACA,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAoE,CAAC;QAC5F,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,gCAAwB,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAClG,OAAO,KAAK,CAAC,IAAI,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAgB,wBAAwB,CACvC,EAA6D,EAC7D,OAA0B;IAE1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,EAAE,CAAC,WAAW,CAAC,gCAAwB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAA0B,EAAE,IAAgB;IACjF,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1E,IAAI,CAAC,YAAY,GAAG,YAAY,EAAE,IAAI,CAAC;IACvC,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1G,IAAI,CAAC,YAAY,GAAG,YAAY,EAAE,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QAC9E,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACpC,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/G,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAgB,eAAe,CAAC,IAAgB,EAAE,OAA0B;IAC3E,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AACvH,CAAC;AAED,SAAgB,eAAe,CAAC,IAAgB,EAAE,OAA0B;IAC3E,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAA0B;IAC5D,IAAI,CAAC,OAAO,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC;AAC7F,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAA0B,EAAE,IAAgB,EAAE,KAAa;IAC3F,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7B,OAAO;IACR,CAAC;IACD,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CACzD,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,CAAC,YAAY,GAAG,IAAI,EAAE,IAAI,CAAC;IAClC,OAAO,CAAC,YAAY,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC1C,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAA0B,EAAE,IAAgB,EAAE,KAAa;IAC3F,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;QACjC,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC7B,OAAO;IACR,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CACrD,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;IACjD,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAC1C,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAA0B,EAAE,KAAa;IAC5E,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACtC,OAAO;IACR,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CACjF,CAAC;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,GAAG,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;AAC7D,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAWlC;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,OAAO;QACN,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAClD,MAAM,EAAE,UAAU;KAClB,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,OAA0B,EAAE,OAA2B;IACtF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAA0B,EAAE,IAAY;IAC3E,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;QACtC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAA0B;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvG,IAAI,YAAY,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACtG,OAAO,OAAO,IAAI,IAAI,CAAC;AACxB,CAAC;AAED,SAAgB,2BAA2B,CAC1C,OAA0B,EAC1B,MAA8C;IAE9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAA0B;IAC5D,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,CAAC;AACF,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAA0B;IAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC3G,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAA0B;IAC9D,OAAO;QACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QACpF,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;QACtF,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;KAChF,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAAc;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Theme } from "@mariozechner/pi-coding-agent";
|
|
2
|
+
import { renderReviewFilePreview } from "./file-preview.js";
|
|
3
|
+
import { type ReviewDiff } from "./git.js";
|
|
4
|
+
import { type ReviewDiffSession } from "./session.js";
|
|
5
|
+
export type ReviewDiffPaneAction = {
|
|
6
|
+
type: "cancel";
|
|
7
|
+
} | {
|
|
8
|
+
type: "refresh";
|
|
9
|
+
} | {
|
|
10
|
+
type: "add-comment";
|
|
11
|
+
} | {
|
|
12
|
+
type: "edit-comment";
|
|
13
|
+
} | {
|
|
14
|
+
type: "open-location";
|
|
15
|
+
} | {
|
|
16
|
+
type: "copy-location";
|
|
17
|
+
} | {
|
|
18
|
+
type: "delete-comment";
|
|
19
|
+
} | {
|
|
20
|
+
type: "approve-all";
|
|
21
|
+
} | {
|
|
22
|
+
type: "submit";
|
|
23
|
+
};
|
|
24
|
+
interface ReviewDiffPaneOptions {
|
|
25
|
+
requestRender?: () => void;
|
|
26
|
+
renderFilePreview?: typeof renderReviewFilePreview;
|
|
27
|
+
}
|
|
28
|
+
export declare class ReviewDiffPane {
|
|
29
|
+
private diff;
|
|
30
|
+
private session;
|
|
31
|
+
private theme;
|
|
32
|
+
private onDone;
|
|
33
|
+
private cachedWidth?;
|
|
34
|
+
private cachedLines?;
|
|
35
|
+
private focus;
|
|
36
|
+
private previewKey?;
|
|
37
|
+
private previewLines?;
|
|
38
|
+
private previewPending;
|
|
39
|
+
private previewRenderCache;
|
|
40
|
+
private readonly requestRender?;
|
|
41
|
+
private readonly renderFilePreview;
|
|
42
|
+
constructor(diff: ReviewDiff, session: ReviewDiffSession, theme: Theme, onDone: (action: ReviewDiffPaneAction) => void, options?: ReviewDiffPaneOptions);
|
|
43
|
+
handleInput(data: string): void;
|
|
44
|
+
render(width: number): string[];
|
|
45
|
+
invalidate(): void;
|
|
46
|
+
updateReviewState(diff: ReviewDiff, session: ReviewDiffSession): void;
|
|
47
|
+
private ensurePreview;
|
|
48
|
+
private renderFixedPreviewRows;
|
|
49
|
+
private applyPreviewSelection;
|
|
50
|
+
private move;
|
|
51
|
+
private movePage;
|
|
52
|
+
private moveToBoundary;
|
|
53
|
+
private focusHeader;
|
|
54
|
+
private styleForFocus;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/review/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAoE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ7G,OAAO,EAKN,KAAK,iBAAiB,EAGtB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAYtB,UAAU,qBAAqB;IAC9B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,uBAAuB,CAAC;CACnD;AAED,qBAAa,cAAc;IAYzB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IAdf,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,KAAK,CAAuD;IACpE,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;gBAG1D,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EACtD,OAAO,GAAE,qBAA0B;IAMpC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA0H/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAuL/B,UAAU,IAAI,IAAI;IAKlB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAUrE,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,IAAI;IAgBZ,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;CAGrB"}
|