sqlew 3.2.4 → 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 +843 -0
- 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 +84 -15
- 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/validators.d.ts +2 -2
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +11 -2
- package/dist/utils/validators.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,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Task watch_files action (v3.4.1)
|
|
3
|
+
* Tests the new watch_files action: watch, unwatch, list
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, beforeEach } from 'node:test';
|
|
6
|
+
import assert from 'node:assert/strict';
|
|
7
|
+
import Database from 'better-sqlite3';
|
|
8
|
+
import { initializeSchema } from '../schema.js';
|
|
9
|
+
import { getOrCreateAgent, getOrCreateFile } from '../database.js';
|
|
10
|
+
/**
|
|
11
|
+
* Test database instance
|
|
12
|
+
*/
|
|
13
|
+
let testDb;
|
|
14
|
+
/**
|
|
15
|
+
* Create an in-memory test database
|
|
16
|
+
*/
|
|
17
|
+
function createTestDatabase() {
|
|
18
|
+
const db = new Database(':memory:');
|
|
19
|
+
db.pragma('foreign_keys = ON');
|
|
20
|
+
initializeSchema(db);
|
|
21
|
+
return db;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Helper: Create a test task
|
|
25
|
+
*/
|
|
26
|
+
function createTestTask(db, title) {
|
|
27
|
+
const agentId = getOrCreateAgent(db, 'test-agent');
|
|
28
|
+
const statusId = 1; // todo
|
|
29
|
+
const result = db.prepare(`
|
|
30
|
+
INSERT INTO t_tasks (title, status_id, priority, created_by_agent_id, assigned_agent_id)
|
|
31
|
+
VALUES (?, ?, 2, ?, ?)
|
|
32
|
+
`).run(title, statusId, agentId, agentId);
|
|
33
|
+
return result.lastInsertRowid;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Inline implementation of watchFiles action for testing
|
|
37
|
+
*/
|
|
38
|
+
function watchFilesAction(db, params) {
|
|
39
|
+
if (!params.task_id) {
|
|
40
|
+
throw new Error('Parameter "task_id" is required');
|
|
41
|
+
}
|
|
42
|
+
if (!params.action) {
|
|
43
|
+
throw new Error('Parameter "action" is required (watch, unwatch, or list)');
|
|
44
|
+
}
|
|
45
|
+
// Check if task exists
|
|
46
|
+
const taskData = db.prepare(`
|
|
47
|
+
SELECT t.id, t.title, s.name as status
|
|
48
|
+
FROM t_tasks t
|
|
49
|
+
JOIN m_task_statuses s ON t.status_id = s.id
|
|
50
|
+
WHERE t.id = ?
|
|
51
|
+
`).get(params.task_id);
|
|
52
|
+
if (!taskData) {
|
|
53
|
+
throw new Error(`Task with id ${params.task_id} not found`);
|
|
54
|
+
}
|
|
55
|
+
if (params.action === 'watch') {
|
|
56
|
+
if (!params.file_paths || params.file_paths.length === 0) {
|
|
57
|
+
throw new Error('Parameter "file_paths" is required for watch action');
|
|
58
|
+
}
|
|
59
|
+
const insertFileLinkStmt = db.prepare(`
|
|
60
|
+
INSERT OR IGNORE INTO t_task_file_links (task_id, file_id)
|
|
61
|
+
VALUES (?, ?)
|
|
62
|
+
`);
|
|
63
|
+
const addedFiles = [];
|
|
64
|
+
for (const filePath of params.file_paths) {
|
|
65
|
+
const fileId = getOrCreateFile(db, filePath);
|
|
66
|
+
const result = insertFileLinkStmt.run(params.task_id, fileId);
|
|
67
|
+
// Check if row was actually inserted (changes > 0)
|
|
68
|
+
if (result.changes > 0) {
|
|
69
|
+
addedFiles.push(filePath);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
success: true,
|
|
74
|
+
task_id: params.task_id,
|
|
75
|
+
action: 'watch',
|
|
76
|
+
files_added: addedFiles.length,
|
|
77
|
+
files: addedFiles,
|
|
78
|
+
message: `Watching ${addedFiles.length} file(s) for task ${params.task_id}`
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else if (params.action === 'unwatch') {
|
|
82
|
+
if (!params.file_paths || params.file_paths.length === 0) {
|
|
83
|
+
throw new Error('Parameter "file_paths" is required for unwatch action');
|
|
84
|
+
}
|
|
85
|
+
const deleteFileLinkStmt = db.prepare(`
|
|
86
|
+
DELETE FROM t_task_file_links
|
|
87
|
+
WHERE task_id = ? AND file_id = (SELECT id FROM m_files WHERE path = ?)
|
|
88
|
+
`);
|
|
89
|
+
const removedFiles = [];
|
|
90
|
+
for (const filePath of params.file_paths) {
|
|
91
|
+
const result = deleteFileLinkStmt.run(params.task_id, filePath);
|
|
92
|
+
// Check if row was actually deleted (changes > 0)
|
|
93
|
+
if (result.changes > 0) {
|
|
94
|
+
removedFiles.push(filePath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
success: true,
|
|
99
|
+
task_id: params.task_id,
|
|
100
|
+
action: 'unwatch',
|
|
101
|
+
files_removed: removedFiles.length,
|
|
102
|
+
files: removedFiles,
|
|
103
|
+
message: `Stopped watching ${removedFiles.length} file(s) for task ${params.task_id}`
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
else if (params.action === 'list') {
|
|
107
|
+
const filesStmt = db.prepare(`
|
|
108
|
+
SELECT f.path
|
|
109
|
+
FROM t_task_file_links tfl
|
|
110
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
111
|
+
WHERE tfl.task_id = ?
|
|
112
|
+
`);
|
|
113
|
+
const files = filesStmt.all(params.task_id).map((row) => row.path);
|
|
114
|
+
return {
|
|
115
|
+
success: true,
|
|
116
|
+
task_id: params.task_id,
|
|
117
|
+
action: 'list',
|
|
118
|
+
files_count: files.length,
|
|
119
|
+
files: files,
|
|
120
|
+
message: `Task ${params.task_id} is watching ${files.length} file(s)`
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
throw new Error(`Invalid action: ${params.action}. Must be one of: watch, unwatch, list`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
describe('Task watch_files action tests', () => {
|
|
128
|
+
beforeEach(() => {
|
|
129
|
+
testDb = createTestDatabase();
|
|
130
|
+
});
|
|
131
|
+
it('should list watched files for task with no files', () => {
|
|
132
|
+
const taskId = createTestTask(testDb, 'Task without files');
|
|
133
|
+
const result = watchFilesAction(testDb, {
|
|
134
|
+
task_id: taskId,
|
|
135
|
+
action: 'list'
|
|
136
|
+
});
|
|
137
|
+
assert.ok(result.success);
|
|
138
|
+
assert.strictEqual(result.action, 'list');
|
|
139
|
+
assert.strictEqual(result.files_count, 0);
|
|
140
|
+
assert.deepStrictEqual(result.files, []);
|
|
141
|
+
});
|
|
142
|
+
it('should watch files for a task', () => {
|
|
143
|
+
const taskId = createTestTask(testDb, 'Task to watch files');
|
|
144
|
+
const result = watchFilesAction(testDb, {
|
|
145
|
+
task_id: taskId,
|
|
146
|
+
action: 'watch',
|
|
147
|
+
file_paths: ['src/index.ts', 'src/database.ts']
|
|
148
|
+
});
|
|
149
|
+
assert.ok(result.success);
|
|
150
|
+
assert.strictEqual(result.action, 'watch');
|
|
151
|
+
assert.strictEqual(result.files_added, 2);
|
|
152
|
+
assert.deepStrictEqual(result.files, ['src/index.ts', 'src/database.ts']);
|
|
153
|
+
});
|
|
154
|
+
it('should list watched files after watching', () => {
|
|
155
|
+
const taskId = createTestTask(testDb, 'Task with watched files');
|
|
156
|
+
// Watch files
|
|
157
|
+
watchFilesAction(testDb, {
|
|
158
|
+
task_id: taskId,
|
|
159
|
+
action: 'watch',
|
|
160
|
+
file_paths: ['src/index.ts', 'src/database.ts', 'src/schema.ts']
|
|
161
|
+
});
|
|
162
|
+
// List files
|
|
163
|
+
const result = watchFilesAction(testDb, {
|
|
164
|
+
task_id: taskId,
|
|
165
|
+
action: 'list'
|
|
166
|
+
});
|
|
167
|
+
assert.ok(result.success);
|
|
168
|
+
assert.strictEqual(result.action, 'list');
|
|
169
|
+
assert.strictEqual(result.files_count, 3);
|
|
170
|
+
assert.strictEqual(result.files.length, 3);
|
|
171
|
+
assert.ok(result.files.includes('src/index.ts'));
|
|
172
|
+
assert.ok(result.files.includes('src/database.ts'));
|
|
173
|
+
assert.ok(result.files.includes('src/schema.ts'));
|
|
174
|
+
});
|
|
175
|
+
it('should handle watching duplicate files (idempotent)', () => {
|
|
176
|
+
const taskId = createTestTask(testDb, 'Task for idempotent test');
|
|
177
|
+
// Watch files first time
|
|
178
|
+
const result1 = watchFilesAction(testDb, {
|
|
179
|
+
task_id: taskId,
|
|
180
|
+
action: 'watch',
|
|
181
|
+
file_paths: ['src/index.ts']
|
|
182
|
+
});
|
|
183
|
+
assert.strictEqual(result1.files_added, 1);
|
|
184
|
+
// Watch same file again
|
|
185
|
+
const result2 = watchFilesAction(testDb, {
|
|
186
|
+
task_id: taskId,
|
|
187
|
+
action: 'watch',
|
|
188
|
+
file_paths: ['src/index.ts']
|
|
189
|
+
});
|
|
190
|
+
assert.strictEqual(result2.files_added, 0, 'Should not add duplicate file');
|
|
191
|
+
// Verify only one link exists
|
|
192
|
+
const listResult = watchFilesAction(testDb, {
|
|
193
|
+
task_id: taskId,
|
|
194
|
+
action: 'list'
|
|
195
|
+
});
|
|
196
|
+
assert.strictEqual(listResult.files_count, 1);
|
|
197
|
+
});
|
|
198
|
+
it('should unwatch files from a task', () => {
|
|
199
|
+
const taskId = createTestTask(testDb, 'Task for unwatch test');
|
|
200
|
+
// Watch files
|
|
201
|
+
watchFilesAction(testDb, {
|
|
202
|
+
task_id: taskId,
|
|
203
|
+
action: 'watch',
|
|
204
|
+
file_paths: ['src/index.ts', 'src/database.ts', 'src/schema.ts']
|
|
205
|
+
});
|
|
206
|
+
// Unwatch one file
|
|
207
|
+
const result = watchFilesAction(testDb, {
|
|
208
|
+
task_id: taskId,
|
|
209
|
+
action: 'unwatch',
|
|
210
|
+
file_paths: ['src/database.ts']
|
|
211
|
+
});
|
|
212
|
+
assert.ok(result.success);
|
|
213
|
+
assert.strictEqual(result.action, 'unwatch');
|
|
214
|
+
assert.strictEqual(result.files_removed, 1);
|
|
215
|
+
assert.deepStrictEqual(result.files, ['src/database.ts']);
|
|
216
|
+
// Verify remaining files
|
|
217
|
+
const listResult = watchFilesAction(testDb, {
|
|
218
|
+
task_id: taskId,
|
|
219
|
+
action: 'list'
|
|
220
|
+
});
|
|
221
|
+
assert.strictEqual(listResult.files_count, 2);
|
|
222
|
+
assert.ok(listResult.files.includes('src/index.ts'));
|
|
223
|
+
assert.ok(listResult.files.includes('src/schema.ts'));
|
|
224
|
+
assert.ok(!listResult.files.includes('src/database.ts'));
|
|
225
|
+
});
|
|
226
|
+
it('should unwatch multiple files at once', () => {
|
|
227
|
+
const taskId = createTestTask(testDb, 'Task for batch unwatch');
|
|
228
|
+
// Watch files
|
|
229
|
+
watchFilesAction(testDb, {
|
|
230
|
+
task_id: taskId,
|
|
231
|
+
action: 'watch',
|
|
232
|
+
file_paths: ['src/index.ts', 'src/database.ts', 'src/schema.ts', 'src/types.ts']
|
|
233
|
+
});
|
|
234
|
+
// Unwatch multiple files
|
|
235
|
+
const result = watchFilesAction(testDb, {
|
|
236
|
+
task_id: taskId,
|
|
237
|
+
action: 'unwatch',
|
|
238
|
+
file_paths: ['src/database.ts', 'src/types.ts']
|
|
239
|
+
});
|
|
240
|
+
assert.strictEqual(result.files_removed, 2);
|
|
241
|
+
// Verify remaining files
|
|
242
|
+
const listResult = watchFilesAction(testDb, {
|
|
243
|
+
task_id: taskId,
|
|
244
|
+
action: 'list'
|
|
245
|
+
});
|
|
246
|
+
assert.strictEqual(listResult.files_count, 2);
|
|
247
|
+
assert.ok(listResult.files.includes('src/index.ts'));
|
|
248
|
+
assert.ok(listResult.files.includes('src/schema.ts'));
|
|
249
|
+
});
|
|
250
|
+
it('should handle unwatching non-existent file gracefully', () => {
|
|
251
|
+
const taskId = createTestTask(testDb, 'Task for non-existent unwatch');
|
|
252
|
+
// Watch one file
|
|
253
|
+
watchFilesAction(testDb, {
|
|
254
|
+
task_id: taskId,
|
|
255
|
+
action: 'watch',
|
|
256
|
+
file_paths: ['src/index.ts']
|
|
257
|
+
});
|
|
258
|
+
// Try to unwatch file that was never watched
|
|
259
|
+
const result = watchFilesAction(testDb, {
|
|
260
|
+
task_id: taskId,
|
|
261
|
+
action: 'unwatch',
|
|
262
|
+
file_paths: ['src/non-existent.ts']
|
|
263
|
+
});
|
|
264
|
+
assert.ok(result.success);
|
|
265
|
+
assert.strictEqual(result.files_removed, 0, 'Should remove 0 files');
|
|
266
|
+
});
|
|
267
|
+
it('should throw error for invalid task_id', () => {
|
|
268
|
+
assert.throws(() => {
|
|
269
|
+
watchFilesAction(testDb, {
|
|
270
|
+
task_id: 999,
|
|
271
|
+
action: 'list'
|
|
272
|
+
});
|
|
273
|
+
}, /Task with id 999 not found/);
|
|
274
|
+
});
|
|
275
|
+
it('should throw error when watch action missing file_paths', () => {
|
|
276
|
+
const taskId = createTestTask(testDb, 'Task for error test');
|
|
277
|
+
assert.throws(() => {
|
|
278
|
+
watchFilesAction(testDb, {
|
|
279
|
+
task_id: taskId,
|
|
280
|
+
action: 'watch'
|
|
281
|
+
});
|
|
282
|
+
}, /Parameter "file_paths" is required for watch action/);
|
|
283
|
+
});
|
|
284
|
+
it('should throw error when unwatch action missing file_paths', () => {
|
|
285
|
+
const taskId = createTestTask(testDb, 'Task for error test');
|
|
286
|
+
assert.throws(() => {
|
|
287
|
+
watchFilesAction(testDb, {
|
|
288
|
+
task_id: taskId,
|
|
289
|
+
action: 'unwatch'
|
|
290
|
+
});
|
|
291
|
+
}, /Parameter "file_paths" is required for unwatch action/);
|
|
292
|
+
});
|
|
293
|
+
it('should handle empty file_paths array for watch', () => {
|
|
294
|
+
const taskId = createTestTask(testDb, 'Task for empty array test');
|
|
295
|
+
assert.throws(() => {
|
|
296
|
+
watchFilesAction(testDb, {
|
|
297
|
+
task_id: taskId,
|
|
298
|
+
action: 'watch',
|
|
299
|
+
file_paths: []
|
|
300
|
+
});
|
|
301
|
+
}, /Parameter "file_paths" is required for watch action/);
|
|
302
|
+
});
|
|
303
|
+
it('should watch then unwatch all files', () => {
|
|
304
|
+
const taskId = createTestTask(testDb, 'Task for full cycle test');
|
|
305
|
+
// Watch files
|
|
306
|
+
watchFilesAction(testDb, {
|
|
307
|
+
task_id: taskId,
|
|
308
|
+
action: 'watch',
|
|
309
|
+
file_paths: ['src/index.ts', 'src/database.ts']
|
|
310
|
+
});
|
|
311
|
+
// Verify watched
|
|
312
|
+
const listResult1 = watchFilesAction(testDb, {
|
|
313
|
+
task_id: taskId,
|
|
314
|
+
action: 'list'
|
|
315
|
+
});
|
|
316
|
+
assert.strictEqual(listResult1.files_count, 2);
|
|
317
|
+
// Unwatch all
|
|
318
|
+
watchFilesAction(testDb, {
|
|
319
|
+
task_id: taskId,
|
|
320
|
+
action: 'unwatch',
|
|
321
|
+
file_paths: ['src/index.ts', 'src/database.ts']
|
|
322
|
+
});
|
|
323
|
+
// Verify empty
|
|
324
|
+
const listResult2 = watchFilesAction(testDb, {
|
|
325
|
+
task_id: taskId,
|
|
326
|
+
action: 'list'
|
|
327
|
+
});
|
|
328
|
+
assert.strictEqual(listResult2.files_count, 0);
|
|
329
|
+
});
|
|
330
|
+
it('should handle various file path formats', () => {
|
|
331
|
+
const taskId = createTestTask(testDb, 'Task for path formats');
|
|
332
|
+
const result = watchFilesAction(testDb, {
|
|
333
|
+
task_id: taskId,
|
|
334
|
+
action: 'watch',
|
|
335
|
+
file_paths: [
|
|
336
|
+
'package.json',
|
|
337
|
+
'src/index.ts',
|
|
338
|
+
'docs/README.md',
|
|
339
|
+
'tests/unit/test.ts'
|
|
340
|
+
]
|
|
341
|
+
});
|
|
342
|
+
assert.strictEqual(result.files_added, 4);
|
|
343
|
+
const listResult = watchFilesAction(testDb, {
|
|
344
|
+
task_id: taskId,
|
|
345
|
+
action: 'list'
|
|
346
|
+
});
|
|
347
|
+
assert.strictEqual(listResult.files_count, 4);
|
|
348
|
+
});
|
|
349
|
+
console.log('\n✅ All watch_files action tests passed!\n');
|
|
350
|
+
});
|
|
351
|
+
//# sourceMappingURL=tasks.watch-files-action.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.watch-files-action.test.js","sourceRoot":"","sources":["../../src/tests/tasks.watch-files-action.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.watch-files-parameter.test.d.ts","sourceRoot":"","sources":["../../src/tests/tasks.watch-files-parameter.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Task watch_files parameter feature (v3.4.1)
|
|
3
|
+
* Tests the new watch_files parameter in createTask and updateTask actions
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, beforeEach } from 'node:test';
|
|
6
|
+
import assert from 'node:assert/strict';
|
|
7
|
+
import Database from 'better-sqlite3';
|
|
8
|
+
import { initializeSchema } from '../schema.js';
|
|
9
|
+
import { getOrCreateAgent, getOrCreateFile } from '../database.js';
|
|
10
|
+
/**
|
|
11
|
+
* Test database instance
|
|
12
|
+
*/
|
|
13
|
+
let testDb;
|
|
14
|
+
/**
|
|
15
|
+
* Create an in-memory test database
|
|
16
|
+
*/
|
|
17
|
+
function createTestDatabase() {
|
|
18
|
+
const db = new Database(':memory:');
|
|
19
|
+
db.pragma('foreign_keys = ON');
|
|
20
|
+
initializeSchema(db);
|
|
21
|
+
return db;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Inline implementation of createTask with watch_files for testing
|
|
25
|
+
*/
|
|
26
|
+
function createTaskWithWatchFiles(db, params) {
|
|
27
|
+
const agentId = getOrCreateAgent(db, params.created_by_agent || 'system');
|
|
28
|
+
const statusId = 1; // todo
|
|
29
|
+
const result = db.prepare(`
|
|
30
|
+
INSERT INTO t_tasks (title, status_id, priority, created_by_agent_id, assigned_agent_id)
|
|
31
|
+
VALUES (?, ?, ?, ?, ?)
|
|
32
|
+
`).run(params.title, statusId, params.priority || 2, agentId, agentId);
|
|
33
|
+
const taskId = result.lastInsertRowid;
|
|
34
|
+
// Add description if provided
|
|
35
|
+
if (params.description || params.acceptance_criteria) {
|
|
36
|
+
db.prepare(`
|
|
37
|
+
INSERT INTO t_task_details (task_id, description, acceptance_criteria)
|
|
38
|
+
VALUES (?, ?, ?)
|
|
39
|
+
`).run(taskId, params.description || null, params.acceptance_criteria || null);
|
|
40
|
+
}
|
|
41
|
+
// Add tags if provided
|
|
42
|
+
if (params.tags && params.tags.length > 0) {
|
|
43
|
+
const insertTagLink = db.prepare('INSERT OR IGNORE INTO t_task_tags (task_id, tag_id) VALUES (?, ?)');
|
|
44
|
+
for (const tag of params.tags) {
|
|
45
|
+
db.prepare('INSERT OR IGNORE INTO m_tags (name) VALUES (?)').run(tag);
|
|
46
|
+
const tagResult = db.prepare('SELECT id FROM m_tags WHERE name = ?').get(tag);
|
|
47
|
+
insertTagLink.run(taskId, tagResult.id);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Add watch_files if provided
|
|
51
|
+
const watchedFiles = [];
|
|
52
|
+
if (params.watch_files && params.watch_files.length > 0) {
|
|
53
|
+
for (const filePath of params.watch_files) {
|
|
54
|
+
const fileId = getOrCreateFile(db, filePath);
|
|
55
|
+
db.prepare('INSERT OR IGNORE INTO t_task_file_links (task_id, file_id) VALUES (?, ?)')
|
|
56
|
+
.run(taskId, fileId);
|
|
57
|
+
watchedFiles.push(filePath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
task_id: taskId,
|
|
63
|
+
title: params.title,
|
|
64
|
+
status: 'todo',
|
|
65
|
+
...(watchedFiles.length > 0 && { watched_files: watchedFiles })
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Inline implementation of updateTask with watch_files for testing
|
|
70
|
+
*/
|
|
71
|
+
function updateTaskWithWatchFiles(db, params) {
|
|
72
|
+
const task = db.prepare('SELECT id FROM t_tasks WHERE id = ?').get(params.task_id);
|
|
73
|
+
if (!task) {
|
|
74
|
+
throw new Error(`Task #${params.task_id} not found`);
|
|
75
|
+
}
|
|
76
|
+
const watchedFiles = [];
|
|
77
|
+
if (params.watch_files && params.watch_files.length > 0) {
|
|
78
|
+
for (const filePath of params.watch_files) {
|
|
79
|
+
const fileId = getOrCreateFile(db, filePath);
|
|
80
|
+
db.prepare('INSERT OR IGNORE INTO t_task_file_links (task_id, file_id) VALUES (?, ?)')
|
|
81
|
+
.run(params.task_id, fileId);
|
|
82
|
+
watchedFiles.push(filePath);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
success: true,
|
|
87
|
+
task_id: params.task_id,
|
|
88
|
+
...(watchedFiles.length > 0 && { watched_files: watchedFiles })
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
describe('Task watch_files parameter tests', () => {
|
|
92
|
+
beforeEach(() => {
|
|
93
|
+
testDb = createTestDatabase();
|
|
94
|
+
});
|
|
95
|
+
it('should create task with watch_files parameter', () => {
|
|
96
|
+
const result = createTaskWithWatchFiles(testDb, {
|
|
97
|
+
title: 'Test Task with File Watching',
|
|
98
|
+
description: 'Testing watch_files parameter',
|
|
99
|
+
watch_files: ['src/index.ts', 'src/database.ts'],
|
|
100
|
+
created_by_agent: 'test-agent',
|
|
101
|
+
tags: ['test'],
|
|
102
|
+
priority: 2
|
|
103
|
+
});
|
|
104
|
+
assert.ok(result.success, 'Task creation should succeed');
|
|
105
|
+
assert.strictEqual(result.task_id, 1, 'First task should have ID 1');
|
|
106
|
+
assert.deepStrictEqual(result.watched_files, ['src/index.ts', 'src/database.ts'], 'Should return watched files list');
|
|
107
|
+
});
|
|
108
|
+
it('should link files in database', () => {
|
|
109
|
+
createTaskWithWatchFiles(testDb, {
|
|
110
|
+
title: 'Task with files',
|
|
111
|
+
watch_files: ['src/index.ts', 'src/database.ts']
|
|
112
|
+
});
|
|
113
|
+
const links = testDb.prepare(`
|
|
114
|
+
SELECT f.path
|
|
115
|
+
FROM t_task_file_links tfl
|
|
116
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
117
|
+
WHERE tfl.task_id = 1
|
|
118
|
+
ORDER BY f.path
|
|
119
|
+
`).all();
|
|
120
|
+
assert.strictEqual(links.length, 2, 'Should have 2 file links');
|
|
121
|
+
assert.strictEqual(links[0].path, 'src/database.ts');
|
|
122
|
+
assert.strictEqual(links[1].path, 'src/index.ts');
|
|
123
|
+
});
|
|
124
|
+
it('should register files in m_files table', () => {
|
|
125
|
+
createTaskWithWatchFiles(testDb, {
|
|
126
|
+
title: 'Task with files',
|
|
127
|
+
watch_files: ['src/index.ts', 'src/database.ts']
|
|
128
|
+
});
|
|
129
|
+
const files = testDb.prepare('SELECT path FROM m_files ORDER BY path').all();
|
|
130
|
+
assert.ok(files.length >= 2, 'Should have at least 2 files registered');
|
|
131
|
+
const paths = files.map(f => f.path);
|
|
132
|
+
assert.ok(paths.includes('src/index.ts'));
|
|
133
|
+
assert.ok(paths.includes('src/database.ts'));
|
|
134
|
+
});
|
|
135
|
+
it('should handle empty watch_files array', () => {
|
|
136
|
+
const result = createTaskWithWatchFiles(testDb, {
|
|
137
|
+
title: 'Task without file watching',
|
|
138
|
+
watch_files: []
|
|
139
|
+
});
|
|
140
|
+
assert.ok(result.success);
|
|
141
|
+
assert.strictEqual(result.watched_files, undefined, 'Should not have watched_files in response');
|
|
142
|
+
const links = testDb.prepare('SELECT * FROM t_task_file_links WHERE task_id = 1').all();
|
|
143
|
+
assert.strictEqual(links.length, 0, 'Should have no file links');
|
|
144
|
+
});
|
|
145
|
+
it('should handle missing watch_files parameter', () => {
|
|
146
|
+
const result = createTaskWithWatchFiles(testDb, {
|
|
147
|
+
title: 'Task without watch_files param'
|
|
148
|
+
});
|
|
149
|
+
assert.ok(result.success);
|
|
150
|
+
assert.strictEqual(result.watched_files, undefined, 'Should not have watched_files in response');
|
|
151
|
+
const links = testDb.prepare('SELECT * FROM t_task_file_links WHERE task_id = 1').all();
|
|
152
|
+
assert.strictEqual(links.length, 0, 'Should have no file links');
|
|
153
|
+
});
|
|
154
|
+
it('should update task to add watch_files', () => {
|
|
155
|
+
const task = createTaskWithWatchFiles(testDb, {
|
|
156
|
+
title: 'Task without files initially'
|
|
157
|
+
});
|
|
158
|
+
const result = updateTaskWithWatchFiles(testDb, {
|
|
159
|
+
task_id: task.task_id,
|
|
160
|
+
watch_files: ['src/tools/tasks.ts', 'src/schema.ts']
|
|
161
|
+
});
|
|
162
|
+
assert.ok(result.success);
|
|
163
|
+
assert.deepStrictEqual(result.watched_files, ['src/tools/tasks.ts', 'src/schema.ts']);
|
|
164
|
+
const links = testDb.prepare(`
|
|
165
|
+
SELECT f.path
|
|
166
|
+
FROM t_task_file_links tfl
|
|
167
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
168
|
+
WHERE tfl.task_id = ?
|
|
169
|
+
ORDER BY f.path
|
|
170
|
+
`).all(task.task_id);
|
|
171
|
+
assert.strictEqual(links.length, 2, 'Should have 2 file links after update');
|
|
172
|
+
});
|
|
173
|
+
it('should append new watch_files to existing ones', () => {
|
|
174
|
+
const task = createTaskWithWatchFiles(testDb, {
|
|
175
|
+
title: 'Task with initial files',
|
|
176
|
+
watch_files: ['src/index.ts', 'src/database.ts']
|
|
177
|
+
});
|
|
178
|
+
updateTaskWithWatchFiles(testDb, {
|
|
179
|
+
task_id: task.task_id,
|
|
180
|
+
watch_files: ['src/utils/validators.ts']
|
|
181
|
+
});
|
|
182
|
+
const links = testDb.prepare(`
|
|
183
|
+
SELECT f.path
|
|
184
|
+
FROM t_task_file_links tfl
|
|
185
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
186
|
+
WHERE tfl.task_id = ?
|
|
187
|
+
ORDER BY f.path
|
|
188
|
+
`).all(task.task_id);
|
|
189
|
+
assert.strictEqual(links.length, 3, 'Should have 3 file links total');
|
|
190
|
+
const paths = links.map(l => l.path);
|
|
191
|
+
assert.ok(paths.includes('src/index.ts'));
|
|
192
|
+
assert.ok(paths.includes('src/database.ts'));
|
|
193
|
+
assert.ok(paths.includes('src/utils/validators.ts'));
|
|
194
|
+
});
|
|
195
|
+
it('should handle duplicate file paths correctly (idempotent)', () => {
|
|
196
|
+
const task = createTaskWithWatchFiles(testDb, {
|
|
197
|
+
title: 'Task with files',
|
|
198
|
+
watch_files: ['src/index.ts']
|
|
199
|
+
});
|
|
200
|
+
updateTaskWithWatchFiles(testDb, {
|
|
201
|
+
task_id: task.task_id,
|
|
202
|
+
watch_files: ['src/index.ts'] // Duplicate
|
|
203
|
+
});
|
|
204
|
+
const links = testDb.prepare(`
|
|
205
|
+
SELECT f.path
|
|
206
|
+
FROM t_task_file_links tfl
|
|
207
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
208
|
+
WHERE tfl.task_id = ?
|
|
209
|
+
`).all(task.task_id);
|
|
210
|
+
assert.strictEqual(links.length, 1, 'Should not create duplicate links');
|
|
211
|
+
});
|
|
212
|
+
it('should handle various path formats', () => {
|
|
213
|
+
const result = createTaskWithWatchFiles(testDb, {
|
|
214
|
+
title: 'Task with various paths',
|
|
215
|
+
watch_files: [
|
|
216
|
+
'package.json',
|
|
217
|
+
'src/types.ts',
|
|
218
|
+
'docs/README.md'
|
|
219
|
+
]
|
|
220
|
+
});
|
|
221
|
+
assert.strictEqual(result.watched_files?.length, 3);
|
|
222
|
+
const links = testDb.prepare(`
|
|
223
|
+
SELECT f.path
|
|
224
|
+
FROM t_task_file_links tfl
|
|
225
|
+
JOIN m_files f ON tfl.file_id = f.id
|
|
226
|
+
WHERE tfl.task_id = ?
|
|
227
|
+
ORDER BY f.path
|
|
228
|
+
`).all(result.task_id);
|
|
229
|
+
assert.strictEqual(links.length, 3);
|
|
230
|
+
assert.strictEqual(links[0].path, 'docs/README.md');
|
|
231
|
+
assert.strictEqual(links[1].path, 'package.json');
|
|
232
|
+
assert.strictEqual(links[2].path, 'src/types.ts');
|
|
233
|
+
});
|
|
234
|
+
it('should work with acceptance_criteria', () => {
|
|
235
|
+
const result = createTaskWithWatchFiles(testDb, {
|
|
236
|
+
title: 'Task with auto-completion criteria',
|
|
237
|
+
acceptance_criteria: 'All tests passing',
|
|
238
|
+
watch_files: ['src/tests/tasks.watch-files-parameter.test.ts']
|
|
239
|
+
});
|
|
240
|
+
assert.ok(result.success);
|
|
241
|
+
assert.strictEqual(result.watched_files?.length, 1);
|
|
242
|
+
const details = testDb.prepare('SELECT acceptance_criteria FROM t_task_details WHERE task_id = ?')
|
|
243
|
+
.get(result.task_id);
|
|
244
|
+
assert.ok(details);
|
|
245
|
+
assert.strictEqual(details.acceptance_criteria, 'All tests passing');
|
|
246
|
+
});
|
|
247
|
+
console.log('\n✅ All watch_files parameter tests passed!\n');
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=tasks.watch-files-parameter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.watch-files-parameter.test.js","sourceRoot":"","sources":["../../src/tests/tasks.watch-files-parameter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-step-git-completion.test.d.ts","sourceRoot":"","sources":["../../src/tests/two-step-git-completion.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|