sqlew 3.5.3 → 3.6.1

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 (257) hide show
  1. package/CHANGELOG.md +247 -1772
  2. package/README.md +70 -304
  3. package/assets/config.example.toml +106 -0
  4. package/dist/adapters/index.d.ts +11 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/adapters/index.js +21 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/mysql-adapter.d.ts +31 -0
  9. package/dist/adapters/mysql-adapter.d.ts.map +1 -0
  10. package/dist/adapters/mysql-adapter.js +63 -0
  11. package/dist/adapters/mysql-adapter.js.map +1 -0
  12. package/dist/adapters/postgresql-adapter.d.ts +31 -0
  13. package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
  14. package/dist/adapters/postgresql-adapter.js +63 -0
  15. package/dist/adapters/postgresql-adapter.js.map +1 -0
  16. package/dist/adapters/sqlite-adapter.d.ts +37 -0
  17. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  18. package/dist/adapters/sqlite-adapter.js +129 -0
  19. package/dist/adapters/sqlite-adapter.js.map +1 -0
  20. package/dist/adapters/types.d.ts +33 -0
  21. package/dist/adapters/types.d.ts.map +1 -0
  22. package/dist/adapters/types.js +2 -0
  23. package/dist/adapters/types.js.map +1 -0
  24. package/dist/cli.js +55 -54
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config/example-generator.d.ts +11 -0
  27. package/dist/config/example-generator.d.ts.map +1 -0
  28. package/dist/config/example-generator.js +48 -0
  29. package/dist/config/example-generator.js.map +1 -0
  30. package/dist/config/loader.d.ts.map +1 -1
  31. package/dist/config/loader.js +4 -0
  32. package/dist/config/loader.js.map +1 -1
  33. package/dist/config/types.d.ts +11 -0
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/config/types.js.map +1 -1
  36. package/dist/database.d.ts +56 -121
  37. package/dist/database.d.ts.map +1 -1
  38. package/dist/database.js +266 -414
  39. package/dist/database.js.map +1 -1
  40. package/dist/index.js +329 -245
  41. package/dist/index.js.map +1 -1
  42. package/dist/knexfile.d.ts +6 -0
  43. package/dist/knexfile.d.ts.map +1 -0
  44. package/dist/knexfile.js +85 -0
  45. package/dist/knexfile.js.map +1 -0
  46. package/dist/migrations/add-help-system-tables.d.ts +35 -0
  47. package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
  48. package/dist/migrations/add-help-system-tables.js +206 -0
  49. package/dist/migrations/add-help-system-tables.js.map +1 -0
  50. package/dist/migrations/add-token-tracking.d.ts +28 -0
  51. package/dist/migrations/add-token-tracking.d.ts.map +1 -0
  52. package/dist/migrations/add-token-tracking.js +108 -0
  53. package/dist/migrations/add-token-tracking.js.map +1 -0
  54. package/dist/migrations/index.d.ts +25 -12
  55. package/dist/migrations/index.d.ts.map +1 -1
  56. package/dist/migrations/index.js +147 -20
  57. package/dist/migrations/index.js.map +1 -1
  58. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
  59. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
  60. package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
  61. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
  62. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
  63. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
  64. package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
  65. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
  66. package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
  67. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
  68. package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
  69. package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
  70. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
  71. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
  72. package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
  73. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
  74. package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
  75. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
  76. package/dist/migrations/knex/20251025070349_create_views.js +143 -0
  77. package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
  78. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
  79. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  80. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
  81. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  82. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
  83. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  84. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
  85. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  86. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
  87. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
  88. package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
  89. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
  90. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
  91. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  92. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
  93. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  94. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
  95. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
  96. package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
  97. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
  98. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
  99. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  100. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
  101. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
  102. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
  103. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  104. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
  105. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  106. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
  107. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  108. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
  109. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
  110. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
  111. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  112. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
  113. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  114. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
  115. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
  116. package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
  117. package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
  118. package/dist/migrations/seed-help-data.d.ts +48 -0
  119. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  120. package/dist/migrations/seed-help-data.js +1466 -0
  121. package/dist/migrations/seed-help-data.js.map +1 -0
  122. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  123. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  124. package/dist/migrations/seed-tool-metadata.js +392 -0
  125. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  126. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  127. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  128. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  129. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  130. package/dist/schema.d.ts.map +1 -1
  131. package/dist/schema.js +2 -0
  132. package/dist/schema.js.map +1 -1
  133. package/dist/tests/agent-reuse.test.d.ts +6 -0
  134. package/dist/tests/agent-reuse.test.d.ts.map +1 -0
  135. package/dist/tests/agent-reuse.test.js +242 -0
  136. package/dist/tests/agent-reuse.test.js.map +1 -0
  137. package/dist/tests/all-features.test.d.ts +7 -0
  138. package/dist/tests/all-features.test.d.ts.map +1 -0
  139. package/dist/tests/all-features.test.js +514 -0
  140. package/dist/tests/all-features.test.js.map +1 -0
  141. package/dist/tests/git-aware-completion.test.js +89 -70
  142. package/dist/tests/git-aware-completion.test.js.map +1 -1
  143. package/dist/tests/help-system.test.d.ts +23 -0
  144. package/dist/tests/help-system.test.d.ts.map +1 -0
  145. package/dist/tests/help-system.test.js +374 -0
  146. package/dist/tests/help-system.test.js.map +1 -0
  147. package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
  148. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
  149. package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
  150. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  151. package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
  152. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
  153. package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
  154. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
  155. package/dist/tests/tasks.dependencies.test.js +338 -307
  156. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  157. package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
  158. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  159. package/dist/tests/tasks.watch-files-action.test.js +122 -101
  160. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  161. package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
  162. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  163. package/dist/tests/two-step-git-completion.test.js +176 -133
  164. package/dist/tests/two-step-git-completion.test.js.map +1 -1
  165. package/dist/tests/vcs-staging.test.js +1 -1
  166. package/dist/tests/vcs-staging.test.js.map +1 -1
  167. package/dist/tools/config.d.ts +9 -6
  168. package/dist/tools/config.d.ts.map +1 -1
  169. package/dist/tools/config.js +16 -14
  170. package/dist/tools/config.js.map +1 -1
  171. package/dist/tools/constraints.d.ts +10 -7
  172. package/dist/tools/constraints.d.ts.map +1 -1
  173. package/dist/tools/constraints.js +73 -51
  174. package/dist/tools/constraints.js.map +1 -1
  175. package/dist/tools/context.d.ts +36 -33
  176. package/dist/tools/context.d.ts.map +1 -1
  177. package/dist/tools/context.js +441 -340
  178. package/dist/tools/context.js.map +1 -1
  179. package/dist/tools/files.d.ts +12 -9
  180. package/dist/tools/files.d.ts.map +1 -1
  181. package/dist/tools/files.js +173 -95
  182. package/dist/tools/files.js.map +1 -1
  183. package/dist/tools/help-queries.d.ts +130 -0
  184. package/dist/tools/help-queries.d.ts.map +1 -0
  185. package/dist/tools/help-queries.js +393 -0
  186. package/dist/tools/help-queries.js.map +1 -0
  187. package/dist/tools/messaging.d.ts +14 -11
  188. package/dist/tools/messaging.d.ts.map +1 -1
  189. package/dist/tools/messaging.js +239 -133
  190. package/dist/tools/messaging.js.map +1 -1
  191. package/dist/tools/tasks.d.ts +18 -16
  192. package/dist/tools/tasks.d.ts.map +1 -1
  193. package/dist/tools/tasks.js +519 -442
  194. package/dist/tools/tasks.js.map +1 -1
  195. package/dist/tools/utils.d.ts +14 -11
  196. package/dist/tools/utils.d.ts.map +1 -1
  197. package/dist/tools/utils.js +90 -122
  198. package/dist/tools/utils.js.map +1 -1
  199. package/dist/types.d.ts +1 -0
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/utils/activity-logging.d.ts +114 -0
  202. package/dist/utils/activity-logging.d.ts.map +1 -0
  203. package/dist/utils/activity-logging.js +162 -0
  204. package/dist/utils/activity-logging.js.map +1 -0
  205. package/dist/utils/batch.d.ts +2 -2
  206. package/dist/utils/batch.d.ts.map +1 -1
  207. package/dist/utils/batch.js +8 -8
  208. package/dist/utils/batch.js.map +1 -1
  209. package/dist/utils/cleanup.d.ts +24 -14
  210. package/dist/utils/cleanup.d.ts.map +1 -1
  211. package/dist/utils/cleanup.js +37 -27
  212. package/dist/utils/cleanup.js.map +1 -1
  213. package/dist/utils/debug-logger.d.ts +99 -0
  214. package/dist/utils/debug-logger.d.ts.map +1 -0
  215. package/dist/utils/debug-logger.js +267 -0
  216. package/dist/utils/debug-logger.js.map +1 -0
  217. package/dist/utils/error-handler.d.ts +28 -0
  218. package/dist/utils/error-handler.d.ts.map +1 -0
  219. package/dist/utils/error-handler.js +121 -0
  220. package/dist/utils/error-handler.js.map +1 -0
  221. package/dist/utils/help-tracking.d.ts +55 -0
  222. package/dist/utils/help-tracking.d.ts.map +1 -0
  223. package/dist/utils/help-tracking.js +88 -0
  224. package/dist/utils/help-tracking.js.map +1 -0
  225. package/dist/utils/param-parser.d.ts +23 -0
  226. package/dist/utils/param-parser.d.ts.map +1 -0
  227. package/dist/utils/param-parser.js +52 -0
  228. package/dist/utils/param-parser.js.map +1 -0
  229. package/dist/utils/retention.d.ts +17 -7
  230. package/dist/utils/retention.d.ts.map +1 -1
  231. package/dist/utils/retention.js +31 -12
  232. package/dist/utils/retention.js.map +1 -1
  233. package/dist/utils/task-stale-detection.d.ts +15 -13
  234. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  235. package/dist/utils/task-stale-detection.js +100 -302
  236. package/dist/utils/task-stale-detection.js.map +1 -1
  237. package/dist/utils/token-estimation.d.ts +72 -0
  238. package/dist/utils/token-estimation.d.ts.map +1 -0
  239. package/dist/utils/token-estimation.js +71 -0
  240. package/dist/utils/token-estimation.js.map +1 -0
  241. package/dist/utils/token-logging.d.ts +48 -0
  242. package/dist/utils/token-logging.d.ts.map +1 -0
  243. package/dist/utils/token-logging.js +112 -0
  244. package/dist/utils/token-logging.js.map +1 -0
  245. package/dist/utils/view-queries.d.ts +34 -0
  246. package/dist/utils/view-queries.d.ts.map +1 -0
  247. package/dist/utils/view-queries.js +192 -0
  248. package/dist/utils/view-queries.js.map +1 -0
  249. package/dist/watcher/file-watcher.d.ts.map +1 -1
  250. package/dist/watcher/file-watcher.js +25 -11
  251. package/dist/watcher/file-watcher.js.map +1 -1
  252. package/docs/BEST_PRACTICES.md +56 -448
  253. package/docs/MIGRATION_v3.6.0.md +170 -0
  254. package/docs/SHARED_CONCEPTS.md +63 -208
  255. package/docs/TASK_OVERVIEW.md +2 -2
  256. package/docs/TOOL_SELECTION.md +41 -248
  257. package/package.json +17 -4
@@ -0,0 +1,514 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Comprehensive feature test for MCP Sqlew
4
+ * Tests all tools and actions to detect crashes with proper TypeScript types
5
+ */
6
+ import { initializeDatabase, closeDatabase } from '../database.js';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ // Import all tool functions
10
+ import { setDecision, getDecision, searchByTags, getVersions, searchByLayer, addDecisionContextAction, listDecisionContextsAction } from '../tools/context.js';
11
+ import { sendMessage, getMessages, markRead } from '../tools/messaging.js';
12
+ import { recordFileChange, getFileChanges, checkFileLock } from '../tools/files.js';
13
+ import { addConstraint, getConstraints, deactivateConstraint } from '../tools/constraints.js';
14
+ import { getLayerSummary, clearOldData, getStats } from '../tools/utils.js';
15
+ import { getConfig, updateConfig } from '../tools/config.js';
16
+ import { createTask, updateTask, getTask, listTasks, moveTask, linkTask, archiveTask, batchCreateTasks, addDependency, removeDependency, getDependencies } from '../tools/tasks.js';
17
+ const TEST_DB_PATH = '.sqlew/tmp/test-all-features.db';
18
+ const results = [];
19
+ function log(message) {
20
+ console.log(`[${new Date().toISOString()}] ${message}`);
21
+ }
22
+ function recordResult(tool, action, status, error, duration) {
23
+ results.push({ tool, action, status, error, duration });
24
+ const statusIcon = status === 'PASS' ? '✅' : status === 'FAIL' ? '❌' : '💥';
25
+ log(`${statusIcon} ${tool}.${action} - ${status}${error ? ': ' + error : ''}${duration ? ` (${duration}ms)` : ''}`);
26
+ }
27
+ async function testDecisionTool() {
28
+ log('\n=== Testing Decision Tool ===');
29
+ // Test set action
30
+ try {
31
+ const start = Date.now();
32
+ await setDecision({
33
+ key: 'test-decision-1',
34
+ value: 'Test decision value',
35
+ agent: 'test-agent',
36
+ tags: ['test', 'feature-testing'],
37
+ layer: 'business',
38
+ version: '1.0.0',
39
+ status: 'active'
40
+ });
41
+ recordResult('decision', 'set', 'PASS', undefined, Date.now() - start);
42
+ }
43
+ catch (error) {
44
+ recordResult('decision', 'set', 'CRASH', error instanceof Error ? error.message : String(error));
45
+ }
46
+ // Test get action
47
+ try {
48
+ const start = Date.now();
49
+ const result = await getDecision({ key: 'test-decision-1' });
50
+ recordResult('decision', 'get', result.found ? 'PASS' : 'FAIL', undefined, Date.now() - start);
51
+ }
52
+ catch (error) {
53
+ recordResult('decision', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
54
+ }
55
+ // Test search_tags action
56
+ try {
57
+ const start = Date.now();
58
+ const result = await searchByTags({ tags: ['test'], match_mode: 'AND' });
59
+ recordResult('decision', 'search_tags', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
60
+ }
61
+ catch (error) {
62
+ recordResult('decision', 'search_tags', 'CRASH', error instanceof Error ? error.message : String(error));
63
+ }
64
+ // Test search_layer action
65
+ try {
66
+ const start = Date.now();
67
+ const result = await searchByLayer({ layer: 'business', status: 'active' });
68
+ recordResult('decision', 'search_layer', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
69
+ }
70
+ catch (error) {
71
+ recordResult('decision', 'search_layer', 'CRASH', error instanceof Error ? error.message : String(error));
72
+ }
73
+ // Test versions action
74
+ try {
75
+ const start = Date.now();
76
+ const result = await getVersions({ key: 'test-decision-1' });
77
+ recordResult('decision', 'versions', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
78
+ }
79
+ catch (error) {
80
+ recordResult('decision', 'versions', 'CRASH', error instanceof Error ? error.message : String(error));
81
+ }
82
+ // Test add_decision_context action
83
+ try {
84
+ const start = Date.now();
85
+ await addDecisionContextAction({
86
+ key: 'test-decision-1',
87
+ rationale: 'Test rationale',
88
+ alternatives_considered: ['Option A', 'Option B'],
89
+ tradeoffs: 'Test tradeoffs'
90
+ });
91
+ recordResult('decision', 'add_decision_context', 'PASS', undefined, Date.now() - start);
92
+ }
93
+ catch (error) {
94
+ recordResult('decision', 'add_decision_context', 'CRASH', error instanceof Error ? error.message : String(error));
95
+ }
96
+ // Test list_decision_contexts action
97
+ try {
98
+ const start = Date.now();
99
+ const result = await listDecisionContextsAction({});
100
+ recordResult('decision', 'list_decision_contexts', Array.isArray(result.contexts) ? 'PASS' : 'FAIL', undefined, Date.now() - start);
101
+ }
102
+ catch (error) {
103
+ recordResult('decision', 'list_decision_contexts', 'CRASH', error instanceof Error ? error.message : String(error));
104
+ }
105
+ }
106
+ async function testMessageTool() {
107
+ log('\n=== Testing Message Tool ===');
108
+ // Test send action
109
+ try {
110
+ const start = Date.now();
111
+ await sendMessage({
112
+ from_agent: 'agent-1',
113
+ to_agent: 'agent-2',
114
+ msg_type: 'info',
115
+ message: 'Test message',
116
+ priority: 'medium'
117
+ });
118
+ recordResult('message', 'send', 'PASS', undefined, Date.now() - start);
119
+ }
120
+ catch (error) {
121
+ recordResult('message', 'send', 'CRASH', error instanceof Error ? error.message : String(error));
122
+ }
123
+ // Test get action
124
+ try {
125
+ const start = Date.now();
126
+ const result = await getMessages({ agent_name: 'agent-2' });
127
+ recordResult('message', 'get', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
128
+ }
129
+ catch (error) {
130
+ recordResult('message', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
131
+ }
132
+ // Test mark_read action
133
+ try {
134
+ const start = Date.now();
135
+ const messages = await getMessages({ agent_name: 'agent-2' });
136
+ if (messages.messages.length > 0) {
137
+ await markRead({ message_ids: [messages.messages[0].id], agent_name: 'agent-2' });
138
+ recordResult('message', 'mark_read', 'PASS', undefined, Date.now() - start);
139
+ }
140
+ else {
141
+ recordResult('message', 'mark_read', 'FAIL', 'No messages to mark as read');
142
+ }
143
+ }
144
+ catch (error) {
145
+ recordResult('message', 'mark_read', 'CRASH', error instanceof Error ? error.message : String(error));
146
+ }
147
+ }
148
+ async function testFileTool() {
149
+ log('\n=== Testing File Tool ===');
150
+ // Test record action
151
+ try {
152
+ const start = Date.now();
153
+ await recordFileChange({
154
+ file_path: '/test/file.ts',
155
+ agent_name: 'test-agent',
156
+ change_type: 'modified',
157
+ description: 'Test change',
158
+ layer: 'business'
159
+ });
160
+ recordResult('file', 'record', 'PASS', undefined, Date.now() - start);
161
+ }
162
+ catch (error) {
163
+ recordResult('file', 'record', 'CRASH', error instanceof Error ? error.message : String(error));
164
+ }
165
+ // Test get action
166
+ try {
167
+ const start = Date.now();
168
+ const result = await getFileChanges({ file_path: '/test/file.ts' });
169
+ recordResult('file', 'get', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
170
+ }
171
+ catch (error) {
172
+ recordResult('file', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
173
+ }
174
+ // Test check_lock action
175
+ try {
176
+ const start = Date.now();
177
+ await checkFileLock({ file_path: '/test/file.ts' });
178
+ recordResult('file', 'check_lock', 'PASS', undefined, Date.now() - start);
179
+ }
180
+ catch (error) {
181
+ recordResult('file', 'check_lock', 'CRASH', error instanceof Error ? error.message : String(error));
182
+ }
183
+ }
184
+ async function testConstraintTool() {
185
+ log('\n=== Testing Constraint Tool ===');
186
+ let constraintId;
187
+ // Test add action
188
+ try {
189
+ const start = Date.now();
190
+ const result = await addConstraint({
191
+ category: 'architecture',
192
+ constraint_text: 'Test constraint rule',
193
+ priority: 'medium',
194
+ tags: ['test'],
195
+ created_by: 'test-agent'
196
+ });
197
+ constraintId = result.constraint_id;
198
+ recordResult('constraint', 'add', 'PASS', undefined, Date.now() - start);
199
+ }
200
+ catch (error) {
201
+ recordResult('constraint', 'add', 'CRASH', error instanceof Error ? error.message : String(error));
202
+ }
203
+ // Test get action
204
+ try {
205
+ const start = Date.now();
206
+ const result = await getConstraints({ category: 'architecture' });
207
+ recordResult('constraint', 'get', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
208
+ }
209
+ catch (error) {
210
+ recordResult('constraint', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
211
+ }
212
+ // Test deactivate action
213
+ try {
214
+ const start = Date.now();
215
+ if (constraintId) {
216
+ await deactivateConstraint({ constraint_id: constraintId });
217
+ recordResult('constraint', 'deactivate', 'PASS', undefined, Date.now() - start);
218
+ }
219
+ else {
220
+ recordResult('constraint', 'deactivate', 'FAIL', 'No constraint ID available');
221
+ }
222
+ }
223
+ catch (error) {
224
+ recordResult('constraint', 'deactivate', 'CRASH', error instanceof Error ? error.message : String(error));
225
+ }
226
+ }
227
+ async function testStatsTool() {
228
+ log('\n=== Testing Stats Tool ===');
229
+ // Test layer_summary action
230
+ try {
231
+ const start = Date.now();
232
+ await getLayerSummary();
233
+ recordResult('stats', 'layer_summary', 'PASS', undefined, Date.now() - start);
234
+ }
235
+ catch (error) {
236
+ recordResult('stats', 'layer_summary', 'CRASH', error instanceof Error ? error.message : String(error));
237
+ }
238
+ // Test db_stats action
239
+ try {
240
+ const start = Date.now();
241
+ await getStats();
242
+ recordResult('stats', 'db_stats', 'PASS', undefined, Date.now() - start);
243
+ }
244
+ catch (error) {
245
+ recordResult('stats', 'db_stats', 'CRASH', error instanceof Error ? error.message : String(error));
246
+ }
247
+ // Test clear action
248
+ try {
249
+ const start = Date.now();
250
+ await clearOldData({});
251
+ recordResult('stats', 'clear', 'PASS', undefined, Date.now() - start);
252
+ }
253
+ catch (error) {
254
+ recordResult('stats', 'clear', 'CRASH', error instanceof Error ? error.message : String(error));
255
+ }
256
+ }
257
+ async function testConfigTool() {
258
+ log('\n=== Testing Config Tool ===');
259
+ // Test get action
260
+ try {
261
+ const start = Date.now();
262
+ await getConfig();
263
+ recordResult('config', 'get', 'PASS', undefined, Date.now() - start);
264
+ }
265
+ catch (error) {
266
+ recordResult('config', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
267
+ }
268
+ // Test update action
269
+ try {
270
+ const start = Date.now();
271
+ await updateConfig({
272
+ messageRetentionHours: 72,
273
+ fileHistoryRetentionDays: 14,
274
+ ignoreWeekend: true
275
+ });
276
+ recordResult('config', 'update', 'PASS', undefined, Date.now() - start);
277
+ }
278
+ catch (error) {
279
+ recordResult('config', 'update', 'CRASH', error instanceof Error ? error.message : String(error));
280
+ }
281
+ }
282
+ async function testTaskTool() {
283
+ log('\n=== Testing Task Tool ===');
284
+ let taskId1;
285
+ let taskId2;
286
+ // Test create action
287
+ try {
288
+ const start = Date.now();
289
+ const result = await createTask({
290
+ title: 'Test Task 1',
291
+ description: 'Test description',
292
+ status: 'todo',
293
+ priority: 2,
294
+ tags: ['test'],
295
+ created_by_agent: 'test-agent'
296
+ });
297
+ taskId1 = result.task_id;
298
+ recordResult('task', 'create', 'PASS', undefined, Date.now() - start);
299
+ }
300
+ catch (error) {
301
+ recordResult('task', 'create', 'CRASH', error instanceof Error ? error.message : String(error));
302
+ }
303
+ // Test batch_create action
304
+ try {
305
+ const start = Date.now();
306
+ const results = await batchCreateTasks({
307
+ tasks: [
308
+ {
309
+ title: 'Test Task 2',
310
+ priority: 1
311
+ },
312
+ {
313
+ title: 'Test Task 3',
314
+ priority: 3
315
+ }
316
+ ]
317
+ });
318
+ taskId2 = results.results[0]?.task_id;
319
+ recordResult('task', 'batch_create', results.success ? 'PASS' : 'FAIL', undefined, Date.now() - start);
320
+ }
321
+ catch (error) {
322
+ recordResult('task', 'batch_create', 'CRASH', error instanceof Error ? error.message : String(error));
323
+ }
324
+ // Test get action
325
+ try {
326
+ const start = Date.now();
327
+ if (taskId1) {
328
+ const result = await getTask({ task_id: taskId1 });
329
+ recordResult('task', 'get', result.found ? 'PASS' : 'FAIL', undefined, Date.now() - start);
330
+ }
331
+ else {
332
+ recordResult('task', 'get', 'FAIL', 'No task ID available');
333
+ }
334
+ }
335
+ catch (error) {
336
+ recordResult('task', 'get', 'CRASH', error instanceof Error ? error.message : String(error));
337
+ }
338
+ // Test list action
339
+ try {
340
+ const start = Date.now();
341
+ const result = await listTasks({});
342
+ recordResult('task', 'list', result.count >= 0 ? 'PASS' : 'FAIL', undefined, Date.now() - start);
343
+ }
344
+ catch (error) {
345
+ recordResult('task', 'list', 'CRASH', error instanceof Error ? error.message : String(error));
346
+ }
347
+ // Test update action
348
+ try {
349
+ const start = Date.now();
350
+ if (taskId1) {
351
+ await updateTask({
352
+ task_id: taskId1,
353
+ description: 'Updated description',
354
+ priority: 3
355
+ });
356
+ recordResult('task', 'update', 'PASS', undefined, Date.now() - start);
357
+ }
358
+ else {
359
+ recordResult('task', 'update', 'FAIL', 'No task ID available');
360
+ }
361
+ }
362
+ catch (error) {
363
+ recordResult('task', 'update', 'CRASH', error instanceof Error ? error.message : String(error));
364
+ }
365
+ // Test move action
366
+ try {
367
+ const start = Date.now();
368
+ if (taskId1) {
369
+ await moveTask({ task_id: taskId1, new_status: 'in_progress' });
370
+ recordResult('task', 'move', 'PASS', undefined, Date.now() - start);
371
+ }
372
+ else {
373
+ recordResult('task', 'move', 'FAIL', 'No task ID available');
374
+ }
375
+ }
376
+ catch (error) {
377
+ recordResult('task', 'move', 'CRASH', error instanceof Error ? error.message : String(error));
378
+ }
379
+ // Test link action
380
+ try {
381
+ const start = Date.now();
382
+ if (taskId1) {
383
+ await linkTask({ task_id: taskId1, link_type: 'decision', target_id: 'test-decision-1' });
384
+ recordResult('task', 'link', 'PASS', undefined, Date.now() - start);
385
+ }
386
+ else {
387
+ recordResult('task', 'link', 'FAIL', 'No task ID available');
388
+ }
389
+ }
390
+ catch (error) {
391
+ recordResult('task', 'link', 'CRASH', error instanceof Error ? error.message : String(error));
392
+ }
393
+ // Test add_dependency action
394
+ try {
395
+ const start = Date.now();
396
+ if (taskId1 && taskId2) {
397
+ await addDependency({ blocker_task_id: taskId1, blocked_task_id: taskId2 });
398
+ recordResult('task', 'add_dependency', 'PASS', undefined, Date.now() - start);
399
+ }
400
+ else {
401
+ recordResult('task', 'add_dependency', 'FAIL', 'Need two task IDs');
402
+ }
403
+ }
404
+ catch (error) {
405
+ recordResult('task', 'add_dependency', 'CRASH', error instanceof Error ? error.message : String(error));
406
+ }
407
+ // Test get_dependencies action
408
+ try {
409
+ const start = Date.now();
410
+ if (taskId1) {
411
+ await getDependencies({ task_id: taskId1 });
412
+ recordResult('task', 'get_dependencies', 'PASS', undefined, Date.now() - start);
413
+ }
414
+ else {
415
+ recordResult('task', 'get_dependencies', 'FAIL', 'No task ID available');
416
+ }
417
+ }
418
+ catch (error) {
419
+ recordResult('task', 'get_dependencies', 'CRASH', error instanceof Error ? error.message : String(error));
420
+ }
421
+ // Test remove_dependency action
422
+ try {
423
+ const start = Date.now();
424
+ if (taskId1 && taskId2) {
425
+ await removeDependency({ blocker_task_id: taskId1, blocked_task_id: taskId2 });
426
+ recordResult('task', 'remove_dependency', 'PASS', undefined, Date.now() - start);
427
+ }
428
+ else {
429
+ recordResult('task', 'remove_dependency', 'FAIL', 'Need two task IDs');
430
+ }
431
+ }
432
+ catch (error) {
433
+ recordResult('task', 'remove_dependency', 'CRASH', error instanceof Error ? error.message : String(error));
434
+ }
435
+ // Test archive action
436
+ try {
437
+ const start = Date.now();
438
+ if (taskId1) {
439
+ await archiveTask({ task_id: taskId1 });
440
+ recordResult('task', 'archive', 'PASS', undefined, Date.now() - start);
441
+ }
442
+ else {
443
+ recordResult('task', 'archive', 'FAIL', 'No task ID available');
444
+ }
445
+ }
446
+ catch (error) {
447
+ recordResult('task', 'archive', 'CRASH', error instanceof Error ? error.message : String(error));
448
+ }
449
+ }
450
+ async function runAllTests() {
451
+ log('Starting comprehensive MCP Sqlew feature test...\n');
452
+ // Ensure test directory exists
453
+ const testDir = path.dirname(TEST_DB_PATH);
454
+ if (!fs.existsSync(testDir)) {
455
+ fs.mkdirSync(testDir, { recursive: true });
456
+ }
457
+ // Remove old test database if exists
458
+ if (fs.existsSync(TEST_DB_PATH)) {
459
+ fs.unlinkSync(TEST_DB_PATH);
460
+ }
461
+ // Initialize test database
462
+ try {
463
+ await initializeDatabase({ databaseType: 'sqlite', connection: { filename: TEST_DB_PATH } });
464
+ log('✅ Database initialized successfully\n');
465
+ }
466
+ catch (error) {
467
+ log(`❌ Failed to initialize database: ${error}`);
468
+ process.exit(1);
469
+ }
470
+ try {
471
+ await testDecisionTool();
472
+ await testMessageTool();
473
+ await testFileTool();
474
+ await testConstraintTool();
475
+ await testStatsTool();
476
+ await testConfigTool();
477
+ await testTaskTool();
478
+ }
479
+ finally {
480
+ await closeDatabase();
481
+ }
482
+ // Print summary
483
+ log('\n\n=== TEST SUMMARY ===');
484
+ const passed = results.filter(r => r.status === 'PASS').length;
485
+ const failed = results.filter(r => r.status === 'FAIL').length;
486
+ const crashed = results.filter(r => r.status === 'CRASH').length;
487
+ log(`Total tests: ${results.length}`);
488
+ log(`✅ Passed: ${passed}`);
489
+ log(`❌ Failed: ${failed}`);
490
+ log(`💥 Crashed: ${crashed}`);
491
+ if (crashed > 0) {
492
+ log('\n=== CRASHES DETECTED ===');
493
+ results.filter(r => r.status === 'CRASH').forEach(r => {
494
+ log(`💥 ${r.tool}.${r.action}: ${r.error}`);
495
+ });
496
+ }
497
+ if (failed > 0) {
498
+ log('\n=== FAILURES ===');
499
+ results.filter(r => r.status === 'FAIL').forEach(r => {
500
+ log(`❌ ${r.tool}.${r.action}: ${r.error || 'Unknown failure'}`);
501
+ });
502
+ }
503
+ // Export results as JSON
504
+ const resultsPath = path.join(testDir, 'test-results.json');
505
+ fs.writeFileSync(resultsPath, JSON.stringify(results, null, 2));
506
+ log(`\n📝 Detailed results saved to ${resultsPath}`);
507
+ process.exit(crashed > 0 ? 1 : 0);
508
+ }
509
+ runAllTests().catch(error => {
510
+ console.error('💥 Fatal error during testing:', error);
511
+ console.error(error.stack);
512
+ process.exit(1);
513
+ });
514
+ //# sourceMappingURL=all-features.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-features.test.js","sourceRoot":"","sources":["../../src/tests/all-features.test.ts"],"names":[],"mappings":"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"}