commit · diff

git:20260822.259dad0 to git:20260822.c976c33

16 added, 4 removed. Audit A to A.

---
name: commit
description: Generate a commit message from staged changes and let the user review before committing. Use when the user wants to commit changes or create a git commit.
argument-hint: "[manual|auto]"
- allowed-tools: AskUserQuestion, Bash(commit-prepare:*), Bash(git commit:*), Bash(konoka-commit-editor:*), Bash(run-commit-msg-hook:*), Bash(show-staged-patch:*), Edit, Read, Write, Skill(commit-style)
+ allowed-tools: AskUserQuestion, Bash(commit-prepare:*), Bash(git commit:*), Bash(git diff:*), Bash(konoka-commit-editor:*), Bash(run-commit-msg-hook:*), Bash(show-staged-patch:*), Edit, Read, Write, Skill(commit-style)
model: opus
effort: low
---
Gitリポジトリの変更をコミットします。
AIがコミットメッセージを生成し、
ユーザが確認してからコミットします。
# 確認モードの決定
`$ARGUMENTS`を確認モードとして解釈してください。
- `manual`: ユーザに差分とコミットメッセージを提示し、
確認を取ってからコミットします。
- `auto`: 差分の表示と確認を省略して、
生成したコミットメッセージでそのままコミットします。
コミットメッセージ自体は`manual`と同じタイミングで提示します。
引数が省略された場合は`manual`として扱ってください。
`manual`とも`auto`とも解釈できない値が渡された場合は、
`manual`として扱った上で、
解釈できなかった値を完了報告で伝えてください。
勝手に`auto`とみなして確認を省略してはいけません。
以降の手順のうち、
対象の確認モードが明記されているセクションは、
決定した確認モードに対応するものだけを実行してください。
明記のないセクションはどちらの確認モードでも実行してください。
# スタイルガイドラインの適用
`Skill`ツールで`commit-style`スキルを呼び出し、
スタイルガイドラインに従ってください。
# コミットメッセージファイルの生成
!`commit-prepare`
上の埋め込みコマンドが失敗した場合はエラーメッセージを報告してスキルを終了してください。
埋め込みコマンドはJSON形式で結果を出力します。
- `editmsgPath`には`COMMIT_EDITMSG`ファイルのパスが書かれています。
- `patchPath`にはステージされた差分のパッチファイルのパスが書かれています。
# コミットメッセージの内容の生成
`Read`ツールで`patchPath`のパスのファイルを読み、
差分の内容を把握して分析し、
適切なコミットメッセージを生成してください。
`Write`ツールで`editmsgPath`のファイルにコミットメッセージを書き込んでください。
# コミットメッセージの検査
コミットメッセージを書き込んだら、
以下のコマンドで検査してください。
値は実際のファイルのパスに置き換えてください。
```bash
run-commit-msg-hook <editmsgPathの値>
```
このコマンドは`git commit`が起動するのと同じ`commit-msg`フックを、
同じ方法で起動します。
グローバル設定のフックも作業中のリポジトリのフックも対象です。
フックが設定されていない場合は何も検査せずに成功します。
コマンドが失敗した場合は、
出力された指摘に従ってコミットメッセージを修正し、
このコマンドを再実行してください。
コミットの実行時ではなくこの時点で直すことで、
ユーザに確認してもらった後で弾かれる手戻りを防げます。
3回修正しても検査を通らない場合は、
指摘の内容をユーザに報告して指示を仰いでください。
フックはコミットメッセージファイルを書き換えることがあるため、
検査を通ったら`Read`ツールでファイルを読み直して、
以降のステップではその内容を使ってください。
# ステージされた差分の表示
`manual`確認モードのみのステップです。
`auto`確認モードでは`コミットメッセージの提示`へ進んでください。
`AskUserQuestion`ツールを呼び出す直前に、
以下のコマンドでステージされた差分をユーザに表示してください。
値は実際のファイルのパスに置き換えてください。
```bash
show-staged-patch <patchPathの値>
```
このコマンドは`delta`が利用できる環境では、
シンタックスハイライト付きで差分を表示します。
`delta`が無い環境では素のパッチをそのまま表示します。
半自動で変更していた場合に、
ユーザが差分を別途追いかけなくてもその場で確認できるようにするためです。
あなた自身が差分をテキストメッセージとして再出力してはいけません。
差分全文を出力トークンとして再生成すると遅く、
差分内にコードフェンス記号が含まれるとMarkdownの表示が壊れるからです。
差分の表示はコマンドの出力に任せて、
あなたは要約や説明を付け加えずに次のステップへ進んでください。
差分はあくまで表示するだけです。
`editmsgPath`のコミットメッセージファイルに差分を書き込んではいけません。
commitlintを混乱させないためです。
# コミットメッセージの確認
`manual`確認モードのみのステップです。
`auto`確認モードでは`コミットメッセージの提示`へ進んでください。
`AskUserQuestion`ツールを使って、
生成したコミットメッセージの扱いをユーザに確認してください。
質問文には生成したコミットメッセージの全文を含めてください。
要約や省略をせず、
そのまま全文を含めてください。
ユーザがメッセージの内容を見て判断できるようにするためです。
選択肢は以下の2つを設定してください。
1. このままコミットする(Recommended): 生成されたメッセージをそのままコミットする。
2. テキストエディタで編集する: エディタでコミットメッセージを編集してからコミットする。
`AskUserQuestion`ツールはこれらに加えて`Other`(自由テキスト入力)の選択肢を自動的に追加します。
`Other`が選ばれた場合はユーザがコミットメッセージの修正指示を入力したものとして扱います。
## このままコミットする場合
一時ファイルに書き出したコミットメッセージをそのまま使用して、
コミットの実行に進んでください。
## テキストエディタで編集する場合
以下のコマンドでユーザにコミットメッセージを編集してもらいます。
値は実際のファイルのパスに置き換えてください。
タイムアウトは最大の600秒(10分)に設定してください。
```bash
konoka-commit-editor <editmsgPathの値> <patchPathの値>
```
エディタが正常終了したら、
`COMMIT_EDITMSG`ファイルを`Read`ツールで読み直してください。
誤字があれば修正してファイルを上書きしてください。
その後`run-commit-msg-hook`をもう一度実行して、
編集後の内容も検査してください。
ユーザ自身が書いた内容なので、
検査に失敗しても勝手に書き換えず、
指摘の内容を報告して指示を仰いでください。
検査を通ったらコミットの実行に進んでください。
エディタが異常終了した場合、
ユーザがコミットをキャンセルしたいという意思表示であると解釈して、
コミット作業をキャンセルしてください。
## `Other`(修正指示)の場合
ユーザの修正指示に従ってコミットメッセージを修正してください。
`Edit`ツールでコミットメッセージ部分のみを修正してください。
修正後に`コミットメッセージの確認`ステップに戻ってください。
## 選択がキャンセルされた場合
ユーザがコミットをキャンセルしたいという意思表示であると解釈して、
コミット作業をキャンセルしてください。
# コミットメッセージの提示
`auto`確認モードのみのステップです。
`manual`確認モードでは`コミットの実行`へ進んでください。
- 生成したコミットメッセージの全文をテキストメッセージとして出力してください。
+ まず以下のコマンドでコミット対象のファイル一覧を表示してください。
+
+ ```bash
+ git diff --cached --stat
+ ```
+
+ 続けて生成したコミットメッセージの全文をテキストメッセージとして出力してください。
要約や省略をせず、
そのまま全文を出力してください。
`AskUserQuestion`ツールは呼び出さず、
ユーザの応答も待たずにコミットの実行に進んでください。
- 確認は取らないのにメッセージを提示するのは、
+ 確認は取らないのに内容を提示するのは、
`manual`確認モードと同じタイミングで内容が目に入るようにするためです。
コミットの後に報告されるより、
コミットの直前に流れているほうが読み手の追いやすさで一貫します。
- ステージされた差分は表示しません。
+ ファイル一覧を出すのは、
+ コミットメッセージがAIの生成した要約であり、
+ 実際にステージされている内容を反映している保証が無いからです。
+ 意図せずステージされたファイルがあれば、
+ 一覧を見れば後から気付けます。
+
+ 差分の全文は表示しません。
差分は確認して判断するためのものであり、
判断を求めない`auto`確認モードでは表示する意味がないからです。
# コミットの実行
以下のコマンドでコミットを実行してください。
値は実際のファイルのパスに置き換えてください。
```bash
git commit -F <editmsgPathの値>
```
# 完了報告
コミットが完了したら報告してください。
`auto`確認モードでもコミットの直前にメッセージ全文を出力しているため、
報告で全文を繰り返す必要はありません。