@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 +2 -1
- package/package.json +2 -2
- package/src/global.js +1 -2
- package/src/project.js +4 -6
- package/src/status.js +7 -4
- package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +3 -2
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,
|
|
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
|
-
"description": "
|
|
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
|
-
|
|
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
|
-
|
|
133
|
-
|
|
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
|
|
26
|
-
checkProjectSkillDir('.codex/skills', 'Project
|
|
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
|
|
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 (
|
|
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()
|