sqlew 3.6.1 → 3.6.3

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 (196) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/assets/config.example.toml +28 -0
  3. package/dist/knexfile.d.ts.map +1 -1
  4. package/dist/knexfile.js +15 -3
  5. package/dist/knexfile.js.map +1 -1
  6. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  7. package/dist/migrations/knex/{20251025020452_create_master_tables.js → bootstrap/20251025020452_create_master_tables.js} +15 -12
  8. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  9. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  10. package/dist/migrations/knex/{20251025021152_create_transaction_tables.js → bootstrap/20251025021152_create_transaction_tables.js} +19 -19
  11. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  12. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  13. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js +93 -0
  14. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  15. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  16. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js +64 -0
  17. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  18. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  19. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  20. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  21. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  22. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  23. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  24. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  25. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  26. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  27. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  28. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  29. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  30. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  31. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  32. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  33. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  34. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  35. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  36. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  37. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  38. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  39. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  40. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +13 -0
  41. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  42. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +70 -0
  43. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  44. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +11 -0
  45. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  46. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +36 -0
  47. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  48. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +14 -0
  49. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  50. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +84 -0
  51. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  52. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +9 -0
  53. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  54. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +37 -0
  55. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  56. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +9 -0
  57. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  58. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +41 -0
  59. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  60. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +9 -0
  61. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  62. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +36 -0
  63. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  64. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +10 -0
  65. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  66. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +28 -0
  67. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  68. package/dist/tests/migrations/test-all-versions-real.d.ts +8 -0
  69. package/dist/tests/migrations/test-all-versions-real.d.ts.map +1 -0
  70. package/dist/tests/migrations/test-all-versions-real.js +234 -0
  71. package/dist/tests/migrations/test-all-versions-real.js.map +1 -0
  72. package/dist/tests/migrations/test-all-versions.d.ts +14 -0
  73. package/dist/tests/migrations/test-all-versions.d.ts.map +1 -0
  74. package/dist/tests/migrations/test-all-versions.js +521 -0
  75. package/dist/tests/migrations/test-all-versions.js.map +1 -0
  76. package/dist/tools/tasks.js +2 -2
  77. package/dist/tools/tasks.js.map +1 -1
  78. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  79. package/dist/utils/task-stale-detection.js +79 -4
  80. package/dist/utils/task-stale-detection.js.map +1 -1
  81. package/docs/MIGRATION_CHAIN.md +13 -0
  82. package/package.json +4 -1
  83. package/dist/migrations/add-decision-context.d.ts +0 -28
  84. package/dist/migrations/add-decision-context.d.ts.map +0 -1
  85. package/dist/migrations/add-decision-context.js +0 -125
  86. package/dist/migrations/add-decision-context.js.map +0 -1
  87. package/dist/migrations/add-help-system-tables.d.ts +0 -35
  88. package/dist/migrations/add-help-system-tables.d.ts.map +0 -1
  89. package/dist/migrations/add-help-system-tables.js +0 -206
  90. package/dist/migrations/add-help-system-tables.js.map +0 -1
  91. package/dist/migrations/add-table-prefixes.d.ts +0 -29
  92. package/dist/migrations/add-table-prefixes.d.ts.map +0 -1
  93. package/dist/migrations/add-table-prefixes.js +0 -150
  94. package/dist/migrations/add-table-prefixes.js.map +0 -1
  95. package/dist/migrations/add-task-dependencies.d.ts +0 -26
  96. package/dist/migrations/add-task-dependencies.d.ts.map +0 -1
  97. package/dist/migrations/add-task-dependencies.js +0 -94
  98. package/dist/migrations/add-task-dependencies.js.map +0 -1
  99. package/dist/migrations/add-task-tables.d.ts +0 -47
  100. package/dist/migrations/add-task-tables.d.ts.map +0 -1
  101. package/dist/migrations/add-task-tables.js +0 -285
  102. package/dist/migrations/add-task-tables.js.map +0 -1
  103. package/dist/migrations/add-token-tracking.d.ts +0 -28
  104. package/dist/migrations/add-token-tracking.d.ts.map +0 -1
  105. package/dist/migrations/add-token-tracking.js +0 -108
  106. package/dist/migrations/add-token-tracking.js.map +0 -1
  107. package/dist/migrations/add-v2.1.0-features.d.ts +0 -29
  108. package/dist/migrations/add-v2.1.0-features.d.ts.map +0 -1
  109. package/dist/migrations/add-v2.1.0-features.js +0 -198
  110. package/dist/migrations/add-v2.1.0-features.js.map +0 -1
  111. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +0 -26
  112. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +0 -1
  113. package/dist/migrations/add-v3.5.0-pruned-files.js +0 -107
  114. package/dist/migrations/add-v3.5.0-pruned-files.js.map +0 -1
  115. package/dist/migrations/index.d.ts +0 -112
  116. package/dist/migrations/index.d.ts.map +0 -1
  117. package/dist/migrations/index.js +0 -411
  118. package/dist/migrations/index.js.map +0 -1
  119. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +0 -1
  120. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +0 -1
  121. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +0 -1
  122. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +0 -1
  123. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +0 -1
  124. package/dist/migrations/knex/20251025021351_create_indexes.js +0 -62
  125. package/dist/migrations/knex/20251025021351_create_indexes.js.map +0 -1
  126. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +0 -1
  127. package/dist/migrations/knex/20251025021416_seed_master_data.js +0 -58
  128. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +0 -1
  129. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +0 -1
  130. package/dist/migrations/knex/20251025070349_create_views.js.map +0 -1
  131. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  132. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  133. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  134. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  135. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +0 -1
  136. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +0 -1
  137. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  138. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  139. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +0 -1
  140. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +0 -1
  141. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  142. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +0 -1
  143. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  144. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  145. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  146. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +0 -1
  147. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  148. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  149. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +0 -1
  150. package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +0 -1
  151. package/dist/migrations/migrate-decisions-to-tasks.d.ts +0 -61
  152. package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +0 -1
  153. package/dist/migrations/migrate-decisions-to-tasks.js +0 -442
  154. package/dist/migrations/migrate-decisions-to-tasks.js.map +0 -1
  155. package/dist/migrations/seed-help-data.d.ts +0 -48
  156. package/dist/migrations/seed-help-data.d.ts.map +0 -1
  157. package/dist/migrations/seed-help-data.js +0 -1466
  158. package/dist/migrations/seed-help-data.js.map +0 -1
  159. package/dist/migrations/seed-tool-metadata.d.ts +0 -24
  160. package/dist/migrations/seed-tool-metadata.d.ts.map +0 -1
  161. package/dist/migrations/seed-tool-metadata.js +0 -392
  162. package/dist/migrations/seed-tool-metadata.js.map +0 -1
  163. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +0 -46
  164. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +0 -1
  165. package/dist/migrations/v3.6.0-help-system-refactor.js +0 -223
  166. package/dist/migrations/v3.6.0-help-system-refactor.js.map +0 -1
  167. package/dist/tests/migrations/test-v3.2-migration.d.ts +0 -6
  168. package/dist/tests/migrations/test-v3.2-migration.d.ts.map +0 -1
  169. package/dist/tests/migrations/test-v3.2-migration.js +0 -191
  170. package/dist/tests/migrations/test-v3.2-migration.js.map +0 -1
  171. /package/dist/migrations/knex/{20251025020452_create_master_tables.d.ts → bootstrap/20251025020452_create_master_tables.d.ts} +0 -0
  172. /package/dist/migrations/knex/{20251025021152_create_transaction_tables.d.ts → bootstrap/20251025021152_create_transaction_tables.d.ts} +0 -0
  173. /package/dist/migrations/knex/{20251025021351_create_indexes.d.ts → bootstrap/20251025021351_create_indexes.d.ts} +0 -0
  174. /package/dist/migrations/knex/{20251025021416_seed_master_data.d.ts → bootstrap/20251025021416_seed_master_data.d.ts} +0 -0
  175. /package/dist/migrations/knex/{20251025070349_create_views.d.ts → bootstrap/20251025070349_create_views.d.ts} +0 -0
  176. /package/dist/migrations/knex/{20251025070349_create_views.js → bootstrap/20251025070349_create_views.js} +0 -0
  177. /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
  178. /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
  179. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.d.ts → enhancements/20251025082220_fix_task_dependencies_columns.d.ts} +0 -0
  180. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.js → enhancements/20251025082220_fix_task_dependencies_columns.js} +0 -0
  181. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.d.ts → enhancements/20251025090000_create_help_system_tables.d.ts} +0 -0
  182. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.js → enhancements/20251025090000_create_help_system_tables.js} +0 -0
  183. /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
  184. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.js → enhancements/20251025090100_seed_help_categories_and_use_cases.js} +0 -0
  185. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.d.ts → enhancements/20251025100000_seed_help_metadata.d.ts} +0 -0
  186. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.js → enhancements/20251025100000_seed_help_metadata.js} +0 -0
  187. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.d.ts → enhancements/20251025100100_seed_remaining_use_cases.d.ts} +0 -0
  188. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.js → enhancements/20251025100100_seed_remaining_use_cases.js} +0 -0
  189. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.d.ts → enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts} +0 -0
  190. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.js → enhancements/20251025120000_add_cascade_to_task_dependencies.js} +0 -0
  191. /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.d.ts → enhancements/20251027000000_add_agent_reuse_system.d.ts} +0 -0
  192. /package/dist/migrations/knex/{20251027000000_add_agent_reuse_system.js → enhancements/20251027000000_add_agent_reuse_system.js} +0 -0
  193. /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
  194. /package/dist/migrations/knex/{20251027010000_add_task_constraint_to_decision_context.js → enhancements/20251027010000_add_task_constraint_to_decision_context.js} +0 -0
  195. /package/dist/migrations/knex/{20251027020000_update_agent_reusability.d.ts → enhancements/20251027020000_update_agent_reusability.d.ts} +0 -0
  196. /package/dist/migrations/knex/{20251027020000_update_agent_reusability.js → enhancements/20251027020000_update_agent_reusability.js} +0 -0
@@ -1,26 +0,0 @@
1
- /**
2
- * Migration: Add pruned files tracking (v3.4.x -> v3.5.0)
3
- *
4
- * Adds t_task_pruned_files table for audit trail of auto-pruned non-existent files.
5
- * This enables project archaeology when files were planned but never created.
6
- */
7
- import { Database } from 'better-sqlite3';
8
- interface MigrationResult {
9
- success: boolean;
10
- message: string;
11
- details?: string[];
12
- }
13
- /**
14
- * Check if migration is needed
15
- */
16
- export declare function needsPrunedFilesMigration(db: Database): boolean;
17
- /**
18
- * Run the migration to add pruned files tracking
19
- */
20
- export declare function migrateToPrunedFiles(db: Database): MigrationResult;
21
- /**
22
- * Get migration info
23
- */
24
- export declare function getPrunedFilesMigrationInfo(): string;
25
- export {};
26
- //# sourceMappingURL=add-v3.5.0-pruned-files.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-v3.5.0-pruned-files.d.ts","sourceRoot":"","sources":["../../src/migrations/add-v3.5.0-pruned-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAO/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,eAAe,CAuElE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAuBpD"}
@@ -1,107 +0,0 @@
1
- /**
2
- * Migration: Add pruned files tracking (v3.4.x -> v3.5.0)
3
- *
4
- * Adds t_task_pruned_files table for audit trail of auto-pruned non-existent files.
5
- * This enables project archaeology when files were planned but never created.
6
- */
7
- /**
8
- * Check if migration is needed
9
- */
10
- export function needsPrunedFilesMigration(db) {
11
- // Check if t_task_pruned_files table doesn't exist yet
12
- const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_pruned_files'").get();
13
- return tableExists === undefined;
14
- }
15
- /**
16
- * Run the migration to add pruned files tracking
17
- */
18
- export function migrateToPrunedFiles(db) {
19
- const details = [];
20
- try {
21
- // Start transaction for atomicity
22
- db.exec('BEGIN TRANSACTION');
23
- // Check if table already exists
24
- const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_pruned_files'").get();
25
- if (tableExists) {
26
- db.exec('COMMIT');
27
- return {
28
- success: true,
29
- message: 't_task_pruned_files table already exists, migration skipped',
30
- details: ['Table already exists - no migration needed']
31
- };
32
- }
33
- // Create t_task_pruned_files table
34
- db.exec(`
35
- CREATE TABLE IF NOT EXISTS t_task_pruned_files (
36
- id INTEGER PRIMARY KEY AUTOINCREMENT,
37
- task_id INTEGER NOT NULL REFERENCES t_tasks(id) ON DELETE CASCADE,
38
- file_path TEXT NOT NULL,
39
- pruned_ts INTEGER DEFAULT (unixepoch()),
40
- linked_decision_key_id INTEGER REFERENCES m_context_keys(id) ON DELETE SET NULL
41
- );
42
- `);
43
- details.push('Created table: t_task_pruned_files');
44
- // Create index for task lookup
45
- db.exec(`
46
- CREATE INDEX IF NOT EXISTS idx_pruned_task
47
- ON t_task_pruned_files(task_id);
48
- `);
49
- details.push('Created index: idx_pruned_task');
50
- // Create index for decision linking
51
- db.exec(`
52
- CREATE INDEX IF NOT EXISTS idx_pruned_decision
53
- ON t_task_pruned_files(linked_decision_key_id);
54
- `);
55
- details.push('Created index: idx_pruned_decision');
56
- // Commit transaction
57
- db.exec('COMMIT');
58
- return {
59
- success: true,
60
- message: 'Migration to v3.5.0 completed successfully',
61
- details
62
- };
63
- }
64
- catch (error) {
65
- // Rollback on error
66
- try {
67
- db.exec('ROLLBACK');
68
- }
69
- catch (rollbackError) {
70
- // Ignore rollback errors
71
- }
72
- const message = error instanceof Error ? error.message : String(error);
73
- return {
74
- success: false,
75
- message: `Migration failed: ${message}`,
76
- details
77
- };
78
- }
79
- }
80
- /**
81
- * Get migration info
82
- */
83
- export function getPrunedFilesMigrationInfo() {
84
- return `
85
- Migration: Add Pruned Files Tracking (v3.4.x -> v3.5.0)
86
-
87
- This migration adds audit trail for auto-pruned non-existent watched files:
88
- - New table: t_task_pruned_files
89
- - Tracks files removed when transitioning to 'waiting_review'
90
- - Optional decision linking for WHY reasoning
91
- - Enables project archaeology
92
-
93
- Schema:
94
- - id: Auto-incrementing primary key
95
- - task_id: Task that watched this file (CASCADE on delete)
96
- - file_path: Raw file path string (not normalized to m_files)
97
- - pruned_ts: Unix timestamp when file was pruned
98
- - linked_decision_key_id: Optional decision key explaining why file was never created
99
-
100
- Indexes:
101
- - idx_pruned_task: Fast lookup of pruned files for a task
102
- - idx_pruned_decision: Fast lookup of pruned files linked to decisions
103
-
104
- This migration is idempotent and safe to run multiple times.
105
- `.trim();
106
- }
107
- //# sourceMappingURL=add-v3.5.0-pruned-files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-v3.5.0-pruned-files.js","sourceRoot":"","sources":["../../src/migrations/add-v3.5.0-pruned-files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,EAAY;IACpD,uDAAuD;IACvD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,kFAAkF,CACnF,CAAC,GAAG,EAAE,CAAC;IAER,OAAO,WAAW,KAAK,SAAS,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAY;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,kCAAkC;QAClC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE7B,gCAAgC;QAChC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAC5B,kFAAkF,CACnF,CAAC,GAAG,EAAE,CAAC;QAER,IAAI,WAAW,EAAE,CAAC;YAChB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,6DAA6D;gBACtE,OAAO,EAAE,CAAC,4CAA4C,CAAC;aACxD,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,EAAE,CAAC,IAAI,CAAC;;;;;;;;KAQP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEnD,+BAA+B;QAC/B,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE/C,oCAAoC;QACpC,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAEnD,qBAAqB;QACrB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4CAA4C;YACrD,OAAO;SACR,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oBAAoB;QACpB,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,yBAAyB;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,qBAAqB,OAAO,EAAE;YACvC,OAAO;SACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;GAqBN,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
@@ -1,112 +0,0 @@
1
- /**
2
- * Migration Orchestrator (v4.0.0 - Hybrid Support)
3
- *
4
- * Coordinates automatic sequential execution of all database migrations.
5
- * Supports upgrading from any previous version to the latest version in a single run.
6
- *
7
- * Features:
8
- * - Automatic version detection
9
- * - Migration chain construction
10
- * - Sequential execution with transaction safety
11
- * - Detailed logging and error reporting
12
- * - Dry-run mode support
13
- * - Hybrid support: better-sqlite3 (Database) OR Knex.js (DatabaseAdapter)
14
- *
15
- * Migration Strategy (v4.0.0+):
16
- * - Knex migrations: Run automatically via initializeDatabase() → knex.migrate.latest()
17
- * - Custom migrations: Legacy orchestrator for v1.x-v3.x upgrades (this file)
18
- * - New deployments: Use Knex migrations only (src/migrations/knex/*)
19
- * - Old upgrades: Use custom migrations first, then Knex migrations
20
- */
21
- import { Database } from 'better-sqlite3';
22
- import { DatabaseAdapter } from '../adapters/index.js';
23
- export interface MigrationResult {
24
- success: boolean;
25
- message: string;
26
- details?: string[];
27
- }
28
- export interface MigrationInfo {
29
- name: string;
30
- fromVersion: string;
31
- toVersion: string;
32
- needsMigration: (db: Database) => boolean;
33
- runMigration: (db: Database) => MigrationResult;
34
- getMigrationInfo: () => string;
35
- }
36
- /**
37
- * Detect current database version by inspecting schema
38
- *
39
- * Version Detection Logic:
40
- * - v1.0.0: Has unprefixed tables (agents, not m_agents)
41
- * - v1.1.0: Has prefixed tables but no t_activity_log
42
- * - v2.0.0: Has t_activity_log but no m_task_statuses
43
- * - v2.1.0: Has t_activity_log but no m_task_statuses
44
- * - v3.0.0: Has m_task_statuses but no t_task_dependencies
45
- * - v3.2.0: Has t_task_dependencies but no t_decision_context
46
- * - v3.2.2: Has t_decision_context but no t_task_pruned_files
47
- * - v3.5.0: Has t_task_pruned_files but no m_help_tools
48
- * - v3.6.0: Has m_help_tools (help system tables)
49
- * - v4.0.0: Has knex_migrations table (Knex migration system)
50
- *
51
- * @param dbOrAdapter - Database connection or DatabaseAdapter
52
- * @returns Detected version string
53
- */
54
- export declare function detectDatabaseVersion(dbOrAdapter: Database | DatabaseAdapter): string;
55
- /**
56
- * Get migration plan for current database
57
- *
58
- * @param dbOrAdapter - Database connection or DatabaseAdapter
59
- * @returns Array of migration names that need to run
60
- */
61
- export declare function getMigrationPlan(dbOrAdapter: Database | DatabaseAdapter): string[];
62
- /**
63
- * Run all pending migrations in sequence
64
- *
65
- * This function:
66
- * 1. Detects current database version
67
- * 2. Identifies which migrations are needed
68
- * 3. Executes migrations in correct order
69
- * 4. Stops on first failure (rollback already handled by individual migrations)
70
- * 5. Returns combined results
71
- *
72
- * NOTE (v4.0.0+): This function runs custom migrations (v1.x-v3.x upgrades only).
73
- * Knex migrations run automatically via initializeDatabase() → knex.migrate.latest().
74
- *
75
- * @param dbOrAdapter - Database connection or DatabaseAdapter
76
- * @param dryRun - If true, only show plan without executing (default: false)
77
- * @returns Array of migration results
78
- */
79
- export declare function runAllMigrations(dbOrAdapter: Database | DatabaseAdapter, dryRun?: boolean): MigrationResult[];
80
- /**
81
- * Get detailed info about a specific migration
82
- *
83
- * @param migrationName - Name of the migration
84
- * @returns Migration info text or null if not found
85
- */
86
- export declare function getMigrationDetails(migrationName: string): string | null;
87
- /**
88
- * Get list of all available migrations
89
- *
90
- * @returns Array of migration info objects
91
- */
92
- export declare function listAllMigrations(): Omit<MigrationInfo, 'needsMigration' | 'runMigration' | 'getMigrationInfo'>[];
93
- /**
94
- * Check if database needs any migrations
95
- *
96
- * @param dbOrAdapter - Database connection or DatabaseAdapter
97
- * @returns true if migrations are needed
98
- */
99
- export declare function needsAnyMigrations(dbOrAdapter: Database | DatabaseAdapter): boolean;
100
- /**
101
- * Get summary of migration status
102
- *
103
- * @param dbOrAdapter - Database connection or DatabaseAdapter
104
- * @returns Summary object
105
- */
106
- export declare function getMigrationStatus(dbOrAdapter: Database | DatabaseAdapter): {
107
- currentVersion: string;
108
- upToDate: boolean;
109
- pendingMigrations: number;
110
- migrationPlan: string[];
111
- };
112
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAavD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC1C,YAAY,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,eAAe,CAAC;IAChD,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AA4JD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,MAAM,CAiFrF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,MAAM,EAAE,CAWlF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,EAAE,MAAM,GAAE,OAAe,GAAG,eAAe,EAAE,CAyFpH;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,cAAc,GAAG,kBAAkB,CAAC,EAAE,CAMjH;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,OAAO,CAGnF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAUA"}
@@ -1,411 +0,0 @@
1
- /**
2
- * Migration Orchestrator (v4.0.0 - Hybrid Support)
3
- *
4
- * Coordinates automatic sequential execution of all database migrations.
5
- * Supports upgrading from any previous version to the latest version in a single run.
6
- *
7
- * Features:
8
- * - Automatic version detection
9
- * - Migration chain construction
10
- * - Sequential execution with transaction safety
11
- * - Detailed logging and error reporting
12
- * - Dry-run mode support
13
- * - Hybrid support: better-sqlite3 (Database) OR Knex.js (DatabaseAdapter)
14
- *
15
- * Migration Strategy (v4.0.0+):
16
- * - Knex migrations: Run automatically via initializeDatabase() → knex.migrate.latest()
17
- * - Custom migrations: Legacy orchestrator for v1.x-v3.x upgrades (this file)
18
- * - New deployments: Use Knex migrations only (src/migrations/knex/*)
19
- * - Old upgrades: Use custom migrations first, then Knex migrations
20
- */
21
- import * as tablePrefixes from './add-table-prefixes.js';
22
- import * as v210Features from './add-v2.1.0-features.js';
23
- import * as taskTables from './add-task-tables.js';
24
- import * as taskDependencies from './add-task-dependencies.js';
25
- import * as decisionContext from './add-decision-context.js';
26
- import * as prunedFiles from './add-v3.5.0-pruned-files.js';
27
- import * as helpSystemTables from './add-help-system-tables.js';
28
- import * as seedToolMetadata from './seed-tool-metadata.js';
29
- import * as seedHelpData from './seed-help-data.js';
30
- import * as tokenTracking from './add-token-tracking.js';
31
- /**
32
- * Type guard to check if input is DatabaseAdapter
33
- */
34
- function isDatabaseAdapter(dbOrAdapter) {
35
- return typeof dbOrAdapter.getKnex === 'function';
36
- }
37
- /**
38
- * Get Database instance from either Database or DatabaseAdapter
39
- * For Knex adapters, we need to access the underlying better-sqlite3 connection
40
- *
41
- * NOTE: This is a temporary bridge for backward compatibility with custom migrations.
42
- * New code should use Knex query builder via adapter.getKnex() instead.
43
- */
44
- function getDatabase(dbOrAdapter) {
45
- if (isDatabaseAdapter(dbOrAdapter)) {
46
- // For SQLiteAdapter, access the underlying better-sqlite3 connection
47
- // This assumes SQLiteAdapter stores it in a private property
48
- const knex = dbOrAdapter.getKnex();
49
- const client = knex.client;
50
- if (client && client.driver && client.driver.name) {
51
- // Access the better-sqlite3 connection from Knex client
52
- const connections = client._connectionCache || {};
53
- const connectionKey = Object.keys(connections)[0];
54
- if (connectionKey && connections[connectionKey]) {
55
- return connections[connectionKey];
56
- }
57
- }
58
- // Fallback: throw error if we can't extract Database
59
- throw new Error('Cannot extract Database from DatabaseAdapter for custom migrations. Please use Knex migrations instead.');
60
- }
61
- return dbOrAdapter;
62
- }
63
- /**
64
- * Registry of all available migrations in execution order
65
- */
66
- const MIGRATIONS = [
67
- {
68
- name: 'add-table-prefixes',
69
- fromVersion: '1.0.x',
70
- toVersion: '1.1.0',
71
- needsMigration: tablePrefixes.needsMigration,
72
- runMigration: tablePrefixes.runMigration,
73
- getMigrationInfo: tablePrefixes.getMigrationInfo,
74
- },
75
- {
76
- name: 'add-v2.1.0-features',
77
- fromVersion: '2.0.0',
78
- toVersion: '2.1.0',
79
- needsMigration: v210Features.needsMigration,
80
- runMigration: v210Features.runMigration,
81
- getMigrationInfo: v210Features.getMigrationInfo,
82
- },
83
- {
84
- name: 'add-task-tables',
85
- fromVersion: '2.1.x',
86
- toVersion: '3.0.0',
87
- needsMigration: taskTables.needsMigration,
88
- runMigration: taskTables.runMigration,
89
- getMigrationInfo: taskTables.getMigrationInfo,
90
- },
91
- {
92
- name: 'add-task-dependencies',
93
- fromVersion: '3.1.x',
94
- toVersion: '3.2.0',
95
- needsMigration: taskDependencies.needsTaskDependenciesMigration,
96
- runMigration: taskDependencies.migrateToTaskDependencies,
97
- getMigrationInfo: taskDependencies.getTaskDependenciesMigrationInfo,
98
- },
99
- {
100
- name: 'add-decision-context',
101
- fromVersion: '3.2.0',
102
- toVersion: '3.2.2',
103
- needsMigration: decisionContext.needsDecisionContextMigration,
104
- runMigration: decisionContext.migrateToDecisionContext,
105
- getMigrationInfo: decisionContext.getDecisionContextMigrationInfo,
106
- },
107
- {
108
- name: 'add-v3.5.0-pruned-files',
109
- fromVersion: '3.4.x',
110
- toVersion: '3.5.0',
111
- needsMigration: prunedFiles.needsPrunedFilesMigration,
112
- runMigration: prunedFiles.migrateToPrunedFiles,
113
- getMigrationInfo: prunedFiles.getPrunedFilesMigrationInfo,
114
- },
115
- {
116
- name: 'add-help-system-tables',
117
- fromVersion: '3.5.3',
118
- toVersion: '3.6.0',
119
- needsMigration: helpSystemTables.needsHelpSystemMigration,
120
- runMigration: helpSystemTables.migrateToHelpSystem,
121
- getMigrationInfo: helpSystemTables.getHelpSystemMigrationInfo,
122
- },
123
- {
124
- name: 'seed-tool-metadata',
125
- fromVersion: '3.6.0',
126
- toVersion: '3.6.0',
127
- needsMigration: seedToolMetadata.needsToolMetadataSeeding,
128
- runMigration: (db) => {
129
- try {
130
- seedToolMetadata.seedToolMetadata(db);
131
- return {
132
- success: true,
133
- message: 'Tool metadata seeded successfully',
134
- details: [seedToolMetadata.getToolMetadataSeedingInfo()]
135
- };
136
- }
137
- catch (error) {
138
- const message = error instanceof Error ? error.message : String(error);
139
- return {
140
- success: false,
141
- message: `Failed to seed tool metadata: ${message}`
142
- };
143
- }
144
- },
145
- getMigrationInfo: seedToolMetadata.getToolMetadataSeedingInfo,
146
- },
147
- {
148
- name: 'seed-help-data',
149
- fromVersion: '3.6.0',
150
- toVersion: '3.6.0',
151
- needsMigration: seedHelpData.needsHelpDataSeeding,
152
- runMigration: (db) => {
153
- try {
154
- seedHelpData.seedHelpData(db);
155
- return {
156
- success: true,
157
- message: 'Help system use-case data seeded successfully',
158
- details: [seedHelpData.getHelpDataSeedingInfo()]
159
- };
160
- }
161
- catch (error) {
162
- const message = error instanceof Error ? error.message : String(error);
163
- return {
164
- success: false,
165
- message: `Failed to seed help data: ${message}`
166
- };
167
- }
168
- },
169
- getMigrationInfo: seedHelpData.getHelpDataSeedingInfo,
170
- },
171
- {
172
- name: 'add-token-tracking',
173
- fromVersion: '3.6.0',
174
- toVersion: '3.6.0',
175
- needsMigration: tokenTracking.needsTokenTrackingMigration,
176
- runMigration: tokenTracking.migrateToTokenTracking,
177
- getMigrationInfo: tokenTracking.getTokenTrackingMigrationInfo,
178
- },
179
- ];
180
- /**
181
- * Detect current database version by inspecting schema
182
- *
183
- * Version Detection Logic:
184
- * - v1.0.0: Has unprefixed tables (agents, not m_agents)
185
- * - v1.1.0: Has prefixed tables but no t_activity_log
186
- * - v2.0.0: Has t_activity_log but no m_task_statuses
187
- * - v2.1.0: Has t_activity_log but no m_task_statuses
188
- * - v3.0.0: Has m_task_statuses but no t_task_dependencies
189
- * - v3.2.0: Has t_task_dependencies but no t_decision_context
190
- * - v3.2.2: Has t_decision_context but no t_task_pruned_files
191
- * - v3.5.0: Has t_task_pruned_files but no m_help_tools
192
- * - v3.6.0: Has m_help_tools (help system tables)
193
- * - v4.0.0: Has knex_migrations table (Knex migration system)
194
- *
195
- * @param dbOrAdapter - Database connection or DatabaseAdapter
196
- * @returns Detected version string
197
- */
198
- export function detectDatabaseVersion(dbOrAdapter) {
199
- try {
200
- const db = getDatabase(dbOrAdapter);
201
- // Check for help system tables (v3.6.0)
202
- const hasHelpTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_help_tools'").get();
203
- if (hasHelpTables) {
204
- return '3.6.0';
205
- }
206
- // Check for pruned files table (v3.5.0)
207
- const hasPrunedFiles = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_pruned_files'").get();
208
- if (hasPrunedFiles) {
209
- return '3.5.0';
210
- }
211
- // Check for decision context table (v3.2.2)
212
- const hasDecisionContext = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_decision_context'").get();
213
- if (hasDecisionContext) {
214
- return '3.2.2';
215
- }
216
- // Check for task dependencies table (v3.2.0)
217
- const hasTaskDependencies = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'").get();
218
- if (hasTaskDependencies) {
219
- return '3.2.0';
220
- }
221
- // Check for task tables (v3.0.0)
222
- const hasTaskTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_task_statuses'").get();
223
- if (hasTaskTables) {
224
- return '3.1.x';
225
- }
226
- // Check for v2.1.0 features (activity log)
227
- const hasActivityLog = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_activity_log'").get();
228
- if (hasActivityLog) {
229
- return '2.1.x';
230
- }
231
- // Check for prefixed tables (v1.1.0+)
232
- const hasPrefixedTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_agents'").get();
233
- if (hasPrefixedTables) {
234
- return '2.0.0'; // Could be 1.1.0 or 2.0.0, both have same schema
235
- }
236
- // Check for old unprefixed tables (v1.0.0)
237
- const hasOldTables = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='agents'").get();
238
- if (hasOldTables) {
239
- return '1.0.0';
240
- }
241
- // No tables found - fresh database
242
- return 'fresh';
243
- }
244
- catch (error) {
245
- const message = error instanceof Error ? error.message : String(error);
246
- throw new Error(`Failed to detect database version: ${message}`);
247
- }
248
- }
249
- /**
250
- * Get migration plan for current database
251
- *
252
- * @param dbOrAdapter - Database connection or DatabaseAdapter
253
- * @returns Array of migration names that need to run
254
- */
255
- export function getMigrationPlan(dbOrAdapter) {
256
- const db = getDatabase(dbOrAdapter);
257
- const plan = [];
258
- for (const migration of MIGRATIONS) {
259
- if (migration.needsMigration(db)) {
260
- plan.push(`${migration.name} (${migration.fromVersion} → ${migration.toVersion})`);
261
- }
262
- }
263
- return plan;
264
- }
265
- /**
266
- * Run all pending migrations in sequence
267
- *
268
- * This function:
269
- * 1. Detects current database version
270
- * 2. Identifies which migrations are needed
271
- * 3. Executes migrations in correct order
272
- * 4. Stops on first failure (rollback already handled by individual migrations)
273
- * 5. Returns combined results
274
- *
275
- * NOTE (v4.0.0+): This function runs custom migrations (v1.x-v3.x upgrades only).
276
- * Knex migrations run automatically via initializeDatabase() → knex.migrate.latest().
277
- *
278
- * @param dbOrAdapter - Database connection or DatabaseAdapter
279
- * @param dryRun - If true, only show plan without executing (default: false)
280
- * @returns Array of migration results
281
- */
282
- export function runAllMigrations(dbOrAdapter, dryRun = false) {
283
- const db = getDatabase(dbOrAdapter);
284
- const results = [];
285
- try {
286
- // Detect current version
287
- const currentVersion = detectDatabaseVersion(dbOrAdapter);
288
- console.log(`\n📊 Current database version: ${currentVersion}`);
289
- // Get migration plan
290
- const plan = getMigrationPlan(dbOrAdapter);
291
- if (plan.length === 0) {
292
- console.log('✅ Database is up to date, no custom migrations needed.\n');
293
- if (isDatabaseAdapter(dbOrAdapter)) {
294
- console.log('ℹ️ Knex migrations were run automatically via initializeDatabase().\n');
295
- }
296
- return [{
297
- success: true,
298
- message: 'No migrations needed',
299
- details: [`Current version: ${currentVersion}`]
300
- }];
301
- }
302
- console.log(`\n📋 Migration plan (${plan.length} custom migration${plan.length === 1 ? '' : 's'}):`);
303
- plan.forEach((step, i) => {
304
- console.log(` ${i + 1}. ${step}`);
305
- });
306
- if (dryRun) {
307
- console.log('\n🏃 Dry-run mode: No changes will be made.\n');
308
- return [{
309
- success: true,
310
- message: 'Dry-run completed',
311
- details: plan
312
- }];
313
- }
314
- console.log('');
315
- // Execute migrations in sequence
316
- for (const migration of MIGRATIONS) {
317
- if (!migration.needsMigration(db)) {
318
- continue;
319
- }
320
- console.log(`\n🔄 Running migration: ${migration.name}`);
321
- console.log(` ${migration.fromVersion} → ${migration.toVersion}`);
322
- const result = migration.runMigration(db);
323
- results.push(result);
324
- if (result.success) {
325
- console.log(`✅ ${result.message}`);
326
- if (result.details && result.details.length > 0) {
327
- result.details.forEach(detail => {
328
- console.log(` - ${detail}`);
329
- });
330
- }
331
- }
332
- else {
333
- console.error(`❌ ${result.message}`);
334
- if (result.details && result.details.length > 0) {
335
- result.details.forEach(detail => {
336
- console.error(` - ${detail}`);
337
- });
338
- }
339
- // Stop on first failure
340
- console.error('\n⚠️ Migration failed. Database rolled back to previous state.\n');
341
- break;
342
- }
343
- }
344
- // Detect final version
345
- const finalVersion = detectDatabaseVersion(dbOrAdapter);
346
- console.log(`\n✅ Custom migrations complete: ${currentVersion} → ${finalVersion}\n`);
347
- if (isDatabaseAdapter(dbOrAdapter)) {
348
- console.log('ℹ️ Knex migrations were run automatically via initializeDatabase().\n');
349
- }
350
- return results;
351
- }
352
- catch (error) {
353
- const message = error instanceof Error ? error.message : String(error);
354
- return [{
355
- success: false,
356
- message: `Migration orchestrator failed: ${message}`,
357
- }];
358
- }
359
- }
360
- /**
361
- * Get detailed info about a specific migration
362
- *
363
- * @param migrationName - Name of the migration
364
- * @returns Migration info text or null if not found
365
- */
366
- export function getMigrationDetails(migrationName) {
367
- const migration = MIGRATIONS.find(m => m.name === migrationName);
368
- if (!migration) {
369
- return null;
370
- }
371
- return migration.getMigrationInfo();
372
- }
373
- /**
374
- * Get list of all available migrations
375
- *
376
- * @returns Array of migration info objects
377
- */
378
- export function listAllMigrations() {
379
- return MIGRATIONS.map(m => ({
380
- name: m.name,
381
- fromVersion: m.fromVersion,
382
- toVersion: m.toVersion,
383
- }));
384
- }
385
- /**
386
- * Check if database needs any migrations
387
- *
388
- * @param dbOrAdapter - Database connection or DatabaseAdapter
389
- * @returns true if migrations are needed
390
- */
391
- export function needsAnyMigrations(dbOrAdapter) {
392
- const db = getDatabase(dbOrAdapter);
393
- return MIGRATIONS.some(m => m.needsMigration(db));
394
- }
395
- /**
396
- * Get summary of migration status
397
- *
398
- * @param dbOrAdapter - Database connection or DatabaseAdapter
399
- * @returns Summary object
400
- */
401
- export function getMigrationStatus(dbOrAdapter) {
402
- const currentVersion = detectDatabaseVersion(dbOrAdapter);
403
- const plan = getMigrationPlan(dbOrAdapter);
404
- return {
405
- currentVersion,
406
- upToDate: plan.length === 0,
407
- pendingMigrations: plan.length,
408
- migrationPlan: plan,
409
- };
410
- }
411
- //# sourceMappingURL=index.js.map