2.6 KiB
2.6 KiB
CLI KNOWLEDGE BASE
OVERVIEW
CLI entry: bunx oh-my-opencode. 107 CLI utilities with Commander.js + @clack/prompts TUI.
Commands: install (interactive setup), doctor (14 health checks), run (session launcher), get-local-version, mcp-oauth
STRUCTURE
cli/
├── index.ts # Commander.js entry (5 commands)
├── install.ts # TTY routing to TUI or CLI installer
├── cli-installer.ts # Non-interactive installer (164 lines)
├── tui-installer.ts # Interactive TUI with @clack/prompts (140 lines)
├── config-manager/ # Config management utilities (17 files)
├── model-fallback.ts # Model fallback configuration
├── model-fallback.test.ts # Fallback tests (523 lines)
├── doctor/
│ ├── runner.ts # Check orchestration
│ ├── formatter.ts # Colored output
│ └── checks/ # 29 files with individual checks
├── run/ # Session launcher (24 files)
│ ├── events.ts # CLI run events
│ └── runner.ts # Run orchestration
├── mcp-oauth/ # OAuth flow
└── get-local-version/ # Version detection
COMMANDS
| Command | Purpose |
|---|---|
install |
Interactive setup with provider selection |
doctor |
14 health checks for diagnostics |
run |
Launch session with todo enforcement |
get-local-version |
Version detection and update check |
mcp-oauth |
MCP OAuth authentication flow |
DOCTOR CATEGORIES (14 Checks)
| Category | Checks |
|---|---|
| installation | opencode, plugin |
| configuration | config validity, Zod, model-resolution |
| authentication | anthropic, openai, google |
| dependencies | ast-grep, comment-checker, gh-cli |
| tools | LSP, MCP |
| updates | version comparison |
HOW TO ADD CHECK
- Create
src/cli/doctor/checks/my-check.ts - Export
getXXXCheckDefinition()factory returningCheckDefinition - Add to
getAllCheckDefinitions()inchecks/index.ts
TUI FRAMEWORK
- @clack/prompts:
select(),spinner(),intro(),outro() - picocolors: Terminal colors for status and headers
- Symbols: check (pass), cross (fail), warning (warn), info (info)
ANTI-PATTERNS
- Blocking in non-TTY: Always check
process.stdout.isTTY - Direct JSON.parse: Use
parseJsonc()from shared utils - Silent failures: Return
warnorfailin doctor instead of throwing - Hardcoded paths: Use
getOpenCodeConfigPaths()fromconfig-manager