9router-manager
v0.0.1
Published
9Router AI Gateway Local - Combo Model Scanner (Node.js)
Maintainers
Readme
9Router Manager
Manajemen 9Router AI gateway lokal — scan model, update combo, monitor provider.
Cross-platform: Windows, Linux, macOS supported.
Tests: 88/88 pass · Node ≥18
Fitur
- ✅ Scan semua model dari provider aktif
- ✅ Concurrent testing (configurable, default 1 worker — raise NINEROUTER_MAX_WORKERS env var untuk scan paralel)
- ✅ Auto-retry pada HTTP 429 (rate limit)
- ✅ Progress bar real-time
- ✅ Audit log untuk tracking perubahan (verify_token disanitasi, ditulis async)
- ✅ Setup auto-scan via scheduler interaktif (confirm + auto-exec, atau print-only mode)
Struktur
9router-manager/
├── bin/
│ └── 9router-manager.js # Executable shim
├── src/
│ ├── cli.js # CLI entry + commander setup
│ ├── env.js # .env loader + path/token helpers
│ ├── scan.js # API + concurrent scan logic
│ ├── combo.js # SQLite combo management
│ ├── metadata.js # Model pattern matching + sort keys
│ └── results.js # Read & print audit JSON
├── tests/
│ ├── audit-shape.test.js
│ ├── cli.test.js
│ ├── combo.test.js
│ ├── env.test.js
│ ├── metadata.test.js
│ ├── paths.test.js
│ ├── results.test.js
│ └── scan.test.js
├── bat/ # Windows batch scripts
│ ├── run-scan.bat
│ ├── check-results.bat
│ └── setup-scheduler.bat
├── sh/ # Unix shell scripts
│ ├── run-scan.sh
│ ├── check-results.sh
│ ├── setup-scheduler.sh
│ └── setup-scheduler-macos.sh
├── metadata.json # Model patterns + release dates
├── package.json # Node.js package config
├── .env # Konfigurasi lokal (password, path)
└── .env.template # Template dokumentasiSetup
1. Konfigurasi
Gunakan perintah bawaan CLI untuk mengatur konfigurasi global (disimpan di ~/.9router/.env):
9router-manager configAplikasi akan meminta Anda untuk memasukkan:
NINEROUTER_PASSWORD(password dashboard 9Router)NINEROUTER_BASE_URL(biarkan default jika menggunakanlocalhost:20128)
(Jika Anda ingin konfigurasi per-folder, Anda masih bisa meng-copy .env.template ke .env di folder tersebut).
2. Setup Auto-Scan (Opsional)
Cara cepat (via CLI):
9router-manager setup # Tanyakan konfirmasi, lalu jalankan script
9router-manager setup -y # Skip konfirmasi (untuk script/CI)Cara manual (langsung ke script):
# Windows (as Administrator)
bat\setup-scheduler.bat
# Linux (cron)
./sh/setup-scheduler.sh
# macOS (launchd)
./sh/setup-scheduler-macos.shUsage
CLI (Recommended)
After installation, simply type:
9router-managerAkan muncul menu interaktif:
╔═══════════════════════════════════════════════════╗
║ 9Router Manager v0.0.1 ║
╠═══════════════════════════════════════════════════╣
║ AI Gateway Local - Model Scanner ║
╚═══════════════════════════════════════════════════╝
[1] Run Model Scan
[2] List Combos
[3] Show Last Scan Results
[4] Test Single Model
[5] Setup Auto-Scan Scheduler
[6] Configure Settings
────────────────────────────────────────────────────────────
[v] Version Info [h] Show Help [q] Quit
Pilihan (nomor/v/h/q):Atau gunakan command line mode:
9router-manager scan # Run scan
9router-manager list # List combos
9router-manager list --details # List combos + models in each
9router-manager results # Check results
9router-manager test <model> # Test single model
9router-manager setup # Setup scheduler (interaktif)
9router-manager setup -y # Setup scheduler (skip prompt)
9router-manager config # Configure global settings (interaktif)
9router-manager version # Version info
9router-manager help # Show helpInstallation
Install globally via npm (recommended for development):
npm linkSetelah itu perintah 9router-manager bisa dipanggil dari direktori manapun (entry-point dari package.json).
Shell Scripts (Fallback)
Jika CLI belum diinstall, bisa pakai shell scripts:
Linux/macOS:
./sh/run-scan.sh
./sh/check-results.sh
./sh/setup-scheduler.shWindows:
bat\run-scan.bat
bat\check-results.bat
bat\setup-scheduler.batDirect Node
node src/cli.js scan
node src/cli.js results
node src/cli.js test minimax/MiniMax-M2.7Commit
git add .
git commit -m "feat: add new feature"Format: type: short description
Konfigurasi
| Variable | Default | Deskripsi |
|----------|---------|-----------|
| NINEROUTER_PASSWORD | (required) | Password dashboard 9Router |
| NINEROUTER_BASE_URL | http://localhost:20128 | URL 9Router gateway |
| NINEROUTER_DB_PATH | OS-specific | Path SQLite DB |
| NINEROUTER_AUDIT_PATH | OS-specific | Audit log output |
| NINEROUTER_TIMEOUT | 8 | Timeout per model (detik) |
| NINEROUTER_MAX_WORKERS | 1 | Concurrent workers |
| NINEROUTER_RETRY_429_MAX | 2 | Max retry pada rate limit |
| NINEROUTER_RETRY_429_DELAY | 3.0 | Delay antar retry (detik) |
| NINEROUTER_SLEEP | 0.05 | Delay antar test (detik) |
| NINEROUTER_PROMPT | 1+1=? | Prompt dikirim ke setiap model |
| NINEROUTER_ENV_FILE | (unset) | Override default .env search path |
Managed Combo
Target combo tidak dikonfigurasi — scanner mendeteksinya otomatis dari /v1/models × tabel combos SQLite.
- 0 combo cocok: scanner berhenti dengan error.
- Tepat 1 combo cocok: combo itu yang di-update.
- Lebih dari 1 cocok: scanner berhenti dengan error (target ambigu).
Managed combo berisi semua model dari semua provider yang berhasil response saat di-test.
- Menambah model baru yang mulai response
- Menghapus model yang tidak lagi response (timeout, 400, 402, 404, 429, error)
- Skip provider yang statusnya
active=falsedi SQLite 9Router
Commit Types
| Type | Usage |
|------|-------|
| feat | Fitur baru |
| fix | Bug fix |
| docs | Dokumentasi |
| style | Formatting, typo |
| refactor | Refactoring |
| perf | Performa |
| test | Unit test |
| build | Build system |
| ci | CI/CD |
| chore | Config, dependency |
| revert | Revert commit |
Quick Start
# 1. Install dependencies
npm install
# 2. Setup configuration
node src/cli.js config
# (You will be prompted to enter your 9Router password)
# 3. Run scan
npm run scan
# atau
node src/cli.js scan
# 4. Check results
npm run results
# atau
node src/cli.js results
# 5. Run tests
npm testSub-commands
scan— Run daily combo model scanlist— List combos in database (use--detailsto show models)results/check/status— Show last scan resultstest <model>— Test a single modelsetup— Setup auto-scan scheduler (interactive;-yto skip prompt)config— Configure global settings (interactive)version— Show version infohelp— Show help
Per-Phase Test Scripts
npm run env:test # 8 tests
npm run cli:test # 6 tests
npm run paths:test # 14 tests
npm run metadata:test # 22 tests
npm run combo:test # 9 tests
npm run scan:test # 16 tests
npm run results:test # 8 tests
npm run audit-shape:test # 10 tests
npm test # 88 tests totalKey Files
| File | Platform | Description |
|------|----------|-------------|
| bin/9router-manager.js | All | Executable shim (#!/usr/bin/env node) |
| src/cli.js | All | CLI entry + commander setup + interactive menu |
| src/scan.js | All | API + concurrent scan logic |
| src/combo.js | All | SQLite combo management (async) |
| src/env.js | All | .env loader + path helpers |
| src/metadata.js | All | Model pattern matching + sort keys |
| src/results.js | All | Audit JSON reader/summarizer |
| package.json | All | Node.js package config |
| sh/run-scan.sh | Linux/macOS | Run scan (fallback) |
| sh/check-results.sh | Linux/macOS | Check results (fallback) |
| bat/run-scan.bat | Windows | Run scan (fallback) |
OS-Specific Paths
Default paths untuk setiap OS (jika NINEROUTER_DB_PATH / NINEROUTER_AUDIT_PATH tidak diset):
| OS | DB Path | Audit Path |
|----|---------|------------|
| Windows | ~/AppData/Roaming/9router/db/data.sqlite | %USERPROFILE%\AppData\Local\hermes\scripts\9router_daily_combo_model_scan_last.json |
| Linux | ~/.9router/db/data.sqlite (fallback: ~/.config/9router/, ~/.local/share/9router/, snap) | ~/.local/share/9router/audit/9router_daily_combo_model_scan_last.json |
| macOS | ~/.9router/db/data.sqlite (fallback: ~/.config/9router/, ~/.local/share/9router/) | ~/Library/Logs/9router-scan.log |
Project Status
- [x] All rewrite phases complete
- [x] 88/88 tests pass (
npm test) - [x]
npm run lintpasses - [x] No
AIOreferences in the tree - [x] Combo-agnostic audit file paths
- [x] Async audit write + sanitized verify_token
- [x] Multi-platform CI (Linux, macOS, Windows × Node 18/20/22)
- [x]
node bin/9router-manager.jsworks end-to-end - [x] Interactive menu with letter shortcuts (q/h/v)
- [x]
setupcommand with confirm + auto-exec + non-TTY fallback
Open Questions
- TypeScript? Plain JS for now. Can be added later via
tsc --checkwithout a full rewrite. - Cookie store? In-memory
Map(single-session scan). Browser-equivalenttough-cookieis overkill for a one-shot CLI run. - Concurrency model? Promise-based fan-out (capped by
NINEROUTER_MAX_WORKERS). Watch SQLite write contention at the end of long runs. - Schema for
metadata.json? Ported as-is. Normalize later if it pays off.
Commit
git add .
git commit -m "feat: add new feature"Format: type: short description
