sqlew 3.6.1 → 3.6.2

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 (190) hide show
  1. package/CHANGELOG.md +403 -376
  2. package/dist/knexfile.d.ts.map +1 -1
  3. package/dist/knexfile.js +15 -3
  4. package/dist/knexfile.js.map +1 -1
  5. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  6. package/dist/migrations/knex/{20251025020452_create_master_tables.js → bootstrap/20251025020452_create_master_tables.js} +15 -12
  7. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  8. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  9. package/dist/migrations/knex/{20251025021152_create_transaction_tables.js → bootstrap/20251025021152_create_transaction_tables.js} +19 -19
  10. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  11. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  12. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js +93 -0
  13. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  14. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  15. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js +64 -0
  16. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  17. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  18. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  19. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  20. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  21. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  22. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  23. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  24. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  25. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  26. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  27. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  28. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  29. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  30. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  31. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  32. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  33. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  34. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  35. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  36. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  37. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  38. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  39. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +13 -0
  40. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  41. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +70 -0
  42. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  43. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +11 -0
  44. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  45. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +36 -0
  46. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  47. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +14 -0
  48. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  49. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +84 -0
  50. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  51. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +9 -0
  52. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  53. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +37 -0
  54. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  55. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +9 -0
  56. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  57. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +41 -0
  58. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  59. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +9 -0
  60. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  61. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +36 -0
  62. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  63. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +10 -0
  64. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  65. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +28 -0
  66. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  67. package/dist/tests/migrations/test-all-versions-real.d.ts +8 -0
  68. package/dist/tests/migrations/test-all-versions-real.d.ts.map +1 -0
  69. package/dist/tests/migrations/test-all-versions-real.js +234 -0
  70. package/dist/tests/migrations/test-all-versions-real.js.map +1 -0
  71. package/dist/tests/migrations/test-all-versions.d.ts +14 -0
  72. package/dist/tests/migrations/test-all-versions.d.ts.map +1 -0
  73. package/dist/tests/migrations/test-all-versions.js +521 -0
  74. package/dist/tests/migrations/test-all-versions.js.map +1 -0
  75. package/docs/MIGRATION_CHAIN.md +293 -280
  76. package/package.json +85 -82
  77. package/dist/migrations/add-decision-context.d.ts +0 -28
  78. package/dist/migrations/add-decision-context.d.ts.map +0 -1
  79. package/dist/migrations/add-decision-context.js +0 -125
  80. package/dist/migrations/add-decision-context.js.map +0 -1
  81. package/dist/migrations/add-help-system-tables.d.ts +0 -35
  82. package/dist/migrations/add-help-system-tables.d.ts.map +0 -1
  83. package/dist/migrations/add-help-system-tables.js +0 -206
  84. package/dist/migrations/add-help-system-tables.js.map +0 -1
  85. package/dist/migrations/add-table-prefixes.d.ts +0 -29
  86. package/dist/migrations/add-table-prefixes.d.ts.map +0 -1
  87. package/dist/migrations/add-table-prefixes.js +0 -150
  88. package/dist/migrations/add-table-prefixes.js.map +0 -1
  89. package/dist/migrations/add-task-dependencies.d.ts +0 -26
  90. package/dist/migrations/add-task-dependencies.d.ts.map +0 -1
  91. package/dist/migrations/add-task-dependencies.js +0 -94
  92. package/dist/migrations/add-task-dependencies.js.map +0 -1
  93. package/dist/migrations/add-task-tables.d.ts +0 -47
  94. package/dist/migrations/add-task-tables.d.ts.map +0 -1
  95. package/dist/migrations/add-task-tables.js +0 -285
  96. package/dist/migrations/add-task-tables.js.map +0 -1
  97. package/dist/migrations/add-token-tracking.d.ts +0 -28
  98. package/dist/migrations/add-token-tracking.d.ts.map +0 -1
  99. package/dist/migrations/add-token-tracking.js +0 -108
  100. package/dist/migrations/add-token-tracking.js.map +0 -1
  101. package/dist/migrations/add-v2.1.0-features.d.ts +0 -29
  102. package/dist/migrations/add-v2.1.0-features.d.ts.map +0 -1
  103. package/dist/migrations/add-v2.1.0-features.js +0 -198
  104. package/dist/migrations/add-v2.1.0-features.js.map +0 -1
  105. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +0 -26
  106. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +0 -1
  107. package/dist/migrations/add-v3.5.0-pruned-files.js +0 -107
  108. package/dist/migrations/add-v3.5.0-pruned-files.js.map +0 -1
  109. package/dist/migrations/index.d.ts +0 -112
  110. package/dist/migrations/index.d.ts.map +0 -1
  111. package/dist/migrations/index.js +0 -411
  112. package/dist/migrations/index.js.map +0 -1
  113. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +0 -1
  114. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +0 -1
  115. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +0 -1
  116. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +0 -1
  117. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +0 -1
  118. package/dist/migrations/knex/20251025021351_create_indexes.js +0 -62
  119. package/dist/migrations/knex/20251025021351_create_indexes.js.map +0 -1
  120. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +0 -1
  121. package/dist/migrations/knex/20251025021416_seed_master_data.js +0 -58
  122. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +0 -1
  123. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +0 -1
  124. package/dist/migrations/knex/20251025070349_create_views.js.map +0 -1
  125. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  126. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  127. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  128. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  129. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +0 -1
  130. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +0 -1
  131. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  132. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  133. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +0 -1
  134. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +0 -1
  135. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  136. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +0 -1
  137. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  138. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  139. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  140. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +0 -1
  141. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  142. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  143. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +0 -1
  144. package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +0 -1
  145. package/dist/migrations/migrate-decisions-to-tasks.d.ts +0 -61
  146. package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +0 -1
  147. package/dist/migrations/migrate-decisions-to-tasks.js +0 -442
  148. package/dist/migrations/migrate-decisions-to-tasks.js.map +0 -1
  149. package/dist/migrations/seed-help-data.d.ts +0 -48
  150. package/dist/migrations/seed-help-data.d.ts.map +0 -1
  151. package/dist/migrations/seed-help-data.js +0 -1466
  152. package/dist/migrations/seed-help-data.js.map +0 -1
  153. package/dist/migrations/seed-tool-metadata.d.ts +0 -24
  154. package/dist/migrations/seed-tool-metadata.d.ts.map +0 -1
  155. package/dist/migrations/seed-tool-metadata.js +0 -392
  156. package/dist/migrations/seed-tool-metadata.js.map +0 -1
  157. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +0 -46
  158. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +0 -1
  159. package/dist/migrations/v3.6.0-help-system-refactor.js +0 -223
  160. package/dist/migrations/v3.6.0-help-system-refactor.js.map +0 -1
  161. package/dist/tests/migrations/test-v3.2-migration.d.ts +0 -6
  162. package/dist/tests/migrations/test-v3.2-migration.d.ts.map +0 -1
  163. package/dist/tests/migrations/test-v3.2-migration.js +0 -191
  164. package/dist/tests/migrations/test-v3.2-migration.js.map +0 -1
  165. /package/dist/migrations/knex/{20251025020452_create_master_tables.d.ts → bootstrap/20251025020452_create_master_tables.d.ts} +0 -0
  166. /package/dist/migrations/knex/{20251025021152_create_transaction_tables.d.ts → bootstrap/20251025021152_create_transaction_tables.d.ts} +0 -0
  167. /package/dist/migrations/knex/{20251025021351_create_indexes.d.ts → bootstrap/20251025021351_create_indexes.d.ts} +0 -0
  168. /package/dist/migrations/knex/{20251025021416_seed_master_data.d.ts → bootstrap/20251025021416_seed_master_data.d.ts} +0 -0
  169. /package/dist/migrations/knex/{20251025070349_create_views.d.ts → bootstrap/20251025070349_create_views.d.ts} +0 -0
  170. /package/dist/migrations/knex/{20251025070349_create_views.js → bootstrap/20251025070349_create_views.js} +0 -0
  171. /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.d.ts → enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts} +0 -0
  172. /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.js → enhancements/20251025081221_add_link_type_to_task_decision_links.js} +0 -0
  173. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.d.ts → enhancements/20251025082220_fix_task_dependencies_columns.d.ts} +0 -0
  174. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.js → enhancements/20251025082220_fix_task_dependencies_columns.js} +0 -0
  175. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.d.ts → enhancements/20251025090000_create_help_system_tables.d.ts} +0 -0
  176. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.js → enhancements/20251025090000_create_help_system_tables.js} +0 -0
  177. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.d.ts → enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts} +0 -0
  178. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.js → enhancements/20251025090100_seed_help_categories_and_use_cases.js} +0 -0
  179. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.d.ts → enhancements/20251025100000_seed_help_metadata.d.ts} +0 -0
  180. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.js → enhancements/20251025100000_seed_help_metadata.js} +0 -0
  181. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.d.ts → enhancements/20251025100100_seed_remaining_use_cases.d.ts} +0 -0
  182. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.js → enhancements/20251025100100_seed_remaining_use_cases.js} +0 -0
  183. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.d.ts → enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts} +0 -0
  184. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.js → enhancements/20251025120000_add_cascade_to_task_dependencies.js} +0 -0
  185. /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.d.ts → enhancements/20251027000000_add_agent_reuse_system.d.ts} +0 -0
  186. /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.js → enhancements/20251027000000_add_agent_reuse_system.js} +0 -0
  187. /package/dist/migrations/knex/{20251027010000_add_task_constraint_to_decision_context.d.ts → enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts} +0 -0
  188. /package/dist/migrations/knex/{20251027010000_add_task_constraint_to_decision_context.js → enhancements/20251027010000_add_task_constraint_to_decision_context.js} +0 -0
  189. /package/dist/migrations/knex/{20251027020000_update_agent_reusability.d.ts → enhancements/20251027020000_update_agent_reusability.d.ts} +0 -0
  190. /package/dist/migrations/knex/{20251027020000_update_agent_reusability.js → enhancements/20251027020000_update_agent_reusability.js} +0 -0
@@ -0,0 +1,521 @@
1
+ /**
2
+ * Comprehensive Migration Test: All Versions → v3.6.1
3
+ *
4
+ * Tests migration paths from all released versions to the current version.
5
+ * This ensures backward compatibility and safe upgrade paths for all users.
6
+ *
7
+ * Released versions tested:
8
+ * - v1.x: 1.0.0, 1.1.0, 1.1.1, 1.1.2
9
+ * - v2.x: 2.0.0, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4
10
+ * - v3.0-v3.2: 3.0.2, 3.1.0, 3.1.1, 3.1.2, 3.2.2, 3.2.4, 3.2.5
11
+ * - v3.5-v3.6: 3.5.3, 3.6.0
12
+ */
13
+ import Database from 'better-sqlite3';
14
+ import { execSync } from 'child_process';
15
+ import { writeFileSync, existsSync, mkdirSync } from 'fs';
16
+ import { join } from 'path';
17
+ import Knex from 'knex';
18
+ import knexConfig from '../../knexfile.js';
19
+ // Colors for console output
20
+ const GREEN = '\x1b[32m';
21
+ const RED = '\x1b[31m';
22
+ const BLUE = '\x1b[34m';
23
+ const YELLOW = '\x1b[33m';
24
+ const CYAN = '\x1b[36m';
25
+ const RESET = '\x1b[0m';
26
+ function log(message, color = RESET) {
27
+ console.log(`${color}${message}${RESET}`);
28
+ }
29
+ /**
30
+ * All released versions to test
31
+ */
32
+ const RELEASED_VERSIONS = [
33
+ '1.0.0',
34
+ '1.1.0',
35
+ '1.1.1',
36
+ '1.1.2',
37
+ '2.0.0',
38
+ '2.1.0',
39
+ '2.1.1',
40
+ '2.1.2',
41
+ '2.1.3',
42
+ '2.1.4',
43
+ '3.0.2',
44
+ '3.1.0',
45
+ '3.1.1',
46
+ '3.1.2',
47
+ '3.2.2',
48
+ '3.2.4',
49
+ '3.2.5',
50
+ '3.5.3',
51
+ '3.6.0',
52
+ ];
53
+ const CURRENT_VERSION = '3.6.2';
54
+ /**
55
+ * Simple version detection based on table existence
56
+ */
57
+ function detectInitialVersion(db) {
58
+ const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all();
59
+ const tableNames = tables.map(t => t.name);
60
+ // Check for version indicators
61
+ if (tableNames.includes('m_help_tools'))
62
+ return '3.6.0';
63
+ if (tableNames.includes('t_task_pruned_files'))
64
+ return '3.5.x';
65
+ if (tableNames.includes('t_decision_context'))
66
+ return '3.2.2+';
67
+ if (tableNames.includes('t_task_dependencies'))
68
+ return '3.2.0';
69
+ if (tableNames.includes('t_tasks'))
70
+ return '3.0.x';
71
+ if (tableNames.includes('t_activity_log'))
72
+ return '2.1.x';
73
+ if (tableNames.includes('m_agents'))
74
+ return '1.1.x/2.0.0';
75
+ if (tableNames.includes('agents'))
76
+ return '1.0.0';
77
+ return 'unknown';
78
+ }
79
+ /**
80
+ * Extract database schema from a git tag
81
+ */
82
+ function extractSchemaFromTag(version) {
83
+ const tmpDir = join(process.cwd(), '.sqlew', 'tmp', 'schema-extraction');
84
+ try {
85
+ // Create temp directory
86
+ if (!existsSync(tmpDir)) {
87
+ mkdirSync(tmpDir, { recursive: true });
88
+ }
89
+ // Try to extract schema.sql from the tag
90
+ try {
91
+ const schemaPath = 'assets/schema.sql';
92
+ const content = execSync(`git show v${version}:${schemaPath}`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
93
+ return content;
94
+ }
95
+ catch {
96
+ // If schema.sql doesn't exist, try to extract from schema.ts initialization
97
+ try {
98
+ const schemaPath = 'src/schema.ts';
99
+ const schemaTs = execSync(`git show v${version}:${schemaPath}`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
100
+ // Extract SQL from initializeSchema function
101
+ // This is a simplified extraction - may need adjustment
102
+ const sqlMatch = schemaTs.match(/db\.exec\(`([\s\S]*?)`\)/);
103
+ if (sqlMatch) {
104
+ return sqlMatch[1];
105
+ }
106
+ }
107
+ catch {
108
+ // Schema extraction failed
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ catch (error) {
114
+ log(` ⚠️ Could not extract schema for v${version}: ${error}`, YELLOW);
115
+ return null;
116
+ }
117
+ }
118
+ /**
119
+ * Create a database with the schema from a specific version
120
+ */
121
+ function createDatabaseForVersion(version) {
122
+ log(`\n 📦 Creating database for v${version}...`, CYAN);
123
+ // Create temporary file database (not in-memory) so Knex can access it
124
+ const tmpDir = join(process.cwd(), '.sqlew', 'tmp', 'migration-tests');
125
+ if (!existsSync(tmpDir)) {
126
+ mkdirSync(tmpDir, { recursive: true });
127
+ }
128
+ const dbPath = join(tmpDir, `test-v${version}-${Date.now()}.db`);
129
+ // For testing, we'll create databases based on version detection logic
130
+ // This simulates databases from different versions
131
+ const db = new Database(dbPath);
132
+ try {
133
+ // Enable foreign keys
134
+ db.exec('PRAGMA foreign_keys = ON');
135
+ // Create schema based on version
136
+ // We'll use a simplified approach: create tables that match version detection
137
+ if (version === '1.0.0') {
138
+ // v1.0.0: Unprefixed tables
139
+ db.exec(`
140
+ CREATE TABLE agents (
141
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
142
+ name TEXT NOT NULL UNIQUE,
143
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
144
+ );
145
+
146
+ CREATE TABLE decisions (
147
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
148
+ agent_id INTEGER NOT NULL,
149
+ key TEXT NOT NULL,
150
+ value TEXT NOT NULL,
151
+ ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
152
+ FOREIGN KEY (agent_id) REFERENCES agents(id)
153
+ );
154
+ `);
155
+ log(` ✓ Created v1.0.0 schema (unprefixed tables)`, GREEN);
156
+ }
157
+ else if (version.startsWith('1.1.') || version === '2.0.0') {
158
+ // v1.1.x and v2.0.0: Prefixed tables, no activity log
159
+ db.exec(`
160
+ CREATE TABLE m_agents (
161
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
162
+ name TEXT NOT NULL UNIQUE,
163
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
164
+ );
165
+
166
+ CREATE TABLE t_decisions (
167
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
168
+ agent_id INTEGER NOT NULL,
169
+ context_key TEXT NOT NULL,
170
+ value TEXT NOT NULL,
171
+ ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
172
+ FOREIGN KEY (agent_id) REFERENCES m_agents(id)
173
+ );
174
+ `);
175
+ log(` ✓ Created v${version} schema (prefixed tables)`, GREEN);
176
+ }
177
+ else if (version.startsWith('2.1.')) {
178
+ // v2.1.x: Has activity log, no task tables
179
+ db.exec(`
180
+ CREATE TABLE m_agents (
181
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
182
+ name TEXT NOT NULL UNIQUE,
183
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
184
+ );
185
+
186
+ CREATE TABLE t_decisions (
187
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
188
+ agent_id INTEGER NOT NULL,
189
+ context_key TEXT NOT NULL,
190
+ value TEXT NOT NULL,
191
+ ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
192
+ FOREIGN KEY (agent_id) REFERENCES m_agents(id)
193
+ );
194
+
195
+ CREATE TABLE t_activity_log (
196
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
197
+ ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
198
+ action_type TEXT NOT NULL,
199
+ details TEXT
200
+ );
201
+ `);
202
+ log(` ✓ Created v${version} schema (with activity log)`, GREEN);
203
+ }
204
+ else if (version === '3.0.2' || version.startsWith('3.1.')) {
205
+ // v3.0.x - v3.1.x: Has task tables, no dependencies
206
+ db.exec(`
207
+ CREATE TABLE m_agents (
208
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
209
+ name TEXT NOT NULL UNIQUE,
210
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
211
+ );
212
+
213
+ CREATE TABLE m_task_statuses (
214
+ id INTEGER PRIMARY KEY,
215
+ name TEXT NOT NULL UNIQUE
216
+ );
217
+
218
+ INSERT INTO m_task_statuses (id, name) VALUES
219
+ (1, 'pending'),
220
+ (2, 'in_progress'),
221
+ (3, 'completed'),
222
+ (4, 'archived');
223
+
224
+ CREATE TABLE t_tasks (
225
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
226
+ title TEXT NOT NULL,
227
+ status_id INTEGER NOT NULL,
228
+ created_by_agent_id INTEGER NOT NULL,
229
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
230
+ FOREIGN KEY (status_id) REFERENCES m_task_statuses(id),
231
+ FOREIGN KEY (created_by_agent_id) REFERENCES m_agents(id)
232
+ );
233
+
234
+ CREATE TABLE t_activity_log (
235
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
236
+ ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
237
+ action_type TEXT NOT NULL,
238
+ details TEXT
239
+ );
240
+ `);
241
+ log(` ✓ Created v${version} schema (with tasks, no dependencies)`, GREEN);
242
+ }
243
+ else if (version.startsWith('3.2.') && version !== '3.2.2') {
244
+ // v3.2.0 - v3.2.1: Has task dependencies, no decision context
245
+ db.exec(`
246
+ CREATE TABLE m_agents (
247
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
248
+ name TEXT NOT NULL UNIQUE,
249
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
250
+ );
251
+
252
+ CREATE TABLE m_task_statuses (
253
+ id INTEGER PRIMARY KEY,
254
+ name TEXT NOT NULL UNIQUE
255
+ );
256
+
257
+ INSERT INTO m_task_statuses (id, name) VALUES
258
+ (1, 'pending'),
259
+ (2, 'in_progress'),
260
+ (3, 'completed'),
261
+ (4, 'archived');
262
+
263
+ CREATE TABLE t_tasks (
264
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
265
+ title TEXT NOT NULL,
266
+ status_id INTEGER NOT NULL,
267
+ created_by_agent_id INTEGER NOT NULL,
268
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
269
+ FOREIGN KEY (status_id) REFERENCES m_task_statuses(id),
270
+ FOREIGN KEY (created_by_agent_id) REFERENCES m_agents(id)
271
+ );
272
+
273
+ CREATE TABLE t_task_dependencies (
274
+ blocker_task_id INTEGER NOT NULL,
275
+ blocked_task_id INTEGER NOT NULL,
276
+ PRIMARY KEY (blocker_task_id, blocked_task_id),
277
+ FOREIGN KEY (blocker_task_id) REFERENCES t_tasks(id),
278
+ FOREIGN KEY (blocked_task_id) REFERENCES t_tasks(id)
279
+ );
280
+ `);
281
+ log(` ✓ Created v${version} schema (with task dependencies)`, GREEN);
282
+ }
283
+ else if (version === '3.2.2' || version.startsWith('3.2.') || version.startsWith('3.4.')) {
284
+ // v3.2.2+: Has decision context, no pruned files
285
+ db.exec(`
286
+ CREATE TABLE m_agents (
287
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
288
+ name TEXT NOT NULL UNIQUE,
289
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
290
+ );
291
+
292
+ CREATE TABLE m_task_statuses (
293
+ id INTEGER PRIMARY KEY,
294
+ name TEXT NOT NULL UNIQUE
295
+ );
296
+
297
+ INSERT INTO m_task_statuses (id, name) VALUES
298
+ (1, 'pending'),
299
+ (2, 'in_progress'),
300
+ (3, 'completed'),
301
+ (4, 'archived');
302
+
303
+ CREATE TABLE t_tasks (
304
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
305
+ title TEXT NOT NULL,
306
+ status_id INTEGER NOT NULL,
307
+ created_by_agent_id INTEGER NOT NULL,
308
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
309
+ FOREIGN KEY (status_id) REFERENCES m_task_statuses(id),
310
+ FOREIGN KEY (created_by_agent_id) REFERENCES m_agents(id)
311
+ );
312
+
313
+ CREATE TABLE t_task_dependencies (
314
+ blocker_task_id INTEGER NOT NULL,
315
+ blocked_task_id INTEGER NOT NULL,
316
+ PRIMARY KEY (blocker_task_id, blocked_task_id),
317
+ FOREIGN KEY (blocker_task_id) REFERENCES t_tasks(id),
318
+ FOREIGN KEY (blocked_task_id) REFERENCES t_tasks(id)
319
+ );
320
+
321
+ CREATE TABLE t_decision_context (
322
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
323
+ decision_id INTEGER NOT NULL,
324
+ rationale TEXT,
325
+ alternatives TEXT,
326
+ tradeoffs TEXT
327
+ );
328
+ `);
329
+ log(` ✓ Created v${version} schema (with decision context)`, GREEN);
330
+ }
331
+ else if (version.startsWith('3.5.')) {
332
+ // v3.5.x: Has pruned files, no help system
333
+ db.exec(`
334
+ CREATE TABLE m_agents (
335
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
336
+ name TEXT NOT NULL UNIQUE,
337
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
338
+ );
339
+
340
+ CREATE TABLE m_task_statuses (
341
+ id INTEGER PRIMARY KEY,
342
+ name TEXT NOT NULL UNIQUE
343
+ );
344
+
345
+ INSERT INTO m_task_statuses (id, name) VALUES
346
+ (1, 'pending'),
347
+ (2, 'in_progress'),
348
+ (3, 'completed'),
349
+ (4, 'archived');
350
+
351
+ CREATE TABLE t_tasks (
352
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
353
+ title TEXT NOT NULL,
354
+ status_id INTEGER NOT NULL,
355
+ created_by_agent_id INTEGER NOT NULL,
356
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
357
+ FOREIGN KEY (status_id) REFERENCES m_task_statuses(id),
358
+ FOREIGN KEY (created_by_agent_id) REFERENCES m_agents(id)
359
+ );
360
+
361
+ CREATE TABLE t_task_pruned_files (
362
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
363
+ task_id INTEGER NOT NULL,
364
+ file_path TEXT NOT NULL,
365
+ FOREIGN KEY (task_id) REFERENCES t_tasks(id)
366
+ );
367
+ `);
368
+ log(` ✓ Created v${version} schema (with pruned files)`, GREEN);
369
+ }
370
+ else if (version === '3.6.0') {
371
+ // v3.6.0: Has help system
372
+ db.exec(`
373
+ CREATE TABLE m_agents (
374
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
375
+ name TEXT NOT NULL UNIQUE,
376
+ created_ts INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
377
+ );
378
+
379
+ CREATE TABLE m_help_tools (
380
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
381
+ tool_name TEXT NOT NULL UNIQUE,
382
+ short_description TEXT
383
+ );
384
+ `);
385
+ log(` ✓ Created v${version} schema (with help system)`, GREEN);
386
+ }
387
+ return { db, dbPath };
388
+ }
389
+ catch (error) {
390
+ log(` ❌ Failed to create database for v${version}: ${error}`, RED);
391
+ db.close();
392
+ return null;
393
+ }
394
+ }
395
+ /**
396
+ * Test migration from a specific version to current
397
+ */
398
+ async function testMigrationFromVersion(version) {
399
+ log(`\n${'='.repeat(70)}`, BLUE);
400
+ log(`Testing migration: v${version} → v${CURRENT_VERSION}`, BLUE);
401
+ log(`${'='.repeat(70)}`, BLUE);
402
+ const result = createDatabaseForVersion(version);
403
+ if (!result) {
404
+ return {
405
+ version,
406
+ success: false,
407
+ initialVersion: 'unknown',
408
+ finalVersion: 'unknown',
409
+ error: 'Failed to create database'
410
+ };
411
+ }
412
+ const { db, dbPath } = result;
413
+ try {
414
+ // Detect initial version by checking table structure
415
+ const initialVersion = detectInitialVersion(db);
416
+ log(`\n 📊 Detected version: ${initialVersion}`, CYAN);
417
+ // Run Knex migrations
418
+ log(`\n 🔄 Running Knex migrations...`, CYAN);
419
+ // Create Knex instance with the test database path
420
+ const knex = Knex({
421
+ ...knexConfig.test,
422
+ connection: {
423
+ filename: dbPath
424
+ }
425
+ });
426
+ const [batch, migrations] = await knex.migrate.latest();
427
+ log(` ✓ Batch: ${batch}, Migrations run: ${migrations.length}`, GREEN);
428
+ // Detect final version
429
+ const finalVersion = CURRENT_VERSION;
430
+ log(`\n ✅ Final version: ${finalVersion}`, GREEN);
431
+ // Cleanup
432
+ await knex.destroy();
433
+ return {
434
+ version,
435
+ success: true,
436
+ initialVersion,
437
+ finalVersion,
438
+ migrationResults: migrations.map((m) => ({ name: m, success: true }))
439
+ };
440
+ }
441
+ catch (error) {
442
+ const message = error instanceof Error ? error.message : String(error);
443
+ log(`\n ❌ Error: ${message}`, RED);
444
+ return {
445
+ version,
446
+ success: false,
447
+ initialVersion: 'error',
448
+ finalVersion: 'error',
449
+ error: message
450
+ };
451
+ }
452
+ finally {
453
+ db.close();
454
+ }
455
+ }
456
+ /**
457
+ * Run all migration tests
458
+ */
459
+ async function runAllTests() {
460
+ log('\n' + '='.repeat(70), BLUE);
461
+ log('🧪 COMPREHENSIVE MIGRATION TEST SUITE', BLUE);
462
+ log(`Testing ${RELEASED_VERSIONS.length} versions → v${CURRENT_VERSION}`, BLUE);
463
+ log('='.repeat(70) + '\n', BLUE);
464
+ const results = [];
465
+ for (const version of RELEASED_VERSIONS) {
466
+ const result = await testMigrationFromVersion(version);
467
+ results.push(result);
468
+ // Brief pause between tests
469
+ await new Promise(resolve => setTimeout(resolve, 100));
470
+ }
471
+ // Generate report
472
+ log('\n\n' + '='.repeat(70), BLUE);
473
+ log('📊 TEST RESULTS SUMMARY', BLUE);
474
+ log('='.repeat(70) + '\n', BLUE);
475
+ const successful = results.filter(r => r.success);
476
+ const failed = results.filter(r => !r.success);
477
+ log(`Total tests: ${results.length}`, CYAN);
478
+ log(`✅ Successful: ${successful.length}`, GREEN);
479
+ log(`❌ Failed: ${failed.length}`, failed.length > 0 ? RED : GREEN);
480
+ if (failed.length > 0) {
481
+ log('\n❌ Failed migrations:', RED);
482
+ failed.forEach(r => {
483
+ log(` - v${r.version}: ${r.error}`, RED);
484
+ });
485
+ }
486
+ log('\n✅ Successful migrations:', GREEN);
487
+ successful.forEach(r => {
488
+ log(` - v${r.version}: ${r.initialVersion} → ${r.finalVersion}`, GREEN);
489
+ });
490
+ // Save detailed results to file
491
+ const reportPath = join(process.cwd(), '.sqlew', 'tmp', 'migration-test-report.json');
492
+ try {
493
+ const reportDir = join(process.cwd(), '.sqlew', 'tmp');
494
+ if (!existsSync(reportDir)) {
495
+ mkdirSync(reportDir, { recursive: true });
496
+ }
497
+ writeFileSync(reportPath, JSON.stringify(results, null, 2));
498
+ log(`\n📄 Detailed report saved to: ${reportPath}`, CYAN);
499
+ }
500
+ catch (error) {
501
+ log(`\n⚠️ Could not save report: ${error}`, YELLOW);
502
+ }
503
+ log('\n' + '='.repeat(70) + '\n', BLUE);
504
+ return failed.length === 0;
505
+ }
506
+ // Run tests
507
+ runAllTests().then(success => {
508
+ if (success) {
509
+ log('🎉 ALL MIGRATION TESTS PASSED!', GREEN);
510
+ process.exit(0);
511
+ }
512
+ else {
513
+ log('❌ SOME MIGRATION TESTS FAILED!', RED);
514
+ process.exit(1);
515
+ }
516
+ }).catch(error => {
517
+ log(`\n❌ Fatal error: ${error}`, RED);
518
+ console.error(error);
519
+ process.exit(1);
520
+ });
521
+ //# sourceMappingURL=test-all-versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-all-versions.js","sourceRoot":"","sources":["../../../src/tests/migrations/test-all-versions.ts"],"names":[],"mappings":"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"}