@ngocsangairvds/vsaf 3.1.18 → 3.1.20
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/assets/templates/.codex/instructions.md +1 -1
- package/assets/templates/CLAUDE.md +1 -1
- package/package.json +2 -2
- package/src/project.js +2 -2
- package/src/status.js +1 -1
- package/src/utils.js +12 -19
- package/src/workflow.js +2 -7
- package/tools/skills/vsaf-plan/SKILL.md +1 -1
|
@@ -22,7 +22,7 @@ VSAF is a meta-framework for AI-driven SDLC — not an application. It has no so
|
|
|
22
22
|
| Code Intelligence | GitNexus | Impact analysis, call graph, blast radius |
|
|
23
23
|
| Implementation | Superpowers, Codex | Brainstorm, TDD execution, code review |
|
|
24
24
|
|
|
25
|
-
Key directories: `.codex/` (skills + instructions), `.vsaf/_bmad/` (BMAD workspace), `.vsaf/docs/` (artifacts), `.
|
|
25
|
+
Key directories: `.codex/` (skills + instructions), `.vsaf/_bmad/` (BMAD workspace), `.vsaf/docs/` (artifacts), `.gitnexus/` (knowledge graph index).
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
@@ -22,7 +22,7 @@ VSAF is a meta-framework for AI-driven SDLC — not an application. It has no so
|
|
|
22
22
|
| Code Intelligence | GitNexus (MCP) | Impact analysis, call graph, blast radius |
|
|
23
23
|
| Implementation | Superpowers, Claude Code | Brainstorm, TDD execution, code review |
|
|
24
24
|
|
|
25
|
-
Key directories: `.claude/` (settings + skills), `.vsaf/_bmad/` (BMAD workspace), `.vsaf/docs/` (artifacts), `.
|
|
25
|
+
Key directories: `.claude/` (settings + skills), `.vsaf/_bmad/` (BMAD workspace), `.vsaf/docs/` (artifacts), `.gitnexus/` (knowledge graph index).
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngocsangairvds/vsaf",
|
|
3
|
-
"version": "3.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.1.20",
|
|
4
|
+
"description": "fix method for codex",
|
|
5
5
|
"keywords": ["claude", "claude-code", "ai", "sdlc", "framework", "bmad", "gitnexus", "superpowers"],
|
|
6
6
|
"bin": {
|
|
7
7
|
"vsaf": "./bin/vsaf.js"
|
package/src/project.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,
|
|
4
|
+
const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, cleanStaleWal } = require('./utils');
|
|
5
5
|
|
|
6
6
|
const PKG_ROOT = path.join(__dirname, '..');
|
|
7
7
|
const TEMPLATES = path.join(PKG_ROOT, 'assets', 'templates');
|
|
@@ -160,7 +160,7 @@ function syncLocalBmadSkills() {
|
|
|
160
160
|
function initGitNexus() {
|
|
161
161
|
step('GitNexus');
|
|
162
162
|
if (!hasCommand('gitnexus')) { warn('gitnexus not found — run: vsaf global'); return; }
|
|
163
|
-
|
|
163
|
+
cleanStaleWal();
|
|
164
164
|
const analyzeCmd = 'gitnexus analyze --skip-git';
|
|
165
165
|
info('Indexing repository (gitnexus analyze)...');
|
|
166
166
|
exec(analyzeCmd, { cwd: CWD }) ? ok('Repository indexed') : warn('gitnexus analyze failed — run manually');
|
package/src/status.js
CHANGED
|
@@ -22,7 +22,7 @@ async function showStatus() {
|
|
|
22
22
|
checkPath('.vsaf/docs', 'Project artifact folder');
|
|
23
23
|
checkProjectSkillDir('.claude/skills', 'Project BMAD skills (.claude)');
|
|
24
24
|
checkProjectSkillDir('.codex/skills', 'Project BMAD skills (.codex)');
|
|
25
|
-
checkPath('.
|
|
25
|
+
checkPath('.gitnexus', 'GitNexus index');
|
|
26
26
|
console.log('');
|
|
27
27
|
}
|
|
28
28
|
|
package/src/utils.js
CHANGED
|
@@ -55,27 +55,20 @@ function hasGitCommits() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
58
|
+
* Removes stale DuckDB WAL files from the .gitnexus directory.
|
|
59
|
+
* WAL files left behind by interrupted gitnexus analyze runs can become
|
|
60
|
+
* corrupted, causing DuckDB to crash with UNREACHABLE_CODE on next open.
|
|
61
61
|
*/
|
|
62
|
-
function
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
const linkPath = path.join(cwd, '.gitnexus');
|
|
62
|
+
function cleanStaleWal() {
|
|
63
|
+
const dir = path.join(process.cwd(), '.gitnexus');
|
|
64
|
+
if (!fs.existsSync(dir)) return;
|
|
66
65
|
|
|
67
|
-
fs.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// Real directory left behind (e.g. gitnexus recreated it after clean)
|
|
73
|
-
fs.rmSync(linkPath, { recursive: true, force: true });
|
|
74
|
-
} catch {
|
|
75
|
-
// linkPath does not exist — will create below
|
|
66
|
+
for (const file of fs.readdirSync(dir)) {
|
|
67
|
+
if (file.endsWith('.wal')) {
|
|
68
|
+
fs.unlinkSync(path.join(dir, file));
|
|
69
|
+
warn(`Removed stale WAL: .gitnexus/${file}`);
|
|
70
|
+
}
|
|
76
71
|
}
|
|
77
|
-
|
|
78
|
-
fs.symlinkSync(actual, linkPath);
|
|
79
72
|
}
|
|
80
73
|
|
|
81
74
|
function getPlatform() {
|
|
@@ -83,4 +76,4 @@ function getPlatform() {
|
|
|
83
76
|
return 'linux';
|
|
84
77
|
}
|
|
85
78
|
|
|
86
|
-
module.exports = { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME, CODEX_HOME, getPlatform, hasGitCommits,
|
|
79
|
+
module.exports = { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME, CODEX_HOME, getPlatform, hasGitCommits, cleanStaleWal };
|
package/src/workflow.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const fs = require('fs');
|
|
5
|
-
const { ok, info, warn, step, hasCommand, exec, hasGitCommits,
|
|
5
|
+
const { ok, info, warn, step, hasCommand, exec, hasGitCommits, cleanStaleWal } = require('./utils');
|
|
6
6
|
|
|
7
7
|
function preflightCheck() {
|
|
8
8
|
// Check: is this a git repo?
|
|
@@ -37,7 +37,7 @@ function runIndex() {
|
|
|
37
37
|
return false;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
cleanStaleWal();
|
|
41
41
|
info('Running gitnexus analyze...');
|
|
42
42
|
const gitnexusOk = exec('gitnexus analyze --skip-git');
|
|
43
43
|
if (gitnexusOk) {
|
|
@@ -80,11 +80,6 @@ function runClean() {
|
|
|
80
80
|
|
|
81
81
|
info('Running gitnexus clean...');
|
|
82
82
|
const cleanOk = exec('gitnexus clean --force');
|
|
83
|
-
// gitnexus clean deletes the .gitnexus symlink — clear actual data dir too
|
|
84
|
-
const actualDir = path.join(process.cwd(), '.vsaf', '_gitnexus');
|
|
85
|
-
if (fs.existsSync(actualDir)) fs.rmSync(actualDir, { recursive: true, force: true });
|
|
86
|
-
// Restore symlink pointing at the now-empty dir
|
|
87
|
-
ensureGitnexusSymlink();
|
|
88
83
|
cleanOk ? ok('GitNexus index cleaned') : warn('gitnexus clean failed — run manually');
|
|
89
84
|
return cleanOk;
|
|
90
85
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vsaf-plan
|
|
3
|
-
description: Plan a new feature/task. Use when receiving a requirement that needs scope analysis, impact assessment, and approach strategy. Dual brainstorm (Superpowers + BMAD). Example: /vsaf-plan create user management module
|
|
3
|
+
description: "Plan a new feature/task. Use when receiving a requirement that needs scope analysis, impact assessment, and approach strategy. Dual brainstorm (Superpowers + BMAD). Example: /vsaf-plan create user management module"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# VSAF Plan
|