@atlashub/smartstack-cli 3.30.0 → 3.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/installation.html +7 -2
- package/README.md +7 -1
- package/dist/index.js +33 -37
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +547 -97
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/scripts/health-check.sh +2 -1
- package/templates/mcp-scaffolding/controller.cs.hbs +10 -7
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +132 -124
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +4 -4
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +38 -15
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +20 -8
- package/templates/skills/apex/SKILL.md +7 -9
- package/templates/skills/apex/_shared.md +9 -2
- package/templates/skills/apex/references/code-generation.md +412 -0
- package/templates/skills/apex/references/post-checks.md +377 -37
- package/templates/skills/apex/references/smartstack-api.md +229 -5
- package/templates/skills/apex/references/smartstack-frontend.md +368 -11
- package/templates/skills/apex/references/smartstack-layers.md +54 -7
- package/templates/skills/apex/steps/step-00-init.md +1 -2
- package/templates/skills/apex/steps/step-01-analyze.md +45 -2
- package/templates/skills/apex/steps/step-02-plan.md +23 -2
- package/templates/skills/apex/steps/step-03-execute.md +195 -5
- package/templates/skills/apex/steps/step-04-examine.md +18 -5
- package/templates/skills/apex/steps/step-05-deep-review.md +9 -11
- package/templates/skills/apex/steps/step-06-resolve.md +5 -9
- package/templates/skills/apex/steps/step-07-tests.md +66 -1
- package/templates/skills/apex/steps/step-08-run-tests.md +12 -3
- package/templates/skills/application/references/provider-template.md +62 -39
- package/templates/skills/application/templates-backend.md +3 -3
- package/templates/skills/application/templates-frontend.md +12 -12
- package/templates/skills/application/templates-seed.md +14 -4
- package/templates/skills/business-analyse/SKILL.md +10 -7
- package/templates/skills/business-analyse/questionnaire/04-data.md +8 -0
- package/templates/skills/business-analyse/references/agent-module-prompt.md +84 -5
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +83 -19
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +6 -2
- package/templates/skills/business-analyse/references/team-orchestration.md +470 -113
- package/templates/skills/business-analyse/references/validation-checklist.md +5 -4
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +44 -0
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +72 -1
- package/templates/skills/business-analyse/steps/step-03c-compile.md +93 -7
- package/templates/skills/business-analyse/steps/step-03d-validate.md +34 -2
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +40 -0
- package/templates/skills/controller/references/controller-code-templates.md +2 -2
- package/templates/skills/controller/templates.md +12 -12
- package/templates/skills/feature-full/steps/step-01-implementation.md +4 -4
- package/templates/skills/ralph-loop/references/category-rules.md +44 -2
- package/templates/skills/ralph-loop/references/compact-loop.md +37 -0
- package/templates/skills/ralph-loop/references/core-seed-data.md +51 -20
- package/templates/skills/review-code/references/owasp-api-top10.md +1 -1
|
@@ -683,8 +683,13 @@ git config --global credential.helper manager</code></pre>
|
|
|
683
683
|
<p data-lang="en">Install Claude Code CLI and the VS Code extension:</p>
|
|
684
684
|
<div class="code-block">
|
|
685
685
|
<button class="copy-btn">Copy</button>
|
|
686
|
-
<pre><code># 1. Installer Claude Code CLI
|
|
687
|
-
|
|
686
|
+
<pre><code># 1. Installer Claude Code CLI (native install - recommandé)
|
|
687
|
+
# Windows PowerShell:
|
|
688
|
+
irm https://claude.ai/install.ps1 | iex
|
|
689
|
+
# macOS / Linux / WSL:
|
|
690
|
+
# curl -fsSL https://claude.ai/install.sh | bash
|
|
691
|
+
# WinGet:
|
|
692
|
+
# winget install Anthropic.ClaudeCode
|
|
688
693
|
|
|
689
694
|
# 2. Installer l'extension VS Code
|
|
690
695
|
code --install-extension anthropic.claude-code</code></pre>
|
package/README.md
CHANGED
|
@@ -35,7 +35,13 @@ Before installing SmartStack CLI, verify that the following tools are installed:
|
|
|
35
35
|
node --version && npm --version && git --version && dotnet --version && claude --version
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
> **Node.js** : [nodejs.org](https://nodejs.org/) | **.NET SDK** : [dotnet.microsoft.com](https://dotnet.microsoft.com/download) | **Claude Code** :
|
|
38
|
+
> **Node.js** : [nodejs.org](https://nodejs.org/) | **.NET SDK** : [dotnet.microsoft.com](https://dotnet.microsoft.com/download) | **Claude Code** : [code.claude.com/docs/en/setup](https://code.claude.com/docs/en/setup)
|
|
39
|
+
>
|
|
40
|
+
> **Install Claude Code (native - recommended):**
|
|
41
|
+
> - **Windows PowerShell**: `irm https://claude.ai/install.ps1 | iex`
|
|
42
|
+
> - **Windows (WinGet)**: `winget install Anthropic.ClaudeCode`
|
|
43
|
+
> - **WSL (Ubuntu on Windows)**: `curl -fsSL https://claude.ai/install.sh | bash`
|
|
44
|
+
> - **macOS / Linux**: `curl -fsSL https://claude.ai/install.sh | bash`
|
|
39
45
|
|
|
40
46
|
---
|
|
41
47
|
|
package/dist/index.js
CHANGED
|
@@ -116531,11 +116531,7 @@ function execCommand(command, cwd, dryRun = false) {
|
|
|
116531
116531
|
return;
|
|
116532
116532
|
}
|
|
116533
116533
|
try {
|
|
116534
|
-
(0, import_child_process5.execSync)(command, {
|
|
116535
|
-
cwd,
|
|
116536
|
-
stdio: "inherit",
|
|
116537
|
-
shell: true
|
|
116538
|
-
});
|
|
116534
|
+
(0, import_child_process5.execSync)(command, { cwd, stdio: "inherit" });
|
|
116539
116535
|
} catch (error) {
|
|
116540
116536
|
throw new Error(`Command failed: ${command}`);
|
|
116541
116537
|
}
|
|
@@ -116764,7 +116760,6 @@ EndGlobal
|
|
|
116764
116760
|
);
|
|
116765
116761
|
}
|
|
116766
116762
|
logger.info("Installing NuGet packages...");
|
|
116767
|
-
const targetFramework = "net10.0";
|
|
116768
116763
|
const dbPackage = "Microsoft.EntityFrameworkCore.SqlServer";
|
|
116769
116764
|
const nugetPackages = [
|
|
116770
116765
|
{
|
|
@@ -117163,7 +117158,6 @@ async function createFrontendStructure(config, state, dryRun) {
|
|
|
117163
117158
|
await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "types"));
|
|
117164
117159
|
await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "src", "i18n"));
|
|
117165
117160
|
await import_fs_extra6.default.ensureDir((0, import_path7.join)(webDir, "public"));
|
|
117166
|
-
const smartstackNpmTag = config.preview ? "next" : "latest";
|
|
117167
117161
|
const packageJson = {
|
|
117168
117162
|
name: `${projectName.toLowerCase()}-web`,
|
|
117169
117163
|
private: true,
|
|
@@ -117595,7 +117589,7 @@ async function initializeGit(config, dryRun) {
|
|
|
117595
117589
|
execCommand("git add .", projectDir, dryRun);
|
|
117596
117590
|
if (!dryRun) {
|
|
117597
117591
|
try {
|
|
117598
|
-
(0, import_child_process5.execSync)("git diff --cached --quiet", { cwd: projectDir
|
|
117592
|
+
(0, import_child_process5.execSync)("git diff --cached --quiet", { cwd: projectDir });
|
|
117599
117593
|
logger.info(source_default.gray("No new changes to commit (already committed)"));
|
|
117600
117594
|
} catch {
|
|
117601
117595
|
execCommand('git commit -m "chore: initial SmartStack project setup"', projectDir, dryRun);
|
|
@@ -124963,11 +124957,7 @@ function execCommand2(command, cwd, dryRun = false) {
|
|
|
124963
124957
|
return;
|
|
124964
124958
|
}
|
|
124965
124959
|
try {
|
|
124966
|
-
(0, import_child_process6.execSync)(command, {
|
|
124967
|
-
cwd,
|
|
124968
|
-
stdio: "inherit",
|
|
124969
|
-
shell: true
|
|
124970
|
-
});
|
|
124960
|
+
(0, import_child_process6.execSync)(command, { cwd, stdio: "inherit" });
|
|
124971
124961
|
} catch (error) {
|
|
124972
124962
|
throw new Error(`Command failed: ${command}`);
|
|
124973
124963
|
}
|
|
@@ -124978,11 +124968,7 @@ function tryExecCommand(command, cwd, dryRun = false) {
|
|
|
124978
124968
|
return true;
|
|
124979
124969
|
}
|
|
124980
124970
|
try {
|
|
124981
|
-
(0, import_child_process6.execSync)(command, {
|
|
124982
|
-
cwd,
|
|
124983
|
-
stdio: "inherit",
|
|
124984
|
-
shell: true
|
|
124985
|
-
});
|
|
124971
|
+
(0, import_child_process6.execSync)(command, { cwd, stdio: "inherit" });
|
|
124986
124972
|
return true;
|
|
124987
124973
|
} catch (error) {
|
|
124988
124974
|
return false;
|
|
@@ -125243,15 +125229,15 @@ var upgradeCommand = new Command("upgrade").description("Upgrade SmartStack pack
|
|
|
125243
125229
|
logger.info(` ${source_default.cyan(project.relPath)}:`);
|
|
125244
125230
|
for (const pkg2 of otherPackages) {
|
|
125245
125231
|
try {
|
|
125246
|
-
const output = dryRun ? `[DRY RUN] dotnet add "${project.csprojPath}" package ${pkg2.name}` : (0, import_child_process6.execSync)(
|
|
125247
|
-
`dotnet add "${project.csprojPath}" package ${pkg2.name} --no-restore`,
|
|
125248
|
-
{ shell: true, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }
|
|
125249
|
-
);
|
|
125250
125232
|
if (dryRun) {
|
|
125251
125233
|
logger.info(` [DRY RUN] ${pkg2.name} ${source_default.yellow(pkg2.currentVersion)} \u2192 latest`);
|
|
125252
125234
|
result.otherPkgUpdated++;
|
|
125253
125235
|
continue;
|
|
125254
125236
|
}
|
|
125237
|
+
(0, import_child_process6.execSync)(
|
|
125238
|
+
`dotnet add "${project.csprojPath}" package ${pkg2.name} --no-restore`,
|
|
125239
|
+
{ encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }
|
|
125240
|
+
);
|
|
125255
125241
|
const newContent = await import_fs_extra7.default.readFile(project.csprojPath, "utf-8");
|
|
125256
125242
|
const newVersion = readPackageVersion(newContent, pkg2.name);
|
|
125257
125243
|
if (newVersion && newVersion !== pkg2.currentVersion) {
|
|
@@ -125644,7 +125630,7 @@ function createLicenseCommand() {
|
|
|
125644
125630
|
logger.info("Validating license key...\n");
|
|
125645
125631
|
const result = validateLicenseKey(key);
|
|
125646
125632
|
if (!result.valid) {
|
|
125647
|
-
logger.error(
|
|
125633
|
+
logger.error(`License Activation Failed: ${result.error || "Invalid license"}`);
|
|
125648
125634
|
process.exit(1);
|
|
125649
125635
|
}
|
|
125650
125636
|
await saveLicenseKey(key);
|
|
@@ -125654,7 +125640,7 @@ function createLicenseCommand() {
|
|
|
125654
125640
|
license.command("status").description("Show current license status").action(async () => {
|
|
125655
125641
|
const result = await validateCurrentLicense();
|
|
125656
125642
|
if (!result.valid) {
|
|
125657
|
-
logger.error(
|
|
125643
|
+
logger.error(`No Valid License: ${result.error || "License not found"}`);
|
|
125658
125644
|
logger.info("\nTo activate a license:");
|
|
125659
125645
|
logger.info(" smartstack license activate <your-license-key>");
|
|
125660
125646
|
logger.info("\nTo purchase a license:");
|
|
@@ -125663,14 +125649,14 @@ function createLicenseCommand() {
|
|
|
125663
125649
|
}
|
|
125664
125650
|
console.log(formatLicenseInfo(result.license));
|
|
125665
125651
|
if (result.license.daysRemaining <= 30) {
|
|
125666
|
-
logger.
|
|
125652
|
+
logger.warning(`License expires in ${result.license.daysRemaining} days`);
|
|
125667
125653
|
logger.info("Renew at: https://atlashub.io/products/smartstack-cli");
|
|
125668
125654
|
}
|
|
125669
125655
|
});
|
|
125670
125656
|
license.command("deactivate").description("Remove the current license").action(async () => {
|
|
125671
125657
|
const key = await loadLicenseKey();
|
|
125672
125658
|
if (!key) {
|
|
125673
|
-
logger.
|
|
125659
|
+
logger.warning("No license is currently active");
|
|
125674
125660
|
return;
|
|
125675
125661
|
}
|
|
125676
125662
|
await removeLicenseKey();
|
|
@@ -125680,7 +125666,7 @@ function createLicenseCommand() {
|
|
|
125680
125666
|
logger.info("Verifying license key...\n");
|
|
125681
125667
|
const result = validateLicenseKey(key);
|
|
125682
125668
|
if (!result.valid) {
|
|
125683
|
-
logger.error(
|
|
125669
|
+
logger.error(`License Invalid: ${result.error || "Unknown error"}`);
|
|
125684
125670
|
process.exit(1);
|
|
125685
125671
|
}
|
|
125686
125672
|
logger.success("License is valid!");
|
|
@@ -125704,8 +125690,16 @@ var checkMcpCommand = new Command("check-mcp").description("Check MCP servers st
|
|
|
125704
125690
|
}
|
|
125705
125691
|
logger.error("Claude Code CLI is not installed!");
|
|
125706
125692
|
console.log();
|
|
125707
|
-
logger.info("Install it with:");
|
|
125708
|
-
|
|
125693
|
+
logger.info("Install it with (native install recommended):");
|
|
125694
|
+
if (process.platform === "win32") {
|
|
125695
|
+
console.log(source_default.cyan(" Windows PowerShell: irm https://claude.ai/install.ps1 | iex"));
|
|
125696
|
+
console.log(source_default.cyan(" WinGet: winget install Anthropic.ClaudeCode"));
|
|
125697
|
+
console.log(source_default.cyan(" WSL (Ubuntu): curl -fsSL https://claude.ai/install.sh | bash"));
|
|
125698
|
+
} else {
|
|
125699
|
+
console.log(source_default.cyan(" curl -fsSL https://claude.ai/install.sh | bash"));
|
|
125700
|
+
}
|
|
125701
|
+
console.log();
|
|
125702
|
+
console.log(source_default.dim(" More info: https://code.claude.com/docs/en/setup"));
|
|
125709
125703
|
process.exit(1);
|
|
125710
125704
|
}
|
|
125711
125705
|
const claudeVersion = getClaudeCodeVersion();
|
|
@@ -125858,7 +125852,13 @@ ralphCommand.command("start").description("Verify prerequisites and prepare Ralp
|
|
|
125858
125852
|
logger.success("Claude Code CLI is installed");
|
|
125859
125853
|
} else {
|
|
125860
125854
|
logger.error("Claude Code CLI is NOT installed");
|
|
125861
|
-
|
|
125855
|
+
if (process.platform === "win32") {
|
|
125856
|
+
console.log(` Windows: ${source_default.cyan("irm https://claude.ai/install.ps1 | iex")} (PowerShell)`);
|
|
125857
|
+
console.log(` WSL: ${source_default.cyan("curl -fsSL https://claude.ai/install.sh | bash")}`);
|
|
125858
|
+
} else {
|
|
125859
|
+
console.log(` Install: ${source_default.cyan("curl -fsSL https://claude.ai/install.sh | bash")}`);
|
|
125860
|
+
}
|
|
125861
|
+
console.log(` More info: ${source_default.cyan("https://code.claude.com/docs/en/setup")}`);
|
|
125862
125862
|
allChecksPass = false;
|
|
125863
125863
|
}
|
|
125864
125864
|
logger.step(2, 5, "Checking MCP servers...");
|
|
@@ -126188,7 +126188,7 @@ var doctorCommand = new Command("doctor").description("Run diagnostics and check
|
|
|
126188
126188
|
name: "Claude Code",
|
|
126189
126189
|
status: claudeInstalled ? "ok" : "error",
|
|
126190
126190
|
message: claudeVersion || "Not installed",
|
|
126191
|
-
fix: !claudeInstalled ? "
|
|
126191
|
+
fix: !claudeInstalled ? process.platform === "win32" ? "Windows: irm https://claude.ai/install.ps1 | iex | WSL: curl -fsSL https://claude.ai/install.sh | bash" : "curl -fsSL https://claude.ai/install.sh | bash" : void 0
|
|
126192
126192
|
});
|
|
126193
126193
|
if (claudeInstalled) {
|
|
126194
126194
|
const mcpResult = checkRequiredMcpServers();
|
|
@@ -127844,18 +127844,14 @@ export PATH="$PATH:$HOME/.dotnet:$HOME/.dotnet/tools"' >> ~/.bashrc`,
|
|
|
127844
127844
|
async function installClaudeInWsl() {
|
|
127845
127845
|
const status = checkClaudeInWsl();
|
|
127846
127846
|
if (status.installed) return { success: true, version: status.version, skipped: true };
|
|
127847
|
-
const nodeCheck = checkNodeInWsl();
|
|
127848
|
-
if (!nodeCheck.installed) {
|
|
127849
|
-
return { success: false, error: "Node.js is not installed (required for Claude Code)" };
|
|
127850
|
-
}
|
|
127851
127847
|
const spinner = logger.spinner("Installing Claude Code...");
|
|
127852
127848
|
const result = wslInstall(
|
|
127853
|
-
"
|
|
127849
|
+
"curl -fsSL https://claude.ai/install.sh | bash",
|
|
127854
127850
|
18e4
|
|
127855
127851
|
);
|
|
127856
127852
|
if (result === null) {
|
|
127857
127853
|
spinner.fail("Failed to install Claude Code");
|
|
127858
|
-
return { success: false, error: "
|
|
127854
|
+
return { success: false, error: "Claude Code native install failed (curl -fsSL https://claude.ai/install.sh | bash)" };
|
|
127859
127855
|
}
|
|
127860
127856
|
const check = checkClaudeInWsl();
|
|
127861
127857
|
if (check.installed) {
|