17 KiB
Changes
[Unreleased]
Added - Professional Quality Improvements
Community Health Files
- Created
CONTRIBUTING.mdwith contribution guidelines, development workflow, and coding standards - Created
SECURITY.mdwith vulnerability reporting process and security best practices - Created
CODE_OF_CONDUCT.mdwith Contributor Covenant 2.1
Security & Compliance
- Created
deny.tomlwith cargo-deny configuration for license/security policies - Configured Renovate for automated dependency updates with automerge for minor/patch
- Added pre-commit hooks (fmt, clippy, shellcheck, markdownlint, trailing-whitespace, check-yaml/toml/json)
Testing Infrastructure
- Configured cargo-llvm-cov for code coverage tracking
- Integrated Codecov for coverage reporting in CI
- Added coverage badge to README
- Created benchmark tests with criterion for performance baselines
- Added property-based testing with proptest for validation functions
- Justfile recipes:
just dev::coverage,just dev::bench,just dev::coverage-open
CI/CD Enhancements
- Multi-OS CI matrix: Linux, macOS, Windows (was Linux only)
- Cargo cache with rust-cache action (faster CI builds)
- Code coverage job uploading to Codecov
- Benchmark job running on pull requests
- cargo-deny checks in CI pipeline
Release Automation
- Full automated release workflow: tag → build multi-OS → publish GitHub + crates.io
- Builds for 5 targets: Linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64
- Automatic tarball + SHA256 generation and upload
- Automatic crates.io publishing in dependency order
- cargo-binstall metadata for easy installation:
cargo binstall typedialog
Impact
- Code coverage now tracked (was unknown)
- CI tests on 3 operating systems (was 1)
- Release process fully automated (was manual)
- 7 pre-commit hooks validate code quality
- Benchmark baselines established for performance tracking
- Property tests validate edge cases
- Security scanning with cargo-deny
- Automated dependency updates with Renovate
Added - Multi-Language Linting System
Linting Infrastructure
- Created
.cargo/config.tomlwith strict rustflags (warnings, future-incompatible, unused, etc.) - Extended
justfiles/dev.justwith language-specific linters:just dev::lint-rust- Clippy lintingjust dev::lint-bash- Shellcheck for 142 bash scriptsjust dev::lint-nickel- Nickel typecheck for 63 filesjust dev::lint-nushell- Nushell validation for 9 scriptsjust dev::lint-markdown- Markdownlint for docs/ folder onlyjust dev::lint-all- Execute all linters
- Extended
justfiles/ci.justwith CI-compatible linter recipes - Updated
just check-allto include multi-language linting
GitHub Actions CI/CD
- Created
.github/workflows/ci.ymlwith automated linting matrix - Parallel linting jobs per language (rust, bash, nickel, nushell, markdown)
- Integrated with test and build stages
Linter Tools
- Added shellcheck for bash script analysis
- Added markdownlint-cli2 for docs/ validation
- Leveraged existing nickel CLI for typecheck
- Leveraged nushell built-in --check flag
Configuration
- Created
.markdownlintrcwith basic rules (MD013, MD033, MD041 disabled) - Updated
scripts/check_deps.shto verify all linter dependencies - Updated
docs/build.mdwith shellcheck and markdownlint installation
Impact
- 142 bash scripts now validated with shellcheck
- 63 Nickel files now typechecked
- 9 Nushell scripts validated
- docs/ markdown files (subset of 8,530 total) validated
- Rust code enforces stricter compilation standards via rustflags
Added - TypeDialog Agent System
Multi-Provider LLM Support
- Complete LLM provider abstraction supporting Claude, OpenAI, Gemini, and Ollama
- Unified trait-based architecture for consistent API across providers
- Streaming support with two protocols: SSE (Claude/OpenAI) and JSON (Gemini/Ollama)
- Token usage tracking across all providers (except OpenAI streaming limitation)
- Local execution with Ollama for privacy-sensitive workloads
Agent Execution System
- New
.agent.mdxfile format for defining AI agents - YAML frontmatter configuration with
@agent,@input,@import,@shell,@validatedirectives - CLI tool
typedialog-agfor executing agent files - Server component
typedialog-ag-serverfor HTTP API access
Template System
- Tera template engine (Jinja2-compatible) for variable substitution and conditionals
- Template variables with
{{ var }}syntax - Conditional logic with
{% if %}...{% endif %} - File imports with glob pattern support:
@import "src/**/*.rs" as code - Shell command integration:
@shell "git status" as status - Environment variable loading
Output Validation
- Configurable validation rules for agent outputs
- Format validation (markdown, JSON, YAML)
- Content requirements (
must_containchecks) - Length constraints (
min_length,max_length)
Provider-Specific Features
- Claude (Anthropic): 3 models (Haiku, Sonnet, Opus), excellent code/reasoning, SSE streaming
- OpenAI (GPT): gpt-4o, gpt-4o-mini, o1, o3 models, broad capabilities, SSE streaming
- Gemini (Google): Creative tasks, 2M context window, free tier, JSON streaming
- Ollama (Local): Complete privacy, offline operation, no API costs, supports llama2/mistral/codellama/etc.
Added - Organization & Documentation
Project Structure
- Created
demos/agent/with 4 provider comparison demos - Created
tests/agent/with validation tests - Created
examples/12-agent-execution/with 8 practical CLI examples - Organized docs into backend-specific folders:
docs/cli/,docs/tui/,docs/web/,docs/ai/,docs/agent/,docs/encryption/
User Documentation
docs/agent/README.md- Agent system overview and navigationdocs/agent/getting_started.md- Installation and first agent guidedocs/agent/llm_providers.md- Complete provider comparison (400+ lines)docs/cli/README.md- CLI backend documentationdocs/tui/README.md- TUI backend documentationdocs/web/README.md- Web backend documentationdocs/ai/README.md- AI backend documentationdocs/encryption/README.md- Encryption documentation
Agent Examples
basic-greeting.agent.mdx- Simple introduction (Claude Haiku)code-review.agent.mdx- Security & performance analysis (Claude Sonnet)documentation.agent.mdx- Generate docs from code (GPT-4o)task-planner.agent.mdx- Project planning (Claude Sonnet)local-privacy.agent.mdx- Privacy-first analysis (Ollama/llama2)creative-writer.agent.mdx- Creative content (Gemini 2.0)refactoring-assistant.agent.mdx- Code refactoring (GPT-4o-mini)architect.agent.mdx- High-level design (Claude Opus)
Cross-References
- Extensive linking between examples, tests, demos, and documentation
- Navigation structure: examples → demos → tests → core → technical docs
Added - Configuration & Provisioning
Configuration Structure
- Renamed
config/agent/→config/ag/for consistency withtypedialog-agbinary name - Added configuration profiles for all 6 backends:
cli/,tui/,web/,ai/,ag/,prov-gen/ - Each backend has 3 environments:
default.toml,dev.toml,production.toml - Total: 18 configuration files (6 backends × 3 environments)
config/ag/ - Agent configuration (LLM execution)
default.toml- Claude Haiku default, streaming enabled, Tera templatesdev.toml- Ollama (local) for development, debug logging, temperature 0.7production.toml- Claude Sonnet, lower temperature (0.3), rate limiting enabled
config/prov-gen/ - Provisioning generator configuration (IaC)
default.toml- AWS + Hetzner providers, Nickel validation, AI disableddev.toml- Hetzner + LXD (cheaper), Ollama for AI, verbose loggingproduction.toml- AWS + GCP, strict validation, encryption required, tests required
Provisioning Generator Templates
-
Created
provider-gcp-section.toml(256 lines, 15 elements)- Google Cloud Platform: 24 regions, 16 machine types (e2/n1/n2/c2)
- Project ID + Service Account authentication
- Disk types: Standard, Balanced SSD, Premium SSD, Ultra SSD
- VPC networking, preemptible instances, deletion protection
-
Created
provider-azure-section.toml(296 lines, 17 elements)- Microsoft Azure: 30 regions globally
- Service Principal authentication (Tenant ID, Client ID, Secret)
- 12 VM sizes (B-series burstable, D/E-series, F-series compute)
- Managed disks, Virtual Networks, accelerated networking
-
Created
provider-lxd-section.toml(207 lines, 16 elements)- LXD containers and virtual machines (local/remote)
- 10 base images (Ubuntu, Debian, Alpine, Rocky, Arch)
- CPU/Memory/Disk limits, 5 storage pools (dir, zfs, btrfs, lvm)
- Network modes: lxdbr0 (NAT), host, macvlan
- Nesting support (Docker inside LXD), cloud-init integration
Total provider templates: 6 providers (AWS, GCP, Azure, Hetzner, UpCloud, LXD) - 1,191 lines
Dependency Management
- Created
scripts/check_deps.sh- Automated dependency verification script - Checks critical dependencies:
just,nickel,cargo,prov-ecosystem,secretumvault - Exit status 0 if all found, 1 if any missing
- Provides installation instructions for missing dependencies
Provisioning Generator Command Enhancements
- Added
-f, --format <FORMAT>flag totypedialog-prov-gen templatescommand- Supported formats:
json,yaml,toml,text(default) - Enables machine-readable template listing for automation and integration
- JSON/YAML for CI/CD pipelines, TOML for configuration files
- Supported formats:
- Template path display: Shows resolved absolute path before listing
- Output: "From: /absolute/path/to/templates"
- Helps users verify which template directory is loaded
- TemplateCategory structure now serializable across all formats
- Consistent structure:
name,description,templates[] - TOML output uses
[[categories]]array-of-tables format
- Consistent structure:
Changed - Documentation Updates
docs/build.md - Critical Dependencies Section (320+ lines added)
-
Internal Dependencies:
prov-ecosystem(for typedialog-prov-gen),secretumvault(for encryption)- Installation: sibling directory or git submodule
- Path configuration: Cargo.toml paths, environment variables
- Verification commands
-
External Dependencies:
just(command runner),Nickel(configuration language)- Multi-platform installation: Homebrew, cargo, from source
- PATH configuration
- Verification tests
-
Dependency Quick Check: Bash script to verify all dependencies
-
Troubleshooting: 3 common issues with solutions each
- prov-ecosystem/secretumvault not found (3 solutions)
- Nickel binary not found (3 solutions)
- just command not found (3 solutions)
docs/README.md - Navigation Updates
- Added "Critical Dependencies" to Building section
- Updated "Building & Distribution" with dependencies reference
config/README.md - Complete Backend Documentation (550+ lines)
- Documented all 6 backends: CLI, TUI, Web, AI, Agent (ag), Prov-gen
- Each backend has: configuration table, usage examples, features list
- AI Backend: RAG pipeline, embeddings (OpenAI/Ollama), vector store, knowledge graphs
- Agent Backend: Multi-provider LLM, Tera templates, streaming, variable substitution
- Prov-gen: Multi-cloud IaC, 7-layer validation, Nickel integration, AI-assisted generation
- Added configuration details for AI, Agent, and Prov-gen backends
- Updated development and production configuration examples
- Distribution structure updated to show 6 backends
README.md - Main Project Documentation
-
Updated Features: "6 Backends" (was "3 Backends")
-
Added AI Backend section (lines 95-113)
- RAG system with semantic search
- Multi-provider embeddings (OpenAI, Ollama)
- Vector store (in-memory, Redis)
- Knowledge graph generation
-
Added Provisioning Generator section (lines 182-223)
- Infrastructure as Code generation
- Quick example with 3 command variants
- 6 features: Multi-cloud, 7-layer validation, Nickel, AI-assist, templates, profiles
- Supported providers table: AWS, GCP, Azure, Hetzner, UpCloud, LXD
-
Updated Configuration structure: 6 backends listed
-
Updated Project Structure: All 9 crates documented
-
Updated Key Technologies: Organized into Core, Backends, AI & Agent, Infrastructure
-
Updated Examples: Added
11-prov-gen/and12-agent-execution/categories
docs/prov-gen/README.md
- Updated Multi-Provider Support: AWS, GCP, Azure, Hetzner, UpCloud, LXD (was AWS, GCP, Azure, Hetzner, LXD, bare metal)
- Changed "generates complete provisioning" → "generates provisioning" (modesty)
Changed - Naming Consistency
Package Renaming
typeagent-core→typedialog-ag-coretypeagent-cli→typedialog-agtypeagent-server→typedialog-ag-serverconfig/agent/→config/ag/
Rationale: Align with project-wide typedialog-* naming convention and binary names
Impact
- Updated 50+ files (imports, docs, scripts, configs)
- Updated workspace
Cargo.tomldependencies - Updated all crate manifests
- Updated justfile recipes
- Updated configuration directory structure
- 53 tests passing, 0 clippy warnings after refactor
Changed - Build & Distribution
Justfile Updates
- Added
just build::agent- Build Agent CLI - Added
just build::agent-server- Build Agent server - Added
just build::prov-gen- Build Provisioning Generator - Added
just test::agent- Test Agent system (53 tests) - Added
just test::prov-gen- Test Provisioning Generator (11 tests) - Updated
just build::allto include Agent and Prov-gen builds - Fixed
just test::agent- Removed invalid lib test for binary-onlytypedialog-agcrate
Script Updates
scripts/create_distro.sh- Include all binaries:typedialog-ag,typedialog-ag-server,typedialog-prov-genscripts/check_deps.sh- New dependency verification script (67 lines)installers/bootstrap/install.sh- Install Agent and Prov-gen binariesinstallers/bootstrap/install.ps1- Install Agent and Prov-gen binaries (Windows).woodpecker/Dockerfile.cross- Cross-compile Agent and Prov-gen binaries
Build Features
- New feature flag
FEATURES_AGENT := "markup,nickel,cache" - Agent and Prov-gen builds integrated into full CI/CD pipeline
- All builds verified:
just build::prov-gen✓,just build::agent✓ - All tests passing:
just test::prov-gen✓ (11 tests),just test::agent✓ (53 tests, 5 ignored)
[Previous]
Added
RepeatingGroup Duplicate Detection
- Implemented duplicate item validation across all backends (CLI, TUI, Web)
- Added
unique = trueattribute support to prevent duplicate items - Added item counter display updates in Web backend
- New
is_duplicate()function in CLI and TUI backends
Web Backend Improvements
- Refactored JavaScript: Replaced global constants with closure-based state management
- Added
render_global_repeating_group_script()for generic repeating group handling - Configuration stored in
data-*attributes:data-min-items,data-max-items,data-has-unique,data-unique-key,data-field-names - Live item counter updates after add/delete operations
- Single document-level event delegation for all repeating group interactions
Documentation
- Updated
docs/field_types.mdwith unique validation details - Updated
examples/README.mdwith RepeatingGroup testing commands - Added
docs/field_types.md(new file) - Updated example forms with
unique = trueattribute
Fixed
- CLI Backend: Fixed validation of duplicate items in add/edit operations
- TUI Backend: Fixed validation of duplicate items with error overlay feedback
- Web Backend: Fixed
has_uniqueflag reading from field definition (was incorrectly scanning fragment fields) - Web Backend: Fixed item counter not updating when adding/deleting items
Changed
Architecture
- Each repeating group now maintains independent state via closure
- Removed ~600 lines of dead code in Web JavaScript
- Event handling now context-aware (finds correct repeating group controller)
Examples
examples/05-fragments/array-trackers.toml: Addedunique = trueto UDP and HTTP tracker arraysexamples/07-nickel-generation/arrays-form.toml: Addedunique = trueto all RepeatingGroup fields
Technical Notes
- Duplicate detection compares ALL field values when
unique = true - Works consistently across CLI, TUI, and Web backends
- Backwards compatible: repeating groups without
unique = trueunaffected - max_items limit already enforced in all backends (no changes needed)
Testing
- All 174 unit tests passing
- No clippy warnings
- Build verified with
--all-featuresflag - Manual testing in Web backend: duplicate detection working correctly
- Item counter updates verified on add/delete operations