co-mono/packages/pods/docs/implementation-plan.md
Mario Zechner a74c5da112 Initial monorepo setup with npm workspaces and dual TypeScript configuration
- 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
2025-08-09 17:18:38 +02:00

5.1 KiB

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

{
  "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