@ngocsangairvds/vsaf 3.1.5 → 3.1.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngocsangairvds/vsaf",
3
- "version": "3.1.5",
3
+ "version": "3.1.7",
4
4
  "description": "VSAF — Agentic AI SDLC Framework. 3 integrated tools: BMAD, GitNexus, Superpowers. 2-layer review.",
5
5
  "keywords": ["claude", "claude-code", "ai", "sdlc", "framework", "bmad", "gitnexus", "superpowers"],
6
6
  "bin": {
package/src/global.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  const path = require('path');
3
3
  const fs = require('fs');
4
- const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME } = require('./utils');
4
+ const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME, isWindows } = require('./utils');
5
5
 
6
6
  const PKG_ROOT = path.join(__dirname, '..');
7
7
  const SKILLS_SRC = path.join(PKG_ROOT, '.claude', 'skills');
@@ -14,6 +14,7 @@ async function installGlobal() {
14
14
 
15
15
  installSkills();
16
16
  installBinary('gitnexus', () => exec('npm install -g gitnexus'));
17
+ setupGitnexusMcp();
17
18
 
18
19
  console.log('\n\x1b[32m\x1b[1m✓ Global infra ready.\x1b[0m\n');
19
20
  }
@@ -60,4 +61,24 @@ function installBinary(name, installFn) {
60
61
  : warn(`${name} install failed — run manually`);
61
62
  }
62
63
 
64
+ function setupGitnexusMcp() {
65
+ step('GitNexus MCP');
66
+ if (!hasCommand('claude')) {
67
+ info('Claude Code CLI not found — skip MCP auto-setup');
68
+ return;
69
+ }
70
+
71
+ if (isWindows) {
72
+ info('Configuring GitNexus MCP for Windows...');
73
+ exec('claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp')
74
+ ? ok('GitNexus MCP configured (Windows)')
75
+ : warn('MCP setup failed — run manually: claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp');
76
+ } else {
77
+ info('Configuring GitNexus MCP...');
78
+ exec('claude mcp add gitnexus -- npx -y gitnexus@latest mcp')
79
+ ? ok('GitNexus MCP configured')
80
+ : warn('MCP setup failed — run manually: claude mcp add gitnexus -- npx -y gitnexus@latest mcp');
81
+ }
82
+ }
83
+
63
84
  module.exports = { installGlobal };
package/src/project.js CHANGED
@@ -141,8 +141,9 @@ function syncLocalBmadSkills() {
141
141
  function initGitNexus() {
142
142
  step('GitNexus');
143
143
  if (!hasCommand('gitnexus')) { warn('gitnexus not found — run: vsaf global'); return; }
144
+ const analyzeCmd = isWindows ? 'gitnexus analyze --worker-timeout 60' : 'gitnexus analyze';
144
145
  info('Indexing repository (gitnexus analyze)...');
145
- exec('gitnexus analyze', { cwd: CWD }) ? ok('Repository indexed') : warn('gitnexus analyze failed — run manually');
146
+ exec(analyzeCmd, { cwd: CWD }) ? ok('Repository indexed') : warn('gitnexus analyze failed — run manually');
146
147
  }
147
148
 
148
149
  module.exports = { installProject };
package/src/workflow.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { ok, info, warn, step, hasCommand, exec } = require('./utils');
3
+ const { ok, info, warn, step, hasCommand, exec, isWindows } = require('./utils');
4
4
 
5
5
  function runIndex() {
6
6
  step('Index');
@@ -10,9 +10,15 @@ function runIndex() {
10
10
  return false;
11
11
  }
12
12
 
13
+ const analyzeCmd = isWindows ? 'gitnexus analyze --worker-timeout 60' : 'gitnexus analyze';
13
14
  info('Running gitnexus analyze...');
14
- const gitnexusOk = exec('gitnexus analyze');
15
- gitnexusOk ? ok('GitNexus index updated') : warn('gitnexus analyze failed — run manually');
15
+ const gitnexusOk = exec(analyzeCmd);
16
+ if (gitnexusOk) {
17
+ ok('GitNexus index updated');
18
+ } else {
19
+ warn('gitnexus analyze failed — run manually');
20
+ printAnalyzeHint();
21
+ }
16
22
 
17
23
  return gitnexusOk;
18
24
  }
@@ -65,4 +71,20 @@ function runServe() {
65
71
  return exec('gitnexus serve');
66
72
  }
67
73
 
74
+ function printAnalyzeHint() {
75
+ if (isWindows) {
76
+ info('Windows troubleshooting:');
77
+ info(' 1. Run with verbose output: gitnexus analyze --verbose');
78
+ info(' 2. LadybugDB may have file-locking issues on Windows.');
79
+ info(' Try closing other terminals/editors that access this repo.');
80
+ info(' 3. Clean and retry:');
81
+ info(' gitnexus clean');
82
+ info(' gitnexus analyze');
83
+ info(' 4. If LadybugDB keeps failing, try running inside WSL:');
84
+ info(' wsl -- bash -c "cd $(wslpath -a .) && gitnexus analyze"');
85
+ } else {
86
+ info('Try running manually: gitnexus analyze --verbose');
87
+ }
88
+ }
89
+
68
90
  module.exports = { runIndex, runReview, runClean, runServe };