2025-12-31 14:07:14 +09:00
|
|
|
# CLI KNOWLEDGE BASE
|
|
|
|
|
|
|
|
|
|
## OVERVIEW
|
|
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
CLI for oh-my-opencode: interactive installer, health diagnostics (doctor), runtime launcher. Entry: `bunx oh-my-opencode`.
|
2025-12-31 14:07:14 +09:00
|
|
|
|
|
|
|
|
## STRUCTURE
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cli/
|
2026-01-02 10:42:38 +09:00
|
|
|
├── index.ts # Commander.js entry, subcommand routing
|
2026-01-09 15:44:06 +09:00
|
|
|
├── install.ts # Interactive TUI installer (436 lines)
|
|
|
|
|
├── config-manager.ts # JSONC parsing, env detection (725 lines)
|
2025-12-31 14:07:14 +09:00
|
|
|
├── types.ts # CLI-specific types
|
2026-01-09 15:44:06 +09:00
|
|
|
├── commands/ # CLI subcommands
|
2025-12-31 14:07:14 +09:00
|
|
|
├── doctor/ # Health check system
|
|
|
|
|
│ ├── index.ts # Doctor command entry
|
2026-01-09 15:44:06 +09:00
|
|
|
│ ├── runner.ts # Health check orchestration
|
2026-01-02 10:42:38 +09:00
|
|
|
│ ├── constants.ts # Check categories
|
2025-12-31 14:07:14 +09:00
|
|
|
│ ├── types.ts # Check result interfaces
|
2026-01-09 15:44:06 +09:00
|
|
|
│ └── checks/ # 17+ individual checks (auth, config, dependencies, gh, lsp, mcp, opencode, plugin, version)
|
2026-01-02 10:42:38 +09:00
|
|
|
├── get-local-version/ # Version detection
|
2025-12-31 14:07:14 +09:00
|
|
|
└── run/ # OpenCode session launcher
|
2026-01-09 15:44:06 +09:00
|
|
|
├── completion.ts # Completion logic
|
|
|
|
|
└── events.ts # Event handling
|
2025-12-31 14:07:14 +09:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## CLI COMMANDS
|
|
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
| Command | Purpose |
|
|
|
|
|
|---------|---------|
|
|
|
|
|
| `install` | Interactive setup wizard |
|
|
|
|
|
| `doctor` | Environment health checks |
|
|
|
|
|
| `run` | Launch OpenCode session |
|
2025-12-31 14:07:14 +09:00
|
|
|
|
|
|
|
|
## DOCTOR CHECKS
|
|
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
17+ checks in `doctor/checks/`:
|
|
|
|
|
- version.ts (OpenCode >= 1.0.150)
|
|
|
|
|
- config.ts (plugin registered)
|
|
|
|
|
- bun.ts, node.ts, git.ts
|
|
|
|
|
- anthropic-auth.ts, openai-auth.ts, google-auth.ts
|
|
|
|
|
- lsp-*.ts, mcp-*.ts
|
2025-12-31 14:07:14 +09:00
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
## CONFIG-MANAGER (669 lines)
|
2025-12-31 14:07:14 +09:00
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
- JSONC support (comments, trailing commas)
|
|
|
|
|
- Multi-source: User (~/.config/opencode/) + Project (.opencode/)
|
|
|
|
|
- Zod validation
|
|
|
|
|
- Legacy format migration
|
|
|
|
|
- Error aggregation for doctor
|
2025-12-31 14:07:14 +09:00
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
## HOW TO ADD CHECK
|
2025-12-31 14:07:14 +09:00
|
|
|
|
|
|
|
|
1. Create `src/cli/doctor/checks/my-check.ts`:
|
|
|
|
|
```typescript
|
|
|
|
|
export const myCheck: DoctorCheck = {
|
|
|
|
|
name: "my-check",
|
|
|
|
|
category: "environment",
|
|
|
|
|
check: async () => {
|
2026-01-02 10:42:38 +09:00
|
|
|
return { status: "pass" | "warn" | "fail", message: "..." }
|
2025-12-31 14:07:14 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
2. Add to `src/cli/doctor/checks/index.ts`
|
|
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
## ANTI-PATTERNS
|
2025-12-31 14:07:14 +09:00
|
|
|
|
2026-01-02 10:42:38 +09:00
|
|
|
- Blocking prompts in non-TTY (check `process.stdout.isTTY`)
|
|
|
|
|
- Hardcoded paths (use shared utilities)
|
|
|
|
|
- JSON.parse for user files (use parseJsonc)
|
|
|
|
|
- Silent failures in doctor checks
|