# WordPress Plugin Version Management - Implementation Summary ## Overview Automatic version number management for WordPress plugins has been implemented. The system now detects versions from plugin files, tracks version history, and automatically bumps versions when exporting ZIP files. ## Files Created/Modified ### New Files 1. **`chat/src/utils/versionManager.js`** - Core version management utilities 2. **`chat/src/utils/versionManager.test.js`** - Unit tests for version manager ### Modified Files 1. **`chat/server.js`** - Added version tracking to session object (lines ~7641-7658) - Added version manager import (line ~20) - Modified `handleExportZip()` to detect and bump versions (lines ~16944-17138) - Modified `handleUploadApp()` to detect version from imported plugins (lines ~16837-16889) - Updated `serializeSession()` to include version fields (lines ~7463-7481) ## Features Implemented ### 1. Automatic Version Detection - Detects version from WordPress plugin headers (`Version: X.X.X`) - Detects version from PHP constants (`define('CONSTANT_NAME', 'X.X.X')`) - Works with imported plugins of any version number ### 2. Version Bumping - Automatically bumps patch version on export (1.0.0 → 1.0.1) - Supports major, minor, patch, and keep bump types - Tracks bump history in session ### 3. Imported Plugin Support - Detects existing version from uploaded ZIP files - Preserves original version number on import - Maintains version continuity for imported plugins ### 4. Version History Tracking ```javascript session.pluginVersionHistory = [ { version: '1.0.1', previousVersion: '1.0.0', bumpType: 'patch', timestamp: '2026-02-11T10:30:00.000Z', fileUpdated: 'my-plugin/my-plugin.php' } ] ``` ### 5. Session Data ```javascript session.pluginVersion = '1.2.3'; // Current version session.lastVersionBumpType = 'patch'; // Last bump type session.pluginVersionHistory = []; // Full history ``` ## How It Works ### Export Flow 1. User clicks "Export ZIP" 2. System finds main plugin PHP file 3. Extracts current version (from session or file) 4. Bumps version number (patch by default) 5. Updates version in plugin file content 6. Adds updated file to ZIP archive 7. Tracks version change in session history ### Import Flow 1. User uploads ZIP file 2. System extracts files to workspace 3. Searches for main plugin file 4. Extracts version from plugin header/constants 5. Stores detected version in session 6. Records import event in version history ## Version Formats Supported ### Plugin Headers ```php /** * Plugin Name: My Plugin * Version: 1.2.3 */ ``` ### PHP Constants ```php define('MY_PLUGIN_VERSION', '1.2.3'); define( "PLUGIN_VERSION", "2.0.0" ); ``` ### PHP Const Assignments ```php const PLUGIN_VERSION = '1.2.3'; ``` ## API Response Changes Sessions now include version fields: ```json { "session": { "id": "...", "pluginVersion": "1.2.4", "pluginVersionHistory": [...], "lastVersionBumpType": "patch" } } ``` ## Future Enhancements (Optional) 1. **UI Controls**: Add version bump selector in export UI (major/minor/patch/custom) 2. **Changelog Generation**: Auto-generate changelog entries with AI 3. **Version Strategy**: Let AI analyze changes and suggest appropriate bump type 4. **Multi-file Updates**: Update version in all plugin files, not just main file 5. **readme.txt Support**: Update version in WordPress.org readme.txt format ## Testing Run unit tests: ```bash cd chat/src/utils node versionManager.test.js ``` All tests pass: - ✓ parseVersion - ✓ formatVersion - ✓ bumpVersion - ✓ extractHeaderVersion - ✓ extractDefineVersion - ✓ extractAllVersions - ✓ updateVersionInContent - ✓ isWordPressPluginFile - ✓ getPluginSlugFromPath ## Backwards Compatibility - Plugins without version detection start at 1.0.0 - Existing sessions without version data will detect from file on first export - Import works with any plugin structure or version format - Graceful fallback if version detection fails