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.
Files changed (144) hide show
  1. package/CHANGELOG.md +815 -13
  2. package/README.md +53 -2
  3. package/assets/schema.sql +6 -1
  4. package/dist/config/loader.d.ts +46 -0
  5. package/dist/config/loader.d.ts.map +1 -0
  6. package/dist/config/loader.js +151 -0
  7. package/dist/config/loader.js.map +1 -0
  8. package/dist/config/types.d.ts +77 -0
  9. package/dist/config/types.d.ts.map +1 -0
  10. package/dist/config/types.js +28 -0
  11. package/dist/config/types.js.map +1 -0
  12. package/dist/constants.d.ts +9 -0
  13. package/dist/constants.d.ts.map +1 -1
  14. package/dist/constants.js +10 -0
  15. package/dist/constants.js.map +1 -1
  16. package/dist/database.d.ts +1 -1
  17. package/dist/database.d.ts.map +1 -1
  18. package/dist/database.js +77 -10
  19. package/dist/database.js.map +1 -1
  20. package/dist/index.js +21 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +26 -0
  23. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +1 -0
  24. package/dist/migrations/add-v3.5.0-pruned-files.js +107 -0
  25. package/dist/migrations/add-v3.5.0-pruned-files.js.map +1 -0
  26. package/dist/migrations/index.d.ts +2 -1
  27. package/dist/migrations/index.d.ts.map +1 -1
  28. package/dist/migrations/index.js +16 -1
  29. package/dist/migrations/index.js.map +1 -1
  30. package/dist/tests/git-aware-completion.test.d.ts +6 -0
  31. package/dist/tests/git-aware-completion.test.d.ts.map +1 -0
  32. package/dist/tests/git-aware-completion.test.js +141 -0
  33. package/dist/tests/git-aware-completion.test.js.map +1 -0
  34. package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts +6 -0
  35. package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +1 -0
  36. package/dist/tests/tasks.auto-pruning-decision-link.test.js +250 -0
  37. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -0
  38. package/dist/tests/tasks.auto-pruning-partial.test.d.ts +6 -0
  39. package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +1 -0
  40. package/dist/tests/tasks.auto-pruning-partial.test.js +274 -0
  41. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -0
  42. package/dist/tests/tasks.auto-pruning-persistence.test.d.ts +6 -0
  43. package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +1 -0
  44. package/dist/tests/tasks.auto-pruning-persistence.test.js +232 -0
  45. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -0
  46. package/dist/tests/tasks.auto-pruning-safety.test.d.ts +12 -0
  47. package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +1 -0
  48. package/dist/tests/tasks.auto-pruning-safety.test.js +196 -0
  49. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -0
  50. package/dist/tests/tasks.link-file-backward-compat.test.d.ts +6 -0
  51. package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +1 -0
  52. package/dist/tests/tasks.link-file-backward-compat.test.js +235 -0
  53. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -0
  54. package/dist/tests/tasks.watch-files-action.test.d.ts +6 -0
  55. package/dist/tests/tasks.watch-files-action.test.d.ts.map +1 -0
  56. package/dist/tests/tasks.watch-files-action.test.js +351 -0
  57. package/dist/tests/tasks.watch-files-action.test.js.map +1 -0
  58. package/dist/tests/tasks.watch-files-parameter.test.d.ts +6 -0
  59. package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +1 -0
  60. package/dist/tests/tasks.watch-files-parameter.test.js +249 -0
  61. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -0
  62. package/dist/tests/two-step-git-completion.test.d.ts +6 -0
  63. package/dist/tests/two-step-git-completion.test.d.ts.map +1 -0
  64. package/dist/tests/two-step-git-completion.test.js +283 -0
  65. package/dist/tests/two-step-git-completion.test.js.map +1 -0
  66. package/dist/tests/vcs-staging.test.d.ts +6 -0
  67. package/dist/tests/vcs-staging.test.d.ts.map +1 -0
  68. package/dist/tests/vcs-staging.test.js +137 -0
  69. package/dist/tests/vcs-staging.test.js.map +1 -0
  70. package/dist/tools/config.d.ts +4 -2
  71. package/dist/tools/config.d.ts.map +1 -1
  72. package/dist/tools/config.js +13 -11
  73. package/dist/tools/config.js.map +1 -1
  74. package/dist/tools/constraints.d.ts +7 -4
  75. package/dist/tools/constraints.d.ts.map +1 -1
  76. package/dist/tools/constraints.js +19 -16
  77. package/dist/tools/constraints.js.map +1 -1
  78. package/dist/tools/context.d.ts +33 -17
  79. package/dist/tools/context.d.ts.map +1 -1
  80. package/dist/tools/context.js +84 -68
  81. package/dist/tools/context.js.map +1 -1
  82. package/dist/tools/files.d.ts +9 -5
  83. package/dist/tools/files.d.ts.map +1 -1
  84. package/dist/tools/files.js +19 -15
  85. package/dist/tools/files.js.map +1 -1
  86. package/dist/tools/messaging.d.ts +9 -5
  87. package/dist/tools/messaging.d.ts.map +1 -1
  88. package/dist/tools/messaging.js +20 -16
  89. package/dist/tools/messaging.js.map +1 -1
  90. package/dist/tools/tasks.d.ts +40 -12
  91. package/dist/tools/tasks.d.ts.map +1 -1
  92. package/dist/tools/tasks.js +475 -87
  93. package/dist/tools/tasks.js.map +1 -1
  94. package/dist/tools/utils.d.ts +11 -6
  95. package/dist/tools/utils.d.ts.map +1 -1
  96. package/dist/tools/utils.js +56 -44
  97. package/dist/tools/utils.js.map +1 -1
  98. package/dist/types.d.ts +4 -0
  99. package/dist/types.d.ts.map +1 -1
  100. package/dist/utils/file-pruning.d.ts +69 -0
  101. package/dist/utils/file-pruning.d.ts.map +1 -0
  102. package/dist/utils/file-pruning.js +185 -0
  103. package/dist/utils/file-pruning.js.map +1 -0
  104. package/dist/utils/quality-checks.d.ts +60 -0
  105. package/dist/utils/quality-checks.d.ts.map +1 -0
  106. package/dist/utils/quality-checks.js +228 -0
  107. package/dist/utils/quality-checks.js.map +1 -0
  108. package/dist/utils/retention.d.ts +8 -0
  109. package/dist/utils/retention.d.ts.map +1 -1
  110. package/dist/utils/retention.js +12 -0
  111. package/dist/utils/retention.js.map +1 -1
  112. package/dist/utils/task-stale-detection.d.ts +69 -1
  113. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  114. package/dist/utils/task-stale-detection.js +494 -17
  115. package/dist/utils/task-stale-detection.js.map +1 -1
  116. package/dist/utils/vcs-adapter.d.ts +68 -0
  117. package/dist/utils/vcs-adapter.d.ts.map +1 -0
  118. package/dist/utils/vcs-adapter.js +187 -0
  119. package/dist/utils/vcs-adapter.js.map +1 -0
  120. package/dist/watcher/file-watcher.d.ts +54 -4
  121. package/dist/watcher/file-watcher.d.ts.map +1 -1
  122. package/dist/watcher/file-watcher.js +312 -30
  123. package/dist/watcher/file-watcher.js.map +1 -1
  124. package/dist/watcher/gitignore-parser.d.ts +70 -0
  125. package/dist/watcher/gitignore-parser.d.ts.map +1 -0
  126. package/dist/watcher/gitignore-parser.js +191 -0
  127. package/dist/watcher/gitignore-parser.js.map +1 -0
  128. package/dist/watcher/index.d.ts +1 -0
  129. package/dist/watcher/index.d.ts.map +1 -1
  130. package/dist/watcher/index.js +1 -0
  131. package/dist/watcher/index.js.map +1 -1
  132. package/docs/AI_AGENT_GUIDE.md +1 -1
  133. package/docs/ARCHITECTURE.md +12 -0
  134. package/docs/AUTO_FILE_TRACKING.md +486 -82
  135. package/docs/CONFIGURATION.md +908 -0
  136. package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
  137. package/docs/MIGRATION_v3.3.md +602 -0
  138. package/docs/SHARED_CONCEPTS.md +2 -1
  139. package/docs/TASK_ACTIONS.md +12 -0
  140. package/docs/TASK_OVERVIEW.md +124 -23
  141. package/docs/TASK_PRUNING.md +589 -0
  142. package/docs/TASK_SYSTEM.md +83 -13
  143. package/docs/TOOL_REFERENCE.md +94 -6
  144. 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-based file watching with debouncing
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
- * Initialize and start the file watcher
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 (resolve relative paths, remove trailing slashes)
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;;;;;;;;;GASG;AAkBH;;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;IAEpC,OAAO;IAIP;;OAEG;WACW,WAAW,IAAI,WAAW;IAOxC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBlC;;OAEG;IACI,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAwCrG;;OAEG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAuB7D;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgB3C;;OAEG;YACW,gBAAgB;IAwE9B;;OAEG;YACW,uBAAuB;IA2FrC;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACI,SAAS,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB;CAOF"}
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"}