Agents and Go KO - teamswyg/laya-tools GitHub Wiki
์์ด์ ํธ์ Go ํ๋ก๊ทธ๋จ ์ฐ๋
ํ์ํ ๊ฐ์ฅ ์์ ์ธํฐํ์ด์ค๋ถํฐ ์ ํํ์ธ์. CLI ์ฌ์ฉ์๋ ๋ฑ๋ก์ด๋ ๋ฐฐ๊ฒฝ ์๋น์ค๊ฐ ํ์ ์์ต๋๋ค.
ํ ๋ฒ ์์ฒญ: JSON
riidolaya repo-preview --catalog examples/repositories/catalog.json --json 'refund invoices'
์ฌ๋์ฉ ๋ฌธ์ฅ ๋์ JSON์ ํด์ํฉ๋๋ค. ์ข ๋ฃ ์ฝ๋๋ฟ ์๋๋ผ preview/status/reason์ ๊ฒ์ฌํฉ๋๋ค. stderr์ stdout์ ์์ง ๋ง์ธ์. ์ค์ ์นดํ๋ก๊ทธ์ ์ง๋ฌธ์๋ ๋น๊ณต๊ฐ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ๋ก๊ทธ๋ ๋น๊ณต๊ฐ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์ฌ๋ฌ ๋ฒ ์์ฒญ: ์์ฃผ JSONL
๊ฒ์ยท๋ชจ๋ธ ์ถ์ฒ:
riidolaya serve --root /path/to/repository
{"id":1,"op":"search","query":"redirect authorization","lexical":true}
{"id":2,"op":"route","query":"Fix a typo"}
์ ์ฅ์ preview๋ ๋ณ๋ ํ๋ก์ธ์คยท์นดํ๋ก๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
riidolaya repo-serve --catalog examples/repositories/catalog.json --laya
{"id":1,"query":"Fix login sessions"}
{"id":2,"query":"refund invoices"}
ํ ์ค์ JSON ํ๋๋ฅผ ๋ณด๋ด๋ฉด ์์ฒญ ID๊ฐ ํฌํจ๋ ์๋ต ํ๋๋ฅผ ๋ฐ์ต๋๋ค. ์ ์ฅ์ ์๋ต์ result ์์ preview๋ฅผ ๋ด๊ณ , ์ค๋ฅ๋ error๋ก ํ์ํฉ๋๋ค. ๋ชจ๋ธ ์์ด ์ฌ์ฉํ๋ ค๋ฉด --laya๋ฅผ ๋บ๋๋ค. ์ ์ฅ์ ํ๋ก์ธ์ค๋ ์ธ๋ฑ์ค๋ฅผ ์ ์งํ๊ณ ํ์ํ ์์ฒญ์์ ๋ชจ๋ธ์ ์ฒ์ ๋ก๋ฉํฉ๋๋ค. ํ์ฌ ๊ตฌํ์์๋ ํ๋ก์ธ์ค๋ผ๋ฆฌ ๋ชจ๋ธ์ ๊ณต์ ํ์ง ์์ผ๋ฏ๋ก ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์ฐ๋ฉด RAM๋ ์ค๋ณต๋ ์ ์์ต๋๋ค. ๋๋๋ฉด stdin์ ๋ซ๊ฑฐ๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ์ธ์.
serve๋ plan์ด๋ repo-preview ์์ฒญ์ ๋ฐ์ง ์์ผ๋ฏ๋ก ํ๋กํ ์ฝ์ ์์ง ์์ต๋๋ค. ์ฝ๋ ๊ฒ์์ ๋ชจ๋ธ์ด ์์ฃผํด๋ ์์ฒญ๋ง๋ค ์ฝ๋ ํ๋ณด๋ฅผ ๋ค์ ๊ตฌ์ฑํฉ๋๋ค.
์ ํ ์ฌํญ: MCP
riidolaya mcp --root /path/to/repository
๋๊ตฌ๋ search_code, route_model์
๋๋ค. ์ ์ฅ์ preview์ planner๋ ํ์ฌ MCP ๋๊ตฌ๊ฐ ์๋๋๋ค. Codex์ ์ ํ์ ์ผ๋ก ๋ฑ๋กํ๋ ค๋ฉด:
codex mcp add riidolaya -- /absolute/path/to/riidolaya mcp --root /absolute/path/to/repository
ํ์ฌ Codex ๋ชจ๋ธ์ ๋ฐ๊พธ๊ฑฐ๋ ๊ถํ ์ค์ ์ ์ํํ์ง ์์ต๋๋ค. ๋๊ตฌ์ ์ถ์ฒ์ด ์์ ์คํ ํ๊ฐ๋ฅผ ๋ปํ์ง ์์ต๋๋ค.
๊ณต๊ฐ Go ํจํค์ง import
์ ์ฅ์์๋ Go ๋ชจ๋ ํ๋๊ฐ ์์ต๋๋ค. ๊ธฐ์กด Go ๋ชจ๋์์:
go get github.com/teamswyg/[email protected]
๋ชจ๋ธ ์๋ ์ ์ฅ์ preview ์์ :
package main
import (
"fmt"
"log"
"github.com/teamswyg/laya-tools/pkg/reporouter"
)
func main() {
idx, err := reporouter.New([]reporouter.Repository{
{Name: "example/billing", Summary: "Invoices and refunds"},
})
if err != nil { log.Fatal(err) }
result, err := idx.Preview("refund invoices", reporouter.DefaultConfig(), nil)
if err != nil { log.Fatal(err) }
fmt.Println(result.Status, result.Suggested)
}
์์ ์ถ๋ ฅ์ candidate example/billing์ด๋ฉฐ ์์
๋ฐฐ์ ์ด ์๋๋๋ค.
| ํจํค์ง | ์ฐ๊ฒฐํ๋ ํ๋ก๊ทธ๋จ์ด ์ ๊ณตํ ์ ๋ณด |
|---|---|
pkg/reporouter |
์ ๊ทผ ๊ถํ์ ๋ฐ๋ผ ๊ฑฐ๋ฅธ ์นดํ๋ก๊ทธ, ์ ํ์ ํ๋จ ์ด๋ํฐ |
pkg/catalog |
๋ฅ๋ ฅยทํ์งยท๊ฐ๊ฒฉ, ์์ฐ ์ฌ์ฉ์ก ์ค๋ ์ท |
pkg/switchpolicy |
ํ์ฌ/๋์ ํ๋กํ, ํ์ ๋, ์ปจํ ์คํธ, ์ ํ ์ด๋ ฅ |
pkg/planner |
์นดํ๋ก๊ทธยท์ ์ฑ ยท์์ฒญ. recommend/hold/blocked ๊ฒฐ๊ณผ ํ์ธ |
์ด ํจํค์ง๋ CGOยทPythonยท๋ชจ๋ธ ํ์ผ์ด ํ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ถ๋ก ์ ๋ด๋ถ ํจํค์ง์ ๋จ์ ์์ต๋๋ค. ๊ถํยท์ํ ์ ์ฅยท์์์ ์์ฐ ์์ฝยท์คํยท๊ฒฐ๊ณผ ํ๊ฐ๋ ์ฐ๊ฒฐํ๋ ํ๋ก๊ทธ๋จ์ ์ฑ ์์ ๋๋ค. riido-daemon์ ์ด๋ฏธ ์ฐ๊ฒฐ๋ ๊ฒ์ ์๋๋๋ค.