Skip to content

Komut satırı aracı (CLI)

Shogi Dojo resmî CLI'si. Yazı yayımlayın, oyun kaydı yükleyin ve tarayıcıda yaptığınız her şeyi uçbirimden otomatikleştirin. Aynı komutlar macOS, Windows ve Linux'ta çalışır.

1 Gereken: Node.js 20 veya üzeri

CLI'nin kendi bağımlılığı yok. Tek gereken Node.js — ve sistemler arasında farklı olan yalnızca onun kurulumu.

macOS

Homebrew ile:

brew install node
node --version
Windows

winget ile (resmî kurulum programı da aynı işi görür):

winget install OpenJS.NodeJS.LTS
node --version
Linux

Debian / Ubuntu'da — diğer dağıtımlarda kendi paket yöneticinizi kullanın:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node --version

2 Kurulum

Komut üç sistemde de aynı, ancak Linux'ta ev dizinine kurun. Sistem geneline kurulum root ister ve bir CLI için sudo'ya uzanmaya değmez.

macOS

Çalıştırın:

npm install -g @shogidojo/cli
Windows

PowerShell'de de aynı komut:

npm install -g @shogidojo/cli
Linux

Ev dizinine kurulur, dolayısıyla sudo gerekmez. İkinci satırı kabuk profilinize de (~/.bashrc veya ~/.zshrc) ekleyin ki yeni bir terminal de bulabilsin:

npm install -g --prefix ~/.local @shogidojo/cli
export PATH="$HOME/.local/bin:$PATH"

Kurulduğunu doğrulayın:

shogidojo --version
shogidojo --help

3 Oturum açma

CLI kişisel bir API anahtarıyla kimlik doğrular. Anahtar, hesabınızın yapabildiği her şeyi yapabilir — parolanız gibi saklayın. Bir otomasyona kendi adlandırılmış anahtarı verilebilir; yalnızca okuyorsa salt okunur olarak.

Olağan yol. Tarayıcı açılır, oturum açarsınız ve anahtar kendiliğinden döner — hiçbir zaman komut satırında görünmez, dolayısıyla kabuk geçmişine de düşmez:

shogidojo login --browser

SSH ile ulaştığınız bir makinede yalnız --browser tamamlanamaz: anahtar, komutu çalıştıran makinenin 127.0.0.1 adresine döner; kendi masaüstünüzdeki tarayıcının onu teslim edeceği kimse yoktur. Kendi seçtiğiniz bir portu yönlendirin:

ssh -L 47311:127.0.0.1:47311 you@host
shogidojo login --browser --port 47311

Ya da bir anahtar yapıştırın. Standart girdiden okunur, bu yüzden kabuk geçmişine girmez:

shogidojo login --stdin

Tarayıcının olmadığı yerlerde, örneğin CI'da, ortam değişkeniyle verin. Diske hiçbir şey yazılmaz:

SHOGIDOJO_TOKEN=rustify… shogidojo whoami

CI, Windmill veya başka bir otomasyon için ayrı, adlandırılmış bir anahtar oluşturun; makinenizdeki anahtar çalışmaya devam eder. Anahtar yalnızca bir kez gösterilir (stdout'ta yalnızca anahtar bulunur) ve bu makinede saklanmaz. --read-only ile okuyabilir, ama hiçbir şey yayımlayamaz veya değiştiremez:

shogidojo token create --name windmill --read-only --days 90

Sahip olduğunuz anahtarları listelemek (ad, kapsam, oluşturulma, son kullanım, bitiş) ve birini iptal etmek. `app`, ayarlar sayfasının verdiği hesap anahtarıdır:

shogidojo token list
shogidojo token revoke 3

Anahtar ~/.config/shogidojo/config.json içinde 0600 kipiyle saklanır (Windows'ta %APPDATA%\shogidojo). Görmek ve silmek için:

shogidojo whoami
shogidojo logout

4 Kullanım

Adlandırılmış komutlar birer kısayoldur. Uygulamanın yapabildiği her şeye call ile erişilir.

Yazı yayımlamak:

shogidojo post create --title "..." --body-file note.md --tag 居飛車

Oyun kaydı yüklemek:

shogidojo kif upload game.kif --dir /2026

Kullanabileceğiniz motorları görmek, bir oyunu incelemek ve gidişatı izlemek:

shogidojo engines
shogidojo analyze game.kif --seconds 5
shogidojo jobs

Bir oyundan test oluşturmak. --ply 44, 43. hamleden sonraki konumu göstererek 44. hamleyi sorar. --answer oyunda oynanmamış bir hamle olabilir (USI ya da △5五歩 gibi bir gösterim); bu durumda kart oynanan hamleyi de saklar:

shogidojo quiz create --game user-1-… --ply 44 --answer △5五歩 --note "Suggested in the post-mortem" --deck Ryuo --public

Geri kalan her şey — okumak için --query, yazmak için yok:

shogidojo call post.list --query --input '{"page":1}'
shogidojo call quiz.createDeck --input '{"name":"..."}'

Bu sunucuya sorulabilecek her şey. Bu liste, call'un aldığı şeyin tam kendisidir:

shogidojo procedures --grep quiz

5 Yazı yazmak

post create gövdesi Markdown'dur; konum ve oyun gömmek için iki eklemesi vardır.

[sfen:<SFEN>] bir konum çizer, [game:<gameId>] bir oyun kartı gömer. Geri kalan her şey sıradan Markdown'dur:

## After ▲7六歩 △3四歩

[sfen:lnsgkgsnl/1r5b1/pppppp1pp/6p2/9/2P6/PP1PPPPPP/1B5R1/LNSGKGSNL b - 3]

[game:user-1-…]

İçe aktarılan bir oyun PRIVATE olarak başlar. Onun [game:] kartı size görünür, diğer tüm okuyucular için boş kalır. İçe aktarırken --public ile yayımlayın ya da bunu post create --game'e bırakın: [game:] belirtecini ekler ve PRIVATE bir oyun PUBLIC bir yazıya giriyorsa durur (önce yayımlamak için --publish-game ekleyin):

shogidojo kif import game.kif --public
shogidojo post create --type KIFU --title "..." --body-file note.md --game user-1-… --publish-game

Bir makaleye önemli konumları koymak için N. hamleden sonraki SFEN'i alıp [sfen:] içine yazın (0 başlangıçtır; --ply olmadan son konum):

shogidojo kif position user-1-… --ply 60

Aynı diyagramı başka bir yerdeki bir makalede kullanmak için SVG olarak dışa aktarın. --sfen ne hesap ne ağ ister; --game bir oyundan konumu, oyuncuları ve son hamlenin karesini alır. PNG için SVG'yi dönüştürün (rsvg-convert, ImageMagick, bir tarayıcı):

shogidojo diagram --sfen "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1" -o start.svg
shogidojo diagram --game user-1-… --ply 60 -o move60.svg
rsvg-convert -o move60.png move60.svg

--type yalnızca bir etiket ve akış filtresidir; gövde aynı şekilde görüntülenir. ARTICLE bir makale, KIFU bir oyun kaydı tanıtımı, BOOK bir kitap tanıtımıdır.

post create yazının URL'sini (/posts/<id>) yazdırır. Bir oyunun sayfası /review/<gameId>'dir (/game/<id> canlı tahtadır) ve kif import / upload onu yazdırır:

Posted #12  https://shogidojo.online/posts/12
Imported game.kif as user-1-…
  https://shogidojo.online/review/user-1-…  (private — only you can open it)

Sınırlar: başlık 200 karakter, gövde 50.000, her biri 40 karakterlik en fazla 20 etiket. CLI bunları aşan bir şeyi göndermeden önce durur.

6 call için prosedürler

call'un ne aldığını --describe söyler. Sunucu, girdiyi doğruladığı Zod şemasını JSON Schema olarak döndürür; bu yüzden gerçekten sapamaz. Dönüş biçimi yalnızca bunu bildiren prosedürlerde gösterilir; yaygın olanlar aşağıdadır (okuma için --query ekleyin).

Bir prosedürün ne aldığını görmek:

shogidojo procedures --describe quiz.import

Oyun kayıtları:

game.importKifFromText        {"kifText":"…","dir":"/2026"}
  → {"game_id":"user-1-…"}
game.setGameVisibility        {"gameId":"user-1-…","visibility":"PUBLIC"}
  → {"success":true}
game.getFullGameById (read)   {"gameId":"user-1-…"}
  → {"game_id":…, "visibility":…, "moves":[{"id":1, "moveNumber":0, "sfen":"…",
       "children":[{"childId":2, "usi":"7g7f", "notation":"▲7六歩"}]}, …]}
game.applyMove (read)         {"sfen":"…","move":"△5五歩","lastUsi":"7g7f"}
  → {"sfen":"…","usi":"5d5e","notation":"△5五歩","nextSfen":"…"}

Yazılar:

post.create   {"type":"KIFU","title":"…","body":"…","tags":["居飛車"],"visibility":"PUBLIC"}
  → {"id":12, …}

Testler (playedUsi / playedNotation oyunda oynanan hamle, gameId kaynak oyundur; ikisi de isteğe bağlı):

quiz.import   {"title":"…","visibility":"PUBLIC","gameId":"user-1-…",
               "items":[{"sfen":"…","answerUsi":"5d5e","answerNotation":"△5五歩",
                         "nextSfen":"…","note":"…",
                         "playedUsi":"8a7c","playedNotation":"△7三桂"}]}
  → {"deckId":5,"listIds":[9]}
  (or {"deck":{"title":"…"},"lists":[ …the same list… ]} for a named deck)

7 Bir şeyler ters giderse

Üç neden çoğunu açıklar.

"Unsupported engine" iletisi ya da bir sözdizimi hatası genellikle Node'un eski olduğu anlamına gelir. 20 veya üzeri gerekir:

node --version

Genel kurulum EACCES ile başarısız olursa, sudo'ya başvurmak yerine kurulum önekini ev dizininize taşıyın:

npm config set prefix ~/.local
export PATH="$HOME/.local/bin:$PATH"

login --browser bir URL yazar, ama içindeki dönüş adresi onu yazan makinenin kendi loopback adresini gösterir. O URL'yi başka bir makinede açmak oturumu orada açar ve anahtar hiçbir yere ulaşmaz. SSH üzerinde bir portu yönlendirip --port ile verin ya da anahtarı --stdin ile yapıştırın; ikisi de yukarıda:

shogidojo login --stdin