sqlew 3.6.9 → 3.7.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 (383) hide show
  1. package/CHANGELOG.md +398 -1
  2. package/README.md +58 -39
  3. package/assets/config.example.toml +93 -0
  4. package/assets/kanban-visualizer.png +0 -0
  5. package/assets/sample-agents/sqlew-architect.md +32 -13
  6. package/assets/sample-agents/sqlew-researcher.md +70 -17
  7. package/assets/sample-agents/sqlew-scrum-master.md +60 -25
  8. package/assets/schema.sql +2 -2
  9. package/dist/adapters/auth/auth-factory.d.ts +86 -0
  10. package/dist/adapters/auth/auth-factory.d.ts.map +1 -0
  11. package/dist/adapters/auth/auth-factory.js +103 -0
  12. package/dist/adapters/auth/auth-factory.js.map +1 -0
  13. package/dist/adapters/auth/auth-types.d.ts +30 -0
  14. package/dist/adapters/auth/auth-types.d.ts.map +1 -0
  15. package/dist/adapters/auth/auth-types.js +30 -0
  16. package/dist/adapters/auth/auth-types.js.map +1 -0
  17. package/dist/adapters/auth/base-auth-provider.d.ts +327 -0
  18. package/dist/adapters/auth/base-auth-provider.d.ts.map +1 -0
  19. package/dist/adapters/auth/base-auth-provider.js +111 -0
  20. package/dist/adapters/auth/base-auth-provider.js.map +1 -0
  21. package/dist/adapters/auth/direct-auth-provider.d.ts +356 -0
  22. package/dist/adapters/auth/direct-auth-provider.d.ts.map +1 -0
  23. package/dist/adapters/auth/direct-auth-provider.js +406 -0
  24. package/dist/adapters/auth/direct-auth-provider.js.map +1 -0
  25. package/dist/adapters/base-adapter.d.ts +638 -0
  26. package/dist/adapters/base-adapter.d.ts.map +1 -0
  27. package/dist/adapters/base-adapter.js +557 -0
  28. package/dist/adapters/base-adapter.js.map +1 -0
  29. package/dist/adapters/index.d.ts +13 -2
  30. package/dist/adapters/index.d.ts.map +1 -1
  31. package/dist/adapters/index.js +27 -5
  32. package/dist/adapters/index.js.map +1 -1
  33. package/dist/adapters/mysql-adapter.d.ts +547 -6
  34. package/dist/adapters/mysql-adapter.d.ts.map +1 -1
  35. package/dist/adapters/mysql-adapter.js +651 -32
  36. package/dist/adapters/mysql-adapter.js.map +1 -1
  37. package/dist/adapters/postgresql-adapter.d.ts +15 -4
  38. package/dist/adapters/postgresql-adapter.d.ts.map +1 -1
  39. package/dist/adapters/postgresql-adapter.js +19 -2
  40. package/dist/adapters/postgresql-adapter.js.map +1 -1
  41. package/dist/adapters/sqlite-adapter.d.ts +35 -5
  42. package/dist/adapters/sqlite-adapter.d.ts.map +1 -1
  43. package/dist/adapters/sqlite-adapter.js +57 -18
  44. package/dist/adapters/sqlite-adapter.js.map +1 -1
  45. package/dist/cli/db-dump.d.ts +32 -0
  46. package/dist/cli/db-dump.d.ts.map +1 -0
  47. package/dist/cli/db-dump.js +409 -0
  48. package/dist/cli/db-dump.js.map +1 -0
  49. package/dist/cli.js +24 -14
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config/example-generator.d.ts.map +1 -1
  52. package/dist/config/example-generator.js +4 -3
  53. package/dist/config/example-generator.js.map +1 -1
  54. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  55. package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.js +7 -2
  56. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  57. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  58. package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.js +49 -50
  59. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  60. package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  61. package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  62. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  63. package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.js +11 -6
  64. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  65. package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  66. package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.js +66 -14
  67. package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  68. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  69. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +22 -0
  70. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  71. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  72. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  73. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  74. package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.js +6 -0
  75. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  76. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  77. package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +6 -0
  78. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  79. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  80. package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.js +6 -0
  81. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  82. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  83. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  84. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  85. package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +7 -0
  86. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  87. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  88. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +62 -0
  89. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  90. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  91. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  92. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  93. package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.js +6 -0
  94. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  95. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +1 -0
  96. package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.js +6 -0
  97. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +1 -0
  98. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +13 -0
  99. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +1 -0
  100. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +48 -0
  101. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +1 -0
  102. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +24 -0
  103. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +1 -0
  104. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +189 -0
  105. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +1 -0
  106. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +16 -0
  107. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +1 -0
  108. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +65 -0
  109. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +1 -0
  110. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +23 -0
  111. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +1 -0
  112. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +118 -0
  113. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +1 -0
  114. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  115. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  116. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  117. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  118. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  119. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  120. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  121. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  122. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  123. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  124. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  125. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  126. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  127. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  128. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +49 -0
  129. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +1 -0
  130. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +864 -0
  131. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +1 -0
  132. package/dist/config/loader.d.ts +23 -3
  133. package/dist/config/loader.d.ts.map +1 -1
  134. package/dist/config/loader.js +155 -8
  135. package/dist/config/loader.js.map +1 -1
  136. package/dist/config/types.d.ts +261 -2
  137. package/dist/config/types.d.ts.map +1 -1
  138. package/dist/config/types.js.map +1 -1
  139. package/dist/config/writer.d.ts +65 -0
  140. package/dist/config/writer.d.ts.map +1 -0
  141. package/dist/config/writer.js +139 -0
  142. package/dist/config/writer.js.map +1 -0
  143. package/dist/database.d.ts +11 -2
  144. package/dist/database.d.ts.map +1 -1
  145. package/dist/database.js +65 -8
  146. package/dist/database.js.map +1 -1
  147. package/dist/index.js +186 -32
  148. package/dist/index.js.map +1 -1
  149. package/dist/knexfile.d.ts.map +1 -1
  150. package/dist/knexfile.js +88 -12
  151. package/dist/knexfile.js.map +1 -1
  152. package/dist/tests/all-features.test.js +15 -3
  153. package/dist/tests/all-features.test.js.map +1 -1
  154. package/dist/tests/config-loader.test.d.ts +6 -0
  155. package/dist/tests/config-loader.test.d.ts.map +1 -0
  156. package/dist/tests/config-loader.test.js +201 -0
  157. package/dist/tests/config-loader.test.js.map +1 -0
  158. package/dist/tests/connection-manager-integration.test.d.ts +2 -0
  159. package/dist/tests/connection-manager-integration.test.d.ts.map +1 -0
  160. package/dist/tests/connection-manager-integration.test.js +431 -0
  161. package/dist/tests/connection-manager-integration.test.js.map +1 -0
  162. package/dist/tests/connection-manager.test.d.ts +2 -0
  163. package/dist/tests/connection-manager.test.d.ts.map +1 -0
  164. package/dist/tests/connection-manager.test.js +361 -0
  165. package/dist/tests/connection-manager.test.js.map +1 -0
  166. package/dist/tests/dump-import.test.d.ts +15 -0
  167. package/dist/tests/dump-import.test.d.ts.map +1 -0
  168. package/dist/tests/dump-import.test.js +430 -0
  169. package/dist/tests/dump-import.test.js.map +1 -0
  170. package/dist/tests/migration-idempotency.test.d.ts +2 -0
  171. package/dist/tests/migration-idempotency.test.d.ts.map +1 -0
  172. package/dist/tests/migration-idempotency.test.js +330 -0
  173. package/dist/tests/migration-idempotency.test.js.map +1 -0
  174. package/dist/tests/migration-upgrade-paths.test.d.ts +2 -0
  175. package/dist/tests/migration-upgrade-paths.test.d.ts.map +1 -0
  176. package/dist/tests/migration-upgrade-paths.test.js +248 -0
  177. package/dist/tests/migration-upgrade-paths.test.js.map +1 -0
  178. package/dist/tests/multi-project-migration.test.d.ts +17 -0
  179. package/dist/tests/multi-project-migration.test.d.ts.map +1 -0
  180. package/dist/tests/multi-project-migration.test.js +399 -0
  181. package/dist/tests/multi-project-migration.test.js.map +1 -0
  182. package/dist/tests/multi-project.test.d.ts +5 -0
  183. package/dist/tests/multi-project.test.d.ts.map +1 -0
  184. package/dist/tests/multi-project.test.js +238 -0
  185. package/dist/tests/multi-project.test.js.map +1 -0
  186. package/dist/tests/schema-migration.test.d.ts +8 -0
  187. package/dist/tests/schema-migration.test.d.ts.map +1 -0
  188. package/dist/tests/schema-migration.test.js +108 -0
  189. package/dist/tests/schema-migration.test.js.map +1 -0
  190. package/dist/tests/sql-dump-converters.test.d.ts +7 -0
  191. package/dist/tests/sql-dump-converters.test.d.ts.map +1 -0
  192. package/dist/tests/sql-dump-converters.test.js +314 -0
  193. package/dist/tests/sql-dump-converters.test.js.map +1 -0
  194. package/dist/tests/sql-dump-cross-database.test.d.ts +21 -0
  195. package/dist/tests/sql-dump-cross-database.test.d.ts.map +1 -0
  196. package/dist/tests/sql-dump-cross-database.test.js +314 -0
  197. package/dist/tests/sql-dump-cross-database.test.js.map +1 -0
  198. package/dist/tests/sql-dump-default-conversions.test.d.ts +8 -0
  199. package/dist/tests/sql-dump-default-conversions.test.d.ts.map +1 -0
  200. package/dist/tests/sql-dump-default-conversions.test.js +141 -0
  201. package/dist/tests/sql-dump-default-conversions.test.js.map +1 -0
  202. package/dist/tests/sql-dump-fk-constraints.test.d.ts +13 -0
  203. package/dist/tests/sql-dump-fk-constraints.test.d.ts.map +1 -0
  204. package/dist/tests/sql-dump-fk-constraints.test.js +381 -0
  205. package/dist/tests/sql-dump-fk-constraints.test.js.map +1 -0
  206. package/dist/tests/sql-dump-indexes.test.d.ts +12 -0
  207. package/dist/tests/sql-dump-indexes.test.d.ts.map +1 -0
  208. package/dist/tests/sql-dump-indexes.test.js +269 -0
  209. package/dist/tests/sql-dump-indexes.test.js.map +1 -0
  210. package/dist/tests/sql-dump-integration.test.d.ts +16 -0
  211. package/dist/tests/sql-dump-integration.test.d.ts.map +1 -0
  212. package/dist/tests/sql-dump-integration.test.js +342 -0
  213. package/dist/tests/sql-dump-integration.test.js.map +1 -0
  214. package/dist/tests/sql-dump-table-ordering.test.d.ts +8 -0
  215. package/dist/tests/sql-dump-table-ordering.test.d.ts.map +1 -0
  216. package/dist/tests/sql-dump-table-ordering.test.js +253 -0
  217. package/dist/tests/sql-dump-table-ordering.test.js.map +1 -0
  218. package/dist/tests/tasks.link-file-backward-compat.test.js +11 -1
  219. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  220. package/dist/tests/tasks.watch-files-action.test.js +11 -1
  221. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  222. package/dist/tests/type-conversion.test.d.ts +8 -0
  223. package/dist/tests/type-conversion.test.d.ts.map +1 -0
  224. package/dist/tests/type-conversion.test.js +312 -0
  225. package/dist/tests/type-conversion.test.js.map +1 -0
  226. package/dist/tests/utils/test-helpers.d.ts +93 -0
  227. package/dist/tests/utils/test-helpers.d.ts.map +1 -0
  228. package/dist/tests/utils/test-helpers.js +407 -0
  229. package/dist/tests/utils/test-helpers.js.map +1 -0
  230. package/dist/tools/config.d.ts +58 -0
  231. package/dist/tools/config.d.ts.map +1 -0
  232. package/dist/tools/config.js +281 -0
  233. package/dist/tools/config.js.map +1 -0
  234. package/dist/tools/constraints.d.ts.map +1 -1
  235. package/dist/tools/constraints.js +138 -122
  236. package/dist/tools/constraints.js.map +1 -1
  237. package/dist/tools/context.d.ts.map +1 -1
  238. package/dist/tools/context.js +216 -109
  239. package/dist/tools/context.js.map +1 -1
  240. package/dist/tools/files.d.ts.map +1 -1
  241. package/dist/tools/files.js +123 -102
  242. package/dist/tools/files.js.map +1 -1
  243. package/dist/tools/tasks.d.ts.map +1 -1
  244. package/dist/tools/tasks.js +583 -521
  245. package/dist/tools/tasks.js.map +1 -1
  246. package/dist/tools/utils.d.ts +5 -0
  247. package/dist/tools/utils.d.ts.map +1 -1
  248. package/dist/tools/utils.js +176 -122
  249. package/dist/tools/utils.js.map +1 -1
  250. package/dist/types.d.ts +9 -26
  251. package/dist/types.d.ts.map +1 -1
  252. package/dist/utils/cleanup.d.ts +3 -0
  253. package/dist/utils/cleanup.d.ts.map +1 -1
  254. package/dist/utils/cleanup.js +14 -2
  255. package/dist/utils/cleanup.js.map +1 -1
  256. package/dist/utils/connection-manager.d.ts +59 -0
  257. package/dist/utils/connection-manager.d.ts.map +1 -0
  258. package/dist/utils/connection-manager.js +178 -0
  259. package/dist/utils/connection-manager.js.map +1 -0
  260. package/dist/utils/debug-logger.d.ts +8 -4
  261. package/dist/utils/debug-logger.d.ts.map +1 -1
  262. package/dist/utils/debug-logger.js +27 -7
  263. package/dist/utils/debug-logger.js.map +1 -1
  264. package/dist/utils/error-handler.d.ts +12 -2
  265. package/dist/utils/error-handler.d.ts.map +1 -1
  266. package/dist/utils/error-handler.js +22 -21
  267. package/dist/utils/error-handler.js.map +1 -1
  268. package/dist/utils/parameter-validator.d.ts.map +1 -1
  269. package/dist/utils/parameter-validator.js +36 -15
  270. package/dist/utils/parameter-validator.js.map +1 -1
  271. package/dist/utils/project-context.d.ts +111 -0
  272. package/dist/utils/project-context.d.ts.map +1 -0
  273. package/dist/utils/project-context.js +187 -0
  274. package/dist/utils/project-context.js.map +1 -0
  275. package/dist/utils/project-root.d.ts +79 -0
  276. package/dist/utils/project-root.d.ts.map +1 -0
  277. package/dist/utils/project-root.js +108 -0
  278. package/dist/utils/project-root.js.map +1 -0
  279. package/dist/utils/sql-dump-converters.d.ts +188 -0
  280. package/dist/utils/sql-dump-converters.d.ts.map +1 -0
  281. package/dist/utils/sql-dump-converters.js +311 -0
  282. package/dist/utils/sql-dump-converters.js.map +1 -0
  283. package/dist/utils/sql-dump.d.ts +102 -0
  284. package/dist/utils/sql-dump.d.ts.map +1 -0
  285. package/dist/utils/sql-dump.js +1550 -0
  286. package/dist/utils/sql-dump.js.map +1 -0
  287. package/dist/utils/vcs-adapter.d.ts +42 -0
  288. package/dist/utils/vcs-adapter.d.ts.map +1 -1
  289. package/dist/utils/vcs-adapter.js +154 -0
  290. package/dist/utils/vcs-adapter.js.map +1 -1
  291. package/dist/watcher/file-watcher.d.ts.map +1 -1
  292. package/dist/watcher/file-watcher.js +48 -49
  293. package/dist/watcher/file-watcher.js.map +1 -1
  294. package/dist/watcher/gitignore-parser.d.ts.map +1 -1
  295. package/dist/watcher/gitignore-parser.js +2 -1
  296. package/dist/watcher/gitignore-parser.js.map +1 -1
  297. package/docs/BASEADAPTER_IMPLEMENTATION.md +399 -0
  298. package/docs/DATABASE_AUTH.md +445 -0
  299. package/docs/DATABASE_MIGRATION.md +247 -0
  300. package/docs/MULTI_PROJECT_ARCHITECTURE.md +497 -0
  301. package/package.json +12 -4
  302. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
  303. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
  304. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
  305. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
  306. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
  307. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
  308. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
  309. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
  310. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
  311. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +0 -1
  312. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  313. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -15
  314. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  315. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  316. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  317. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
  318. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
  319. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  320. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  321. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
  322. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
  323. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  324. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
  325. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  326. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  327. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  328. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -34
  329. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
  330. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  331. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  332. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
  333. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
  334. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
  335. package/dist/migrations/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
  336. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
  337. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
  338. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
  339. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
  340. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
  341. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
  342. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
  343. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
  344. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
  345. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
  346. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
  347. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
  348. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
  349. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
  350. /package/dist/{migrations → config}/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -0
  351. /package/dist/{migrations → config}/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -0
  352. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -0
  353. /package/dist/{migrations → config}/knex/bootstrap/20251025021351_create_indexes.js +0 -0
  354. /package/dist/{migrations → config}/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -0
  355. /package/dist/{migrations → config}/knex/bootstrap/20251025070349_create_views.d.ts +0 -0
  356. /package/dist/{migrations → config}/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -0
  357. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -0
  358. /package/dist/{migrations → config}/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -0
  359. /package/dist/{migrations → config}/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -0
  360. /package/dist/{migrations → config}/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -0
  361. /package/dist/{migrations → config}/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -0
  362. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -0
  363. /package/dist/{migrations → config}/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -0
  364. /package/dist/{migrations → config}/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -0
  365. /package/dist/{migrations → config}/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -0
  366. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -0
  367. /package/dist/{migrations → config}/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -0
  368. /package/dist/{migrations → config}/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -0
  369. /package/dist/{migrations → config}/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -0
  370. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -0
  371. /package/dist/{migrations → config}/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -0
  372. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -0
  373. /package/dist/{migrations → config}/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -0
  374. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -0
  375. /package/dist/{migrations → config}/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -0
  376. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -0
  377. /package/dist/{migrations → config}/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -0
  378. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -0
  379. /package/dist/{migrations → config}/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -0
  380. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -0
  381. /package/dist/{migrations → config}/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -0
  382. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -0
  383. /package/dist/{migrations → config}/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -0
@@ -0,0 +1,407 @@
1
+ /**
2
+ * Shared Test Utilities for Cross-Database Migration Tests
3
+ *
4
+ * DRY principle: All common test setup, assertions, and helpers in one place.
5
+ * Used by all 5 test suites to avoid code duplication.
6
+ */
7
+ import knex from 'knex';
8
+ import assert from 'node:assert';
9
+ import { join } from 'node:path';
10
+ import { fileURLToPath } from 'url';
11
+ import { dirname } from 'path';
12
+ import { writeFileSync, unlinkSync, existsSync } from 'node:fs';
13
+ import { exec } from 'node:child_process';
14
+ import { promisify } from 'node:util';
15
+ const execAsync = promisify(exec);
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ // Migration directories - resolve based on whether we're in dist/ or src/
19
+ // When running tests, we're in dist/tests/utils/, so ../../config/knex/ is wrong
20
+ // We need to go to the project root first
21
+ const projectRoot = join(__dirname, '../../../'); // dist/tests/utils/ -> project root
22
+ const migrationDirs = [
23
+ join(projectRoot, 'dist/config/knex/bootstrap'),
24
+ join(projectRoot, 'dist/config/knex/upgrades'),
25
+ join(projectRoot, 'dist/config/knex/enhancements'),
26
+ ];
27
+ /**
28
+ * Get database configuration by type
29
+ */
30
+ export function getDbConfig(type, customPath) {
31
+ switch (type) {
32
+ case 'sqlite':
33
+ return {
34
+ type: 'sqlite',
35
+ knexConfig: {
36
+ client: 'better-sqlite3',
37
+ connection: { filename: customPath || ':memory:' },
38
+ useNullAsDefault: true,
39
+ migrations: {
40
+ directory: migrationDirs,
41
+ extension: 'js',
42
+ tableName: 'knex_migrations',
43
+ loadExtensions: ['.js'],
44
+ },
45
+ },
46
+ };
47
+ case 'mysql':
48
+ return {
49
+ type: 'mysql',
50
+ containerName: 'mcp-sqlew-mysql-test',
51
+ knexConfig: {
52
+ client: 'mysql2',
53
+ connection: {
54
+ host: 'localhost',
55
+ port: 3307,
56
+ user: 'mcp_user',
57
+ password: 'mcp_pass',
58
+ database: 'mcp_test',
59
+ },
60
+ },
61
+ };
62
+ case 'mariadb':
63
+ return {
64
+ type: 'mariadb',
65
+ containerName: 'mcp-sqlew-mariadb-test',
66
+ knexConfig: {
67
+ client: 'mysql2',
68
+ connection: {
69
+ host: 'localhost',
70
+ port: 3308,
71
+ user: 'mcp_user',
72
+ password: 'mcp_pass',
73
+ database: 'mcp_test',
74
+ },
75
+ },
76
+ };
77
+ case 'postgresql':
78
+ return {
79
+ type: 'postgresql',
80
+ containerName: 'mcp-sqlew-postgres-test',
81
+ knexConfig: {
82
+ client: 'pg',
83
+ connection: {
84
+ host: 'localhost',
85
+ port: 5432,
86
+ user: 'mcp_user',
87
+ password: 'mcp_pass',
88
+ database: 'mcp_test',
89
+ },
90
+ },
91
+ };
92
+ }
93
+ }
94
+ // ============================================================================
95
+ // Database Connection Helpers (DRY)
96
+ // ============================================================================
97
+ /**
98
+ * Create and verify database connection
99
+ */
100
+ export async function connectDb(config) {
101
+ const db = knex(config.knexConfig);
102
+ try {
103
+ await db.raw('SELECT 1');
104
+ return db;
105
+ }
106
+ catch (error) {
107
+ throw new Error(`Failed to connect to ${config.type}: ${error.message}`);
108
+ }
109
+ }
110
+ /**
111
+ * Close database connection safely
112
+ */
113
+ export async function disconnectDb(db) {
114
+ try {
115
+ await db.destroy();
116
+ }
117
+ catch (error) {
118
+ // Ignore disconnect errors
119
+ }
120
+ }
121
+ /**
122
+ * Drop all tables and views from database
123
+ */
124
+ export async function dropAllTables(db, type) {
125
+ if (type === 'sqlite') {
126
+ // SQLite: Get all tables and views, then drop them
127
+ const objects = await db.raw(`
128
+ SELECT name, type FROM sqlite_master
129
+ WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%'
130
+ `);
131
+ await db.raw('PRAGMA foreign_keys = OFF');
132
+ for (const row of objects) {
133
+ if (row.type === 'view') {
134
+ await db.raw(`DROP VIEW IF EXISTS "${row.name}"`);
135
+ }
136
+ else {
137
+ await db.raw(`DROP TABLE IF EXISTS "${row.name}"`);
138
+ }
139
+ }
140
+ await db.raw('PRAGMA foreign_keys = ON');
141
+ }
142
+ else if (type === 'mysql' || type === 'mariadb') {
143
+ // MySQL/MariaDB: Drop all views first, then tables
144
+ await db.raw('SET FOREIGN_KEY_CHECKS=0');
145
+ // Drop views
146
+ const views = await db.raw(`
147
+ SELECT TABLE_NAME
148
+ FROM INFORMATION_SCHEMA.TABLES
149
+ WHERE TABLE_SCHEMA = 'mcp_test' AND TABLE_TYPE = 'VIEW'
150
+ `);
151
+ for (const row of views[0]) {
152
+ await db.raw(`DROP VIEW IF EXISTS ??`, [row.TABLE_NAME]);
153
+ }
154
+ // Drop tables
155
+ const tables = await db.raw(`
156
+ SELECT TABLE_NAME
157
+ FROM INFORMATION_SCHEMA.TABLES
158
+ WHERE TABLE_SCHEMA = 'mcp_test' AND TABLE_TYPE = 'BASE TABLE'
159
+ `);
160
+ for (const row of tables[0]) {
161
+ await db.raw(`DROP TABLE IF EXISTS ??`, [row.TABLE_NAME]);
162
+ }
163
+ await db.raw('SET FOREIGN_KEY_CHECKS=1');
164
+ }
165
+ else if (type === 'postgresql') {
166
+ // PostgreSQL: Drop and recreate schema (drops both tables and views)
167
+ await db.raw('DROP SCHEMA IF EXISTS public CASCADE');
168
+ await db.raw('CREATE SCHEMA public');
169
+ }
170
+ }
171
+ /**
172
+ * Get list of tables in database
173
+ */
174
+ export async function getTables(db, type) {
175
+ if (type === 'sqlite') {
176
+ const result = await db.raw(`
177
+ SELECT name FROM sqlite_master
178
+ WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name != 'knex_migrations'
179
+ ORDER BY name
180
+ `);
181
+ return result.map((r) => r.name);
182
+ }
183
+ else if (type === 'mysql' || type === 'mariadb') {
184
+ const result = await db.raw(`
185
+ SELECT TABLE_NAME
186
+ FROM INFORMATION_SCHEMA.TABLES
187
+ WHERE TABLE_SCHEMA = 'mcp_test'
188
+ AND TABLE_TYPE = 'BASE TABLE'
189
+ AND TABLE_NAME != 'knex_migrations'
190
+ ORDER BY TABLE_NAME
191
+ `);
192
+ return result[0].map((r) => r.TABLE_NAME);
193
+ }
194
+ else if (type === 'postgresql') {
195
+ const result = await db.raw(`
196
+ SELECT tablename
197
+ FROM pg_tables
198
+ WHERE schemaname = 'public' AND tablename != 'knex_migrations'
199
+ ORDER BY tablename
200
+ `);
201
+ return result.rows.map((r) => r.tablename);
202
+ }
203
+ return [];
204
+ }
205
+ /**
206
+ * Get table information (columns, rows)
207
+ */
208
+ export async function getTableInfo(db, tableName) {
209
+ const columnInfo = await db(tableName).columnInfo();
210
+ const rowCount = await db(tableName).count('* as count').first();
211
+ return {
212
+ name: tableName,
213
+ columnCount: Object.keys(columnInfo).length,
214
+ rowCount: Number(rowCount?.count || 0),
215
+ };
216
+ }
217
+ /**
218
+ * Assert table counts match between two databases
219
+ */
220
+ export async function assertTableCountsMatch(sourceDb, sourceType, targetDb, targetType, message) {
221
+ const sourceTables = await getTables(sourceDb, sourceType);
222
+ const targetTables = await getTables(targetDb, targetType);
223
+ assert.strictEqual(targetTables.length, sourceTables.length, message || `Table count mismatch: ${sourceType} has ${sourceTables.length}, ${targetType} has ${targetTables.length}`);
224
+ }
225
+ /**
226
+ * Assert row counts match for a specific table
227
+ */
228
+ export async function assertRowCountsMatch(sourceDb, targetDb, tableName, message) {
229
+ const sourceCount = await sourceDb(tableName).count('* as count').first();
230
+ const targetCount = await targetDb(tableName).count('* as count').first();
231
+ assert.strictEqual(Number(targetCount?.count || 0), Number(sourceCount?.count || 0), message || `Row count mismatch in ${tableName}`);
232
+ }
233
+ /**
234
+ * Get foreign key constraints from database
235
+ */
236
+ export async function getFKConstraints(db, type, tableName) {
237
+ const constraints = [];
238
+ if (type === 'sqlite') {
239
+ const result = await db.raw(`PRAGMA foreign_key_list(${tableName})`);
240
+ for (const fk of result) {
241
+ constraints.push({
242
+ tableName,
243
+ columnName: fk.from,
244
+ referencedTable: fk.table,
245
+ referencedColumn: fk.to,
246
+ onDelete: fk.on_delete,
247
+ onUpdate: fk.on_update,
248
+ });
249
+ }
250
+ }
251
+ else if (type === 'mysql' || type === 'mariadb') {
252
+ const result = await db.raw(`
253
+ SELECT
254
+ COLUMN_NAME,
255
+ REFERENCED_TABLE_NAME,
256
+ REFERENCED_COLUMN_NAME
257
+ FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
258
+ WHERE TABLE_SCHEMA = 'mcp_test'
259
+ AND TABLE_NAME = ?
260
+ AND REFERENCED_TABLE_NAME IS NOT NULL
261
+ `, [tableName]);
262
+ for (const fk of result[0]) {
263
+ constraints.push({
264
+ tableName,
265
+ columnName: fk.COLUMN_NAME,
266
+ referencedTable: fk.REFERENCED_TABLE_NAME,
267
+ referencedColumn: fk.REFERENCED_COLUMN_NAME,
268
+ });
269
+ }
270
+ }
271
+ else if (type === 'postgresql') {
272
+ const result = await db.raw(`
273
+ SELECT
274
+ kcu.column_name,
275
+ ccu.table_name AS referenced_table,
276
+ ccu.column_name AS referenced_column
277
+ FROM information_schema.table_constraints AS tc
278
+ JOIN information_schema.key_column_usage AS kcu
279
+ ON tc.constraint_name = kcu.constraint_name
280
+ JOIN information_schema.constraint_column_usage AS ccu
281
+ ON ccu.constraint_name = tc.constraint_name
282
+ WHERE tc.constraint_type = 'FOREIGN KEY'
283
+ AND tc.table_name = ?
284
+ `, [tableName]);
285
+ for (const fk of result.rows) {
286
+ constraints.push({
287
+ tableName,
288
+ columnName: fk.column_name,
289
+ referencedTable: fk.referenced_table,
290
+ referencedColumn: fk.referenced_column,
291
+ });
292
+ }
293
+ }
294
+ return constraints;
295
+ }
296
+ /**
297
+ * Assert FK constraints exist for a table
298
+ */
299
+ export async function assertFKConstraintsExist(db, type, tableName, expectedCount, message) {
300
+ const constraints = await getFKConstraints(db, type, tableName);
301
+ assert.ok(constraints.length >= expectedCount, message || `Expected at least ${expectedCount} FK constraints on ${tableName}, found ${constraints.length}`);
302
+ }
303
+ // ============================================================================
304
+ // Data Seeding Helpers (DRY)
305
+ // ============================================================================
306
+ /**
307
+ * Seed test data with FK relationships
308
+ * Creates a simple schema: projects → agents → context_keys → decisions
309
+ */
310
+ export async function seedTestData(db) {
311
+ const now = Math.floor(Date.now() / 1000);
312
+ // Clear existing test data (use test IDs 10, 20, 100, 101 to avoid conflicts with migration-created data)
313
+ await db('t_decisions').where('key_id', '>=', 100).andWhere('key_id', '<=', 101).del();
314
+ await db('m_context_keys').where('id', '>=', 100).andWhere('id', '<=', 101).del();
315
+ await db('m_agents').where('name', 'test-agent').del();
316
+ await db('m_projects').where('name', 'like', 'test-project-%').del();
317
+ // Seed m_projects (use IDs 10, 20 to avoid conflicts)
318
+ await db('m_projects').insert([
319
+ { id: 10, name: 'test-project-1', display_name: 'Test Project 1', detection_source: 'test', created_ts: now, last_active_ts: now },
320
+ { id: 20, name: 'test-project-2', display_name: 'Test Project 2', detection_source: 'test', created_ts: now, last_active_ts: now },
321
+ ]);
322
+ // Seed m_agents (use ID 100 to avoid conflicts)
323
+ await db('m_agents').insert([
324
+ { id: 100, name: 'test-agent' },
325
+ ]);
326
+ // Seed m_context_keys (use IDs 100, 101 to avoid conflicts)
327
+ await db('m_context_keys').insert([
328
+ { id: 100, key: 'test/key1' },
329
+ { id: 101, key: 'test/key2' },
330
+ ]);
331
+ // Seed t_decisions (has FK to m_projects, m_agents, m_context_keys)
332
+ await db('t_decisions').insert([
333
+ { key_id: 100, project_id: 10, value: 'test-value-1', ts: now, agent_id: 100 },
334
+ { key_id: 101, project_id: 20, value: 'test-value-2', ts: now, agent_id: 100 },
335
+ ]);
336
+ }
337
+ /**
338
+ * Verify seeded data exists
339
+ * Note: Migrations may create a default project (ID 1), so we check for our test projects specifically
340
+ */
341
+ export async function assertSeededDataExists(db) {
342
+ // Check for our specific test projects (IDs 10, 20)
343
+ const testProjects = await db('m_projects').whereIn('id', [10, 20]);
344
+ assert.strictEqual(testProjects.length, 2, 'Should have 2 test projects (IDs 10, 20)');
345
+ // Check for our test decisions
346
+ const testDecisions = await db('t_decisions').whereIn('key_id', [100, 101]);
347
+ assert.strictEqual(testDecisions.length, 2, 'Should have 2 test decisions (key_ids 100, 101)');
348
+ }
349
+ // ============================================================================
350
+ // SQL Import Helpers (DRY)
351
+ // ============================================================================
352
+ /**
353
+ * Import SQL dump to database via Docker container
354
+ */
355
+ export async function importSqlToDocker(sql, containerName, type) {
356
+ const tempFile = `/tmp/sqlew-test-${Date.now()}.sql`;
357
+ writeFileSync(tempFile, sql);
358
+ try {
359
+ // Copy file to container
360
+ await execAsync(`docker cp ${tempFile} ${containerName}:/tmp/import.sql`);
361
+ // Import based on database type
362
+ if (type === 'mysql' || type === 'mariadb') {
363
+ await execAsync(`docker exec ${containerName} mysql -u mcp_user -pmcp_pass mcp_test -e "SOURCE /tmp/import.sql"`);
364
+ }
365
+ else if (type === 'postgresql') {
366
+ await execAsync(`docker exec ${containerName} psql -U mcp_user -d mcp_test -f /tmp/import.sql -v ON_ERROR_STOP=1 -q`);
367
+ }
368
+ }
369
+ finally {
370
+ // Clean up temp file
371
+ if (existsSync(tempFile)) {
372
+ unlinkSync(tempFile);
373
+ }
374
+ }
375
+ }
376
+ /**
377
+ * Setup test context with multiple databases
378
+ */
379
+ export async function setupTestContext(types) {
380
+ const dbs = new Map();
381
+ const configs = new Map();
382
+ for (const type of types) {
383
+ const config = getDbConfig(type);
384
+ configs.set(type, config);
385
+ try {
386
+ const db = await connectDb(config);
387
+ dbs.set(type, db);
388
+ }
389
+ catch (error) {
390
+ // Clean up already connected databases
391
+ for (const [, db] of dbs) {
392
+ await disconnectDb(db);
393
+ }
394
+ throw error;
395
+ }
396
+ }
397
+ return { dbs, configs };
398
+ }
399
+ /**
400
+ * Teardown test context (close all connections)
401
+ */
402
+ export async function teardownTestContext(context) {
403
+ for (const [, db] of context.dbs) {
404
+ await disconnectDb(db);
405
+ }
406
+ }
407
+ //# sourceMappingURL=test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/tests/utils/test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Config tool for MCP Shared Context Server
3
+ * Manages per-project configuration with inheritance (project-specific > global)
4
+ *
5
+ * CONVERTED: Using Knex.js query builder only (NO knex.raw())
6
+ */
7
+ import { DatabaseAdapter } from '../adapters/index.js';
8
+ /**
9
+ * Get configuration value with per-project inheritance
10
+ *
11
+ * Lookup priority:
12
+ * 1. Project-specific config (project_id = current project)
13
+ * 2. Global config (project_id = NULL)
14
+ *
15
+ * @param params - Config key to retrieve
16
+ * @param adapter - Optional database adapter (for testing)
17
+ * @returns Config value or null if not found
18
+ */
19
+ export declare function getConfig(params: {
20
+ key: string;
21
+ }, adapter?: DatabaseAdapter): Promise<{
22
+ key: string;
23
+ value: string | null;
24
+ scope: 'project' | 'global' | 'not_found';
25
+ }>;
26
+ /**
27
+ * Update configuration value (project-specific or global)
28
+ *
29
+ * @param params - Config key, value, and optional scope
30
+ * @param adapter - Optional database adapter (for testing)
31
+ * @returns Success status
32
+ */
33
+ export declare function updateConfig(params: {
34
+ key: string;
35
+ value: string;
36
+ scope?: 'project' | 'global';
37
+ }, adapter?: DatabaseAdapter): Promise<{
38
+ success: boolean;
39
+ key: string;
40
+ value: string;
41
+ scope: 'project' | 'global';
42
+ }>;
43
+ /**
44
+ * Get help documentation for config tool
45
+ * @returns Help documentation object
46
+ */
47
+ export declare function configHelp(): any;
48
+ /**
49
+ * Get comprehensive examples for config tool
50
+ * @returns Examples documentation object
51
+ */
52
+ export declare function configExample(): any;
53
+ /**
54
+ * Get use case documentation for config tool
55
+ * @returns Use case documentation object
56
+ */
57
+ export declare function configUseCase(): any;
58
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/tools/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAMvD;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAA;CAAE,CAAC,CAkD3F;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE;IACN,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,EACD,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAA;CAAE,CAAC,CAqCxF;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,GAAG,CA2BhC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAyEnC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,GAAG,CA0DnC"}