@heyhuynhgiabuu/pi-diff 0.6.4 → 0.6.6

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.
Files changed (54) hide show
  1. package/README.md +37 -181
  2. package/dist/edit-guard.d.ts +2 -0
  3. package/dist/edit-guard.d.ts.map +1 -0
  4. package/dist/edit-guard.js +34 -0
  5. package/dist/edit-guard.js.map +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +49 -160
  8. package/dist/index.js.map +1 -1
  9. package/package.json +7 -49
  10. package/dist/cli.d.ts +0 -3
  11. package/dist/cli.d.ts.map +0 -1
  12. package/dist/cli.js +0 -53
  13. package/dist/cli.js.map +0 -1
  14. package/dist/core/resolve-lines.d.ts +0 -45
  15. package/dist/core/resolve-lines.d.ts.map +0 -1
  16. package/dist/core/resolve-lines.js +0 -204
  17. package/dist/core/resolve-lines.js.map +0 -1
  18. package/dist/review/command.d.ts +0 -3
  19. package/dist/review/command.d.ts.map +0 -1
  20. package/dist/review/command.js +0 -492
  21. package/dist/review/command.js.map +0 -1
  22. package/dist/review/export.d.ts +0 -7
  23. package/dist/review/export.d.ts.map +0 -1
  24. package/dist/review/export.js +0 -74
  25. package/dist/review/export.js.map +0 -1
  26. package/dist/review/file-preview.d.ts +0 -9
  27. package/dist/review/file-preview.d.ts.map +0 -1
  28. package/dist/review/file-preview.js +0 -225
  29. package/dist/review/file-preview.js.map +0 -1
  30. package/dist/review/hunk-bridge.d.ts +0 -54
  31. package/dist/review/hunk-bridge.d.ts.map +0 -1
  32. package/dist/review/hunk-bridge.js +0 -105
  33. package/dist/review/hunk-bridge.js.map +0 -1
  34. package/dist/review/interactive.d.ts +0 -27
  35. package/dist/review/interactive.d.ts.map +0 -1
  36. package/dist/review/interactive.js +0 -137
  37. package/dist/review/interactive.js.map +0 -1
  38. package/dist/review/model.d.ts +0 -33
  39. package/dist/review/model.d.ts.map +0 -1
  40. package/dist/review/model.js +0 -197
  41. package/dist/review/model.js.map +0 -1
  42. package/dist/review/prompt.d.ts +0 -4
  43. package/dist/review/prompt.d.ts.map +0 -1
  44. package/dist/review/prompt.js +0 -40
  45. package/dist/review/prompt.js.map +0 -1
  46. package/dist/review/session.d.ts +0 -69
  47. package/dist/review/session.d.ts.map +0 -1
  48. package/dist/review/session.js +0 -168
  49. package/dist/review/session.js.map +0 -1
  50. package/dist/review/tui.d.ts +0 -57
  51. package/dist/review/tui.d.ts.map +0 -1
  52. package/dist/review/tui.js +0 -482
  53. package/dist/review/tui.js.map +0 -1
  54. package/prompts/review-diff-agent.md +0 -19
@@ -1,225 +0,0 @@
1
- import { extname } from "node:path";
2
- import { codeToANSI } from "@shikijs/cli";
3
- const THEME = process.env.DIFF_THEME ?? "github-dark";
4
- const MAX_HL_CHARS = 80_000;
5
- const CACHE_LIMIT = 192;
6
- const BG_ADD = "\x1b[48;2;22;38;32m";
7
- const BG_DEL = "\x1b[48;2;45;25;25m";
8
- const BG_CTX = "\x1b[49m";
9
- const RST = "\x1b[0m";
10
- // Binary file extensions — never try to Shiki-render these as code.
11
- const BINARY_EXTS = new Set([
12
- "png",
13
- "jpg",
14
- "jpeg",
15
- "gif",
16
- "webp",
17
- "ico",
18
- "bmp",
19
- "tiff",
20
- "tif",
21
- "pdf",
22
- "zip",
23
- "tar",
24
- "gz",
25
- "bz2",
26
- "xz",
27
- "7z",
28
- "rar",
29
- "bin",
30
- "exe",
31
- "dll",
32
- "so",
33
- "dylib",
34
- "o",
35
- "a",
36
- "woff",
37
- "woff2",
38
- "ttf",
39
- "otf",
40
- "eot",
41
- "mp3",
42
- "mp4",
43
- "avi",
44
- "mov",
45
- "mkv",
46
- "flac",
47
- "wav",
48
- "ogg",
49
- "aac",
50
- "db",
51
- "sqlite",
52
- "sqlite3",
53
- ]);
54
- function isBinaryPath(filePath) {
55
- const ext = extname(filePath).slice(1).toLowerCase();
56
- return BINARY_EXTS.has(ext);
57
- }
58
- // Return a raw background ANSI escape. Pi theme.bg(token, text) wraps text and is
59
- // not a raw escape provider; calling it as bg(token) can throw and blank the
60
- // preview. Use getBgAnsi() when available, otherwise fall back to a stable RGB.
61
- function bgAnsi(theme, token, fallback) {
62
- if (typeof theme?.getBgAnsi !== "function")
63
- return fallback;
64
- try {
65
- const bg = theme.getBgAnsi(token);
66
- return bg || fallback;
67
- }
68
- catch {
69
- return fallback;
70
- }
71
- }
72
- const EXT_LANG = {
73
- ts: "typescript",
74
- tsx: "tsx",
75
- js: "javascript",
76
- jsx: "jsx",
77
- mjs: "javascript",
78
- cjs: "javascript",
79
- py: "python",
80
- rb: "ruby",
81
- rs: "rust",
82
- go: "go",
83
- java: "java",
84
- c: "c",
85
- cpp: "cpp",
86
- h: "c",
87
- hpp: "cpp",
88
- cs: "csharp",
89
- swift: "swift",
90
- kt: "kotlin",
91
- html: "html",
92
- css: "css",
93
- scss: "scss",
94
- json: "json",
95
- yaml: "yaml",
96
- yml: "yaml",
97
- toml: "toml",
98
- md: "markdown",
99
- sql: "sql",
100
- sh: "bash",
101
- bash: "bash",
102
- zsh: "bash",
103
- lua: "lua",
104
- php: "php",
105
- dart: "dart",
106
- xml: "xml",
107
- graphql: "graphql",
108
- svelte: "svelte",
109
- vue: "vue",
110
- };
111
- const cache = new Map();
112
- codeToANSI("", "typescript", THEME).catch(() => { });
113
- export async function renderReviewFilePreview(input) {
114
- // Binary files must not be Shiki-rendered: their bytes, when decoded as UTF-8, can
115
- // produce wide Unicode characters whose display width exceeds our column budget and
116
- // crashes Pi TUI's renderer.
117
- if (isBinaryPath(input.filePath)) {
118
- return input.lines.map((line) => {
119
- if (line.kind === "hunk-header") {
120
- return styleLine(input.theme?.fg?.("muted", line.content) ?? line.content, input.width);
121
- }
122
- const sign = line.kind === "add" ? "+" : line.kind === "del" ? "-" : " ";
123
- const signColor = line.kind === "add" ? "toolDiffAdded" : line.kind === "del" ? "toolDiffRemoved" : "toolDiffContext";
124
- const number = line.kind === "del" ? line.oldNum : line.newNum;
125
- const bodyBg = line.kind === "add"
126
- ? bgAnsi(input.theme, "toolDiffAdded", BG_ADD)
127
- : line.kind === "del"
128
- ? bgAnsi(input.theme, "toolDiffRemoved", BG_DEL)
129
- : BG_CTX;
130
- const gutter = ` ${fg(input.theme, signColor, String(number ?? "").padStart(4, " "))} ${fg(input.theme, signColor, sign)} `;
131
- return styleLine(`${gutter}${bodyBg}${fg(input.theme, signColor, "(binary)")}${RST}`, input.width);
132
- });
133
- }
134
- const language = lang(input.filePath);
135
- const diffLines = input.lines.filter((line) => line.kind !== "hunk-header");
136
- const highlights = await hlBlock(diffLines.map((line) => line.content).join("\n"), language);
137
- let highlightIndex = 0;
138
- return input.lines.map((line) => {
139
- if (line.kind === "hunk-header") {
140
- return styleLine(input.theme?.fg?.("muted", line.content) ?? line.content, input.width);
141
- }
142
- const highlighted = highlights[highlightIndex++] ?? line.content;
143
- const marker = " ";
144
- const commentMarker = line.commentCount > 0
145
- ? fg(input.theme, "warning", `●${line.commentCount > 1 ? Math.min(line.commentCount, 9) : ""}`)
146
- : " ";
147
- const sign = line.kind === "add" ? "+" : line.kind === "del" ? "-" : " ";
148
- const signColor = line.kind === "add" ? "toolDiffAdded" : line.kind === "del" ? "toolDiffRemoved" : "toolDiffContext";
149
- const number = line.kind === "del" ? line.oldNum : line.newNum;
150
- // Use the theme's background color for add/del lines so the background adapts to
151
- // the active Pi theme instead of using hard-coded RGB that can clash with syntax
152
- // highlighting token colors. Falls back to a dark RGB constant when the theme
153
- // does not expose a bg() / getBgAnsi() method.
154
- const bodyBg = line.kind === "add"
155
- ? bgAnsi(input.theme, "toolDiffAdded", BG_ADD)
156
- : line.kind === "del"
157
- ? bgAnsi(input.theme, "toolDiffRemoved", BG_DEL)
158
- : BG_CTX;
159
- const gutter = `${marker}${commentMarker} ${fg(input.theme, signColor, String(number ?? "").padStart(4, " "))} ${fg(input.theme, signColor, sign)} `;
160
- return styleLine(`${gutter}${bodyBg}${highlighted}${RST}`, input.width);
161
- });
162
- }
163
- function fg(theme, token, text) {
164
- return typeof theme?.fg === "function" ? theme.fg(token, text) : text;
165
- }
166
- function styleLine(text, width) {
167
- const stripped = stripAnsi(text);
168
- if (stripped.length <= width)
169
- return text;
170
- return truncateAnsi(text, width);
171
- }
172
- // biome-ignore lint/complexity/useRegexLiterals: constructor form avoids the control-character lint on ESC.
173
- const ANSI_RE = new RegExp("\\u001b\\[[0-9;]*m", "g");
174
- function stripAnsi(text) {
175
- return text.replace(ANSI_RE, "");
176
- }
177
- function truncateAnsi(text, width) {
178
- let visible = 0;
179
- let index = 0;
180
- while (index < text.length && visible < width) {
181
- if (text[index] === "\u001b") {
182
- const end = text.indexOf("m", index);
183
- if (end !== -1) {
184
- index = end + 1;
185
- continue;
186
- }
187
- }
188
- visible += 1;
189
- index += 1;
190
- }
191
- return `${text.slice(0, index)}${RST}`;
192
- }
193
- function lang(filePath) {
194
- return EXT_LANG[extname(filePath).slice(1).toLowerCase()];
195
- }
196
- async function hlBlock(code, language) {
197
- if (!code)
198
- return [];
199
- if (!language || code.length > MAX_HL_CHARS)
200
- return code.split("\n");
201
- const key = `${THEME}\0${language}\0${code}`;
202
- const hit = cache.get(key);
203
- if (hit)
204
- return touch(key, hit);
205
- try {
206
- const ansi = await codeToANSI(code, language, THEME);
207
- const output = (ansi.endsWith("\n") ? ansi.slice(0, -1) : ansi).split("\n");
208
- return touch(key, output);
209
- }
210
- catch {
211
- return code.split("\n");
212
- }
213
- }
214
- function touch(key, value) {
215
- cache.delete(key);
216
- cache.set(key, value);
217
- while (cache.size > CACHE_LIMIT) {
218
- const first = cache.keys().next().value;
219
- if (first === undefined)
220
- break;
221
- cache.delete(first);
222
- }
223
- return value;
224
- }
225
- //# sourceMappingURL=file-preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-preview.js","sourceRoot":"","sources":["../../src/review/file-preview.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- /**
2
- * hunk-bridge.ts — Thin subprocess wrapper for the `hunk` CLI.
3
- *
4
- * Detects availability of the `hunk` binary, pipes unified diff content to
5
- * `hunk patch -` for interactive review, and extracts session comments
6
- * after the review completes.
7
- */
8
- export interface HunkComment {
9
- filePath: string;
10
- newLine: number;
11
- oldLine: number;
12
- summary: string;
13
- }
14
- export interface HunkReviewResult {
15
- available: boolean;
16
- comments?: HunkComment[];
17
- }
18
- /**
19
- * Check whether the `hunk` CLI is available on the current PATH.
20
- *
21
- * Runs `hunk --version` with a short timeout and returns `true` if it
22
- * succeeds, `false` otherwise.
23
- */
24
- export declare function checkHunkAvailable(): Promise<boolean>;
25
- /**
26
- * Parse raw JSON output from `hunk session comment list --json` into
27
- * `HunkComment[]`.
28
- *
29
- * Handles both snake_case and camelCase field names emitted by the CLI.
30
- */
31
- export declare function parseHunkComments(rawJson: string): HunkComment[];
32
- /**
33
- * Run `hunk session comment list --repo <cwd> --json` and return parsed
34
- * comments. Returns an empty array on any failure (CLI not found,
35
- * no active session, parse error, etc.).
36
- */
37
- export declare function extractComments(cwd: string): HunkComment[];
38
- /**
39
- * Launch an interactive `hunk patch -` review session.
40
- *
41
- * If the `hunk` CLI is not available, returns `{ available: false }`
42
- * immediately without throwing.
43
- *
44
- * Otherwise:
45
- * 1. Spawns `hunk patch -` in the given `cwd` with `diffRaw` piped to
46
- * stdin while inheriting the parent process TTY (stdout / stderr).
47
- * 2. Waits for the subprocess to exit.
48
- * 3. Extracts any session comments left during the review via
49
- * `hunk session comment list --repo <cwd> --json`.
50
- *
51
- * @returns A `HunkReviewResult` with availability flag and any comments.
52
- */
53
- export declare function launchHunkReview(cwd: string, diffRaw: string): Promise<HunkReviewResult>;
54
- //# sourceMappingURL=hunk-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hunk-bridge.d.ts","sourceRoot":"","sources":["../../src/review/hunk-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAgBD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO3D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAahE;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE,CAY1D;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyB9F"}
@@ -1,105 +0,0 @@
1
- /**
2
- * hunk-bridge.ts — Thin subprocess wrapper for the `hunk` CLI.
3
- *
4
- * Detects availability of the `hunk` binary, pipes unified diff content to
5
- * `hunk patch -` for interactive review, and extracts session comments
6
- * after the review completes.
7
- */
8
- import { execFileSync, spawn } from "node:child_process";
9
- // ─── Availability Check ──────────────────────────────────────────────────────
10
- /**
11
- * Check whether the `hunk` CLI is available on the current PATH.
12
- *
13
- * Runs `hunk --version` with a short timeout and returns `true` if it
14
- * succeeds, `false` otherwise.
15
- */
16
- export async function checkHunkAvailable() {
17
- try {
18
- execFileSync("hunk", ["--version"], { stdio: "ignore", timeout: 5000 });
19
- return true;
20
- }
21
- catch {
22
- return false;
23
- }
24
- }
25
- // ─── Comment Parsing ─────────────────────────────────────────────────────────
26
- /**
27
- * Parse raw JSON output from `hunk session comment list --json` into
28
- * `HunkComment[]`.
29
- *
30
- * Handles both snake_case and camelCase field names emitted by the CLI.
31
- */
32
- export function parseHunkComments(rawJson) {
33
- try {
34
- const parsed = JSON.parse(rawJson);
35
- if (!Array.isArray(parsed))
36
- return [];
37
- return parsed.map((item) => ({
38
- filePath: String(item.filePath ?? item.file_path ?? item.file ?? ""),
39
- newLine: Number(item.newLine ?? item.new_line ?? 0),
40
- oldLine: Number(item.oldLine ?? item.old_line ?? 0),
41
- summary: String(item.summary ?? item.comment ?? ""),
42
- }));
43
- }
44
- catch {
45
- return [];
46
- }
47
- }
48
- // ─── Comment Extraction ──────────────────────────────────────────────────────
49
- /**
50
- * Run `hunk session comment list --repo <cwd> --json` and return parsed
51
- * comments. Returns an empty array on any failure (CLI not found,
52
- * no active session, parse error, etc.).
53
- */
54
- export function extractComments(cwd) {
55
- try {
56
- const stdout = execFileSync("hunk", ["session", "comment", "list", "--repo", cwd, "--json"], {
57
- cwd,
58
- encoding: "utf-8",
59
- timeout: 15_000,
60
- maxBuffer: 1024 * 1024,
61
- });
62
- return parseHunkComments(stdout);
63
- }
64
- catch {
65
- return [];
66
- }
67
- }
68
- // ─── Main Entry Point ────────────────────────────────────────────────────────
69
- /**
70
- * Launch an interactive `hunk patch -` review session.
71
- *
72
- * If the `hunk` CLI is not available, returns `{ available: false }`
73
- * immediately without throwing.
74
- *
75
- * Otherwise:
76
- * 1. Spawns `hunk patch -` in the given `cwd` with `diffRaw` piped to
77
- * stdin while inheriting the parent process TTY (stdout / stderr).
78
- * 2. Waits for the subprocess to exit.
79
- * 3. Extracts any session comments left during the review via
80
- * `hunk session comment list --repo <cwd> --json`.
81
- *
82
- * @returns A `HunkReviewResult` with availability flag and any comments.
83
- */
84
- export async function launchHunkReview(cwd, diffRaw) {
85
- const available = await checkHunkAvailable();
86
- if (!available) {
87
- return { available: false };
88
- }
89
- await new Promise((resolve, reject) => {
90
- const proc = spawn("hunk", ["patch", "-"], {
91
- cwd,
92
- stdio: ["pipe", "inherit", "inherit"],
93
- });
94
- // Pipe the raw diff into the subprocess
95
- proc.stdin.write(diffRaw);
96
- proc.stdin.end();
97
- proc.on("close", resolve);
98
- proc.on("error", reject);
99
- });
100
- // Even when the exit code is non-zero we attempt to harvest comments
101
- // so the caller can still inspect partial review state.
102
- const comments = extractComments(cwd);
103
- return { available: true, comments };
104
- }
105
- //# sourceMappingURL=hunk-bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hunk-bridge.js","sourceRoot":"","sources":["../../src/review/hunk-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import type { ReviewDiff } from "./git.js";
2
- export interface ReviewPanelOptions {
3
- file?: string;
4
- hunkId?: string;
5
- maxFiles?: number;
6
- maxHunks?: number;
7
- maxLinesPerHunk?: number;
8
- }
9
- export interface ReviewComment {
10
- id: string;
11
- file: string;
12
- line?: number;
13
- hunkId?: string;
14
- body: string;
15
- createdAt: string;
16
- }
17
- export declare function formatInteractiveReviewPanel(diff: ReviewDiff, comments?: ReviewComment[], options?: ReviewPanelOptions): string;
18
- export declare function formatReviewComments(comments: ReviewComment[]): string;
19
- export declare function createReviewComment(input: {
20
- comments: ReviewComment[];
21
- file: string;
22
- body: string;
23
- line?: number;
24
- hunkId?: string;
25
- now?: Date;
26
- }): ReviewComment;
27
- //# sourceMappingURL=interactive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/review/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0C,MAAM,UAAU,CAAC;AAEnF,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE,aAAa,EAAO,EAC9B,OAAO,GAAE,kBAAuB,GAC9B,MAAM,CAkDR;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CActE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,IAAI,CAAC;CACX,GAAG,aAAa,CAUhB"}
@@ -1,137 +0,0 @@
1
- export function formatInteractiveReviewPanel(diff, comments = [], options = {}) {
2
- const maxFiles = options.maxFiles ?? 40;
3
- const maxHunks = options.maxHunks ?? 20;
4
- const maxLinesPerHunk = options.maxLinesPerHunk ?? 80;
5
- const selectedFile = options.file ? findFile(diff, options.file) : null;
6
- const selectedHunk = selectedFile && options.hunkId ? findHunk(selectedFile, options.hunkId) : null;
7
- const lines = [];
8
- lines.push("# Interactive Code Review");
9
- lines.push("");
10
- lines.push(`Mode: ${diff.mode.type === "branch" ? `${diff.mode.base}...HEAD` : "working tree"}`);
11
- lines.push(`Files changed: ${diff.files.length}`);
12
- lines.push(`Comments drafted: ${comments.length}`);
13
- lines.push("");
14
- lines.push("## Available actions");
15
- lines.push("");
16
- lines.push('- Focus a file: `review_git_diff({ file: "path/to/file.ts" })`');
17
- lines.push('- Focus a hunk: `review_git_diff({ file: "path/to/file.ts", hunkId: "path:old:new" })`');
18
- lines.push("Destructive actions such as revert/discard are intentionally not implemented yet.");
19
- lines.push("");
20
- lines.push("## Changed files");
21
- lines.push("");
22
- for (const file of diff.files.slice(0, maxFiles)) {
23
- const selected = selectedFile?.path === file.path ? "▶ " : " ";
24
- lines.push(`${selected}${formatFileSummary(file)}`);
25
- for (const hunk of file.hunks.slice(0, 3)) {
26
- lines.push(` - ${hunk.id} ${hunk.header}`);
27
- }
28
- if (file.hunks.length > 3)
29
- lines.push(` - … ${file.hunks.length - 3} more hunks`);
30
- }
31
- if (diff.files.length > maxFiles)
32
- lines.push(` … ${diff.files.length - maxFiles} more files`);
33
- lines.push("");
34
- if (selectedFile) {
35
- lines.push(formatFilePanel(selectedFile, comments, { ...options, maxHunks, maxLinesPerHunk }, selectedHunk));
36
- }
37
- else if (diff.files.length > 0) {
38
- lines.push("## Next step");
39
- lines.push("");
40
- lines.push('Pick a file from the changed-file list and call `review_git_diff({ file: "..." })` to inspect it.');
41
- }
42
- else {
43
- lines.push("No changes found.");
44
- }
45
- if (comments.length > 0) {
46
- lines.push("");
47
- lines.push(formatReviewComments(comments));
48
- }
49
- return `${lines.join("\n").trimEnd()}\n`;
50
- }
51
- export function formatReviewComments(comments) {
52
- const lines = [];
53
- lines.push("## Drafted review comments");
54
- lines.push("");
55
- if (comments.length === 0) {
56
- lines.push("No drafted comments.");
57
- return lines.join("\n");
58
- }
59
- for (const comment of comments) {
60
- const loc = `${comment.file}${comment.line ? `:${comment.line}` : ""}${comment.hunkId ? ` (${comment.hunkId})` : ""}`;
61
- lines.push(`- ${comment.id} — ${loc}`);
62
- lines.push(` ${comment.body}`);
63
- }
64
- return lines.join("\n");
65
- }
66
- export function createReviewComment(input) {
67
- const next = input.comments.length + 1;
68
- return {
69
- id: `C${String(next).padStart(3, "0")}`,
70
- file: input.file,
71
- line: input.line,
72
- hunkId: input.hunkId,
73
- body: input.body,
74
- createdAt: (input.now ?? new Date()).toISOString(),
75
- };
76
- }
77
- function formatFilePanel(file, comments, options, selectedHunk) {
78
- const lines = [];
79
- const hunks = selectedHunk ? [selectedHunk] : file.hunks.slice(0, options.maxHunks);
80
- lines.push(`## File: ${file.path}`);
81
- lines.push("");
82
- lines.push(`Status: ${file.status}`);
83
- if (file.oldPath && file.oldPath !== file.path)
84
- lines.push(`Old path: ${file.oldPath}`);
85
- lines.push(`Changes: +${countLines(file, "add")}/-${countLines(file, "del")}, ${file.hunks.length} hunks`);
86
- const fileComments = comments.filter((comment) => comment.file === file.path);
87
- if (fileComments.length > 0)
88
- lines.push(`Drafted comments on this file: ${fileComments.length}`);
89
- lines.push("");
90
- for (const hunk of hunks) {
91
- lines.push(formatHunk(file, hunk, options.maxLinesPerHunk));
92
- lines.push("");
93
- }
94
- if (!selectedHunk && file.hunks.length > hunks.length) {
95
- lines.push(`… ${file.hunks.length - hunks.length} more hunks. Focus by hunkId to inspect one hunk.`);
96
- }
97
- if (options.hunkId && !selectedHunk) {
98
- lines.push(`Hunk not found: ${options.hunkId}`);
99
- }
100
- return lines.join("\n").trimEnd();
101
- }
102
- function formatHunk(file, hunk, maxLines) {
103
- const lines = [];
104
- lines.push(`### Hunk ${hunk.id}`);
105
- lines.push("");
106
- lines.push("```diff");
107
- lines.push(hunk.header);
108
- for (const line of hunk.lines.slice(0, maxLines)) {
109
- const marker = line.type === "add" ? "+" : line.type === "del" ? "-" : " ";
110
- const number = line.type === "del" ? line.oldNum : line.newNum;
111
- const gutter = number === null ? "" : String(number).padStart(4, " ");
112
- lines.push(`${marker}${gutter} ${line.content}`);
113
- }
114
- if (hunk.lines.length > maxLines)
115
- lines.push(` … ${hunk.lines.length - maxLines} more lines omitted`);
116
- lines.push("```");
117
- lines.push("");
118
- lines.push(`File: ${file.path}, hunk: ${hunk.id}, first changed line: ${firstChangedLine(hunk) ?? hunk.newStart}`);
119
- return lines.join("\n");
120
- }
121
- function formatFileSummary(file) {
122
- return `${file.path} (${file.status}, +${countLines(file, "add")}/-${countLines(file, "del")}, ${file.hunks.length} hunks)`;
123
- }
124
- function countLines(file, type) {
125
- return file.hunks.reduce((sum, hunk) => sum + hunk.lines.filter((line) => line.type === type).length, 0);
126
- }
127
- function firstChangedLine(hunk) {
128
- const changed = hunk.lines.find((line) => line.type === "add" || line.type === "del");
129
- return changed?.newNum ?? changed?.oldNum ?? null;
130
- }
131
- function findFile(diff, path) {
132
- return diff.files.find((file) => file.path === path || file.oldPath === path || file.newPath === path) ?? null;
133
- }
134
- function findHunk(file, hunkId) {
135
- return (file.hunks.find((hunk) => hunk.id === hunkId || `${file.path}:${hunk.oldStart}:${hunk.newStart}` === hunkId) ?? null);
136
- }
137
- //# sourceMappingURL=interactive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/review/interactive.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { ReviewDiff, ReviewFileDiff, ReviewHunk, ReviewLine } from "./git.js";
2
- import type { ReviewDiffSession, ReviewDraftComment } from "./session.js";
3
- export interface ReviewViewportLine {
4
- id: string;
5
- filePath: string;
6
- hunkId: string;
7
- kind: "hunk-header" | ReviewLine["type"];
8
- oldNum: number | null;
9
- newNum: number | null;
10
- content: string;
11
- commentCount: number;
12
- isSelectable: boolean;
13
- }
14
- export interface ReviewViewportState {
15
- file: ReviewFileDiff | null;
16
- hunk: ReviewHunk | null;
17
- lines: ReviewViewportLine[];
18
- selectedLine: ReviewViewportLine | null;
19
- visibleLines: ReviewViewportLine[];
20
- selectedLineIndex: number;
21
- windowStart: number;
22
- windowEnd: number;
23
- }
24
- export declare function createPreviewLineId(filePath: string, hunkId: string, line: ReviewLine, lineIndex: number): string;
25
- export declare function createHeaderLineId(filePath: string, hunkId: string): string;
26
- export declare function buildViewportLines(file: ReviewFileDiff | null, comments: ReviewDraftComment[], hunkId?: string): ReviewViewportLine[];
27
- export declare function getSelectedPreviewLine(diff: ReviewDiff, session: ReviewDiffSession): ReviewViewportLine | null;
28
- export declare function syncPreviewSelection(session: ReviewDiffSession, diff: ReviewDiff): void;
29
- export declare function moveSelectedPreviewLine(session: ReviewDiffSession, diff: ReviewDiff, delta: number, windowSize?: number): void;
30
- export declare function selectPreviewLineForHunk(session: ReviewDiffSession, diff: ReviewDiff, hunkId?: string): void;
31
- export declare function selectPreviewLineForComment(session: ReviewDiffSession, diff: ReviewDiff): void;
32
- export declare function getViewportState(diff: ReviewDiff, session: ReviewDiffSession, windowSize?: number): ReviewViewportState;
33
- //# sourceMappingURL=model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/review/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjH;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,cAAc,GAAG,IAAI,EAC3B,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,MAAM,CAAC,EAAE,MAAM,GACb,kBAAkB,EAAE,CAgCtB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,IAAI,CAc9G;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAqBvF;AAED,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,SAA0B,GAClC,IAAI,CA0BN;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAY5G;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAmB9F;AAED,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,SAA0B,GAClC,mBAAmB,CAqBrB"}