mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 16:04:03 +00:00
- Set up npm workspaces for three packages: pi-tui, pi-agent, and pi (pods) - Implemented dual TypeScript configuration: - Root tsconfig.json with path mappings for development and type checking - Package-specific tsconfig.build.json for clean production builds - Configured lockstep versioning with sync script for inter-package dependencies - Added comprehensive documentation for development and publishing workflows - All packages at version 0.5.0 ready for npm publishing
183 lines
No EOL
5.1 KiB
Markdown
183 lines
No EOL
5.1 KiB
Markdown
# Implementation Plan
|
|
|
|
## Core Principles
|
|
- TypeScript throughout
|
|
- Clean, minimal code
|
|
- Self-contained modules
|
|
- Direct SSH execution (no remote manager)
|
|
- All state in local JSON
|
|
|
|
## Package 1: Pod Setup Script Generation
|
|
Generate and execute pod_setup.sh via SSH
|
|
|
|
- [ ] `src/setup/generate-setup-script.ts` - Generate bash script as string
|
|
- [ ] Detect CUDA driver version
|
|
- [ ] Determine CUDA toolkit version needed
|
|
- [ ] Generate uv/Python install commands
|
|
- [ ] Generate venv creation commands
|
|
- [ ] Generate pip install commands (torch, vLLM, etc.)
|
|
- [ ] Handle model-specific vLLM versions (e.g., gpt-oss needs 0.10.1+gptoss)
|
|
- [ ] Generate mount commands if --mount provided
|
|
- [ ] Generate env var setup (HF_TOKEN, PI_API_KEY)
|
|
|
|
- [ ] `src/setup/detect-hardware.ts` - Run nvidia-smi and parse GPU info
|
|
- [ ] Execute nvidia-smi via SSH
|
|
- [ ] Parse GPU count, names, memory
|
|
- [ ] Return structured GPU info
|
|
|
|
- [ ] `src/setup/execute-setup.ts` - Main setup orchestrator
|
|
- [ ] Generate setup script
|
|
- [ ] Copy and execute via SSH
|
|
- [ ] Stream output to console
|
|
- [ ] Handle Ctrl+C properly
|
|
- [ ] Save GPU info to local config
|
|
|
|
## Package 2: Config Management
|
|
Local JSON state management
|
|
|
|
- [ ] `src/config/types.ts` - TypeScript interfaces
|
|
- [ ] Pod interface (ssh, gpus, models, mount)
|
|
- [ ] Model interface (model, port, gpu, pid)
|
|
- [ ] GPU interface (id, name, memory)
|
|
|
|
- [ ] `src/config/store.ts` - Read/write ~/.pi/pods.json
|
|
- [ ] Load config (handle missing file)
|
|
- [ ] Save config (atomic write)
|
|
- [ ] Get active pod
|
|
- [ ] Add/remove pods
|
|
- [ ] Update model state
|
|
|
|
## Package 3: SSH Executor
|
|
Clean SSH command execution
|
|
|
|
- [ ] `src/ssh/executor.ts` - SSH command wrapper
|
|
- [ ] Execute command with streaming output
|
|
- [ ] Execute command with captured output
|
|
- [ ] Handle SSH errors gracefully
|
|
- [ ] Support Ctrl+C propagation
|
|
- [ ] Support background processes (nohup)
|
|
|
|
## Package 4: Pod Commands
|
|
Pod management CLI commands
|
|
|
|
- [ ] `src/commands/pods-setup.ts` - pi pods setup
|
|
- [ ] Parse args (name, ssh, mount)
|
|
- [ ] Check env vars (HF_TOKEN, PI_API_KEY)
|
|
- [ ] Call setup executor
|
|
- [ ] Save pod to config
|
|
|
|
- [ ] `src/commands/pods-list.ts` - pi pods
|
|
- [ ] Load config
|
|
- [ ] Display all pods with active marker
|
|
|
|
- [ ] `src/commands/pods-active.ts` - pi pods active
|
|
- [ ] Switch active pod
|
|
- [ ] Update config
|
|
|
|
- [ ] `src/commands/pods-remove.ts` - pi pods remove
|
|
- [ ] Remove from config (not remote)
|
|
|
|
## Package 5: Model Management
|
|
Model lifecycle management
|
|
|
|
- [ ] `src/models/model-config.ts` - Known model configurations
|
|
- [ ] Load models.md data structure
|
|
- [ ] Match hardware to vLLM args
|
|
- [ ] Get model-specific env vars
|
|
|
|
- [ ] `src/models/download.ts` - Model download via HF
|
|
- [ ] Check if model cached
|
|
- [ ] Run huggingface-cli download
|
|
- [ ] Stream progress to console
|
|
- [ ] Handle Ctrl+C
|
|
|
|
- [ ] `src/models/vllm-builder.ts` - Build vLLM command
|
|
- [ ] Get base command for model
|
|
- [ ] Add hardware-specific args
|
|
- [ ] Add user --vllm args
|
|
- [ ] Add port and API key
|
|
|
|
## Package 6: Model Commands
|
|
Model management CLI commands
|
|
|
|
- [ ] `src/commands/start.ts` - pi start
|
|
- [ ] Parse model and args
|
|
- [ ] Find next available port
|
|
- [ ] Select GPU (round-robin)
|
|
- [ ] Download if needed
|
|
- [ ] Build and execute vLLM command
|
|
- [ ] Wait for health check
|
|
- [ ] Update config on success
|
|
|
|
- [ ] `src/commands/stop.ts` - pi stop
|
|
- [ ] Find model in config
|
|
- [ ] Kill process via PID
|
|
- [ ] Clean up config
|
|
|
|
- [ ] `src/commands/list.ts` - pi list
|
|
- [ ] Show models from config
|
|
- [ ] Optionally verify PIDs
|
|
|
|
- [ ] `src/commands/logs.ts` - pi logs
|
|
- [ ] Tail log file via SSH
|
|
- [ ] Handle Ctrl+C (stop tailing only)
|
|
|
|
## Package 7: Model Testing
|
|
Quick model testing with tools
|
|
|
|
- [ ] `src/prompt/tools.ts` - Tool definitions
|
|
- [ ] Define ls, read, glob, rg tools
|
|
- [ ] Format for OpenAI API
|
|
|
|
- [ ] `src/prompt/client.ts` - OpenAI client wrapper
|
|
- [ ] Create client for model endpoint
|
|
- [ ] Handle streaming responses
|
|
- [ ] Display thinking, tools, content
|
|
|
|
- [ ] `src/commands/prompt.ts` - pi prompt
|
|
- [ ] Get model endpoint from config
|
|
- [ ] Augment prompt with CWD info
|
|
- [ ] Send request with tools
|
|
- [ ] Display formatted response
|
|
|
|
## Package 8: CLI Entry Point
|
|
Main CLI with commander.js
|
|
|
|
- [ ] `src/cli.ts` - Main entry point
|
|
- [ ] Setup commander program
|
|
- [ ] Register all commands
|
|
- [ ] Handle global options (--pod override)
|
|
- [ ] Error handling
|
|
|
|
- [ ] `src/index.ts` - Package exports
|
|
|
|
## Testing Strategy
|
|
- [ ] Test pod_setup.sh generation locally
|
|
- [ ] Test on local machine with GPU
|
|
- [ ] Test SSH executor with mock commands
|
|
- [ ] Test config management with temp files
|
|
- [ ] Integration test on real pod
|
|
|
|
## Dependencies
|
|
```json
|
|
{
|
|
"dependencies": {
|
|
"commander": "^12.0.0",
|
|
"@commander-js/extra-typings": "^12.0.0",
|
|
"openai": "^4.0.0",
|
|
"chalk": "^5.0.0",
|
|
"ora": "^8.0.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.0.0",
|
|
"typescript": "^5.0.0",
|
|
"tsx": "^4.0.0"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Build & Distribution
|
|
- [ ] TypeScript config for Node.js target
|
|
- [ ] Build to dist/
|
|
- [ ] npm package with bin entry
|
|
- [ ] npx support |