@lbruton/specflow 3.4.1 → 3.5.1
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/dist/core/__tests__/config-loader.test.d.ts +2 -0
- package/dist/core/__tests__/config-loader.test.d.ts.map +1 -0
- package/dist/core/__tests__/config-loader.test.js +184 -0
- package/dist/core/__tests__/config-loader.test.js.map +1 -0
- package/dist/core/__tests__/index-updater.test.d.ts +2 -0
- package/dist/core/__tests__/index-updater.test.d.ts.map +1 -0
- package/dist/core/__tests__/index-updater.test.js +122 -0
- package/dist/core/__tests__/index-updater.test.js.map +1 -0
- package/dist/core/__tests__/migration.test.d.ts +2 -0
- package/dist/core/__tests__/migration.test.d.ts.map +1 -0
- package/dist/core/__tests__/migration.test.js +151 -0
- package/dist/core/__tests__/migration.test.js.map +1 -0
- package/dist/core/__tests__/path-utils.test.js +101 -12
- package/dist/core/__tests__/path-utils.test.js.map +1 -1
- package/dist/core/archive-service.d.ts.map +1 -1
- package/dist/core/archive-service.js +22 -0
- package/dist/core/archive-service.js.map +1 -1
- package/dist/core/config-loader.d.ts +31 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +162 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/index-updater.d.ts +17 -0
- package/dist/core/index-updater.d.ts.map +1 -0
- package/dist/core/index-updater.js +86 -0
- package/dist/core/index-updater.js.map +1 -0
- package/dist/core/migration.d.ts +30 -0
- package/dist/core/migration.d.ts.map +1 -0
- package/dist/core/migration.js +109 -0
- package/dist/core/migration.js.map +1 -0
- package/dist/core/path-utils.d.ts +7 -0
- package/dist/core/path-utils.d.ts.map +1 -1
- package/dist/core/path-utils.js +22 -10
- package/dist/core/path-utils.js.map +1 -1
- package/dist/core/template-generator.d.ts.map +1 -1
- package/dist/core/template-generator.js +32 -11
- package/dist/core/template-generator.js.map +1 -1
- package/dist/core/workspace-initializer.d.ts +6 -1
- package/dist/core/workspace-initializer.d.ts.map +1 -1
- package/dist/core/workspace-initializer.js +69 -9
- package/dist/core/workspace-initializer.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +15 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/approvals.d.ts.map +1 -1
- package/dist/tools/approvals.js +14 -0
- package/dist/tools/approvals.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time migration of existing `.specflow/` content to DocVault.
|
|
3
|
+
*
|
|
4
|
+
* Copies (never moves) migratable subdirectories from the local `.specflow/`
|
|
5
|
+
* folder to the corresponding DocVault location defined in ResolvedConfig.
|
|
6
|
+
* Skips destinations that already contain files to prevent data loss.
|
|
7
|
+
*/
|
|
8
|
+
import { readdir, cp, access } from 'fs/promises';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { constants } from 'fs';
|
|
11
|
+
import { ensureDirectoryExists } from './path-utils.js';
|
|
12
|
+
/**
|
|
13
|
+
* Migration source-to-destination mapping.
|
|
14
|
+
* Keys are local `.specflow/` subdirectory names.
|
|
15
|
+
* Values are the corresponding subdirectory names under `config.specflowRoot`.
|
|
16
|
+
* Note: `user-templates/` is renamed to `templates/` in DocVault.
|
|
17
|
+
*/
|
|
18
|
+
const MIGRATION_MAP = {
|
|
19
|
+
'steering': 'steering',
|
|
20
|
+
'specs': 'specs',
|
|
21
|
+
'user-templates': 'templates',
|
|
22
|
+
'approvals': 'approvals',
|
|
23
|
+
'archive': 'archive',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Check whether the local `.specflow/` directory contains any content
|
|
27
|
+
* that should be migrated to DocVault.
|
|
28
|
+
*/
|
|
29
|
+
export async function needsMigration(projectPath, _config) {
|
|
30
|
+
const localRoot = join(projectPath, '.specflow');
|
|
31
|
+
for (const srcDir of Object.keys(MIGRATION_MAP)) {
|
|
32
|
+
const srcPath = join(localRoot, srcDir);
|
|
33
|
+
if (await dirHasFiles(srcPath)) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Copy migratable content from `.specflow/` to DocVault.
|
|
41
|
+
*
|
|
42
|
+
* For each mapping in MIGRATION_MAP:
|
|
43
|
+
* - If the source directory doesn't exist or is empty, skip silently.
|
|
44
|
+
* - If the destination directory already has files, skip with a warning.
|
|
45
|
+
* - Otherwise, copy recursively.
|
|
46
|
+
*
|
|
47
|
+
* Originals are left in place (copy, not move).
|
|
48
|
+
*/
|
|
49
|
+
export async function migrateToDocVault(projectPath, config) {
|
|
50
|
+
const result = {
|
|
51
|
+
migratedDirs: [],
|
|
52
|
+
skippedDirs: [],
|
|
53
|
+
errors: [],
|
|
54
|
+
};
|
|
55
|
+
const localRoot = join(projectPath, '.specflow');
|
|
56
|
+
for (const [srcDir, destDir] of Object.entries(MIGRATION_MAP)) {
|
|
57
|
+
const srcPath = join(localRoot, srcDir);
|
|
58
|
+
const destPath = join(config.specflowRoot, destDir);
|
|
59
|
+
try {
|
|
60
|
+
// Skip if source doesn't exist or is empty
|
|
61
|
+
if (!(await dirHasFiles(srcPath))) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Safety: never overwrite existing content
|
|
65
|
+
if (await dirHasFiles(destPath)) {
|
|
66
|
+
const msg = `Skipping ${srcDir}/ — destination already has content: ${destPath}`;
|
|
67
|
+
console.error(`[migration] ${msg}`);
|
|
68
|
+
result.skippedDirs.push(srcDir);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Ensure destination parent exists
|
|
72
|
+
await ensureDirectoryExists(destPath);
|
|
73
|
+
// Copy recursively
|
|
74
|
+
await cp(srcPath, destPath, { recursive: true });
|
|
75
|
+
console.error(`[migration] Copied ${srcDir}/ → ${destPath}`);
|
|
76
|
+
result.migratedDirs.push(srcDir);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
80
|
+
console.error(`[migration] Error migrating ${srcDir}/: ${msg}`);
|
|
81
|
+
result.errors.push(`${srcDir}: ${msg}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check whether a directory exists and contains at least one regular file
|
|
88
|
+
* (recursively). Empty subdirectories (e.g., scaffolded by WorkspaceInitializer)
|
|
89
|
+
* do not count as "content" — only actual files do.
|
|
90
|
+
*/
|
|
91
|
+
async function dirHasFiles(dirPath) {
|
|
92
|
+
try {
|
|
93
|
+
await access(dirPath, constants.F_OK);
|
|
94
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
if (entry.isFile())
|
|
97
|
+
return true;
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
if (await dirHasFiles(join(dirPath, entry.name)))
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/core/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { ResolvedConfig } from './config-loader.js';
|
|
1
2
|
export declare class PathUtils {
|
|
2
3
|
/** macOS and Windows are case-insensitive filesystems */
|
|
3
4
|
private static readonly IS_CASE_INSENSITIVE;
|
|
4
5
|
/** Cached path configuration (undefined = not checked, null = invalid/missing) */
|
|
5
6
|
private static pathConfig;
|
|
7
|
+
/** DocVault resolved configuration (null = not configured) */
|
|
8
|
+
private static docvaultConfig;
|
|
6
9
|
/**
|
|
7
10
|
* Get cached path configuration from environment variables.
|
|
8
11
|
* Caches result to prevent race conditions from env var changes mid-operation.
|
|
@@ -12,6 +15,10 @@ export declare class PathUtils {
|
|
|
12
15
|
private static isAbsolutePath;
|
|
13
16
|
/** Reset cached config (for testing) */
|
|
14
17
|
static resetPathConfig(): void;
|
|
18
|
+
static initializeDocVault(config: ResolvedConfig): void;
|
|
19
|
+
static isDocVaultConfigured(): boolean;
|
|
20
|
+
static getGlobalTemplatesPath(): string;
|
|
21
|
+
static resetDocVaultConfig(): void;
|
|
15
22
|
/**
|
|
16
23
|
* Normalize path for cross-platform comparison using built-in path.posix.
|
|
17
24
|
* Converts backslashes to forward slashes, removes trailing slashes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/core/path-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/core/path-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,SAAS;IACpB,yDAAyD;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CACqB;IAEhE,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqE;IAE9F,8DAA8D;IAC9D,OAAO,CAAC,MAAM,CAAC,cAAc,CAA+B;IAE5D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IA+B5B,wDAAwD;IACxD,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B,wCAAwC;IACxC,MAAM,CAAC,eAAe,IAAI,IAAI;IAI9B,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIvD,MAAM,CAAC,oBAAoB,IAAI,OAAO;IAItC,MAAM,CAAC,sBAAsB,IAAI,MAAM;IAOvC,MAAM,CAAC,mBAAmB,IAAI,IAAI;IAIlC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAWrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmBhC;;;;;;;;;OASG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA2B9C;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IA2B1D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAyBvB,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQnD,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjE,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIxE,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIvD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIpD,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIpD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMzE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKvC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;CAUtE;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4D9E;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E;AAED,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlF"}
|
package/dist/core/path-utils.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { join, normalize, sep, resolve, posix } from 'path';
|
|
2
2
|
import { access, stat, mkdir } from 'fs/promises';
|
|
3
|
-
import { constants
|
|
3
|
+
import { constants } from 'fs';
|
|
4
4
|
export class PathUtils {
|
|
5
5
|
/** macOS and Windows are case-insensitive filesystems */
|
|
6
6
|
static IS_CASE_INSENSITIVE = process.platform === 'darwin' || process.platform === 'win32';
|
|
7
7
|
/** Cached path configuration (undefined = not checked, null = invalid/missing) */
|
|
8
8
|
static pathConfig;
|
|
9
|
+
/** DocVault resolved configuration (null = not configured) */
|
|
10
|
+
static docvaultConfig = null;
|
|
9
11
|
/**
|
|
10
12
|
* Get cached path configuration from environment variables.
|
|
11
13
|
* Caches result to prevent race conditions from env var changes mid-operation.
|
|
@@ -43,6 +45,21 @@ export class PathUtils {
|
|
|
43
45
|
static resetPathConfig() {
|
|
44
46
|
this.pathConfig = undefined;
|
|
45
47
|
}
|
|
48
|
+
static initializeDocVault(config) {
|
|
49
|
+
this.docvaultConfig = config;
|
|
50
|
+
}
|
|
51
|
+
static isDocVaultConfigured() {
|
|
52
|
+
return this.docvaultConfig !== null;
|
|
53
|
+
}
|
|
54
|
+
static getGlobalTemplatesPath() {
|
|
55
|
+
if (!this.docvaultConfig) {
|
|
56
|
+
throw new Error('DocVault not configured. Call initializeDocVault() first.');
|
|
57
|
+
}
|
|
58
|
+
return this.docvaultConfig.globalTemplatesPath;
|
|
59
|
+
}
|
|
60
|
+
static resetDocVaultConfig() {
|
|
61
|
+
this.docvaultConfig = null;
|
|
62
|
+
}
|
|
46
63
|
/**
|
|
47
64
|
* Normalize path for cross-platform comparison using built-in path.posix.
|
|
48
65
|
* Converts backslashes to forward slashes, removes trailing slashes.
|
|
@@ -161,16 +178,11 @@ export class PathUtils {
|
|
|
161
178
|
return joined;
|
|
162
179
|
}
|
|
163
180
|
static getWorkflowRoot(projectPath) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
return newPath;
|
|
167
|
-
}
|
|
168
|
-
const legacyPath = this.safeJoin(projectPath, '.spec-workflow');
|
|
169
|
-
if (existsSync(legacyPath)) {
|
|
170
|
-
console.warn('[specflow] Found legacy .spec-workflow/ directory. Please rename to .specflow/. Legacy support will be removed in a future version.');
|
|
171
|
-
return legacyPath;
|
|
181
|
+
if (this.docvaultConfig) {
|
|
182
|
+
return this.docvaultConfig.specflowRoot;
|
|
172
183
|
}
|
|
173
|
-
|
|
184
|
+
// Fallback for testing or pre-config state
|
|
185
|
+
return this.safeJoin(projectPath, '.specflow');
|
|
174
186
|
}
|
|
175
187
|
static getSpecPath(projectPath, specName) {
|
|
176
188
|
return join(this.getWorkflowRoot(projectPath), 'specs', specName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/core/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/core/path-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKnE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AA+MD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readFile, mkdir, writeFile, stat } from 'fs/promises';
|
|
2
2
|
import { join, dirname } from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
|
+
import { PathUtils } from './path-utils.js';
|
|
4
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
6
|
/**
|
|
6
7
|
* Safely read a file, returning null on any error.
|
|
@@ -26,23 +27,43 @@ async function fileExists(filePath) {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
|
-
* Read a default template by name
|
|
30
|
-
*
|
|
30
|
+
* Read a default template by name using tiered precedence.
|
|
31
|
+
*
|
|
32
|
+
* When DocVault is configured (3-tier):
|
|
33
|
+
* 1. Project-level DocVault override ({workflowRoot}/templates/)
|
|
34
|
+
* 2. Global DocVault templates (globalTemplatesPath/)
|
|
35
|
+
* 3. Bundled emergency fallback (dist/markdown/templates/)
|
|
36
|
+
*
|
|
37
|
+
* When DocVault is NOT configured (legacy 2-tier):
|
|
38
|
+
* 1. Project's local .specflow/templates/
|
|
39
|
+
* 2. Bundled emergency fallback
|
|
31
40
|
*/
|
|
32
41
|
async function readDefaultTemplate(projectPath, templateName) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
if (PathUtils.isDocVaultConfigured()) {
|
|
43
|
+
// Tier 1: Project-level DocVault override
|
|
44
|
+
const projectTemplate = join(PathUtils.getWorkflowRoot(projectPath), 'templates', `${templateName}.md`);
|
|
45
|
+
const projectContent = await safeReadFile(projectTemplate);
|
|
46
|
+
if (projectContent !== null)
|
|
47
|
+
return projectContent;
|
|
48
|
+
// Tier 2: Global DocVault templates
|
|
49
|
+
const globalTemplate = join(PathUtils.getGlobalTemplatesPath(), `${templateName}.md`);
|
|
50
|
+
const globalContent = await safeReadFile(globalTemplate);
|
|
51
|
+
if (globalContent !== null)
|
|
52
|
+
return globalContent;
|
|
38
53
|
}
|
|
39
|
-
|
|
54
|
+
else {
|
|
55
|
+
// Legacy: project's local .specflow/templates/
|
|
56
|
+
const projectTemplate = join(projectPath, '.specflow', 'templates', `${templateName}.md`);
|
|
57
|
+
const content = await safeReadFile(projectTemplate);
|
|
58
|
+
if (content !== null)
|
|
59
|
+
return content;
|
|
60
|
+
}
|
|
61
|
+
// Tier 3 / Fallback: bundled source templates (compiled to dist/core/, so go up to dist/markdown/templates/)
|
|
40
62
|
const bundledTemplate = join(__dirname, '..', 'markdown', 'templates', `${templateName}.md`);
|
|
41
63
|
const bundledContent = await safeReadFile(bundledTemplate);
|
|
42
|
-
if (bundledContent !== null)
|
|
64
|
+
if (bundledContent !== null)
|
|
43
65
|
return bundledContent;
|
|
44
|
-
}
|
|
45
|
-
throw new Error(`Could not find default template "${templateName}.md" in project or bundled sources`);
|
|
66
|
+
throw new Error(`Template not found: ${templateName}`);
|
|
46
67
|
}
|
|
47
68
|
/**
|
|
48
69
|
* Generate the Testing Strategy section for browserbase projects.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/core/template-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import type { ResolvedConfig } from './config-loader.js';
|
|
1
2
|
export declare class WorkspaceInitializer {
|
|
2
3
|
private projectPath;
|
|
3
4
|
private version;
|
|
4
|
-
|
|
5
|
+
private config?;
|
|
6
|
+
constructor(projectPath: string, version: string, config?: ResolvedConfig);
|
|
5
7
|
initializeWorkspace(): Promise<void>;
|
|
6
8
|
private initializeDirectories;
|
|
7
9
|
private initializeTemplates;
|
|
10
|
+
private initializeDocVaultDirectories;
|
|
11
|
+
private initializeGlobalTemplates;
|
|
12
|
+
private initializeIndexFiles;
|
|
8
13
|
private copyTemplate;
|
|
9
14
|
private createUserTemplatesReadme;
|
|
10
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-initializer.d.ts","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace-initializer.d.ts","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAMnE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;YAsB5B,qBAAqB;YAkBrB,mBAAmB;YAsBnB,6BAA6B;YAqB7B,yBAAyB;YAoBzB,oBAAoB;YAWpB,YAAY;YAkBZ,yBAAyB;IA8EvC;;;OAGG;YACW,yBAAyB;CAgBxC"}
|
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
2
|
+
import { join, dirname, basename } from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { PathUtils } from './path-utils.js';
|
|
5
5
|
import { ImplementationLogMigrator } from './implementation-log-migrator.js';
|
|
6
6
|
import { getGlobalDir } from './global-dir.js';
|
|
7
|
+
import { ensureIndexExists } from './index-updater.js';
|
|
7
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
9
|
export class WorkspaceInitializer {
|
|
9
10
|
projectPath;
|
|
10
11
|
version;
|
|
11
|
-
|
|
12
|
+
config;
|
|
13
|
+
constructor(projectPath, version, config) {
|
|
12
14
|
this.projectPath = projectPath;
|
|
13
15
|
this.version = version;
|
|
16
|
+
this.config = config;
|
|
14
17
|
}
|
|
15
18
|
async initializeWorkspace() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if (this.config) {
|
|
20
|
+
// DocVault mode: scaffold DocVault directories, use centralized paths
|
|
21
|
+
// Still create local .specflow/ root (for config.json)
|
|
22
|
+
const localRoot = join(this.projectPath, '.specflow');
|
|
23
|
+
await fs.mkdir(localRoot, { recursive: true });
|
|
24
|
+
await this.initializeDocVaultDirectories();
|
|
25
|
+
await this.initializeGlobalTemplates();
|
|
26
|
+
await this.initializeTemplates();
|
|
27
|
+
await this.initializeIndexFiles();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Legacy mode: preserve existing behavior exactly
|
|
31
|
+
await this.initializeDirectories();
|
|
32
|
+
await this.initializeTemplates();
|
|
33
|
+
await this.createUserTemplatesReadme();
|
|
34
|
+
}
|
|
22
35
|
// Migrate implementation logs from JSON to Markdown format
|
|
23
36
|
await this.migrateImplementationLogs();
|
|
24
37
|
}
|
|
@@ -38,7 +51,9 @@ export class WorkspaceInitializer {
|
|
|
38
51
|
}
|
|
39
52
|
}
|
|
40
53
|
async initializeTemplates() {
|
|
41
|
-
const templatesDir =
|
|
54
|
+
const templatesDir = this.config
|
|
55
|
+
? join(this.config.specflowRoot, 'templates')
|
|
56
|
+
: join(PathUtils.getWorkflowRoot(this.projectPath), 'templates');
|
|
42
57
|
const templates = [
|
|
43
58
|
'requirements-template',
|
|
44
59
|
'design-template',
|
|
@@ -54,6 +69,51 @@ export class WorkspaceInitializer {
|
|
|
54
69
|
await this.copyTemplate(template, templatesDir);
|
|
55
70
|
}
|
|
56
71
|
}
|
|
72
|
+
async initializeDocVaultDirectories() {
|
|
73
|
+
if (!this.config)
|
|
74
|
+
return;
|
|
75
|
+
const directories = [
|
|
76
|
+
'steering',
|
|
77
|
+
'specs',
|
|
78
|
+
'templates',
|
|
79
|
+
'approvals',
|
|
80
|
+
'archive',
|
|
81
|
+
join('archive', 'specs'),
|
|
82
|
+
];
|
|
83
|
+
for (const dir of directories) {
|
|
84
|
+
const dirPath = join(this.config.specflowRoot, dir);
|
|
85
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
86
|
+
}
|
|
87
|
+
// Also create the global templates directory
|
|
88
|
+
await fs.mkdir(this.config.globalTemplatesPath, { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
async initializeGlobalTemplates() {
|
|
91
|
+
if (!this.config)
|
|
92
|
+
return;
|
|
93
|
+
const templates = [
|
|
94
|
+
'requirements-template',
|
|
95
|
+
'design-template',
|
|
96
|
+
'tasks-template',
|
|
97
|
+
'product-template',
|
|
98
|
+
'tech-template',
|
|
99
|
+
'structure-template',
|
|
100
|
+
'spec-reviewer-template',
|
|
101
|
+
'code-quality-reviewer-template',
|
|
102
|
+
'implementer-prompt-template',
|
|
103
|
+
];
|
|
104
|
+
for (const template of templates) {
|
|
105
|
+
await this.copyTemplate(template, this.config.globalTemplatesPath);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async initializeIndexFiles() {
|
|
109
|
+
if (!this.config)
|
|
110
|
+
return;
|
|
111
|
+
const projectName = basename(this.config.specflowRoot);
|
|
112
|
+
await ensureIndexExists(this.config.specflowRoot, projectName);
|
|
113
|
+
await ensureIndexExists(join(this.config.specflowRoot, 'steering'), 'Steering');
|
|
114
|
+
await ensureIndexExists(join(this.config.specflowRoot, 'specs'), 'Specs');
|
|
115
|
+
await ensureIndexExists(join(this.config.specflowRoot, 'templates'), 'Templates');
|
|
116
|
+
}
|
|
57
117
|
async copyTemplate(templateName, targetDir) {
|
|
58
118
|
// Use simple filename without version
|
|
59
119
|
const targetFileName = `${templateName}.md`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-initializer.js","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace-initializer.js","sourceRoot":"","sources":["../../src/core/workspace-initializer.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAsBA,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,IAAI,CAAC,CAAS;;IAiChB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IA0F1E,OAAO,CAAC,aAAa;IAoCrB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAMd,IAAI;CAuBX"}
|
package/dist/server.js
CHANGED
|
@@ -3,8 +3,10 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { registerTools, handleToolCall } from './tools/index.js';
|
|
5
5
|
import { registerPrompts, handlePromptList, handlePromptGet } from './prompts/index.js';
|
|
6
|
-
import { validateProjectPath } from './core/path-utils.js';
|
|
6
|
+
import { validateProjectPath, PathUtils } from './core/path-utils.js';
|
|
7
7
|
import { WorkspaceInitializer } from './core/workspace-initializer.js';
|
|
8
|
+
import { loadOrCreateConfig } from './core/config-loader.js';
|
|
9
|
+
import { needsMigration, migrateToDocVault } from './core/migration.js';
|
|
8
10
|
import { ProjectRegistry } from './core/project-registry.js';
|
|
9
11
|
import { DashboardSessionManager } from './core/dashboard-session.js';
|
|
10
12
|
import { readFileSync } from 'fs';
|
|
@@ -50,12 +52,23 @@ export class SpecWorkflowMCPServer {
|
|
|
50
52
|
// Validate project path
|
|
51
53
|
await validateProjectPath(this.projectPath);
|
|
52
54
|
await validateProjectPath(this.workspacePath);
|
|
55
|
+
// Load or create DocVault config
|
|
56
|
+
const config = await loadOrCreateConfig(this.projectPath);
|
|
57
|
+
console.error(`DocVault config loaded: ${config.specflowRoot}`);
|
|
58
|
+
// Initialize PathUtils with DocVault resolution
|
|
59
|
+
PathUtils.initializeDocVault(config);
|
|
53
60
|
// Initialize workspace
|
|
54
61
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
55
62
|
const packageJsonPath = join(__dirname, '..', 'package.json');
|
|
56
63
|
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
57
|
-
const workspaceInitializer = new WorkspaceInitializer(this.projectPath, packageJson.version);
|
|
64
|
+
const workspaceInitializer = new WorkspaceInitializer(this.projectPath, packageJson.version, config);
|
|
58
65
|
await workspaceInitializer.initializeWorkspace();
|
|
66
|
+
// Check for and run migration if needed
|
|
67
|
+
if (await needsMigration(this.projectPath, config)) {
|
|
68
|
+
console.error('Migrating existing .specflow/ content to DocVault...');
|
|
69
|
+
const migrationResult = await migrateToDocVault(this.projectPath, config);
|
|
70
|
+
console.error(`Migration complete: ${migrationResult.migratedDirs.length} migrated, ${migrationResult.skippedDirs.length} skipped, ${migrationResult.errors.length} errors`);
|
|
71
|
+
}
|
|
59
72
|
// Register this project in the global registry
|
|
60
73
|
const projectId = await this.projectRegistry.registerProject(this.workspacePath, process.pid, {
|
|
61
74
|
workflowRootPath: this.projectPath
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,QAAQ,EACR,SAAS,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA+BxD,eAAO,MAAM,aAAa,EAAE,IAwD3B,CAAC;AAwCF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IACJ,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,EACD,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CAqDvB"}
|
package/dist/tools/approvals.js
CHANGED
|
@@ -4,6 +4,8 @@ import { validateProjectPath, PathUtils } from '../core/path-utils.js';
|
|
|
4
4
|
import { readFile } from 'fs/promises';
|
|
5
5
|
import { validateTasksMarkdown, formatValidationErrors } from '../core/task-validator.js';
|
|
6
6
|
import { validateMarkdownForMdx, formatMdxValidationIssues } from '../core/mdx-validator.js';
|
|
7
|
+
import { addSpecToIndex } from '../core/index-updater.js';
|
|
8
|
+
import { loadConfig } from '../core/config-loader.js';
|
|
7
9
|
/**
|
|
8
10
|
* Safely translate a path, with defensive checks to provide better error messages
|
|
9
11
|
* in case of module loading issues.
|
|
@@ -231,6 +233,18 @@ async function handleRequestApproval(args, context) {
|
|
|
231
233
|
}
|
|
232
234
|
const approvalId = await approvalStorage.createApproval(args.title, args.filePath, args.category, args.categoryName, args.type);
|
|
233
235
|
await approvalStorage.stop();
|
|
236
|
+
// Best-effort: add spec to _Index.md when requirements.md is first submitted
|
|
237
|
+
if (args.category === 'spec' &&
|
|
238
|
+
args.filePath.endsWith('requirements.md') &&
|
|
239
|
+
PathUtils.isDocVaultConfigured()) {
|
|
240
|
+
try {
|
|
241
|
+
const config = await loadConfig(validatedProjectPath);
|
|
242
|
+
await addSpecToIndex(config, args.categoryName);
|
|
243
|
+
}
|
|
244
|
+
catch (e) {
|
|
245
|
+
console.error('Failed to update spec index:', e);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
234
248
|
// Build deeplink URL that navigates directly to this specific approval
|
|
235
249
|
const deeplink = context.dashboardUrl
|
|
236
250
|
? `${context.dashboardUrl}/approvals?id=${encodeURIComponent(approvalId)}`
|