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,314 @@
1
+ /**
2
+ * Automated Cross-Database SQL Dump Export/Import Tests
3
+ *
4
+ * Tests complete export/import workflow:
5
+ * SQLite → MySQL/MariaDB/PostgreSQL
6
+ *
7
+ * Verifies:
8
+ * - SQL dump generation
9
+ * - Import into Docker containers
10
+ * - Schema integrity (table counts, row counts)
11
+ * - Constraint preservation (FK, UNIQUE, PRIMARY KEY)
12
+ * - Data type conversions (TEXT→VARCHAR, boolean, datetime)
13
+ *
14
+ * Prerequisites:
15
+ * - Docker containers running (MySQL, MariaDB, PostgreSQL)
16
+ * - Run: docker-compose -f docker/docker-compose.yml up -d
17
+ *
18
+ * Skip in CI: Set SKIP_DOCKER_TESTS=true or CI=true
19
+ */
20
+ // Skip Docker-dependent tests in CI environments
21
+ if (process.env.SKIP_DOCKER_TESTS === 'true' || process.env.CI === 'true') {
22
+ console.log('⏭️ Skipping Docker-dependent cross-database tests (CI environment)');
23
+ process.exit(0);
24
+ }
25
+ import { describe, it, before, after } from 'node:test';
26
+ import assert from 'node:assert';
27
+ import { generateSqlDump } from '../utils/sql-dump.js';
28
+ import { getDbConfig, connectDb, disconnectDb, dropAllTables, getTables, assertTableCountsMatch, assertRowCountsMatch, getFKConstraints, seedTestData, assertSeededDataExists, importSqlToDocker, } from './utils/test-helpers.js';
29
+ import { join } from 'node:path';
30
+ import { existsSync, unlinkSync, mkdirSync } from 'node:fs';
31
+ const testDbPath = join(process.cwd(), '.sqlew/test-cross-db.db');
32
+ describe('Cross-Database SQL Dump Export/Import', () => {
33
+ let sqliteDb;
34
+ let mysqlDb;
35
+ let mariaDb;
36
+ let postgresDb;
37
+ let mysqlDump;
38
+ let mariaDbDump;
39
+ let postgresDump;
40
+ before(async () => {
41
+ console.log(' 📦 Setting up cross-database test environment...');
42
+ // Ensure test directory exists
43
+ const testDir = join(process.cwd(), '.sqlew');
44
+ if (!existsSync(testDir)) {
45
+ mkdirSync(testDir, { recursive: true });
46
+ }
47
+ // Remove existing test database
48
+ if (existsSync(testDbPath)) {
49
+ unlinkSync(testDbPath);
50
+ }
51
+ // Connect to all databases
52
+ const sqliteConfig = getDbConfig('sqlite', testDbPath);
53
+ const mysqlConfig = getDbConfig('mysql');
54
+ const mariaConfig = getDbConfig('mariadb');
55
+ const postgresConfig = getDbConfig('postgresql');
56
+ sqliteDb = await connectDb(sqliteConfig);
57
+ mysqlDb = await connectDb(mysqlConfig);
58
+ mariaDb = await connectDb(mariaConfig);
59
+ postgresDb = await connectDb(postgresConfig);
60
+ console.log(' ✅ All databases connected');
61
+ // Run migrations on SQLite to create full schema
62
+ console.log(' 🏗️ Running migrations on SQLite...');
63
+ await sqliteDb.migrate.latest();
64
+ console.log(' ✅ Migrations complete');
65
+ // Seed test data
66
+ console.log(' 🌱 Seeding test data...');
67
+ await seedTestData(sqliteDb);
68
+ await assertSeededDataExists(sqliteDb);
69
+ console.log(' ✅ Test data seeded');
70
+ });
71
+ after(async () => {
72
+ if (sqliteDb)
73
+ await disconnectDb(sqliteDb);
74
+ if (mysqlDb)
75
+ await disconnectDb(mysqlDb);
76
+ if (mariaDb)
77
+ await disconnectDb(mariaDb);
78
+ if (postgresDb)
79
+ await disconnectDb(postgresDb);
80
+ if (existsSync(testDbPath)) {
81
+ unlinkSync(testDbPath);
82
+ }
83
+ });
84
+ // ==========================================================================
85
+ // MySQL Export/Import Tests
86
+ // ==========================================================================
87
+ describe('MySQL Export/Import', () => {
88
+ it('should export SQLite to MySQL format', async () => {
89
+ console.log(' 📤 Exporting SQLite → MySQL...');
90
+ // Get non-view tables only (views contain SQLite-specific functions like unixepoch())
91
+ const tables = await sqliteDb.raw(`
92
+ SELECT name FROM sqlite_master
93
+ WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name != 'knex_migrations'
94
+ ORDER BY name
95
+ `);
96
+ const tableNames = tables.map((r) => r.name);
97
+ mysqlDump = await generateSqlDump(sqliteDb, 'mysql', {
98
+ tables: tableNames,
99
+ includeSchema: true,
100
+ includeHeader: true,
101
+ chunkSize: 100,
102
+ });
103
+ assert.ok(mysqlDump.length > 0, 'MySQL dump should not be empty');
104
+ assert.ok(mysqlDump.includes('CREATE TABLE'), 'Should contain CREATE TABLE');
105
+ assert.ok(mysqlDump.includes('PRIMARY KEY'), 'Should contain PRIMARY KEY');
106
+ console.log(` ✅ Generated ${mysqlDump.length} characters`);
107
+ });
108
+ it('should not have TEXT in PRIMARY KEY/UNIQUE constraints (MySQL dump)', () => {
109
+ console.log(' 🔍 Checking for TEXT in constraints (MySQL dump)...');
110
+ // Check m_agents.name TEXT UNIQUE → VARCHAR(191) UNIQUE
111
+ const agentsMatch = mysqlDump.match(/CREATE TABLE.*?m_agents.*?\(.*?\)/s);
112
+ if (agentsMatch) {
113
+ assert.ok(!agentsMatch[0].includes('TEXT UNIQUE'), 'Should not have TEXT UNIQUE');
114
+ assert.ok(agentsMatch[0].includes('VARCHAR') || agentsMatch[0].includes('varchar'), 'Should have VARCHAR instead of TEXT');
115
+ }
116
+ // Check m_help_use_case_categories.category_name TEXT UNIQUE → VARCHAR(191) UNIQUE
117
+ const categoriesMatch = mysqlDump.match(/CREATE TABLE.*?m_help_use_case_categories.*?\(.*?\)/s);
118
+ if (categoriesMatch) {
119
+ assert.ok(!categoriesMatch[0].includes('category_name TEXT UNIQUE'), 'category_name should not be TEXT UNIQUE');
120
+ }
121
+ console.log(' ✅ No TEXT in constraints (dump verified)');
122
+ });
123
+ it('should import SQL dump into MySQL', async () => {
124
+ console.log(' 📥 Importing into MySQL...');
125
+ // Drop all tables
126
+ await dropAllTables(mysqlDb, 'mysql');
127
+ // Import SQL via Docker
128
+ const config = getDbConfig('mysql');
129
+ await importSqlToDocker(mysqlDump, config.containerName, 'mysql');
130
+ console.log(' ✅ Import successful');
131
+ });
132
+ it('should verify table counts match (MySQL)', async () => {
133
+ console.log(' 🔢 Verifying table counts...');
134
+ await assertTableCountsMatch(sqliteDb, 'sqlite', mysqlDb, 'mysql');
135
+ console.log(' ✅ Table counts match');
136
+ });
137
+ it('should verify row counts match (MySQL)', async () => {
138
+ console.log(' 📊 Verifying row counts...');
139
+ const tables = await getTables(sqliteDb, 'sqlite');
140
+ for (const table of tables) {
141
+ await assertRowCountsMatch(sqliteDb, mysqlDb, table);
142
+ }
143
+ console.log(` ✅ Row counts match (${tables.length} tables)`);
144
+ });
145
+ it('should verify no TEXT in PRIMARY KEY/UNIQUE/FK (MySQL database)', async () => {
146
+ console.log(' 🔍 Checking for TEXT in constraints (MySQL database)...');
147
+ const textInConstraints = await mysqlDb.raw(`
148
+ SELECT COLUMN_NAME, DATA_TYPE, COLUMN_KEY, TABLE_NAME
149
+ FROM INFORMATION_SCHEMA.COLUMNS
150
+ WHERE TABLE_SCHEMA = 'mcp_test'
151
+ AND DATA_TYPE = 'text'
152
+ AND COLUMN_KEY IN ('PRI', 'UNI')
153
+ `);
154
+ const badColumns = textInConstraints[0];
155
+ if (badColumns.length > 0) {
156
+ console.error(' ❌ Found TEXT columns in constraints:', badColumns);
157
+ }
158
+ assert.strictEqual(badColumns.length, 0, 'TEXT columns should not be in PRIMARY KEY/UNIQUE constraints');
159
+ console.log(' ✅ No TEXT in constraints (database verified)');
160
+ });
161
+ it('should verify FK constraints exist (MySQL)', async () => {
162
+ console.log(' 🔗 Verifying FK constraints...');
163
+ const fks = await getFKConstraints(mysqlDb, 'mysql', 't_decisions');
164
+ assert.ok(fks.length > 0, 'Should have FK constraints on t_decisions');
165
+ console.log(` ✅ Found ${fks.length} FK constraints`);
166
+ });
167
+ it('should enforce FK constraints (MySQL)', async () => {
168
+ console.log(' 🧪 Testing FK constraint enforcement...');
169
+ try {
170
+ await mysqlDb('t_decisions').insert({
171
+ key_id: 9999, // Non-existent key
172
+ project_id: 1,
173
+ value: 'test',
174
+ ts: Math.floor(Date.now() / 1000),
175
+ agent_id: 1,
176
+ });
177
+ assert.fail('MySQL should reject invalid FK reference');
178
+ }
179
+ catch (error) {
180
+ const isValidError = error.message.includes('foreign key') ||
181
+ error.code === 'ER_NO_REFERENCED_ROW_2' ||
182
+ error.message.includes('FOREIGN KEY');
183
+ assert.ok(isValidError, `Should throw FK constraint error, got: ${error.message}`);
184
+ console.log(' ✅ FK constraints enforced correctly');
185
+ }
186
+ });
187
+ });
188
+ // ==========================================================================
189
+ // MariaDB Export/Import Tests
190
+ // ==========================================================================
191
+ describe('MariaDB Export/Import', () => {
192
+ it('should export SQLite to MariaDB format', async () => {
193
+ console.log(' 📤 Exporting SQLite → MariaDB...');
194
+ // Get non-view tables only (same as MySQL test)
195
+ const tables = await sqliteDb.raw(`
196
+ SELECT name FROM sqlite_master
197
+ WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name != 'knex_migrations'
198
+ ORDER BY name
199
+ `);
200
+ const tableNames = tables.map((r) => r.name);
201
+ // MariaDB uses MySQL dialect
202
+ mariaDbDump = await generateSqlDump(sqliteDb, 'mysql', {
203
+ tables: tableNames,
204
+ includeSchema: true,
205
+ includeHeader: true,
206
+ chunkSize: 100,
207
+ });
208
+ assert.ok(mariaDbDump.length > 0, 'MariaDB dump should not be empty');
209
+ console.log(` ✅ Generated ${mariaDbDump.length} characters`);
210
+ });
211
+ it('should import SQL dump into MariaDB', async () => {
212
+ console.log(' 📥 Importing into MariaDB...');
213
+ await dropAllTables(mariaDb, 'mariadb');
214
+ const config = getDbConfig('mariadb');
215
+ await importSqlToDocker(mariaDbDump, config.containerName, 'mariadb');
216
+ console.log(' ✅ Import successful');
217
+ });
218
+ it('should verify table counts match (MariaDB)', async () => {
219
+ console.log(' 🔢 Verifying table counts...');
220
+ await assertTableCountsMatch(sqliteDb, 'sqlite', mariaDb, 'mariadb');
221
+ console.log(' ✅ Table counts match');
222
+ });
223
+ it('should verify row counts match (MariaDB)', async () => {
224
+ console.log(' 📊 Verifying row counts...');
225
+ const tables = await getTables(sqliteDb, 'sqlite');
226
+ for (const table of tables) {
227
+ await assertRowCountsMatch(sqliteDb, mariaDb, table);
228
+ }
229
+ console.log(` ✅ Row counts match (${tables.length} tables)`);
230
+ });
231
+ it('should verify no TEXT in PRIMARY KEY/UNIQUE/FK (MariaDB)', async () => {
232
+ console.log(' 🔍 Checking for TEXT in constraints (MariaDB)...');
233
+ const textInConstraints = await mariaDb.raw(`
234
+ SELECT COLUMN_NAME, DATA_TYPE, COLUMN_KEY, TABLE_NAME
235
+ FROM INFORMATION_SCHEMA.COLUMNS
236
+ WHERE TABLE_SCHEMA = 'mcp_test'
237
+ AND DATA_TYPE = 'text'
238
+ AND COLUMN_KEY IN ('PRI', 'UNI')
239
+ `);
240
+ const badColumns = textInConstraints[0];
241
+ assert.strictEqual(badColumns.length, 0, 'TEXT columns should not be in PRIMARY KEY/UNIQUE constraints (MariaDB 10.5 compatibility)');
242
+ console.log(' ✅ No TEXT in constraints (MariaDB verified)');
243
+ });
244
+ it('should verify FK constraints exist (MariaDB)', async () => {
245
+ console.log(' 🔗 Verifying FK constraints...');
246
+ const fks = await getFKConstraints(mariaDb, 'mariadb', 't_decisions');
247
+ assert.ok(fks.length > 0, 'Should have FK constraints on t_decisions');
248
+ console.log(` ✅ Found ${fks.length} FK constraints`);
249
+ });
250
+ });
251
+ // ==========================================================================
252
+ // PostgreSQL Export/Import Tests
253
+ // ==========================================================================
254
+ describe('PostgreSQL Export/Import', () => {
255
+ it('should export SQLite to PostgreSQL format', async () => {
256
+ console.log(' 📤 Exporting SQLite → PostgreSQL...');
257
+ // Get non-view tables only (views contain SQLite-specific functions)
258
+ const tables = await sqliteDb.raw(`
259
+ SELECT name FROM sqlite_master
260
+ WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name != 'knex_migrations'
261
+ ORDER BY name
262
+ `);
263
+ const tableNames = tables.map((r) => r.name);
264
+ postgresDump = await generateSqlDump(sqliteDb, 'postgresql', {
265
+ tables: tableNames,
266
+ includeSchema: true,
267
+ includeHeader: true,
268
+ chunkSize: 100,
269
+ });
270
+ assert.ok(postgresDump.length > 0, 'PostgreSQL dump should not be empty');
271
+ assert.ok(postgresDump.includes('CREATE TABLE'), 'Should contain CREATE TABLE');
272
+ console.log(` ✅ Generated ${postgresDump.length} characters`);
273
+ });
274
+ it('should import SQL dump into PostgreSQL', async () => {
275
+ console.log(' 📥 Importing into PostgreSQL...');
276
+ await dropAllTables(postgresDb, 'postgresql');
277
+ const config = getDbConfig('postgresql');
278
+ await importSqlToDocker(postgresDump, config.containerName, 'postgresql');
279
+ console.log(' ✅ Import successful');
280
+ });
281
+ it('should verify table counts match (PostgreSQL)', async () => {
282
+ console.log(' 🔢 Verifying table counts...');
283
+ await assertTableCountsMatch(sqliteDb, 'sqlite', postgresDb, 'postgresql');
284
+ console.log(' ✅ Table counts match');
285
+ });
286
+ it('should verify row counts match (PostgreSQL)', async () => {
287
+ console.log(' 📊 Verifying row counts...');
288
+ const tables = await getTables(sqliteDb, 'sqlite');
289
+ for (const table of tables) {
290
+ await assertRowCountsMatch(sqliteDb, postgresDb, table);
291
+ }
292
+ console.log(` ✅ Row counts match (${tables.length} tables)`);
293
+ });
294
+ it('should verify FK constraints exist (PostgreSQL)', async () => {
295
+ console.log(' 🔗 Verifying FK constraints...');
296
+ const fks = await getFKConstraints(postgresDb, 'postgresql', 't_decisions');
297
+ assert.ok(fks.length > 0, 'Should have FK constraints on t_decisions');
298
+ console.log(` ✅ Found ${fks.length} FK constraints`);
299
+ });
300
+ it('should convert booleans to TRUE/FALSE (PostgreSQL)', async () => {
301
+ console.log(' 🔄 Verifying boolean conversion...');
302
+ const result = await postgresDb('m_agents').select('is_reusable').first();
303
+ if (result) {
304
+ // PostgreSQL should return actual boolean, not 0/1
305
+ assert.strictEqual(typeof result.is_reusable, 'boolean', 'is_reusable should be boolean type');
306
+ console.log(' ✅ Boolean values converted correctly');
307
+ }
308
+ else {
309
+ console.log(' ⚠️ No data to verify boolean conversion');
310
+ }
311
+ });
312
+ });
313
+ });
314
+ //# sourceMappingURL=sql-dump-cross-database.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-cross-database.test.js","sourceRoot":"","sources":["../../src/tests/sql-dump-cross-database.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * DEFAULT value conversion tests for CREATE TABLE statements
3
+ *
4
+ * Tests that SQLite DEFAULT functions are correctly converted to target database syntax.
5
+ * Focus: INTEGER timestamp defaults (strftime('%s', 'now') → UNIX_TIMESTAMP() / EXTRACT(epoch...))
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=sql-dump-default-conversions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-default-conversions.test.d.ts","sourceRoot":"","sources":["../../src/tests/sql-dump-default-conversions.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * DEFAULT value conversion tests for CREATE TABLE statements
3
+ *
4
+ * Tests that SQLite DEFAULT functions are correctly converted to target database syntax.
5
+ * Focus: INTEGER timestamp defaults (strftime('%s', 'now') → UNIX_TIMESTAMP() / EXTRACT(epoch...))
6
+ */
7
+ import { describe, it } from 'node:test';
8
+ import assert from 'node:assert';
9
+ import knex from 'knex';
10
+ import { generateSqlDump } from '../utils/sql-dump.js';
11
+ describe('SQL Dump DEFAULT Value Conversions', () => {
12
+ describe('INTEGER Timestamp Defaults', () => {
13
+ it('should convert strftime(\'%s\', \'now\') to UNIX_TIMESTAMP() for MySQL', async () => {
14
+ // Create in-memory SQLite database with INTEGER timestamp DEFAULT
15
+ const db = knex({
16
+ client: 'better-sqlite3',
17
+ connection: ':memory:',
18
+ useNullAsDefault: true,
19
+ });
20
+ await db.schema.createTable('t_help_token_usage', (table) => {
21
+ table.increments('usage_id').primary();
22
+ table.text('query_type').notNullable();
23
+ table.integer('estimated_tokens').notNullable();
24
+ // SQLite INTEGER timestamp with strftime DEFAULT (requires parentheses)
25
+ table.integer('timestamp').notNullable().defaultTo(db.raw("(strftime('%s', 'now'))"));
26
+ });
27
+ // Generate MySQL dump
28
+ const dump = await generateSqlDump(db, 'mysql', {
29
+ tables: ['t_help_token_usage'],
30
+ includeSchema: true,
31
+ });
32
+ // Verify conversion
33
+ assert.ok(dump.includes('UNIX_TIMESTAMP()'), 'Should convert to UNIX_TIMESTAMP()');
34
+ assert.ok(!dump.includes('strftime'), 'Should not contain strftime');
35
+ assert.ok(!dump.includes('NOW()'), 'Should not use NOW() for integer timestamps');
36
+ await db.destroy();
37
+ });
38
+ it('should convert strftime(\'%s\', \'now\') to EXTRACT(epoch FROM NOW())::INTEGER for PostgreSQL', async () => {
39
+ const db = knex({
40
+ client: 'better-sqlite3',
41
+ connection: ':memory:',
42
+ useNullAsDefault: true,
43
+ });
44
+ await db.schema.createTable('t_help_token_usage', (table) => {
45
+ table.increments('usage_id').primary();
46
+ table.text('query_type').notNullable();
47
+ table.integer('estimated_tokens').notNullable();
48
+ table.integer('timestamp').notNullable().defaultTo(db.raw("(strftime('%s', 'now'))"));
49
+ });
50
+ const dump = await generateSqlDump(db, 'postgresql', {
51
+ tables: ['t_help_token_usage'],
52
+ includeSchema: true,
53
+ });
54
+ // Verify conversion
55
+ assert.ok(dump.includes('EXTRACT(epoch FROM NOW())::INTEGER'), 'Should convert to EXTRACT with INTEGER cast');
56
+ assert.ok(!dump.includes('strftime'), 'Should not contain strftime');
57
+ assert.ok(!dump.includes('NOW()') || dump.includes('EXTRACT(epoch FROM NOW())'), 'Should not use bare NOW() for integer timestamps');
58
+ await db.destroy();
59
+ });
60
+ it('should convert unixepoch() to UNIX_TIMESTAMP() for MySQL', async () => {
61
+ const db = knex({
62
+ client: 'better-sqlite3',
63
+ connection: ':memory:',
64
+ useNullAsDefault: true,
65
+ });
66
+ await db.schema.createTable('t_test', (table) => {
67
+ table.increments('id').primary();
68
+ table.integer('created_at').defaultTo(db.raw('(unixepoch())'));
69
+ });
70
+ const dump = await generateSqlDump(db, 'mysql', {
71
+ tables: ['t_test'],
72
+ includeSchema: true,
73
+ });
74
+ assert.ok(dump.includes('UNIX_TIMESTAMP()'), 'Should convert unixepoch() to UNIX_TIMESTAMP()');
75
+ assert.ok(!dump.includes('unixepoch'), 'Should not contain unixepoch');
76
+ await db.destroy();
77
+ });
78
+ it('should convert unixepoch() to EXTRACT(epoch FROM NOW())::INTEGER for PostgreSQL', async () => {
79
+ const db = knex({
80
+ client: 'better-sqlite3',
81
+ connection: ':memory:',
82
+ useNullAsDefault: true,
83
+ });
84
+ await db.schema.createTable('t_test', (table) => {
85
+ table.increments('id').primary();
86
+ table.integer('created_at').defaultTo(db.raw('(unixepoch())'));
87
+ });
88
+ const dump = await generateSqlDump(db, 'postgresql', {
89
+ tables: ['t_test'],
90
+ includeSchema: true,
91
+ });
92
+ assert.ok(dump.includes('EXTRACT(epoch FROM NOW())::INTEGER'), 'Should convert unixepoch() to EXTRACT with INTEGER cast');
93
+ assert.ok(!dump.includes('unixepoch'), 'Should not contain unixepoch');
94
+ await db.destroy();
95
+ });
96
+ });
97
+ describe('Datetime Defaults (Non-Integer)', () => {
98
+ it('should skip DEFAULT for TEXT columns in MySQL (TEXT cannot have DEFAULT)', async () => {
99
+ const db = knex({
100
+ client: 'better-sqlite3',
101
+ connection: ':memory:',
102
+ useNullAsDefault: true,
103
+ });
104
+ await db.schema.createTable('t_test', (table) => {
105
+ table.increments('id').primary();
106
+ table.text('created_at').defaultTo(db.raw("(strftime('%Y-%m-%d %H:%M:%S', 'now'))"));
107
+ });
108
+ const dump = await generateSqlDump(db, 'mysql', {
109
+ tables: ['t_test'],
110
+ includeSchema: true,
111
+ });
112
+ // MySQL TEXT columns cannot have DEFAULT values, so it should be skipped
113
+ // Check that created_at column does not have DEFAULT (ignore DEFAULT CHARSET)
114
+ const createdAtLine = dump.split('\n').find(line => line.includes('created_at'));
115
+ assert.ok(createdAtLine, 'Should have created_at column');
116
+ assert.ok(!createdAtLine.includes('DEFAULT'), 'created_at column should not have DEFAULT');
117
+ assert.ok(!dump.includes('strftime'), 'Should not contain strftime');
118
+ assert.ok(!dump.includes('NOW()'), 'Should not use NOW() for TEXT columns');
119
+ await db.destroy();
120
+ });
121
+ it('should convert strftime datetime formats to NOW() for PostgreSQL', async () => {
122
+ const db = knex({
123
+ client: 'better-sqlite3',
124
+ connection: ':memory:',
125
+ useNullAsDefault: true,
126
+ });
127
+ await db.schema.createTable('t_test', (table) => {
128
+ table.increments('id').primary();
129
+ table.text('created_at').defaultTo(db.raw("(strftime('%Y-%m-%d', 'now'))"));
130
+ });
131
+ const dump = await generateSqlDump(db, 'postgresql', {
132
+ tables: ['t_test'],
133
+ includeSchema: true,
134
+ });
135
+ assert.ok(dump.includes('NOW()'), 'Should convert datetime strftime to NOW()');
136
+ assert.ok(!dump.includes('strftime'), 'Should not contain strftime');
137
+ await db.destroy();
138
+ });
139
+ });
140
+ });
141
+ //# sourceMappingURL=sql-dump-default-conversions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-default-conversions.test.js","sourceRoot":"","sources":["../../src/tests/sql-dump-default-conversions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Foreign Key Constraint Validation Tests
3
+ *
4
+ * Tests FK constraint preservation and enforcement during cross-database migrations.
5
+ * Specifically designed to catch SQLite→MySQL FK errors.
6
+ *
7
+ * Uses DRY shared test utilities from test-helpers.ts
8
+ *
9
+ * NOTE: These tests require Docker containers (MySQL, PostgreSQL)
10
+ * Set SKIP_DOCKER_TESTS=true or CI=true to skip in CI environments
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=sql-dump-fk-constraints.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-dump-fk-constraints.test.d.ts","sourceRoot":"","sources":["../../src/tests/sql-dump-fk-constraints.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}