2026-01-14 03:25:20 +00:00
..
2026-01-14 03:25:20 +00:00

TypeDialog Integration\n\nTypeDialog enables interactive form-based configuration from Nickel schemas.\n\n## Status\n\n- TypeDialog Binary: Not yet installed (planned: typedialog command)\n- TypeDialog Forms: Created and ready (setup wizard, auth login, MFA enrollment)\n- Bash Wrappers: Implemented to handle TTY input properly\n- ForminQuire: DEPRECATED - Archived to .coder/archive/forminquire/\n\n## Directory Structure\n\n{$detected_lang}\n.typedialog/\n└── provisioning/platform/\n ├── README.md # This file\n ├── forms/ # Form definitions (to be generated)\n │ ├── orchestrator.form.toml\n │ ├── control-center.form.toml\n │ └── ...\n ├── templates/ # Jinja2 templates for schema rendering\n │ └── service-form.template.j2\n ├── schemas/ # Symlink to Nickel schemas\n │ └── platform/schemas/ → ../../../schemas/platform/schemas/\n └── constraints/ # Validation constraints\n └── constraints.toml # Shared validation rules\n\n\n## How TypeDialog Would Work\n\n### 1. Form Generation from Schemas\n\n{$detected_lang}\n# Auto-generate form from Nickel schema\ntypedialog generate-form --schema orchestrator.ncl \\n --output forms/orchestrator.form.toml\n\n\n### 2. Interactive Configuration\n\n{$detected_lang}\n# Run interactive form\ntypedialog run-form --form forms/orchestrator.form.toml \\n --output orchestrator-configured.ncl\n\n\n### 3. Validation\n\n{$detected_lang}\n# Validate user input against schema\ntypedialog validate --form forms/orchestrator.form.toml \\n --data user-config.ncl\n\n\n## Current Status: TypeDialog Forms Ready\n\nTypeDialog forms have been created and are ready to use:\n\nForm Locations:\n- Setup wizard: provisioning/.typedialog/core/forms/setup-wizard.toml\n- Auth login: provisioning/.typedialog/core/forms/auth-login.toml\n- MFA enrollment: provisioning/.typedialog/core/forms/mfa-enroll.toml\n\nBash Wrappers (TTY-safe, handle input properly):\n- provisioning/core/shlib/setup-wizard-tty.sh\n- provisioning/core/shlib/auth-login-tty.sh\n- provisioning/core/shlib/mfa-enroll-tty.sh\n\nUsage Pattern:\n1. Bash wrapper calls TypeDialog (handles TTY input)\n2. TypeDialog generates Nickel config file\n3. Nushell scripts read the generated config (no input issues)\n\nExample:\n\n{$detected_lang}\n# Run TypeDialog setup wizard\n./provisioning/core/shlib/setup-wizard-tty.sh\n\n# Nushell reads the generated config\nlet config = (open provisioning/.typedialog/core/generated/setup-wizard-result.json | from json)\n\n\nNote: ForminQuire (Jinja2-based forms) has been archived to provisioning/.coder/archive/forminquire/ and is no longer in use.\n\n## Integration Plan (When TypeDialog Available)\n\n### Step 1: Install TypeDialog\n\n{$detected_lang}\ncargo install --path /Users/Akasha/Development/typedialog\ntypedialog --version\n\n\n### Step 2: Generate Forms from Schemas\n\n{$detected_lang}\n# Batch generate all forms\nfor schema in provisioning/schemas/platform/schemas/*.ncl; do\n service=$(basename $schema .ncl)\n typedialog generate-form \\n --schema $schema \\n --output provisioning/platform/.typedialog/forms/${service}.form.toml\ndone\n\n\n### Step 3: Create Setup Wizard\n\n{$detected_lang}\n# Unified setup workflow\nprovisioning setup-platform \\n --mode solo|multiuser|enterprise \\n --provider docker|kubernetes \\n --interactive # Uses TypeDialog forms\n\n\n### Step 4: Update Platform Setup Script\n\n{$detected_lang}\n# provisioning/platform/scripts/setup-platform-config.sh\n\nif command -v typedialog &> /dev/null; then\n # TypeDialog is installed - use bash wrapper for proper TTY handling\n ./provisioning/core/shlib/setup-wizard-tty.sh\n\n # Read generated JSON config\n # Nushell scripts can now read the config without input issues\nelse\n # Fallback to basic prompts\n echo "TypeDialog not available. Using basic interactive prompts..."\n # Nushell wizard with basic input prompts\n nu -c "use provisioning/core/nulib/lib_provisioning/setup/wizard.nu *; run-setup-wizard"\nfi\n\n\n## Form Definition Example\n\n{$detected_lang}\n# provisioning/platform/.typedialog/forms/orchestrator.form.toml\n[metadata]\nname = "Orchestrator Configuration"\ndescription = "Configure the Orchestrator service"\nversion = "1.0.0"\nschema = "orchestrator.ncl"\n\n[fields.mode]\ntype = "enum"\nlabel = "Deployment Mode"\ndescription = "Select deployment mode: solo, multiuser, or enterprise"\noptions = ["solo", "multiuser", "enterprise"]\ndefault = "solo"\nrequired = true\n\n[fields.server.port]\ntype = "number"\nlabel = "Server Port"\ndescription = "HTTP server port (1-65535)"\nmin = 1\nmax = 65535\ndefault = 8080\nrequired = true\n\n[fields.database.host]\ntype = "string"\nlabel = "Database Host"\ndescription = "PostgreSQL host"\ndefault = "localhost"\nrequired = true\n\n[fields.logging.level]\ntype = "enum"\nlabel = "Logging Level"\noptions = ["debug", "info", "warning", "error"]\ndefault = "info"\nrequired = false\n\n\n## Validation Constraints\n\n{$detected_lang}\n# provisioning/platform/.typedialog/constraints/constraints.toml\n\n[orchestrator]\nmode = ["solo", "multiuser", "enterprise"]\nport = "range(1, 65535)"\ndatabase_pool_size = "range(1, 100)"\nmemory = "pattern(^\\d+[MG]B$)"\n\n[control-center]\nport = "range(1, 65535)"\nreplicas = "range(1, 10)"\n\n[nginx]\nworker_processes = "range(1, 32)"\nworker_connections = "range(1, 65536)"\n\n\n## Workflow: Setup to Deployment\n\n{$detected_lang}\n1. User runs setup command\n ↓\n2. TypeDialog displays form\n ↓\n3. User fills form with validation\n ↓\n4. Form data → Nickel config\n ↓\n5. Nickel config → TOML (via ConfigLoader)\n ↓\n6. Service reads TOML config\n ↓\n7. Service starts with configured values\n\n\n## Benefits of TypeDialog Integration\n\n- Type-safe forms - Generated from Nickel schemas\n- Real-time validation - Enforce constraints as user types\n- Progressive disclosure - Show advanced options only when needed\n- Consistent UX - Same forms across platforms (CLI, Web, TUI)\n- Auto-generated - Forms stay in sync with schemas automatically\n- TTY handling - Bash wrappers solve Nushell input stack issues\n- Graceful fallback - Falls back to basic prompts if TypeDialog unavailable\n\n## Testing TypeDialog Forms\n\n{$detected_lang}\n# Validate form structure\ntypedialog check-form provisioning/platform/.typedialog/forms/orchestrator.form.toml\n\n# Run form with test data\ntypedialog run-form \\n --form provisioning/platform/.typedialog/forms/orchestrator.form.toml \\n --test-mode # Automated validation\n\n# Generate sample output\ntypedialog generate-sample \\n --form provisioning/platform/.typedialog/forms/orchestrator.form.toml \\n --output /tmp/orchestrator-sample.ncl\n\n\n## Migration Path\n\n### Phase A: Legacy (DEPRECATED)\n\n{$detected_lang}\nFormInquire (Jinja2) → Nushell processing → TOML config\nStatus: ARCHIVED to .coder/archive/forminquire/\n\n\n### Phase B: Current Implementation\n\n{$detected_lang}\nBash wrapper → TypeDialog (TTY input) → Nickel config → JSON export → Nushell reads JSON\nStatus: IMPLEMENTED with forms ready\n\n\n### Phase C: TypeDialog Binary Available (Future)\n\n{$detected_lang}\nTypeDialog binary installed → Full nickel-roundtrip workflow → Auto-sync with schemas\nStatus: PLANNED - awaiting TypeDialog binary release\n\n\n### Phase D: Unified (Future)\n\n{$detected_lang}\nConfigLoader discovers config → Service reads → TypeDialog updates UI\n\n\n## Integration with Infrastructure Schemas\n\nTypeDialog forms work seamlessly with infrastructure schemas:\n\n### Infrastructure Configuration Workflow\n\n1. Define Infrastructure Schemas (completed)\n- Location: provisioning/schemas/infrastructure/\n- 6 schemas: docker-compose, kubernetes, nginx, prometheus, systemd, oci-registry\n- All validated with nickel typecheck\n\n2. Generate Infrastructure Configs (completed)\n- Script: provisioning/platform/scripts/generate-infrastructure-configs.nu\n- Supports: solo, multiuser, enterprise, cicd modes\n- Formats: YAML, JSON, conf, service\n\n3. Validate Generated Configs (completed)\n- Script: provisioning/platform/scripts/validate-infrastructure.nu\n- Tools: docker-compose config, kubectl apply --dry-run, nginx -t, promtool check\n- Examples: examples-solo-deployment.ncl, examples-enterprise-deployment.ncl\n\n4. Interactive Setup with Forms (TypeDialog ready)\n- Script: provisioning/platform/scripts/setup-with-forms.sh\n- Bash wrappers: provisioning/core/shlib/*-tty.sh (handle TTY input)\n- Forms ready: setup-wizard, auth-login, mfa-enroll\n- Fallback: Basic Nushell prompts if TypeDialog unavailable\n\n### Current Status: Full Infrastructure Support\n\n| Component | Status | Details |\n| ----------- | -------- | --------- |\n| Schemas | Complete | 6 infrastructure schemas (1,577 lines) |\n| Examples | Complete | 2 deployment examples (solo, enterprise) |\n| Generation Script | Complete | Auto-generates configs for all modes |\n| Validation Script | Complete | Validates Docker, K8s, Nginx, Prometheus |\n| Setup Wizard | Complete | TypeDialog forms + bash wrappers ready |\n| TypeDialog Integration | Pending | Structure ready, awaiting binary |\n\n### Validated Examples\n\nSolo Deployment (examples-solo-deployment.ncl):\n- Type-checks without errors\n- Exports to 198 lines of JSON\n- 5 Docker Compose services\n- Resource limits: 1.0-4.0 CPU, 256M-1024M RAM\n- Prometheus: 4 scrape jobs\n- Registry backend: Zot (filesystem)\n\nEnterprise Deployment (examples-enterprise-deployment.ncl):\n- Type-checks without errors\n- Exports to 313 lines of JSON\n- 6 Docker Compose services with HA\n- Resource limits: 2.0-4.0 CPU, 512M-4096M RAM\n- Prometheus: 7 scrape jobs with remote storage\n- Registry backend: Harbor (S3 distributed)\n\n### Test Infrastructure Generation\n\n{$detected_lang}\n# Export solo infrastructure\nnickel export --format json provisioning/schemas/infrastructure/examples-solo-deployment.ncl > /tmp/solo.json\n\n# Validate JSON\njq . /tmp/solo.json\n\n# Check Docker Compose services\njq '.docker_compose_services | keys' /tmp/solo.json\n\n# Compare resource allocation (solo vs enterprise)\njq '.docker_compose_services.orchestrator.deploy.resources.limits' /tmp/solo.json\njq '.docker_compose_services.orchestrator.deploy.resources.limits' /tmp/enterprise.json\n\n\n## Next Steps\n\n1. Infrastructure Setup (available now):\n - Generate infrastructure configs with automation scripts\n - Validate with format-specific tools\n - Use interactive setup wizard for configuration\n\n2. When TypeDialog binary becomes available:\n - Install TypeDialog binary\n - Forms already created and ready to use\n - Bash wrappers handle TTY input (no Nushell stack issues)\n - Full nickel-roundtrip workflow will be enabled\n\n3. Production Deployment:\n - Use validated infrastructure configs\n - Deploy with ConfigLoader + infrastructure schemas\n - Monitor via Prometheus (auto-generated from schemas)\n\n---\n\nVersion: 1.2.0 (TypeDialog Forms + Bash Wrappers)\nStatus: TypeDialog forms ready with bash wrappers; Awaiting TypeDialog Binary\nLast Updated: 2025-01-09\nForminQuire Status: DEPRECATED - Archived to .coder/archive/forminquire/\nFallback: Basic Nushell prompts if TypeDialog unavailable\nTested: Infrastructure examples (solo + enterprise) validated