🚀 Prepare for dual PyPI/NPM release v4.0

- Fix version consistency (PyPI: 4.0.0, NPM: 4.0.3)
- Update license format to PEP 639 compliance
- Restore NPM package components (bin/ and package.json)
- Fix NPM package name to @superclaude-org/superclaude
- Add comprehensive RELEASE_INSTRUCTIONS.md
- Update .gitignore to include NPM files
- Ready for production release on both PyPI and NPM

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
NomenAK
2025-08-22 20:39:46 +02:00
parent a4d1be0e26
commit 6afa3b0f9c
19 changed files with 630 additions and 38 deletions

36
bin/checkEnv.js Normal file
View File

@@ -0,0 +1,36 @@
const { spawnSync } = require("child_process");
function run(cmd, args = [], opts = {}) {
return spawnSync(cmd, args, {
stdio: opts.stdio || "pipe",
shell: true
});
}
function checkCommand(cmd, args = ["--version"]) {
const result = run(cmd, args);
return result.status === 0;
}
function detectPython() {
const candidates = ["python3", "python", "py"];
for (let c of candidates) {
if (checkCommand(c)) return c;
}
return null;
}
function detectPip() {
const candidates = ["pip3", "pip", "py -m pip"];
for (let c of candidates) {
if (checkCommand(c.split(" ")[0])) return c;
}
return null;
}
function isSuperClaudeInstalled(pipCmd) {
const result = run(pipCmd, ["show", "SuperClaude"]);
return result.status === 0;
}
module.exports = { run, detectPython, detectPip, isSuperClaudeInstalled };

22
bin/cli.js Normal file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env node
const { spawnSync } = require("child_process");
const { detectPython, detectPip } = require("./checkEnv");
let pythonCmd = detectPython();
if (!pythonCmd) {
console.error("❌ Python 3 is required but not found.");
process.exit(1);
}
const args = process.argv.slice(2);
// Special case: update command
if (args[0] === "update") {
require("./update");
process.exit(0);
}
// Forward everything to Python SuperClaude
const result = spawnSync(pythonCmd, ["-m", "SuperClaude", ...args], { stdio: "inherit", shell: true });
process.exit(result.status);

31
bin/install.js Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env node
const { run, detectPython, detectPip, isSuperClaudeInstalled } = require("./checkEnv");
console.log("🔍 Checking environment...");
let pythonCmd = detectPython();
if (!pythonCmd) {
console.error("❌ Python 3 is required but not found.");
process.exit(1);
}
console.log(`✅ Found Python: ${pythonCmd}`);
let pipCmd = detectPip();
if (!pipCmd) {
console.error("❌ pip is required but not found.");
process.exit(1);
}
console.log(`✅ Found Pip: ${pipCmd}`);
// Check installation
if (!isSuperClaudeInstalled(pipCmd)) {
console.log("📦 Installing SuperClaude from PyPI...");
const result = run(pipCmd, ["install", "SuperClaude"], { stdio: "inherit" });
if (result.status !== 0) {
console.error("❌ Installation failed.");
process.exit(1);
}
console.log("✅ SuperClaude installed successfully!");
} else {
console.log("✅ SuperClaude already installed.");
}

17
bin/update.js Normal file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env node
const { run, detectPip } = require("./checkEnv");
let pipCmd = detectPip();
if (!pipCmd) {
console.error("❌ pip not found, cannot update.");
process.exit(1);
}
console.log("🔄 Updating SuperClaude from PyPI...");
const result = run(pipCmd, ["install", "--upgrade", "SuperClaude"], { stdio: "inherit" });
if (result.status !== 0) {
console.error("❌ Update failed.");
process.exit(1);
}
console.log("✅ SuperClaude updated successfully!");