sqlew 3.5.3 → 3.6.0

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 (227) hide show
  1. package/CHANGELOG.md +247 -1772
  2. package/README.md +70 -304
  3. package/assets/config.example.toml +97 -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 +9 -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 +44 -122
  37. package/dist/database.d.ts.map +1 -1
  38. package/dist/database.js +145 -416
  39. package/dist/database.js.map +1 -1
  40. package/dist/index.js +215 -185
  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/seed-help-data.d.ts +48 -0
  107. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  108. package/dist/migrations/seed-help-data.js +1466 -0
  109. package/dist/migrations/seed-help-data.js.map +1 -0
  110. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  111. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  112. package/dist/migrations/seed-tool-metadata.js +392 -0
  113. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  114. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  115. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  116. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  117. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  118. package/dist/schema.d.ts.map +1 -1
  119. package/dist/schema.js +2 -0
  120. package/dist/schema.js.map +1 -1
  121. package/dist/tests/git-aware-completion.test.js +89 -70
  122. package/dist/tests/git-aware-completion.test.js.map +1 -1
  123. package/dist/tests/help-system.test.d.ts +23 -0
  124. package/dist/tests/help-system.test.d.ts.map +1 -0
  125. package/dist/tests/help-system.test.js +374 -0
  126. package/dist/tests/help-system.test.js.map +1 -0
  127. package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
  128. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
  129. package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
  130. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  131. package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
  132. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
  133. package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
  134. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
  135. package/dist/tests/tasks.dependencies.test.js +338 -307
  136. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  137. package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
  138. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  139. package/dist/tests/tasks.watch-files-action.test.js +122 -101
  140. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  141. package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
  142. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  143. package/dist/tests/two-step-git-completion.test.js +176 -133
  144. package/dist/tests/two-step-git-completion.test.js.map +1 -1
  145. package/dist/tests/vcs-staging.test.js +1 -1
  146. package/dist/tests/vcs-staging.test.js.map +1 -1
  147. package/dist/tools/config.d.ts +9 -6
  148. package/dist/tools/config.d.ts.map +1 -1
  149. package/dist/tools/config.js +16 -14
  150. package/dist/tools/config.js.map +1 -1
  151. package/dist/tools/constraints.d.ts +10 -7
  152. package/dist/tools/constraints.d.ts.map +1 -1
  153. package/dist/tools/constraints.js +66 -48
  154. package/dist/tools/constraints.js.map +1 -1
  155. package/dist/tools/context.d.ts +36 -33
  156. package/dist/tools/context.d.ts.map +1 -1
  157. package/dist/tools/context.js +374 -330
  158. package/dist/tools/context.js.map +1 -1
  159. package/dist/tools/files.d.ts +12 -9
  160. package/dist/tools/files.d.ts.map +1 -1
  161. package/dist/tools/files.js +173 -95
  162. package/dist/tools/files.js.map +1 -1
  163. package/dist/tools/help-queries.d.ts +130 -0
  164. package/dist/tools/help-queries.d.ts.map +1 -0
  165. package/dist/tools/help-queries.js +393 -0
  166. package/dist/tools/help-queries.js.map +1 -0
  167. package/dist/tools/messaging.d.ts +14 -11
  168. package/dist/tools/messaging.d.ts.map +1 -1
  169. package/dist/tools/messaging.js +217 -133
  170. package/dist/tools/messaging.js.map +1 -1
  171. package/dist/tools/tasks.d.ts +18 -16
  172. package/dist/tools/tasks.d.ts.map +1 -1
  173. package/dist/tools/tasks.js +513 -439
  174. package/dist/tools/tasks.js.map +1 -1
  175. package/dist/tools/utils.d.ts +14 -11
  176. package/dist/tools/utils.d.ts.map +1 -1
  177. package/dist/tools/utils.js +86 -121
  178. package/dist/tools/utils.js.map +1 -1
  179. package/dist/utils/activity-logging.d.ts +114 -0
  180. package/dist/utils/activity-logging.d.ts.map +1 -0
  181. package/dist/utils/activity-logging.js +162 -0
  182. package/dist/utils/activity-logging.js.map +1 -0
  183. package/dist/utils/batch.d.ts +2 -2
  184. package/dist/utils/batch.d.ts.map +1 -1
  185. package/dist/utils/batch.js +8 -8
  186. package/dist/utils/batch.js.map +1 -1
  187. package/dist/utils/cleanup.d.ts +21 -13
  188. package/dist/utils/cleanup.d.ts.map +1 -1
  189. package/dist/utils/cleanup.js +31 -24
  190. package/dist/utils/cleanup.js.map +1 -1
  191. package/dist/utils/debug-logger.d.ts +44 -0
  192. package/dist/utils/debug-logger.d.ts.map +1 -0
  193. package/dist/utils/debug-logger.js +116 -0
  194. package/dist/utils/debug-logger.js.map +1 -0
  195. package/dist/utils/help-tracking.d.ts +55 -0
  196. package/dist/utils/help-tracking.d.ts.map +1 -0
  197. package/dist/utils/help-tracking.js +88 -0
  198. package/dist/utils/help-tracking.js.map +1 -0
  199. package/dist/utils/retention.d.ts +7 -7
  200. package/dist/utils/retention.d.ts.map +1 -1
  201. package/dist/utils/retention.js +12 -12
  202. package/dist/utils/retention.js.map +1 -1
  203. package/dist/utils/task-stale-detection.d.ts +15 -13
  204. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  205. package/dist/utils/task-stale-detection.js +100 -302
  206. package/dist/utils/task-stale-detection.js.map +1 -1
  207. package/dist/utils/token-estimation.d.ts +72 -0
  208. package/dist/utils/token-estimation.d.ts.map +1 -0
  209. package/dist/utils/token-estimation.js +71 -0
  210. package/dist/utils/token-estimation.js.map +1 -0
  211. package/dist/utils/token-logging.d.ts +48 -0
  212. package/dist/utils/token-logging.d.ts.map +1 -0
  213. package/dist/utils/token-logging.js +112 -0
  214. package/dist/utils/token-logging.js.map +1 -0
  215. package/dist/utils/view-queries.d.ts +34 -0
  216. package/dist/utils/view-queries.d.ts.map +1 -0
  217. package/dist/utils/view-queries.js +192 -0
  218. package/dist/utils/view-queries.js.map +1 -0
  219. package/dist/watcher/file-watcher.d.ts.map +1 -1
  220. package/dist/watcher/file-watcher.js +25 -11
  221. package/dist/watcher/file-watcher.js.map +1 -1
  222. package/docs/BEST_PRACTICES.md +56 -448
  223. package/docs/MIGRATION_v3.6.0.md +170 -0
  224. package/docs/SHARED_CONCEPTS.md +63 -208
  225. package/docs/TASK_OVERVIEW.md +2 -2
  226. package/docs/TOOL_SELECTION.md +41 -248
  227. package/package.json +16 -4
@@ -1,31 +1,26 @@
1
1
  /**
2
2
  * Utility tools for MCP Shared Context Server
3
3
  * Database statistics, layer summaries, and manual cleanup
4
+ *
5
+ * CONVERTED: Using Knex.js with DatabaseAdapter (async/await)
4
6
  */
5
- import { getDatabase, transaction } from '../database.js';
7
+ import { getAdapter } from '../database.js';
6
8
  import { calculateMessageCutoff, calculateFileChangeCutoff } from '../utils/retention.js';
7
9
  import { cleanupWithCustomRetention } from '../utils/cleanup.js';
8
10
  /**
9
11
  * Get summary statistics for all architecture layers
10
12
  * Uses the v_layer_summary view for token efficiency
11
13
  *
12
- * @param db - Optional database instance (for testing)
14
+ * @param adapter - Optional database adapter (for testing)
13
15
  * @returns Layer summaries for all 5 standard layers
14
16
  */
15
- export function getLayerSummary(db) {
16
- const actualDb = db ?? getDatabase();
17
+ export async function getLayerSummary(adapter) {
18
+ const actualAdapter = adapter ?? getAdapter();
19
+ const knex = actualAdapter.getKnex();
17
20
  try {
18
- // Query the v_layer_summary view for all layers
19
- const stmt = actualDb.prepare(`
20
- SELECT
21
- layer,
22
- decisions_count,
23
- file_changes_count,
24
- constraints_count
25
- FROM v_layer_summary
26
- ORDER BY layer
27
- `);
28
- const summary = stmt.all();
21
+ const summary = await knex('v_layer_summary')
22
+ .select('layer', 'decisions_count', 'file_changes_count', 'constraints_count')
23
+ .orderBy('layer');
29
24
  return {
30
25
  summary,
31
26
  };
@@ -44,44 +39,39 @@ export function getLayerSummary(db) {
44
39
  * If parameters are provided, they override m_config settings (no weekend-awareness).
45
40
  *
46
41
  * @param params - Optional parameters for cleanup thresholds (overrides config)
47
- * @param db - Optional database instance (for testing)
42
+ * @param adapter - Optional database adapter (for testing)
48
43
  * @returns Counts of deleted records
49
44
  */
50
- export function clearOldData(params, db) {
51
- const actualDb = db ?? getDatabase();
45
+ export async function clearOldData(params, adapter) {
46
+ const actualAdapter = adapter ?? getAdapter();
52
47
  try {
53
- return transaction(actualDb, () => {
54
- let messagesThreshold;
55
- let fileChangesThreshold;
48
+ return await actualAdapter.transaction(async (trx) => {
56
49
  let messagesDeleted = 0;
57
50
  let fileChangesDeleted = 0;
58
51
  let activityLogsDeleted = 0;
59
52
  if (params?.messages_older_than_hours !== undefined || params?.file_changes_older_than_days !== undefined) {
60
53
  // Parameters provided: use custom retention (no weekend-awareness)
61
- const result = cleanupWithCustomRetention(actualDb, params.messages_older_than_hours, params.file_changes_older_than_days);
54
+ const result = await cleanupWithCustomRetention(actualAdapter, params.messages_older_than_hours, params.file_changes_older_than_days, trx);
62
55
  messagesDeleted = result.messagesDeleted;
63
56
  fileChangesDeleted = result.fileChangesDeleted;
64
57
  activityLogsDeleted = result.activityLogsDeleted;
65
58
  }
66
59
  else {
67
60
  // No parameters: use config-based weekend-aware retention
68
- messagesThreshold = calculateMessageCutoff(actualDb);
69
- fileChangesThreshold = calculateFileChangeCutoff(actualDb);
70
- // Count and delete messages
71
- const messagesCount = actualDb.prepare('SELECT COUNT(*) as count FROM t_agent_messages WHERE ts < ?').get(messagesThreshold);
72
- const deleteMessages = actualDb.prepare('DELETE FROM t_agent_messages WHERE ts < ?');
73
- deleteMessages.run(messagesThreshold);
74
- messagesDeleted = messagesCount.count;
75
- // Count and delete file changes
76
- const fileChangesCount = actualDb.prepare('SELECT COUNT(*) as count FROM t_file_changes WHERE ts < ?').get(fileChangesThreshold);
77
- const deleteFileChanges = actualDb.prepare('DELETE FROM t_file_changes WHERE ts < ?');
78
- deleteFileChanges.run(fileChangesThreshold);
79
- fileChangesDeleted = fileChangesCount.count;
80
- // Count and delete activity logs (uses same threshold as messages per constraint #4)
81
- const activityLogsCount = actualDb.prepare('SELECT COUNT(*) as count FROM t_activity_log WHERE ts < ?').get(messagesThreshold);
82
- const deleteActivityLogs = actualDb.prepare('DELETE FROM t_activity_log WHERE ts < ?');
83
- deleteActivityLogs.run(messagesThreshold);
84
- activityLogsDeleted = activityLogsCount.count;
61
+ const messagesThreshold = await calculateMessageCutoff(actualAdapter);
62
+ const fileChangesThreshold = await calculateFileChangeCutoff(actualAdapter);
63
+ // Delete messages
64
+ messagesDeleted = await trx('t_agent_messages')
65
+ .where('ts', '<', messagesThreshold)
66
+ .delete();
67
+ // Delete file changes
68
+ fileChangesDeleted = await trx('t_file_changes')
69
+ .where('ts', '<', fileChangesThreshold)
70
+ .delete();
71
+ // Delete activity logs (uses same threshold as messages per constraint #4)
72
+ activityLogsDeleted = await trx('t_activity_log')
73
+ .where('ts', '<', messagesThreshold)
74
+ .delete();
85
75
  }
86
76
  return {
87
77
  success: true,
@@ -100,62 +90,64 @@ export function clearOldData(params, db) {
100
90
  * Get comprehensive database statistics
101
91
  * Returns counts for all major tables and database health metrics
102
92
  *
103
- * @param db - Optional database instance (for testing)
93
+ * @param adapter - Optional database adapter (for testing)
104
94
  * @returns Complete database statistics
105
95
  */
106
- export function getStats(db) {
107
- const actualDb = db ?? getDatabase();
96
+ export async function getStats(adapter) {
97
+ const actualAdapter = adapter ?? getAdapter();
98
+ const knex = actualAdapter.getKnex();
108
99
  try {
109
100
  // Helper to get count from a table
110
- const getCount = (table, where) => {
111
- const query = where
112
- ? `SELECT COUNT(*) as count FROM ${table} WHERE ${where}`
113
- : `SELECT COUNT(*) as count FROM ${table}`;
114
- const result = actualDb.prepare(query).get();
101
+ const getCount = async (table, where) => {
102
+ let query = knex(table).count('* as count');
103
+ if (where) {
104
+ query = query.whereRaw(where);
105
+ }
106
+ const result = await query.first();
115
107
  return result.count;
116
108
  };
117
- // Get all statistics
118
- const agents = getCount('m_agents');
119
- const files = getCount('m_files');
120
- const context_keys = getCount('m_context_keys');
109
+ // Get all statistics (note: all await calls!)
110
+ const agents = await getCount('m_agents');
111
+ const files = await getCount('m_files');
112
+ const context_keys = await getCount('m_context_keys');
121
113
  // Decisions (active vs total)
122
- const active_decisions = getCount('t_decisions', 'status = 1');
123
- const total_decisions = getCount('t_decisions');
114
+ const active_decisions = await getCount('t_decisions', 'status = 1');
115
+ const total_decisions = await getCount('t_decisions');
124
116
  // Messages
125
- const messages = getCount('t_agent_messages');
117
+ const messages = await getCount('t_agent_messages');
126
118
  // File changes
127
- const file_changes = getCount('t_file_changes');
119
+ const file_changes = await getCount('t_file_changes');
128
120
  // Constraints (active vs total)
129
- const active_constraints = getCount('t_constraints', 'active = 1');
130
- const total_constraints = getCount('t_constraints');
121
+ const active_constraints = await getCount('t_constraints', 'active = 1');
122
+ const total_constraints = await getCount('t_constraints');
131
123
  // Metadata
132
- const tags = getCount('m_tags');
133
- const scopes = getCount('m_scopes');
134
- const layers = getCount('m_layers');
124
+ const tags = await getCount('m_tags');
125
+ const scopes = await getCount('m_scopes');
126
+ const layers = await getCount('m_layers');
135
127
  // Task statistics (v3.x)
136
- const total_tasks = getCount('t_tasks');
137
- const active_tasks = getCount('t_tasks', 'status_id NOT IN (5, 6)'); // Exclude done and archived
128
+ const total_tasks = await getCount('t_tasks');
129
+ const active_tasks = await getCount('t_tasks', 'status_id NOT IN (5, 6)'); // Exclude done and archived
138
130
  // Tasks by status (1=todo, 2=in_progress, 3=waiting_review, 4=blocked, 5=done, 6=archived)
139
131
  const tasks_by_status = {
140
- todo: getCount('t_tasks', 'status_id = 1'),
141
- in_progress: getCount('t_tasks', 'status_id = 2'),
142
- waiting_review: getCount('t_tasks', 'status_id = 3'),
143
- blocked: getCount('t_tasks', 'status_id = 4'),
144
- done: getCount('t_tasks', 'status_id = 5'),
145
- archived: getCount('t_tasks', 'status_id = 6'),
132
+ todo: await getCount('t_tasks', 'status_id = 1'),
133
+ in_progress: await getCount('t_tasks', 'status_id = 2'),
134
+ waiting_review: await getCount('t_tasks', 'status_id = 3'),
135
+ blocked: await getCount('t_tasks', 'status_id = 4'),
136
+ done: await getCount('t_tasks', 'status_id = 5'),
137
+ archived: await getCount('t_tasks', 'status_id = 6'),
146
138
  };
147
139
  // Tasks by priority (1=low, 2=medium, 3=high, 4=critical)
148
140
  const tasks_by_priority = {
149
- low: getCount('t_tasks', 'priority = 1'),
150
- medium: getCount('t_tasks', 'priority = 2'),
151
- high: getCount('t_tasks', 'priority = 3'),
152
- critical: getCount('t_tasks', 'priority = 4'),
141
+ low: await getCount('t_tasks', 'priority = 1'),
142
+ medium: await getCount('t_tasks', 'priority = 2'),
143
+ high: await getCount('t_tasks', 'priority = 3'),
144
+ critical: await getCount('t_tasks', 'priority = 4'),
153
145
  };
154
146
  // Review status (v3.4.0) - tasks in waiting_review awaiting git commits
155
147
  const review_status = {
156
148
  awaiting_commit: tasks_by_status.waiting_review,
157
149
  // Tasks in waiting_review for >24h (may need attention)
158
- overdue_review: getCount('t_tasks', `status_id = 3 AND updated_ts < unixepoch() - 86400`),
150
+ overdue_review: await getCount('t_tasks', `status_id = 3 AND updated_ts < unixepoch() - 86400`),
159
151
  };
160
152
  return {
161
153
  agents,
@@ -187,18 +179,17 @@ export function getStats(db) {
187
179
  * Supports time-based filtering (relative or absolute) and agent/action filtering
188
180
  *
189
181
  * @param params - Filter parameters (since, agent_names, actions, limit)
190
- * @param db - Optional database instance (for testing)
182
+ * @param adapter - Optional database adapter (for testing)
191
183
  * @returns Activity log entries with parsed details
192
184
  */
193
- export function getActivityLog(params, db) {
194
- const actualDb = db ?? getDatabase();
185
+ export async function getActivityLog(params, adapter) {
186
+ const actualAdapter = adapter ?? getAdapter();
187
+ const knex = actualAdapter.getKnex();
195
188
  try {
196
- // Parse 'since' parameter to get timestamp
197
189
  let sinceTimestamp = null;
198
190
  if (params?.since) {
199
191
  const since = params.since;
200
192
  const now = Math.floor(Date.now() / 1000);
201
- // Check for relative time format (e.g., "5m", "1h", "2d")
202
193
  const relativeMatch = since.match(/^(\d+)([mhd])$/);
203
194
  if (relativeMatch) {
204
195
  const value = parseInt(relativeMatch[1], 10);
@@ -218,7 +209,6 @@ export function getActivityLog(params, db) {
218
209
  sinceTimestamp = now - seconds;
219
210
  }
220
211
  else {
221
- // Try to parse as ISO 8601 timestamp
222
212
  try {
223
213
  const date = new Date(since);
224
214
  sinceTimestamp = Math.floor(date.getTime() / 1000);
@@ -228,49 +218,22 @@ export function getActivityLog(params, db) {
228
218
  }
229
219
  }
230
220
  }
231
- // Build query
232
- let query = `
233
- SELECT
234
- al.id,
235
- al.ts,
236
- a.name as agent,
237
- al.action_type,
238
- al.target,
239
- l.name as layer,
240
- al.details
241
- FROM t_activity_log al
242
- JOIN m_agents a ON al.agent_id = a.id
243
- LEFT JOIN m_layers l ON al.layer_id = l.id
244
- WHERE 1=1
245
- `;
246
- const queryParams = [];
247
- // Filter by timestamp
221
+ let query = knex('t_activity_log as al')
222
+ .join('m_agents as a', 'al.agent_id', 'a.id')
223
+ .leftJoin('m_layers as l', 'al.layer_id', 'l.id')
224
+ .select('al.id', 'al.ts', 'a.name as agent', 'al.action_type', 'al.target', 'l.name as layer', 'al.details');
248
225
  if (sinceTimestamp !== null) {
249
- query += ' AND al.ts >= ?';
250
- queryParams.push(sinceTimestamp);
226
+ query = query.where('al.ts', '>=', sinceTimestamp);
251
227
  }
252
- // Filter by agent names
253
228
  if (params?.agent_names && params.agent_names.length > 0 && !params.agent_names.includes('*')) {
254
- const placeholders = params.agent_names.map(() => '?').join(',');
255
- query += ` AND a.name IN (${placeholders})`;
256
- queryParams.push(...params.agent_names);
229
+ query = query.whereIn('a.name', params.agent_names);
257
230
  }
258
- // Filter by action types
259
231
  if (params?.actions && params.actions.length > 0) {
260
- const placeholders = params.actions.map(() => '?').join(',');
261
- query += ` AND al.action_type IN (${placeholders})`;
262
- queryParams.push(...params.actions);
232
+ query = query.whereIn('al.action_type', params.actions);
263
233
  }
264
- // Order by timestamp descending (most recent first)
265
- query += ' ORDER BY al.ts DESC';
266
- // Apply limit
267
234
  const limit = params?.limit ?? 100;
268
- query += ' LIMIT ?';
269
- queryParams.push(limit);
270
- // Execute query
271
- const stmt = actualDb.prepare(query);
272
- const rows = stmt.all(...queryParams);
273
- // Transform results
235
+ query = query.orderBy('al.ts', 'desc').limit(limit);
236
+ const rows = await query;
274
237
  const activities = rows.map(row => ({
275
238
  id: row.id,
276
239
  timestamp: new Date(row.ts * 1000).toISOString(),
@@ -294,20 +257,22 @@ export function getActivityLog(params, db) {
294
257
  * Force WAL checkpoint to flush pending transactions to main database file
295
258
  * Uses TRUNCATE mode for complete flush - useful before git commits
296
259
  *
297
- * @param db - Optional database instance (for testing)
260
+ * @param adapter - Optional database adapter (for testing)
298
261
  * @returns Checkpoint result with pages flushed
299
262
  */
300
- export function flushWAL(db) {
301
- const actualDb = db ?? getDatabase();
263
+ export async function flushWAL(adapter) {
264
+ const actualAdapter = adapter ?? getAdapter();
265
+ const knex = actualAdapter.getKnex();
302
266
  try {
303
267
  // Execute TRUNCATE checkpoint - most aggressive mode
304
268
  // Blocks until complete, ensures all WAL data written to main DB file
305
- // Returns array: [busy, log, checkpointed]
269
+ // Returns array: [[busy, log, checkpointed]]
306
270
  // - busy: number of frames not checkpointed due to locks
307
271
  // - log: total number of frames in WAL file
308
272
  // - checkpointed: number of frames checkpointed
309
- const result = actualDb.pragma('wal_checkpoint(TRUNCATE)', { simple: true });
310
- const pagesFlushed = result?.[2] || 0;
273
+ const result = await knex.raw('PRAGMA wal_checkpoint(TRUNCATE)');
274
+ // Parse result array format from Knex
275
+ const pagesFlushed = result?.[0]?.[0]?.[2] || 0;
311
276
  return {
312
277
  success: true,
313
278
  mode: 'TRUNCATE',
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { Knex } from 'knex';
2
+ /**
3
+ * Activity log helper functions
4
+ * Replaces database triggers for cross-DB compatibility
5
+ */
6
+ interface ActivityLogEntry {
7
+ agent_id: number;
8
+ action_type: string;
9
+ target: string;
10
+ layer_id?: number;
11
+ details?: Record<string, any>;
12
+ }
13
+ /**
14
+ * Insert activity log entry
15
+ */
16
+ export declare function logActivity(knex: Knex | Knex.Transaction, entry: ActivityLogEntry): Promise<void>;
17
+ /**
18
+ * Log decision set (replaces trg_log_decision_set)
19
+ */
20
+ export declare function logDecisionSet(knex: Knex | Knex.Transaction, params: {
21
+ key: string;
22
+ value: string;
23
+ version: string;
24
+ status: number;
25
+ agent_id: number;
26
+ layer_id?: number;
27
+ }): Promise<void>;
28
+ /**
29
+ * Log decision update (replaces trg_log_decision_update)
30
+ */
31
+ export declare function logDecisionUpdate(knex: Knex | Knex.Transaction, params: {
32
+ key: string;
33
+ old_value: string;
34
+ new_value: string;
35
+ old_version: string;
36
+ new_version: string;
37
+ agent_id: number;
38
+ layer_id?: number;
39
+ }): Promise<void>;
40
+ /**
41
+ * Record decision history (replaces trg_record_decision_history)
42
+ */
43
+ export declare function recordDecisionHistory(knex: Knex | Knex.Transaction, params: {
44
+ key_id: number;
45
+ version: string;
46
+ value: string;
47
+ agent_id: number;
48
+ ts: number;
49
+ }): Promise<void>;
50
+ /**
51
+ * Log message send (replaces trg_log_message_send)
52
+ */
53
+ export declare function logMessageSend(knex: Knex | Knex.Transaction, params: {
54
+ from_agent_id: number;
55
+ to_agent_id: number;
56
+ msg_type: number;
57
+ priority: number;
58
+ }): Promise<void>;
59
+ /**
60
+ * Log file record (replaces trg_log_file_record)
61
+ */
62
+ export declare function logFileRecord(knex: Knex | Knex.Transaction, params: {
63
+ file_path: string;
64
+ change_type: number;
65
+ agent_id: number;
66
+ layer_id?: number;
67
+ }): Promise<void>;
68
+ /**
69
+ * Log task create (replaces trg_log_task_create)
70
+ */
71
+ export declare function logTaskCreate(knex: Knex | Knex.Transaction, params: {
72
+ task_id: number;
73
+ title: string;
74
+ agent_id: number;
75
+ layer_id?: number;
76
+ }): Promise<void>;
77
+ /**
78
+ * Log task status change (replaces trg_log_task_status_change)
79
+ */
80
+ export declare function logTaskStatusChange(knex: Knex | Knex.Transaction, params: {
81
+ task_id: number;
82
+ old_status: number;
83
+ new_status: number;
84
+ agent_id: number;
85
+ }): Promise<void>;
86
+ /**
87
+ * Update task timestamp (replaces trg_update_task_timestamp)
88
+ * This is now handled in application layer when updating tasks
89
+ */
90
+ export declare function updateTaskTimestamp(data: any): any;
91
+ /**
92
+ * Log constraint add (replaces trg_log_constraint_add)
93
+ */
94
+ export declare function logConstraintAdd(knex: Knex | Knex.Transaction, params: {
95
+ constraint_id: number;
96
+ category: string;
97
+ constraint_text: string;
98
+ priority: string;
99
+ layer: string | null;
100
+ created_by: string;
101
+ agent_id: number;
102
+ }): Promise<void>;
103
+ /**
104
+ * Log file change (replaces trg_log_file_change)
105
+ */
106
+ export declare function logFileChange(knex: Knex | Knex.Transaction, params: {
107
+ file_path: string;
108
+ agent_name: string;
109
+ change_type: string;
110
+ layer: string | null;
111
+ description: string | null;
112
+ }): Promise<void>;
113
+ export {};
114
+ //# sourceMappingURL=activity-logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-logging.d.ts","sourceRoot":"","sources":["../../src/utils/activity-logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Insert activity log entry
3
+ */
4
+ export async function logActivity(knex, entry) {
5
+ await knex('t_activity_log').insert({
6
+ agent_id: entry.agent_id,
7
+ action_type: entry.action_type,
8
+ target: entry.target,
9
+ layer_id: entry.layer_id,
10
+ details: entry.details ? JSON.stringify(entry.details) : null,
11
+ ts: Math.floor(Date.now() / 1000), // Current Unix epoch
12
+ });
13
+ }
14
+ /**
15
+ * Log decision set (replaces trg_log_decision_set)
16
+ */
17
+ export async function logDecisionSet(knex, params) {
18
+ await logActivity(knex, {
19
+ agent_id: params.agent_id,
20
+ action_type: 'decision_set',
21
+ target: params.key,
22
+ layer_id: params.layer_id,
23
+ details: {
24
+ value: params.value,
25
+ version: params.version,
26
+ status: params.status,
27
+ },
28
+ });
29
+ }
30
+ /**
31
+ * Log decision update (replaces trg_log_decision_update)
32
+ */
33
+ export async function logDecisionUpdate(knex, params) {
34
+ await logActivity(knex, {
35
+ agent_id: params.agent_id,
36
+ action_type: 'decision_update',
37
+ target: params.key,
38
+ layer_id: params.layer_id,
39
+ details: {
40
+ old_value: params.old_value,
41
+ new_value: params.new_value,
42
+ old_version: params.old_version,
43
+ new_version: params.new_version,
44
+ },
45
+ });
46
+ }
47
+ /**
48
+ * Record decision history (replaces trg_record_decision_history)
49
+ */
50
+ export async function recordDecisionHistory(knex, params) {
51
+ await knex('t_decision_history').insert({
52
+ key_id: params.key_id,
53
+ version: params.version,
54
+ value: params.value,
55
+ agent_id: params.agent_id,
56
+ ts: params.ts,
57
+ });
58
+ }
59
+ /**
60
+ * Log message send (replaces trg_log_message_send)
61
+ */
62
+ export async function logMessageSend(knex, params) {
63
+ // Get agent name for target
64
+ const fromAgent = await knex('m_agents').where({ id: params.from_agent_id }).first();
65
+ await logActivity(knex, {
66
+ agent_id: params.from_agent_id,
67
+ action_type: 'message_send',
68
+ target: fromAgent?.name || `agent_${params.to_agent_id}`,
69
+ details: {
70
+ msg_type: params.msg_type,
71
+ priority: params.priority,
72
+ },
73
+ });
74
+ }
75
+ /**
76
+ * Log file record (replaces trg_log_file_record)
77
+ */
78
+ export async function logFileRecord(knex, params) {
79
+ await logActivity(knex, {
80
+ agent_id: params.agent_id,
81
+ action_type: 'file_record',
82
+ target: params.file_path,
83
+ layer_id: params.layer_id,
84
+ details: {
85
+ change_type: params.change_type,
86
+ },
87
+ });
88
+ }
89
+ /**
90
+ * Log task create (replaces trg_log_task_create)
91
+ */
92
+ export async function logTaskCreate(knex, params) {
93
+ await logActivity(knex, {
94
+ agent_id: params.agent_id,
95
+ action_type: 'task_create',
96
+ target: `task_${params.task_id}`,
97
+ layer_id: params.layer_id,
98
+ details: {
99
+ title: params.title,
100
+ },
101
+ });
102
+ }
103
+ /**
104
+ * Log task status change (replaces trg_log_task_status_change)
105
+ */
106
+ export async function logTaskStatusChange(knex, params) {
107
+ await logActivity(knex, {
108
+ agent_id: params.agent_id,
109
+ action_type: 'task_status_change',
110
+ target: `task_${params.task_id}`,
111
+ details: {
112
+ old_status: params.old_status,
113
+ new_status: params.new_status,
114
+ },
115
+ });
116
+ }
117
+ /**
118
+ * Update task timestamp (replaces trg_update_task_timestamp)
119
+ * This is now handled in application layer when updating tasks
120
+ */
121
+ export function updateTaskTimestamp(data) {
122
+ return {
123
+ ...data,
124
+ updated_ts: Math.floor(Date.now() / 1000), // Current Unix epoch
125
+ };
126
+ }
127
+ /**
128
+ * Log constraint add (replaces trg_log_constraint_add)
129
+ */
130
+ export async function logConstraintAdd(knex, params) {
131
+ await logActivity(knex, {
132
+ agent_id: params.agent_id,
133
+ action_type: 'constraint_add',
134
+ target: `constraint_${params.constraint_id}`,
135
+ details: {
136
+ category: params.category,
137
+ constraint_text: params.constraint_text,
138
+ priority: params.priority,
139
+ layer: params.layer,
140
+ created_by: params.created_by,
141
+ },
142
+ });
143
+ }
144
+ /**
145
+ * Log file change (replaces trg_log_file_change)
146
+ */
147
+ export async function logFileChange(knex, params) {
148
+ // Get agent_id from agent_name
149
+ const agent = await knex('m_agents').where({ name: params.agent_name }).first();
150
+ if (agent) {
151
+ await logActivity(knex, {
152
+ agent_id: agent.id,
153
+ action_type: 'file_change',
154
+ target: params.file_path,
155
+ details: {
156
+ change_type: params.change_type,
157
+ description: params.description,
158
+ },
159
+ });
160
+ }
161
+ }
162
+ //# sourceMappingURL=activity-logging.js.map