@335g/pi-git 0.0.1

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +121 -0
  3. package/README.md +121 -0
  4. package/dist/commands/agg-commit.d.ts +9 -0
  5. package/dist/commands/agg-commit.d.ts.map +1 -0
  6. package/dist/commands/agg-commit.js +144 -0
  7. package/dist/commands/agg-commit.js.map +1 -0
  8. package/dist/commands/auto-agg-commit.d.ts +9 -0
  9. package/dist/commands/auto-agg-commit.d.ts.map +1 -0
  10. package/dist/commands/auto-agg-commit.js +113 -0
  11. package/dist/commands/auto-agg-commit.js.map +1 -0
  12. package/dist/commands/branch.d.ts +8 -0
  13. package/dist/commands/branch.d.ts.map +1 -0
  14. package/dist/commands/branch.js +197 -0
  15. package/dist/commands/branch.js.map +1 -0
  16. package/dist/commands/config.d.ts +10 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js +234 -0
  19. package/dist/commands/config.js.map +1 -0
  20. package/dist/commands/git-diff.d.ts +10 -0
  21. package/dist/commands/git-diff.d.ts.map +1 -0
  22. package/dist/commands/git-diff.js +228 -0
  23. package/dist/commands/git-diff.js.map +1 -0
  24. package/dist/commands/git-log.d.ts +8 -0
  25. package/dist/commands/git-log.d.ts.map +1 -0
  26. package/dist/commands/git-log.js +100 -0
  27. package/dist/commands/git-log.js.map +1 -0
  28. package/dist/core/auto-commit-message.d.ts +15 -0
  29. package/dist/core/auto-commit-message.d.ts.map +1 -0
  30. package/dist/core/auto-commit-message.js +121 -0
  31. package/dist/core/auto-commit-message.js.map +1 -0
  32. package/dist/core/auto-commit.d.ts +12 -0
  33. package/dist/core/auto-commit.d.ts.map +1 -0
  34. package/dist/core/auto-commit.js +67 -0
  35. package/dist/core/auto-commit.js.map +1 -0
  36. package/dist/core/commit-message.d.ts +25 -0
  37. package/dist/core/commit-message.d.ts.map +1 -0
  38. package/dist/core/commit-message.js +127 -0
  39. package/dist/core/commit-message.js.map +1 -0
  40. package/dist/core/diff-analyzer.d.ts +23 -0
  41. package/dist/core/diff-analyzer.d.ts.map +1 -0
  42. package/dist/core/diff-analyzer.js +245 -0
  43. package/dist/core/diff-analyzer.js.map +1 -0
  44. package/dist/core/git.d.ts +50 -0
  45. package/dist/core/git.d.ts.map +1 -0
  46. package/dist/core/git.js +152 -0
  47. package/dist/core/git.js.map +1 -0
  48. package/dist/core/resolve-model.d.ts +18 -0
  49. package/dist/core/resolve-model.d.ts.map +1 -0
  50. package/dist/core/resolve-model.js +33 -0
  51. package/dist/core/resolve-model.js.map +1 -0
  52. package/dist/index.d.ts +8 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +61 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/tui/hunk-review.d.ts +49 -0
  57. package/dist/tui/hunk-review.d.ts.map +1 -0
  58. package/dist/tui/hunk-review.js +300 -0
  59. package/dist/tui/hunk-review.js.map +1 -0
  60. package/dist/types.d.ts +23 -0
  61. package/dist/types.d.ts.map +1 -0
  62. package/dist/types.js +5 -0
  63. package/dist/types.js.map +1 -0
  64. package/dist/utils/footer-manager.d.ts +68 -0
  65. package/dist/utils/footer-manager.d.ts.map +1 -0
  66. package/dist/utils/footer-manager.js +138 -0
  67. package/dist/utils/footer-manager.js.map +1 -0
  68. package/dist/utils/lang.d.ts +12 -0
  69. package/dist/utils/lang.d.ts.map +1 -0
  70. package/dist/utils/lang.js +16 -0
  71. package/dist/utils/lang.js.map +1 -0
  72. package/dist/utils/settings.d.ts +47 -0
  73. package/dist/utils/settings.d.ts.map +1 -0
  74. package/dist/utils/settings.js +151 -0
  75. package/dist/utils/settings.js.map +1 -0
  76. package/package.json +60 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yoshiki Kudo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,121 @@
1
+ # pi-git
2
+
3
+ [pi-coding-agent](https://pi.dev) 向けのGitユーティリティ拡張機能です。
4
+
5
+ pi内でgitワークフローを自動化・効率化するスラッシュコマンドを提供します。
6
+
7
+ ---
8
+
9
+ ## インストール
10
+
11
+ ### npmから(推奨)
12
+
13
+ ```bash
14
+ pi install pi-git
15
+ ```
16
+
17
+ または、プロジェクトのpackage.jsonに追加:
18
+
19
+ ```json
20
+ {
21
+ "dependencies": {
22
+ "pi-git": "^0.0.1"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ### ローカル拡張機能として(開発用)
28
+
29
+ ```bash
30
+ pi -e ./src/index.ts
31
+ ```
32
+
33
+ ### ローカルパッケージから(開発用)
34
+
35
+ ```bash
36
+ pi install /path/to/pi-git
37
+ ```
38
+
39
+ ---
40
+
41
+ ## コマンド
42
+
43
+ | コマンド | 説明 |
44
+ |---------|------|
45
+ | [`/git-agg-commit`](#git-agg-commit) | 変更を自動ステージングし、AI生成のConventional Commitsメッセージでコミット |
46
+ | [`/git-auto-agg-commit`](#git-auto-agg-commit) | アシスタント応答後の自動 `git-agg-commit` をトグル |
47
+ | [`/git-config`](#git-config) | pi-git の設定値を取得・設定・一覧表示 |
48
+ | [`/git-branch`](#git-branch) | ブランチ管理: 一覧、切り替え、作成、削除 |
49
+ | [`/git-diff`](#git-diff) | AI生成のhunkをインタラクティブにレビューし、承認したものをコミット |
50
+ | [`/git-log`](#git-log) | git log を oneline 形式で表示 |
51
+
52
+ ### `/git-agg-commit`
53
+
54
+ ワーキングツリーの差分を自動解析し、論理的なhunkに分割して[Conventional Commits](https://www.conventionalcommits.org/)スタイルのコミットメッセージを生成、ステージングしてコミットまで一気に行います。
55
+
56
+ ```
57
+ /git-agg-commit [--lang=<code>]
58
+ ```
59
+
60
+ ### `/git-auto-agg-commit`
61
+
62
+ アシスタント応答後の自動 `git-agg-commit` をトグルします。有効時は、アシスタントの応答完了時に未コミットの変更が自動的にコミットされます。
63
+
64
+ ```
65
+ /git-auto-agg-commit [on|off|toggle]
66
+ ```
67
+
68
+ ### `/git-config`
69
+
70
+ pi-git の設定値を取得・設定・一覧表示します。グローバル(`~/.config/pi-git/settings.json`)とローカル(`<リポジトリルート>/.pi-git/settings.json`)スコープに対応しています。
71
+
72
+ ```
73
+ /git-config <key> [value] [--global] [--list] [--show-origin]
74
+ ```
75
+
76
+ ### `/git-branch`
77
+
78
+ gitブランチを管理します: 一覧表示、切り替え、作成、削除。
79
+
80
+ ```
81
+ /git-branch [<branch>] [-c|--create] [-d|--delete] [--list] [--help]
82
+ ```
83
+
84
+ ### `/git-diff`
85
+
86
+ AI支援によるhunk分解とインタラクティブな差分レビュー。ファイルツリーとunified diffを左右に表示し、1つの論理的hunkずつ確認・調整・コミットできます。
87
+
88
+ ```
89
+ /git-diff [--lang=<code>]
90
+ ```
91
+
92
+ ### `/git-log`
93
+
94
+ git log を oneline 形式で表示します。ブランチ名と HEAD の位置も表示されます。
95
+
96
+ ```
97
+ /git-log [-n <count>] [--all] [--graph]
98
+ ```
99
+
100
+ ---
101
+
102
+ ## ドキュメント
103
+
104
+ 詳細な使い方、オプション、キーバインド、動作仕様については、以下を参照してください:
105
+
106
+ - **[Command Reference (English)](docs/commands.md)**
107
+ - **[コマンドリファレンス (日本語)](docs/commands.ja.md)**
108
+
109
+ ---
110
+
111
+ ## 要件
112
+
113
+ - pi-coding-agent
114
+ - Gitリポジトリ
115
+ - APIキーが設定されたAIモデル(hunk解析用)
116
+
117
+ ---
118
+
119
+ ## ライセンス
120
+
121
+ MIT
package/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # pi-git
2
+
3
+ Git utilities extension for [pi-coding-agent](https://pi.dev).
4
+
5
+ Provides slash commands to automate and streamline git workflows within pi.
6
+
7
+ ---
8
+
9
+ ## Installation
10
+
11
+ ### From npm (recommended)
12
+
13
+ ```bash
14
+ pi install pi-git
15
+ ```
16
+
17
+ Or add to your project's package.json:
18
+
19
+ ```json
20
+ {
21
+ "dependencies": {
22
+ "pi-git": "^0.0.1"
23
+ }
24
+ }
25
+ ```
26
+
27
+ ### As a local extension (development)
28
+
29
+ ```bash
30
+ pi -e ./src/index.ts
31
+ ```
32
+
33
+ ### From local package (development)
34
+
35
+ ```bash
36
+ pi install /path/to/pi-git
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Commands
42
+
43
+ | Command | Description |
44
+ |---------|-------------|
45
+ | [`/git-agg-commit`](#git-agg-commit) | Auto stage and commit changes with AI-generated Conventional Commits messages |
46
+ | [`/git-auto-agg-commit`](#git-auto-agg-commit) | Toggle automatic `git-agg-commit` after assistant responses |
47
+ | [`/git-config`](#git-config) | Get, set, or list pi-git configuration values |
48
+ | [`/git-branch`](#git-branch) | Manage git branches: list, switch, create, and delete |
49
+ | [`/git-diff`](#git-diff) | Interactively review AI-generated hunks and commit approved ones |
50
+ | [`/git-log`](#git-log) | Display git log in oneline format |
51
+
52
+ ### `/git-agg-commit`
53
+
54
+ Automatically analyzes the working tree diff, splits changes into logical hunks, generates [Conventional Commits](https://www.conventionalcommits.org/) style messages, stages files, and creates commits — all in one shot.
55
+
56
+ ```
57
+ /git-agg-commit [--lang=<code>]
58
+ ```
59
+
60
+ ### `/git-auto-agg-commit`
61
+
62
+ Toggles automatic `git-agg-commit` after assistant responses. When enabled, uncommitted changes are automatically committed when the assistant finishes responding.
63
+
64
+ ```
65
+ /git-auto-agg-commit [on|off|toggle]
66
+ ```
67
+
68
+ ### `/git-config`
69
+
70
+ Gets, sets, or lists pi-git configuration values. Supports global (`~/.config/pi-git/settings.json`) and local (`<repo-root>/.pi-git/settings.json`) scopes.
71
+
72
+ ```
73
+ /git-config <key> [value] [--global] [--list] [--show-origin]
74
+ ```
75
+
76
+ ### `/git-branch`
77
+
78
+ Manages git branches: list, switch, create, and delete.
79
+
80
+ ```
81
+ /git-branch [<branch>] [-c|--create] [-d|--delete] [--list] [--help]
82
+ ```
83
+
84
+ ### `/git-diff`
85
+
86
+ Interactive diff review with AI-assisted hunk decomposition. Displays a file tree and unified diff side-by-side, letting you review, adjust, and commit changes one logical hunk at a time.
87
+
88
+ ```
89
+ /git-diff [--lang=<code>]
90
+ ```
91
+
92
+ ### `/git-log`
93
+
94
+ Displays git log in oneline format with branch names and HEAD position.
95
+
96
+ ```
97
+ /git-log [-n <count>] [--all] [--graph]
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Documentation
103
+
104
+ For detailed usage, options, keybindings, and behavior specifications, see:
105
+
106
+ - **[Command Reference (English)](docs/commands.md)**
107
+ - **[コマンドリファレンス (日本語)](docs/commands.ja.md)**
108
+
109
+ ---
110
+
111
+ ## Requirements
112
+
113
+ - pi-coding-agent
114
+ - Git repository
115
+ - Active AI model with API key configured (for hunk analysis)
116
+
117
+ ---
118
+
119
+ ## License
120
+
121
+ MIT
@@ -0,0 +1,9 @@
1
+ /**
2
+ * /git-agg-commit command
3
+ *
4
+ * Automatically analyzes git diff, splits into logical hunks,
5
+ * generates Conventional Commits messages, stages, and commits.
6
+ */
7
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
8
+ export declare function handleAggCommit(pi: ExtensionAPI, ctx: ExtensionContext, args: string): Promise<void>;
9
+ //# sourceMappingURL=agg-commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agg-commit.d.ts","sourceRoot":"","sources":["../../src/commands/agg-commit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAiBzC,wBAAsB,eAAe,CACnC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA2Jf"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * /git-agg-commit command
3
+ *
4
+ * Automatically analyzes git diff, splits into logical hunks,
5
+ * generates Conventional Commits messages, stages, and commits.
6
+ */
7
+ import { analyzeDiff, processHunks } from "../core/diff-analyzer.js";
8
+ import { collectDiff, ensureReadyToCommit, resetStaging, stageFiles, } from "../core/git.js";
9
+ import { isJapanese } from "../utils/lang.js";
10
+ import { getLanguage } from "../utils/settings.js";
11
+ import { footerManager } from "../utils/footer-manager.js";
12
+ function parseLangArg(args) {
13
+ const match = args.match(/--lang(?:uage)?[=\s]+(\S+)/);
14
+ return match?.[1];
15
+ }
16
+ export async function handleAggCommit(pi, ctx, args) {
17
+ const lang = getLanguage(ctx.cwd);
18
+ const ja = isJapanese(lang);
19
+ if (/--help/.test(args)) {
20
+ const lines = ja
21
+ ? [
22
+ "/git-agg-commit [--lang=<lang>] [--help]",
23
+ "",
24
+ "オプション:",
25
+ " --lang=<lang> 一時的に言語を上書き(保存されません)",
26
+ " --help このヘルプを表示",
27
+ ]
28
+ : [
29
+ "/git-agg-commit [--lang=<lang>] [--help]",
30
+ "",
31
+ "Options:",
32
+ " --lang=<lang> Temporarily override language (not saved)",
33
+ " --help Show this help message",
34
+ ];
35
+ if (ctx.hasUI) {
36
+ ctx.ui.notify(lines.join("\n"), "info");
37
+ }
38
+ return;
39
+ }
40
+ // Parse language argument (temporary override, does not save)
41
+ const langArg = parseLangArg(args);
42
+ let runLang = lang;
43
+ if (langArg) {
44
+ runLang = langArg;
45
+ ctx.ui.notify(`Language set to: ${langArg} (this run only)`, "info");
46
+ }
47
+ if (!ctx.hasUI) {
48
+ return;
49
+ }
50
+ if (footerManager.isRunning()) {
51
+ ctx.ui.notify(isJapanese(runLang)
52
+ ? "git-agg-commit 実行中です。完了してから再度実行してください。"
53
+ : "git-agg-commit is already running. Please wait for it to complete.", "warning");
54
+ return;
55
+ }
56
+ await footerManager.setRunning("agg-commit", "prepare", runLang);
57
+ try {
58
+ const preCheck = await ensureReadyToCommit(pi, ctx.cwd);
59
+ if (preCheck) {
60
+ await footerManager.clearRunning();
61
+ ctx.ui.notify(preCheck === "not_git_repo"
62
+ ? "Not a git repository"
63
+ : "No changes to commit", preCheck === "not_git_repo" ? "warning" : "info");
64
+ return;
65
+ }
66
+ // Snapshot changes via stash to freeze the diff
67
+ await footerManager.setPhase("collectDiff", runLang);
68
+ const diff = await collectDiff(pi, ctx.cwd);
69
+ if (diff === null) {
70
+ await footerManager.clearRunning();
71
+ ctx.ui.notify("Failed to stash changes", "warning");
72
+ return;
73
+ }
74
+ if (!diff.trim()) {
75
+ await footerManager.clearRunning();
76
+ ctx.ui.notify("No changes to commit", "info");
77
+ return;
78
+ }
79
+ // Analyze diff into logical hunks
80
+ await footerManager.setPhase("analyze", runLang);
81
+ let hunks = await analyzeDiff(pi, ctx, diff);
82
+ if (hunks.length === 0) {
83
+ await footerManager.clearRunning();
84
+ ctx.ui.notify("No hunks found to commit", "info");
85
+ return;
86
+ }
87
+ // Sanitize, deduplicate, and filter hunks
88
+ await footerManager.setPhase("generateMessage", runLang);
89
+ hunks = processHunks(hunks);
90
+ // Stage and commit each hunk
91
+ await footerManager.setPhase("commit", runLang);
92
+ let committedCount = 0;
93
+ let failedCount = 0;
94
+ let skippedCount = 0;
95
+ for (const hunk of hunks) {
96
+ try {
97
+ await stageFiles(pi, hunk.files, ctx.cwd);
98
+ }
99
+ catch {
100
+ failedCount++;
101
+ continue;
102
+ }
103
+ const { stdout: stagedDiff, code: diffCode } = await pi.exec("git", ["diff", "--cached", "--stat"], { cwd: ctx.cwd });
104
+ if (diffCode !== 0 || !stagedDiff.trim()) {
105
+ skippedCount++;
106
+ continue;
107
+ }
108
+ const { code: exitCode, stderr } = await pi.exec("git", ["commit", "-m", hunk.message], { cwd: ctx.cwd });
109
+ if (exitCode !== 0) {
110
+ try {
111
+ await resetStaging(pi, ctx.cwd);
112
+ }
113
+ catch {
114
+ // Ignore reset errors
115
+ }
116
+ const detail = stderr.trim() ? ` — ${stderr.trim()}` : "";
117
+ ctx.ui.notify(`Commit failed for "${hunk.message}" (exit code ${exitCode}).${detail} Staging has been reset.`, "warning");
118
+ failedCount++;
119
+ continue;
120
+ }
121
+ committedCount++;
122
+ }
123
+ const parts = [];
124
+ if (committedCount > 0)
125
+ parts.push(`Created ${committedCount} commit${committedCount > 1 ? "s" : ""}`);
126
+ if (skippedCount > 0)
127
+ parts.push(`${skippedCount} skipped`);
128
+ if (failedCount > 0)
129
+ parts.push(`${failedCount} failed`);
130
+ if (parts.length === 0) {
131
+ ctx.ui.notify("All commits failed", "error");
132
+ }
133
+ else if (failedCount > 0) {
134
+ ctx.ui.notify(parts.join(", "), "warning");
135
+ }
136
+ else {
137
+ ctx.ui.notify(parts.join(", "), "info");
138
+ }
139
+ }
140
+ finally {
141
+ await footerManager.clearRunning();
142
+ }
143
+ }
144
+ //# sourceMappingURL=agg-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agg-commit.js","sourceRoot":"","sources":["../../src/commands/agg-commit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * /git-auto-agg-commit command
3
+ *
4
+ * Toggle auto-agg-commit feature: automatically run git-agg-commit
5
+ * after the assistant finishes responding when there are changes.
6
+ */
7
+ import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
8
+ export declare function handleAutoAggCommit(pi: ExtensionAPI, ctx: ExtensionCommandContext, args: string): Promise<void>;
9
+ //# sourceMappingURL=auto-agg-commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-agg-commit.d.ts","sourceRoot":"","sources":["../../src/commands/auto-agg-commit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAmCzC,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * /git-auto-agg-commit command
3
+ *
4
+ * Toggle auto-agg-commit feature: automatically run git-agg-commit
5
+ * after the assistant finishes responding when there are changes.
6
+ */
7
+ import { isJapanese } from "../utils/lang.js";
8
+ import { getAutoAggCommit, getLocalSettingsPath, getSettings, saveGlobalSettings, saveLocalSettings, } from "../utils/settings.js";
9
+ import { footerManager } from "../utils/footer-manager.js";
10
+ function getStatusMessage(enabled, lang) {
11
+ const ja = isJapanese(lang);
12
+ if (enabled) {
13
+ return ja
14
+ ? "[pi-git] 自動 git-agg-commit は有効です"
15
+ : "[pi-git] Auto git-agg-commit is enabled";
16
+ }
17
+ return ja
18
+ ? "[pi-git] 自動 git-agg-commit は無効です"
19
+ : "[pi-git] Auto git-agg-commit is disabled";
20
+ }
21
+ function _getToggledMessage(enabled, lang) {
22
+ const ja = isJapanese(lang);
23
+ if (enabled) {
24
+ return ja
25
+ ? "[pi-git] 自動 git-agg-commit を有効にしました"
26
+ : "[pi-git] Auto git-agg-commit enabled";
27
+ }
28
+ return ja
29
+ ? "[pi-git] 自動 git-agg-commit を無効にしました"
30
+ : "[pi-git] Auto git-agg-commit disabled";
31
+ }
32
+ export async function handleAutoAggCommit(pi, ctx, args) {
33
+ if (!ctx.hasUI) {
34
+ return;
35
+ }
36
+ const trimmed = args.trim().toLowerCase();
37
+ const current = getAutoAggCommit();
38
+ const lang = getSettings(ctx.cwd).lang ?? "en";
39
+ if (trimmed === "--help") {
40
+ const ja = isJapanese(lang);
41
+ const lines = ja
42
+ ? [
43
+ "/git-auto-agg-commit [on|off|toggle] [--help]",
44
+ "",
45
+ "サブコマンド:",
46
+ " on 自動 git-agg-commit を有効にする",
47
+ " off 自動 git-agg-commit を無効にする",
48
+ " toggle 自動 git-agg-commit の有効/無効を切り替える",
49
+ "",
50
+ "フラグ:",
51
+ " --help このヘルプを表示",
52
+ "",
53
+ "引数を省略すると、現在の状態を表示します。",
54
+ ]
55
+ : [
56
+ "/git-auto-agg-commit [on|off|toggle] [--help]",
57
+ "",
58
+ "Subcommands:",
59
+ " on Enable auto git-agg-commit",
60
+ " off Disable auto git-agg-commit",
61
+ " toggle Toggle auto git-agg-commit",
62
+ "",
63
+ "Flags:",
64
+ " --help Show this help message",
65
+ "",
66
+ "When called without arguments, shows the current status.",
67
+ ];
68
+ ctx.ui.notify(lines.join("\n"), "info");
69
+ return;
70
+ }
71
+ let next;
72
+ switch (trimmed) {
73
+ case "on":
74
+ next = true;
75
+ break;
76
+ case "off":
77
+ next = false;
78
+ break;
79
+ case "toggle":
80
+ next = !current;
81
+ break;
82
+ case "":
83
+ ctx.ui.notify(getStatusMessage(current, lang), "info");
84
+ return;
85
+ default: {
86
+ const ja = isJapanese(lang);
87
+ ctx.ui.notify(ja
88
+ ? "[pi-git] 引数が不正です。on, off, toggle のいずれかを指定してください"
89
+ : '[pi-git] Invalid argument. Use "on", "off", or "toggle"', "warning");
90
+ return;
91
+ }
92
+ }
93
+ const localPath = getLocalSettingsPath(ctx.cwd);
94
+ if (localPath) {
95
+ saveLocalSettings({ auto_agg_commit: next }, ctx.cwd);
96
+ }
97
+ else {
98
+ saveGlobalSettings({ auto_agg_commit: next });
99
+ }
100
+ await footerManager.refresh();
101
+ const ja = isJapanese(lang);
102
+ if (localPath) {
103
+ ctx.ui.notify(ja
104
+ ? `[pi-git] 自動 git-agg-commit を${next ? "有効" : "無効"}にしました(ローカル設定)`
105
+ : `[pi-git] Auto git-agg-commit ${next ? "enabled" : "disabled"} (local config)`, "info");
106
+ }
107
+ else {
108
+ ctx.ui.notify(ja
109
+ ? `[pi-git] 自動 git-agg-commit を${next ? "有効" : "無効"}にしました(グローバル設定 — Gitリポジトリ外のため)`
110
+ : `[pi-git] Auto git-agg-commit ${next ? "enabled" : "disabled"} (global config — outside git repo)`, "info");
111
+ }
112
+ }
113
+ //# sourceMappingURL=auto-agg-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-agg-commit.js","sourceRoot":"","sources":["../../src/commands/auto-agg-commit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * /git-branch command
3
+ *
4
+ * Manage git branches: list, switch, create, and delete.
5
+ */
6
+ import type { ExtensionAPI, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
7
+ export declare function handleBranch(pi: ExtensionAPI, ctx: ExtensionCommandContext, args: string): Promise<void>;
8
+ //# sourceMappingURL=branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/commands/branch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAYzC,wBAAsB,YAAY,CAChC,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAuHf"}