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.
Files changed (148) hide show
  1. package/CHANGELOG.md +843 -0
  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 +84 -15
  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/validators.d.ts +2 -2
  117. package/dist/utils/validators.d.ts.map +1 -1
  118. package/dist/utils/validators.js +11 -2
  119. package/dist/utils/validators.js.map +1 -1
  120. package/dist/utils/vcs-adapter.d.ts +68 -0
  121. package/dist/utils/vcs-adapter.d.ts.map +1 -0
  122. package/dist/utils/vcs-adapter.js +187 -0
  123. package/dist/utils/vcs-adapter.js.map +1 -0
  124. package/dist/watcher/file-watcher.d.ts +54 -4
  125. package/dist/watcher/file-watcher.d.ts.map +1 -1
  126. package/dist/watcher/file-watcher.js +312 -30
  127. package/dist/watcher/file-watcher.js.map +1 -1
  128. package/dist/watcher/gitignore-parser.d.ts +70 -0
  129. package/dist/watcher/gitignore-parser.d.ts.map +1 -0
  130. package/dist/watcher/gitignore-parser.js +191 -0
  131. package/dist/watcher/gitignore-parser.js.map +1 -0
  132. package/dist/watcher/index.d.ts +1 -0
  133. package/dist/watcher/index.d.ts.map +1 -1
  134. package/dist/watcher/index.js +1 -0
  135. package/dist/watcher/index.js.map +1 -1
  136. package/docs/AI_AGENT_GUIDE.md +1 -1
  137. package/docs/ARCHITECTURE.md +12 -0
  138. package/docs/AUTO_FILE_TRACKING.md +486 -82
  139. package/docs/CONFIGURATION.md +908 -0
  140. package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
  141. package/docs/MIGRATION_v3.3.md +602 -0
  142. package/docs/SHARED_CONCEPTS.md +2 -1
  143. package/docs/TASK_ACTIONS.md +12 -0
  144. package/docs/TASK_OVERVIEW.md +124 -23
  145. package/docs/TASK_PRUNING.md +589 -0
  146. package/docs/TASK_SYSTEM.md +83 -13
  147. package/docs/TOOL_REFERENCE.md +94 -6
  148. package/package.json +8 -6
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Integration Tests - Two-Step Git-Aware Task Workflow (v3.5.2)
3
+ * Tests the complete workflow: staging → done, commit → archived
4
+ */
5
+ import { describe, it, before, after, beforeEach } from 'node:test';
6
+ import assert from 'node:assert';
7
+ import Database from 'better-sqlite3';
8
+ import { unlinkSync, existsSync, mkdirSync, writeFileSync, rmSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { execSync } from 'child_process';
11
+ import { initializeSchema } from '../schema.js';
12
+ import { detectAndCompleteOnStaging, detectAndArchiveOnCommit } from '../utils/task-stale-detection.js';
13
+ const TEST_DB_PATH = join(process.cwd(), 'test-two-step-workflow.db');
14
+ const TEST_DIR = join(process.cwd(), 'test-two-step-git');
15
+ // Helper to clean up test database
16
+ function cleanupTestDb() {
17
+ if (existsSync(TEST_DB_PATH)) {
18
+ unlinkSync(TEST_DB_PATH);
19
+ }
20
+ }
21
+ // Helper to clean up test directory
22
+ function cleanupTestDir() {
23
+ if (existsSync(TEST_DIR)) {
24
+ rmSync(TEST_DIR, { recursive: true, force: true });
25
+ }
26
+ }
27
+ describe('Two-Step Git-Aware Workflow Integration Tests', () => {
28
+ let db;
29
+ before(() => {
30
+ // Clean up before tests
31
+ cleanupTestDb();
32
+ cleanupTestDir();
33
+ // Create test database
34
+ db = new Database(TEST_DB_PATH);
35
+ db.pragma('foreign_keys = ON');
36
+ // Initialize schema
37
+ initializeSchema(db);
38
+ // Create 'system' agent (required for activity log triggers)
39
+ db.prepare('INSERT INTO m_agents (name) VALUES (?)').run('system');
40
+ // Add test config for two-step workflow
41
+ db.prepare('INSERT OR REPLACE INTO m_config (key, value) VALUES (?, ?)').run('git_auto_complete_on_stage', '1');
42
+ db.prepare('INSERT OR REPLACE INTO m_config (key, value) VALUES (?, ?)').run('git_auto_archive_on_commit', '1');
43
+ db.prepare('INSERT OR REPLACE INTO m_config (key, value) VALUES (?, ?)').run('require_all_files_staged', '1');
44
+ db.prepare('INSERT OR REPLACE INTO m_config (key, value) VALUES (?, ?)').run('require_all_files_committed_for_archive', '1');
45
+ // Create test git repository
46
+ mkdirSync(TEST_DIR, { recursive: true });
47
+ execSync('git init', { cwd: TEST_DIR });
48
+ execSync('git config user.email "test@example.com"', { cwd: TEST_DIR });
49
+ execSync('git config user.name "Test User"', { cwd: TEST_DIR });
50
+ // Change to test directory for git operations
51
+ process.chdir(TEST_DIR);
52
+ });
53
+ after(() => {
54
+ // Close database
55
+ if (db) {
56
+ db.close();
57
+ }
58
+ // Go back to original directory
59
+ process.chdir(join(TEST_DIR, '..'));
60
+ // Clean up test database and directory
61
+ cleanupTestDb();
62
+ cleanupTestDir();
63
+ });
64
+ describe('Step 1: Staging → Done', () => {
65
+ beforeEach(() => {
66
+ // Clean up tasks and file links from previous tests
67
+ db.prepare('DELETE FROM t_task_file_links').run();
68
+ db.prepare('DELETE FROM t_tasks').run();
69
+ });
70
+ it('should transition task from waiting_review to done when all files staged', async () => {
71
+ // 1. Create task in waiting_review with watched file
72
+ const agentId = db.prepare('INSERT INTO m_agents (name) VALUES (?)').run('test-agent').lastInsertRowid;
73
+ const statusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
74
+ const taskId = db.prepare(`
75
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
76
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
77
+ `).run(agentId, statusId.id).lastInsertRowid;
78
+ // 2. Add watched file
79
+ writeFileSync('test-file1.ts', '// Test content');
80
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-file1.ts').lastInsertRowid;
81
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
82
+ // 3. Stage the file
83
+ execSync('git add test-file1.ts');
84
+ // 4. Run staging detection
85
+ const completedCount = await detectAndCompleteOnStaging(db);
86
+ // 5. Verify task transitioned to done
87
+ assert.strictEqual(completedCount, 1, 'Should complete 1 task');
88
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
89
+ const doneStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('done');
90
+ assert.strictEqual(task.status_id, doneStatusId.id, 'Task should be in done status');
91
+ });
92
+ it('should NOT transition when only some files are staged', async () => {
93
+ // 1. Create task with 2 watched files
94
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
95
+ const statusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
96
+ const taskId = db.prepare(`
97
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
98
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
99
+ `).run(agentId.id, statusId.id).lastInsertRowid;
100
+ // 2. Add 2 watched files
101
+ writeFileSync('test-file2.ts', '// Test content 2');
102
+ writeFileSync('test-file3.ts', '// Test content 3');
103
+ const file2Id = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-file2.ts').lastInsertRowid;
104
+ const file3Id = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-file3.ts').lastInsertRowid;
105
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, file2Id);
106
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, file3Id);
107
+ // 3. Stage only ONE file
108
+ execSync('git add test-file2.ts');
109
+ // 4. Run staging detection
110
+ const completedCount = await detectAndCompleteOnStaging(db);
111
+ // 5. Verify task is STILL in waiting_review
112
+ assert.strictEqual(completedCount, 0, 'Should NOT complete any tasks');
113
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
114
+ assert.strictEqual(task.status_id, statusId.id, 'Task should still be in waiting_review');
115
+ });
116
+ });
117
+ describe('Step 2: Commit → Archived', () => {
118
+ beforeEach(() => {
119
+ // Clean up tasks and file links from previous tests
120
+ db.prepare('DELETE FROM t_task_file_links').run();
121
+ db.prepare('DELETE FROM t_tasks').run();
122
+ });
123
+ it('should transition task from done to archived when all files committed', async () => {
124
+ // 1. Commit previously staged files
125
+ execSync('git commit -m "Test commit 1"');
126
+ // 2. Create task in done status with watched file
127
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
128
+ const doneStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('done');
129
+ const taskId = db.prepare(`
130
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
131
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
132
+ `).run(agentId.id, doneStatusId.id).lastInsertRowid;
133
+ // 3. Add watched file and commit it
134
+ writeFileSync('test-file4.ts', '// Test content 4');
135
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-file4.ts').lastInsertRowid;
136
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
137
+ execSync('git add test-file4.ts');
138
+ execSync('git commit -m "Test commit 2"');
139
+ // 4. Run archive detection
140
+ const archivedCount = await detectAndArchiveOnCommit(db);
141
+ // 5. Verify task transitioned to archived
142
+ assert.strictEqual(archivedCount, 1, 'Should archive 1 task');
143
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
144
+ const archivedStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('archived');
145
+ assert.strictEqual(task.status_id, archivedStatusId.id, 'Task should be in archived status');
146
+ });
147
+ it('should NOT archive when files are not committed (only staged)', async () => {
148
+ // 1. Create task in done status
149
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
150
+ const doneStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('done');
151
+ const taskId = db.prepare(`
152
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
153
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
154
+ `).run(agentId.id, doneStatusId.id).lastInsertRowid;
155
+ // 2. Add watched file and ONLY stage it (don't commit)
156
+ writeFileSync('test-file5.ts', '// Test content 5');
157
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-file5.ts').lastInsertRowid;
158
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
159
+ execSync('git add test-file5.ts');
160
+ // 3. Run archive detection
161
+ const archivedCount = await detectAndArchiveOnCommit(db);
162
+ // 4. Verify task is STILL in done
163
+ assert.strictEqual(archivedCount, 0, 'Should NOT archive any tasks');
164
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
165
+ assert.strictEqual(task.status_id, doneStatusId.id, 'Task should still be in done status');
166
+ });
167
+ });
168
+ describe('Full Two-Step Workflow', () => {
169
+ beforeEach(() => {
170
+ // Clean up tasks and file links from previous tests
171
+ db.prepare('DELETE FROM t_task_file_links').run();
172
+ db.prepare('DELETE FROM t_tasks').run();
173
+ });
174
+ it('should complete full cycle: waiting_review → done → archived', async () => {
175
+ // 1. Create task in waiting_review
176
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
177
+ const waitingReviewId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
178
+ const taskId = db.prepare(`
179
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
180
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
181
+ `).run(agentId.id, waitingReviewId.id).lastInsertRowid;
182
+ // 2. Add watched file
183
+ writeFileSync('test-full-cycle.ts', '// Full cycle test');
184
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-full-cycle.ts').lastInsertRowid;
185
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
186
+ // 3. STEP 1: Stage file → should transition to done
187
+ execSync('git add test-full-cycle.ts');
188
+ const stagingCompleted = await detectAndCompleteOnStaging(db);
189
+ assert.strictEqual(stagingCompleted, 1);
190
+ let task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
191
+ const doneStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('done');
192
+ assert.strictEqual(task.status_id, doneStatusId.id, 'Task should be done after staging');
193
+ // 4. STEP 2: Commit file → should transition to archived
194
+ execSync('git commit -m "Full cycle test"');
195
+ const commitArchived = await detectAndArchiveOnCommit(db);
196
+ assert.strictEqual(commitArchived, 1);
197
+ task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
198
+ const archivedStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('archived');
199
+ assert.strictEqual(task.status_id, archivedStatusId.id, 'Task should be archived after commit');
200
+ });
201
+ it('should handle rapid staging + commit (git commit -a)', async () => {
202
+ // 1. Create task
203
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
204
+ const waitingReviewId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
205
+ const taskId = db.prepare(`
206
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
207
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
208
+ `).run(agentId.id, waitingReviewId.id).lastInsertRowid;
209
+ // 2. Add watched file
210
+ writeFileSync('test-rapid.ts', '// Rapid test');
211
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('test-rapid.ts').lastInsertRowid;
212
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
213
+ // 3. Stage and commit immediately
214
+ execSync('git add test-rapid.ts && git commit -m "Rapid test"');
215
+ // 4. Run both detections - should go straight to archived
216
+ const stagingCompleted = await detectAndCompleteOnStaging(db);
217
+ // Staging won't find it (already committed)
218
+ assert.strictEqual(stagingCompleted, 0);
219
+ // But commit detection should complete it to done first
220
+ // This is handled by detectAndCompleteReviewedTasks in real workflow
221
+ // For this test, manually transition to done then test archiving
222
+ const doneStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('done');
223
+ db.prepare('UPDATE t_tasks SET status_id = ? WHERE id = ?').run(doneStatusId.id, taskId);
224
+ const commitArchived = await detectAndArchiveOnCommit(db);
225
+ assert.strictEqual(commitArchived, 1);
226
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
227
+ const archivedStatusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('archived');
228
+ assert.strictEqual(task.status_id, archivedStatusId.id);
229
+ });
230
+ });
231
+ describe('Configuration Tests', () => {
232
+ beforeEach(() => {
233
+ // Clean up tasks and file links from previous tests
234
+ db.prepare('DELETE FROM t_task_file_links').run();
235
+ db.prepare('DELETE FROM t_tasks').run();
236
+ });
237
+ it('should respect require_all_files_staged config', async () => {
238
+ // Set to require all files
239
+ db.prepare('UPDATE m_config SET value = ? WHERE key = ?').run('1', 'require_all_files_staged');
240
+ // Create task with 2 files
241
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
242
+ const statusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
243
+ const taskId = db.prepare(`
244
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
245
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
246
+ `).run(agentId.id, statusId.id).lastInsertRowid;
247
+ writeFileSync('config-test1.ts', '// Config test 1');
248
+ writeFileSync('config-test2.ts', '// Config test 2');
249
+ const file1Id = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('config-test1.ts').lastInsertRowid;
250
+ const file2Id = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('config-test2.ts').lastInsertRowid;
251
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, file1Id);
252
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, file2Id);
253
+ // Stage only one file
254
+ execSync('git add config-test1.ts');
255
+ // Should NOT complete (require ALL)
256
+ const completed = await detectAndCompleteOnStaging(db);
257
+ assert.strictEqual(completed, 0);
258
+ const task = db.prepare('SELECT status_id FROM t_tasks WHERE id = ?').get(taskId);
259
+ assert.strictEqual(task.status_id, statusId.id, 'Task should still be waiting_review');
260
+ });
261
+ it('should respect git_auto_complete_on_stage disabled', async () => {
262
+ // Disable staging auto-complete
263
+ db.prepare('UPDATE m_config SET value = ? WHERE key = ?').run('0', 'git_auto_complete_on_stage');
264
+ // Create and stage task
265
+ const agentId = db.prepare('SELECT id FROM m_agents WHERE name = ?').get('test-agent');
266
+ const statusId = db.prepare('SELECT id FROM m_task_statuses WHERE name = ?').get('waiting_review');
267
+ const taskId = db.prepare(`
268
+ INSERT INTO t_tasks (title, assigned_agent_id, status_id, priority, created_ts, updated_ts)
269
+ VALUES ('Test task', ?, ?, 2, unixepoch(), unixepoch())
270
+ `).run(agentId.id, statusId.id).lastInsertRowid;
271
+ writeFileSync('disabled-test.ts', '// Disabled test');
272
+ const fileId = db.prepare('INSERT INTO m_files (path) VALUES (?)').run('disabled-test.ts').lastInsertRowid;
273
+ db.prepare('INSERT INTO t_task_file_links (task_id, file_id) VALUES (?, ?)').run(taskId, fileId);
274
+ execSync('git add disabled-test.ts');
275
+ // Should NOT complete (feature disabled)
276
+ const completed = await detectAndCompleteOnStaging(db);
277
+ assert.strictEqual(completed, 0);
278
+ // Re-enable for other tests
279
+ db.prepare('UPDATE m_config SET value = ? WHERE key = ?').run('1', 'git_auto_complete_on_stage');
280
+ });
281
+ });
282
+ });
283
+ //# sourceMappingURL=two-step-git-completion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-step-git-completion.test.js","sourceRoot":"","sources":["../../src/tests/two-step-git-completion.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * VCS Staging Detection Tests (v3.5.2)
3
+ * Tests for getStagedFiles() method across Git, Mercurial, and SVN adapters
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=vcs-staging.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-staging.test.d.ts","sourceRoot":"","sources":["../../src/tests/vcs-staging.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * VCS Staging Detection Tests (v3.5.2)
3
+ * Tests for getStagedFiles() method across Git, Mercurial, and SVN adapters
4
+ */
5
+ import { describe, it, before, after } from 'node:test';
6
+ import assert from 'node:assert';
7
+ import { mkdirSync, rmSync, existsSync, writeFileSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { execSync } from 'child_process';
10
+ import { GitAdapter, MercurialAdapter, SVNAdapter } from '../utils/vcs-adapter.js';
11
+ const TEST_DIR = join(process.cwd(), 'test-vcs-staging');
12
+ // Helper to clean up test directory
13
+ function cleanupTestDir() {
14
+ if (existsSync(TEST_DIR)) {
15
+ rmSync(TEST_DIR, { recursive: true, force: true });
16
+ }
17
+ }
18
+ describe('VCS Staging Detection Tests', () => {
19
+ before(() => {
20
+ cleanupTestDir();
21
+ mkdirSync(TEST_DIR, { recursive: true });
22
+ });
23
+ after(() => {
24
+ cleanupTestDir();
25
+ });
26
+ describe('GitAdapter - getStagedFiles()', () => {
27
+ let gitDir;
28
+ let adapter;
29
+ before(() => {
30
+ gitDir = join(TEST_DIR, 'git-test');
31
+ mkdirSync(gitDir, { recursive: true });
32
+ // Initialize git repo
33
+ execSync('git init', { cwd: gitDir });
34
+ execSync('git config user.email "test@example.com"', { cwd: gitDir });
35
+ execSync('git config user.name "Test User"', { cwd: gitDir });
36
+ adapter = new GitAdapter(gitDir);
37
+ });
38
+ it('should return empty array when no files are staged', async () => {
39
+ const stagedFiles = await adapter.getStagedFiles();
40
+ assert.deepStrictEqual(stagedFiles, []);
41
+ });
42
+ it('should detect staged files', async () => {
43
+ // Create and stage files
44
+ writeFileSync(join(gitDir, 'file1.txt'), 'content1');
45
+ writeFileSync(join(gitDir, 'file2.txt'), 'content2');
46
+ execSync('git add file1.txt file2.txt', { cwd: gitDir });
47
+ const stagedFiles = await adapter.getStagedFiles();
48
+ assert.strictEqual(stagedFiles.length, 2);
49
+ assert.ok(stagedFiles.includes('file1.txt'));
50
+ assert.ok(stagedFiles.includes('file2.txt'));
51
+ });
52
+ it('should return only staged files, not modified unstaged files', async () => {
53
+ // Commit previously staged files
54
+ execSync('git commit -m "Initial commit"', { cwd: gitDir });
55
+ // Create new file but don't stage it
56
+ writeFileSync(join(gitDir, 'file3.txt'), 'content3');
57
+ // Modify existing file but don't stage it
58
+ writeFileSync(join(gitDir, 'file1.txt'), 'modified content');
59
+ const stagedFiles = await adapter.getStagedFiles();
60
+ // Should be empty since nothing is staged
61
+ assert.deepStrictEqual(stagedFiles, []);
62
+ });
63
+ it('should detect partially staged files', async () => {
64
+ // Stage only file3
65
+ execSync('git add file3.txt', { cwd: gitDir });
66
+ const stagedFiles = await adapter.getStagedFiles();
67
+ assert.strictEqual(stagedFiles.length, 1);
68
+ assert.strictEqual(stagedFiles[0], 'file3.txt');
69
+ });
70
+ it('should handle non-git directory gracefully', async () => {
71
+ const nonGitAdapter = new GitAdapter(TEST_DIR);
72
+ const stagedFiles = await nonGitAdapter.getStagedFiles();
73
+ // Should return empty array, not throw
74
+ assert.deepStrictEqual(stagedFiles, []);
75
+ });
76
+ });
77
+ describe('SVNAdapter - getStagedFiles()', () => {
78
+ it('should return modified and added files as "staged"', async () => {
79
+ // SVN doesn't have staging - all modified/added files are considered "staged"
80
+ const adapter = new SVNAdapter(TEST_DIR);
81
+ // Mock SVN status output
82
+ // In real scenario, this would query actual SVN repo
83
+ // For now, test that it returns empty for non-SVN directory
84
+ const stagedFiles = await adapter.getStagedFiles();
85
+ // Should return empty for non-SVN directory
86
+ assert.ok(Array.isArray(stagedFiles));
87
+ });
88
+ it('should handle non-SVN directory gracefully', async () => {
89
+ const adapter = new SVNAdapter(TEST_DIR);
90
+ const stagedFiles = await adapter.getStagedFiles();
91
+ // Should return empty array, not throw
92
+ assert.deepStrictEqual(stagedFiles, []);
93
+ });
94
+ });
95
+ describe('MercurialAdapter - getStagedFiles()', () => {
96
+ it('should return modified, added, and removed files as "staged"', async () => {
97
+ // Mercurial doesn't have staging - all modified/added/removed files are considered "staged"
98
+ const adapter = new MercurialAdapter(TEST_DIR);
99
+ const stagedFiles = await adapter.getStagedFiles();
100
+ // Should return empty for non-Mercurial directory
101
+ assert.ok(Array.isArray(stagedFiles));
102
+ });
103
+ it('should handle non-Mercurial directory gracefully', async () => {
104
+ const adapter = new MercurialAdapter(TEST_DIR);
105
+ const stagedFiles = await adapter.getStagedFiles();
106
+ // Should return empty array, not throw
107
+ assert.deepStrictEqual(stagedFiles, []);
108
+ });
109
+ });
110
+ describe('Edge Cases', () => {
111
+ it('should handle empty repository', async () => {
112
+ const emptyGitDir = join(TEST_DIR, 'empty-git');
113
+ mkdirSync(emptyGitDir, { recursive: true });
114
+ execSync('git init', { cwd: emptyGitDir });
115
+ execSync('git config user.email "test@example.com"', { cwd: emptyGitDir });
116
+ execSync('git config user.name "Test User"', { cwd: emptyGitDir });
117
+ const adapter = new GitAdapter(emptyGitDir);
118
+ const stagedFiles = await adapter.getStagedFiles();
119
+ assert.deepStrictEqual(stagedFiles, []);
120
+ });
121
+ it('should handle files with spaces in names', async () => {
122
+ const gitDir = join(TEST_DIR, 'git-spaces');
123
+ mkdirSync(gitDir, { recursive: true });
124
+ execSync('git init', { cwd: gitDir });
125
+ execSync('git config user.email "test@example.com"', { cwd: gitDir });
126
+ execSync('git config user.name "Test User"', { cwd: gitDir });
127
+ // Create file with space in name
128
+ writeFileSync(join(gitDir, 'file with spaces.txt'), 'content');
129
+ execSync('git add "file with spaces.txt"', { cwd: gitDir });
130
+ const adapter = new GitAdapter(gitDir);
131
+ const stagedFiles = await adapter.getStagedFiles();
132
+ assert.strictEqual(stagedFiles.length, 1);
133
+ assert.strictEqual(stagedFiles[0], 'file with spaces.txt');
134
+ });
135
+ });
136
+ });
137
+ //# sourceMappingURL=vcs-staging.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-staging.test.js","sourceRoot":"","sources":["../../src/tests/vcs-staging.test.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,10 @@
5
5
  /**
6
6
  * Get current configuration settings
7
7
  *
8
+ * @param db - Optional database instance (for testing)
8
9
  * @returns Current configuration values
9
10
  */
10
- export declare function getConfig(): {
11
+ export declare function getConfig(db?: import('../types.js').Database): {
11
12
  ignoreWeekend: boolean;
12
13
  messageRetentionHours: number;
13
14
  fileHistoryRetentionDays: number;
@@ -17,13 +18,14 @@ export declare function getConfig(): {
17
18
  * Validates values before updating
18
19
  *
19
20
  * @param params - Configuration parameters to update
21
+ * @param db - Optional database instance (for testing)
20
22
  * @returns Updated configuration
21
23
  */
22
24
  export declare function updateConfig(params: {
23
25
  ignoreWeekend?: boolean;
24
26
  messageRetentionHours?: number;
25
27
  fileHistoryRetentionDays?: number;
26
- }): {
28
+ }, db?: import('../types.js').Database): {
27
29
  success: boolean;
28
30
  config: {
29
31
  ignoreWeekend: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;GAIG;AACH,wBAAgB,SAAS,IAAI;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAYA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,aAAa,EAAE,OAAO,CAAC;QACvB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB,CAqCA;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,GAAG,CAmBhC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CA4EnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,GAAG;IAC9D,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAYA;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,EAAE,EAAE,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,GAAG;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,aAAa,EAAE,OAAO,CAAC;QACvB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB,CAqCA;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,GAAG,CAmBhC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CA4EnC"}
@@ -7,13 +7,14 @@ import { CONFIG_KEYS } from '../constants.js';
7
7
  /**
8
8
  * Get current configuration settings
9
9
  *
10
+ * @param db - Optional database instance (for testing)
10
11
  * @returns Current configuration values
11
12
  */
12
- export function getConfig() {
13
- const db = getDatabase();
14
- const ignoreWeekend = getConfigBool(db, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, false);
15
- const messageRetentionHours = getConfigInt(db, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, 24);
16
- const fileHistoryRetentionDays = getConfigInt(db, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, 7);
13
+ export function getConfig(db) {
14
+ const actualDb = db ?? getDatabase();
15
+ const ignoreWeekend = getConfigBool(actualDb, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, false);
16
+ const messageRetentionHours = getConfigInt(actualDb, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, 24);
17
+ const fileHistoryRetentionDays = getConfigInt(actualDb, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, 7);
17
18
  return {
18
19
  ignoreWeekend,
19
20
  messageRetentionHours,
@@ -25,10 +26,11 @@ export function getConfig() {
25
26
  * Validates values before updating
26
27
  *
27
28
  * @param params - Configuration parameters to update
29
+ * @param db - Optional database instance (for testing)
28
30
  * @returns Updated configuration
29
31
  */
30
- export function updateConfig(params) {
31
- const db = getDatabase();
32
+ export function updateConfig(params, db) {
33
+ const actualDb = db ?? getDatabase();
32
34
  // Validate values
33
35
  if (params.messageRetentionHours !== undefined) {
34
36
  if (params.messageRetentionHours < 1 || params.messageRetentionHours > 168) {
@@ -42,16 +44,16 @@ export function updateConfig(params) {
42
44
  }
43
45
  // Update values
44
46
  if (params.ignoreWeekend !== undefined) {
45
- setConfigValue(db, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, params.ignoreWeekend ? '1' : '0');
47
+ setConfigValue(actualDb, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, params.ignoreWeekend ? '1' : '0');
46
48
  }
47
49
  if (params.messageRetentionHours !== undefined) {
48
- setConfigValue(db, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, String(params.messageRetentionHours));
50
+ setConfigValue(actualDb, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, String(params.messageRetentionHours));
49
51
  }
50
52
  if (params.fileHistoryRetentionDays !== undefined) {
51
- setConfigValue(db, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, String(params.fileHistoryRetentionDays));
53
+ setConfigValue(actualDb, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, String(params.fileHistoryRetentionDays));
52
54
  }
53
55
  // Get updated config
54
- const updatedConfig = getConfig();
56
+ const updatedConfig = getConfig(actualDb);
55
57
  return {
56
58
  success: true,
57
59
  config: updatedConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Constraint management tools for MCP Shared Context Server
3
3
  * Handles constraint tracking with priority, layer assignment, and tags
4
4
  */
5
- import type { AddConstraintParams, AddConstraintResponse, GetConstraintsParams, GetConstraintsResponse, DeactivateConstraintParams, DeactivateConstraintResponse } from '../types.js';
5
+ import type { AddConstraintParams, AddConstraintResponse, GetConstraintsParams, GetConstraintsResponse, DeactivateConstraintParams, DeactivateConstraintResponse, Database } from '../types.js';
6
6
  /**
7
7
  * Get or create constraint category ID
8
8
  * Uses INSERT OR IGNORE for idempotent operation
@@ -11,25 +11,28 @@ import type { AddConstraintParams, AddConstraintResponse, GetConstraintsParams,
11
11
  * Add a constraint with priority, layer, and tags
12
12
  *
13
13
  * @param params - Constraint parameters
14
+ * @param db - Optional database instance (for testing)
14
15
  * @returns Constraint ID and timestamp
15
16
  */
16
- export declare function addConstraint(params: AddConstraintParams): AddConstraintResponse;
17
+ export declare function addConstraint(params: AddConstraintParams, db?: Database): AddConstraintResponse;
17
18
  /**
18
19
  * Retrieve t_constraints with advanced filtering
19
20
  * Uses v_tagged_constraints view for token efficiency
20
21
  *
21
22
  * @param params - Filter parameters
23
+ * @param db - Optional database instance (for testing)
22
24
  * @returns Array of t_constraints matching filters
23
25
  */
24
- export declare function getConstraints(params: GetConstraintsParams): GetConstraintsResponse;
26
+ export declare function getConstraints(params: GetConstraintsParams, db?: Database): GetConstraintsResponse;
25
27
  /**
26
28
  * Deactivate a constraint (soft delete)
27
29
  * Idempotent - deactivating already-inactive constraint is safe
28
30
  *
29
31
  * @param params - Constraint ID to deactivate
32
+ * @param db - Optional database instance (for testing)
30
33
  * @returns Success status
31
34
  */
32
- export declare function deactivateConstraint(params: DeactivateConstraintParams): DeactivateConstraintResponse;
35
+ export declare function deactivateConstraint(params: DeactivateConstraintParams, db?: Database): DeactivateConstraintResponse;
33
36
  /**
34
37
  * Get help documentation for constraint tool
35
38
  * @returns Help documentation object
@@ -1 +1 @@
1
- {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAI7B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,CAoEhF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,sBAAsB,CAmEnF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,4BAA4B,CA0BrG;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAsBpC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAuIvC"}
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/tools/constraints.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAG5B,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,qBAAqB,CAoE/F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,sBAAsB,CAmElG;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,4BAA4B,CA0BpH;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAsBpC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAuIvC"}