specweave 0.28.17 → 0.28.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/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts +16 -0
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.js +63 -3
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +12 -3
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js +37 -3
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +6 -11
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +6 -11
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts +21 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +445 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +10 -0
- package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-status-sync.js +40 -2
- package/dist/plugins/specweave-github/lib/github-status-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts +94 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js +369 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts +12 -0
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.js +57 -5
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +5 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js +12 -4
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -1
- package/dist/src/cli/commands/import-external.d.ts.map +1 -1
- package/dist/src/cli/commands/import-external.js +12 -7
- package/dist/src/cli/commands/import-external.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +308 -36
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +115 -0
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +590 -0
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts +65 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +278 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts +64 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js +251 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js.map +1 -0
- package/dist/src/config/types.d.ts +6 -6
- package/dist/src/core/ac-test-validator-cli.js +4 -1
- package/dist/src/core/ac-test-validator-cli.js.map +1 -1
- package/dist/src/core/ac-test-validator.d.ts.map +1 -1
- package/dist/src/core/ac-test-validator.js +4 -1
- package/dist/src/core/ac-test-validator.js.map +1 -1
- package/dist/src/core/background/index.d.ts +11 -0
- package/dist/src/core/background/index.d.ts.map +1 -0
- package/dist/src/core/background/index.js +11 -0
- package/dist/src/core/background/index.js.map +1 -0
- package/dist/src/core/background/job-manager.d.ts +65 -0
- package/dist/src/core/background/job-manager.d.ts.map +1 -0
- package/dist/src/core/background/job-manager.js +192 -0
- package/dist/src/core/background/job-manager.js.map +1 -0
- package/dist/src/core/background/types.d.ts +59 -0
- package/dist/src/core/background/types.d.ts.map +1 -0
- package/dist/src/core/background/types.js +8 -0
- package/dist/src/core/background/types.js.map +1 -0
- package/dist/src/core/repo-structure/multi-repo-configurator.d.ts +25 -0
- package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -0
- package/dist/src/core/repo-structure/multi-repo-configurator.js +614 -0
- package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -0
- package/dist/src/core/repo-structure/repo-initializer.d.ts +40 -0
- package/dist/src/core/repo-structure/repo-initializer.d.ts.map +1 -0
- package/dist/src/core/repo-structure/repo-initializer.js +252 -0
- package/dist/src/core/repo-structure/repo-initializer.js.map +1 -0
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts +3 -37
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +23 -803
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +75 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/spec-metadata.d.ts +2 -0
- package/dist/src/core/types/spec-metadata.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +137 -5
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js +63 -0
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/importers/external-importer.d.ts +25 -0
- package/dist/src/importers/external-importer.d.ts.map +1 -1
- package/dist/src/importers/github-importer.d.ts.map +1 -1
- package/dist/src/importers/github-importer.js +5 -3
- package/dist/src/importers/github-importer.js.map +1 -1
- package/dist/src/importers/import-coordinator.d.ts +20 -0
- package/dist/src/importers/import-coordinator.d.ts.map +1 -1
- package/dist/src/importers/import-coordinator.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +51 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +39 -12
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +2 -2
- package/dist/src/init/compliance/types.d.ts +1 -1
- package/dist/src/init/repo/types.d.ts +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +72 -3
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +142 -16
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/locales/de/cli.json +14 -0
- package/dist/src/locales/es/cli.json +14 -0
- package/dist/src/locales/fr/cli.json +14 -0
- package/dist/src/locales/ja/cli.json +14 -0
- package/dist/src/locales/ko/cli.json +14 -0
- package/dist/src/locales/pt/cli.json +14 -0
- package/dist/src/locales/ru/cli.json +14 -0
- package/dist/src/locales/zh/cli.json +14 -0
- package/dist/src/utils/chalk-fallback.d.ts +38 -0
- package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
- package/dist/src/utils/chalk-fallback.js +118 -0
- package/dist/src/utils/chalk-fallback.js.map +1 -0
- package/dist/src/utils/project-id-generator.d.ts +127 -0
- package/dist/src/utils/project-id-generator.d.ts.map +1 -0
- package/dist/src/utils/project-id-generator.js +228 -0
- package/dist/src/utils/project-id-generator.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/agents/pm/AGENT.md +202 -0
- package/plugins/specweave/commands/specweave-import-external.md +5 -3
- package/plugins/specweave/commands/specweave-jobs.md +160 -0
- package/plugins/specweave/commands/specweave-sync-docs.md +6 -2
- package/plugins/specweave/hooks/pre-task-completion.sh +35 -17
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.d.ts +16 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js +121 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.d.ts +111 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.js +295 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +75 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.d.ts +38 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.js +118 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.js.map +1 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.d.ts +179 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.js +319 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.js.map +1 -0
- package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
- package/plugins/specweave/skills/docs-updater/SKILL.md +61 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +10 -335
- package/plugins/specweave/skills/increment-planner/templates/metadata.json +13 -0
- package/plugins/specweave/skills/increment-planner/templates/plan.md +50 -0
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +86 -0
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +50 -0
- package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +86 -0
- package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +48 -0
- package/plugins/specweave-ado/commands/specweave-ado-import-areas.md +358 -0
- package/plugins/specweave-ado/lib/ado-spec-sync.js +59 -3
- package/plugins/specweave-ado/lib/ado-spec-sync.ts +72 -3
- package/plugins/specweave-ado/lib/ado-status-sync.js +35 -3
- package/plugins/specweave-ado/lib/ado-status-sync.ts +48 -4
- package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +1 -0
- package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +1 -0
- package/plugins/specweave-core/skills/code-quality/SKILL.md +1 -0
- package/plugins/specweave-core/skills/design-patterns/SKILL.md +1 -0
- package/plugins/specweave-core/skills/software-architecture/SKILL.md +1 -0
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +14 -10
- package/plugins/specweave-github/commands/specweave-github-sync.md +57 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +74 -0
- package/plugins/specweave-github/lib/github-feature-sync.ts +6 -11
- package/plugins/specweave-github/lib/github-increment-sync-cli.js +456 -0
- package/plugins/specweave-github/lib/github-increment-sync-cli.ts +588 -0
- package/plugins/specweave-github/lib/github-status-sync.js +37 -1
- package/plugins/specweave-github/lib/github-status-sync.ts +60 -4
- package/plugins/specweave-github/lib/increment-issue-builder.js +389 -0
- package/plugins/specweave-github/lib/increment-issue-builder.ts +502 -0
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +19 -24
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +15 -23
- package/plugins/specweave-jira/commands/specweave-jira-import-boards.md +331 -0
- package/plugins/specweave-jira/lib/jira-spec-sync.js +53 -5
- package/plugins/specweave-jira/lib/jira-spec-sync.ts +87 -7
- package/plugins/specweave-jira/lib/jira-status-sync.js +9 -3
- package/plugins/specweave-jira/lib/jira-status-sync.ts +15 -6
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +16 -20
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +18 -19
- package/plugins/specweave-ml/skills/{ml-pipeline-workflow → mlops-dag-builder}/SKILL.md +18 -14
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +111 -0
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +1 -1
- package/plugins/specweave-ui/skills/ui-testing/SKILL.md +10 -122
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +0 -70
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +0 -258
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +0 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +0 -83
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +0 -466
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +0 -1
- package/plugins/specweave-github/lib/epic-content-builder.js +0 -265
- package/plugins/specweave-github/lib/epic-content-builder.ts +0 -376
- package/plugins/specweave-github/lib/github-epic-sync.js +0 -488
- package/plugins/specweave-github/lib/github-epic-sync.ts +0 -715
|
@@ -0,0 +1,179 @@
|
|
|
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: // legacy fs-extra (documentation only)
|
|
8
|
+
* - import fs from 'fs-extra' → import * as fs from './utils/fs-native.js' // legacy fs-extra
|
|
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, renameSync as fsRenameSync } 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
|
+
* fs-extra compatibility: readJSON (uppercase J)
|
|
66
|
+
* Alias for readJson
|
|
67
|
+
*/
|
|
68
|
+
export declare const readJSON: typeof readJson;
|
|
69
|
+
/**
|
|
70
|
+
* fs-extra compatibility: readJSONSync (uppercase J)
|
|
71
|
+
* Alias for readJsonSync
|
|
72
|
+
*/
|
|
73
|
+
export declare const readJSONSync: typeof readJsonSync;
|
|
74
|
+
/**
|
|
75
|
+
* fs-extra compatibility: writeJSON (uppercase J)
|
|
76
|
+
* Alias for writeJson
|
|
77
|
+
*/
|
|
78
|
+
export declare const writeJSON: typeof writeJson;
|
|
79
|
+
/**
|
|
80
|
+
* fs-extra compatibility: writeJSONSync (uppercase J)
|
|
81
|
+
* Alias for writeJsonSync
|
|
82
|
+
*/
|
|
83
|
+
export declare const writeJSONSync: typeof writeJsonSync;
|
|
84
|
+
/**
|
|
85
|
+
* Remove a file or directory (recursively)
|
|
86
|
+
* @param targetPath - The path to remove
|
|
87
|
+
*/
|
|
88
|
+
export declare function remove(targetPath: string): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Synchronous version of remove
|
|
91
|
+
*/
|
|
92
|
+
export declare function removeSync(targetPath: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Copy a file or directory
|
|
95
|
+
* @param src - Source path
|
|
96
|
+
* @param dest - Destination path
|
|
97
|
+
* @param options - Copy options
|
|
98
|
+
*/
|
|
99
|
+
export declare function copy(src: string, dest: string, options?: {
|
|
100
|
+
overwrite?: boolean;
|
|
101
|
+
filter?: (src: string) => boolean;
|
|
102
|
+
}): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Synchronous version of copy
|
|
105
|
+
*/
|
|
106
|
+
export declare function copySync(src: string, dest: string, options?: {
|
|
107
|
+
overwrite?: boolean;
|
|
108
|
+
filter?: (src: string) => boolean;
|
|
109
|
+
}): void;
|
|
110
|
+
/**
|
|
111
|
+
* Ensure a file exists (create if it doesn't)
|
|
112
|
+
* @param filePath - The file path
|
|
113
|
+
*/
|
|
114
|
+
export declare function ensureFile(filePath: string): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Synchronous version of ensureFile
|
|
117
|
+
*/
|
|
118
|
+
export declare function ensureFileSync(filePath: string): void;
|
|
119
|
+
/**
|
|
120
|
+
* Move a file or directory
|
|
121
|
+
* @param src - Source path
|
|
122
|
+
* @param dest - Destination path
|
|
123
|
+
* @param options - Move options
|
|
124
|
+
*/
|
|
125
|
+
export declare function move(src: string, dest: string, options?: {
|
|
126
|
+
overwrite?: boolean;
|
|
127
|
+
}): Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* Synchronous version of move
|
|
130
|
+
*/
|
|
131
|
+
export declare function moveSync(src: string, dest: string, options?: {
|
|
132
|
+
overwrite?: boolean;
|
|
133
|
+
}): void;
|
|
134
|
+
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, copyFile: typeof fsPromises.copyFile;
|
|
135
|
+
export declare const renameSync: typeof fsRenameSync;
|
|
136
|
+
export { readFileSync, writeFileSync, statSync, readdirSync, unlinkSync, mkdirSync, rmSync, copyFileSync, };
|
|
137
|
+
declare const _default: {
|
|
138
|
+
ensureDir: typeof ensureDir;
|
|
139
|
+
pathExists: typeof pathExists;
|
|
140
|
+
readJson: typeof readJson;
|
|
141
|
+
writeJson: typeof writeJson;
|
|
142
|
+
readJSON: typeof readJson;
|
|
143
|
+
writeJSON: typeof writeJson;
|
|
144
|
+
remove: typeof remove;
|
|
145
|
+
copy: typeof copy;
|
|
146
|
+
move: typeof move;
|
|
147
|
+
ensureFile: typeof ensureFile;
|
|
148
|
+
readFile: typeof fsPromises.readFile;
|
|
149
|
+
writeFile: typeof fsPromises.writeFile;
|
|
150
|
+
appendFile: typeof fsPromises.appendFile;
|
|
151
|
+
stat: typeof fsPromises.stat;
|
|
152
|
+
readdir: typeof fsPromises.readdir;
|
|
153
|
+
access: typeof fsPromises.access;
|
|
154
|
+
unlink: typeof fsPromises.unlink;
|
|
155
|
+
rename: typeof fsPromises.rename;
|
|
156
|
+
copyFile: typeof fsPromises.copyFile;
|
|
157
|
+
ensureDirSync: typeof ensureDirSync;
|
|
158
|
+
mkdirpSync: typeof mkdirpSync;
|
|
159
|
+
existsSync: typeof existsSync;
|
|
160
|
+
readJsonSync: typeof readJsonSync;
|
|
161
|
+
writeJsonSync: typeof writeJsonSync;
|
|
162
|
+
readJSONSync: typeof readJsonSync;
|
|
163
|
+
writeJSONSync: typeof writeJsonSync;
|
|
164
|
+
removeSync: typeof removeSync;
|
|
165
|
+
copySync: typeof copySync;
|
|
166
|
+
moveSync: typeof moveSync;
|
|
167
|
+
ensureFileSync: typeof ensureFileSync;
|
|
168
|
+
readFileSync: typeof readFileSync;
|
|
169
|
+
writeFileSync: typeof writeFileSync;
|
|
170
|
+
statSync: import("fs").StatSyncFn;
|
|
171
|
+
readdirSync: typeof readdirSync;
|
|
172
|
+
unlinkSync: typeof unlinkSync;
|
|
173
|
+
mkdirSync: typeof mkdirSync;
|
|
174
|
+
rmSync: typeof rmSync;
|
|
175
|
+
copyFileSync: typeof copyFileSync;
|
|
176
|
+
renameSync: typeof fsRenameSync;
|
|
177
|
+
};
|
|
178
|
+
export default _default;
|
|
179
|
+
//# sourceMappingURL=fs-native.d.ts.map
|
|
@@ -0,0 +1,319 @@
|
|
|
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: // legacy fs-extra (documentation only)
|
|
8
|
+
* - import fs from 'fs-extra' → import * as fs from './utils/fs-native.js' // legacy fs-extra
|
|
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, renameSync as fsRenameSync } 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
|
+
* fs-extra compatibility: readJSON (uppercase J)
|
|
89
|
+
* Alias for readJson
|
|
90
|
+
*/
|
|
91
|
+
export const readJSON = readJson;
|
|
92
|
+
/**
|
|
93
|
+
* fs-extra compatibility: readJSONSync (uppercase J)
|
|
94
|
+
* Alias for readJsonSync
|
|
95
|
+
*/
|
|
96
|
+
export const readJSONSync = readJsonSync;
|
|
97
|
+
/**
|
|
98
|
+
* fs-extra compatibility: writeJSON (uppercase J)
|
|
99
|
+
* Alias for writeJson
|
|
100
|
+
*/
|
|
101
|
+
export const writeJSON = writeJson;
|
|
102
|
+
/**
|
|
103
|
+
* fs-extra compatibility: writeJSONSync (uppercase J)
|
|
104
|
+
* Alias for writeJsonSync
|
|
105
|
+
*/
|
|
106
|
+
export const writeJSONSync = writeJsonSync;
|
|
107
|
+
/**
|
|
108
|
+
* Remove a file or directory (recursively)
|
|
109
|
+
* @param targetPath - The path to remove
|
|
110
|
+
*/
|
|
111
|
+
export async function remove(targetPath) {
|
|
112
|
+
if (existsSync(targetPath)) {
|
|
113
|
+
await fsPromises.rm(targetPath, { recursive: true, force: true });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Synchronous version of remove
|
|
118
|
+
*/
|
|
119
|
+
export function removeSync(targetPath) {
|
|
120
|
+
if (existsSync(targetPath)) {
|
|
121
|
+
rmSync(targetPath, { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Copy a file or directory
|
|
126
|
+
* @param src - Source path
|
|
127
|
+
* @param dest - Destination path
|
|
128
|
+
* @param options - Copy options
|
|
129
|
+
*/
|
|
130
|
+
export async function copy(src, dest, options) {
|
|
131
|
+
const srcStat = await fsPromises.stat(src);
|
|
132
|
+
if (srcStat.isFile()) {
|
|
133
|
+
// Copy single file
|
|
134
|
+
await fsPromises.mkdir(path.dirname(dest), { recursive: true });
|
|
135
|
+
await fsPromises.copyFile(src, dest);
|
|
136
|
+
}
|
|
137
|
+
else if (srcStat.isDirectory()) {
|
|
138
|
+
// Copy directory recursively
|
|
139
|
+
await fsPromises.mkdir(dest, { recursive: true });
|
|
140
|
+
const entries = await fsPromises.readdir(src, { withFileTypes: true });
|
|
141
|
+
for (const entry of entries) {
|
|
142
|
+
const srcPath = path.join(src, entry.name);
|
|
143
|
+
const destPath = path.join(dest, entry.name);
|
|
144
|
+
// Apply filter if provided
|
|
145
|
+
if (options?.filter && !options.filter(srcPath)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (entry.isDirectory()) {
|
|
149
|
+
await copy(srcPath, destPath, options);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
await fsPromises.copyFile(srcPath, destPath);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Synchronous version of copy
|
|
159
|
+
*/
|
|
160
|
+
export function copySync(src, dest, options) {
|
|
161
|
+
const srcStat = statSync(src);
|
|
162
|
+
if (srcStat.isFile()) {
|
|
163
|
+
// Copy single file
|
|
164
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
165
|
+
copyFileSync(src, dest);
|
|
166
|
+
}
|
|
167
|
+
else if (srcStat.isDirectory()) {
|
|
168
|
+
// Copy directory recursively
|
|
169
|
+
mkdirSync(dest, { recursive: true });
|
|
170
|
+
const entries = readdirSync(src, { withFileTypes: true });
|
|
171
|
+
for (const entry of entries) {
|
|
172
|
+
const srcPath = path.join(src, entry.name);
|
|
173
|
+
const destPath = path.join(dest, entry.name);
|
|
174
|
+
// Apply filter if provided
|
|
175
|
+
if (options?.filter && !options.filter(srcPath)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (entry.isDirectory()) {
|
|
179
|
+
copySync(srcPath, destPath, options);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
copyFileSync(srcPath, destPath);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Ensure a file exists (create if it doesn't)
|
|
189
|
+
* @param filePath - The file path
|
|
190
|
+
*/
|
|
191
|
+
export async function ensureFile(filePath) {
|
|
192
|
+
if (!existsSync(filePath)) {
|
|
193
|
+
await fsPromises.mkdir(path.dirname(filePath), { recursive: true });
|
|
194
|
+
await fsPromises.writeFile(filePath, '', 'utf-8');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Synchronous version of ensureFile
|
|
199
|
+
*/
|
|
200
|
+
export function ensureFileSync(filePath) {
|
|
201
|
+
if (!existsSync(filePath)) {
|
|
202
|
+
mkdirSync(path.dirname(filePath), { recursive: true });
|
|
203
|
+
writeFileSync(filePath, '', 'utf-8');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Move a file or directory
|
|
208
|
+
* @param src - Source path
|
|
209
|
+
* @param dest - Destination path
|
|
210
|
+
* @param options - Move options
|
|
211
|
+
*/
|
|
212
|
+
export async function move(src, dest, options) {
|
|
213
|
+
// Ensure destination directory exists
|
|
214
|
+
await fsPromises.mkdir(path.dirname(dest), { recursive: true });
|
|
215
|
+
// Check if destination exists
|
|
216
|
+
if (existsSync(dest)) {
|
|
217
|
+
if (options?.overwrite) {
|
|
218
|
+
await remove(dest);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
throw new Error(`Destination already exists: ${dest}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Try rename first (faster if same filesystem)
|
|
225
|
+
try {
|
|
226
|
+
await fsPromises.rename(src, dest);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
// If rename fails (different filesystems), copy then delete
|
|
230
|
+
if (err.code === 'EXDEV') {
|
|
231
|
+
await copy(src, dest);
|
|
232
|
+
await remove(src);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
throw err;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Synchronous version of move
|
|
241
|
+
*/
|
|
242
|
+
export function moveSync(src, dest, options) {
|
|
243
|
+
// Ensure destination directory exists
|
|
244
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
245
|
+
// Check if destination exists
|
|
246
|
+
if (existsSync(dest)) {
|
|
247
|
+
if (options?.overwrite) {
|
|
248
|
+
removeSync(dest);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
throw new Error(`Destination already exists: ${dest}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Try rename first (faster if same filesystem)
|
|
255
|
+
try {
|
|
256
|
+
fsRenameSync(src, dest);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
// If rename fails (different filesystems), copy then delete
|
|
260
|
+
if (err.code === 'EXDEV') {
|
|
261
|
+
copySync(src, dest);
|
|
262
|
+
removeSync(src);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
throw err;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Re-export common fs/promises methods for convenience
|
|
270
|
+
export const { readFile, writeFile, appendFile, stat, readdir, access, unlink, rmdir, rename, chmod, copyFile, } = fsPromises;
|
|
271
|
+
// Create renameSync alias for fs-extra compatibility
|
|
272
|
+
export const renameSync = fsRenameSync;
|
|
273
|
+
// Re-export common synchronous methods
|
|
274
|
+
export { readFileSync, writeFileSync, statSync, readdirSync, unlinkSync, mkdirSync, rmSync, copyFileSync, };
|
|
275
|
+
// Default export for convenience
|
|
276
|
+
export default {
|
|
277
|
+
// Async methods
|
|
278
|
+
ensureDir,
|
|
279
|
+
pathExists,
|
|
280
|
+
readJson,
|
|
281
|
+
writeJson,
|
|
282
|
+
readJSON, // fs-extra compat
|
|
283
|
+
writeJSON, // fs-extra compat
|
|
284
|
+
remove,
|
|
285
|
+
copy,
|
|
286
|
+
move,
|
|
287
|
+
ensureFile,
|
|
288
|
+
readFile,
|
|
289
|
+
writeFile,
|
|
290
|
+
appendFile,
|
|
291
|
+
stat,
|
|
292
|
+
readdir,
|
|
293
|
+
access,
|
|
294
|
+
unlink,
|
|
295
|
+
rename,
|
|
296
|
+
copyFile,
|
|
297
|
+
// Sync methods
|
|
298
|
+
ensureDirSync,
|
|
299
|
+
mkdirpSync,
|
|
300
|
+
existsSync,
|
|
301
|
+
readJsonSync,
|
|
302
|
+
writeJsonSync,
|
|
303
|
+
readJSONSync, // fs-extra compat
|
|
304
|
+
writeJSONSync, // fs-extra compat
|
|
305
|
+
removeSync,
|
|
306
|
+
copySync,
|
|
307
|
+
moveSync,
|
|
308
|
+
ensureFileSync,
|
|
309
|
+
readFileSync,
|
|
310
|
+
writeFileSync,
|
|
311
|
+
statSync,
|
|
312
|
+
readdirSync,
|
|
313
|
+
unlinkSync,
|
|
314
|
+
mkdirSync,
|
|
315
|
+
rmSync,
|
|
316
|
+
copyFileSync,
|
|
317
|
+
renameSync,
|
|
318
|
+
};
|
|
319
|
+
//# 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,UAAU,IAAI,YAAY,EAAE,MAAM,IAAI,CAAC;AAErL,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,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAE3C;;;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;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,GAAW,EACX,IAAY,EACZ,OAAiC;IAEjC,sCAAsC;IACtC,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,8BAA8B;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,4DAA4D;QAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAW,EACX,IAAY,EACZ,OAAiC;IAEjC,sCAAsC;IACtC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,8BAA8B;IAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,4DAA4D;QAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpB,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,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,EACL,QAAQ,GACT,GAAG,UAAU,CAAC;AAEf,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AAEvC,uCAAuC;AACvC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,MAAM,EACN,YAAY,GACb,CAAC;AAEF,iCAAiC;AACjC,eAAe;IACb,gBAAgB;IAChB,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ,EAAG,kBAAkB;IAC7B,SAAS,EAAG,kBAAkB;IAC9B,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,SAAS;IACT,UAAU;IACV,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IAER,eAAe;IACf,aAAa;IACb,UAAU;IACV,UAAU;IACV,YAAY;IACZ,aAAa;IACb,YAAY,EAAG,kBAAkB;IACjC,aAAa,EAAG,kBAAkB;IAClC,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;CACX,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-reviewer
|
|
3
|
-
description:
|
|
3
|
+
description: Code review expert for security vulnerabilities, performance, and best practices. Activates for review code, code review, security review, PR review, pull request review, check my code, code quality, vulnerability scan, OWASP, code analysis, static analysis.
|
|
4
4
|
model: claude-sonnet-4-5-20250929
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-updater
|
|
3
|
+
description: Updates living documentation during implementation. Syncs task completion to docs, changes [DRAFT] to [COMPLETE], maintains bidirectional links. Activates for update docs, sync documentation, mark complete, documentation updates, living docs sync.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Documentation Updater
|
|
7
|
+
|
|
8
|
+
Updates product documentation (.specweave/docs/) based on implementation progress.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Task specifies documentation updates in tasks.md
|
|
13
|
+
- Feature implementation is complete
|
|
14
|
+
- User says "update documentation" or "sync docs"
|
|
15
|
+
- After closing increment to ensure docs reflect reality
|
|
16
|
+
|
|
17
|
+
## What It Does
|
|
18
|
+
|
|
19
|
+
1. **Reads task requirements** - Understands what was implemented from tasks.md
|
|
20
|
+
2. **Updates living docs** - Modifies `.specweave/docs/` files with actual implementation
|
|
21
|
+
3. **Status tracking** - Changes `[DRAFT]` � `[COMPLETE]` on doc sections
|
|
22
|
+
4. **Bidirectional links** - Maintains links between docs and increments
|
|
23
|
+
5. **Format adaptation** - Matches existing doc structure (features/ or modules/)
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
1. Read tasks.md � Find documentation tasks
|
|
29
|
+
2. Read implementation � Understand what changed
|
|
30
|
+
3. Update docs � Add real code examples, endpoints, configs
|
|
31
|
+
4. Mark complete � Change [DRAFT] to [COMPLETE]
|
|
32
|
+
5. Verify links � Ensure increment � doc references work
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Example
|
|
36
|
+
|
|
37
|
+
**tasks.md says:**
|
|
38
|
+
```markdown
|
|
39
|
+
**Documentation Updates**:
|
|
40
|
+
- [ ] .specweave/docs/features/payment.md [DRAFT]
|
|
41
|
+
- [ ] .specweave/docs/api/payments.md [DRAFT]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**docs-updater does:**
|
|
45
|
+
1. Reads payment implementation code
|
|
46
|
+
2. Updates `payment.md` with actual code examples
|
|
47
|
+
3. Updates API docs with real endpoints discovered in code
|
|
48
|
+
4. Changes status to `[COMPLETE]`
|
|
49
|
+
|
|
50
|
+
## Integration Points
|
|
51
|
+
|
|
52
|
+
- **Called by**: spec-generator, task completion hooks
|
|
53
|
+
- **Updates**: `.specweave/docs/**/*.md`
|
|
54
|
+
- **Reads**: `tasks.md`, implementation code
|
|
55
|
+
|
|
56
|
+
## Best Practices
|
|
57
|
+
|
|
58
|
+
- Run after completing feature tasks, not during
|
|
59
|
+
- Verify doc links are valid (use relative paths)
|
|
60
|
+
- Keep examples in sync with actual code
|
|
61
|
+
- Don't over-document - focus on what users need
|