AI ãšãŒãžã§ã³ããæžãã Markdown ãªã©ã®ææžã«ãGitHub ã® PR ã¬ãã¥ãŒã®ãããªè¡ã³ã¡ã³ããšãããžã§ã¯ãå šäœãžã®ã³ã¡ã³ããä»ãããã£ãŒãããã¯ããã¡ã€ã«ãšããŠãšãŒãžã§ã³ãã«è¿ãããã®ããŒã«ã§ãã仿§ã¯ SPEC.md ãåç §ããŠãã ããã
Go 1.25 以éãš Node.js ãå¿ èŠã§ãã
make build # web/ ããã«ãã㊠bin/reviewer ãäœã
make dist # dist/<os>-<arch>/reviewer ã«ã¯ãã¹ã³ã³ãã€ã«
make testmake 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/brew install ymotongpoo/macos/reviewer
brew services start reviewer
reviewer urlHomebrewã®ãµãŒãã¹ã¯ãã°ã€ã³æã«èª
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 ã§ãã€ã§ã衚瀺ã§ããŸãã
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"] ã®ããã«æžããŸãã
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/<ã»ãã·ã§ã³>/ ã«çœ®ããŸãããšãŒãžã§ã³ãã«æž¡ããã£ãŒãããã¯ã®ãã¹ãã»ãã·ã§ã³ããšã«åãããã®ã§ãè€æ°ã®ãšãŒãžã§ã³ããåæã«è¿çãæžããŠãæ··ãããŸããã
- å·Šã®ããªãŒãããã¡ã€ã«ãéããè¡çªå·ãã¯ãªãã¯ããŠã³ã¡ã³ãããŸããShift+ã¯ãªãã¯ããã©ãã°ã§ç¯å²ãéžã¹ãŸããå ¥åå 容ã¯èªåã§äžæžãä¿åãããŸãã
- Markdown ãã¡ã€ã«ã§ã¯ããã¡ã€ã«ããããŒã®ããã¬ãã¥ãŒããæŒããšå³åŽã«ã¬ã³ããªã³ã°çµæã䞊ã¹ãŠè¡šç€ºããŸãããªã³ãªãã®ç¶æ
ã¯ãã©ãŠã¶ã«ä¿åãããŸãã
- ãœãŒã¹ãšãã¬ãã¥ãŒã¯ãäžç«¯ã«åãè¡ãæ¥ãããã«äºãã®ã¹ã¯ããŒã«ã«è¿œåŸããŸãããœãŒã¹ã®ã³ã¡ã³ãæ¬ã¯ãã¬ãã¥ãŒã«ã¯ãªãã®ã§ããœãŒã¹ã§ã³ã¡ã³ãæ¬ãéãéããéã¯ãã¬ãã¥ãŒãæ¢ãŸã£ãŠåŸ ã¡ãŸãããã®ãããã³ã¡ã³ããå€ãã»ã©ãã¬ãã¥ãŒã®ã»ããå ãŸã§èŠããŸãã
- ã³ã¡ã³ããš AI ææãããç®æã¯ããã¬ãã¥ãŒã§ãæ¬æããã€ã©ã€ããã巊端ã«çžŠç·ã衚瀺ããŸãã瞊ç·ãæŒããšããœãŒã¹åŽã®ãã®ã³ã¡ã³ããžç§»åããŸãããã¬ãã¥ãŒã§æ¬æãèŠã€ããããªãè¡ïŒæ°åŒã HTML ãå«ãè¡ãªã©ïŒã¯ããã®æ®µèœå šäœãå²ãã§ç€ºããŸãã
- frontmatter ã«
emojiãštype/topicsããããã¡ã€ã«ïŒZenn ã®èšäºïŒãšbooks/以äžã®ãã¡ã€ã«ã¯ãzenn-editor ã®zenn-markdown-htmlã§ã¬ã³ããªã³ã°ããŸãã:::messageã:::detailsããã¡ã€ã«åä»ãã³ãŒããããã¯ãæ°åŒãèæ³šãªã©ã® Zenn èšæ³ã«å¯Ÿå¿ããŠããŸãããã以å€ã®ãã¡ã€ã«ã¯ GFM ãšããŠã¬ã³ããªã³ã°ããŸããã©ã¡ãã䜿ããã¯ãã¬ãã¥ãŒäžéšã®ã¡ãã¥ãŒã§åãæ¿ããããŸãã - æ°åŒã¯å梱㮠KaTeX ã§æç»ããŸããYouTube ããã€ãŒããªã©ã®åã蟌ã¿ã¯èªã¿èŸŒãŸãããªã³ã¯ã ãã衚瀺ããŸãã
- ã± ä¿®æ£æ¡ãæ¿å
¥ãã§
suggestionãããã¯ãæ¿å ¥ãããšãéžæç¯å²ã®çœ®ãæãæ¡ãšããŠæ±ãããŸãã - ãããžã§ã¯ãå šäœãžã®ã³ã¡ã³ãã¯ãæŠèŠã»å šäœã³ã¡ã³ããã«ããã¡ã€ã«å šäœãžã®ã³ã¡ã³ãã¯ãã¡ã€ã«ããããŒã®ããã¡ã€ã«ã«ã³ã¡ã³ããããæžããŸãã
- ãã¬ãã¥ãŒãæåºããæŒããšã
.reviewer/rounds/<N>/feedback.mdãšfeedback.jsonãæžãåºããããšãŒãžã§ã³ãçšã®æç€ºæãã³ããŒãããŸããããããšãŒãžã§ã³ãã«è²Œãä»ããŸãã - ãšãŒãžã§ã³ãããã¡ã€ã«ãçŽããŠ
response.jsonãæžããšãUI ã¯èªåã§æŽæ°ãããŸãããšãŒãžã§ã³ãã®è¿çã¯åã¹ã¬ããã«è¡šç€ºãããŸãããã¡ã€ã«è¡šç€ºã¯åžžã«çŸåšã®å 容ã§ãããã®ã©ãŠã³ãã§äœãçŽããããã¯ãæŠèŠããŒãžã®ã©ãŠã³ãå±¥æŽã«ãããå·®åãèŠããã§ç¢ºèªã§ããŸããå·®åããŒãžã«ã¯ããã®ã©ãŠã³ãã®ã³ã¡ã³ããæåºæç¹ã®è¡äœçœ®ã«è¡šç€ºãããŸãã解決æžã¿ã«ããã³ã¡ã³ãã¯ãã¡ã€ã«è¡šç€ºããæ¶ããå·®åããŒãžã§ã ãèŠãããŸãã - çŽåŸããã³ã¡ã³ãã¯ã解決ãã«ãããã§ãªããã®ã«ã¯ãè¿ä¿¡ãããŸããã³ã¡ã³ããè¿ä¿¡ãæžããšæ¬¡ã®ã©ãŠã³ããèªåã§å§ãŸãã解決ããŠããªãã³ã¡ã³ãã¯æ¬¡ã®æåºã«æã¡è¶ãããŸãã
{
"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]ã¢ãã€ã«å¯Ÿå¿ã¯æªå®äºïŒå®æ©ã²ãŒãæªå®æœïŒã§ãã宿©ã²ãŒãèšé²ã®é ç®ã¯æªæ€èšŒã§ãèªåãã¹ãã¯å®æ©ã®ä»£ããã«ãªããŸãããæçµåãå ¥ã E2E ãšå®è£ åŸã®æ§èœè©äŸ¡ãæªå®æœã§ãã
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:7777Serve ã衚瀺ãã 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 ã®ãµãŒããŒãåããŠããã°ãæºåã¯èŠããŸãããreviewer 㯠~/.t3/userdata/server-runtime.json ãããµãŒããŒã®ã¢ãã¬ã¹ãèªã¿ãT3 Code ã® MCP ãšã³ããã€ã³ãïŒ/mcpïŒã«æ¥ç¶ããŸãã
- ããããŒã®ãð€ T3 Code: éä¿¡å
ãéžã¶ããæŒããšãT3 Code ã®ã¹ã¬ãããæ°ããé ã«äžŠã³ãŸããåè£ã«ãªãã®ã¯ãã¬ãã¥ãŒããŠãããã£ã¬ã¯ããªãšåããã£ã¬ã¯ããªããã®èŠªããŸãã¯ãã®äžãäœæ¥ãã£ã¬ã¯ããªã«ããŠãã T3 Code ãããžã§ã¯ãã®ã¹ã¬ããã§ããããšãã°
~/repos/zenn.dev.draftãéããšãzenn.dev.draftã®ãããžã§ã¯ããšãbooks/tinygo-otel-esp32ãªã©ã®æ¬ããšã®ãããžã§ã¯ãã®ã¹ã¬ããã䞊ã³ãŸãããµããšãŒãžã§ã³ãã®ã¹ã¬ããã¯äžŠã³ãŸããã- 䜿ããã¹ã¬ããããªãå Žåããæ°ããã¹ã¬ããã§å§ãããå Žåã¯ããïŒ æ°ããã¹ã¬ãããäœããããäœã£ãŠããã®ãŸãŸéä¿¡å
ã«ã§ããŸããåè£ã®ã¹ã¬ããã1ã€ããªããšãã¯ããã®äœææ¬ãæåããéããŠããŸããååãšã¢ãã«ãéžã¹ãŸããååã空æ¬ã«ãããš
reviewer: <ãã£ã¬ã¯ããªå>ïŒã¡ã€ã³ä»¥å€ã®ã»ãã·ã§ã³ã§ã¯åŸãã«ïŒ»<ã»ãã·ã§ã³å>ïŒã«ãªããŸããã¢ãã«ã¯ T3 Code ã®äœæç»é¢ãšåãäžèЧããéžã³ãåæå€ã¯ãã®ãã£ã¬ã¯ããªã§æè¿äœ¿ãããã¹ã¬ããã®ã¢ãã«ã§ããæšè«ã¬ãã«ïŒReasoningïŒãããã¢ãã«ã§ã¯ããã®å€ãéžã¹ãŸããéžã¹ãå€ã¯ã¢ãã«ããšã«éããåæå€ã¯ã¢ãã«ã®æ¢å®å€ã§ããäœã£ãã¹ã¬ããã¯ç©ºãªã®ã§ãæåã«æåºãããã£ãŒãããã¯ãæåã®ã¡ãã»ãŒãžã«ãªããŸãã
- 䜿ããã¹ã¬ããããªãå Žåããæ°ããã¹ã¬ããã§å§ãããå Žåã¯ããïŒ æ°ããã¹ã¬ãããäœããããäœã£ãŠããã®ãŸãŸéä¿¡å
ã«ã§ããŸããåè£ã®ã¹ã¬ããã1ã€ããªããšãã¯ããã®äœææ¬ãæåããéããŠããŸããååãšã¢ãã«ãéžã¹ãŸããååã空æ¬ã«ãããš
- ãã¬ãã¥ãŒãæåºãã®ãã€ã¢ãã°ã§ãT3 Code ã«éä¿¡ãããã«ãã§ãã¯ãå ¥ãããŸãŸæåºãããšããã®ã¹ã¬ããã«ã¡ãã»ãŒãžãšããŠéããŸããã¹ã¬ãããäœæ¥äžãªããäœæ¥ãçµãã£ãŠããå§ãŸãããã«é çªåŸ ã¡ã«ããŸãã
- æŠèŠããŒãžã®ãð€ T3 Codeãããã«ã«ããšãŒãžã§ã³ãã®è¿çãšäœæ¥ãã°ïŒããŒã«ã®å®è¡ïŒãæµããŸããã忢ããæŒããšãT3 Code ã®å®è¡ãäžæããŸãã
- T3 Code ãæ¿èªã質åãžã®åçãåŸ ã£ãŠãããšãã¯ãããã«ã«ãã®æšã衚瀺ããŸããåç㯠T3 Code ã®ç»é¢ã§ããŠãã ãããMCP ããã¯æ¿èªã«çããããªãããã§ãã
- 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 ã® gateway ãåããŠããã°ãHermes ã®ã»ãã·ã§ã³ïŒDiscord ã®ã¹ã¬ãããªã©ïŒã«éããŸããT3 Code ãå
¥ã£ãŠãããã·ã³ã§ã¯ãkind = "hermes" ãæå®ããŸãã
~/.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/healthAPI ãµãŒããŒã¯æ¢å®ã§ 127.0.0.1:8642 ã§åŸ
ã¡åããŸããreviewer ãåããã·ã³ã«ããã®ã§ãLAN ã«å
¬éããå¿
èŠã¯ãããŸãããreviewer 㯠~/.hermes/.env ãã URL ãšããŒãèªåã§èªãã®ã§ãreviewer åŽã®èšå®ã¯èŠããŸããã
- reviewer ãèµ·åãããšãããããŒã«ãð€ Hermes Agent: éä¿¡å ãéžã¶ããšè¡šç€ºãããŸããã¯ãªãã¯ããŠãææžãæžããã»ãã·ã§ã³ãéžã³ãŸããDiscord ã®ã»ãã·ã§ã³ãæ°ããé ã«å é ã«äžŠã³ãŸãã
- ãã¬ãã¥ãŒãæåºãã®ãã€ã¢ãã°ã§ãHermes Agent ã«éä¿¡ãããã«ãã§ãã¯ãå ¥ãããŸãŸæåºããŸãã
- æŠèŠããŒãžã®ãð€ Hermes Agentãããã«ã«ããšãŒãžã§ã³ãã®è¿çãšäœæ¥ãã°ããªã¢ã«ã¿ã€ã ã«æµããŸãã
- æ¿èªãå¿ èŠãªæäœã§ã¯ãæ¿èªã«ãŒããåºãŸãããä»åã ãèš±å¯ããæåŠããªã©ã§çããŸãã
- éäžã§æ¢ããããšãã¯ã忢ããæŒããŸãã
- éãçŽããããšãã¯ãåéä¿¡ããæŒããŸãã
- éå§æãšå®äºæã«ã¯ããã®ã»ãã·ã§ã³ã® Discord ã¹ã¬ããã«çãéç¥ãæçš¿ãããŸããHermes ã®
hermes mcp serveãçµç±ããŠãgateway ã®ããããæçš¿ããŸãã - ã³ã¡ã³ãããšã®è¿çã¯ãä»ãŸã§ã©ãããšãŒãžã§ã³ããæžã
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 ãæ¿èªãæ±ããŠããæäœã ãã§ãã
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è¡è¿œèšããã®ã§ã確èªäžã«ãã¡ã€ã«ã倿Žããããšãã®èŠåã確ãããããŸãã
ã¬ãã¥ãŒããåã«ããšãŒãžã§ã³ãã«ææžãèªãŸããŠã確èªãå¿ èŠãªç®æã«ææãä»ããŠããããŸããããšãã°ãæè¡çã«èª€ã£ãŠããããªç®æãæ¢ããããã®ææãæãããã«èªåã§ã¬ãã¥ãŒããŸãããšãŒãžã§ã³ããä»ããææããreviewer ã§ã¯ AIææãšåŒã³ãŸãã䜿ãã«ã¯ãåç¯ã®ãšãŒãžã§ã³ããšã®é£æºïŒT3 Code ã Hermes AgentïŒãå¿ èŠã§ãã
- ããããŒã®ãð AIã«ç¢ºèªãäŸé ŒããæŒããŸãã
- ããªã»ãããéžã¶ãšç¢ºèªå
容ãå
¥ãã®ã§ãå¿
èŠãªãæžãæããŸããçµã¿èŸŒã¿ã®ããªã»ããã¯æ¬¡ã®2ã€ã§ãã
- ãæè¡çãªèª€ãã®æ€åºãïŒäºå®ãæè¡ä»æ§ã®èª€ãããæ ¹æ ã® URL ä»ãã§ææããããæ±ããŸãã
- ã誀蚳ã®ä¿®æ£ãïŒéããŠãããã¡ã€ã«ã翻蚳æãšããŠãåæãšçªãåãããŠèª€èš³ãææããããæ±ããŸããåæã¯ãåããªããžããªã®ç¿»èš³å
ã®ãã¡ã€ã«ïŒ
content/ja/...ã«å¯Ÿããcontent/en/...ãªã©ïŒããææžã®äžã®åæããæ¢ããŸãã
- 察象ç¯å²ïŒå
šäœãçŸåšã®ãã¡ã€ã«ãéžæãããã¡ã€ã«ïŒãšéä¿¡å
ãéžãã§éããŸããéä¿¡å
ã®æ¢å®ã¯æ°ããã»ãã·ã§ã³ã§ãããã»ãã·ã§ã³åïŒç©ºæ¬ãªãèªåïŒãã«ååãå
¥åã§ããŸãã空æ¬ãªã
reviewer: docs Q-1 æè¡çãªèª€ãã®æ€åºã®ãããªååãä»ããåãååãããã°æ«å°Ÿã«(2)ãªã©ãä»ããŸããå ¥åããååããã§ã«äœ¿ãããŠããå Žåã¯ããšã©ãŒã確èªããŠå¥ã®ååãå ¥åããŠãã ãããå·çã«äœ¿ã£ãã»ãã·ã§ã³ã«èªåã®æç« ãç¹æ€ãããããšãã¯ããã€ã³ãæžã¿ã®ã»ãã·ã§ã³ãéžã³ãŸãã - æŠèŠããŒãžã®ãAI確èªäŸé Œãã«ãäœæ¥ãã°ããªã¢ã«ã¿ã€ã ã«æµããŸããæ¿èªã«ãŒããšåæ¢ãã¿ã³ã¯ããã£ãŒãããã¯ãéã£ããšããšåãããã«äœ¿ããŸãã
- å®äºãããšããã¡ã€ã«è¡šç€ºã®è¡çªå·ã®æšªã«ããŒã¯ãä»ããŸããè²ã¯éèŠåºŠïŒé倧ãèŠä¿®æ£ã軜埮ãç¢ºèªæšå¥šïŒãæ¿ãã¯ç¢ºä¿¡åºŠã衚ããŸããããŒã¯ãæŒããšãææã®æ¬æãæ ¹æ ã®ãªã³ã¯ãä¿®æ£æ¡ãéããŸãã
- 䜿ããææã¯ãæ¡çšãããŸããæ¬æãä¿®æ£æ¡ãæ ¹æ ãå«ãã èªåã®äžæžãã³ã¡ã³ãã«ãªãã®ã§ãç·šéããŠããéåžžã©ããæåºã§ããŸããäžèŠãªææã¯ãåŽäžãããŸããåŽäžããææã¯ãåŽäžæžã¿ã衚瀺ãããå ã«æ»ããŸãã
ãšãŒãžã§ã³ãã«ã¯ã察象ãã¡ã€ã«ã倿Žããªãããæç€ºããŠããŸããããã§ã確èªäžã«ãã¡ã€ã«ãå€ãã£ãå Žåã¯ããã®äŸé Œã«èŠåãšå·®åãžã®ãªã³ã¯ãåºãŸãã
確èªäŸé ŒãäœåºŠãéããšã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.7prompt_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.0dist/release/ ã«Web UIãåã蟌ãã åOSã»ã¢ãŒããã¯ãã£åãã®ã¢ãŒã«ã€ããšSHA-256ãã§ãã¯ãµã ãäœããŸããVERSION ã¯ãã€ããªã® reviewer version ã«ãåæ ãããŸããGitHub Releaseã«ã¢ãŒã«ã€ããæ·»ä»ããHomebrew tap ã® Formula/reviewer.rb ã®URLãšãã§ãã¯ãµã ãæŽæ°ããŸãã