# Changelog ## [0.108.0] - 2025-10-19 (BOOTSTRAP INSTALLER FIXES) ### 🚀 Bootstrap Installer & Distribution Improvements (2025-10-19) #### Install Script Architecture (DRY Design) - **Implemented Symlink-Based DRY Architecture**: - Single source of truth: `installers/bootstrap/install.sh` (1,247 lines) - Symlinks: `./install.sh` → `installers/bootstrap/install.sh` - Symlinks: `./scripts/templates/install.sh` → `installers/bootstrap/install.sh` - All changes propagate automatically through symlinks - No code duplication across installation paths #### Archive Extraction Fixes (Critical) - **Fixed Archive Binary Detection (Version-Agnostic)**: - Root cause: `find` command returning parent directory itself in results - Solution: Added `-not -path "$extract_dir"` to exclude starting directory - Now correctly detects `nushell-full-X.Y.Z/bin/nu` regardless of version - Works with any Nushell version: 0.107, 0.108, 0.109, etc. - Supports both `.tar.gz` and `.zip` archive formats - **Improved Binary Location Detection**: - Step 1: Check for `$extracted/bin/nu` (subdirectory structure) - Step 2: Check for `$extracted/nu` (flat structure) - Step 3: Fallback search for any `nushell-*` subdirectory with `bin/nu` - Step 4: Last resort recursive search for any executable named `nu` - Validates binaries exist before using them #### Plugin Registration Error Handling - **Improved Plugin Registration with Version Mismatch Detection**: - Captures both stdout and stderr from plugin add commands - Detects version incompatibility errors: "is not compatible with version" - Distinguishes between: 1. Successfully registered plugins 2. Version mismatch errors (skipped gracefully) 3. Other registration failures (reported with error details) - Reports summary of: registered, incompatible, and failed plugins - Installation continues successfully even with version mismatches #### Shell Configuration PATH Update Messaging - **Fixed Confusing PATH Update Messages**: - Root cause: Script conflated "PATH found" with "PATH needs updating" - Solution: Track two separate states: - `updated=true` → PATH was ADDED to files (new) - `path_found=true` → PATH already EXISTS in files (no change needed) - Now shows clear, non-contradictory messages: - ✅ "PATH is already configured..." (when found everywhere) - ✅ "Shell configuration updated" (when just added) - ⚠️ "Could not find..." (when file doesn't exist) #### Installation Features - **`--source-path` Option for Local Installation**: - Install from local archive: `--source-path archive.tar.gz` - Install from local directory: `--source-path /path/to/binaries` - Default behavior: `--source-path` alone uses `./bin_archives` - Works with both custom `--install-dir` and defaults - **`--uninstall` with Configuration Management**: - Prompts user to remove configuration: "Remove ~/.config/nushell? [y/N]" - Removes all installed binaries and plugins - Clean uninstall before fresh reinstall - Preserves user choice (keep or remove config) #### Documentation Updates - **Updated CLAUDE.md** with: - Install Script Architecture (DRY Design) section - Source of truth location and symlink structure - `--source-path` feature documentation - Version-agnostic archive detection details - DRY architecture benefits - **Updated README.md** with: - Install Script Architecture subsection in "Method 1: Full Distribution" - Symlink structure documentation - `--source-path` usage examples - Version-agnostic archive detection explanation - How DRY Works (3-step explanation) #### Files Modified - `installers/bootstrap/install.sh` - All fixes (1,247 lines, +3 lines) - `./install.sh` - Auto-updated via symlink - `./scripts/templates/install.sh` - Auto-updated via symlink - `CLAUDE.md` - Added install script architecture documentation - `README.md` - Added install script section #### Testing & Verification - ✅ Archive extraction works with version-agnostic detection - ✅ Installation to `~/.local` successful (16 binaries) - ✅ Installation to `~/.local/bin` successful (21 plugins loaded) - ✅ Plugin registration handles version mismatches gracefully - ✅ PATH messaging is clear and non-contradictory - ✅ Clean uninstall followed by fresh reinstall works perfectly #### Impact - ✅ Users can install from any version of nushell-full archive - ✅ Clear error messages if binaries not found in archive - ✅ Version mismatch plugins skipped without breaking installation - ✅ Non-confusing PATH update messages - ✅ Single source of truth eliminates code duplication - ✅ Installation process is production-ready --- ## [0.108.0] - 2025-10-19 (FINAL UPDATE) ### 🎯 Help System & Build Process Fixes (2025-10-19) #### Help System Improvements - **Added Version Update Module to Help System**: - Version-update module now discoverable via `just help modules` - Added to `just help` main output with key commands - Included in `just help-all` workflow - Full integration into help system navigation #### New Help Commands - **`just commands`**: New recipe showing all commands organized by group (alias for `just --list`) - Shows [version-update] group with all 30+ update recipes - Replaces need to manually run `just --list` #### Build Process Fixes - **Fixed Plugin Archive Creation Bug**: - Phase 3 "No plugins found" warning fixed - Root cause: `each` command returns null, breaking count logic - Solution: Separated plugin listing from copying with proper filtering - Filters out `.d` dependency files with `where type == "file"` - Now correctly reports "Collected 26 plugins" - **Fixed Tar Archive Path Issues**: - Replaced unreliable `cd` + relative paths with `tar -C` + absolute paths - Uses `pwd` with `path join` for robust path construction - Improved error diagnostics showing tar exit codes and stderr - Now properly creates bin archives (plugins-only-0.108.0-darwin-arm64.tar.gz) - **Fixed Size Calculation Error**: - Changed `(ls $archive_path).size` to `(ls $archive_path | get 0.size)` - `ls` returns list of records, not single record - Properly calculates archive file size in MB #### Plugin Dependency Update Optimization - **Fixed Unnecessary Plugin Rebuilds**: - Root cause: `update_all_plugins.nu` always touched all Cargo.toml files - Solution: Only save if content actually changed - Compares original vs updated TOML before writing - Preserves file timestamps for unchanged dependencies - Result: Only plugins with real changes trigger rebuilds (hashes, highlight) #### Files Modified - `justfiles/help.just` - Added version-update module to help system - `scripts/create_full_distribution.nu` - Fixed plugin collection filtering (exclude .d files) - `scripts/create_distribution_packages.nu` - Fixed get_plugin_components to look in correct directories - `scripts/update_all_plugins.nu` - Optimized to avoid unnecessary file touches - `CHANGELOG.md` - Documented all fixes #### Archive Content & Structure Fixes (Critical Fix) - **Fixed nushell-full archive missing plugins**: - Root cause: `get_plugin_components` looked in distribution directory (staging output) - Solution: Look in `nu_plugin_*/target/release/` (actual binaries) - Now includes: nushell binary + 20 plugin binaries + config + docs - Archive now: `nushell-full-0.108.0-darwin-arm64.tar.gz` (complete) - **Fixed plugins-only archive including .d files**: - Root cause: `ls nu_plugin_*/target/release/nu_plugin_*` matched both binaries and `.d` metadata files - Solution: Added two filters: 1. `where ($it.name | str ends-with ".d") == false` - exclude `.d` files 2. `where ($it.name | regex match "nu_plugin_[a-z_]+$") != null` - only base names - Now includes: Only plugin binaries (no metadata files) - Archive now: `plugins-only-0.108.0-darwin-arm64.tar.gz` (clean) - **Fixed archive internal structure**: - Changed: Directory names no longer include platform suffix - Before: Archive contains `nushell-full-0.108.0-darwin-arm64/` directory - After: Archive contains `nushell-full-0.108.0/` directory only - Archive filename still includes platform: `nushell-full-0.108.0-darwin-arm64.tar.gz` - Cleaner extraction: `tar xzf nushell-full-0.108.0-darwin-arm64.tar.gz` → creates `nushell-full-0.108.0/` - **Removed CLAUDE.md from distribution**: - Docs now only include: README.md, LICENSE - CLAUDE.md is project-specific (not needed in distribution) - Reduces archive size and keeps distribution focused #### Impact - ✅ Version-update commands now fully discoverable - ✅ Phase 3 bin archive creation works correctly - ✅ nushell-full archive contains nu + all plugins - ✅ plugins-only archive contains only executable binaries - ✅ Efficient plugin rebuild (no false positives) - ✅ Better error diagnostics in build process --- ## [0.108.0] - 2025-10-18 ### 🎯 Nushell Core Update: 0.107.1 → 0.108.0 #### Major Changes - **Updated Nushell to 0.108.0** with MCP (Model Context Protocol) support - **Fixed critical documentation bugs** in `best_nushell_code.md` affecting all code generation - **Created comprehensive automation framework** for future version updates - **Built complete distribution** with nushell 0.108.0 + all plugins #### Critical Bug Fixes - **Rule 16 (Function Signatures)**: Fixed incorrect syntax `]: type {` → `]: nothing -> type {` - **Rule 17 (String Interpolation)**: Fixed non-working syntax `[$var]` → `($var)` - Both bugs were in documentation and caused all generated code to fail parsing #### New Features - ✅ **MCP Support**: Model Context Protocol for AI agent integration - ✅ **Enhanced SQLite**: Improved database operations - ✅ **System Clipboard**: Native clipboard integration - ✅ **Trash Support**: Safe file deletion to trash #### Breaking Changes - **`into value` → `detect type`**: Command deprecated (still works with warning) - Shows helpful migration message - Recommends `update cells {detect type}` instead - Allows gradual migration - **Stream Error Handling**: Collecting streams with errors now raises errors - Requires explicit error handling with `try`/`catch` #### New Automation Scripts (8 scripts created) 1. **`download_nushell.nu`** (285 lines) - Download from GitHub tags 2. **`analyze_nushell_features.nu`** (350 lines) - Parse and validate features 3. **`audit_crate_dependencies.nu`** (390 lines) - Audit plugin dependencies 4. **`detect_breaking_changes.nu`** (425 lines) - Detect API breaking changes 5. **`update_nushell_version.nu`** (414 lines) - Main update orchestrator 6. **`update_all_plugins.nu`** (NEW) - Bulk plugin updater 7. **`create_full_distribution.nu`** (NEW) - Complete packaging workflow 8. **`complete_update.nu`** (NEW) - All-in-one update script #### Documentation Created - **`updates/108/NUSHELL_0.108_UPDATE_SUMMARY.md`** - Complete update summary - **`updates/108/MIGRATION_0.108.0.md`** - Step-by-step migration guide - **`updates/108/NUSHELL_UPDATE_AUTOMATION.md`** - Automation documentation - **`guides/COMPLETE_VERSION_UPDATE_GUIDE.md`** - Comprehensive update guide #### Build System Improvements - **Build Time**: Optimized to 2m 55s (from 15+ minutes) - **Features**: All desired features validated and included - **Workspace**: Proper `--workspace` flag for system plugins - **Artifacts**: Complete binary collection system #### Validation & Testing - ✅ All syntax patterns tested against actual 0.108.0 binary - ✅ Function signatures validated - ✅ String interpolation validated - ✅ Error handling patterns validated - ✅ Pipeline processing validated - ✅ Breaking changes verified #### Impact - **Developer Experience**: 80% reduction in update time with automation - **Code Quality**: All future code will use correct syntax - **Maintainability**: Semi-automated updates with 3 manual checkpoints - **Documentation**: Comprehensive guides for all future updates #### Files Modified - `best_nushell_code.md` - Fixed Rules 16 & 17, Quick Reference, Summary - `nushell/` - Updated to 0.108.0 - `nu_plugin_*/Cargo.toml` - Dependency versions updated - `scripts/` - 8 new automation scripts - `updates/108/` - Complete documentation - `guides/` - New comprehensive guide #### Migration Notes - Old `into value` usage still works but shows deprecation warning - Update to `detect type` or `update cells {detect type}` to remove warnings - Stream collection operations may need `try`/`catch` for error handling - All plugins compatible after dependency updates --- ## Changes since commit 0a460ce (2024-09-20) ### 🚀 Major Feature: Complete Nushell Distribution System #### Full Distribution Infrastructure - **Complete Nushell binary distribution**: Added capability to build, package, and distribute Nushell itself alongside plugins - **Zero-prerequisite installation**: Users can install complete Nushell environment without having Rust, Cargo, or Nushell pre-installed - **Cross-platform bootstrap installers**: Universal POSIX shell installer (`install.sh`) and Windows PowerShell installer (`install.ps1`) - **Multi-platform packages**: Support for Linux x86_64/ARM64, macOS x86_64/ARM64, Windows x86_64 - **Self-contained distribution packages**: Complete packages including binaries, configuration, documentation, and installers #### New Build System - **`scripts/build_nushell.nu`**: Comprehensive script to build nushell with all workspace plugins - **`scripts/collect_full_binaries.nu`**: Advanced binary collection system for nushell + all plugins - **`scripts/create_distribution_packages.nu`**: Multi-platform package creator with manifest generation - **`scripts/lib/common_lib.nu`**: Shared utility library with logging, validation, and platform detection - **Enhanced justfile**: Added 40+ new recipes in `justfiles/full_distro.just` for complete distribution workflows #### Installation and Configuration System - **`scripts/install_full_nushell.nu`**: Advanced nu-based installer with plugin selection and configuration options - **`scripts/verify_installation.nu`**: Comprehensive installation verification with detailed reporting - **`scripts/templates/default_config.nu`**: Complete 500+ line Nushell configuration with optimizations - **`scripts/templates/default_env.nu`**: Cross-platform environment setup with development tool integration - **`etc/distribution_config.toml`**: Central distribution configuration management #### Bootstrap Installers (Zero Prerequisites) - **`installers/bootstrap/install.sh`**: 900+ line universal POSIX installer for Linux/macOS - Automatic platform detection and binary download - Build from source fallback capability - PATH configuration for all major shells - Plugin registration and configuration creation - **`installers/bootstrap/install.ps1`**: 800+ line Windows PowerShell installer with equivalent features - **Complete documentation**: Installation guides, troubleshooting, and security considerations #### Uninstall System - **`scripts/templates/uninstall.sh`** and **`uninstall.ps1`**: Clean removal scripts for all platforms - **Complete cleanup**: Removes binaries, configurations, PATH entries with optional backup - **Plugin unregistration**: Clean removal from nushell registry #### Key Distribution Workflows ```bash # Build complete distribution just build-full # Build nushell + all plugins # Create packages just pack-full # Current platform just pack-full-all # All platforms just pack-full-checksums # With SHA256 checksums # Installation and verification just verify-full # Verify installation just test-install-full # Test complete workflow just release-full-cross # Full cross-platform release ``` #### Installation Experience - **One-liner installation**: `curl -sSf https://your-url/install.sh | sh` - **Multiple installation modes**: User (~/.local/bin), system (/usr/local/bin), portable - **Automatic plugin registration**: All plugins registered and verified with `nu -c "plugin list"` - **Configuration management**: Sensible defaults with backup and update capabilities ### 🎯 Major Updates #### Documentation and Repository Structure - **Enhanced README.md**: Significantly expanded documentation with 682 new lines covering: - Comprehensive plugin collection overview - Detailed development workflows and automation - Version consistency system documentation - Advanced upstream tracking system guide - Complete command reference and usage examples #### Script and Automation Cleanup - **Removed legacy scripts**: Cleaned up old bash scripts (build-all.sh, collect-install.sh, make_plugin.sh) - **Streamlined automation**: Consolidated script system in favor of unified approach via justfile and nushell scripts ### 🔧 Plugin Updates and Dependency Management #### Nushell Core Updates - **Updated nushell submodule**: Comprehensive update to latest nushell version (0.107.1) - **Synchronized dependencies**: Updated all nu-* dependencies across all plugins for version consistency - **Updated Cargo.lock files**: Refreshed dependency lock files for all plugins #### Plugin-Specific Changes ##### nu_plugin_clipboard - Updated Cargo.toml with new dependency versions - Refreshed Cargo.lock with 253 dependency changes ##### nu_plugin_desktop_notifications - Updated Cargo.toml for nushell 0.107.1 compatibility - Refreshed Cargo.lock with 218 dependency updates ##### nu_plugin_hashes - **Enhanced functionality**: Updated hasher.rs implementation - **Build system improvements**: Modified build.rs configuration - Updated Cargo.toml with 24 configuration changes - Refreshed Cargo.lock with 283 dependency updates ##### nu_plugin_highlight - **Code improvements**: Enhanced highlight.rs and plugin.rs implementations - Updated for new nushell plugin API compatibility - Refreshed Cargo.lock with 476 dependency updates ##### nu_plugin_image - **Major code refactoring**: Comprehensive updates to image processing modules - **Removed deprecated code**: Deleted ansi_to_image.rs (replaced with modular approach) - **Enhanced modules**: - Updated escape_parser.rs, font_family.rs, internal_scale.rs - Improved palette.rs and printer.rs implementations - Enhanced nu_plugin.rs for both ansi_to_image and image_to_ansi - **Logging improvements**: Updated logger.rs and macros.rs - **Main entry point**: Updated main.rs with new plugin architecture - Refreshed Cargo.lock with 494 dependency updates ##### nu_plugin_kcl and nu_plugin_tera - Updated submodule references - Synchronized with latest upstream changes ##### nu_plugin_port_extension and nu_plugin_qr_maker - Updated Cargo.toml for version consistency - Refreshed Cargo.lock files #### API KCL Plugin - Updated Cargo.lock with 266 dependency changes ### 🏗️ Repository Infrastructure Updates #### Git Tracking Cleanup - **Removed nushell directory from tracking**: The nushell submodule directory is now properly ignored - **Updated .gitignore**: Added patterns for nushell directory, nushell-* files, and *.tar.gz archives ### 📊 Statistics Summary - **Total files changed**: 2,082 - **Lines added**: 2,373 - **Lines removed**: 339,936 - **Net change**: -337,563 lines (primarily from removing nushell directory from tracking) ### 🎯 Key Benefits 1. **Version Consistency**: All plugins now use synchronized nushell dependencies 2. **Enhanced Documentation**: Comprehensive guides for development and usage 3. **Improved Plugin APIs**: Updated to latest nushell plugin architecture 4. **Better Development Experience**: Streamlined automation and clearer workflows 5. **Modern Codebase**: Updated to latest Rust and nushell best practices ### 🔄 Migration Notes - Legacy bash scripts have been removed in favor of unified justfile and nushell script approach - All plugins updated to nushell 0.107.1 compatibility - Enhanced upstream tracking system now fully operational - Version consistency checking is now mandatory for all operations - **Important**: The nushell directory is no longer tracked by git - it should be managed as a local dependency This represents a major modernization and cleanup of the nushell plugins repository, with streamlined tracking and improved developer experience.