sqlew 3.6.3 → 3.6.6

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 (101) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/LICENSE +52 -52
  3. package/README.md +45 -3
  4. package/assets/config.example.toml +41 -0
  5. package/assets/sample-agents/README.md +38 -0
  6. package/assets/sample-agents/sqlew-architect.md +247 -0
  7. package/assets/sample-agents/sqlew-researcher.md +189 -0
  8. package/assets/sample-agents/sqlew-scrum-master.md +236 -0
  9. package/dist/config/loader.d.ts.map +1 -1
  10. package/dist/config/loader.js +13 -0
  11. package/dist/config/loader.js.map +1 -1
  12. package/dist/config/minimal-generator.d.ts +25 -0
  13. package/dist/config/minimal-generator.d.ts.map +1 -0
  14. package/dist/config/minimal-generator.js +103 -0
  15. package/dist/config/minimal-generator.js.map +1 -0
  16. package/dist/config/types.d.ts +13 -0
  17. package/dist/config/types.d.ts.map +1 -1
  18. package/dist/config/types.js +5 -0
  19. package/dist/config/types.js.map +1 -1
  20. package/dist/database.d.ts +6 -9
  21. package/dist/database.d.ts.map +1 -1
  22. package/dist/database.js +30 -106
  23. package/dist/database.js.map +1 -1
  24. package/dist/index.js +36 -72
  25. package/dist/index.js.map +1 -1
  26. package/dist/init-agents.d.ts +7 -0
  27. package/dist/init-agents.d.ts.map +1 -0
  28. package/dist/init-agents.js +207 -0
  29. package/dist/init-agents.js.map +1 -0
  30. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -1
  31. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js +49 -34
  32. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -1
  33. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -1
  34. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js +211 -175
  35. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -1
  36. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts +23 -0
  37. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
  38. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js +44 -0
  39. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
  40. package/dist/sync-agents.d.ts +13 -0
  41. package/dist/sync-agents.d.ts.map +1 -0
  42. package/dist/sync-agents.js +112 -0
  43. package/dist/sync-agents.js.map +1 -0
  44. package/dist/tests/all-features.test.js +0 -71
  45. package/dist/tests/all-features.test.js.map +1 -1
  46. package/dist/tests/parameter-validation.test.d.ts +8 -0
  47. package/dist/tests/parameter-validation.test.d.ts.map +1 -0
  48. package/dist/tests/parameter-validation.test.js +461 -0
  49. package/dist/tests/parameter-validation.test.js.map +1 -0
  50. package/dist/tools/constraints.d.ts.map +1 -1
  51. package/dist/tools/constraints.js +7 -8
  52. package/dist/tools/constraints.js.map +1 -1
  53. package/dist/tools/context.d.ts.map +1 -1
  54. package/dist/tools/context.js +68 -39
  55. package/dist/tools/context.js.map +1 -1
  56. package/dist/tools/files.d.ts.map +1 -1
  57. package/dist/tools/files.js +9 -7
  58. package/dist/tools/files.js.map +1 -1
  59. package/dist/tools/help-queries.d.ts.map +1 -1
  60. package/dist/tools/help-queries.js +20 -14
  61. package/dist/tools/help-queries.js.map +1 -1
  62. package/dist/tools/messaging.d.ts +4 -0
  63. package/dist/tools/messaging.d.ts.map +1 -1
  64. package/dist/tools/messaging.js +38 -0
  65. package/dist/tools/messaging.js.map +1 -1
  66. package/dist/tools/tasks.d.ts.map +1 -1
  67. package/dist/tools/tasks.js +13 -0
  68. package/dist/tools/tasks.js.map +1 -1
  69. package/dist/tools/utils.d.ts.map +1 -1
  70. package/dist/tools/utils.js +15 -12
  71. package/dist/tools/utils.js.map +1 -1
  72. package/dist/types.d.ts +93 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/utils/action-specs.d.ts +46 -0
  75. package/dist/utils/action-specs.d.ts.map +1 -0
  76. package/dist/utils/action-specs.js +527 -0
  77. package/dist/utils/action-specs.js.map +1 -0
  78. package/dist/utils/error-handler.d.ts.map +1 -1
  79. package/dist/utils/error-handler.js +41 -24
  80. package/dist/utils/error-handler.js.map +1 -1
  81. package/dist/utils/parameter-validator.d.ts +53 -0
  82. package/dist/utils/parameter-validator.d.ts.map +1 -0
  83. package/dist/utils/parameter-validator.js +286 -0
  84. package/dist/utils/parameter-validator.js.map +1 -0
  85. package/dist/watcher/file-watcher.d.ts +11 -5
  86. package/dist/watcher/file-watcher.d.ts.map +1 -1
  87. package/dist/watcher/file-watcher.js +43 -10
  88. package/dist/watcher/file-watcher.js.map +1 -1
  89. package/docs/BEST_PRACTICES.md +69 -0
  90. package/docs/CONFIGURATION.md +35 -19
  91. package/docs/SPECIALIZED_AGENTS.md +576 -0
  92. package/docs/TOOL_REFERENCE.md +178 -0
  93. package/package.json +86 -85
  94. package/dist/tests/agent-reuse.test.d.ts +0 -6
  95. package/dist/tests/agent-reuse.test.d.ts.map +0 -1
  96. package/dist/tests/agent-reuse.test.js +0 -242
  97. package/dist/tests/agent-reuse.test.js.map +0 -1
  98. package/dist/tools/config.d.ts +0 -50
  99. package/dist/tools/config.d.ts.map +0 -1
  100. package/dist/tools/config.js +0 -170
  101. package/dist/tools/config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Parameter Validation with Typo Detection for MCP Tools
3
+ *
4
+ * Provides comprehensive parameter validation with:
5
+ * - Missing required parameter detection
6
+ * - Typo suggestions using Levenshtein distance
7
+ * - Structured error messages with examples
8
+ * - Support for all sqlew MCP tools
9
+ *
10
+ * Usage:
11
+ * validateActionParams('decision', 'set', params);
12
+ * // Throws ValidationError with structured details if validation fails
13
+ */
14
+ import type { DecisionAction, TaskAction, FileAction, ConstraintAction, StatsAction, ConfigAction, MessageAction } from '../types.js';
15
+ /**
16
+ * Validate action parameters and throw structured error if invalid
17
+ *
18
+ * @param tool Tool name (e.g., 'decision', 'task', 'file', 'constraint', 'stats')
19
+ * @param action Action name (accepts both typed action enums and strings for backward compatibility)
20
+ * @param params Parameters provided by user
21
+ * @throws Error with structured ValidationError JSON if validation fails
22
+ */
23
+ export declare function validateActionParams(tool: string, action: DecisionAction | TaskAction | FileAction | ConstraintAction | StatsAction | ConfigAction | MessageAction | string, params: any): void;
24
+ /**
25
+ * Validate batch operation parameters
26
+ * Used by set_batch, record_batch, batch_create actions
27
+ *
28
+ * @param tool Tool name
29
+ * @param batchParamName Name of the batch array parameter (e.g., 'decisions', 'tasks', 'file_changes')
30
+ * @param items Array of items to validate
31
+ * @param itemAction Action name for each item (e.g., 'set' for decision items)
32
+ * @param maxItems Maximum allowed items (default: 50)
33
+ * @throws Error if batch validation fails
34
+ */
35
+ export declare function validateBatchParams(tool: string, batchParamName: string, items: any[], itemAction: string, maxItems?: number): void;
36
+ /**
37
+ * Get all available actions for a tool
38
+ * Useful for error messages suggesting alternatives
39
+ *
40
+ * @param tool Tool name
41
+ * @returns Array of available action names
42
+ */
43
+ export declare function getAvailableActions(tool: string): string[];
44
+ /**
45
+ * Suggest similar action names using Levenshtein distance
46
+ * Helps users when they misspell an action name
47
+ *
48
+ * @param tool Tool name
49
+ * @param providedAction Action name provided by user
50
+ * @returns Array of suggested action names (max 3)
51
+ */
52
+ export declare function suggestSimilarActions(tool: string, providedAction: string): string[];
53
+ //# sourceMappingURL=parameter-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-validator.d.ts","sourceRoot":"","sources":["../../src/utils/parameter-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAgKrB;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,MAAM,EACzH,MAAM,EAAE,GAAG,GACV,IAAI,CAmDN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,GAAG,EAAE,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAW,GACpB,IAAI,CAqCN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAcpF"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Parameter Validation with Typo Detection for MCP Tools
3
+ *
4
+ * Provides comprehensive parameter validation with:
5
+ * - Missing required parameter detection
6
+ * - Typo suggestions using Levenshtein distance
7
+ * - Structured error messages with examples
8
+ * - Support for all sqlew MCP tools
9
+ *
10
+ * Usage:
11
+ * validateActionParams('decision', 'set', params);
12
+ * // Throws ValidationError with structured details if validation fails
13
+ */
14
+ import { getActionSpec, ACTION_SPECS_BY_TOOL } from './action-specs.js';
15
+ /**
16
+ * Calculate Levenshtein distance between two strings
17
+ * Used for typo detection (e.g., "context_key" → "key")
18
+ *
19
+ * @param a First string
20
+ * @param b Second string
21
+ * @returns Edit distance (number of single-character edits needed)
22
+ */
23
+ function levenshteinDistance(a, b) {
24
+ if (a.length === 0)
25
+ return b.length;
26
+ if (b.length === 0)
27
+ return a.length;
28
+ const matrix = [];
29
+ // Initialize matrix
30
+ for (let i = 0; i <= b.length; i++) {
31
+ matrix[i] = [i];
32
+ }
33
+ for (let j = 0; j <= a.length; j++) {
34
+ matrix[0][j] = j;
35
+ }
36
+ // Fill matrix
37
+ for (let i = 1; i <= b.length; i++) {
38
+ for (let j = 1; j <= a.length; j++) {
39
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
40
+ matrix[i][j] = matrix[i - 1][j - 1];
41
+ }
42
+ else {
43
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
44
+ matrix[i][j - 1] + 1, // insertion
45
+ matrix[i - 1][j] + 1 // deletion
46
+ );
47
+ }
48
+ }
49
+ }
50
+ return matrix[b.length][a.length];
51
+ }
52
+ /**
53
+ * Common abbreviation patterns for AI parameter typos
54
+ * Maps abbreviated/shortened names to their full parameter names
55
+ */
56
+ const COMMON_ABBREVIATIONS = {
57
+ desc: ['description'],
58
+ val: ['value'],
59
+ prio: ['priority'],
60
+ pri: ['priority'],
61
+ config: ['configuration'],
62
+ msg: ['message'],
63
+ crit: ['criteria', 'critical'],
64
+ req: ['required'],
65
+ opt: ['optional'],
66
+ param: ['parameter', 'params'],
67
+ arg: ['argument', 'args'],
68
+ attr: ['attribute', 'attributes'],
69
+ prop: ['property', 'properties'],
70
+ stat: ['status', 'statistics'],
71
+ info: ['information'],
72
+ temp: ['template'],
73
+ rel: ['related', 'relation'],
74
+ deps: ['dependencies'],
75
+ dep: ['dependency'],
76
+ ref: ['reference'],
77
+ ctx: ['context'],
78
+ db: ['database'],
79
+ };
80
+ /**
81
+ * Check if provided parameter matches any common abbreviation pattern
82
+ *
83
+ * @param provided Parameter name provided by user (potentially abbreviated)
84
+ * @param validParams List of valid parameters to match against
85
+ * @returns Matched full parameter name, or null if no match
86
+ */
87
+ function checkAbbreviation(provided, validParams) {
88
+ const lowerProvided = provided.toLowerCase();
89
+ // Direct abbreviation match
90
+ if (COMMON_ABBREVIATIONS[lowerProvided]) {
91
+ for (const fullForm of COMMON_ABBREVIATIONS[lowerProvided]) {
92
+ // Check if any valid parameter contains this full form
93
+ const match = validParams.find(v => v.toLowerCase().includes(fullForm));
94
+ if (match) {
95
+ return match;
96
+ }
97
+ }
98
+ }
99
+ // Check if provided is a prefix abbreviation (e.g., "desc" → "description")
100
+ for (const valid of validParams) {
101
+ if (valid.length > provided.length &&
102
+ valid.toLowerCase().startsWith(lowerProvided) &&
103
+ provided.length >= 3) { // Minimum 3 chars for prefix matching
104
+ return valid;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ /**
110
+ * Find typo suggestions for provided parameters
111
+ * Uses:
112
+ * 1. Abbreviation dictionary for common AI shortcuts
113
+ * 2. Prefix matching for partial parameter names
114
+ * 3. Levenshtein distance ≤ 2 for typos
115
+ *
116
+ * @param providedParams Parameters actually provided by user
117
+ * @param validParams All valid parameters (required + optional)
118
+ * @returns Map of typo → suggested correction
119
+ */
120
+ function findTypoSuggestions(providedParams, validParams) {
121
+ const suggestions = {};
122
+ for (const provided of providedParams) {
123
+ // Skip 'action' parameter (always valid)
124
+ if (provided === 'action') {
125
+ continue;
126
+ }
127
+ // Skip if it's a valid parameter
128
+ if (validParams.includes(provided)) {
129
+ continue;
130
+ }
131
+ // 1. Check abbreviation dictionary first (highest priority)
132
+ const abbreviationMatch = checkAbbreviation(provided, validParams);
133
+ if (abbreviationMatch) {
134
+ suggestions[provided] = abbreviationMatch;
135
+ continue;
136
+ }
137
+ // 2. Find closest match within Levenshtein distance ≤ 2
138
+ let bestMatch = null;
139
+ let bestDistance = Infinity;
140
+ for (const valid of validParams) {
141
+ const distance = levenshteinDistance(provided.toLowerCase(), valid.toLowerCase());
142
+ if (distance <= 2 && distance < bestDistance) {
143
+ bestDistance = distance;
144
+ bestMatch = valid;
145
+ }
146
+ }
147
+ if (bestMatch) {
148
+ suggestions[provided] = bestMatch;
149
+ }
150
+ }
151
+ return suggestions;
152
+ }
153
+ /**
154
+ * Validate action parameters and throw structured error if invalid
155
+ *
156
+ * @param tool Tool name (e.g., 'decision', 'task', 'file', 'constraint', 'stats')
157
+ * @param action Action name (accepts both typed action enums and strings for backward compatibility)
158
+ * @param params Parameters provided by user
159
+ * @throws Error with structured ValidationError JSON if validation fails
160
+ */
161
+ export function validateActionParams(tool, action, params) {
162
+ // Skip validation for help actions
163
+ const helpActions = ['help', 'example', 'use_case', 'help_action', 'help_params',
164
+ 'help_tool', 'help_use_case', 'help_list_use_cases', 'help_next_actions'];
165
+ if (helpActions.includes(action)) {
166
+ return;
167
+ }
168
+ // Get action specification
169
+ const spec = getActionSpec(tool, action);
170
+ if (!spec) {
171
+ throw new Error(`Unknown action "${action}" for tool "${tool}". Use action: "help" to see available actions, or action: "use_case" for comprehensive scenarios.`);
172
+ }
173
+ // Check for missing required parameters
174
+ const missingParams = [];
175
+ for (const requiredParam of spec.required) {
176
+ if (params[requiredParam] === undefined || params[requiredParam] === null || params[requiredParam] === '') {
177
+ missingParams.push(requiredParam);
178
+ }
179
+ }
180
+ // Get all provided parameters (excluding 'action')
181
+ const providedParams = Object.keys(params).filter(p => p !== 'action');
182
+ // All valid parameters for this action
183
+ const allValidParams = [...spec.required, ...spec.optional];
184
+ // Find typo suggestions
185
+ const typoSuggestions = findTypoSuggestions(providedParams, allValidParams);
186
+ // If validation fails, throw structured error
187
+ if (missingParams.length > 0 || Object.keys(typoSuggestions).length > 0) {
188
+ const error = {
189
+ error: missingParams.length > 0
190
+ ? `Missing required parameter${missingParams.length > 1 ? 's' : ''} for action '${action}': ${missingParams.join(', ')}`
191
+ : `Invalid parameter name${Object.keys(typoSuggestions).length > 1 ? 's' : ''} detected`,
192
+ action: action,
193
+ missing_params: missingParams.length > 0 ? missingParams : undefined,
194
+ required_params: spec.required,
195
+ optional_params: spec.optional,
196
+ you_provided: providedParams,
197
+ did_you_mean: Object.keys(typoSuggestions).length > 0 ? typoSuggestions : undefined,
198
+ example: spec.example,
199
+ hint: spec.hint,
200
+ need_help: `For comprehensive scenarios and examples, try: ${tool}({ action: "use_case" })`
201
+ };
202
+ // Throw error with JSON-formatted details for easy parsing by AI agents
203
+ throw new Error(JSON.stringify(error, null, 2));
204
+ }
205
+ }
206
+ /**
207
+ * Validate batch operation parameters
208
+ * Used by set_batch, record_batch, batch_create actions
209
+ *
210
+ * @param tool Tool name
211
+ * @param batchParamName Name of the batch array parameter (e.g., 'decisions', 'tasks', 'file_changes')
212
+ * @param items Array of items to validate
213
+ * @param itemAction Action name for each item (e.g., 'set' for decision items)
214
+ * @param maxItems Maximum allowed items (default: 50)
215
+ * @throws Error if batch validation fails
216
+ */
217
+ export function validateBatchParams(tool, batchParamName, items, itemAction, maxItems = 50) {
218
+ // Check if batch parameter exists and is an array
219
+ if (!items || !Array.isArray(items)) {
220
+ throw new Error(`Parameter "${batchParamName}" is required and must be an array`);
221
+ }
222
+ // Check array is not empty
223
+ if (items.length === 0) {
224
+ // Allow empty arrays (will return empty success response)
225
+ return;
226
+ }
227
+ // Check max items constraint
228
+ if (items.length > maxItems) {
229
+ throw new Error(`Parameter "${batchParamName}" must contain at most ${maxItems} items (got ${items.length})`);
230
+ }
231
+ // Validate each item in the batch
232
+ const itemErrors = [];
233
+ for (let i = 0; i < items.length; i++) {
234
+ try {
235
+ validateActionParams(tool, itemAction, items[i]);
236
+ }
237
+ catch (error) {
238
+ const message = error instanceof Error ? error.message : String(error);
239
+ itemErrors.push({
240
+ index: i,
241
+ error: message
242
+ });
243
+ }
244
+ }
245
+ // If any items have validation errors, throw aggregate error
246
+ if (itemErrors.length > 0) {
247
+ const errorSummary = itemErrors.map(e => `Item ${e.index}: ${e.error}`).join('\n');
248
+ throw new Error(`Batch validation failed for ${itemErrors.length} item(s):\n${errorSummary}`);
249
+ }
250
+ }
251
+ /**
252
+ * Get all available actions for a tool
253
+ * Useful for error messages suggesting alternatives
254
+ *
255
+ * @param tool Tool name
256
+ * @returns Array of available action names
257
+ */
258
+ export function getAvailableActions(tool) {
259
+ const toolSpecs = ACTION_SPECS_BY_TOOL[tool];
260
+ if (!toolSpecs) {
261
+ return [];
262
+ }
263
+ return Object.keys(toolSpecs);
264
+ }
265
+ /**
266
+ * Suggest similar action names using Levenshtein distance
267
+ * Helps users when they misspell an action name
268
+ *
269
+ * @param tool Tool name
270
+ * @param providedAction Action name provided by user
271
+ * @returns Array of suggested action names (max 3)
272
+ */
273
+ export function suggestSimilarActions(tool, providedAction) {
274
+ const availableActions = getAvailableActions(tool);
275
+ const scored = availableActions.map(action => ({
276
+ action,
277
+ distance: levenshteinDistance(providedAction.toLowerCase(), action.toLowerCase())
278
+ }));
279
+ // Sort by distance and return top 3 within distance ≤ 3
280
+ return scored
281
+ .filter(item => item.distance <= 3)
282
+ .sort((a, b) => a.distance - b.distance)
283
+ .slice(0, 3)
284
+ .map(item => item.action);
285
+ }
286
+ //# sourceMappingURL=parameter-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-validator.js","sourceRoot":"","sources":["../../src/utils/parameter-validator.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export declare class FileWatcher {
25
25
  private lastModifiedTimes;
26
26
  private filesModifiedSet;
27
27
  private vcsDetectionInterval;
28
+ private stagingPollInterval;
28
29
  private constructor();
29
30
  /**
30
31
  * Get singleton instance
@@ -35,7 +36,7 @@ export declare class FileWatcher {
35
36
  */
36
37
  private isWSL;
37
38
  /**
38
- * Initialize and start the file watcher (v3.5.1 - Chokidar v4)
39
+ * Initialize and start the file watcher (Chokidar v4)
39
40
  */
40
41
  start(): Promise<void>;
41
42
  /**
@@ -59,14 +60,14 @@ export declare class FileWatcher {
59
60
  */
60
61
  private isVCSIndexFile;
61
62
  /**
62
- * Get VCS index file path for given VCS type (v3.5.3)
63
+ * Get VCS index file path for given VCS type
63
64
  * Centralized mapping for easier extension to Mercurial/SVN
64
65
  * @param vcsType - VCS type string (Git, Mercurial, SVN)
65
66
  * @returns Absolute path to VCS index file, or null if VCS has no local index
66
67
  */
67
68
  private getVCSIndexPath;
68
69
  /**
69
- * Re-detect VCS and start watching index files (v3.5.3)
70
+ * Re-detect VCS and start watching index files
70
71
  * Called when VCS might be initialized after watcher starts
71
72
  * Public method for external triggering (e.g., after git init)
72
73
  */
@@ -80,12 +81,17 @@ export declare class FileWatcher {
80
81
  */
81
82
  private handleFileChange;
82
83
  /**
83
- * Handle VCS index file change - triggers two-step Git-aware workflow (v3.5.2)
84
+ * Handle VCS index file change - triggers two-step Git-aware workflow
84
85
  * Step 1: Staging (git add) → waiting_review → done
85
86
  * Step 2: Commit (git commit) → done → archived
86
- * Fallback: If files already committed (not in staging), use v3.4.0 logic
87
+ * Fallback: If files already committed (not in staging), use legacy logic
87
88
  */
88
89
  private handleVCSIndexChange;
90
+ /**
91
+ * Poll staging area for changes (WSL workaround)
92
+ * Called periodically on WSL where chokidar doesn't reliably detect .git/index changes
93
+ */
94
+ private pollStagingArea;
89
95
  /**
90
96
  * Check acceptance criteria and auto-complete task if all pass
91
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../../src/watcher/file-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqCH;;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;IAuF9B;;;;;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;IA6GxC;;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;AAqCH;;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;IAC3D,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,OAAO;IAMP;;OAEG;WACW,WAAW,IAAI,WAAW;IAOxC;;OAEG;IACH,OAAO,CAAC,KAAK;IASb;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+FnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwClC;;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;IAuF9B;;;;;OAKG;YACW,oBAAoB;IAsClC;;;OAGG;YACW,eAAe;IAiB7B;;OAEG;YACW,uBAAuB;IA2FrC;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;;;;;;;;OASG;YACW,0BAA0B;IA6GxC;;OAEG;IACI,SAAS,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB;CAOF"}
@@ -47,7 +47,8 @@ export class FileWatcher {
47
47
  projectRoot;
48
48
  lastModifiedTimes = new Map(); // taskId -> timestamp
49
49
  filesModifiedSet = new Map(); // taskId -> modified files
50
- vcsDetectionInterval = null; // Periodic VCS re-detection (v3.5.3)
50
+ vcsDetectionInterval = null; // Periodic VCS re-detection
51
+ stagingPollInterval = null; // WSL staging detection polling
51
52
  constructor() {
52
53
  // Private constructor for singleton
53
54
  // Determine project root (current working directory)
@@ -75,7 +76,7 @@ export class FileWatcher {
75
76
  }
76
77
  }
77
78
  /**
78
- * Initialize and start the file watcher (v3.5.1 - Chokidar v4)
79
+ * Initialize and start the file watcher (Chokidar v4)
79
80
  */
80
81
  async start() {
81
82
  if (this.isRunning) {
@@ -135,14 +136,22 @@ export class FileWatcher {
135
136
  // Initialize tracking maps
136
137
  this.lastModifiedTimes.clear();
137
138
  this.filesModifiedSet.clear();
138
- // Watch VCS index files for commit detection (v3.4.0 VCS-aware auto-complete)
139
+ // Watch VCS index files for commit detection (VCS-aware auto-complete)
139
140
  await this.watchVCSIndexFiles();
140
- // Periodic VCS re-detection (v3.5.3)
141
+ // Periodic VCS re-detection
141
142
  // Handles case where git is initialized after watcher starts
142
143
  // Check every 5 minutes for new VCS initialization
143
144
  this.vcsDetectionInterval = setInterval(async () => {
144
145
  await this.refreshVCSWatching();
145
146
  }, 5 * 60 * 1000); // 5 minutes
147
+ // WSL-specific: Periodic staging detection
148
+ // Workaround for chokidar not reliably detecting .git/index changes on WSL
149
+ if (isWSL) {
150
+ this.stagingPollInterval = setInterval(async () => {
151
+ await this.pollStagingArea();
152
+ }, 1000); // Poll every 1 second
153
+ console.error('✓ WSL periodic staging detection enabled (1s interval)');
154
+ }
146
155
  this.isRunning = true;
147
156
  console.error('✓ File watcher started successfully');
148
157
  console.error(` Project root: ${this.projectRoot}`);
@@ -168,11 +177,16 @@ export class FileWatcher {
168
177
  // Clear tracking maps
169
178
  this.lastModifiedTimes.clear();
170
179
  this.filesModifiedSet.clear();
171
- // Clear VCS detection interval (v3.5.3)
180
+ // Clear VCS detection interval
172
181
  if (this.vcsDetectionInterval) {
173
182
  clearInterval(this.vcsDetectionInterval);
174
183
  this.vcsDetectionInterval = null;
175
184
  }
185
+ // Clear WSL staging poll interval
186
+ if (this.stagingPollInterval) {
187
+ clearInterval(this.stagingPollInterval);
188
+ this.stagingPollInterval = null;
189
+ }
176
190
  // Close watcher
177
191
  if (this.watcher) {
178
192
  await this.watcher.close();
@@ -265,7 +279,7 @@ export class FileWatcher {
265
279
  return false;
266
280
  }
267
281
  /**
268
- * Get VCS index file path for given VCS type (v3.5.3)
282
+ * Get VCS index file path for given VCS type
269
283
  * Centralized mapping for easier extension to Mercurial/SVN
270
284
  * @param vcsType - VCS type string (Git, Mercurial, SVN)
271
285
  * @returns Absolute path to VCS index file, or null if VCS has no local index
@@ -279,7 +293,7 @@ export class FileWatcher {
279
293
  return vcsIndexPaths[vcsType] || null;
280
294
  }
281
295
  /**
282
- * Re-detect VCS and start watching index files (v3.5.3)
296
+ * Re-detect VCS and start watching index files
283
297
  * Called when VCS might be initialized after watcher starts
284
298
  * Public method for external triggering (e.g., after git init)
285
299
  */
@@ -309,7 +323,7 @@ export class FileWatcher {
309
323
  }
310
324
  if (existsSync(indexPath) && this.watcher) {
311
325
  this.watcher.add(indexPath);
312
- console.error(`✓ Watching ${indexPath} for ${vcsType} commits (v3.5.3)`);
326
+ console.error(`✓ Watching ${indexPath} for ${vcsType} commits`);
313
327
  }
314
328
  else if (!existsSync(indexPath)) {
315
329
  console.error(`⚠ ${vcsType} index file not found: ${indexPath}`);
@@ -389,10 +403,10 @@ export class FileWatcher {
389
403
  }
390
404
  }
391
405
  /**
392
- * Handle VCS index file change - triggers two-step Git-aware workflow (v3.5.2)
406
+ * Handle VCS index file change - triggers two-step Git-aware workflow
393
407
  * Step 1: Staging (git add) → waiting_review → done
394
408
  * Step 2: Commit (git commit) → done → archived
395
- * Fallback: If files already committed (not in staging), use v3.4.0 logic
409
+ * Fallback: If files already committed (not in staging), use legacy logic
396
410
  */
397
411
  async handleVCSIndexChange(filePath) {
398
412
  console.error('\n🔄 VCS index changed - checking for tasks ready to auto-transition');
@@ -427,6 +441,25 @@ export class FileWatcher {
427
441
  console.error(` ✗ Error during VCS-aware auto-transition:`, error);
428
442
  }
429
443
  }
444
+ /**
445
+ * Poll staging area for changes (WSL workaround)
446
+ * Called periodically on WSL where chokidar doesn't reliably detect .git/index changes
447
+ */
448
+ async pollStagingArea() {
449
+ try {
450
+ const db = getAdapter();
451
+ const { detectAndCompleteOnStaging } = await import('../utils/task-stale-detection.js');
452
+ const completedCount = await detectAndCompleteOnStaging(db);
453
+ // Only log if tasks were actually completed (reduce noise)
454
+ if (completedCount > 0) {
455
+ console.error(`\n🔄 WSL polling detected staging → ${completedCount} task(s) auto-completed`);
456
+ }
457
+ }
458
+ catch (error) {
459
+ // Silently ignore errors to avoid spamming console
460
+ // The next poll will retry
461
+ }
462
+ }
430
463
  /**
431
464
  * Check acceptance criteria and auto-complete task if all pass
432
465
  */