sqlew 3.6.0 → 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 (242) hide show
  1. package/CHANGELOG.md +403 -376
  2. package/assets/config.example.toml +9 -0
  3. package/dist/config/types.d.ts +2 -0
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/config/types.js.map +1 -1
  6. package/dist/database.d.ts +14 -1
  7. package/dist/database.d.ts.map +1 -1
  8. package/dist/database.js +128 -5
  9. package/dist/database.js.map +1 -1
  10. package/dist/index.js +136 -82
  11. package/dist/index.js.map +1 -1
  12. package/dist/knexfile.d.ts.map +1 -1
  13. package/dist/knexfile.js +15 -3
  14. package/dist/knexfile.js.map +1 -1
  15. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  16. package/dist/migrations/knex/{20251025020452_create_master_tables.js → bootstrap/20251025020452_create_master_tables.js} +15 -12
  17. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  18. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  19. package/dist/migrations/knex/{20251025021152_create_transaction_tables.js → bootstrap/20251025021152_create_transaction_tables.js} +19 -19
  20. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  21. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  22. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js +93 -0
  23. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  24. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  25. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js +64 -0
  26. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  27. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  28. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  29. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  30. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  31. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  32. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  33. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  34. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  35. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  36. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  37. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  38. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  39. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  40. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  41. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  42. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  43. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +14 -0
  44. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  45. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +34 -0
  46. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  47. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
  48. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  49. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +24 -0
  50. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  51. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts +16 -0
  52. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  53. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js +27 -0
  54. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  55. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +13 -0
  56. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  57. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +70 -0
  58. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  59. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +11 -0
  60. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  61. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +36 -0
  62. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  63. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +14 -0
  64. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  65. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +84 -0
  66. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  67. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +9 -0
  68. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  69. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +37 -0
  70. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  71. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +9 -0
  72. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  73. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +41 -0
  74. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  75. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +9 -0
  76. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  77. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +36 -0
  78. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  79. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +10 -0
  80. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  81. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +28 -0
  82. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  83. package/dist/tests/agent-reuse.test.d.ts +6 -0
  84. package/dist/tests/agent-reuse.test.d.ts.map +1 -0
  85. package/dist/tests/agent-reuse.test.js +242 -0
  86. package/dist/tests/agent-reuse.test.js.map +1 -0
  87. package/dist/tests/all-features.test.d.ts +7 -0
  88. package/dist/tests/all-features.test.d.ts.map +1 -0
  89. package/dist/tests/all-features.test.js +514 -0
  90. package/dist/tests/all-features.test.js.map +1 -0
  91. package/dist/tests/migrations/test-all-versions-real.d.ts +8 -0
  92. package/dist/tests/migrations/test-all-versions-real.d.ts.map +1 -0
  93. package/dist/tests/migrations/test-all-versions-real.js +234 -0
  94. package/dist/tests/migrations/test-all-versions-real.js.map +1 -0
  95. package/dist/tests/migrations/test-all-versions.d.ts +14 -0
  96. package/dist/tests/migrations/test-all-versions.d.ts.map +1 -0
  97. package/dist/tests/migrations/test-all-versions.js +521 -0
  98. package/dist/tests/migrations/test-all-versions.js.map +1 -0
  99. package/dist/tools/constraints.d.ts.map +1 -1
  100. package/dist/tools/constraints.js +11 -7
  101. package/dist/tools/constraints.js.map +1 -1
  102. package/dist/tools/context.d.ts.map +1 -1
  103. package/dist/tools/context.js +73 -16
  104. package/dist/tools/context.js.map +1 -1
  105. package/dist/tools/messaging.d.ts.map +1 -1
  106. package/dist/tools/messaging.js +23 -1
  107. package/dist/tools/messaging.js.map +1 -1
  108. package/dist/tools/tasks.d.ts.map +1 -1
  109. package/dist/tools/tasks.js +8 -5
  110. package/dist/tools/tasks.js.map +1 -1
  111. package/dist/tools/utils.d.ts.map +1 -1
  112. package/dist/tools/utils.js +4 -1
  113. package/dist/tools/utils.js.map +1 -1
  114. package/dist/types.d.ts +1 -0
  115. package/dist/types.d.ts.map +1 -1
  116. package/dist/utils/cleanup.d.ts +3 -1
  117. package/dist/utils/cleanup.d.ts.map +1 -1
  118. package/dist/utils/cleanup.js +6 -3
  119. package/dist/utils/cleanup.js.map +1 -1
  120. package/dist/utils/debug-logger.d.ts +57 -2
  121. package/dist/utils/debug-logger.d.ts.map +1 -1
  122. package/dist/utils/debug-logger.js +155 -4
  123. package/dist/utils/debug-logger.js.map +1 -1
  124. package/dist/utils/error-handler.d.ts +28 -0
  125. package/dist/utils/error-handler.d.ts.map +1 -0
  126. package/dist/utils/error-handler.js +121 -0
  127. package/dist/utils/error-handler.js.map +1 -0
  128. package/dist/utils/help-tracking.d.ts +3 -3
  129. package/dist/utils/help-tracking.d.ts.map +1 -1
  130. package/dist/utils/help-tracking.js.map +1 -1
  131. package/dist/utils/param-parser.d.ts +23 -0
  132. package/dist/utils/param-parser.d.ts.map +1 -0
  133. package/dist/utils/param-parser.js +52 -0
  134. package/dist/utils/param-parser.js.map +1 -0
  135. package/dist/utils/retention.d.ts +10 -0
  136. package/dist/utils/retention.d.ts.map +1 -1
  137. package/dist/utils/retention.js +19 -0
  138. package/dist/utils/retention.js.map +1 -1
  139. package/docs/MIGRATION_CHAIN.md +293 -280
  140. package/package.json +85 -81
  141. package/dist/migrations/add-decision-context.d.ts +0 -28
  142. package/dist/migrations/add-decision-context.d.ts.map +0 -1
  143. package/dist/migrations/add-decision-context.js +0 -125
  144. package/dist/migrations/add-decision-context.js.map +0 -1
  145. package/dist/migrations/add-help-system-tables.d.ts +0 -35
  146. package/dist/migrations/add-help-system-tables.d.ts.map +0 -1
  147. package/dist/migrations/add-help-system-tables.js +0 -206
  148. package/dist/migrations/add-help-system-tables.js.map +0 -1
  149. package/dist/migrations/add-table-prefixes.d.ts +0 -29
  150. package/dist/migrations/add-table-prefixes.d.ts.map +0 -1
  151. package/dist/migrations/add-table-prefixes.js +0 -150
  152. package/dist/migrations/add-table-prefixes.js.map +0 -1
  153. package/dist/migrations/add-task-dependencies.d.ts +0 -26
  154. package/dist/migrations/add-task-dependencies.d.ts.map +0 -1
  155. package/dist/migrations/add-task-dependencies.js +0 -94
  156. package/dist/migrations/add-task-dependencies.js.map +0 -1
  157. package/dist/migrations/add-task-tables.d.ts +0 -47
  158. package/dist/migrations/add-task-tables.d.ts.map +0 -1
  159. package/dist/migrations/add-task-tables.js +0 -285
  160. package/dist/migrations/add-task-tables.js.map +0 -1
  161. package/dist/migrations/add-token-tracking.d.ts +0 -28
  162. package/dist/migrations/add-token-tracking.d.ts.map +0 -1
  163. package/dist/migrations/add-token-tracking.js +0 -108
  164. package/dist/migrations/add-token-tracking.js.map +0 -1
  165. package/dist/migrations/add-v2.1.0-features.d.ts +0 -29
  166. package/dist/migrations/add-v2.1.0-features.d.ts.map +0 -1
  167. package/dist/migrations/add-v2.1.0-features.js +0 -198
  168. package/dist/migrations/add-v2.1.0-features.js.map +0 -1
  169. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +0 -26
  170. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +0 -1
  171. package/dist/migrations/add-v3.5.0-pruned-files.js +0 -107
  172. package/dist/migrations/add-v3.5.0-pruned-files.js.map +0 -1
  173. package/dist/migrations/index.d.ts +0 -112
  174. package/dist/migrations/index.d.ts.map +0 -1
  175. package/dist/migrations/index.js +0 -411
  176. package/dist/migrations/index.js.map +0 -1
  177. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +0 -1
  178. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +0 -1
  179. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +0 -1
  180. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +0 -1
  181. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +0 -1
  182. package/dist/migrations/knex/20251025021351_create_indexes.js +0 -62
  183. package/dist/migrations/knex/20251025021351_create_indexes.js.map +0 -1
  184. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +0 -1
  185. package/dist/migrations/knex/20251025021416_seed_master_data.js +0 -58
  186. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +0 -1
  187. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +0 -1
  188. package/dist/migrations/knex/20251025070349_create_views.js.map +0 -1
  189. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  190. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  191. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  192. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  193. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +0 -1
  194. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +0 -1
  195. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  196. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  197. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +0 -1
  198. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +0 -1
  199. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  200. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +0 -1
  201. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  202. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  203. package/dist/migrations/migrate-decisions-to-tasks.d.ts +0 -61
  204. package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +0 -1
  205. package/dist/migrations/migrate-decisions-to-tasks.js +0 -442
  206. package/dist/migrations/migrate-decisions-to-tasks.js.map +0 -1
  207. package/dist/migrations/seed-help-data.d.ts +0 -48
  208. package/dist/migrations/seed-help-data.d.ts.map +0 -1
  209. package/dist/migrations/seed-help-data.js +0 -1466
  210. package/dist/migrations/seed-help-data.js.map +0 -1
  211. package/dist/migrations/seed-tool-metadata.d.ts +0 -24
  212. package/dist/migrations/seed-tool-metadata.d.ts.map +0 -1
  213. package/dist/migrations/seed-tool-metadata.js +0 -392
  214. package/dist/migrations/seed-tool-metadata.js.map +0 -1
  215. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +0 -46
  216. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +0 -1
  217. package/dist/migrations/v3.6.0-help-system-refactor.js +0 -223
  218. package/dist/migrations/v3.6.0-help-system-refactor.js.map +0 -1
  219. package/dist/tests/migrations/test-v3.2-migration.d.ts +0 -6
  220. package/dist/tests/migrations/test-v3.2-migration.d.ts.map +0 -1
  221. package/dist/tests/migrations/test-v3.2-migration.js +0 -191
  222. package/dist/tests/migrations/test-v3.2-migration.js.map +0 -1
  223. /package/dist/migrations/knex/{20251025020452_create_master_tables.d.ts → bootstrap/20251025020452_create_master_tables.d.ts} +0 -0
  224. /package/dist/migrations/knex/{20251025021152_create_transaction_tables.d.ts → bootstrap/20251025021152_create_transaction_tables.d.ts} +0 -0
  225. /package/dist/migrations/knex/{20251025021351_create_indexes.d.ts → bootstrap/20251025021351_create_indexes.d.ts} +0 -0
  226. /package/dist/migrations/knex/{20251025021416_seed_master_data.d.ts → bootstrap/20251025021416_seed_master_data.d.ts} +0 -0
  227. /package/dist/migrations/knex/{20251025070349_create_views.d.ts → bootstrap/20251025070349_create_views.d.ts} +0 -0
  228. /package/dist/migrations/knex/{20251025070349_create_views.js → bootstrap/20251025070349_create_views.js} +0 -0
  229. /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
  230. /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
  231. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.d.ts → enhancements/20251025082220_fix_task_dependencies_columns.d.ts} +0 -0
  232. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.js → enhancements/20251025082220_fix_task_dependencies_columns.js} +0 -0
  233. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.d.ts → enhancements/20251025090000_create_help_system_tables.d.ts} +0 -0
  234. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.js → enhancements/20251025090000_create_help_system_tables.js} +0 -0
  235. /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
  236. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.js → enhancements/20251025090100_seed_help_categories_and_use_cases.js} +0 -0
  237. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.d.ts → enhancements/20251025100000_seed_help_metadata.d.ts} +0 -0
  238. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.js → enhancements/20251025100000_seed_help_metadata.js} +0 -0
  239. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.d.ts → enhancements/20251025100100_seed_remaining_use_cases.d.ts} +0 -0
  240. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.js → enhancements/20251025100100_seed_remaining_use_cases.js} +0 -0
  241. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.d.ts → enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts} +0 -0
  242. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.js → enhancements/20251025120000_add_cascade_to_task_dependencies.js} +0 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Knex Migration: v3.2.0 → v3.2.2 (Add Decision Context)
3
+ *
4
+ * Adds rich context for decisions (rationale, alternatives, tradeoffs).
5
+ */
6
+ export async function up(knex) {
7
+ // Check if we need this migration
8
+ const hasDecisionContext = await knex.schema.hasTable('t_decision_context');
9
+ if (hasDecisionContext) {
10
+ console.log('✓ t_decision_context already exists, skipping v3.2.2 migration');
11
+ return;
12
+ }
13
+ // Check if we have v3.2.0 schema (task dependencies exist)
14
+ const hasDependencies = await knex.schema.hasTable('t_task_dependencies');
15
+ if (!hasDependencies) {
16
+ console.log('✓ No v3.2.0 schema detected, skipping v3.2.2 migration');
17
+ return;
18
+ }
19
+ console.log('🔄 Migrating v3.2.0 → v3.2.2 (adding decision context)...');
20
+ // Create decision context table
21
+ await knex.schema.createTable('t_decision_context', (table) => {
22
+ table.increments('id').primary();
23
+ table.integer('decision_id').notNullable()
24
+ .references('id').inTable('t_decisions').onDelete('CASCADE');
25
+ table.text('rationale');
26
+ table.text('alternatives');
27
+ table.text('tradeoffs');
28
+ table.integer('task_id').references('id').inTable('t_tasks').onDelete('SET NULL');
29
+ table.integer('constraint_id').references('id').inTable('t_constraints').onDelete('SET NULL');
30
+ table.bigInteger('created_ts').notNullable()
31
+ .defaultTo(knex.raw("(strftime('%s', 'now'))"));
32
+ table.index('decision_id', 'idx_decision_context_decision_id');
33
+ table.index('task_id', 'idx_decision_context_task_id');
34
+ });
35
+ console.log(' ✓ Created t_decision_context');
36
+ console.log('✅ v3.2.0 → v3.2.2 migration complete');
37
+ }
38
+ export async function down(knex) {
39
+ await knex.schema.dropTableIfExists('t_decision_context');
40
+ }
41
+ //# sourceMappingURL=20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251024050000_upgrade_v3_2_0_to_v3_2_2.js","sourceRoot":"","sources":["../../../../src/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,kCAAkC;IAClC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAE5E,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC1E,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAEzE,gCAAgC;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5D,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE;aACvC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClF,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9F,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE;aACzC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC;QAC/D,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Knex Migration: v3.4.x → v3.5.0 (Add Pruned Files Tracking)
3
+ *
4
+ * Adds tracking for pruned files in tasks.
5
+ */
6
+ import { Knex } from 'knex';
7
+ export declare function up(knex: Knex): Promise<void>;
8
+ export declare function down(knex: Knex): Promise<void>;
9
+ //# sourceMappingURL=20251024060000_upgrade_v3_4_to_v3_5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251024060000_upgrade_v3_4_to_v3_5.d.ts","sourceRoot":"","sources":["../../../../src/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgClD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Knex Migration: v3.4.x → v3.5.0 (Add Pruned Files Tracking)
3
+ *
4
+ * Adds tracking for pruned files in tasks.
5
+ */
6
+ export async function up(knex) {
7
+ // Check if we need this migration
8
+ const hasPrunedFiles = await knex.schema.hasTable('t_task_pruned_files');
9
+ if (hasPrunedFiles) {
10
+ console.log('✓ t_task_pruned_files already exists, skipping v3.5.0 migration');
11
+ return;
12
+ }
13
+ // Check if we have decision context (v3.2.2+)
14
+ const hasDecisionContext = await knex.schema.hasTable('t_decision_context');
15
+ if (!hasDecisionContext) {
16
+ console.log('✓ No v3.4.x schema detected, skipping v3.5.0 migration');
17
+ return;
18
+ }
19
+ console.log('🔄 Migrating v3.4.x → v3.5.0 (adding pruned files tracking)...');
20
+ // Create pruned files table
21
+ await knex.schema.createTable('t_task_pruned_files', (table) => {
22
+ table.increments('id').primary();
23
+ table.integer('task_id').notNullable()
24
+ .references('id').inTable('t_tasks').onDelete('CASCADE');
25
+ table.string('file_path', 500).notNullable();
26
+ table.bigInteger('pruned_ts').notNullable()
27
+ .defaultTo(knex.raw("(strftime('%s', 'now'))"));
28
+ table.index('task_id', 'idx_task_pruned_files_task_id');
29
+ });
30
+ console.log(' ✓ Created t_task_pruned_files');
31
+ console.log('✅ v3.4.x → v3.5.0 migration complete');
32
+ }
33
+ export async function down(knex) {
34
+ await knex.schema.dropTableIfExists('t_task_pruned_files');
35
+ }
36
+ //# sourceMappingURL=20251024060000_upgrade_v3_4_to_v3_5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251024060000_upgrade_v3_4_to_v3_5.js","sourceRoot":"","sources":["../../../../src/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,kCAAkC;IAClC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAEzE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAE9E,4BAA4B;IAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC7D,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;aACnC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3D,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;aACxC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Knex Migration: v3.5.x → v3.6.0 (Add Help System)
3
+ *
4
+ * Adds comprehensive help system tables and metadata.
5
+ * This migration checks if help tables already exist and skips if so.
6
+ */
7
+ import { Knex } from 'knex';
8
+ export declare function up(knex: Knex): Promise<void>;
9
+ export declare function down(knex: Knex): Promise<void>;
10
+ //# sourceMappingURL=20251024070000_upgrade_v3_5_to_v3_6.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251024070000_upgrade_v3_5_to_v3_6.d.ts","sourceRoot":"","sources":["../../../../src/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,wBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlD;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Knex Migration: v3.5.x → v3.6.0 (Add Help System)
3
+ *
4
+ * Adds comprehensive help system tables and metadata.
5
+ * This migration checks if help tables already exist and skips if so.
6
+ */
7
+ export async function up(knex) {
8
+ // Check if we need this migration
9
+ const hasHelpSystem = await knex.schema.hasTable('m_help_tools');
10
+ if (hasHelpSystem) {
11
+ console.log('✓ Help system tables already exist, skipping v3.6.0 migration');
12
+ return;
13
+ }
14
+ // Check if we have pruned files (v3.5.x)
15
+ const hasPrunedFiles = await knex.schema.hasTable('t_task_pruned_files');
16
+ if (!hasPrunedFiles) {
17
+ console.log('✓ No v3.5.x schema detected, skipping v3.6.0 migration');
18
+ return;
19
+ }
20
+ console.log('🔄 Migrating v3.5.x → v3.6.0 (adding help system)...');
21
+ console.log(' ℹ️ Help system tables will be created by migration 20251025090000');
22
+ console.log(' ℹ️ This is just a version marker migration');
23
+ console.log('✅ v3.5.x → v3.6.0 migration marker complete');
24
+ }
25
+ export async function down(knex) {
26
+ // No action needed - actual help tables are managed by later migrations
27
+ }
28
+ //# sourceMappingURL=20251024070000_upgrade_v3_5_to_v3_6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20251024070000_upgrade_v3_5_to_v3_6.js","sourceRoot":"","sources":["../../../../src/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,kCAAkC;IAClC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEjE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,yCAAyC;IACzC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,wEAAwE;AAC1E,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Test suite for agent reuse system
3
+ * Tests generic agent slot reuse and user-specified agent preservation
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=agent-reuse.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-reuse.test.d.ts","sourceRoot":"","sources":["../../src/tests/agent-reuse.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Test suite for agent reuse system
3
+ * Tests generic agent slot reuse and user-specified agent preservation
4
+ */
5
+ import { describe, it, beforeEach, afterEach } from 'node:test';
6
+ import assert from 'node:assert';
7
+ import { initializeDatabase, getOrCreateAgent, releaseAgent, updateAgentActivity, closeDatabase } from '../database.js';
8
+ import { releaseInactiveAgents } from '../utils/retention.js';
9
+ import { clearOldData } from '../tools/utils.js';
10
+ describe('Agent Reuse System', () => {
11
+ let adapter;
12
+ beforeEach(async () => {
13
+ adapter = await initializeDatabase({
14
+ databaseType: 'sqlite',
15
+ connection: { filename: ':memory:' }
16
+ });
17
+ });
18
+ afterEach(async () => {
19
+ await closeDatabase();
20
+ });
21
+ describe('User-specified agents', () => {
22
+ it('should create user-specified agents as non-reusable', async () => {
23
+ const agentId = await getOrCreateAgent(adapter, 'rust-expert');
24
+ const agent = await adapter.getKnex()('m_agents')
25
+ .where({ id: agentId })
26
+ .first();
27
+ assert.strictEqual(agent.name, 'rust-expert');
28
+ assert.strictEqual(agent.is_reusable, 0); // SQLite stores false as 0
29
+ assert.strictEqual(agent.in_use, 1); // SQLite stores true as 1
30
+ assert.ok(agent.last_active_ts > 0);
31
+ });
32
+ it('should preserve user-specified agent names', async () => {
33
+ const agentId1 = await getOrCreateAgent(adapter, 'typescript-expert');
34
+ const agentId2 = await getOrCreateAgent(adapter, 'typescript-expert');
35
+ assert.strictEqual(agentId1, agentId2);
36
+ const count = await adapter.getKnex()('m_agents')
37
+ .where({ name: 'typescript-expert' })
38
+ .count('* as count')
39
+ .first();
40
+ assert.strictEqual(count?.count, 1);
41
+ });
42
+ it('should update activity timestamp on reuse', async () => {
43
+ const agentId1 = await getOrCreateAgent(adapter, 'scrum-master');
44
+ const agent1 = await adapter.getKnex()('m_agents')
45
+ .where({ id: agentId1 })
46
+ .first();
47
+ // Wait a moment
48
+ await new Promise(resolve => setTimeout(resolve, 100));
49
+ const agentId2 = await getOrCreateAgent(adapter, 'scrum-master');
50
+ const agent2 = await adapter.getKnex()('m_agents')
51
+ .where({ id: agentId2 })
52
+ .first();
53
+ assert.strictEqual(agentId1, agentId2);
54
+ assert.ok(agent2.last_active_ts >= agent1.last_active_ts);
55
+ });
56
+ });
57
+ describe('Generic agents', () => {
58
+ it('should create first generic agent as generic-1', async () => {
59
+ const agentId = await getOrCreateAgent(adapter, '');
60
+ const agent = await adapter.getKnex()('m_agents')
61
+ .where({ id: agentId })
62
+ .first();
63
+ assert.strictEqual(agent.name, 'generic-1');
64
+ assert.strictEqual(agent.is_reusable, 1);
65
+ assert.strictEqual(agent.in_use, 1);
66
+ });
67
+ it('should create multiple generic agents sequentially', async () => {
68
+ const agentId1 = await getOrCreateAgent(adapter, '');
69
+ const agentId2 = await getOrCreateAgent(adapter, '');
70
+ const agentId3 = await getOrCreateAgent(adapter, '');
71
+ const agents = await adapter.getKnex()('m_agents')
72
+ .whereIn('id', [agentId1, agentId2, agentId3])
73
+ .orderBy('id');
74
+ assert.strictEqual(agents[0].name, 'generic-1');
75
+ assert.strictEqual(agents[1].name, 'generic-2');
76
+ assert.strictEqual(agents[2].name, 'generic-3');
77
+ agents.forEach(agent => {
78
+ assert.strictEqual(agent.is_reusable, 1);
79
+ assert.strictEqual(agent.in_use, 1);
80
+ });
81
+ });
82
+ it('should reuse released generic agent slots', async () => {
83
+ const agentId1 = await getOrCreateAgent(adapter, '');
84
+ const agentId2 = await getOrCreateAgent(adapter, '');
85
+ // Release the first agent
86
+ await releaseAgent(adapter, agentId1);
87
+ // Next generic agent request should reuse slot 1
88
+ const agentId3 = await getOrCreateAgent(adapter, '');
89
+ assert.strictEqual(agentId3, agentId1);
90
+ const agent = await adapter.getKnex()('m_agents')
91
+ .where({ id: agentId3 })
92
+ .first();
93
+ assert.strictEqual(agent.name, 'generic-1');
94
+ assert.strictEqual(agent.in_use, 1);
95
+ });
96
+ it('should recognize generic-N pattern as reusable', async () => {
97
+ const agentId = await getOrCreateAgent(adapter, 'generic-5');
98
+ const agent = await adapter.getKnex()('m_agents')
99
+ .where({ id: agentId })
100
+ .first();
101
+ assert.strictEqual(agent.name, 'generic-5');
102
+ assert.strictEqual(agent.is_reusable, 1);
103
+ });
104
+ it('should recognize agent-N pattern as reusable', async () => {
105
+ const agentId = await getOrCreateAgent(adapter, 'agent-123');
106
+ const agent = await adapter.getKnex()('m_agents')
107
+ .where({ id: agentId })
108
+ .first();
109
+ assert.strictEqual(agent.name, 'agent-123');
110
+ assert.strictEqual(agent.is_reusable, 1);
111
+ });
112
+ it('should recognize subagent-N pattern as reusable', async () => {
113
+ const agentId = await getOrCreateAgent(adapter, 'subagent-42');
114
+ const agent = await adapter.getKnex()('m_agents')
115
+ .where({ id: agentId })
116
+ .first();
117
+ assert.strictEqual(agent.name, 'subagent-42');
118
+ assert.strictEqual(agent.is_reusable, 1);
119
+ });
120
+ });
121
+ describe('Agent release and cleanup', () => {
122
+ it('should mark generic agent as not in use', async () => {
123
+ const agentId = await getOrCreateAgent(adapter, '');
124
+ await releaseAgent(adapter, agentId);
125
+ const agent = await adapter.getKnex()('m_agents')
126
+ .where({ id: agentId })
127
+ .first();
128
+ assert.strictEqual(agent.in_use, 0);
129
+ });
130
+ it('should not release user-specified agents', async () => {
131
+ const agentId = await getOrCreateAgent(adapter, 'important-agent');
132
+ await releaseAgent(adapter, agentId);
133
+ const agent = await adapter.getKnex()('m_agents')
134
+ .where({ id: agentId })
135
+ .first();
136
+ // User-specified agents (is_reusable=false) should not be released
137
+ assert.strictEqual(agent.in_use, 1);
138
+ });
139
+ it('should release inactive agents after timeout', async () => {
140
+ const agentId1 = await getOrCreateAgent(adapter, '');
141
+ const agentId2 = await getOrCreateAgent(adapter, '');
142
+ // Set agent1 as inactive (old timestamp)
143
+ const oldTimestamp = Math.floor(Date.now() / 1000) - (25 * 3600); // 25 hours ago
144
+ await adapter.getKnex()('m_agents')
145
+ .where({ id: agentId1 })
146
+ .update({ last_active_ts: oldTimestamp });
147
+ // Release inactive agents (24 hour threshold)
148
+ const releasedCount = await releaseInactiveAgents(adapter, 24);
149
+ assert.strictEqual(releasedCount, 1);
150
+ const agent1 = await adapter.getKnex()('m_agents')
151
+ .where({ id: agentId1 })
152
+ .first();
153
+ const agent2 = await adapter.getKnex()('m_agents')
154
+ .where({ id: agentId2 })
155
+ .first();
156
+ assert.strictEqual(agent1.in_use, 0);
157
+ assert.strictEqual(agent2.in_use, 1);
158
+ });
159
+ it('should update agent activity timestamp', async () => {
160
+ const agentId = await getOrCreateAgent(adapter, 'test-agent');
161
+ const initialAgent = await adapter.getKnex()('m_agents')
162
+ .where({ id: agentId })
163
+ .first();
164
+ await new Promise(resolve => setTimeout(resolve, 100));
165
+ await updateAgentActivity(adapter, agentId);
166
+ const updatedAgent = await adapter.getKnex()('m_agents')
167
+ .where({ id: agentId })
168
+ .first();
169
+ assert.ok(updatedAgent.last_active_ts > initialAgent.last_active_ts);
170
+ });
171
+ });
172
+ describe('Integration with cleanup', () => {
173
+ it('should include agent release in clearOldData', async () => {
174
+ // Create some generic agents
175
+ const agentId1 = await getOrCreateAgent(adapter, '');
176
+ const agentId2 = await getOrCreateAgent(adapter, '');
177
+ const agentId3 = await getOrCreateAgent(adapter, '');
178
+ // Set agent1 and agent2 as old
179
+ const oldTimestamp = Math.floor(Date.now() / 1000) - (25 * 3600);
180
+ await adapter.getKnex()('m_agents')
181
+ .whereIn('id', [agentId1, agentId2])
182
+ .update({ last_active_ts: oldTimestamp });
183
+ // Run cleanup
184
+ const result = await clearOldData(undefined, adapter);
185
+ assert.strictEqual(result.agents_released, 2);
186
+ assert.strictEqual(result.success, true);
187
+ const agents = await adapter.getKnex()('m_agents')
188
+ .whereIn('id', [agentId1, agentId2, agentId3]);
189
+ assert.strictEqual(agents[0].in_use, false);
190
+ assert.strictEqual(agents[1].in_use, false);
191
+ assert.strictEqual(agents[2].in_use, true);
192
+ });
193
+ });
194
+ describe('Edge cases', () => {
195
+ it('should handle mixed user and generic agents', async () => {
196
+ const userAgent = await getOrCreateAgent(adapter, 'custom-agent');
197
+ const genericAgent1 = await getOrCreateAgent(adapter, '');
198
+ const genericAgent2 = await getOrCreateAgent(adapter, 'agent-5');
199
+ const agents = await adapter.getKnex()('m_agents')
200
+ .orderBy('id');
201
+ assert.strictEqual(agents.length, 3);
202
+ assert.strictEqual(agents[0].is_reusable, 0); // custom-agent
203
+ assert.strictEqual(agents[1].is_reusable, 1); // generic-1
204
+ assert.strictEqual(agents[2].is_reusable, 1); // agent-5
205
+ });
206
+ it('should handle concurrent agent creation', async () => {
207
+ // Create multiple agents concurrently
208
+ const promises = [
209
+ getOrCreateAgent(adapter, ''),
210
+ getOrCreateAgent(adapter, ''),
211
+ getOrCreateAgent(adapter, ''),
212
+ ];
213
+ const agentIds = await Promise.all(promises);
214
+ // All should be created (no slot reuse since all concurrent)
215
+ assert.strictEqual(agentIds.length, 3);
216
+ assert.strictEqual(new Set(agentIds).size, 3); // All unique
217
+ const agents = await adapter.getKnex()('m_agents')
218
+ .whereIn('id', agentIds)
219
+ .orderBy('name');
220
+ assert.strictEqual(agents[0].name, 'generic-1');
221
+ assert.strictEqual(agents[1].name, 'generic-2');
222
+ assert.strictEqual(agents[2].name, 'generic-3');
223
+ });
224
+ it('should handle empty string as generic', async () => {
225
+ const agentId = await getOrCreateAgent(adapter, '');
226
+ const agent = await adapter.getKnex()('m_agents')
227
+ .where({ id: agentId })
228
+ .first();
229
+ assert.strictEqual(agent.is_reusable, 1);
230
+ assert.strictEqual(agent.name, 'generic-1');
231
+ });
232
+ it('should preserve system agent as non-reusable', async () => {
233
+ const agentId = await getOrCreateAgent(adapter, 'system');
234
+ const agent = await adapter.getKnex()('m_agents')
235
+ .where({ id: agentId })
236
+ .first();
237
+ assert.strictEqual(agent.name, 'system');
238
+ assert.strictEqual(agent.is_reusable, 0);
239
+ });
240
+ });
241
+ });
242
+ //# sourceMappingURL=agent-reuse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-reuse.test.js","sourceRoot":"","sources":["../../src/tests/agent-reuse.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Comprehensive feature test for MCP Sqlew
4
+ * Tests all tools and actions to detect crashes with proper TypeScript types
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=all-features.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all-features.test.d.ts","sourceRoot":"","sources":["../../src/tests/all-features.test.ts"],"names":[],"mappings":";AACA;;;GAGG"}