@335g/pi-git 0.0.2 → 0.0.3

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.ja.md +0 -27
  2. package/README.md +0 -27
  3. package/dist/commands/agg-commit.d.ts.map +1 -1
  4. package/dist/commands/agg-commit.js +7 -14
  5. package/dist/commands/agg-commit.js.map +1 -1
  6. package/dist/commands/auto-agg-commit.d.ts.map +1 -1
  7. package/dist/commands/auto-agg-commit.js +36 -68
  8. package/dist/commands/auto-agg-commit.js.map +1 -1
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +46 -69
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/core/auto-commit-message.d.ts +2 -2
  13. package/dist/core/auto-commit-message.d.ts.map +1 -1
  14. package/dist/core/auto-commit-message.js +259 -34
  15. package/dist/core/auto-commit-message.js.map +1 -1
  16. package/dist/core/auto-commit.d.ts.map +1 -1
  17. package/dist/core/auto-commit.js +3 -6
  18. package/dist/core/auto-commit.js.map +1 -1
  19. package/dist/core/diff-analyzer.d.ts +1 -9
  20. package/dist/core/diff-analyzer.d.ts.map +1 -1
  21. package/dist/core/diff-analyzer.js +9 -21
  22. package/dist/core/diff-analyzer.js.map +1 -1
  23. package/dist/core/git.d.ts +0 -25
  24. package/dist/core/git.d.ts.map +1 -1
  25. package/dist/core/git.js +0 -65
  26. package/dist/core/git.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +0 -21
  29. package/dist/index.js.map +1 -1
  30. package/dist/types.d.ts +0 -2
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/utils/footer-manager.js +6 -9
  33. package/dist/utils/footer-manager.js.map +1 -1
  34. package/dist/utils/lang.d.ts +3 -2
  35. package/dist/utils/lang.d.ts.map +1 -1
  36. package/dist/utils/lang.js +3 -2
  37. package/dist/utils/lang.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/commands/branch.d.ts +0 -8
  40. package/dist/commands/branch.d.ts.map +0 -1
  41. package/dist/commands/branch.js +0 -197
  42. package/dist/commands/branch.js.map +0 -1
  43. package/dist/commands/git-diff.d.ts +0 -10
  44. package/dist/commands/git-diff.d.ts.map +0 -1
  45. package/dist/commands/git-diff.js +0 -228
  46. package/dist/commands/git-diff.js.map +0 -1
  47. package/dist/commands/git-log.d.ts +0 -8
  48. package/dist/commands/git-log.d.ts.map +0 -1
  49. package/dist/commands/git-log.js +0 -100
  50. package/dist/commands/git-log.js.map +0 -1
  51. package/dist/tui/hunk-review.d.ts +0 -51
  52. package/dist/tui/hunk-review.d.ts.map +0 -1
  53. package/dist/tui/hunk-review.js +0 -296
  54. package/dist/tui/hunk-review.js.map +0 -1
@@ -1,228 +0,0 @@
1
- /**
2
- * /git-diff command
3
- *
4
- * Interactive diff review with sequential hunk approval.
5
- * Allows reviewing AI-generated hunks, viewing diffs, editing messages,
6
- * and committing approved hunks one at a time.
7
- */
8
- import { analyzeDiff, parseDiffStats, processHunks, splitDiffByFile, } from "../core/diff-analyzer.js";
9
- import { collectDiff, ensureReadyToCommit, resetStaging, stageFiles, } from "../core/git.js";
10
- import { isJapanese } from "../utils/lang.js";
11
- import { getLanguage } from "../utils/settings.js";
12
- import { footerManager } from "../utils/footer-manager.js";
13
- import { HunkReviewComponent, } from "../tui/hunk-review.js";
14
- /**
15
- * Review a single hunk using the TUI component
16
- */
17
- async function reviewHunk(ctx, hunk, hunkIndex, totalHunks, fileStats, fileDiffs) {
18
- if (!ctx.hasUI) {
19
- return { type: "quit" };
20
- }
21
- return await ctx.ui.custom((tui, theme, _keybindings, done) => {
22
- const component = new HunkReviewComponent(hunk, hunkIndex, totalHunks, fileStats, fileDiffs, tui, theme, done);
23
- return component;
24
- });
25
- }
26
- export async function handleGitDiff(pi, ctx, args) {
27
- const lang = getLanguage(ctx.cwd);
28
- const ja = isJapanese(lang);
29
- if (/--help/.test(args)) {
30
- const lines = ja
31
- ? [
32
- "/git-diff [--help]",
33
- "",
34
- "AIが生成したhunkを対話的にレビューし、承認したものをコミットします。",
35
- "",
36
- "オプション:",
37
- " --help このヘルプを表示",
38
- "",
39
- "操作:",
40
- " ↑↓ ファイル間を移動",
41
- " Enter 選択したファイルのdiffを表示",
42
- " a hunkを承認してコミット",
43
- " e コミットメッセージを編集",
44
- " s hunkをスキップ",
45
- " x 選択したファイルをhunkから除外",
46
- " q 終了",
47
- ]
48
- : [
49
- "/git-diff [--help]",
50
- "",
51
- "Interactively review AI-generated hunks and commit approved ones.",
52
- "",
53
- "Options:",
54
- " --help Show this help message",
55
- "",
56
- "Controls:",
57
- " ↑↓ Navigate between files",
58
- " Enter View diff for selected file",
59
- " a Approve and commit hunk",
60
- " e Edit commit message",
61
- " s Skip hunk",
62
- " x Exclude selected file from hunk",
63
- " q Quit",
64
- ];
65
- if (ctx.hasUI) {
66
- ctx.ui.notify(lines.join("\n"), "info");
67
- }
68
- return;
69
- }
70
- if (!ctx.hasUI) {
71
- return;
72
- }
73
- // Check if agg-commit is running
74
- if (footerManager.isRunning()) {
75
- ctx.ui.notify(ja
76
- ? "git-agg-commit 実行中です。完了してから再度実行してください。"
77
- : "git-agg-commit is already running. Please wait for it to complete.", "warning");
78
- return;
79
- }
80
- await footerManager.setRunning("diff", "prepare");
81
- try {
82
- const preCheck = await ensureReadyToCommit(pi, ctx.cwd);
83
- if (preCheck) {
84
- await footerManager.clearRunning();
85
- ctx.ui.notify(preCheck === "not_git_repo"
86
- ? ja ? "Gitリポジトリではありません" : "Not a git repository"
87
- : ja ? "コミットする変更がありません" : "No changes to commit", preCheck === "not_git_repo" ? "warning" : "info");
88
- return;
89
- }
90
- // Collect diff via stash to freeze the working tree
91
- await footerManager.setPhase("collectDiff");
92
- const diff = await collectDiff(pi, ctx.cwd);
93
- if (diff === null) {
94
- await footerManager.clearRunning();
95
- ctx.ui.notify(ja ? "変更のstashに失敗しました" : "Failed to stash changes", "warning");
96
- return;
97
- }
98
- if (!diff.trim()) {
99
- await footerManager.clearRunning();
100
- ctx.ui.notify(ja ? "コミットする変更がありません" : "No changes to commit", "info");
101
- return;
102
- }
103
- // Parse diff by file
104
- const fileDiffs = splitDiffByFile(diff);
105
- const fileStats = parseDiffStats(diff);
106
- // Analyze diff into hunks
107
- await footerManager.setPhase("analyze");
108
- let hunks = await analyzeDiff(pi, ctx, diff, lang);
109
- if (hunks.length === 0) {
110
- await footerManager.clearRunning();
111
- ctx.ui.notify(ja ? "コミット可能なhunkがありません" : "No hunks found to commit", "info");
112
- return;
113
- }
114
- // Sanitize, deduplicate, and filter hunks
115
- hunks = processHunks(hunks);
116
- await footerManager.clearRunning();
117
- // Review each hunk sequentially
118
- const unassignedFiles = [];
119
- let committedCount = 0;
120
- let skippedCount = 0;
121
- let quitRequested = false;
122
- for (let i = 0; i < hunks.length; i++) {
123
- const hunk = hunks[i];
124
- let currentMessage = hunk.message;
125
- // Review loop (for message editing)
126
- while (true) {
127
- const action = await reviewHunk(ctx, { ...hunk, message: currentMessage }, i, hunks.length, fileStats, fileDiffs);
128
- if (action.type === "quit") {
129
- // Add current and remaining hunks' files to unassigned
130
- for (let j = i; j < hunks.length; j++) {
131
- unassignedFiles.push(...hunks[j].files);
132
- }
133
- quitRequested = true;
134
- break;
135
- }
136
- if (action.type === "edit_message") {
137
- // Edit message using pi's built-in input dialog (IME-supported)
138
- const newMessage = await ctx.ui.input(ja ? "コミットメッセージを編集:" : "Edit commit message:", action.currentMessage);
139
- if (newMessage && newMessage.trim()) {
140
- currentMessage = newMessage.trim();
141
- }
142
- // Continue loop to re-show the hunk with updated message
143
- continue;
144
- }
145
- if (action.type === "skip") {
146
- // Add non-excluded files to unassigned
147
- const files = hunk.files.filter((f) => !action.excludedFiles.includes(f));
148
- unassignedFiles.push(...files, ...action.excludedFiles);
149
- skippedCount++;
150
- break;
151
- }
152
- if (action.type === "approve") {
153
- // Stage and commit non-excluded files
154
- const files = hunk.files.filter((f) => !action.excludedFiles.includes(f));
155
- if (files.length === 0) {
156
- ctx.ui.notify(ja
157
- ? "コミットするファイルがありません"
158
- : "No files to commit", "warning");
159
- break;
160
- }
161
- try {
162
- await stageFiles(pi, files, ctx.cwd);
163
- }
164
- catch (error) {
165
- ctx.ui.notify(ja
166
- ? `ファイルのステージに失敗しました: ${error instanceof Error ? error.message : String(error)}`
167
- : `Failed to stage files: ${error instanceof Error ? error.message : String(error)}`, "error");
168
- break;
169
- }
170
- const { code: exitCode, stderr } = await pi.exec("git", ["commit", "-m", action.message], { cwd: ctx.cwd });
171
- if (exitCode !== 0) {
172
- try {
173
- await resetStaging(pi, ctx.cwd);
174
- }
175
- catch {
176
- // Ignore reset errors
177
- }
178
- const detail = stderr.trim() ? ` — ${stderr.trim()}` : "";
179
- ctx.ui.notify(ja
180
- ? `コミットに失敗しました: "${action.message}" (exit code ${exitCode})${detail}。ステージをリセットしました。`
181
- : `Commit failed for "${action.message}" (exit code ${exitCode}).${detail} Staging has been reset.`, "warning");
182
- break;
183
- }
184
- committedCount++;
185
- // Add excluded files to unassigned
186
- unassignedFiles.push(...action.excludedFiles);
187
- break;
188
- }
189
- }
190
- if (quitRequested)
191
- break;
192
- }
193
- // Show summary
194
- const parts = [];
195
- if (committedCount > 0) {
196
- parts.push(ja
197
- ? `${committedCount}個のhunkをコミットしました`
198
- : `Committed ${committedCount} hunk${committedCount > 1 ? "s" : ""}`);
199
- }
200
- if (skippedCount > 0) {
201
- parts.push(ja
202
- ? `${skippedCount}個のhunkをスキップしました`
203
- : `Skipped ${skippedCount} hunk${skippedCount > 1 ? "s" : ""}`);
204
- }
205
- if (parts.length > 0) {
206
- ctx.ui.notify(parts.join(", "), "info");
207
- }
208
- // Show unassigned files
209
- if (unassignedFiles.length > 0) {
210
- const lines = ja
211
- ? [
212
- "",
213
- `⚠ ${unassignedFiles.length}個のファイルが未割り当てです:`,
214
- ...unassignedFiles.map((f) => ` ${f}`),
215
- ]
216
- : [
217
- "",
218
- `⚠ ${unassignedFiles.length} file${unassignedFiles.length > 1 ? "s" : ""} remain unassigned:`,
219
- ...unassignedFiles.map((f) => ` ${f}`),
220
- ];
221
- ctx.ui.notify(lines.join("\n"), "info");
222
- }
223
- }
224
- finally {
225
- await footerManager.clearRunning();
226
- }
227
- }
228
- //# sourceMappingURL=git-diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/commands/git-diff.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * /git-log command
3
- *
4
- * Display git log in oneline format.
5
- */
6
- import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
7
- export declare function handleGitLog(pi: ExtensionAPI, ctx: ExtensionCommandContext, args: string): Promise<void>;
8
- //# sourceMappingURL=git-log.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../src/commands/git-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAOzC,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA0Gf"}
@@ -1,100 +0,0 @@
1
- /**
2
- * /git-log command
3
- *
4
- * Display git log in oneline format.
5
- */
6
- import { getLog, isGitRepository } from "../core/git.js";
7
- import { isJapanese } from "../utils/lang.js";
8
- import { getSettings } from "../utils/settings.js";
9
- const DEFAULT_MAX_COUNT = 20;
10
- export async function handleGitLog(pi, ctx, args) {
11
- if (!ctx.hasUI) {
12
- return;
13
- }
14
- const lang = getSettings(ctx.cwd).lang ?? "en";
15
- const ja = isJapanese(lang);
16
- const tokens = args.trim().split(/\s+/).filter(Boolean);
17
- // Parse flags
18
- let all = false;
19
- let graph = false;
20
- let help = false;
21
- let maxCount = DEFAULT_MAX_COUNT;
22
- for (let i = 0; i < tokens.length; i++) {
23
- const token = tokens[i];
24
- if (token === "--all") {
25
- all = true;
26
- }
27
- else if (token === "--graph") {
28
- graph = true;
29
- }
30
- else if (token === "--help" || token === "-h") {
31
- help = true;
32
- }
33
- else if (token === "-n") {
34
- const next = tokens[i + 1];
35
- if (!next) {
36
- ctx.ui.notify(ja ? "-n には数値が必要です" : "-n requires a number", "warning");
37
- return;
38
- }
39
- if (next === "all") {
40
- maxCount = "all";
41
- }
42
- else {
43
- const parsed = Number.parseInt(next, 10);
44
- if (Number.isNaN(parsed) || parsed <= 0) {
45
- ctx.ui.notify(ja
46
- ? `-n の値が不正です: ${next}`
47
- : `Invalid -n value: ${next}`, "warning");
48
- return;
49
- }
50
- maxCount = parsed;
51
- }
52
- i++; // skip next token
53
- }
54
- }
55
- if (help) {
56
- const lines = ja
57
- ? [
58
- "/git-log [-n <count>] [--all] [--graph] [--help]",
59
- "",
60
- "git log を oneline 形式で表示します。",
61
- "",
62
- "フラグ:",
63
- " -n <count> 表示するコミット数 (デフォルト: 20, 'all' で全件)",
64
- " --all 全ブランチのログを表示",
65
- " --graph ASCII グラフを表示",
66
- " --help, -h このヘルプを表示",
67
- ]
68
- : [
69
- "/git-log [-n <count>] [--all] [--graph] [--help]",
70
- "",
71
- "Display git log in oneline format.",
72
- "",
73
- "Flags:",
74
- " -n <count> Number of commits to show (default: 20, 'all' for all)",
75
- " --all Show logs from all branches",
76
- " --graph Show ASCII graph",
77
- " --help, -h Show this help message",
78
- ];
79
- ctx.ui.notify(lines.join("\n"), "info");
80
- return;
81
- }
82
- if (!(await isGitRepository(pi, ctx.cwd))) {
83
- ctx.ui.notify(ja ? "Gitリポジトリではありません" : "Not a git repository", "warning");
84
- return;
85
- }
86
- try {
87
- const log = await getLog(pi, { maxCount, all, graph }, ctx.cwd);
88
- if (!log.trim()) {
89
- ctx.ui.notify(ja ? "コミット履歴がありません" : "No commit history", "info");
90
- return;
91
- }
92
- ctx.ui.notify(log.trimEnd(), "info");
93
- }
94
- catch (error) {
95
- ctx.ui.notify(ja
96
- ? `git log の取得に失敗しました: ${error instanceof Error ? error.message : String(error)}`
97
- : `Failed to get git log: ${error instanceof Error ? error.message : String(error)}`, "error");
98
- }
99
- }
100
- //# sourceMappingURL=git-log.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-log.js","sourceRoot":"","sources":["../../src/commands/git-log.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Hunk review TUI component
3
- *
4
- * Displays a hunk with its files and commit message, allowing the user to:
5
- * - Navigate through files
6
- * - View diff for each file
7
- * - Approve, skip, or exclude files
8
- * - Edit the commit message
9
- */
10
- import type { Component } from "@earendil-works/pi-tui";
11
- import type { FileStats, Hunk } from "../types.js";
12
- export type HunkReviewAction = {
13
- type: "approve";
14
- message: string;
15
- excludedFiles: string[];
16
- } | {
17
- type: "edit_message";
18
- currentMessage: string;
19
- excludedFiles: string[];
20
- } | {
21
- type: "skip";
22
- excludedFiles: string[];
23
- } | {
24
- type: "quit";
25
- };
26
- export declare class HunkReviewComponent implements Component {
27
- private hunk;
28
- private hunkIndex;
29
- private totalHunks;
30
- private fileStats;
31
- private fileDiffs;
32
- private tui;
33
- private theme;
34
- private onComplete;
35
- private container;
36
- private selectedIndex;
37
- private excludedFiles;
38
- private mode;
39
- private diffScrollOffset;
40
- /** Calculate visible lines available for diff content based on terminal height */
41
- private getVisibleLines;
42
- constructor(hunk: Hunk, hunkIndex: number, totalHunks: number, fileStats: Map<string, FileStats>, fileDiffs: Map<string, string[]>, tui: any, theme: any, onComplete: (action: HunkReviewAction) => void);
43
- private renderList;
44
- private renderDiff;
45
- render(width: number): string[];
46
- handleInput(data: string): void;
47
- private handleListInput;
48
- private handleDiffInput;
49
- invalidate(): void;
50
- }
51
- //# sourceMappingURL=hunk-review.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hunk-review.d.ts","sourceRoot":"","sources":["../../src/tui/hunk-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AASxD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,qBAAa,mBAAoB,YAAW,SAAS;IAkBjD,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU;IAxBpB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,kFAAkF;IAClF,OAAO,CAAC,eAAe;gBAUb,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAChC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI;IAMxD,OAAO,CAAC,UAAU;IA8DlB,OAAO,CAAC,UAAU;IAgElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAM/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ/B,OAAO,CAAC,eAAe;IA2EvB,OAAO,CAAC,eAAe;IA+DvB,UAAU,IAAI,IAAI;CAGnB"}