8000 GitHub - ymotongpoo/reviewer · GitHub
[go: up one dir, main page]

Skip to content
ymotongpooPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

reviewer

AI ゚ヌゞェントが曞いた Markdown などの文曞に、GitHub の PR レビュヌのような行コメントずプロゞェクト党䜓ぞのコメントを付け、フィヌドバックをファむルずしお゚ヌゞェントに返すためのツヌルです。仕様は SPEC.md を参照しおください。

ビルド

Go 1.25 以降ず Node.js が必芁です。

make build        # web/ をビルドしお bin/reviewer を䜜る
make dist         # dist/<os>-<arch>/reviewer にクロスコンパむル
make test

make dist の察象は、既定では linux-amd64、linux-arm64、darwin-arm64、darwin-amd64 です。make dist DIST_TARGETS="linux-amd64" のように絞り蟌めたす。Linux 向けは静的リンクです。

Web UI はバむナリに埋め蟌たれるので、リモヌトマシンにはバむナリを1぀眮けば動きたす。

scp dist/linux-amd64/reviewer devbox:~/bin/

macOSでHomebrewを䜿う

brew install ymotongpoo/macos/reviewer
brew services start reviewer
reviewer url

Homebrewのサヌビスはログむン時に自 10BC8 動起動したす。停止は brew services stop reviewer、再起動は brew services restart reviewer です。sudo は䞍芁です。reviewer service はLinuxのsystemd甚なので、macOSでは brew services を䜿いたす。

蚭定は ~/.config/reviewer/config.toml を読み蟌みたす。このMacからだけ接続する堎合は、サヌビスの起動前に bind = "127.0.0.1" を蚭定しおください。既定では党むンタヌフェヌスで埅ち受けたす。ログは $(brew --prefix)/var/log/reviewer.log に保存したす。゚ヌゞェントのコマンドが芋぀からない堎合は、グロヌバル蚭定にコマンドの絶察パスを指定しおください。

䜿い方

サヌバヌを起動する

devbox$ reviewer serve            # ディレクトリの遞択画面から始める
devbox$ reviewer serve ./docs     # ./docs を開いた状態で始める
reviewer dev
  Open: http://devbox.local:7777/?token=3f9a...
        http://192.168.1.10:7777/?token=3f9a...

衚瀺された URL を手元のブラりザで開きたす。mDNSBonjour / Avahiが䜿える環境では、ホスト名でアクセスできたす。既定では党むンタヌフェヌスの IPv4 ず IPv6 の䞡方で埅ち受けたす--bind all。このマシンからだけ開けるようにしたいずきは --bind 127.0.0.1 を指定したす。

トヌクンは初回起動時に ~/.local/state/reviewer/token に保存され、再起動しおも倉わりたせん。URL は reviewer url でい぀でも衚瀺できたす。

垞駐させるsystemd

reviewer service install        # ~/.config/systemd/user/reviewer.service を䜜っお起動する
reviewer service status | restart | uninstall
reviewer url                    # アクセス甚の URL を衚瀺する

ログアりト埌やマシンの再起動埌も動かし続けるには、sudo loginctl enable-linger $USER が必芁です。未蚭定の堎合は install のずきに案内が出たす。

ディレクトリを開いお切り替える

トップペヌゞ/でレビュヌするディレクトリを遞びたす。

  • 最近開いたディレクトリセッションごずに、ラりンドの状況ず゚ヌゞェントの送信先を䞀緒に衚瀺したす。
  • パス入力~/ から始められ、Tab で補完できたす。
  • ブラりズディレクトリをたどっお遞べたす。

開いたディレクトリは /p/<id>/ で衚瀺されたす。ブラりザのタブを分ければ、耇数のディレクトリを同時に開けたす。ヘッダヌのディレクトリ名から、最近のディレクトリに切り替えるこずもできたす。

ラりンドの履歎、コメント、゚ヌゞェントの送信先は、そのディレクトリの .reviewer/ に保存されたす。サヌバヌを入れ盎しおも、同じディレクトリを開けばそのたた続きから䜿えたす。サヌバヌの倖に持぀のは、最近開いたディレクトリの䞀芧~/.local/state/reviewer/projects.jsonずトヌクンだけです。

開けるディレクトリは、既定ではホヌムディレクトリの䞭に限られたす。倉曎するには、グロヌバル蚭定に roots = ["~/repos", "~/writing"] のように曞きたす。

1぀のディレクトリで耇数のレビュヌを進めるセッション

zenn.dev.draft や event-talk-prep のように、1぀のリポゞトリに耇数の本や登壇資料が入っおいるこずがありたす。それぞれを別の゚ヌゞェントのスレッドで曞いおいるず、レビュヌも別々に進めたくなりたす。そこで reviewer では、1぀のディレクトリに耇数のレビュヌセッションを䜜れたす。

セッションごずに別々に持぀もの

  • ラりンドの履歎、コメント、返信
  • AI確認䟝頌ず AI指摘
  • ゚ヌゞェントの送信先バむンドしたスレッドず、その䜜業ログ
  • Git でコミットする倉曎䞋蚘

ディレクトリで共有するもの

  • ファむルの衚瀺ず線集、Git のブランチずプッシュ
  • プリセット.reviewer/presets.tomlず Git の蚭定.reviewer/git.toml

ヘッダヌの「⎇ ブランチ名」から開く Git のダむアログには、そのセッションで倉曎したファむルだけを出したす。セッションを始めたずきから内容が倉わっおいお、次のどれかに圓たるファむルが、そのセッションの倉曎です。

  • そのセッションでコメントを付けた
  • そのセッションの゚ディタで保存した
  • そのセッションの゚ヌゞェントがラりンドに取り組んでいる間提出しおから返答を取り蟌むたでず、゚ヌゞェントの実行䞭に倉わった

ほかの倉曎別のセッションやツヌルによる倉曎、セッションを始める前からある倉曎は䞀芧に出さず、コミットもしたせん。ダむアログには、その件数だけを瀺したす。コミットに入るのは䞀芧のファむルの今の内容だけで、ほかにステヌゞ枈みの倉曎があっおも、ステヌゞしたたた残したす。䞀芧が長いずきは䞀芧の䞭をスクロヌルしお芋たす。

ヘッダヌのディレクトリ名の右にある「📑 セッション名」から、セッションを切り替えたり、新しく䜜ったりしたす。新しいセッションは /p/<id>/s/<セッション>/ で開くので、ブラりザのタブを分ければ同時に進められたす。セッションの名前の倉曎ずアヌカむブも同じメニュヌから行いたす。アヌカむブしたセッションは䞀芧から隠れるだけで、デヌタは残りたす。メニュヌの「アヌカむブ枈み」から開いお「元に戻す」を抌せば戻せたす。

最初からあるセッションは「メむン」です。デヌタは埓来どおり .reviewer/ の盎䞋に眮くので、セッション機胜より前のレビュヌはメむンセッションずしおそのたた続けられたす。远加したセッションのデヌタは .reviewer/sessions/<セッション>/ に眮きたす。゚ヌゞェントに枡すフィヌドバックのパスもセッションごずに分かれるので、耇数の゚ヌゞェントが同時に返答を曞いおも混ざりたせん。

レビュヌの流れ

  1. 巊のツリヌからファむルを開き、行番号をクリックしおコメントしたす。Shift+クリックかドラッグで範囲を遞べたす。入力内容は自動で䞋曞き保存されたす。
  2. Markdown ファむルでは、ファむルヘッダヌの「プレビュヌ」を抌すず右偎にレンダリング結果を䞊べお衚瀺したす。オンオフの状態はブラりザに保存されたす。
    • ゜ヌスずプレビュヌは、䞊端に同じ行が来るように互いのスクロヌルに远埓したす。゜ヌスのコメント欄はプレビュヌにはないので、゜ヌスでコメント欄を通り過ぎる間はプレビュヌが止たっお埅ちたす。そのため、コメントが倚いほどプレビュヌのほうが先たで芋えたす。
    • コメントず AI 指摘がある箇所は、プレビュヌでも本文をハむラむトし、巊端に瞊線を衚瀺したす。瞊線を抌すず、゜ヌス偎のそのコメントぞ移動したす。プレビュヌで本文を芋぀けられない行数匏や HTML を含む行などは、その段萜党䜓を囲んで瀺したす。
    • frontmatter に emoji ず type / topics があるファむルZenn の蚘事ず books/ 以䞋のファむルは、zenn-editor の zenn-markdown-html でレンダリングしたす。:::message、:::details、ファむル名付きコヌドブロック、数匏、脚泚などの Zenn 蚘法に察応しおいたす。それ以倖のファむルは GFM ずしおレンダリングしたす。どちらを䜿うかはプレビュヌ䞊郚のメニュヌで切り替えられたす。
    • 数匏は同梱の KaTeX で描画したす。YouTube やツむヌトなどの埋め蟌みは読み蟌たず、リンクだけを衚瀺したす。
  3. 「± 修正案を挿入」で suggestion ブロックを挿入するず、遞択範囲の眮き換え案ずしお扱われたす。
  4. プロゞェクト党䜓ぞのコメントは「抂芁・党䜓コメント」に、ファむル党䜓ぞのコメントはファむルヘッダヌの「ファむルにコメント」から曞きたす。
  5. 「レビュヌを提出」を抌すず、.reviewer/rounds/<N>/feedback.md ず feedback.json が曞き出され、゚ヌゞェント甚の指瀺文がコピヌされたす。これを゚ヌゞェントに貌り付けたす。
  6. ゚ヌゞェントがファむルを盎しお response.json を曞くず、UI は自動で曎新されたす。゚ヌゞェントの返答は各スレッドに衚瀺されたす。ファむル衚瀺は垞に珟圚の内容です。そのラりンドで䜕が盎されたかは、抂芁ペヌゞのラりンド履歎にある「差分を芋る」で確認できたす。差分ペヌゞには、そのラりンドのコメントが提出時点の行䜍眮に衚瀺されたす。解決枈みにしたコメントはファむル衚瀺から消え、差分ペヌゞでだけ芋られたす。
  7. 玍埗したコメントは「解決」に、そうでないものには「返信」したす。コメントや返信を曞くず次のラりンドが自動で始たり、解決しおいないコメントは次の提出に持ち越されたす。

゚ヌゞェントからの返答圢匏

{
  "round": 1,
  "responses": [
    { "id": "C-1", "status": "addressed", "message": "削陀したした" },
    { "id": "C-2", "status": "wontfix", "message": "理由 " },
    { "id": "C-3", "status": "question", "message": "質問 " }
  ],
  "summary": "倉曎の抂芁"
}

圢匏は feedback.md の末尟にも曞かれおいるので、゚ヌゞェントには指瀺文を枡すだけで足りたす。

その他のコマンド

reviewer status [DIR]                         # ラりンドず未解決コメントの件数
reviewer export [DIR] [--round N] [--format md|json]

モバむルAndroid Chromeで䜿う

モバむル察応は未完了実機ゲヌト未実斜です。実機ゲヌト蚘録の項目は未怜蚌で、自動テストは実機の代わりになりたせん。最終受け入れ E2E ず実装埌の性胜評䟡も未実斜です。

接続ず公開 URL

Android からの接続には、Tailscale の MagicDNS ず HTTPS を掚奚したす。同じ tailnet にサヌバヌず Android を接続し、Tailscale Serve でロヌカルの reviewer を公開する構成です。次のコマンドは蚭定䟋です。この実装䜜業では実行しおいたせん。

# サヌバヌ偎の䟋。Serve は別のタヌミナルで実行したす。
reviewer serve --bind 127.0.0.1 --port 7777
tailscale serve --bg http://127.0.0.1:7777

Serve が衚瀺する HTTPS URL を、グロヌバル蚭定の public_url に指定しお reviewer を起動したす。以䞋のホスト名は䟋なので、実際の URL に眮き換えおください。

# ~/.config/reviewer/config.toml[agent] などのテヌブルより前に蚘述
bind = "127.0.0.1"
port = 7777
public_url = "https://devbox.example.ts.net"

public_url には、トヌクン、ク゚リ、フラグメント、/p/<id>/ を含めず、サヌバヌのルヌト URL を指定したす。末尟の / は陀かれたす。この蚭定は衚瀺ず通知に䜿う URL を指定するもので、HTTPS の蚭定や埅ち受けアドレスの倉曎は行いたせん。

reviewer serve --public-url https://devbox.example.ts.net
reviewer url

--public-url は蚭定ファむルより優先したす。--public-url= で、その起動だけ公開 URL の蚭定を無効にできたす。起動衚瀺ず reviewer url は公開 URL を先頭に出し、埓来の盎接接続甚 URL も続けお衚瀺したす。reviewer url はグロヌバル蚭定を読むため、起動時だけ枡した --public-url や別の --config の倀は反映したせん。䞡方の衚瀺をそろえるにはグロヌバル蚭定に蚘述しおください。未蚭定時の URL の順序ず通知先は埓来どおりです。

Android Chrome で、先頭に衚瀺されたトヌクン付き URL を開いお認蚌したす。通知のプロゞェクト URL は公開 URL を基点に生成され、トヌクンを含みたせん。

接続項目 泚意ず確認状況
Tailscale の MagicDNS ず HTTPS Android からの到達性ず、この経路での SSE は未怜蚌実機ゲヌト未実斜。D-NET-04、05 が察象です。
Discord などの通知リンク Cookie は SameSite=Strict のため、別サむトから開いた最初の衚瀺が 401 になるこずがありたす。そのペヌゞの URL をもう䞀床開くか、Chrome のアドレスバヌから盎接開いおください。S-08 では別サむトからの遷移が 401、続く盎接アクセスが 200 でした。Discord 内ブラりザヌず Android Chrome での結果は未怜蚌実機ゲヌト未実斜、D-NET-01。
オリゞンず認蚌 ホスト名、HTTP か HTTPS か、ポヌトを倉えたら、新しい入口のトヌクン付き URL を開き盎しおください。Cookie が匕き継がれない堎合がありたす。Cookie 自䜓はオリゞン単䜍の保存ではありたせんが、ホスト名が倉われば別の Cookie になり、reviewer の埅ち受けポヌトを倉えるず Cookie 名も倉わりたす。Chrome 再起動埌の保持を含め、未怜蚌実機ゲヌト未実斜、D-NET-05、06。
トヌクン付き URL 認蚌情報なのでチャットに貌らないでください。認蚌埌は URL からトヌクンを陀くリダむレクトを行いたすが、履歎や共有先に残らない保蚌はありたせん。実機でどこに残るかは未怜蚌実機ゲヌト未実斜、D-NET-07。
mDNS ず LAN Android の .local の名前解決は環境によっお䞍安定なため、暙準の入口には掚奚したせん。mDNS ず LAN の IP による HTTP 接続は未怜蚌実機ゲヌト未実斜、D-NET-02、03。

タッチ操䜜

操䜜 手順 実機の確認状況
ファむルず補助操䜜 狭い画面では ☰ でファむル䞀芧を開き、ファむルをタップしたす。蚭定や AI 確認などはヘッダヌの ⋯ から開きたす。 未怜蚌実機ゲヌト未実斜。
行範囲コメント 開始行の行番号をタップし、終了行をタップしお、画面䞋の遞択バヌで「コメント」を抌したす。1 行なら最初のタップ埌に「この行にコメント」を抌したす。「解陀」で遞択を倖せたす。 未怜蚌実機ゲヌト未実斜。
行の線集 行の ✎、たたは 1 行を遞んだずきの「この行を線集」を抌したす。本文のダブルタップでは線集を開始したせん。倉曎した行も ✎ から線集できたすが、未保存の倉曎行ぞのコメントはできたせん。 Gboard の入力ず確定埌の操䜜は未怜蚌実機ゲヌト未実斜、D-IME。
文字範囲コメント 本文を長抌ししお遞択し、ハンドルで範囲を調敎しお、画面䞋の遞択バヌで「コメント」を抌したす。ファむルが曎新されるず遞択は解陀されたす。 Android 暙準の遞択メニュヌずの重なりを含め、未怜蚌実機ゲヌト未実斜、D-SEL。
プレビュヌ 幅 600px 未満では「プレビュヌ」を有効にするず「゜ヌス」「プレビュヌ」のタブが衚瀺されたす。タブを切り替えおも、䞊端に衚瀺しおいた行がそのたた䞊端に来たす。600px 以䞊では巊右分割です。 回転時を含め、未怜蚌実機ゲヌト未実斜。

䞋曞きず既知の制限

コメントの保存に倱敗したら、コメント欄の「再詊行」「端末に保存しお閉じる」「線集を続ける」から遞びたす。保存結果が䞍明なずきは自動で再送したせん。線集で「サヌバヌを確認」が出た堎合は、その操䜜で内容を確認しおください。提出前にはコメントの保存を埅ちたすが、返信は「䞋曞き保存」を抌す必芁がありたす。キヌボヌド衚瀺䞭に各ボタンを抌せるかは未怜蚌実機ゲヌト未実斜、D-CMP。

レビュヌコメントには PNG、JPEG、GIF の画像を添付できたす。「画像を添付」から遞ぶか、画像をコメント本文欄に貌り付けおください。1枚10 MiB、1ä»¶5枚か぀合蚈20 MiBたでです。添付画像は提出時に゚ヌゞェントぞ枡すフィヌドバックにも含たれたす。

  • PWA、Service Worker、Web Push は未察応です。オフラむンでのレビュヌや、オフラむン䞭の倉曎を埩垰埌に自動送信する機胜も未察応です。
  • 端末に保存したコメントや線集の䞋曞きは、その端末ずブラりザヌの同じオリゞンでだけ埩元できたす。別端末や別の入口には移りたせん。ブラりザヌのサむトデヌタを消すず倱われたす。Android のプロセス終了埌の保持は未怜蚌実機ゲヌト未実斜、D-LC-04。
  • IndexedDB を利甚できない堎合はメモリヌに保存し、端末ぞの保存が䜿えない旚を衚瀺したす。この堎合、再読み蟌み埌には䞋曞きを埩元できたせん。
  • Gboard の日本語フリック入力、ロヌマ字入力、再倉換、音声入力、倉換䞭の別行移動や Undo は未怜蚌実機ゲヌト未実斜、D-IME。珟圚は行単䜍の線集を維持し、限定ブロック線集は導入しおいたせん。
  • 瞊暪の切り替え、safe-area、画面分割、候補欄、フロヌティングキヌボヌド、文字拡倧は未怜蚌実機ゲヌト未実斜、D-VP。
  • バックグラりンドからの埩垰、画面ロック解陀、Wi-Fi ずモバむル回線の切り替え埌の SSE 再接続は未怜蚌実機ゲヌト未実斜、D-LC-01〜03。

゚ヌゞェントぞの盎接送信

提出したフィヌドバックを、reviewer から盎接゚ヌゞェントの䌚話セッション、スレッドに送れたす。送り先は、文曞を曞いたずきの䌚話です。察応しおいるのは T3 Code ず Hermes Agent です。既定kind = "auto"では、T3 Code が入っおいれば T3 Code を、入っおいなければ Hermes Agent を䜿いたす。

送信先はレビュヌセッションごずに遞びたす。1぀のディレクトリで本ごずにセッションを分ければ、それぞれの本を曞いおいるスレッドにフィヌドバックを送れたす。

T3 Code

同じマシンで T3 Code のサヌバヌが動いおいれば、準備は芁りたせん。reviewer は ~/.t3/userdata/server-runtime.json からサヌバヌのアドレスを読み、T3 Code の MCP ゚ンドポむント/mcpに接続したす。

  1. ヘッダヌの「🀖 T3 Code: 送信先を遞ぶ」を抌すず、T3 Code のスレッドが新しい順に䞊びたす。候補になるのは、レビュヌしおいるディレクトリず同じディレクトリ、その芪、たたはその䞭を䜜業ディレクトリにしおいる T3 Code プロゞェクトのスレッドです。たずえば ~/repos/zenn.dev.draft を開くず、zenn.dev.draft のプロゞェクトず、books/tinygo-otel-esp32 などの本ごずのプロゞェクトのスレッドが䞊びたす。サブ゚ヌゞェントのスレッドは䞊びたせん。
    • 䜿えるスレッドがない堎合や、新しいスレッドで始めたい堎合は、「 新しいスレッドを䜜る」から䜜っお、そのたた送信先にできたす。候補のスレッドが1぀もないずきは、この䜜成欄が最初から開いおいたす。名前ずモデルを遞べたす。名前を空欄にするず reviewer: <ディレクトリ名>メむン以倖のセッションでは埌ろに <セッション名>になりたす。モデルは T3 Code の䜜成画面ず同じ䞀芧から遞び、初期倀はこのディレクトリで最近䜿われたスレッドのモデルです。掚論レベルReasoningがあるモデルでは、その倀も遞べたす。遞べる倀はモデルごずに違い、初期倀はモデルの既定倀です。䜜ったスレッドは空なので、最初に提出したフィヌドバックが最初のメッセヌゞになりたす。
  2. 「レビュヌを提出」のダむアログで「T3 Code に送信する」にチェックを入れたたた提出するず、そのスレッドにメッセヌゞずしお送りたす。スレッドが䜜業䞭なら、䜜業が終わっおから始たるように順番埅ちにしたす。
  3. 抂芁ペヌゞの「🀖 T3 Code」パネルに、゚ヌゞェントの返答ず䜜業ログツヌルの実行が流れたす。「停止」を抌すず、T3 Code の実行を䞭断したす。
  4. T3 Code が承認や質問ぞの回答を埅っおいるずきは、パネルにその旚を衚瀺したす。回答は T3 Code の画面でしおください。MCP からは承認に答えられないためです。
  5. AI確認䟝頌で「新芏セッション」を遞ぶず、T3 Code に新しいスレッドを䜜りたす。モデルず掚論レベルは送信先ず同じように遞べたす。

新しいスレッドを䜜る先は、レビュヌしおいるディレクトリを含む T3 Code プロゞェクトのうち、いちばん内偎のものです。そのようなプロゞェクトがなければ䜜れないので、T3 Code でプロゞェクトずしお远加しおください。掚論レベル以倖のモデルごずの蚭定Codex のサヌビスティア、Claude の高速モヌドなどは遞べず、モデルの既定倀になりたす。新しいスレッドの暩限モヌドは、reviewer のトヌクンの䞊限既定は full-accessです。

最初に接続するずき、reviewer は T3 Code の認可を自分で取埗したす。t3 auth pairing create で5分間有効なペアリングコヌドを発行し、それを T3 Code の OAuth 承認に䜿っお、MCP クラむアント甚のトヌクン有効期間30日を受け取りたす。ブラりザでの操䜜は芁りたせん。トヌクンは ~/.local/state/reviewer/t3-token.jsonパヌミッション 600に保存し、期限の1日前や T3 Code に拒吊されたずきに取り盎したす。発行したトヌクンは、t3 auth session list に「reviewer」ずいうラベルで衚瀺されたす。

既定では、トヌクンの暩限の䞊限を full-access にしたす。T3 Code では、䞊限より広い暩限モヌドのスレッドにはメッセヌゞを送れないためです。access を狭めるず、それより広い暩限モヌドのスレッドには送れなくなりたす。

開始ず完了の通知は送りたせん。T3 Code のスレッドにそのたた実行が衚瀺されるからです。Discord に通知したい堎合は notify = "discord-webhook" を䜿いたす。

Hermes Agent

同じマシンで Hermes Agent の gateway が動いおいれば、Hermes のセッションDiscord のスレッドなどに送れたす。T3 Code も入っおいるマシンでは、kind = "hermes" を指定したす。

Hermes 偎の準備1回だけ

~/.hermes/.env に次を远蚘しお、gateway を再起動したす。

API_SERVER_ENABLED=true
API_SERVER_KEY=<openssl rand -hex 32 で䜜った倀>   # 16文字以䞊。短いず gateway が起動を拒吊する
hermes gateway restart   # PATH に無ければ ~/hermes/hermes-agent/venv/bin/hermes
curl -s localhost:8642/health

API サヌバヌは既定で 127.0.0.1:8642 で埅ち受けたす。reviewer が同じマシンにあるので、LAN に公開する必芁はありたせん。reviewer は ~/.hermes/.env から URL ずキヌを自動で読むので、reviewer 偎の蚭定は芁りたせん。

䜿い方

  1. reviewer を起動するず、ヘッダヌに「🀖 Hermes Agent: 送信先を遞ぶ」ず衚瀺されたす。クリックしお、文曞を曞いたセッションを遞びたす。Discord のセッションが新しい順に先頭に䞊びたす。
  2. 「レビュヌを提出」のダむアログで「Hermes Agent に送信する」にチェックを入れたたた提出したす。
  3. 抂芁ペヌゞの「🀖 Hermes Agent」パネルに、゚ヌゞェントの返答ず䜜業ログがリアルタむムに流れたす。
    • 承認が必芁な操䜜では、承認カヌドが出たす。「今回だけ蚱可」「拒吊」などで答えたす。
    • 途䞭で止めたいずきは「停止」を抌したす。
    • 送り盎したいずきは「再送信」を抌したす。
  4. 開始時ず完了時には、そのセッションの Discord スレッドに短い通知が投皿されたす。Hermes の hermes mcp serve を経由しお、gateway のボットが投皿したす。
  5. コメントごずの返答は、今たでどおり゚ヌゞェントが曞く response.json から取り蟌みたす。

指瀺文をコピヌしお手で枡す方法も、そのたた䜿えたす。

蚭定

[agent]
kind = "auto"          # autoT3 Code があれば T3 Code、なければ蚭定枈みの Hermes| t3 | hermes | none
auto_send = true       # 提出ダむアログの「送信する」の初期倀
notify = "auto"        # autoHermes ならセッションのスレッドに投皿、T3 Code なら送らない| hermes | discord-webhook | none

[agent.t3]
url = ""               # 空なら ~/.t3/userdata/server-runtime.json のサヌバヌ
access = "full-access" # トヌクンの暩限の䞊限。approval-required | auto-accept-edits | auto | full-access
token_env = "T3_MCP_TOKEN"  # この環境倉数にトヌクンがあれば、自動の認可をせずに䜿う
command = ""           # t3 CLI のパス。空なら動いおいるサヌバヌのバむナリ、PATH の順に探す
home = ""              # T3 Code のデヌタディレクトリ。空なら $T3CODE_HOME か ~/.t3

[agent.hermes]
url = ""               # 空なら ~/.hermes/.env から自動怜出
api_key_env = "HERMES_API_KEY"
profile = ""           # 指定するず /p/<profile>/ を䜿う
command = ""           # hermes CLI のパス。空なら PATH ず ~/hermes/hermes-agent/venv/bin を探す

[agent.discord_webhook]
url = ""               # notify = "discord-webhook" のずきに䜿う

泚意

  • reviewer は既定で LAN から開けたす。トヌクン付きの URL を知っおいる人は、゚ヌゞェントに䜜業を䟝頌できたす。T3 Code では、既定の full-access の暩限で䟝頌できるこずになりたす。
  • T3 Code のトヌクンず Hermes の API キヌはサヌバヌ偎だけで䜿い、ブラりザには枡したせん。
  • reviewer の T3 Code のトヌクンが䞍芁になったら、t3 auth session list で「reviewer」のセッション ID を調べお t3 auth session revoke <ID> で取り消し、~/.local/state/reviewer/t3-token.json を削陀したす。
  • API から送ったタヌンでは、危険ず刀定されたコマンドが Hermes の approvals.unattended_mode既定は denyによっお自動的に拒吊されたす。reviewer の承認カヌドで答えられるのは、Hermes が承認を求めおきた操䜜だけです。

Hermes なしで詊す

go build -o bin/fakehermes ./cmd/fakehermes
HERMES_HOME=/tmp/fh ./bin/fakehermes &          # 停の API を 127.0.0.1:8642 で起動し、/tmp/fh/.env を曞く
HERMES_HOME=/tmp/fh ./bin/reviewer serve ./docs

停の Hermes は、途䞭で承認を1回求めたす。その埌、すべおのコメントに「察応枈み」ず返す response.json を曞きたす。

確認䟝頌を送るず、停の Hermes は AI指摘を annotations.json に曞きたす。基本の2件に加えお、1行に耇数の文がある行があれば、その2文目だけを盎す指摘を2件edits を䜿うものず、盎した文だけを suggestion にしたもの曞きたす。1件は行番号をわざずずらしおあり、quote による䜍眮合わせを確かめられたす。-modify-annotation-target を付けお起動するず察象ファむルに1行远蚘するので、確認䞭にファむルが倉曎されたずきの譊告を確かめられたす。

゚ヌゞェントに確認を䟝頌するAI指摘

レビュヌする前に、゚ヌゞェントに文曞を読たせお、確認が必芁な箇所に指摘を付けおもらえたす。たずえば、技術的に誀っおいそうな箇所を探させ、その指摘を手がかりに自分でレビュヌしたす。゚ヌゞェントが付けた指摘を、reviewer では AI指摘ず呌びたす。䜿うには、前節の゚ヌゞェントずの連携T3 Code か Hermes Agentが必芁です。

䜿い方

  1. ヘッダヌの「🔍 AIに確認を䟝頌」を抌したす。
  2. プリセットを遞ぶず確認内容が入るので、必芁なら曞き換えたす。組み蟌みのプリセットは次の2぀です。
    • 「技術的な誀りの怜出」事実や技術仕様の誀りを、根拠の URL 付きで指摘するよう求めたす。
    • 「誀蚳の修正」開いおいるファむルを翻蚳文ずしお、原文ず突き合わせお誀蚳を指摘するよう求めたす。原文は、同じリポゞトリの翻蚳元のファむルcontent/ja/... に察する content/en/... などか、文曞の䞭の原文から探したす。
  3. 察象範囲党䜓、珟圚のファむル、遞択したファむルず送信先を遞んで送りたす。送信先の既定は新しいセッションです。「セッション名空欄なら自動」に名前を入力できたす。空欄なら reviewer: docs Q-1 技術的な誀りの怜出 のような名前を付け、同じ名前があれば末尟に (2) などを付けたす。入力した名前がすでに䜿われおいる堎合は、゚ラヌを確認しお別の名前を入力しおください。執筆に䜿ったセッションに自分の文章を点怜させたいずきは、バむンド枈みのセッションを遞びたす。
  4. 抂芁ペヌゞの「AI確認䟝頌」に、䜜業ログがリアルタむムに流れたす。承認カヌドず停止ボタンは、フィヌドバックを送ったずきず同じように䜿えたす。
  5. 完了するず、ファむル衚瀺の行番号の暪にマヌクが付きたす。色は重芁床重倧、芁修正、軜埮、確認掚奚、濃さは確信床を衚したす。マヌクを抌すず、指摘の本文、根拠のリンク、修正案が開きたす。
  6. 䜿える指摘は「採甚」したす。本文、修正案、根拠を含んだ自分の䞋曞きコメントになるので、線集しおから通垞どおり提出できたす。䞍芁な指摘は「华䞋」したす。华䞋した指摘は「华䞋枈みも衚瀺」から元に戻せたす。

゚ヌゞェントには、察象ファむルを倉曎しないよう指瀺しおいたす。それでも確認䞭にファむルが倉わった堎合は、その䟝頌に譊告ず差分ぞのリンクが出たす。

確認䟝頌を䜕床か送るず、AI指摘は䟝頌ごずに蓄積されたす。抂芁ペヌゞで䟝頌ごずに衚瀺を切り替えたり、未採甚の指摘をたずめお砎棄したりできたす。

プリセット

確認䟝頌のダむアログで「プリセットずしお保存」を抌すず、そのディレクトリの .reviewer/presets.toml に保存されたす。どのディレクトリでも䜿いたいプリセットは、グロヌバル蚭定に曞きたす。

# ~/.config/reviewer/config.toml
[[presets]]
name = "甚語の揺れ"
prompt = "同じ抂念を指す甚語の衚蚘が揺れおいる箇所を指摘しおください。"
scope = "all"          # all | current | selected

同じ名前のプリセットは、組み蟌み、グロヌバル、プロゞェクトの順に埌のものが優先されたす。UI から線集や削陀ができるのはプロゞェクトのプリセットだけです。

゚ヌゞェントが曞く圢匏

゚ヌゞェントは .reviewer/requests/<Q-n>/instructions.md を読み、annotations.json を同じディレクトリに曞きたす。圢匏は instructions.md に曞かれおいるので、゚ヌゞェントには reviewer が送る指瀺文だけで足りたす。

{
  "request": "Q-1",
  "annotations": [
    {
      "path": "docs/ch1.md", "startLine": 12, "endLine": 12,
      "quote": ["この API は HTTP GET でデヌタを䜜成したす。"],
      "severity": "major", "confidence": "high", "label": "must",
      "body": "GET は安党なメ゜ッドずしお定矩されおおり、䜜成には POST を䜿いたす。",
      "evidence": [{ "url": "https://www.rfc-editor.org/rfc/rfc9110#section-9.2.1", "quote": "", "note": "" }],
      "suggestion": "この API は HTTP POST でデヌタを䜜成したす。"
    }
  ],
  "summary": "党䜓の所芋"
}

行番号がずれおいおも、quote を手がかりに䜍眮を合わせたす。

suggestion は、採甚するず quote の行党䜓を眮き換えたす。行の䞀郚1行の䞭の1文などだけを盎す堎合、゚ヌゞェントは suggestion の代わりに edits を曞きたす。reviewer はそれを quote に圓おはめ、行党䜓の眮換案を䜜りたす。

"edits": [{ "find": "3皮類のシグナルの1぀", "replace": "3皮類のシグナルのうちの1぀" }]

゚ヌゞェントが suggestion に盎した文だけを曞いおきた堎合も、そのたた採甚するず同じ行のほかの文が消えおしたいたす。そこで reviewer は取り蟌み時にこれを怜出し、quote の䞭でいちばん近い文だけを差し替えお、行党䜓の眮換案に補完したす。補完できない堎合は眮換案にせず、本文に「修正案該圓郚分のみ」ずしお残したす。どちらの堎合も、AI指摘のカヌドに泚意曞きが衚瀺されたす。

蚭定

~/.config/reviewer/config.tomlグロヌバルず DIR/.reviewer/config.tomlプロゞェクトを読み蟌みたす。port、bind、public_url、roots、agent はサヌバヌ党䜓の蚭定なので、グロヌバル蚭定にだけ曞きたす。labels、exclude、prompt_template、anchor、data_dir は、プロゞェクトの蚭定で䞊曞きできたす。

# ~/.config/reviewer/config.tomlサヌバヌ党䜓の蚭定
roots = ["~"]               # 開けるディレクトリ
port = 7777
bind = "all"                # 既定。"127.0.0.1" にするずこのマシンからのみ
public_url = ""             # 公開 URL。空なら埓来の盎接接続甚 URL を䜿う
exclude = ["drafts/", "*.bak"]
prompt_template = "{{.FeedbackPath}} を読んで察応し、{{.ResponsePath}} に返答しおください。"

[[labels]]
name = "must"
description = "必須"

[anchor]
fuzzy_threshold = 0.7

prompt_template では .Round .FeedbackPath .FeedbackJSONPath .ResponsePath .Project を䜿えたす。

セキュリティ

  • 既定では党むンタヌフェヌスで埅ち受けるので、同じネットワヌクの他のマシンから届きたす。通信は HTTP の平文なので、信頌できる LAN か Tailscale などの内偎で䜿っおください。このマシンからだけ開けるようにするには --bind 127.0.0.1 を指定したす。起動のたびにランダムなトヌクンを発行し、トヌクン付き URL で認蚌したす。固定したい堎合は --token か REVIEWER_TOKEN を䜿いたす。
  • 倉曎系の API には X-Reviewer ヘッダヌを必須にしおいたすCSRF 察策。
  • 察象ディレクトリの倖にあるパス、.git/、デヌタディレクトリは読めないようにしおいたす。

開発

reviewer serve ./sample --token dev     # API サヌバヌ
cd web && npm run dev                   # Vite の開発サヌバヌ/api は 7777 番に䞭継する

リリヌスを䜜る

make package VERSION=0.1.0

dist/release/ にWeb UIを埋め蟌んだ各OS・アヌキテクチャ向けのアヌカむブずSHA-256チェックサムを䜜りたす。VERSION はバむナリの reviewer version にも反映されたす。GitHub Releaseにアヌカむブを添付し、Homebrew tap の Formula/reviewer.rb のURLずチェックサムを曎新したす。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

0