sqlew 3.2.5 → 3.5.3
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/CHANGELOG.md +815 -13
- package/README.md +53 -2
- package/assets/schema.sql +6 -1
- package/dist/config/loader.d.ts +46 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +151 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +28 -0
- package/dist/config/types.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/database.d.ts +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +77 -10
- package/dist/database.js.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts +26 -0
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +1 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js +107 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js.map +1 -0
- package/dist/migrations/index.d.ts +2 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +16 -1
- package/dist/migrations/index.js.map +1 -1
- package/dist/tests/git-aware-completion.test.d.ts +6 -0
- package/dist/tests/git-aware-completion.test.d.ts.map +1 -0
- package/dist/tests/git-aware-completion.test.js +141 -0
- package/dist/tests/git-aware-completion.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +250 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js +274 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js +232 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts +12 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js +196 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts +6 -0
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js +235 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.js +351 -0
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.js +249 -0
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -0
- package/dist/tests/two-step-git-completion.test.d.ts +6 -0
- package/dist/tests/two-step-git-completion.test.d.ts.map +1 -0
- package/dist/tests/two-step-git-completion.test.js +283 -0
- package/dist/tests/two-step-git-completion.test.js.map +1 -0
- package/dist/tests/vcs-staging.test.d.ts +6 -0
- package/dist/tests/vcs-staging.test.d.ts.map +1 -0
- package/dist/tests/vcs-staging.test.js +137 -0
- package/dist/tests/vcs-staging.test.js.map +1 -0
- package/dist/tools/config.d.ts +4 -2
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +13 -11
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +7 -4
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +19 -16
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +33 -17
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +84 -68
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +9 -5
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +19 -15
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/messaging.d.ts +9 -5
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +20 -16
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +40 -12
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +475 -87
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +11 -6
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +56 -44
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/file-pruning.d.ts +69 -0
- package/dist/utils/file-pruning.d.ts.map +1 -0
- package/dist/utils/file-pruning.js +185 -0
- package/dist/utils/file-pruning.js.map +1 -0
- package/dist/utils/quality-checks.d.ts +60 -0
- package/dist/utils/quality-checks.d.ts.map +1 -0
- package/dist/utils/quality-checks.js +228 -0
- package/dist/utils/quality-checks.js.map +1 -0
- package/dist/utils/retention.d.ts +8 -0
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +12 -0
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +69 -1
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +494 -17
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/vcs-adapter.d.ts +68 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -0
- package/dist/utils/vcs-adapter.js +187 -0
- package/dist/utils/vcs-adapter.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts +54 -4
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +312 -30
- package/dist/watcher/file-watcher.js.map +1 -1
- package/dist/watcher/gitignore-parser.d.ts +70 -0
- package/dist/watcher/gitignore-parser.d.ts.map +1 -0
- package/dist/watcher/gitignore-parser.js +191 -0
- package/dist/watcher/gitignore-parser.js.map +1 -0
- package/dist/watcher/index.d.ts +1 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +1 -0
- package/dist/watcher/index.js.map +1 -1
- package/docs/AI_AGENT_GUIDE.md +1 -1
- package/docs/ARCHITECTURE.md +12 -0
- package/docs/AUTO_FILE_TRACKING.md +486 -82
- package/docs/CONFIGURATION.md +908 -0
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
- package/docs/MIGRATION_v3.3.md +602 -0
- package/docs/SHARED_CONCEPTS.md +2 -1
- package/docs/TASK_ACTIONS.md +12 -0
- package/docs/TASK_OVERVIEW.md +124 -23
- package/docs/TASK_PRUNING.md +589 -0
- package/docs/TASK_SYSTEM.md +83 -13
- package/docs/TOOL_REFERENCE.md +94 -6
- package/package.json +8 -6
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VCS Adapter Interface
|
|
3
|
+
*
|
|
4
|
+
* Provides abstraction layer for version control systems to support
|
|
5
|
+
* git-aware auto-complete across multiple VCS platforms.
|
|
6
|
+
*/
|
|
7
|
+
export interface VCSAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Check if the current directory is a valid VCS repository
|
|
10
|
+
*/
|
|
11
|
+
isRepository(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Get list of files committed since a given timestamp
|
|
14
|
+
* @param sinceTimestamp ISO 8601 timestamp
|
|
15
|
+
* @returns Array of committed file paths
|
|
16
|
+
*/
|
|
17
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Get list of files currently staged (ready to commit)
|
|
20
|
+
* @returns Array of staged file paths
|
|
21
|
+
*/
|
|
22
|
+
getStagedFiles(): Promise<string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the VCS type name (for logging)
|
|
25
|
+
*/
|
|
26
|
+
getVCSType(): string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Git VCS Adapter
|
|
30
|
+
*/
|
|
31
|
+
export declare class GitAdapter implements VCSAdapter {
|
|
32
|
+
private projectRoot;
|
|
33
|
+
constructor(projectRoot: string);
|
|
34
|
+
isRepository(): Promise<boolean>;
|
|
35
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
36
|
+
getStagedFiles(): Promise<string[]>;
|
|
37
|
+
getVCSType(): string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* SVN (Subversion) VCS Adapter
|
|
41
|
+
*/
|
|
42
|
+
export declare class SVNAdapter implements VCSAdapter {
|
|
43
|
+
private projectRoot;
|
|
44
|
+
constructor(projectRoot: string);
|
|
45
|
+
isRepository(): Promise<boolean>;
|
|
46
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
47
|
+
getStagedFiles(): Promise<string[]>;
|
|
48
|
+
getVCSType(): string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mercurial (hg) VCS Adapter
|
|
52
|
+
*/
|
|
53
|
+
export declare class MercurialAdapter implements VCSAdapter {
|
|
54
|
+
private projectRoot;
|
|
55
|
+
constructor(projectRoot: string);
|
|
56
|
+
isRepository(): Promise<boolean>;
|
|
57
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
58
|
+
getStagedFiles(): Promise<string[]>;
|
|
59
|
+
getVCSType(): string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Auto-detect and create appropriate VCS adapter
|
|
63
|
+
*
|
|
64
|
+
* Detection order: Git → Mercurial → SVN
|
|
65
|
+
* (Most common to least common in modern development)
|
|
66
|
+
*/
|
|
67
|
+
export declare function detectVCS(projectRoot: string): Promise<VCSAdapter | null>;
|
|
68
|
+
//# sourceMappingURL=vcs-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcs-adapter.d.ts","sourceRoot":"","sources":["../../src/utils/vcs-adapter.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAElE;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAajE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBjE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBjE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAqB/E"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { promisify } from 'util';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
/**
|
|
5
|
+
* Git VCS Adapter
|
|
6
|
+
*/
|
|
7
|
+
export class GitAdapter {
|
|
8
|
+
projectRoot;
|
|
9
|
+
constructor(projectRoot) {
|
|
10
|
+
this.projectRoot = projectRoot;
|
|
11
|
+
}
|
|
12
|
+
async isRepository() {
|
|
13
|
+
try {
|
|
14
|
+
await execAsync('git rev-parse --git-dir', { cwd: this.projectRoot });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
22
|
+
const gitCommand = `git log --since="${sinceTimestamp}" --name-only --pretty=format:""`;
|
|
23
|
+
const { stdout } = await execAsync(gitCommand, { cwd: this.projectRoot });
|
|
24
|
+
const committedFiles = stdout
|
|
25
|
+
.split('\n')
|
|
26
|
+
.map(line => line.trim())
|
|
27
|
+
.filter(line => line.length > 0);
|
|
28
|
+
// Remove duplicates
|
|
29
|
+
return [...new Set(committedFiles)];
|
|
30
|
+
}
|
|
31
|
+
async getStagedFiles() {
|
|
32
|
+
try {
|
|
33
|
+
const gitCommand = 'git diff --cached --name-only';
|
|
34
|
+
const { stdout } = await execAsync(gitCommand, { cwd: this.projectRoot });
|
|
35
|
+
const stagedFiles = stdout
|
|
36
|
+
.split('\n')
|
|
37
|
+
.map(line => line.trim())
|
|
38
|
+
.filter(line => line.length > 0);
|
|
39
|
+
return stagedFiles;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Not in a git repo or error occurred
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getVCSType() {
|
|
47
|
+
return 'Git';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* SVN (Subversion) VCS Adapter
|
|
52
|
+
*/
|
|
53
|
+
export class SVNAdapter {
|
|
54
|
+
projectRoot;
|
|
55
|
+
constructor(projectRoot) {
|
|
56
|
+
this.projectRoot = projectRoot;
|
|
57
|
+
}
|
|
58
|
+
async isRepository() {
|
|
59
|
+
try {
|
|
60
|
+
await execAsync('svn info', { cwd: this.projectRoot });
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
68
|
+
// Convert ISO timestamp to SVN revision range
|
|
69
|
+
const date = new Date(sinceTimestamp);
|
|
70
|
+
const svnDate = date.toISOString().split('.')[0] + 'Z';
|
|
71
|
+
// Get log with changed paths since the date
|
|
72
|
+
const svnCommand = `svn log -v --xml -r {${svnDate}}:HEAD`;
|
|
73
|
+
const { stdout } = await execAsync(svnCommand, { cwd: this.projectRoot });
|
|
74
|
+
// Parse XML to extract file paths
|
|
75
|
+
const pathMatches = stdout.matchAll(/<path[^>]*>([^<]+)<\/path>/g);
|
|
76
|
+
const committedFiles = Array.from(pathMatches, match => match[1])
|
|
77
|
+
.map(path => path.replace(/^\//, '')); // Remove leading slash
|
|
78
|
+
// Remove duplicates
|
|
79
|
+
return [...new Set(committedFiles)];
|
|
80
|
+
}
|
|
81
|
+
async getStagedFiles() {
|
|
82
|
+
try {
|
|
83
|
+
// SVN doesn't have a staging area - all changes are "staged"
|
|
84
|
+
// Get modified (M) and added (A) files
|
|
85
|
+
const svnCommand = 'svn status';
|
|
86
|
+
const { stdout } = await execAsync(svnCommand, { cwd: this.projectRoot });
|
|
87
|
+
const stagedFiles = stdout
|
|
88
|
+
.split('\n')
|
|
89
|
+
.filter(line => {
|
|
90
|
+
const trimmed = line.trim();
|
|
91
|
+
return trimmed.startsWith('M ') || trimmed.startsWith('A ');
|
|
92
|
+
})
|
|
93
|
+
.map(line => line.substring(2).trim()) // Remove status prefix
|
|
94
|
+
.filter(path => path.length > 0);
|
|
95
|
+
return stagedFiles;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Not in an SVN repo or error occurred
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getVCSType() {
|
|
103
|
+
return 'SVN';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Mercurial (hg) VCS Adapter
|
|
108
|
+
*/
|
|
109
|
+
export class MercurialAdapter {
|
|
110
|
+
projectRoot;
|
|
111
|
+
constructor(projectRoot) {
|
|
112
|
+
this.projectRoot = projectRoot;
|
|
113
|
+
}
|
|
114
|
+
async isRepository() {
|
|
115
|
+
try {
|
|
116
|
+
await execAsync('hg root', { cwd: this.projectRoot });
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
124
|
+
// Convert ISO timestamp to Mercurial date format
|
|
125
|
+
const date = new Date(sinceTimestamp);
|
|
126
|
+
const hgDate = date.toISOString().split('T')[0]; // YYYY-MM-DD
|
|
127
|
+
// Get files changed since date
|
|
128
|
+
const hgCommand = `hg log --style default --template "{files}\\n" -d ">${hgDate}"`;
|
|
129
|
+
const { stdout } = await execAsync(hgCommand, { cwd: this.projectRoot });
|
|
130
|
+
const committedFiles = stdout
|
|
131
|
+
.split('\n')
|
|
132
|
+
.flatMap(line => line.split(' '))
|
|
133
|
+
.map(file => file.trim())
|
|
134
|
+
.filter(file => file.length > 0);
|
|
135
|
+
// Remove duplicates
|
|
136
|
+
return [...new Set(committedFiles)];
|
|
137
|
+
}
|
|
138
|
+
async getStagedFiles() {
|
|
139
|
+
try {
|
|
140
|
+
// Get modified (M), added (A), and removed (R) files in working directory
|
|
141
|
+
const hgCommand = 'hg status -m -a -r';
|
|
142
|
+
const { stdout } = await execAsync(hgCommand, { cwd: this.projectRoot });
|
|
143
|
+
const stagedFiles = stdout
|
|
144
|
+
.split('\n')
|
|
145
|
+
.filter(line => {
|
|
146
|
+
const trimmed = line.trim();
|
|
147
|
+
return trimmed.startsWith('M ') || trimmed.startsWith('A ') || trimmed.startsWith('R ');
|
|
148
|
+
})
|
|
149
|
+
.map(line => line.substring(2).trim()) // Remove status prefix
|
|
150
|
+
.filter(path => path.length > 0);
|
|
151
|
+
return stagedFiles;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Not in a Mercurial repo or error occurred
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
getVCSType() {
|
|
159
|
+
return 'Mercurial';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Auto-detect and create appropriate VCS adapter
|
|
164
|
+
*
|
|
165
|
+
* Detection order: Git → Mercurial → SVN
|
|
166
|
+
* (Most common to least common in modern development)
|
|
167
|
+
*/
|
|
168
|
+
export async function detectVCS(projectRoot) {
|
|
169
|
+
// Try Git first (most common)
|
|
170
|
+
const gitAdapter = new GitAdapter(projectRoot);
|
|
171
|
+
if (await gitAdapter.isRepository()) {
|
|
172
|
+
return gitAdapter;
|
|
173
|
+
}
|
|
174
|
+
// Try Mercurial
|
|
175
|
+
const hgAdapter = new MercurialAdapter(projectRoot);
|
|
176
|
+
if (await hgAdapter.isRepository()) {
|
|
177
|
+
return hgAdapter;
|
|
178
|
+
}
|
|
179
|
+
// Try SVN
|
|
180
|
+
const svnAdapter = new SVNAdapter(projectRoot);
|
|
181
|
+
if (await svnAdapter.isRepository()) {
|
|
182
|
+
return svnAdapter;
|
|
183
|
+
}
|
|
184
|
+
// No VCS detected
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=vcs-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcs-adapter.js","sourceRoot":"","sources":["../../src/utils/vcs-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* File Watcher - Auto-tracking file changes linked to tasks
|
|
3
3
|
* Monitors files and auto-transitions task status on file modification
|
|
4
4
|
*
|
|
5
|
-
* Features:
|
|
6
|
-
* - chokidar
|
|
5
|
+
* Features (v3.5.1):
|
|
6
|
+
* - chokidar v4 file watching with automatic WSL support
|
|
7
|
+
* - Project root watching with .gitignore support
|
|
7
8
|
* - Dynamic file registration (add/remove files at runtime)
|
|
8
9
|
* - Auto-transition: todo → in_progress on file change
|
|
9
10
|
* - Maps file paths → task IDs for efficient lookup
|
|
11
|
+
* - Respects .gitignore patterns and built-in ignore rules
|
|
10
12
|
*/
|
|
11
13
|
/**
|
|
12
14
|
* FileWatcher class - Singleton pattern
|
|
@@ -18,13 +20,22 @@ export declare class FileWatcher {
|
|
|
18
20
|
private isRunning;
|
|
19
21
|
private debounceTimers;
|
|
20
22
|
private readonly DEBOUNCE_MS;
|
|
23
|
+
private gitignoreParser;
|
|
24
|
+
private projectRoot;
|
|
25
|
+
private lastModifiedTimes;
|
|
26
|
+
private filesModifiedSet;
|
|
27
|
+
private vcsDetectionInterval;
|
|
21
28
|
private constructor();
|
|
22
29
|
/**
|
|
23
30
|
* Get singleton instance
|
|
24
31
|
*/
|
|
25
32
|
static getInstance(): FileWatcher;
|
|
26
33
|
/**
|
|
27
|
-
*
|
|
34
|
+
* Detect if running on WSL (Windows Subsystem for Linux)
|
|
35
|
+
*/
|
|
36
|
+
private isWSL;
|
|
37
|
+
/**
|
|
38
|
+
* Initialize and start the file watcher (v3.5.1 - Chokidar v4)
|
|
28
39
|
*/
|
|
29
40
|
start(): Promise<void>;
|
|
30
41
|
/**
|
|
@@ -43,10 +54,38 @@ export declare class FileWatcher {
|
|
|
43
54
|
* Unregister all files for a specific task
|
|
44
55
|
*/
|
|
45
56
|
unregisterTask(taskId: number): void;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a path is a VCS index file
|
|
59
|
+
*/
|
|
60
|
+
private isVCSIndexFile;
|
|
61
|
+
/**
|
|
62
|
+
* Get VCS index file path for given VCS type (v3.5.3)
|
|
63
|
+
* Centralized mapping for easier extension to Mercurial/SVN
|
|
64
|
+
* @param vcsType - VCS type string (Git, Mercurial, SVN)
|
|
65
|
+
* @returns Absolute path to VCS index file, or null if VCS has no local index
|
|
66
|
+
*/
|
|
67
|
+
private getVCSIndexPath;
|
|
68
|
+
/**
|
|
69
|
+
* Re-detect VCS and start watching index files (v3.5.3)
|
|
70
|
+
* Called when VCS might be initialized after watcher starts
|
|
71
|
+
* Public method for external triggering (e.g., after git init)
|
|
72
|
+
*/
|
|
73
|
+
refreshVCSWatching(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Watch VCS index files for commit detection
|
|
76
|
+
*/
|
|
77
|
+
private watchVCSIndexFiles;
|
|
46
78
|
/**
|
|
47
79
|
* Handle file change event
|
|
48
80
|
*/
|
|
49
81
|
private handleFileChange;
|
|
82
|
+
/**
|
|
83
|
+
* Handle VCS index file change - triggers two-step Git-aware workflow (v3.5.2)
|
|
84
|
+
* Step 1: Staging (git add) → waiting_review → done
|
|
85
|
+
* Step 2: Commit (git commit) → done → archived
|
|
86
|
+
* Fallback: If files already committed (not in staging), use v3.4.0 logic
|
|
87
|
+
*/
|
|
88
|
+
private handleVCSIndexChange;
|
|
50
89
|
/**
|
|
51
90
|
* Check acceptance criteria and auto-complete task if all pass
|
|
52
91
|
*/
|
|
@@ -56,13 +95,24 @@ export declare class FileWatcher {
|
|
|
56
95
|
*/
|
|
57
96
|
private loadTaskFileLinks;
|
|
58
97
|
/**
|
|
59
|
-
* Normalize file path (
|
|
98
|
+
* Normalize file path (convert to relative path from project root, remove trailing slashes)
|
|
60
99
|
*/
|
|
61
100
|
private normalizePath;
|
|
62
101
|
/**
|
|
63
102
|
* Get total count of tasks being watched
|
|
64
103
|
*/
|
|
65
104
|
private getTotalTaskCount;
|
|
105
|
+
/**
|
|
106
|
+
* Check if task is ready for review and transition if conditions met
|
|
107
|
+
* Quality gates:
|
|
108
|
+
* - All watched files modified at least once
|
|
109
|
+
* - TypeScript compiles without errors (if .ts files)
|
|
110
|
+
* - Tests pass (if test files exist)
|
|
111
|
+
* - Idle for configured time (default 15 minutes)
|
|
112
|
+
*
|
|
113
|
+
* @param taskId - Task ID to check
|
|
114
|
+
*/
|
|
115
|
+
private checkAndTransitionToReview;
|
|
66
116
|
/**
|
|
67
117
|
* Get current watcher status
|
|
68
118
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../../src/watcher/file-watcher.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../../src/watcher/file-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,oBAAoB,CAA+B;IAE3D,OAAO;IAMP;;OAEG;WACW,WAAW,IAAI,WAAW;IAOxC;;OAEG;IACH,OAAO,CAAC,KAAK;IASb;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsFnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkClC;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA4BrG;;OAEG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAoB7D;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;OAIG;IACU,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhD;;OAEG;YACW,kBAAkB;IAyBhC;;OAEG;YACW,gBAAgB;IAsF9B;;;;;OAKG;YACW,oBAAoB;IAsClC;;OAEG;YACW,uBAAuB;IA2FrC;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;;;;;OASG;YACW,0BAA0B;IA4GxC;;OAEG;IACI,SAAS,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB;CAOF"}
|