
publish
by AEtherlight-ai
ÆtherLight Lumina - Voice-to-intelligence platform with local-first AI
SKILL.md
name: publish description: Publish ÆtherLight releases to npm and GitHub. Use when the user wants to publish, release, or deploy a new version. Automatically handles version bumping, compilation, verification, and publishing.
ÆtherLight Publishing Skill
What This Skill Does
Automates the complete release process for ÆtherLight:
- Bumps version across all packages
- Compiles TypeScript and verifies build
- Packages VS Code extension (.vsix)
- Builds desktop app installers (.exe and .msi)
- Publishes to npm registry
- Creates git tag and GitHub release with all artifacts
When Claude Should Use This
Use this skill when the user:
- Says "publish this" or "let's publish" or "release a new version"
- Wants to deploy changes to npm
- Mentions creating a release
- Asks to bump the version and publish
How to Use
Pre-Release Workflow Check
-
Verify proper Git workflow:
- Should be on
masterbranch after PR merge - If not on master, guide user through proper workflow:
1. Create PR from feature branch 2. Get review and merge to master 3. Checkout master and pull latest 4. Then run publish script
- Should be on
-
Ask for version type (if not specified):
Which version type? - patch: Bug fixes (0.13.20 → 0.13.21) - minor: New features (0.13.20 → 0.14.0) - major: Breaking changes (0.13.20 → 1.0.0) -
Run the automated publishing script:
node scripts/publish-release.js [patch|minor|major] -
Monitor output - The script will (IN THIS ORDER):
- ✓ Verify npm authentication (must be
aelor) - ✓ Verify Git workflow (branch, clean, up-to-date)
- ✓ Check GitHub CLI authentication (required)
- ✓ Bump version across all packages
- ✓ Compile TypeScript
- ✓ Verify compiled artifacts exist
- ✓ Package .vsix extension
- ✓ Build desktop app installers (if configured)
- ✓ Commit version bump
- ✓ Create git tag
- ✓ Push to GitHub (FIRST)
- ✓ Create GitHub release with .vsix and installers
- ✓ Verify GitHub release has all artifacts
- ✓ Publish to npm registry (LAST)
- ✓ Verify all packages published correctly
- ✓ Verify npm authentication (must be
-
Report completion:
✅ Version X.X.X published successfully! - npm: https://www.npmjs.com/package/aetherlight - GitHub: https://github.com/AEtherlight-ai/lumina/releases/tag/vX.X.X
Error Handling
If the script fails, help the user:
Not logged in to npm:
npm login
# Username: aelor
GitHub CLI not installed:
# Windows (winget)
winget install --id GitHub.cli
# Mac (homebrew)
brew install gh
Not logged in to GitHub CLI:
gh auth login
# Follow prompts to authenticate
Uncommitted git changes:
git status
# User needs to commit or stash changes
Compilation errors: Show the TypeScript errors from the output
VSIX not created: Check the package.json scripts
Desktop app build fails:
cd products/lumina-desktop
npm run tauri build
# Check for Rust compilation errors or missing dependencies
Installers not found after build:
# Desktop installers should be at:
find ./products/lumina-desktop/src-tauri/target/release/bundle -name "*.exe" -o -name "*.msi"
# Copy to vscode-lumina directory:
cp ./products/lumina-desktop/src-tauri/target/release/bundle/msi/*.msi ./vscode-lumina/
cp ./products/lumina-desktop/src-tauri/target/release/bundle/nsis/*.exe ./vscode-lumina/
GitHub release creation fails: This is CRITICAL - users install from GitHub releases. The script will:
- Exit immediately if gh CLI not installed
- Exit if not authenticated to GitHub
- Verify the release was created with .vsix and installers
- Fail loudly if any step doesn't work
Desktop Installer Workflow (CRITICAL)
Why Desktop Installers Are Required
CRITICAL: Desktop app installers (.exe and .msi for Windows) MUST be included in EVERY GitHub release.
Why:
- Users install ÆtherLight via
npm install -g aetherlight - The CLI installer downloads the .vsix from GitHub releases
- Desktop app is ALSO downloaded from the same GitHub release
- Without installers, users get VS Code extension but NO desktop app
- Desktop app is required for full ÆtherLight functionality
File Locations and Git Workflow
Desktop installers are:
- ✅ Built locally (Tauri build process)
- ✅ Stored on disk in
vscode-lumina/directory - ✅ Attached to GitHub releases (by publish script)
- ❌ NOT tracked in git (binary files excluded via .gitignore)
Current files:
vscode-lumina/Lumina_0.1.0_x64-setup.exe # 4.0MB - Windows installer (NSIS)
vscode-lumina/Lumina_0.1.0_x64_en-US.msi # 5.8MB - Windows installer (MSI)
gitignore rules (added in v0.16.7):
# Desktop installers (binary files should not be in git)
*.exe
*.msi
*.dmg
*.deb
*.AppImage
How Publish Script Handles Installers
Automated process (scripts/publish-release.js lines 355-428):
-
Find installers (lines 355-375):
const exeFile = path.join(vscodeLuminaPath, 'Lumina_0.1.0_x64-setup.exe'); const msiFile = path.join(vscodeLuminaPath, 'Lumina_0.1.0_x64_en-US.msi'); if (fs.existsSync(exeFile)) { desktopFiles.push(exeFile); } if (fs.existsSync(msiFile)) { desktopFiles.push(msiFile); } -
Warn if missing (lines 370-375):
⚠️ Warning: No desktop installers found Desktop app will not be available for this release -
Attach to GitHub release (lines 377-393):
// Create release with .vsix and desktop installers const allFiles = [`"vscode-lumina/aetherlight-${newVersion}.vsix"`, ...desktopFiles].join(' '); exec(`gh release create v${newVersion} --notes-file .release-notes.tmp ${allFiles}`); -
Verify upload (lines 395-428):
// Check for .vsix file (CRITICAL) const vsixCheck = execSilent(`gh release view v${newVersion} --json assets -q '.assets[] | select(.name | endswith(".vsix"))'`); // Check for desktop installers (WARNING if missing) const hasExe = allAssets.includes('Lumina_0.1.0_x64-setup.exe'); const hasMsi = allAssets.includes('Lumina_0.1.0_x64_en-US.msi');
Pre-Publish Checklist for Installers
BEFORE running publish script, verify installers exist:
# Check if installers are present on disk
ls -lh vscode-lumina/Lumina*.exe vscode-lumina/Lumina*.msi
# Expected output:
# -rwxr-xr-x 1 user 4.0M Oct 30 vscode-lumina/Lumina_0.1.0_x64-setup.exe
# -rw-r--r-- 1 user 5.8M Oct 30 vscode-lumina/Lumina_0.1.0_x64_en-US.msi
If files are missing:
- Desktop app was never built, OR
- Files were deleted, OR
- Wrong directory
Regenerating Desktop Installers
If installers are missing and need to be rebuilt:
# Navigate to desktop app directory
cd products/lumina-desktop
# Install dependencies (if needed)
npm install
# Build desktop app for Windows
npm run tauri build
# Installers will be generated at:
# - src-tauri/target/release/bundle/nsis/*.exe
# - src-tauri/target/release/bundle/msi/*.msi
# Copy to vscode-lumina directory for publish script
cp src-tauri/target/release/bundle/nsis/*.exe ../../vscode-lumina/
cp src-tauri/target/release/bundle/msi/*.msi ../../vscode-lumina/
# Verify files are in place
ls -lh ../../vscode-lumina/Lumina*.exe ../../vscode-lumina/Lumina*.msi
Desktop App Version Independence
Important: Desktop app version (0.1.0) is INDEPENDENT of VS Code extension version (0.16.7).
Why:
- Desktop app changes less frequently than VS Code extension
- Extension gets frequent patches (bug fixes, UI improvements)
- Desktop app only updates when core functionality changes
- Both are versioned independently but released together
Current versions:
- VS Code Extension: v0.16.7 (frequent updates)
- Desktop App: v0.1.0 (stable, infrequent updates)
What Publish Script Does
Publish script behavior:
- ✅ Looks for installers in
vscode-lumina/directory - ✅ Attaches any found installers to GitHub release
- ⚠️ Warns if no installers found (but doesn't fail)
- ✅ Verifies installers uploaded successfully
- ✅ Continues with publish even if no installers (extension-only release)
This means:
- If installers exist → Full release (extension + desktop app)
- If no installers → Extension-only release (with warning)
- User can choose to ship extension-only if desktop app unchanged
Historical Context
v0.16.7 git hygiene fix:
- Before: Installers committed to git (9.8MB binary files in repository)
- After: Installers excluded from git (.gitignore), kept on disk only
- Benefit: Clean git history, binaries only in releases
- No Impact: Publish script still finds and attaches installers
Pattern: Binary artifacts belong in releases, NOT in git.
Important Rules
ALWAYS use the automated script (scripts/publish-release.js)
NEVER manually run individual publish steps - this caused the v0.13.20 bug where users saw wrong versions after updating.
Why the script is critical:
- Prevents version mismatches
- Ensures everything is compiled before publishing
- No timing issues or partial deploys
- Verifies all artifacts before publishing anything
- Includes desktop app installers in GitHub release
- .npmignore prevents bloated npm packages (was 246MB, now 251KB)
Related Files
scripts/publish-release.js- The automation scriptscripts/bump-version.js- Version synchronization.claude/commands/publish.md- User-invoked commandPUBLISHING.md- Publishing documentationUPDATE_FIX_SUMMARY.md- Why we use this approachvscode-lumina/.npmignore- Excludes binaries from npm packageproducts/lumina-desktop/- Desktop app source (Tauri + Rust)
Known Issues Fixed
v0.13.28: Manual publish caused version mismatch
Issue: npm showed 0.13.26, GitHub release had v0.13.28, auto-update didn't work Cause: Automated script was bypassed - manual version bump, manual git tag, manual GitHub release Result: TypeScript compilation skipped, npm publish skipped, all verification skipped Fix: v0.13.29 published using complete automated process with desktop installers
v0.13.29: npm package bloat
Issue: npm publish failed with "413 Payload Too Large" (246MB) Cause: All old .vsix files (0.13.11-0.13.28) included in npm package Fix: Created .npmignore to exclude *.vsix, *.exe, *.msi files Result: Package size reduced to 251KB (1000x smaller)
v0.13.29: Sub-packages not published (CRITICAL)
Issue: Users couldn't install or update - "No matching version found for aetherlight-analyzer@^0.13.29" Cause: Publish script only published main package, not sub-packages (analyzer, SDK, node bindings) Impact:
- Main package published: aetherlight@0.13.29 ✅
- Sub-packages still at 0.13.28 ❌
- npm install failed for ALL users
- Update notifications worked but installs failed silently Fix: Updated publish script to publish ALL 4 packages in dependency order Prevention: Script now:
- Publishes sub-packages FIRST (analyzer, SDK, node)
- Publishes main package LAST (depends on sub-packages)
- Verifies each package at correct version
- Fails loudly if any package verification fails
Files:
scripts/publish-release.js:270-322
v0.16.15: Automation gaps - manual bypass required (IN PROGRESS)
Issue: Automated script failed, requiring manual bypass to publish Cause: Three automation gaps exposed by package architecture changes (scoped → unscoped) Impact: Manual bypass required (2 hours), violates Pattern-PUBLISH-002
Three Automation Failures:
- Missing @types/mocha - TypeScript compilation failed without type definitions
- Old scoped imports - Import paths still used
@aetherlight/*after package rename - Poor version handling - Script didn't handle already-bumped version gracefully
Manual Bypass Process (Pattern-PUBLISH-002 compliant):
- Claude asked user for approval BEFORE bypassing
- Explained risks and missing steps
- User approved: "continue with 16.15"
- Manual publish completed successfully
Fix In Progress: Sprint Task POST-005
- Integrate pre-publish-check.js validation (7 automated checks)
- Add devDependencies completeness validation
- Add import path consistency checks
- Better version state handling (detect, offer reset/continue)
- Enhanced error messages with actionable suggestions
- Goal: v0.16.16+ publishes with ZERO manual intervention
Files Created:
scripts/pre-publish-check.js- 7 validation checks (Pattern-PUBLISH-004)- Sprint Task:
internal/sprints/ACTIVE_SPRINT.toml- POST-005 - Known Issue entry:
.claude/CLAUDE.md- Lines 1649-1752
Status: TASK CREATED - Fix scheduled in current sprint
Estimated completion: 3-4 hours implementation
See: .claude/CLAUDE.md Known Issues section for full details
Key lesson: ALWAYS use the automated script. Manual steps WILL cause bugs.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon