@ngocsangairvds/vsaf 3.2.4 → 3.2.6

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/bin/vsaf.js CHANGED
@@ -113,7 +113,8 @@ function printInstallHint() {
113
113
  console.log(` \x1b[1mOption 2: Setup script\x1b[0m`);
114
114
  console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
115
115
 
116
- console.log(` After installation, you can use:\n`);
116
+ console.log(` After installation, scaffold each project:\n`);
117
+ console.log(` \x1b[36mvsaf init\x1b[0m # run inside each repo`);
117
118
  console.log(` \x1b[36mvsaf status\x1b[0m # check installation`);
118
119
  console.log(` \x1b[36mvsaf index\x1b[0m # index codebase (GitNexus)`);
119
120
  console.log(` \x1b[36mvsaf review\x1b[0m # run 2-layer review\n`);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngocsangairvds/vsaf",
3
- "version": "3.2.4",
4
- "description": "add vds script env",
3
+ "version": "3.2.6",
4
+ "description": "improve confluence format",
5
5
  "keywords": ["claude", "claude-code", "ai", "sdlc", "framework", "bmad", "gitnexus", "superpowers"],
6
6
  "bin": {
7
7
  "vsaf": "./bin/vsaf.js"
package/src/global.js CHANGED
@@ -86,7 +86,6 @@ async function setupVdsScriptsMcp() {
86
86
  const destDir = path.join(CLAUDE_HOME, 'vds-scripts');
87
87
  const mcpDir = path.join(destDir, 'mcp_server');
88
88
 
89
- info(`Source: ${srcDir}`);
90
89
  if (!fs.existsSync(srcDir)) {
91
90
  warn('Không tìm thấy source vds-scripts trong package — bỏ qua cài đặt.');
92
91
  return;
@@ -132,7 +131,7 @@ async function setupVdsScriptsMcp() {
132
131
  ok('Đã tìm thấy file cấu hình ~/.vds/.env');
133
132
  }
134
133
 
135
- const cmd = `claude mcp add vds-orchestrator -- uv run --project "${mcpDir}" vds-mcp-server`;
134
+ const cmd = `claude mcp add vds-orchestrator -e VDS_SCRIPTS_ROOT="${destDir}" -- uv run --project "${mcpDir}" vds-mcp-server`;
136
135
 
137
136
  if (exec(cmd)) {
138
137
  ok('VDS Scripts MCP đã được cấu hình thành công');
package/src/project.js CHANGED
@@ -2,7 +2,6 @@
2
2
  const path = require('path');
3
3
  const fs = require('fs');
4
4
  const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, cleanStaleWal } = require('./utils');
5
- const { setupVdsScriptsMcp } = require('./global');
6
5
 
7
6
  const PKG_ROOT = path.join(__dirname, '..');
8
7
  const TEMPLATES = path.join(PKG_ROOT, 'assets', 'templates');
@@ -17,9 +16,8 @@ async function installProject() {
17
16
 
18
17
  scaffoldFiles();
19
18
  scaffoldBmadWorkspace();
20
- syncLocalSkills();
19
+ syncLocalBmadSkills();
21
20
  initGitNexus();
22
- await setupVdsScriptsMcp();
23
21
 
24
22
  console.log('\n\x1b[32m\x1b[1m✓ Project ready.\x1b[0m');
25
23
  console.log('\n Next steps:');
@@ -129,8 +127,8 @@ function syncLocalBmadSkills() {
129
127
  }
130
128
 
131
129
  const entries = fs
132
- .readdirSync(SKILLS_SRC, { withFileTypes: true })
133
- .filter((entry) => entry.name.startsWith('bmad-') || entry.name.startsWith('vsaf-') || entry.name.startsWith('vds-'));
130
+ .readdirSync(SKILLS_SRC, { withFileTypes: true })
131
+ .filter((entry) => entry.name.startsWith('bmad-') || entry.name.startsWith('vds-'));
134
132
 
135
133
  if (entries.length === 0) {
136
134
  warn('No BMAD skills found in package — skipping');
@@ -168,4 +166,4 @@ function initGitNexus() {
168
166
  exec(analyzeCmd, { cwd: CWD }) ? ok('Repository indexed') : warn('gitnexus analyze failed — run manually');
169
167
  }
170
168
 
171
- module.exports = { installProject };
169
+ module.exports = { installProject };
package/src/status.js CHANGED
@@ -22,8 +22,8 @@ async function showStatus() {
22
22
  checkPath('AGENTS.md', 'Workflow rules (Codex/Gemini)');
23
23
  checkPath('.vsaf/_bmad', 'BMAD workspace');
24
24
  checkPath('.vsaf/docs', 'Project artifact folder');
25
- checkProjectSkillDir('.claude/skills', 'Project BMAD skills (.claude)');
26
- checkProjectSkillDir('.codex/skills', 'Project BMAD skills (.codex)');
25
+ checkProjectSkillDir('.claude/skills', 'Project skills (.claude)');
26
+ checkProjectSkillDir('.codex/skills', 'Project skills (.codex)');
27
27
  checkPath('.gitnexus', 'GitNexus index');
28
28
  console.log('');
29
29
  }
@@ -65,9 +65,12 @@ function checkProjectSkillDir(rel, label) {
65
65
  return;
66
66
  }
67
67
 
68
- const count = fs.readdirSync(dir).filter((name) => name.startsWith('bmad-')).length;
68
+ const entries = fs.readdirSync(dir);
69
+ const count = entries.length;
70
+ const bmad = entries.filter((n) => n.startsWith('bmad-')).length;
71
+ const vds = entries.filter((n) => n.startsWith('vds-')).length;
69
72
  if (count > 0) {
70
- console.log(` \x1b[32m✓\x1b[0m ${label} (${count})`);
73
+ console.log(` \x1b[32m✓\x1b[0m ${label} (${count}: ${bmad} bmad, ${vds} vds)`);
71
74
  } else {
72
75
  console.log(` \x1b[31m✗\x1b[0m ${label} (0)`);
73
76
  }
@@ -5,6 +5,7 @@ Context7: /websites/typer_tiangolo
5
5
  Key Features: typer.Typer(), @app.command(), Annotated options
6
6
  """
7
7
 
8
+ import os
8
9
  from pathlib import Path
9
10
 
10
11
  import typer
@@ -19,8 +20,8 @@ console = Console()
19
20
 
20
21
  PASS_THRU_CONTEXT = {"allow_extra_args": True, "ignore_unknown_options": True}
21
22
 
22
- # Get scripts directory (parent of vds_cli package)
23
- SCRIPT_DIR = Path(__file__).resolve().parent.parent.parent.parent
23
+ # Get scripts directory — prefer VDS_SCRIPTS_ROOT env var (set by vsaf MCP registration)
24
+ SCRIPT_DIR = Path(os.environ["VDS_SCRIPTS_ROOT"]) if "VDS_SCRIPTS_ROOT" in os.environ else Path(__file__).resolve().parent.parent.parent.parent
24
25
 
25
26
 
26
27
  @app.command()