# VAPORA Provisioning Integration Guide Unified provisioning system combining **typedialog** (interactive forms), **Nickel** (configuration generation), and **KCL** (infrastructure-as-code) for VAPORA deployments. ## System Architecture ``` User Input → typedialog Forms → Config Generation → Deployment ↓ Nickel Schemas (vapora/) ↓ Deployment Profiles (solo/multiuser/enterprise) ↓ TOML/JSON Configuration ↓ Docker Compose / Kubernetes / KCL ``` ## Workflow: From Forms to Deployment ### 1. Interactive Configuration Generation Start with the interactive form to generate customized configuration: ```bash cd provisioning # From repository root # Run interactive setup wizard typedialog \ --form .typedialog/vapora/forms/vapora-main-form.toml \ --output config/runtime/vapora.custom.toml ``` **This creates:** - `config/runtime/vapora.custom.toml` - Your customized configuration - Includes all backend, agents, router, database, provider settings - Ready to deploy ### 2. Or Use Predefined Profiles For quick deployments, use example configurations: ```bash # Development setup cp config/examples/vapora.solo.example.toml config/runtime/vapora.toml # Team deployment cp config/examples/vapora.multiuser.example.toml config/runtime/vapora.toml # Edit as needed # Production deployment cp config/examples/vapora.enterprise.example.toml config/runtime/vapora.toml # Customize for your infrastructure ``` ### 3. Generate via Nickel (Advanced) For composable, mergeable configurations: ```bash # Export to JSON nickel export config/examples/vapora.multiuser.example.ncl > config/runtime/vapora.json # Or create custom composition cat > config/runtime/vapora.custom.ncl << 'EOF' let defaults = import "../../schemas/vapora/main.ncl" in let mode = import "../../schemas/platform/defaults/deployment/enterprise.ncl" in std.record.merge defaults { backend.port = 9001, llm_router.providers.ollama_enabled = true, } EOF nickel export config/runtime/vapora.custom.ncl > config/runtime/vapora.json ``` ### 4. Deploy Configuration #### Option A: Docker Compose ```bash # Ensure config exists at config/runtime/vapora.toml ls config/runtime/vapora.toml # Use with docker-compose (backend reads vapora.toml) docker compose up -d ``` #### Option B: Kubernetes ```bash # Create ConfigMap from configuration kubectl create configmap vapora-config \ --from-file=config/runtime/vapora.toml \ -n vapora # Or use Kustomize kustomize build kubernetes/overlays/production ``` #### Option C: KCL Provisioning (Advanced) Use existing `vapora-wrksp` with generated config: ```bash cd vapora-wrksp # Link generated config ln -s ../config/runtime/vapora.toml ./config.toml # Deploy via provisioning provisioning workflow run workflows/deploy-full-stack.yaml \ --config config.toml ``` ## File Organization ### Input: Forms (`.typedialog/`) Interactive forms generate configurations: ```plaintext .typedialog/vapora/ ├── forms/ │ ├── vapora-main-form.toml # Complete setup wizard │ └── fragments/ # Modular form fragments │ ├── backend/auth.toml │ ├── agents/learning-profiles.toml │ └── llm-router/budget-enforcement.toml ``` **Features:** - `vapora-main-form.toml` - 50+ interactive fields - Validates port ranges, numbers, required fields - Generates `nickel_path` mapping for Nickel integration - User-friendly prompts and help text ### Schema: Configuration Types (`schemas/`) Defines configuration structure: ```plaintext schemas/ ├── vapora/ │ ├── main.ncl # Unified service config │ ├── backend.ncl # Axum REST API │ ├── agents.ncl # Orchestration + learning │ └── llm-router.ncl # Multi-provider routing │ └── platform/ ├── common/helpers.ncl # Composition utilities └── defaults/deployment/ ├── solo.ncl # Dev mode ├── multiuser.ncl # Team mode └── enterprise.ncl # Production mode ``` **Features:** - Schema-first record definition (Nickel guidelines) - Gradual typing with defaults - Composable via `std.record.merge` - JSON output for all platforms ### Output: Configurations (`config/`) Generated or manually-created configurations: ```plaintext config/ ├── examples/ │ ├── vapora.solo.example.toml # TOML format (direct use) │ ├── vapora.solo.example.ncl # Nickel format (composable) │ ├── vapora.multiuser.example.toml │ ├── vapora.multiuser.example.ncl │ ├── vapora.enterprise.example.toml │ ├── vapora.enterprise.example.ncl │ └── README.md │ └── runtime/ ├── vapora.toml # Active config (generated) ├── .gitkeep └── README.md ``` ## Deployment Modes ### Solo (Development) **Best for:** Local development, feature testing ```bash cp config/examples/vapora.solo.example.toml config/runtime/vapora.toml # Services on 127.0.0.1, file-based DB, no coordination ``` **Generated config includes:** - Backend: `localhost:8001` (2 workers) - Agents: `localhost:8002` (3 max instances) - Router: `localhost:8003` (cost tracking disabled) - Database: File-based SurrealDB - Frontend: `localhost:3000` - Security: JWT only (no TLS, no MFA) ### Multiuser (Team) **Best for:** Team collaboration, staging environments ```bash cp config/examples/vapora.multiuser.example.toml config/runtime/vapora.toml # Edit for your infrastructure (SurrealDB URL, NATS cluster, etc.) ``` **Generated config includes:** - Backend: `0.0.0.0:8001` (4 workers, MFA enabled) - Agents: `0.0.0.0:8002` (10 instances, NATS enabled) - Router: Cost tracking and budget enforcement (per-role limits) - Database: Remote SurrealDB (`ws://surrealdb:8000`) - NATS: JetStream for distributed coordination - Security: TLS, MFA, audit logging - Knowledge Graph: 30-day retention ### Enterprise (Production) **Best for:** Production deployments, large organizations ```bash cp config/examples/vapora.enterprise.example.toml config/runtime/vapora.toml # Customize TLS certs, domains, LLM providers, backup strategy ``` **Generated config includes:** - Backend: `0.0.0.0:8001` (8 workers, full auth) - Agents: `0.0.0.0:8002` (50 instances, swarm enabled) - Router: All providers enabled, aggressive cost optimization - Database: SurrealDB cluster - NATS: JetStream cluster - Security: Enforced TLS, MFA, full audit logging, RBAC-ready - Observability: Prometheus, OpenTelemetry, distributed tracing - Knowledge Graph: 90-day retention - Backup: Every 6 hours ## Key Features ### Cost-Aware LLM Routing Automatic budget enforcement per role: ```toml [llm_router.budget_enforcement] enabled = true window = "monthly" near_threshold_percent = 75 # Alert at 75% auto_fallback = true # Fallback to cheaper provider [llm_router.budget_enforcement.role_limits] architect_cents = 500000 # $5000/month developer_cents = 300000 # $3000/month reviewer_cents = 200000 # $2000/month testing_cents = 100000 # $1000/month ``` ### Learning-Based Agent Selection Agents improve from execution history: ```toml [agents.learning] enabled = true recency_window_days = 7 recency_multiplier = 3.0 # Recent tasks weighted 3x higher [agents.learning.scoring] load_weight = 0.3 # Agent load importance expertise_weight = 0.5 # Expertise profile importance confidence_weight = 0.2 # Confidence (prevents overfitting) ``` ### Knowledge Graph Temporal execution history with learning curves: ```toml [agents.knowledge_graph] enabled = true retention_days = 90 # 90-day history (enterprise mode) causal_reasoning = true # Understand task relationships similarity_search = true # Recommend past solutions ``` ### Multi-Provider LLM Routing Intelligent provider selection with cost optimization: ```toml [llm_router.providers] claude_enabled = true openai_enabled = true gemini_enabled = true ollama_enabled = true # Local option for cost savings [llm_router.routing] strategy = "cost_aware" # Cost optimization strategy fallback_chain = ["claude", "gpt-4", "gemini", "ollama"] retry_attempts = 5 retry_delay = 500 ``` ## Customization Examples ### Example 1: Enable Ollama for Development ```toml [providers] ollama_enabled = true ollama_url = "http://localhost:11434" [llm_router.routing] fallback_chain = ["claude", "ollama"] ``` ### Example 2: Increase Agent Learning Window ```toml [agents.learning] recency_window_days = 30 # 30-day window instead of 7 recency_multiplier = 4.0 # Stronger recency weighting ``` ### Example 3: Adjust Team Budgets ```toml [llm_router.budget_enforcement.role_limits] architect_cents = 1000000 # $10k/month (increased) developer_cents = 750000 # $7.5k/month (increased) ``` ### Example 4: Custom Port and TLS ```toml [backend] port = 9001 # Non-standard port [security] tls_enabled = true tls_cert_path = "/path/to/cert.pem" tls_key_path = "/path/to/key.pem" ``` ## Integration with Existing Systems ### With Docker Compose ```yaml # docker-compose.yml excerpt services: vapora-backend: environment: VAPORA_CONFIG: /etc/vapora/vapora.toml volumes: - ./config/runtime/vapora.toml:/etc/vapora/vapora.toml:ro ``` ### With Kubernetes ```yaml # kustomization.yaml configMapGenerator: - name: vapora-config files: - config/runtime/vapora.toml resources: - deployment.yaml ``` ### With KCL Provisioning ```bash # Link config for KCL scripts ln -s ../config/runtime/vapora.toml ./vapora-wrksp/config.toml # Run provisioning provisioning workflow run workflows/deploy-full-stack.yaml ``` ## Troubleshooting ### Configuration Not Loading 1. Check path: `config/runtime/vapora.toml` must exist 2. Validate syntax: `toml-cli validate config/runtime/vapora.toml` 3. Check permissions: Must be readable by service 4. Restart services after changes ### Validation Failed ```bash # Validate TOML toml-cli validate config/runtime/vapora.toml # Validate Nickel nickel typecheck config/examples/vapora.solo.example.ncl # Validate JSON output nickel export config/runtime/vapora.custom.ncl | jq . ``` ### Database Connection Issues ```bash # Check SurrealDB reachability curl -i ws://localhost:8000/health # Update config [database] url = "ws://surrealdb-remote.example.com:8000" ``` ### Budget Not Enforcing 1. Ensure enabled: `[llm_router.budget_enforcement] enabled = true` 2. Set provider credentials: `export ANTHROPIC_API_KEY=...` 3. Check role limits are set 4. Verify cost tracking is enabled ## Next Steps 1. **Choose deployment mode** - Solo for dev, Multiuser for teams, Enterprise for production 2. **Generate or copy configuration** - Use forms or examples 3. **Customize for your environment** - Edit database URLs, domains, budgets 4. **Validate configuration** - Run validation commands 5. **Deploy** - Use Docker Compose, Kubernetes, or KCL provisioning ## References - **Main README**: `README.md` - Complete provisioning system - **Examples README**: `config/examples/README.md` - Configuration options - **VAPORA Docs**: `../../docs/architecture.md` - System architecture - **Nickel Guideline**: `../../.claude/guidelines/nickel.md` - Configuration language - **typedialog Docs**: Form schema reference - **KCL Provisioning**: `vapora-wrksp/README.md` - Infrastructure as code --- **Integration Version**: 1.0.0 **Last Updated**: January 12, 2026 **VAPORA Version**: 1.2.0