specweave 0.23.2 → 0.23.4
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/CLAUDE.md +268 -0
- package/dist/plugins/specweave/lib/utils/fs-native.d.ts +133 -0
- package/dist/plugins/specweave/lib/utils/fs-native.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/utils/fs-native.js +224 -0
- package/dist/plugins/specweave/lib/utils/fs-native.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +52 -20
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js +2 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
- package/dist/src/core/ac-test-validator-cli.d.ts +16 -0
- package/dist/src/core/ac-test-validator-cli.d.ts.map +1 -0
- package/dist/src/core/ac-test-validator-cli.js +118 -0
- package/dist/src/core/ac-test-validator-cli.js.map +1 -0
- package/dist/src/core/ac-test-validator.d.ts +111 -0
- package/dist/src/core/ac-test-validator.d.ts.map +1 -0
- package/dist/src/core/ac-test-validator.js +292 -0
- package/dist/src/core/ac-test-validator.js.map +1 -0
- package/dist/src/core/increment/desync-detector.d.ts +142 -0
- package/dist/src/core/increment/desync-detector.d.ts.map +1 -0
- package/dist/src/core/increment/desync-detector.js +270 -0
- package/dist/src/core/increment/desync-detector.js.map +1 -0
- package/dist/src/core/increment/metadata-manager.d.ts +8 -4
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +45 -21
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/qa/qa-runner.js +9 -2
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/sync/sync-coordinator.d.ts +1 -1
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +40 -2
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/utils/fs-native.d.ts +133 -0
- package/dist/src/utils/fs-native.d.ts.map +1 -0
- package/dist/src/utils/fs-native.js +224 -0
- package/dist/src/utils/fs-native.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +12 -0
- package/plugins/specweave/agents/AGENTS-INDEX.md +216 -0
- package/plugins/specweave/agents/architect/AGENT.md +17 -0
- package/plugins/specweave/agents/code-standards-detective/AGENT.md +16 -0
- package/plugins/specweave/agents/docs-writer/AGENT.md +16 -0
- package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +704 -0
- package/plugins/specweave/agents/infrastructure/AGENT.md +16 -0
- package/plugins/specweave/agents/performance/AGENT.md +16 -0
- package/plugins/specweave/agents/pm/AGENT.md +17 -0
- package/plugins/specweave/agents/qa-lead/AGENT.md +15 -0
- package/plugins/specweave/agents/reflective-reviewer/AGENT.md +16 -0
- package/plugins/specweave/agents/security/AGENT.md +16 -0
- package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +16 -0
- package/plugins/specweave/agents/tech-lead/AGENT.md +16 -0
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +16 -0
- package/plugins/specweave/agents/translator/AGENT.md +13 -0
- package/plugins/specweave/commands/specweave-done.md +14 -0
- package/plugins/specweave/commands/specweave-qa.md +11 -1
- package/plugins/specweave/commands/specweave-sync-status.md +356 -0
- package/plugins/specweave/commands/specweave-validate.md +10 -1
- package/plugins/specweave/hooks/pre-task-completion.sh +196 -0
- package/plugins/specweave/lib/hooks/git-diff-analyzer.js +3 -3
- package/plugins/specweave/lib/hooks/git-diff-analyzer.ts +3 -3
- package/plugins/specweave/lib/hooks/invoke-translator-skill.js +3 -2
- package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +3 -2
- package/plugins/specweave/lib/hooks/prepare-reflection-context.js +3 -3
- package/plugins/specweave/lib/hooks/prepare-reflection-context.ts +3 -3
- package/plugins/specweave/lib/hooks/reflection-config-loader.js +4 -4
- package/plugins/specweave/lib/hooks/reflection-config-loader.ts +4 -4
- package/plugins/specweave/lib/hooks/reflection-storage.js +9 -9
- package/plugins/specweave/lib/hooks/reflection-storage.ts +9 -9
- package/plugins/specweave/lib/hooks/sync-cache.js +9 -8
- package/plugins/specweave/lib/hooks/sync-living-docs.js +57 -6
- package/plugins/specweave/lib/hooks/sync-us-tasks.js +6 -6
- package/plugins/specweave/lib/hooks/translate-file.js +3 -2
- package/plugins/specweave/lib/hooks/translate-file.ts +3 -2
- package/plugins/specweave/lib/hooks/translate-living-docs.js +4 -3
- package/plugins/specweave/lib/hooks/translate-living-docs.ts +4 -3
- package/plugins/specweave/lib/utils/fs-native.js +182 -0
- package/plugins/specweave/lib/utils/fs-native.ts +283 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.d.ts +8 -4
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +45 -21
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/skills/SKILLS-INDEX.md +26 -2
- package/plugins/specweave/skills/increment-planner/SKILL.md +2 -2
- package/plugins/specweave-ado/commands/specweave-ado-close-workitem.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-create-workitem.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-status.md +1 -1
- package/plugins/specweave-ado/commands/specweave-ado-sync.md +1 -1
- package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +1 -1
- package/plugins/specweave-diagrams/skills/diagrams-generator/SKILL.md +4 -4
- package/plugins/specweave-github/lib/github-client-v2.js +2 -1
- package/plugins/specweave-github/lib/github-client-v2.ts +1 -1
- package/plugins/specweave-github/lib/github-feature-sync.js +30 -17
- package/plugins/specweave-github/lib/github-feature-sync.ts +54 -24
- package/plugins/specweave-mobile/README.md +1 -1
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +72 -0
- package/plugins/specweave/skills/task-builder/README.md +0 -84
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-coordinator.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-coordinator.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IACrE,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,sBAAsB;IAM3C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC;IA0FpD;;OAEG;YACW,aAAa;IAyD3B;;OAEG;YACW,kBAAkB;IAmEhC;;OAEG;YACW,2BAA2B;IAqEzC;;OAEG;YACW,UAAU;IAWxB;;OAEG;YACW,gBAAgB;CAyB/B"}
|
|
@@ -31,13 +31,25 @@ export class SyncCoordinator {
|
|
|
31
31
|
this.logger.log(`\n🔄 Syncing increment ${this.incrementId} with format preservation...`);
|
|
32
32
|
// 1. Load config
|
|
33
33
|
const config = await this.loadConfig();
|
|
34
|
-
// 2. Check if sync is enabled
|
|
34
|
+
// 2. Check if sync is enabled (GATE 2: canUpdateExternalItems)
|
|
35
35
|
if (!config.sync?.settings?.canUpdateExternalItems) {
|
|
36
36
|
this.logger.log('ℹ️ External sync disabled (canUpdateExternalItems=false)');
|
|
37
37
|
result.syncMode = 'read-only';
|
|
38
38
|
result.success = true;
|
|
39
39
|
return result;
|
|
40
40
|
}
|
|
41
|
+
// GATE 3: Check if automatic sync is enabled
|
|
42
|
+
// DEFAULT: true (automatic sync enabled for better UX)
|
|
43
|
+
const autoSync = config.sync?.settings?.autoSyncOnCompletion ?? true;
|
|
44
|
+
if (!autoSync) {
|
|
45
|
+
this.logger.log('⚠️ Automatic sync disabled (autoSyncOnCompletion=false)');
|
|
46
|
+
this.logger.log(' Living docs updated locally, but external tools require manual sync');
|
|
47
|
+
this.logger.log(' Run /specweave-github:sync or /specweave-jira:sync to sync manually');
|
|
48
|
+
result.syncMode = 'manual-only';
|
|
49
|
+
result.success = true;
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
this.logger.log('✅ Automatic sync enabled (autoSyncOnCompletion=true)');
|
|
41
53
|
// 3. Load living docs User Stories for this increment
|
|
42
54
|
const userStories = await this.loadUserStoriesForIncrement();
|
|
43
55
|
if (userStories.length === 0) {
|
|
@@ -93,7 +105,13 @@ export class SyncCoordinator {
|
|
|
93
105
|
const completionData = await this.loadCompletionData(usFile);
|
|
94
106
|
// Determine external tool and create client
|
|
95
107
|
const externalSource = usFile.external_source || 'github'; // Default to GitHub
|
|
108
|
+
// GATE 4: Check if the specific tool is enabled
|
|
96
109
|
if (externalSource === 'github') {
|
|
110
|
+
const githubEnabled = config.sync?.github?.enabled ?? false;
|
|
111
|
+
if (!githubEnabled) {
|
|
112
|
+
this.logger.log(' ⏭️ GitHub sync SKIPPED (sync.github.enabled = false)');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
97
115
|
// Extract owner/repo from config or detect from git
|
|
98
116
|
const githubConfig = config.sync?.github || {};
|
|
99
117
|
const repoInfo = await this.detectGitHubRepo(githubConfig);
|
|
@@ -103,8 +121,28 @@ export class SyncCoordinator {
|
|
|
103
121
|
const client = GitHubClientV2.fromRepo(repoInfo.owner, repoInfo.repo);
|
|
104
122
|
await syncService.syncUserStory(usFile, completionData, client);
|
|
105
123
|
}
|
|
124
|
+
else if (externalSource === 'jira') {
|
|
125
|
+
const jiraEnabled = config.sync?.jira?.enabled ?? false;
|
|
126
|
+
if (!jiraEnabled) {
|
|
127
|
+
this.logger.log(' ⏭️ JIRA sync SKIPPED (sync.jira.enabled = false)');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// TODO: Implement JIRA sync
|
|
131
|
+
this.logger.log(' ⚠️ JIRA sync not yet fully implemented');
|
|
132
|
+
this.logger.log(' 💡 Use /specweave-jira:sync for manual JIRA sync');
|
|
133
|
+
}
|
|
134
|
+
else if (externalSource === 'ado' || externalSource === 'azure-devops') {
|
|
135
|
+
const adoEnabled = config.sync?.ado?.enabled ?? false;
|
|
136
|
+
if (!adoEnabled) {
|
|
137
|
+
this.logger.log(' ⏭️ Azure DevOps sync SKIPPED (sync.ado.enabled = false)');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// TODO: Implement ADO sync
|
|
141
|
+
this.logger.log(' ⚠️ Azure DevOps sync not yet fully implemented');
|
|
142
|
+
this.logger.log(' 💡 Use /specweave-ado:sync for manual ADO sync');
|
|
143
|
+
}
|
|
106
144
|
else {
|
|
107
|
-
this.logger.log(` ⚠️ ${externalSource}
|
|
145
|
+
this.logger.log(` ⚠️ Unknown external source: ${externalSource}`);
|
|
108
146
|
}
|
|
109
147
|
}
|
|
110
148
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-coordinator.js","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAoB,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAyB,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AACxF,OAAO,EAAU,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAe3D,MAAM,OAAO,eAAe;IAK1B,YAAY,OAA+B;QACzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,KAAK;YACd,iBAAiB,EAAE,CAAC;YACpB,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,WAAW,8BAA8B,CAAC,CAAC;YAE1F,iBAAiB;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAEvC
|
|
1
|
+
{"version":3,"file":"sync-coordinator.js","sourceRoot":"","sources":["../../../src/sync/sync-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Node.js fs API Helpers
|
|
3
|
+
*
|
|
4
|
+
* Drop-in replacements for fs-extra methods using only Node.js stdlib.
|
|
5
|
+
* All methods use native Node.js 20+ APIs with no external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Migration from fs-extra:
|
|
8
|
+
* - import fs from 'fs-extra' → import * as fs from './utils/fs-native.js'
|
|
9
|
+
* - All fs-extra methods work as drop-in replacements
|
|
10
|
+
*
|
|
11
|
+
* Benefits:
|
|
12
|
+
* - Zero bundle overhead (no npm packages)
|
|
13
|
+
* - Works in marketplace (no node_modules needed)
|
|
14
|
+
* - Faster startup (native APIs)
|
|
15
|
+
* - Better debugging (native stack traces)
|
|
16
|
+
*/
|
|
17
|
+
import { promises as fsPromises, existsSync, mkdirSync, readFileSync, writeFileSync, statSync, readdirSync, rmSync, unlinkSync } from 'fs';
|
|
18
|
+
/**
|
|
19
|
+
* Ensures that a directory exists. If the directory does not exist, it is created.
|
|
20
|
+
* @param dirPath - The directory path to ensure
|
|
21
|
+
*/
|
|
22
|
+
export declare function ensureDir(dirPath: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Synchronous version of ensureDir
|
|
25
|
+
*/
|
|
26
|
+
export declare function ensureDirSync(dirPath: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Alias for ensureDirSync (fs-extra compatibility)
|
|
29
|
+
*/
|
|
30
|
+
export declare function mkdirpSync(dirPath: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a path exists
|
|
33
|
+
* @param filePath - The path to check
|
|
34
|
+
*/
|
|
35
|
+
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Synchronous version of pathExists
|
|
38
|
+
*/
|
|
39
|
+
export { existsSync };
|
|
40
|
+
/**
|
|
41
|
+
* Read a JSON file and parse it
|
|
42
|
+
* @param filePath - The JSON file path
|
|
43
|
+
*/
|
|
44
|
+
export declare function readJson(filePath: string): Promise<any>;
|
|
45
|
+
/**
|
|
46
|
+
* Synchronous version of readJson
|
|
47
|
+
*/
|
|
48
|
+
export declare function readJsonSync(filePath: string): any;
|
|
49
|
+
/**
|
|
50
|
+
* Write a JSON file with formatting
|
|
51
|
+
* @param filePath - The JSON file path
|
|
52
|
+
* @param data - The data to write
|
|
53
|
+
* @param options - Options (spaces for indentation)
|
|
54
|
+
*/
|
|
55
|
+
export declare function writeJson(filePath: string, data: any, options?: {
|
|
56
|
+
spaces?: number;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Synchronous version of writeJson
|
|
60
|
+
*/
|
|
61
|
+
export declare function writeJsonSync(filePath: string, data: any, options?: {
|
|
62
|
+
spaces?: number;
|
|
63
|
+
}): void;
|
|
64
|
+
/**
|
|
65
|
+
* Remove a file or directory (recursively)
|
|
66
|
+
* @param targetPath - The path to remove
|
|
67
|
+
*/
|
|
68
|
+
export declare function remove(targetPath: string): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Synchronous version of remove
|
|
71
|
+
*/
|
|
72
|
+
export declare function removeSync(targetPath: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Copy a file or directory
|
|
75
|
+
* @param src - Source path
|
|
76
|
+
* @param dest - Destination path
|
|
77
|
+
* @param options - Copy options
|
|
78
|
+
*/
|
|
79
|
+
export declare function copy(src: string, dest: string, options?: {
|
|
80
|
+
overwrite?: boolean;
|
|
81
|
+
filter?: (src: string) => boolean;
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Synchronous version of copy
|
|
85
|
+
*/
|
|
86
|
+
export declare function copySync(src: string, dest: string, options?: {
|
|
87
|
+
overwrite?: boolean;
|
|
88
|
+
filter?: (src: string) => boolean;
|
|
89
|
+
}): void;
|
|
90
|
+
/**
|
|
91
|
+
* Ensure a file exists (create if it doesn't)
|
|
92
|
+
* @param filePath - The file path
|
|
93
|
+
*/
|
|
94
|
+
export declare function ensureFile(filePath: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Synchronous version of ensureFile
|
|
97
|
+
*/
|
|
98
|
+
export declare function ensureFileSync(filePath: string): void;
|
|
99
|
+
export declare const readFile: typeof fsPromises.readFile, writeFile: typeof fsPromises.writeFile, appendFile: typeof fsPromises.appendFile, stat: typeof fsPromises.stat, readdir: typeof fsPromises.readdir, access: typeof fsPromises.access, unlink: typeof fsPromises.unlink, rmdir: typeof fsPromises.rmdir, rename: typeof fsPromises.rename, chmod: typeof fsPromises.chmod;
|
|
100
|
+
export { readFileSync, writeFileSync, statSync, readdirSync, unlinkSync, mkdirSync, rmSync, };
|
|
101
|
+
declare const _default: {
|
|
102
|
+
ensureDir: typeof ensureDir;
|
|
103
|
+
pathExists: typeof pathExists;
|
|
104
|
+
readJson: typeof readJson;
|
|
105
|
+
writeJson: typeof writeJson;
|
|
106
|
+
remove: typeof remove;
|
|
107
|
+
copy: typeof copy;
|
|
108
|
+
ensureFile: typeof ensureFile;
|
|
109
|
+
readFile: typeof fsPromises.readFile;
|
|
110
|
+
writeFile: typeof fsPromises.writeFile;
|
|
111
|
+
appendFile: typeof fsPromises.appendFile;
|
|
112
|
+
stat: typeof fsPromises.stat;
|
|
113
|
+
readdir: typeof fsPromises.readdir;
|
|
114
|
+
access: typeof fsPromises.access;
|
|
115
|
+
unlink: typeof fsPromises.unlink;
|
|
116
|
+
ensureDirSync: typeof ensureDirSync;
|
|
117
|
+
mkdirpSync: typeof mkdirpSync;
|
|
118
|
+
existsSync: typeof existsSync;
|
|
119
|
+
readJsonSync: typeof readJsonSync;
|
|
120
|
+
writeJsonSync: typeof writeJsonSync;
|
|
121
|
+
removeSync: typeof removeSync;
|
|
122
|
+
copySync: typeof copySync;
|
|
123
|
+
ensureFileSync: typeof ensureFileSync;
|
|
124
|
+
readFileSync: typeof readFileSync;
|
|
125
|
+
writeFileSync: typeof writeFileSync;
|
|
126
|
+
statSync: import("fs").StatSyncFn;
|
|
127
|
+
readdirSync: typeof readdirSync;
|
|
128
|
+
unlinkSync: typeof unlinkSync;
|
|
129
|
+
mkdirSync: typeof mkdirSync;
|
|
130
|
+
rmSync: typeof rmSync;
|
|
131
|
+
};
|
|
132
|
+
export default _default;
|
|
133
|
+
//# sourceMappingURL=fs-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-native.d.ts","sourceRoot":"","sources":["../../../src/utils/fs-native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAgB,MAAM,IAAI,CAAC;AAIzJ;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAGlD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,GACnE,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,GACnE,IAAI,CA4BN;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKrD;AAGD,eAAO,MACL,QAAQ,8BACR,SAAS,+BACT,UAAU,gCACV,IAAI,0BACJ,OAAO,6BACP,MAAM,4BACN,MAAM,4BACN,KAAK,2BACL,MAAM,4BACN,KAAK,yBACO,CAAC;AAGf,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,GACP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGF,wBAiCE"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Node.js fs API Helpers
|
|
3
|
+
*
|
|
4
|
+
* Drop-in replacements for fs-extra methods using only Node.js stdlib.
|
|
5
|
+
* All methods use native Node.js 20+ APIs with no external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Migration from fs-extra:
|
|
8
|
+
* - import fs from 'fs-extra' → import * as fs from './utils/fs-native.js'
|
|
9
|
+
* - All fs-extra methods work as drop-in replacements
|
|
10
|
+
*
|
|
11
|
+
* Benefits:
|
|
12
|
+
* - Zero bundle overhead (no npm packages)
|
|
13
|
+
* - Works in marketplace (no node_modules needed)
|
|
14
|
+
* - Faster startup (native APIs)
|
|
15
|
+
* - Better debugging (native stack traces)
|
|
16
|
+
*/
|
|
17
|
+
import { promises as fsPromises, existsSync, mkdirSync, readFileSync, writeFileSync, statSync, readdirSync, rmSync, unlinkSync, copyFileSync } from 'fs';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
/**
|
|
20
|
+
* Ensures that a directory exists. If the directory does not exist, it is created.
|
|
21
|
+
* @param dirPath - The directory path to ensure
|
|
22
|
+
*/
|
|
23
|
+
export async function ensureDir(dirPath) {
|
|
24
|
+
if (!existsSync(dirPath)) {
|
|
25
|
+
await fsPromises.mkdir(dirPath, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Synchronous version of ensureDir
|
|
30
|
+
*/
|
|
31
|
+
export function ensureDirSync(dirPath) {
|
|
32
|
+
if (!existsSync(dirPath)) {
|
|
33
|
+
mkdirSync(dirPath, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Alias for ensureDirSync (fs-extra compatibility)
|
|
38
|
+
*/
|
|
39
|
+
export function mkdirpSync(dirPath) {
|
|
40
|
+
ensureDirSync(dirPath);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if a path exists
|
|
44
|
+
* @param filePath - The path to check
|
|
45
|
+
*/
|
|
46
|
+
export async function pathExists(filePath) {
|
|
47
|
+
return existsSync(filePath);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Synchronous version of pathExists
|
|
51
|
+
*/
|
|
52
|
+
export { existsSync };
|
|
53
|
+
/**
|
|
54
|
+
* Read a JSON file and parse it
|
|
55
|
+
* @param filePath - The JSON file path
|
|
56
|
+
*/
|
|
57
|
+
export async function readJson(filePath) {
|
|
58
|
+
const content = await fsPromises.readFile(filePath, 'utf-8');
|
|
59
|
+
return JSON.parse(content);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Synchronous version of readJson
|
|
63
|
+
*/
|
|
64
|
+
export function readJsonSync(filePath) {
|
|
65
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
66
|
+
return JSON.parse(content);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Write a JSON file with formatting
|
|
70
|
+
* @param filePath - The JSON file path
|
|
71
|
+
* @param data - The data to write
|
|
72
|
+
* @param options - Options (spaces for indentation)
|
|
73
|
+
*/
|
|
74
|
+
export async function writeJson(filePath, data, options) {
|
|
75
|
+
const spaces = options?.spaces ?? 2;
|
|
76
|
+
const content = JSON.stringify(data, null, spaces);
|
|
77
|
+
await fsPromises.writeFile(filePath, content, 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Synchronous version of writeJson
|
|
81
|
+
*/
|
|
82
|
+
export function writeJsonSync(filePath, data, options) {
|
|
83
|
+
const spaces = options?.spaces ?? 2;
|
|
84
|
+
const content = JSON.stringify(data, null, spaces);
|
|
85
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Remove a file or directory (recursively)
|
|
89
|
+
* @param targetPath - The path to remove
|
|
90
|
+
*/
|
|
91
|
+
export async function remove(targetPath) {
|
|
92
|
+
if (existsSync(targetPath)) {
|
|
93
|
+
await fsPromises.rm(targetPath, { recursive: true, force: true });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Synchronous version of remove
|
|
98
|
+
*/
|
|
99
|
+
export function removeSync(targetPath) {
|
|
100
|
+
if (existsSync(targetPath)) {
|
|
101
|
+
rmSync(targetPath, { recursive: true, force: true });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Copy a file or directory
|
|
106
|
+
* @param src - Source path
|
|
107
|
+
* @param dest - Destination path
|
|
108
|
+
* @param options - Copy options
|
|
109
|
+
*/
|
|
110
|
+
export async function copy(src, dest, options) {
|
|
111
|
+
const srcStat = await fsPromises.stat(src);
|
|
112
|
+
if (srcStat.isFile()) {
|
|
113
|
+
// Copy single file
|
|
114
|
+
await fsPromises.mkdir(path.dirname(dest), { recursive: true });
|
|
115
|
+
await fsPromises.copyFile(src, dest);
|
|
116
|
+
}
|
|
117
|
+
else if (srcStat.isDirectory()) {
|
|
118
|
+
// Copy directory recursively
|
|
119
|
+
await fsPromises.mkdir(dest, { recursive: true });
|
|
120
|
+
const entries = await fsPromises.readdir(src, { withFileTypes: true });
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
const srcPath = path.join(src, entry.name);
|
|
123
|
+
const destPath = path.join(dest, entry.name);
|
|
124
|
+
// Apply filter if provided
|
|
125
|
+
if (options?.filter && !options.filter(srcPath)) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (entry.isDirectory()) {
|
|
129
|
+
await copy(srcPath, destPath, options);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
await fsPromises.copyFile(srcPath, destPath);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Synchronous version of copy
|
|
139
|
+
*/
|
|
140
|
+
export function copySync(src, dest, options) {
|
|
141
|
+
const srcStat = statSync(src);
|
|
142
|
+
if (srcStat.isFile()) {
|
|
143
|
+
// Copy single file
|
|
144
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
145
|
+
copyFileSync(src, dest);
|
|
146
|
+
}
|
|
147
|
+
else if (srcStat.isDirectory()) {
|
|
148
|
+
// Copy directory recursively
|
|
149
|
+
mkdirSync(dest, { recursive: true });
|
|
150
|
+
const entries = readdirSync(src, { withFileTypes: true });
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
const srcPath = path.join(src, entry.name);
|
|
153
|
+
const destPath = path.join(dest, entry.name);
|
|
154
|
+
// Apply filter if provided
|
|
155
|
+
if (options?.filter && !options.filter(srcPath)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (entry.isDirectory()) {
|
|
159
|
+
copySync(srcPath, destPath, options);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
copyFileSync(srcPath, destPath);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Ensure a file exists (create if it doesn't)
|
|
169
|
+
* @param filePath - The file path
|
|
170
|
+
*/
|
|
171
|
+
export async function ensureFile(filePath) {
|
|
172
|
+
if (!existsSync(filePath)) {
|
|
173
|
+
await fsPromises.mkdir(path.dirname(filePath), { recursive: true });
|
|
174
|
+
await fsPromises.writeFile(filePath, '', 'utf-8');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Synchronous version of ensureFile
|
|
179
|
+
*/
|
|
180
|
+
export function ensureFileSync(filePath) {
|
|
181
|
+
if (!existsSync(filePath)) {
|
|
182
|
+
mkdirSync(path.dirname(filePath), { recursive: true });
|
|
183
|
+
writeFileSync(filePath, '', 'utf-8');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Re-export common fs/promises methods for convenience
|
|
187
|
+
export const { readFile, writeFile, appendFile, stat, readdir, access, unlink, rmdir, rename, chmod, } = fsPromises;
|
|
188
|
+
// Re-export common synchronous methods
|
|
189
|
+
export { readFileSync, writeFileSync, statSync, readdirSync, unlinkSync, mkdirSync, rmSync, };
|
|
190
|
+
// Default export for convenience
|
|
191
|
+
export default {
|
|
192
|
+
// Async methods
|
|
193
|
+
ensureDir,
|
|
194
|
+
pathExists,
|
|
195
|
+
readJson,
|
|
196
|
+
writeJson,
|
|
197
|
+
remove,
|
|
198
|
+
copy,
|
|
199
|
+
ensureFile,
|
|
200
|
+
readFile,
|
|
201
|
+
writeFile,
|
|
202
|
+
appendFile,
|
|
203
|
+
stat,
|
|
204
|
+
readdir,
|
|
205
|
+
access,
|
|
206
|
+
unlink,
|
|
207
|
+
// Sync methods
|
|
208
|
+
ensureDirSync,
|
|
209
|
+
mkdirpSync,
|
|
210
|
+
existsSync,
|
|
211
|
+
readJsonSync,
|
|
212
|
+
writeJsonSync,
|
|
213
|
+
removeSync,
|
|
214
|
+
copySync,
|
|
215
|
+
ensureFileSync,
|
|
216
|
+
readFileSync,
|
|
217
|
+
writeFileSync,
|
|
218
|
+
statSync,
|
|
219
|
+
readdirSync,
|
|
220
|
+
unlinkSync,
|
|
221
|
+
mkdirSync,
|
|
222
|
+
rmSync,
|
|
223
|
+
};
|
|
224
|
+
//# sourceMappingURL=fs-native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-native.js","sourceRoot":"","sources":["../../../src/utils/fs-native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAEzJ,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,aAAa,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,IAAS,EACT,OAA6B;IAE7B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,IAAS,EACT,OAA6B;IAE7B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkB;IAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAW,EACX,IAAY,EACZ,OAAoE;IAEpE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,mBAAmB;QACnB,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACjC,6BAA6B;QAC7B,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,2BAA2B;YAC3B,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAW,EACX,IAAY,EACZ,OAAoE;IAEpE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE9B,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrB,mBAAmB;QACnB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACjC,6BAA6B;QAC7B,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,2BAA2B;YAC3B,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,EACX,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,GACN,GAAG,UAAU,CAAC;AAEf,uCAAuC;AACvC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,GACP,CAAC;AAEF,iCAAiC;AACjC,eAAe;IACb,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,MAAM;IACN,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,SAAS;IACT,UAAU;IACV,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM;IAEN,eAAe;IACf,aAAa;IACb,UAAU;IACV,UAAU;IACV,YAAY;IACZ,aAAa;IACb,UAAU;IACV,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;CACP,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.4",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,6 +20,18 @@
|
|
|
20
20
|
"living-docs"
|
|
21
21
|
],
|
|
22
22
|
"hooks": {
|
|
23
|
+
"PreToolUse": [
|
|
24
|
+
{
|
|
25
|
+
"matcher": "TodoWrite",
|
|
26
|
+
"hooks": [
|
|
27
|
+
{
|
|
28
|
+
"type": "command",
|
|
29
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/pre-task-completion.sh",
|
|
30
|
+
"timeout": 60
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
],
|
|
23
35
|
"PostToolUse": [
|
|
24
36
|
{
|
|
25
37
|
"matcher": "TodoWrite",
|