Lisensi MIT (lihat LICENSE). Kontribusi publik diterima. Praktik aktif: komentar Indonesia yang menjelaskan *mengapa* (bukan *apa*), istilah teknis tetap English.
#Setup dev
git clone https://github.com/startupmini/minicode && cd minicode
bun install
bun test # offline/hermetic; live & docker di-skip otomatis
bun x tsc --noEmit
bun run lint
bun run gate:coverage
Butuh bun >= 1.1.13 (bun:sqlite tidak jalan di Node; kode juga memakai AbortSignal.any() yang absen di Bun 1.0.x — minicode gagal cepat dengan pesan versi bila runtime terlalu lama).
Catatan instalasi dev:
@lydell/node-ptyDIPIN EKSAK dibun.lock(bukan caret): modul native berprebuild per platform, khusus test PTY; upgrade beta berikutnya wajib validasi probe PTY ulang di Linux + Windows. Sengaja devDependency agar instalasi usernpm install -gtidak ikut mengunduh biner native test-only.- PTY tidak tersedia di sebagian mesin Windows (ConPTY) — test PTY di-SKIP nyata via
test.skipIf(bukan pass palsu, lihat F1 di CHANGELOG); CI Linux justru GAGAL bila PTY tersedia-di-harapkan tapi tak bisa dibuka.
#Gate (urutan ini, semua hijau sebelum selesai)
bun x tsc --noEmit && bun run lint && bun test && bun run gate:coverage && bun run gate:pack
Coverage naik → naikkan minimum di scripts/coverage-gate.ts (saat ini 82 funcs / 84,5 lines + 15 lantai per-berkas modul kritis). Ambang coverage dikunci ke suite CEPAT (bun test di CI); gerbang lambat/stokastik tak boleh menaikkan ambang.
#Gate cepat vs lambat (F4.2)
bun run gate:fast # tsc + lint + test + coverage + pack + bash + bench:smoke + audit:harness (per-commit/CI)
bun run gate:slow # extreme fuzz + shadow-git stress + MCP adversarial (nightly slow.yml + manual)
Lambat/stokastik (fuzz multi-seed, stress, docker) tinggal di slow.yml — kegagalannya sinyal investigasi, bukan penolakan PR. CI per-commit (ci.yml) hanya menjalankan yang deterministik.
Gerbang lain:
bun run gate:bash # 62 pola serangan + 24 perintah sah → 0 bypass / 0 over-block
bun run extreme # fuzz + shadow-git + MCP jahat
bun run bench:smoke # fake, CI-safe
bun run vendor:check # vendor/minicore sinkron dengan ../minicore
#Batas lapisan (dijaga test/ui-boundary.test.ts)
cli/boleh imporsrc/ui/dansrc/;src/non-ui dilarang imporsrc/ui/;src/ui/dilarang imporcli/,src/non-ui,#minicore.- Lintas-lapisan via DI dari composition root (
cli/index.ts,cli/setup.ts):ask,setupWhenEmpty,setSubAgentSessionFactory. Tanpa injeksi default selalu deny / fail-closed. providers → configsatu arah (provisioning disrc/providers/provision.ts,src/config.tsmurni IO).- Layar
src/ui/screens/= view murni (props + callback), controller dicli/. - Jalur non-interaktif shell-first (append-only scrollback); sesi interaktif SELALU TUI alternate-screen (kontrak I16, tanpa opsi linear).
- Ubah struktur/dependensi antarlapisan → wajib update
docs/ARCHITECTURE.html.
#Aturan kode
- Kernel
vendor/minicore/src/core/*beku. Hanya seam aditif backward-compatible (compactAsync,initialMessages,cwd). Butuh primitif baru? Buktikan dulu tidak bisa sebagai Tool/Provider/Policy. - Limit terpusat di
src/constants.ts(LIMITS) — tanpa magic number tersebar. - Semua spawn via
sanitizeSpawnEnv; semua tulis file viaatomicWriteText. - Satu sumber pola ANSI:
ANSI_PATTERN/stripAnsidisrc/ui/render/theme.ts. - Production code zero
as any/as never. c/glyphsdisrc/ui/render/theme.tsadalah getter runtime — jangan simpan keconstmodule scope.- Lebar terminal = kolom, bukan karakter: pakai
displayWidthdkk. darisrc/ui/render/width.ts(CJK/emoji = 2 kolom). - Teks model/tool/berkas = input tak tepercaya:
sanitizeAnsidulu. cwdtool dariToolContext.cwd, bukanprocess.cwd().- Line ending LF, encoding UTF-8 tanpa BOM, format
biome(2 spasi, 100 kolom, double quotes).bun run lint:fixsebelum commit. - Angka mesin jangan ditulis di markdown (biarkan CI/perintah yang menghasilkannya). Bila temukan angka usang, koreksi + sebutkan koreksinya.
- Test: tiap fix security/correctness bawa regression test yang gagal di kode lama. Tool dua jalur (mis.
grep) diuji kedua jalurnya. Fuzzprompt-engineviatest/fuzz-prompt.test.ts. - Jangan commit kecuali diminta; jangan pernah commit rahasia. Sebelum commit:
git status,git diff,git log --oneline -10; stage hanya yang dimaksud.