Skip to content

Alat baris perintah (CLI)

CLI resmi Shogi Dojo. Terbitkan artikel, unggah partai, dan otomatiskan dari terminal semua yang bisa Anda lakukan di peramban. Perintah yang sama berjalan di macOS, Windows, dan Linux.

1 Yang diperlukan: Node.js 20 atau lebih baru

CLI-nya sendiri tanpa dependensi. Yang dibutuhkan hanya Node.js — dan hanya cara memasangnya yang berbeda antar sistem.

macOS

Dengan Homebrew:

brew install node
node --version
Windows

Dengan winget (pemasang resmi sama saja):

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

Di Debian / Ubuntu — pada distribusi lain gunakan manajer paket Anda:

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

2 Pemasangan

Perintahnya sama di ketiga sistem, tetapi di Linux pasanglah ke direktori home Anda. Pemasangan untuk seluruh sistem menuntut root, dan sebuah CLI tidak sebanding dengan sudo.

macOS

Jalankan:

npm install -g @shogidojo/cli
Windows

Perintah yang sama, di PowerShell:

npm install -g @shogidojo/cli
Linux

Ke direktori home, jadi tidak perlu sudo. Taruh baris kedua di profil shell Anda (~/.bashrc atau ~/.zshrc) juga, agar terminal baru tetap menemukannya:

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

Pastikan sudah terpasang:

shogidojo --version
shogidojo --help

3 Masuk

CLI memakai kunci API pribadi. Kunci bisa melakukan semua yang bisa dilakukan akun Anda — perlakukan seperti kata sandi. Otomasi bisa memiliki kunci bernama sendiri, hanya-baca jika ia hanya membaca.

Cara biasa. Peramban terbuka, Anda masuk, dan kunci kembali sendiri — tidak pernah muncul di baris perintah, jadi tidak pernah masuk riwayat shell:

shogidojo login --browser

Di mesin yang Anda capai lewat SSH, --browser saja tidak bisa selesai: kuncinya kembali ke 127.0.0.1 milik mesin yang menjalankan perintah, jadi peramban di komputer Anda tidak punya tujuan untuk menyerahkannya. Teruskan satu porta pilihan Anda:

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

Atau tempel sebuah kunci. Ia dibaca dari standard input, jadi tidak masuk ke riwayat shell:

shogidojo login --stdin

Di tempat tanpa peramban, seperti CI, berikan lewat lingkungan. Tidak ada yang ditulis ke disk:

SHOGIDOJO_TOKEN=rustify… shogidojo whoami

Untuk CI, Windmill, atau otomasi lain, terbitkan kunci bernama yang terpisah; kunci di mesin Anda tetap berfungsi. Kunci ditampilkan sekali saja (stdout hanya berisi kunci) dan tidak disimpan di mesin ini. Dengan --read-only, kunci itu bisa membaca tetapi tidak bisa memposting atau mengubah apa pun:

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

Menampilkan kunci yang Anda miliki (nama, cakupan, dibuat, terakhir dipakai, kedaluwarsa) dan mencabut salah satunya. `app` adalah kunci akun, yang diterbitkan halaman pengaturan:

shogidojo token list
shogidojo token revoke 3

Kunci disimpan di ~/.config/shogidojo/config.json dengan mode 0600 (%APPDATA%\shogidojo di Windows). Untuk melihat atau menghapus:

shogidojo whoami
shogidojo logout

4 Pemakaian

Perintah bernama adalah jalan pintas. Semua yang bisa dilakukan aplikasi dapat dicapai lewat call.

Menerbitkan artikel:

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

Mengunggah rekaman partai:

shogidojo kif upload game.kif --dir /2026

Melihat mesin analisis yang tersedia, menganalisis satu partai, dan memantau jalannya:

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

Membuat kuis dari sebuah partai. --ply 44 menanyakan langkah ke-44, dengan menampilkan posisi setelah langkah ke-43. --answer boleh berupa langkah yang tidak dimainkan dalam partai (USI, atau notasi seperti △5五歩); kartu lalu tetap menyimpan langkah yang benar-benar dimainkan:

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

Selebihnya — --query untuk membaca, dihilangkan untuk menulis:

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

Semua yang bisa diminta dari peladen ini. Daftar inilah yang diterima call:

shogidojo procedures --grep quiz

5 Menulis postingan

Isi post create berupa Markdown, dengan dua tambahan untuk menyematkan papan dan partai.

[sfen:<SFEN>] menggambar sebuah posisi dan [game:<gameId>] menyematkan kartu partai. Selebihnya Markdown biasa:

## After ▲7六歩 △3四歩

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

[game:user-1-…]

Partai yang diimpor dimulai sebagai PRIVATE. Kartu [game:]-nya tampil untuk Anda dan kosong bagi pembaca lain. Publikasikan saat mengimpor dengan --public, atau serahkan pada post create --game, yang menambahkan token [game:] dan berhenti jika partai PRIVATE akan masuk ke postingan PUBLIC (tambahkan --publish-game untuk memublikasikannya lebih dulu):

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

Untuk menaruh posisi-posisi penting dalam artikel, ambil SFEN setelah langkah ke-N dan masukkan ke [sfen:] (0 adalah posisi awal; tanpa --ply, posisi akhir):

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

Untuk diagram yang sama di artikel di tempat lain, tuliskan sebagai SVG. --sfen tidak butuh akun maupun jaringan; --game mengambil posisi, pemain, dan petak langkah terakhir dari sebuah partai. Untuk PNG, konversikan SVG-nya (rsvg-convert, ImageMagick, peramban):

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 hanya label dan penyaring feed; isi ditampilkan sama saja. ARTICLE adalah artikel, KIFU menyajikan rekaman partai, BOOK menyajikan buku.

post create mencetak URL postingan, /posts/<id>. Halaman partai adalah /review/<gameId> (/game/<id> adalah papan langsung), dan kif import / upload mencetaknya:

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)

Batas: judul 200 karakter, isi 50.000, hingga 20 tag masing-masing 40 karakter. CLI berhenti sebelum mengirim apa pun yang melebihinya.

6 Prosedur untuk call

--describe memberi tahu apa yang diterima call. Peladen menjawab dengan skema Zod yang dipakainya untuk memvalidasi masukan, dalam bentuk JSON Schema, sehingga tidak bisa menyimpang dari kenyataan. Bentuk nilai balik hanya ditampilkan untuk prosedur yang mendeklarasikannya; yang umum ada di bawah (tambahkan --query untuk membaca).

Melihat apa yang diterima sebuah prosedur:

shogidojo procedures --describe quiz.import

Rekaman partai:

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":"…"}

Postingan:

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

Kuis (playedUsi / playedNotation adalah langkah yang dimainkan dalam partai, gameId partai sumbernya; keduanya opsional):

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 Kalau ada yang salah

Tiga hal ini menjelaskan sebagian besar masalah.

Pesan "Unsupported engine" atau galat sintaks biasanya berarti Node terlalu lama. Diperlukan 20 atau lebih baru:

node --version

Jika pemasangan global gagal dengan EACCES, pindahkan prefiks pemasangan ke folder rumah Anda alih-alih memakai sudo:

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

login --browser mencetak sebuah URL, tetapi alamat balik di dalamnya menunjuk ke loopback mesin yang mencetaknya. Membuka URL itu di mesin lain membuat Anda masuk di sana dan kuncinya tidak sampai ke mana pun. Lewat SSH, teruskan sebuah porta dan berikan dengan --port, atau tempel kunci dengan --stdin — keduanya ada di atas:

shogidojo login --stdin