sqlew 3.9.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +20 -3
  3. package/assets/sample-agents/sqlew-architect.md +3 -4
  4. package/assets/sample-agents/sqlew-researcher.md +6 -15
  5. package/assets/sample-agents/sqlew-scrum-master.md +58 -50
  6. package/assets/sample-commands/sqw-documentor.md +62 -16
  7. package/assets/sample-commands/sqw-plan.md +82 -35
  8. package/assets/sample-commands/sqw-research.md +78 -17
  9. package/assets/sample-commands/sqw-review.md +66 -29
  10. package/assets/sample-commands/sqw-scrum.md +37 -3
  11. package/dist/adapters/mysql-adapter.js +3 -3
  12. package/dist/adapters/postgresql-adapter.js +3 -3
  13. package/dist/cli/db-dump.js +73 -73
  14. package/dist/cli/db-export.js +50 -50
  15. package/dist/cli/db-import.js +51 -51
  16. package/dist/cli.js +52 -52
  17. package/dist/config/minimal-generator.js +91 -91
  18. package/dist/database/config/config-ops.d.ts +19 -11
  19. package/dist/database/config/config-ops.d.ts.map +1 -1
  20. package/dist/database/config/config-ops.js +62 -36
  21. package/dist/database/config/config-ops.js.map +1 -1
  22. package/dist/database/index.d.ts +3 -1
  23. package/dist/database/index.d.ts.map +1 -1
  24. package/dist/database/index.js +4 -2
  25. package/dist/database/index.js.map +1 -1
  26. package/dist/database/initialization/init.d.ts.map +1 -1
  27. package/dist/database/initialization/init.js +31 -0
  28. package/dist/database/initialization/init.js.map +1 -1
  29. package/dist/database/initialization/schema-version.d.ts +94 -0
  30. package/dist/database/initialization/schema-version.d.ts.map +1 -0
  31. package/dist/database/initialization/schema-version.js +166 -0
  32. package/dist/database/initialization/schema-version.js.map +1 -0
  33. package/dist/database/migrations/v4/20251126000000_v4_bootstrap.d.ts +36 -0
  34. package/dist/database/migrations/v4/20251126000000_v4_bootstrap.d.ts.map +1 -0
  35. package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js +597 -0
  36. package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js.map +1 -0
  37. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts +26 -0
  38. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.d.ts.map +1 -0
  39. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +390 -0
  40. package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -0
  41. package/dist/database/migrations/v4/20251127000000_add_rejected_status.d.ts +17 -0
  42. package/dist/database/migrations/v4/20251127000000_add_rejected_status.d.ts.map +1 -0
  43. package/dist/database/migrations/v4/20251127000000_add_rejected_status.js +50 -0
  44. package/dist/database/migrations/v4/20251127000000_add_rejected_status.js.map +1 -0
  45. package/dist/database/migrations/v4/20251127000001_update_task_move_help.d.ts +13 -0
  46. package/dist/database/migrations/v4/20251127000001_update_task_move_help.d.ts.map +1 -0
  47. package/dist/database/migrations/v4/20251127000001_update_task_move_help.js +76 -0
  48. package/dist/database/migrations/v4/20251127000001_update_task_move_help.js.map +1 -0
  49. package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.d.ts +17 -0
  50. package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.d.ts.map +1 -0
  51. package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js +334 -0
  52. package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js.map +1 -0
  53. package/dist/database/migrations/v4/20251127000003_add_task_notes_column.d.ts +11 -0
  54. package/dist/database/migrations/v4/20251127000003_add_task_notes_column.d.ts.map +1 -0
  55. package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js +33 -0
  56. package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js.map +1 -0
  57. package/dist/database/operations/inserts.d.ts +12 -7
  58. package/dist/database/operations/inserts.d.ts.map +1 -1
  59. package/dist/database/operations/inserts.js +30 -60
  60. package/dist/database/operations/inserts.js.map +1 -1
  61. package/dist/database/operations/queries.d.ts.map +1 -1
  62. package/dist/database/operations/queries.js +19 -21
  63. package/dist/database/operations/queries.js.map +1 -1
  64. package/dist/database/operations/updates.d.ts +2 -1
  65. package/dist/database/operations/updates.d.ts.map +1 -1
  66. package/dist/database/operations/updates.js +3 -6
  67. package/dist/database/operations/updates.js.map +1 -1
  68. package/dist/init-agents.js +27 -27
  69. package/dist/init-commands.js +25 -25
  70. package/dist/knexfile.d.ts.map +1 -1
  71. package/dist/knexfile.js +5 -25
  72. package/dist/knexfile.js.map +1 -1
  73. package/dist/schema.d.ts +7 -3
  74. package/dist/schema.d.ts.map +1 -1
  75. package/dist/schema.js +43 -50
  76. package/dist/schema.js.map +1 -1
  77. package/dist/server/arg-parser.js +18 -18
  78. package/dist/server/tool-registry.d.ts.map +1 -1
  79. package/dist/server/tool-registry.js +18 -1
  80. package/dist/server/tool-registry.js.map +1 -1
  81. package/dist/sync-gitignore.d.ts +13 -0
  82. package/dist/sync-gitignore.d.ts.map +1 -0
  83. package/dist/sync-gitignore.js +60 -0
  84. package/dist/sync-gitignore.js.map +1 -0
  85. package/dist/tests/database/multi-project/multi-project.test.js +13 -13
  86. package/dist/tests/database/multi-project/multi-project.test.js.map +1 -1
  87. package/dist/tests/database/sql-dump/default-conversions.test.js +4 -4
  88. package/dist/tests/database/sql-dump/default-conversions.test.js.map +1 -1
  89. package/dist/tests/database/sql-dump/table-ordering.test.js +14 -14
  90. package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -1
  91. package/dist/tests/docker/cross-database.test.js +12 -18
  92. package/dist/tests/docker/cross-database.test.js.map +1 -1
  93. package/dist/tests/docker/dump-import.test.js +15 -15
  94. package/dist/tests/docker/dump-import.test.js.map +1 -1
  95. package/dist/tests/docker/multi-project-migration.test.js +44 -61
  96. package/dist/tests/docker/multi-project-migration.test.js.map +1 -1
  97. package/dist/tests/docker/native/constraint-operations.test.d.ts +1 -1
  98. package/dist/tests/docker/native/constraint-operations.test.js +65 -114
  99. package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
  100. package/dist/tests/docker/native/db-init.d.ts +1 -1
  101. package/dist/tests/docker/native/db-init.js +3 -3
  102. package/dist/tests/docker/native/db-init.js.map +1 -1
  103. package/dist/tests/docker/native/decision-operations.test.js +93 -148
  104. package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
  105. package/dist/tests/docker/native/help-system.test.js +60 -60
  106. package/dist/tests/docker/native/help-system.test.js.map +1 -1
  107. package/dist/tests/docker/native/suggest-tool.test.js +25 -33
  108. package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
  109. package/dist/tests/docker/native/task-operations.test.js +114 -140
  110. package/dist/tests/docker/native/task-operations.test.js.map +1 -1
  111. package/dist/tests/docker/native/test-harness.d.ts +0 -9
  112. package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
  113. package/dist/tests/docker/native/test-harness.js +42 -69
  114. package/dist/tests/docker/native/test-harness.js.map +1 -1
  115. package/dist/tests/feature/task/auto-pruning-decision-link.test.js +6 -9
  116. package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +1 -1
  117. package/dist/tests/feature/task/auto-pruning-partial.test.js +17 -19
  118. package/dist/tests/feature/task/auto-pruning-partial.test.js.map +1 -1
  119. package/dist/tests/feature/task/auto-pruning-persistence.test.js +11 -14
  120. package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +1 -1
  121. package/dist/tests/feature/task/auto-pruning-safety.test.js +23 -42
  122. package/dist/tests/feature/task/auto-pruning-safety.test.js.map +1 -1
  123. package/dist/tests/feature/task/dependencies.test.js +30 -34
  124. package/dist/tests/feature/task/dependencies.test.js.map +1 -1
  125. package/dist/tests/feature/task/link-file-backward-compat.test.js +19 -21
  126. package/dist/tests/feature/task/link-file-backward-compat.test.js.map +1 -1
  127. package/dist/tests/feature/task/watch-files-action.test.js +10 -12
  128. package/dist/tests/feature/task/watch-files-action.test.js.map +1 -1
  129. package/dist/tests/feature/task/watch-files-parameter.test.js +25 -27
  130. package/dist/tests/feature/task/watch-files-parameter.test.js.map +1 -1
  131. package/dist/tests/feature/vcs/git-aware-completion.test.js +32 -42
  132. package/dist/tests/feature/vcs/git-aware-completion.test.js.map +1 -1
  133. package/dist/tests/feature/vcs/two-step-git-completion.test.js +83 -104
  134. package/dist/tests/feature/vcs/two-step-git-completion.test.js.map +1 -1
  135. package/dist/tests/integration/all-features.standalone.js +4 -6
  136. package/dist/tests/integration/all-features.standalone.js.map +1 -1
  137. package/dist/tests/integration/auto-trigger-suggestions.test.js +26 -68
  138. package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
  139. package/dist/tests/integration/decision-intelligence-e2e.test.js +32 -71
  140. package/dist/tests/integration/decision-intelligence-e2e.test.js.map +1 -1
  141. package/dist/tests/integration/e2e-workflow1-debug.test.js +3 -17
  142. package/dist/tests/integration/e2e-workflow1-debug.test.js.map +1 -1
  143. package/dist/tests/integration/hybrid-similarity-detection.test.js +45 -55
  144. package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
  145. package/dist/tests/migrations/test-all-versions.d.ts +1 -1
  146. package/dist/tests/migrations/test-all-versions.js +11 -9
  147. package/dist/tests/migrations/test-all-versions.js.map +1 -1
  148. package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts +7 -0
  149. package/dist/tests/migrations/v4/v4-fresh-install.test.d.ts.map +1 -0
  150. package/dist/tests/migrations/v4/v4-fresh-install.test.js +168 -0
  151. package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +1 -0
  152. package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts +13 -0
  153. package/dist/tests/migrations/v4/v4-migrate-data.test.d.ts.map +1 -0
  154. package/dist/tests/migrations/v4/v4-migrate-data.test.js +264 -0
  155. package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +1 -0
  156. package/dist/tests/test-v4-native-rdbms.d.ts +10 -0
  157. package/dist/tests/test-v4-native-rdbms.d.ts.map +1 -0
  158. package/dist/tests/test-v4-native-rdbms.js +235 -0
  159. package/dist/tests/test-v4-native-rdbms.js.map +1 -0
  160. package/dist/tests/unit/constraint-scorer.test.d.ts +13 -0
  161. package/dist/tests/unit/constraint-scorer.test.d.ts.map +1 -0
  162. package/dist/tests/unit/constraint-scorer.test.js +390 -0
  163. package/dist/tests/unit/constraint-scorer.test.js.map +1 -0
  164. package/dist/tests/unit/validation/policy-validation.test.js +15 -15
  165. package/dist/tests/unit/validation/policy-validation.test.js.map +1 -1
  166. package/dist/tests/utils/db-config.d.ts.map +1 -1
  167. package/dist/tests/utils/db-config.js +2 -3
  168. package/dist/tests/utils/db-config.js.map +1 -1
  169. package/dist/tests/utils/db-seeding.d.ts.map +1 -1
  170. package/dist/tests/utils/db-seeding.js +17 -20
  171. package/dist/tests/utils/db-seeding.js.map +1 -1
  172. package/dist/tests/utils/task-helpers.d.ts +9 -9
  173. package/dist/tests/utils/task-helpers.d.ts.map +1 -1
  174. package/dist/tests/utils/task-helpers.js +26 -43
  175. package/dist/tests/utils/task-helpers.js.map +1 -1
  176. package/dist/tests/utils/test-helpers.d.ts +13 -8
  177. package/dist/tests/utils/test-helpers.d.ts.map +1 -1
  178. package/dist/tests/utils/test-helpers.js +55 -69
  179. package/dist/tests/utils/test-helpers.js.map +1 -1
  180. package/dist/tools/constraints/actions/add.d.ts.map +1 -1
  181. package/dist/tools/constraints/actions/add.js +8 -23
  182. package/dist/tools/constraints/actions/add.js.map +1 -1
  183. package/dist/tools/constraints/actions/deactivate.js +2 -2
  184. package/dist/tools/constraints/actions/deactivate.js.map +1 -1
  185. package/dist/tools/constraints/actions/get.d.ts +2 -2
  186. package/dist/tools/constraints/actions/get.js +2 -2
  187. package/dist/tools/context/actions/create-policy.d.ts.map +1 -1
  188. package/dist/tools/context/actions/create-policy.js +3 -20
  189. package/dist/tools/context/actions/create-policy.js.map +1 -1
  190. package/dist/tools/context/actions/create-template.d.ts.map +1 -1
  191. package/dist/tools/context/actions/create-template.js +5 -9
  192. package/dist/tools/context/actions/create-template.js.map +1 -1
  193. package/dist/tools/context/actions/hard-delete.js +12 -12
  194. package/dist/tools/context/actions/hard-delete.js.map +1 -1
  195. package/dist/tools/context/actions/has-updates.js +3 -3
  196. package/dist/tools/context/actions/has-updates.js.map +1 -1
  197. package/dist/tools/context/actions/list-policies.d.ts.map +1 -1
  198. package/dist/tools/context/actions/list-policies.js +3 -3
  199. package/dist/tools/context/actions/list-policies.js.map +1 -1
  200. package/dist/tools/context/actions/list-templates.d.ts.map +1 -1
  201. package/dist/tools/context/actions/list-templates.js +4 -5
  202. package/dist/tools/context/actions/list-templates.js.map +1 -1
  203. package/dist/tools/context/actions/list.js +1 -1
  204. package/dist/tools/context/actions/list.js.map +1 -1
  205. package/dist/tools/context/actions/search-layer.d.ts.map +1 -1
  206. package/dist/tools/context/actions/search-layer.js +11 -12
  207. package/dist/tools/context/actions/search-layer.js.map +1 -1
  208. package/dist/tools/context/actions/set-from-policy.js +1 -1
  209. package/dist/tools/context/actions/set-from-policy.js.map +1 -1
  210. package/dist/tools/context/actions/set-from-template.js +2 -2
  211. package/dist/tools/context/actions/set-from-template.js.map +1 -1
  212. package/dist/tools/context/actions/versions.d.ts.map +1 -1
  213. package/dist/tools/context/actions/versions.js +6 -7
  214. package/dist/tools/context/actions/versions.js.map +1 -1
  215. package/dist/tools/context/internal/queries.d.ts.map +1 -1
  216. package/dist/tools/context/internal/queries.js +73 -53
  217. package/dist/tools/context/internal/queries.js.map +1 -1
  218. package/dist/tools/example/actions/get.js +7 -7
  219. package/dist/tools/example/actions/get.js.map +1 -1
  220. package/dist/tools/example/actions/list-all.js +4 -4
  221. package/dist/tools/example/actions/list-all.js.map +1 -1
  222. package/dist/tools/example/actions/search.js +8 -8
  223. package/dist/tools/example/actions/search.js.map +1 -1
  224. package/dist/tools/example/help/example.js +21 -21
  225. package/dist/tools/files/actions/check-lock.d.ts.map +1 -1
  226. package/dist/tools/files/actions/check-lock.js +4 -6
  227. package/dist/tools/files/actions/check-lock.js.map +1 -1
  228. package/dist/tools/files/actions/get.d.ts.map +1 -1
  229. package/dist/tools/files/actions/get.js +6 -8
  230. package/dist/tools/files/actions/get.js.map +1 -1
  231. package/dist/tools/files/internal/queries.d.ts.map +1 -1
  232. package/dist/tools/files/internal/queries.js +5 -14
  233. package/dist/tools/files/internal/queries.js.map +1 -1
  234. package/dist/tools/help/actions/batch-guide.js +5 -5
  235. package/dist/tools/help/actions/batch-guide.js.map +1 -1
  236. package/dist/tools/help-queries.js +29 -29
  237. package/dist/tools/help-queries.js.map +1 -1
  238. package/dist/tools/suggest/actions/by-tags.d.ts +2 -2
  239. package/dist/tools/suggest/actions/by-tags.js +2 -2
  240. package/dist/tools/suggest/actions/constraint-by-context.d.ts +66 -0
  241. package/dist/tools/suggest/actions/constraint-by-context.d.ts.map +1 -0
  242. package/dist/tools/suggest/actions/constraint-by-context.js +82 -0
  243. package/dist/tools/suggest/actions/constraint-by-context.js.map +1 -0
  244. package/dist/tools/suggest/actions/constraint-by-tags.d.ts +48 -0
  245. package/dist/tools/suggest/actions/constraint-by-tags.d.ts.map +1 -0
  246. package/dist/tools/suggest/actions/constraint-by-tags.js +68 -0
  247. package/dist/tools/suggest/actions/constraint-by-tags.js.map +1 -0
  248. package/dist/tools/suggest/actions/constraint-by-text.d.ts +47 -0
  249. package/dist/tools/suggest/actions/constraint-by-text.d.ts.map +1 -0
  250. package/dist/tools/suggest/actions/constraint-by-text.js +65 -0
  251. package/dist/tools/suggest/actions/constraint-by-text.js.map +1 -0
  252. package/dist/tools/suggest/actions/constraint-check-duplicate.d.ts +50 -0
  253. package/dist/tools/suggest/actions/constraint-check-duplicate.d.ts.map +1 -0
  254. package/dist/tools/suggest/actions/constraint-check-duplicate.js +68 -0
  255. package/dist/tools/suggest/actions/constraint-check-duplicate.js.map +1 -0
  256. package/dist/tools/suggest/help/constraint-help.d.ts +12 -0
  257. package/dist/tools/suggest/help/constraint-help.d.ts.map +1 -0
  258. package/dist/tools/suggest/help/constraint-help.js +126 -0
  259. package/dist/tools/suggest/help/constraint-help.js.map +1 -0
  260. package/dist/tools/suggest/index.d.ts +3 -2
  261. package/dist/tools/suggest/index.d.ts.map +1 -1
  262. package/dist/tools/suggest/index.js +67 -4
  263. package/dist/tools/suggest/index.js.map +1 -1
  264. package/dist/tools/suggest/internal/constraint-queries.d.ts +55 -0
  265. package/dist/tools/suggest/internal/constraint-queries.d.ts.map +1 -0
  266. package/dist/tools/suggest/internal/constraint-queries.js +85 -0
  267. package/dist/tools/suggest/internal/constraint-queries.js.map +1 -0
  268. package/dist/tools/suggest/internal/queries.d.ts +4 -4
  269. package/dist/tools/suggest/internal/queries.d.ts.map +1 -1
  270. package/dist/tools/suggest/internal/queries.js +44 -37
  271. package/dist/tools/suggest/internal/queries.js.map +1 -1
  272. package/dist/tools/suggest/types.d.ts +10 -0
  273. package/dist/tools/suggest/types.d.ts.map +1 -1
  274. package/dist/tools/tasks/actions/add-dependency.d.ts.map +1 -1
  275. package/dist/tools/tasks/actions/add-dependency.js +15 -10
  276. package/dist/tools/tasks/actions/add-dependency.js.map +1 -1
  277. package/dist/tools/tasks/actions/archive.d.ts.map +1 -1
  278. package/dist/tools/tasks/actions/archive.js +2 -11
  279. package/dist/tools/tasks/actions/archive.js.map +1 -1
  280. package/dist/tools/tasks/actions/create.d.ts.map +1 -1
  281. package/dist/tools/tasks/actions/create.js +7 -24
  282. package/dist/tools/tasks/actions/create.js.map +1 -1
  283. package/dist/tools/tasks/actions/get-dependencies.js +1 -1
  284. package/dist/tools/tasks/actions/get-dependencies.js.map +1 -1
  285. package/dist/tools/tasks/actions/get-pruned-files.js +4 -4
  286. package/dist/tools/tasks/actions/get-pruned-files.js.map +1 -1
  287. package/dist/tools/tasks/actions/get.d.ts.map +1 -1
  288. package/dist/tools/tasks/actions/get.js +15 -16
  289. package/dist/tools/tasks/actions/get.js.map +1 -1
  290. package/dist/tools/tasks/actions/link-pruned-file.js +6 -6
  291. package/dist/tools/tasks/actions/link-pruned-file.js.map +1 -1
  292. package/dist/tools/tasks/actions/link.js +8 -8
  293. package/dist/tools/tasks/actions/link.js.map +1 -1
  294. package/dist/tools/tasks/actions/list.js +2 -2
  295. package/dist/tools/tasks/actions/list.js.map +1 -1
  296. package/dist/tools/tasks/actions/move.d.ts +2 -1
  297. package/dist/tools/tasks/actions/move.d.ts.map +1 -1
  298. package/dist/tools/tasks/actions/move.js +22 -22
  299. package/dist/tools/tasks/actions/move.js.map +1 -1
  300. package/dist/tools/tasks/actions/remove-dependency.js +1 -1
  301. package/dist/tools/tasks/actions/remove-dependency.js.map +1 -1
  302. package/dist/tools/tasks/actions/update.d.ts.map +1 -1
  303. package/dist/tools/tasks/actions/update.js +12 -15
  304. package/dist/tools/tasks/actions/update.js.map +1 -1
  305. package/dist/tools/tasks/actions/watch-files.js +8 -8
  306. package/dist/tools/tasks/actions/watch-files.js.map +1 -1
  307. package/dist/tools/tasks/help/example.js +4 -4
  308. package/dist/tools/tasks/help/example.js.map +1 -1
  309. package/dist/tools/tasks/help/help.d.ts.map +1 -1
  310. package/dist/tools/tasks/help/help.js +20 -10
  311. package/dist/tools/tasks/help/help.js.map +1 -1
  312. package/dist/tools/tasks/internal/state-machine.js +2 -2
  313. package/dist/tools/tasks/internal/state-machine.js.map +1 -1
  314. package/dist/tools/tasks/internal/task-queries.d.ts.map +1 -1
  315. package/dist/tools/tasks/internal/task-queries.js +9 -11
  316. package/dist/tools/tasks/internal/task-queries.js.map +1 -1
  317. package/dist/tools/tasks/types.d.ts +13 -1
  318. package/dist/tools/tasks/types.d.ts.map +1 -1
  319. package/dist/tools/tasks/types.js +30 -7
  320. package/dist/tools/tasks/types.js.map +1 -1
  321. package/dist/tools/tasks/watcher/status.js +8 -8
  322. package/dist/tools/tasks/watcher/status.js.map +1 -1
  323. package/dist/tools/use_case/actions/search.js +4 -4
  324. package/dist/tools/use_case/actions/search.js.map +1 -1
  325. package/dist/tools/use_case/help/example.js +16 -16
  326. package/dist/types/task/params.d.ts +2 -1
  327. package/dist/types/task/params.d.ts.map +1 -1
  328. package/dist/types.d.ts +10 -2
  329. package/dist/types.d.ts.map +1 -1
  330. package/dist/utils/action-specs/task-specs.js +5 -5
  331. package/dist/utils/action-specs/task-specs.js.map +1 -1
  332. package/dist/utils/batch-validation.d.ts +1 -1
  333. package/dist/utils/batch-validation.js +3 -3
  334. package/dist/utils/batch-validation.js.map +1 -1
  335. package/dist/utils/cleanup.js +3 -3
  336. package/dist/utils/cleanup.js.map +1 -1
  337. package/dist/utils/constraint-scorer.d.ts +113 -0
  338. package/dist/utils/constraint-scorer.d.ts.map +1 -0
  339. package/dist/utils/constraint-scorer.js +220 -0
  340. package/dist/utils/constraint-scorer.js.map +1 -0
  341. package/dist/utils/db-aggregations.js +10 -10
  342. package/dist/utils/db-aggregations.js.map +1 -1
  343. package/dist/utils/exporter/export.js +70 -70
  344. package/dist/utils/exporter/export.js.map +1 -1
  345. package/dist/utils/file-pruning.js +16 -16
  346. package/dist/utils/file-pruning.js.map +1 -1
  347. package/dist/utils/importer/import.js +33 -33
  348. package/dist/utils/importer/import.js.map +1 -1
  349. package/dist/utils/importer/master-tables.js +25 -25
  350. package/dist/utils/importer/master-tables.js.map +1 -1
  351. package/dist/utils/importer/topological-sort.d.ts +1 -1
  352. package/dist/utils/importer/topological-sort.js +1 -1
  353. package/dist/utils/policy-validator.js +5 -1
  354. package/dist/utils/policy-validator.js.map +1 -1
  355. package/dist/utils/project-context.js +3 -3
  356. package/dist/utils/project-context.js.map +1 -1
  357. package/dist/utils/quality-checks.js +3 -3
  358. package/dist/utils/quality-checks.js.map +1 -1
  359. package/dist/utils/retention.js +1 -1
  360. package/dist/utils/retention.js.map +1 -1
  361. package/dist/utils/sql-dump/core/dependency-sort.js +17 -17
  362. package/dist/utils/sql-dump/core/index-export.js +7 -7
  363. package/dist/utils/sql-dump/core/sequence-reset.js +5 -5
  364. package/dist/utils/sql-dump/generators/headers.js +10 -10
  365. package/dist/utils/sql-dump/schema/indexes.js +15 -15
  366. package/dist/utils/sql-dump/schema/primary-keys.js +14 -14
  367. package/dist/utils/sql-dump/schema/tables.js +44 -44
  368. package/dist/utils/sql-dump/schema/views.js +21 -21
  369. package/dist/utils/suggestion-scorer.d.ts.map +1 -1
  370. package/dist/utils/suggestion-scorer.js +9 -0
  371. package/dist/utils/suggestion-scorer.js.map +1 -1
  372. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  373. package/dist/utils/task-stale-detection.js +20 -19
  374. package/dist/utils/task-stale-detection.js.map +1 -1
  375. package/dist/utils/token-logging.js +6 -6
  376. package/dist/utils/token-logging.js.map +1 -1
  377. package/dist/utils/validators.d.ts +4 -4
  378. package/dist/utils/validators.d.ts.map +1 -1
  379. package/dist/utils/validators.js +10 -4
  380. package/dist/utils/validators.js.map +1 -1
  381. package/dist/utils/view-queries.d.ts +3 -3
  382. package/dist/utils/view-queries.d.ts.map +1 -1
  383. package/dist/utils/view-queries.js +41 -66
  384. package/dist/utils/view-queries.js.map +1 -1
  385. package/dist/watcher/file-watcher.js +20 -20
  386. package/dist/watcher/file-watcher.js.map +1 -1
  387. package/docs/AI_AGENT_GUIDE.md +81 -1376
  388. package/docs/ARCHITECTURE.md +127 -608
  389. package/docs/AUTO_FILE_TRACKING.md +22 -20
  390. package/docs/BATCH_VALIDATION.md +3 -3
  391. package/docs/CONFIGURATION.md +69 -68
  392. package/docs/CONSTRAINT_INTELLIGENCE.md +339 -0
  393. package/docs/DATABASE_AUTH.md +1 -1
  394. package/docs/DECISION_CONTEXT.md +12 -0
  395. package/docs/DECISION_INTELLIGENCE.md +19 -8
  396. package/docs/GIT_AWARE_AUTO_COMPLETE.md +21 -20
  397. package/docs/SHARED_CONCEPTS.md +46 -16
  398. package/docs/SLASH_COMMANDS.md +88 -117
  399. package/docs/SPECIALIZED_AGENTS.md +45 -572
  400. package/docs/TASK_ACTIONS.md +63 -53
  401. package/docs/TASK_OVERVIEW.md +49 -61
  402. package/docs/TASK_PRUNING.md +32 -27
  403. package/docs/TOOL_REFERENCE.md +119 -76
  404. package/docs/TOOL_SELECTION.md +15 -18
  405. package/docs/WORKFLOWS.md +504 -350
  406. package/package.json +119 -119
  407. package/assets/sample-commands/sqw-secretary.md +0 -187
  408. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts +0 -4
  409. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +0 -1
  410. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js +0 -97
  411. package/dist/config/knex/bootstrap/20251025020452_create_master_tables.js.map +0 -1
  412. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts +0 -4
  413. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +0 -1
  414. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js +0 -270
  415. package/dist/config/knex/bootstrap/20251025021152_create_transaction_tables.js.map +0 -1
  416. package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts +0 -4
  417. package/dist/config/knex/bootstrap/20251025021351_create_indexes.d.ts.map +0 -1
  418. package/dist/config/knex/bootstrap/20251025021351_create_indexes.js +0 -93
  419. package/dist/config/knex/bootstrap/20251025021351_create_indexes.js.map +0 -1
  420. package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts +0 -4
  421. package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.d.ts.map +0 -1
  422. package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js +0 -146
  423. package/dist/config/knex/bootstrap/20251025021352_fix_mysql_index_syntax.js.map +0 -1
  424. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts +0 -4
  425. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +0 -1
  426. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js +0 -182
  427. package/dist/config/knex/bootstrap/20251025021416_seed_master_data.js.map +0 -1
  428. package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts +0 -4
  429. package/dist/config/knex/bootstrap/20251025070349_create_views.d.ts.map +0 -1
  430. package/dist/config/knex/bootstrap/20251025070349_create_views.js +0 -247
  431. package/dist/config/knex/bootstrap/20251025070349_create_views.js.map +0 -1
  432. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -4
  433. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  434. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js +0 -22
  435. package/dist/config/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  436. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts +0 -8
  437. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  438. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js +0 -12
  439. package/dist/config/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  440. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts +0 -19
  441. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +0 -1
  442. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js +0 -121
  443. package/dist/config/knex/enhancements/20251025090000_create_help_system_tables.js.map +0 -1
  444. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -13
  445. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  446. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js +0 -383
  447. package/dist/config/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  448. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts +0 -15
  449. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +0 -1
  450. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js +0 -259
  451. package/dist/config/knex/enhancements/20251025100000_seed_help_metadata.js.map +0 -1
  452. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts +0 -16
  453. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  454. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js +0 -276
  455. package/dist/config/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +0 -1
  456. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -8
  457. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  458. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js +0 -71
  459. package/dist/config/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  460. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +0 -14
  461. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  462. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js +0 -62
  463. package/dist/config/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +0 -1
  464. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -4
  465. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  466. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +0 -24
  467. package/dist/config/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  468. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts +0 -16
  469. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +0 -1
  470. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js +0 -33
  471. package/dist/config/knex/enhancements/20251027020000_update_agent_reusability.js.map +0 -1
  472. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts +0 -23
  473. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.d.ts.map +0 -1
  474. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js +0 -58
  475. package/dist/config/knex/enhancements/20251028000000_simplify_agent_system.js.map +0 -1
  476. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts +0 -13
  477. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.d.ts.map +0 -1
  478. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js +0 -48
  479. package/dist/config/knex/enhancements/20251031000000_drop_orphaned_message_view.js.map +0 -1
  480. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +0 -24
  481. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +0 -1
  482. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js +0 -189
  483. package/dist/config/knex/enhancements/20251104000003_rename_constraints_created_by_to_agent_id.js.map +0 -1
  484. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts +0 -16
  485. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.d.ts.map +0 -1
  486. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js +0 -72
  487. package/dist/config/knex/enhancements/20251105000000_add_token_usage_table.js.map +0 -1
  488. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +0 -23
  489. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +0 -1
  490. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js +0 -118
  491. package/dist/config/knex/enhancements/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +0 -1
  492. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +0 -29
  493. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +0 -1
  494. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js +0 -556
  495. package/dist/config/knex/enhancements/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +0 -1
  496. package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts +0 -21
  497. package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.d.ts.map +0 -1
  498. package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js +0 -73
  499. package/dist/config/knex/enhancements/20251108000000_add_planning_layers_v3_8_0.js.map +0 -1
  500. package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +0 -19
  501. package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +0 -1
  502. package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +0 -88
  503. package/dist/config/knex/enhancements/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +0 -1
  504. package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +0 -24
  505. package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +0 -1
  506. package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js +0 -79
  507. package/dist/config/knex/enhancements/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +0 -1
  508. package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts +0 -27
  509. package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.d.ts.map +0 -1
  510. package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js +0 -347
  511. package/dist/config/knex/enhancements/20251109010000_tool_cleanup_v3_8_0.js.map +0 -1
  512. package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +0 -30
  513. package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +0 -1
  514. package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js +0 -232
  515. package/dist/config/knex/enhancements/20251109020000_fix_missing_help_actions_v3_8_0.js.map +0 -1
  516. package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +0 -22
  517. package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +0 -1
  518. package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js +0 -106
  519. package/dist/config/knex/enhancements/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +0 -1
  520. package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +0 -21
  521. package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +0 -1
  522. package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +0 -106
  523. package/dist/config/knex/enhancements/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +0 -1
  524. package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +0 -21
  525. package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +0 -1
  526. package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js +0 -91
  527. package/dist/config/knex/enhancements/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +0 -1
  528. package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +0 -15
  529. package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +0 -1
  530. package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +0 -270
  531. package/dist/config/knex/enhancements/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +0 -1
  532. package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +0 -15
  533. package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +0 -1
  534. package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +0 -241
  535. package/dist/config/knex/enhancements/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +0 -1
  536. package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts +0 -16
  537. package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +0 -1
  538. package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js +0 -168
  539. package/dist/config/knex/enhancements/20251114130000_seed_builtin_policies_v3_9_0.js.map +0 -1
  540. package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts +0 -14
  541. package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.d.ts.map +0 -1
  542. package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js +0 -228
  543. package/dist/config/knex/enhancements/20251114140000_add_policy_help_v3_9_0.js.map +0 -1
  544. package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts +0 -14
  545. package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +0 -1
  546. package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js +0 -237
  547. package/dist/config/knex/enhancements/20251114141000_add_policy_use_cases_v3_9_0.js.map +0 -1
  548. package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +0 -14
  549. package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +0 -1
  550. package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js +0 -61
  551. package/dist/config/knex/enhancements/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +0 -1
  552. package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts +0 -21
  553. package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +0 -1
  554. package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js +0 -127
  555. package/dist/config/knex/enhancements/20251115000000_fix_task_decision_links_unique_constraint.js.map +0 -1
  556. package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +0 -15
  557. package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +0 -1
  558. package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js +0 -69
  559. package/dist/config/knex/enhancements/20251115100000_fix_read_keyword_index_v3_9_0.js.map +0 -1
  560. package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +0 -15
  561. package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +0 -1
  562. package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js +0 -132
  563. package/dist/config/knex/enhancements/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +0 -1
  564. package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +0 -18
  565. package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +0 -1
  566. package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js +0 -47
  567. package/dist/config/knex/enhancements/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +0 -1
  568. package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts +0 -20
  569. package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.d.ts.map +0 -1
  570. package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js +0 -119
  571. package/dist/config/knex/enhancements/20251118000000_fix_native_db_test_issues_v3_9_1.js.map +0 -1
  572. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -13
  573. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
  574. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +0 -70
  575. package/dist/config/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
  576. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -11
  577. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
  578. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +0 -36
  579. package/dist/config/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
  580. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -14
  581. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
  582. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +0 -84
  583. package/dist/config/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
  584. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -9
  585. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
  586. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +0 -37
  587. package/dist/config/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
  588. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -9
  589. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
  590. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -41
  591. package/dist/config/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
  592. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -9
  593. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
  594. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +0 -36
  595. package/dist/config/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
  596. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -10
  597. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
  598. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +0 -28
  599. package/dist/config/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
  600. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts +0 -49
  601. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.d.ts.map +0 -1
  602. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js +0 -974
  603. package/dist/config/knex/upgrades/20251104000000_add_multi_project_v3_7_0.js.map +0 -1
  604. package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +0 -14
  605. package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +0 -1
  606. package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js +0 -97
  607. package/dist/config/knex/upgrades/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +0 -1
  608. package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +0 -24
  609. package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +0 -1
  610. package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js +0 -303
  611. package/dist/config/knex/upgrades/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +0 -1
  612. package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +0 -19
  613. package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +0 -1
  614. package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js +0 -196
  615. package/dist/config/knex/upgrades/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +0 -1
  616. package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts +0 -22
  617. package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.d.ts.map +0 -1
  618. package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js +0 -375
  619. package/dist/config/knex/upgrades/20251112000000_decision_intelligence_v3_9_0.js.map +0 -1
  620. package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts +0 -16
  621. package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +0 -1
  622. package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js +0 -84
  623. package/dist/database/migrations/20251024010000_upgrade_v1_0_to_v1_1.js.map +0 -1
  624. package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts +0 -14
  625. package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +0 -1
  626. package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js +0 -42
  627. package/dist/database/migrations/20251024020000_upgrade_v2_0_to_v2_1.js.map +0 -1
  628. package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts +0 -17
  629. package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +0 -1
  630. package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js +0 -122
  631. package/dist/database/migrations/20251024030000_upgrade_v2_1_to_v3_0.js.map +0 -1
  632. package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts +0 -12
  633. package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +0 -1
  634. package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js +0 -49
  635. package/dist/database/migrations/20251024040000_upgrade_v3_0_to_v3_2.js.map +0 -1
  636. package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +0 -12
  637. package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +0 -1
  638. package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +0 -53
  639. package/dist/database/migrations/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +0 -1
  640. package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts +0 -12
  641. package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +0 -1
  642. package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js +0 -44
  643. package/dist/database/migrations/20251024060000_upgrade_v3_4_to_v3_5.js.map +0 -1
  644. package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts +0 -13
  645. package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +0 -1
  646. package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js +0 -33
  647. package/dist/database/migrations/20251024070000_upgrade_v3_5_to_v3_6.js.map +0 -1
  648. package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts +0 -17
  649. package/dist/database/migrations/20251025020452_create_master_tables_wrapper.d.ts.map +0 -1
  650. package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js +0 -119
  651. package/dist/database/migrations/20251025020452_create_master_tables_wrapper.js.map +0 -1
  652. package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts +0 -15
  653. package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.d.ts.map +0 -1
  654. package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js +0 -282
  655. package/dist/database/migrations/20251025021152_create_transaction_tables_wrapper.js.map +0 -1
  656. package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts +0 -21
  657. package/dist/database/migrations/20251025021351_create_indexes_wrapper.d.ts.map +0 -1
  658. package/dist/database/migrations/20251025021351_create_indexes_wrapper.js +0 -83
  659. package/dist/database/migrations/20251025021351_create_indexes_wrapper.js.map +0 -1
  660. package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts +0 -22
  661. package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.d.ts.map +0 -1
  662. package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js +0 -94
  663. package/dist/database/migrations/20251025021352_fix_mysql_index_syntax_wrapper.js.map +0 -1
  664. package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts +0 -19
  665. package/dist/database/migrations/20251025021416_seed_master_data_wrapper.d.ts.map +0 -1
  666. package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js +0 -120
  667. package/dist/database/migrations/20251025021416_seed_master_data_wrapper.js.map +0 -1
  668. package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts +0 -14
  669. package/dist/database/migrations/20251025070349_create_views_wrapper.d.ts.map +0 -1
  670. package/dist/database/migrations/20251025070349_create_views_wrapper.js +0 -160
  671. package/dist/database/migrations/20251025070349_create_views_wrapper.js.map +0 -1
  672. package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts +0 -9
  673. package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  674. package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js +0 -21
  675. package/dist/database/migrations/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  676. package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts +0 -13
  677. package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  678. package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js +0 -17
  679. package/dist/database/migrations/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  680. package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts +0 -27
  681. package/dist/database/migrations/20251025090000_create_help_system_tables.d.ts.map +0 -1
  682. package/dist/database/migrations/20251025090000_create_help_system_tables.js +0 -120
  683. package/dist/database/migrations/20251025090000_create_help_system_tables.js.map +0 -1
  684. package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts +0 -18
  685. package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  686. package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js +0 -388
  687. package/dist/database/migrations/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  688. package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts +0 -20
  689. package/dist/database/migrations/20251025100000_seed_help_metadata.d.ts.map +0 -1
  690. package/dist/database/migrations/20251025100000_seed_help_metadata.js +0 -264
  691. package/dist/database/migrations/20251025100000_seed_help_metadata.js.map +0 -1
  692. package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts +0 -21
  693. package/dist/database/migrations/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  694. package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js +0 -281
  695. package/dist/database/migrations/20251025100100_seed_remaining_use_cases.js.map +0 -1
  696. package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts +0 -13
  697. package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  698. package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js +0 -76
  699. package/dist/database/migrations/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  700. package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts +0 -17
  701. package/dist/database/migrations/20251027000000_add_agent_reuse_system.d.ts.map +0 -1
  702. package/dist/database/migrations/20251027000000_add_agent_reuse_system.js +0 -42
  703. package/dist/database/migrations/20251027000000_add_agent_reuse_system.js.map +0 -1
  704. package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts +0 -10
  705. package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.d.ts.map +0 -1
  706. package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js +0 -28
  707. package/dist/database/migrations/20251027010000_add_task_constraint_to_decision_context.js.map +0 -1
  708. package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts +0 -21
  709. package/dist/database/migrations/20251027020000_update_agent_reusability.d.ts.map +0 -1
  710. package/dist/database/migrations/20251027020000_update_agent_reusability.js +0 -38
  711. package/dist/database/migrations/20251027020000_update_agent_reusability.js.map +0 -1
  712. package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts +0 -26
  713. package/dist/database/migrations/20251028000000_simplify_agent_system.d.ts.map +0 -1
  714. package/dist/database/migrations/20251028000000_simplify_agent_system.js +0 -56
  715. package/dist/database/migrations/20251028000000_simplify_agent_system.js.map +0 -1
  716. package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts +0 -16
  717. package/dist/database/migrations/20251031000000_drop_orphaned_message_view.d.ts.map +0 -1
  718. package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js +0 -52
  719. package/dist/database/migrations/20251031000000_drop_orphaned_message_view.js.map +0 -1
  720. package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts +0 -56
  721. package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.d.ts.map +0 -1
  722. package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js +0 -701
  723. package/dist/database/migrations/20251104000000_add_multi_project_v3_7_0.js.map +0 -1
  724. package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts +0 -30
  725. package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.d.ts.map +0 -1
  726. package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js +0 -180
  727. package/dist/database/migrations/20251104000003_rename_constraints_created_by_to_agent_id.js.map +0 -1
  728. package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts +0 -19
  729. package/dist/database/migrations/20251105000000_add_token_usage_table.d.ts.map +0 -1
  730. package/dist/database/migrations/20251105000000_add_token_usage_table.js +0 -47
  731. package/dist/database/migrations/20251105000000_add_token_usage_table.js.map +0 -1
  732. package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts +0 -28
  733. package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.d.ts.map +0 -1
  734. package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js +0 -123
  735. package/dist/database/migrations/20251105000001_rename_decision_context_decided_by_to_agent_id.js.map +0 -1
  736. package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts +0 -36
  737. package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.d.ts.map +0 -1
  738. package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js +0 -559
  739. package/dist/database/migrations/20251106000000_fix_master_tables_project_id_v3_7_3.js.map +0 -1
  740. package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts +0 -26
  741. package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.d.ts.map +0 -1
  742. package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js +0 -78
  743. package/dist/database/migrations/20251108000000_add_planning_layers_v3_8_0.js.map +0 -1
  744. package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts +0 -17
  745. package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.d.ts.map +0 -1
  746. package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js +0 -78
  747. package/dist/database/migrations/20251108000000_hotfix_v_tagged_constraints_project_id.js.map +0 -1
  748. package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts +0 -24
  749. package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.d.ts.map +0 -1
  750. package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js +0 -63
  751. package/dist/database/migrations/20251109000000_fix_task_file_links_unique_constraint_v3_8_0.js.map +0 -1
  752. package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts +0 -27
  753. package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.d.ts.map +0 -1
  754. package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js +0 -276
  755. package/dist/database/migrations/20251109000002_multi_project_cross_db_compat_v3_7_5.js.map +0 -1
  756. package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts +0 -27
  757. package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.d.ts.map +0 -1
  758. package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js +0 -67
  759. package/dist/database/migrations/20251109000003_token_usage_cross_db_compat_v3_7_5.js.map +0 -1
  760. package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts +0 -32
  761. package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.d.ts.map +0 -1
  762. package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js +0 -352
  763. package/dist/database/migrations/20251109010000_tool_cleanup_v3_8_0.js.map +0 -1
  764. package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts +0 -35
  765. package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.d.ts.map +0 -1
  766. package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js +0 -237
  767. package/dist/database/migrations/20251109020000_fix_missing_help_actions_v3_8_0.js.map +0 -1
  768. package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts +0 -22
  769. package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.d.ts.map +0 -1
  770. package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js +0 -190
  771. package/dist/database/migrations/20251111235959_preemptive_fix_cross_database_v3_9_0.js.map +0 -1
  772. package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts +0 -32
  773. package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.d.ts.map +0 -1
  774. package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js +0 -342
  775. package/dist/database/migrations/20251112000000_decision_intelligence_v3_9_0.js.map +0 -1
  776. package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts +0 -25
  777. package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.d.ts.map +0 -1
  778. package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js +0 -109
  779. package/dist/database/migrations/20251112000001_fix_task_file_links_schema_v3_9_0.js.map +0 -1
  780. package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts +0 -24
  781. package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.d.ts.map +0 -1
  782. package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js +0 -111
  783. package/dist/database/migrations/20251112000002_fix_task_pruned_files_schema_v3_9_0.js.map +0 -1
  784. package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts +0 -24
  785. package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.d.ts.map +0 -1
  786. package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js +0 -90
  787. package/dist/database/migrations/20251114000000_fix_v_tagged_decisions_numeric_support.js.map +0 -1
  788. package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts +0 -20
  789. package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.d.ts.map +0 -1
  790. package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js +0 -275
  791. package/dist/database/migrations/20251114120000_add_suggest_tool_to_help_system_v3_9_0.js.map +0 -1
  792. package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts +0 -20
  793. package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.d.ts.map +0 -1
  794. package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js +0 -246
  795. package/dist/database/migrations/20251114121000_add_suggest_tool_use_cases_v3_9_0.js.map +0 -1
  796. package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts +0 -23
  797. package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.d.ts.map +0 -1
  798. package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js +0 -175
  799. package/dist/database/migrations/20251114130000_seed_builtin_policies_v3_9_0.js.map +0 -1
  800. package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts +0 -21
  801. package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.d.ts.map +0 -1
  802. package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js +0 -235
  803. package/dist/database/migrations/20251114140000_add_policy_help_v3_9_0.js.map +0 -1
  804. package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts +0 -21
  805. package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.d.ts.map +0 -1
  806. package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js +0 -244
  807. package/dist/database/migrations/20251114141000_add_policy_use_cases_v3_9_0.js.map +0 -1
  808. package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts +0 -23
  809. package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.d.ts.map +0 -1
  810. package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js +0 -70
  811. package/dist/database/migrations/20251114150000_fix_policy_unique_constraint_v3_9_0.js.map +0 -1
  812. package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts +0 -29
  813. package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.d.ts.map +0 -1
  814. package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js +0 -135
  815. package/dist/database/migrations/20251115000000_fix_task_decision_links_unique_constraint.js.map +0 -1
  816. package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts +0 -23
  817. package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.d.ts.map +0 -1
  818. package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js +0 -42
  819. package/dist/database/migrations/20251115100000_fix_read_keyword_index_v3_9_0.js.map +0 -1
  820. package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts +0 -25
  821. package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.d.ts.map +0 -1
  822. package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js +0 -102
  823. package/dist/database/migrations/20251115110000_fix_cross_database_timestamps_v3_9_0.js.map +0 -1
  824. package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts +0 -25
  825. package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.d.ts.map +0 -1
  826. package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js +0 -55
  827. package/dist/database/migrations/20251115120000_fix_all_cross_db_issues_v3_9_0.js.map +0 -1
  828. package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts +0 -29
  829. package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.d.ts.map +0 -1
  830. package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js +0 -62
  831. package/dist/database/migrations/20251118000000_eliminate_views_v3_9_0.js.map +0 -1
  832. package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts +0 -25
  833. package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.d.ts.map +0 -1
  834. package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js +0 -100
  835. package/dist/database/migrations/20251119000000_add_constraint_text_hash_v3_9_1.js.map +0 -1
  836. package/dist/tests/database/migrations/idempotency.test.d.ts +0 -2
  837. package/dist/tests/database/migrations/idempotency.test.d.ts.map +0 -1
  838. package/dist/tests/database/migrations/idempotency.test.js +0 -331
  839. package/dist/tests/database/migrations/idempotency.test.js.map +0 -1
  840. package/dist/tests/database/migrations/upgrade-paths.test.d.ts +0 -2
  841. package/dist/tests/database/migrations/upgrade-paths.test.d.ts.map +0 -1
  842. package/dist/tests/database/migrations/upgrade-paths.test.js +0 -249
  843. package/dist/tests/database/migrations/upgrade-paths.test.js.map +0 -1
  844. package/dist/utils/activity-logging.d.ts +0 -114
  845. package/dist/utils/activity-logging.d.ts.map +0 -1
  846. package/dist/utils/activity-logging.js +0 -169
  847. package/dist/utils/activity-logging.js.map +0 -1
  848. package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +0 -457
  849. package/docs/TASK_DEPENDENCIES.md +0 -748
  850. package/docs/TASK_LINKING.md +0 -909
  851. package/docs/TASK_MIGRATION.md +0 -701
  852. package/docs/TASK_SYSTEM.md +0 -1314
@@ -1,974 +0,0 @@
1
- /**
2
- * Migration: Multi-Project Support v3.7.0 (Consolidated)
3
- *
4
- * Consolidates 4 separate migrations into a single comprehensive migration:
5
- * - 20251101000000_add_multi_project_support (enhancements)
6
- * - 20251104000000_multi_project_support_v3_7_0 (upgrades)
7
- * - 20251104000001_multi_project_fix_constraints (upgrades)
8
- * - 20251104000002_hotfix_missing_project_id (upgrades)
9
- *
10
- * Adds multi-project isolation support by:
11
- * 1. Creating m_projects master table
12
- * 2. Adding project_id to all transaction tables (14 tables)
13
- * 3. Updating PRIMARY KEY constraints to composite (key_id, project_id)
14
- * 4. Recreating m_config table with proper PRIMARY KEY structure
15
- * 5. Adding indexes for multi-project queries
16
- * 6. Recreating all views with project_id support
17
- *
18
- * Migration Steps:
19
- * - STEP 1: Create m_projects table
20
- * - STEP 2: Drop all views and triggers before modifications
21
- * - STEP 3: Add project_id via ALTER TABLE (10 tables)
22
- * - STEP 4: Fix PRIMARY KEY constraints (composite keys)
23
- * - STEP 4a-4b: Recreate t_decisions tables with composite PRIMARY KEY
24
- * - STEP 4.5: Recreate t_task_tags with composite PRIMARY KEY
25
- * - STEP 4.6: Recreate t_task_dependencies with composite PRIMARY KEY
26
- * - STEP 4.7: Recreate t_task_details with project_id (ALTER TABLE fails due to FK constraints)
27
- * - STEP 4.8: Recreate t_task_file_links with project_id (ALTER TABLE fails due to FK constraints)
28
- * - STEP 4.9: Recreate t_task_decision_links with project_id (ALTER TABLE fails due to FK constraints)
29
- * - STEP 5: Recreate m_config table
30
- * - STEP 6: Create composite indexes
31
- * - STEP 7: Recreate all views with project_id support
32
- * - STEP 8: Re-enable foreign key constraints
33
- *
34
- * SQLite Limitation Note:
35
- * ALTER TABLE cannot modify tables with complex FOREIGN KEY constraints (ON DELETE CASCADE).
36
- * Tables requiring recreation: t_task_details, t_task_tags, t_task_file_links,
37
- * t_task_decision_links, t_task_dependencies.
38
- *
39
- * Satisfies Constraints:
40
- * - #22 (CRITICAL): All transaction tables have project_id
41
- * - #23 (CRITICAL): m_projects table with name/detection_source
42
- * - #39 (HIGH): Composite indexes with project_id first
43
- * - #41 (HIGH): t_task_tags composite PRIMARY KEY
44
- * - #42 (HIGH): t_task_dependencies composite PRIMARY KEY
45
- */
46
- import { detectProjectNameSync } from '../../../utils/project-detector.js';
47
- export async function up(knex) {
48
- // **BUG FIX v3.7.5**: This migration is SQLite-specific
49
- // MySQL/PostgreSQL compatibility handled by 20251109000002_multi_project_cross_db_compat_v3_7_5.ts
50
- const client = knex.client.config.client;
51
- const isSQLite = client === 'sqlite3' || client === 'better-sqlite3';
52
- if (!isSQLite) {
53
- console.log(`✓ Non-SQLite database (${client}) detected, skipping (handled by 20251109000002)`);
54
- return;
55
- }
56
- // Check if migration already completed
57
- const hasProjectsTable = await knex.schema.hasTable('m_projects');
58
- const hasProjectIdInDecisions = await knex.schema.hasColumn('t_decisions', 'project_id');
59
- const hasMigrationMarker = await knex.schema.hasTable('_multi_project_pk_fixed');
60
- console.log(`🔍 Multi-project migration check:`);
61
- console.log(` - m_projects: ${hasProjectsTable}`);
62
- console.log(` - project_id in t_decisions: ${hasProjectIdInDecisions}`);
63
- console.log(` - migration marker: ${hasMigrationMarker}`);
64
- // If fully migrated, skip
65
- if (hasProjectsTable && hasProjectIdInDecisions && hasMigrationMarker) {
66
- console.log('✓ Multi-project schema already migrated, skipping');
67
- return;
68
- }
69
- console.log('🔄 Starting multi-project support migration v3.7.0 (consolidated)...');
70
- // Disable foreign key constraints temporarily for SQLite
71
- await knex.raw('PRAGMA foreign_keys = OFF');
72
- console.log('✓ Disabled foreign key constraints');
73
- // ============================================================================
74
- // STEP 1: Create m_projects Master Table
75
- // ============================================================================
76
- let defaultProjectId;
77
- // Detect real project name (v3.7.3 fix)
78
- const projectRoot = process.cwd();
79
- const detected = detectProjectNameSync(projectRoot);
80
- if (!hasProjectsTable) {
81
- await knex.schema.createTable('m_projects', (table) => {
82
- table.increments('id').primary();
83
- table.string('name', 64).notNullable().unique();
84
- table.string('display_name', 128);
85
- table.string('detection_source', 20).notNullable(); // 'cli' | 'config' | 'git' | 'metadata' | 'directory'
86
- table.string('project_root_path', 512);
87
- table.integer('created_ts').notNullable();
88
- table.integer('last_active_ts').notNullable();
89
- table.text('metadata'); // JSON string for extensibility
90
- });
91
- // Insert project with REAL detected name (v3.7.3 fix)
92
- const now = Math.floor(Date.now() / 1000);
93
- await knex('m_projects').insert({
94
- id: 1,
95
- name: detected.name,
96
- display_name: detected.name,
97
- detection_source: detected.source,
98
- created_ts: now,
99
- last_active_ts: now,
100
- });
101
- defaultProjectId = 1;
102
- console.log(`✓ Created m_projects table with project "${detected.name}" (ID: ${defaultProjectId}, source: ${detected.source})`);
103
- }
104
- else {
105
- // ========================================================================
106
- // Data Consolidation Strategy (v3.7.3 fix)
107
- // ========================================================================
108
- // Goal: Consolidate everything into project ID 1 with correct name
109
- //
110
- // This ONLY runs if upgrading from v3.7.0-v3.7.2 where:
111
- // - Project #1 was created with fake name "default" or "default-project"
112
- // - User manually created project #2 with real project name
113
- //
114
- // For fresh installs, project #1 is created with real name above,
115
- // so consolidation is skipped.
116
- const existingProject1 = await knex('m_projects')
117
- .where({ id: 1 })
118
- .first();
119
- const existingProject2 = await knex('m_projects')
120
- .where({ id: 2 })
121
- .first();
122
- const FAKE_NAMES = ['default-project', 'default'];
123
- // Check if this is a v3.7.0-v3.7.2 upgrade scenario
124
- // (project #1 has fake name AND project #2 exists)
125
- const isV370UpgradeScenario = existingProject1 &&
126
- existingProject2 &&
127
- FAKE_NAMES.includes(existingProject1.name);
128
- // Perform consolidation ONLY for v3.7.0-v3.7.2 upgrades
129
- if (isV370UpgradeScenario) {
130
- console.log(`🔄 Detected v3.7.0-v3.7.2 upgrade scenario - consolidating projects...`);
131
- console.log(` Project #1: "${existingProject1.name}" (fake name, empty)`);
132
- console.log(` Project #2: "${existingProject2.name}" (real project, has data)`);
133
- console.log(`🔄 Consolidating project #2 into project #1...`);
134
- // STEP 1: Temporarily rename project #2 to avoid conflict
135
- const tempName = `temp-${existingProject2.name}-${Date.now()}`;
136
- await knex('m_projects')
137
- .where({ id: 2 })
138
- .update({ name: tempName });
139
- console.log(` ✓ Temporarily renamed project #2 to "${tempName}"`);
140
- // STEP 2: Rename project #1 to real detected name
141
- await knex('m_projects')
142
- .where({ id: 1 })
143
- .update({
144
- name: detected.name,
145
- display_name: detected.name,
146
- detection_source: detected.source,
147
- last_active_ts: Math.floor(Date.now() / 1000)
148
- });
149
- console.log(` ✓ Renamed project #1 from "${existingProject1.name}" to "${detected.name}"`);
150
- // STEP 3: Migrate ALL data from project_id=2 → 1
151
- const tablesToUpdate = [
152
- 't_decisions',
153
- 't_decisions_numeric',
154
- 't_decision_history',
155
- 't_decision_tags',
156
- 't_decision_scopes',
157
- 't_file_changes',
158
- 't_constraints',
159
- 't_tasks',
160
- 't_task_tags',
161
- 't_task_dependencies',
162
- 't_task_details',
163
- 't_task_file_links',
164
- 't_task_decision_links',
165
- 't_activity_log',
166
- 't_decision_context'
167
- ];
168
- for (const tableName of tablesToUpdate) {
169
- const hasTable = await knex.schema.hasTable(tableName);
170
- if (hasTable) {
171
- const hasProjectId = await knex.schema.hasColumn(tableName, 'project_id');
172
- if (hasProjectId) {
173
- const count = await knex(tableName)
174
- .where({ project_id: 2 })
175
- .update({ project_id: 1 });
176
- if (count > 0) {
177
- console.log(` ✓ Migrated ${count} rows in ${tableName} (project_id: 2→1)`);
178
- }
179
- }
180
- }
181
- }
182
- // STEP 4: Delete project #2
183
- await knex('m_projects').where({ id: 2 }).delete();
184
- console.log(` ✓ Deleted project #2 (data consolidated into project #1)`);
185
- console.log(`✅ Consolidation complete - all data now in project #1 "${detected.name}"`);
186
- }
187
- else if (existingProject1 && FAKE_NAMES.includes(existingProject1.name)) {
188
- // No project #2, just rename project #1
189
- console.log(`🔄 Renaming project #1 from "${existingProject1.name}" to "${detected.name}"`);
190
- await knex('m_projects')
191
- .where({ id: 1 })
192
- .update({
193
- name: detected.name,
194
- display_name: detected.name,
195
- detection_source: detected.source,
196
- last_active_ts: Math.floor(Date.now() / 1000)
197
- });
198
- console.log(`✓ Project #1 renamed to "${detected.name}" (source: ${detected.source})`);
199
- }
200
- else if (existingProject1) {
201
- // User already has real name, don't change it
202
- console.log(`✓ Using existing project "${existingProject1.name}" (ID: 1)`);
203
- }
204
- // Always use project ID 1 after consolidation
205
- defaultProjectId = 1;
206
- }
207
- // ============================================================================
208
- // STEP 2: Drop All Views and Triggers (Before Table Modifications)
209
- // ============================================================================
210
- // Drop ALL views (including old schema views)
211
- const views = await knex.raw(`SELECT name FROM sqlite_master WHERE type='view'`);
212
- for (const view of views) {
213
- await knex.raw(`DROP VIEW IF EXISTS ${view.name}`);
214
- }
215
- console.log(`✓ Dropped all ${views.length} views before table modifications`);
216
- // Drop ALL triggers (old schema compatibility)
217
- const triggers = await knex.raw(`SELECT name FROM sqlite_master WHERE type='trigger'`);
218
- for (const trigger of triggers) {
219
- await knex.raw(`DROP TRIGGER IF EXISTS ${trigger.name}`);
220
- }
221
- console.log(`✓ Dropped all ${triggers.length} triggers before table modifications`);
222
- // Drop old t_agent_messages table if exists (removed in v3.6.5)
223
- await knex.schema.dropTableIfExists('t_agent_messages');
224
- console.log('✓ Dropped t_agent_messages if it existed (removed in v3.6.5)');
225
- // ============================================================================
226
- // STEP 3: Add project_id to Transaction Tables
227
- // ============================================================================
228
- // Helper function to add project_id column using raw SQL (more reliable for old schemas)
229
- async function addProjectIdColumn(tableName, knex, defaultProjectId) {
230
- const hasColumn = await knex.schema.hasColumn(tableName, 'project_id');
231
- if (!hasColumn) {
232
- // Use raw SQL to avoid Knex's schema parsing issues with old schemas
233
- await knex.raw(`ALTER TABLE ${tableName} ADD COLUMN project_id INTEGER NOT NULL DEFAULT ${defaultProjectId}`);
234
- // Add foreign key separately
235
- await knex.raw(`CREATE INDEX IF NOT EXISTS idx_${tableName}_project ON ${tableName}(project_id)`);
236
- console.log(`✓ Added project_id to ${tableName}`);
237
- }
238
- else {
239
- console.log(` ⏭ ${tableName} already has project_id, skipping`);
240
- }
241
- }
242
- // Transaction tables that need project_id
243
- // Note: t_decision_context is handled separately in Step 4 (after PRIMARY KEY fix)
244
- // Note: t_task_details, t_task_tags, t_task_dependencies are recreated in Steps 4.5-4.7 (need table recreation for constraints)
245
- const transactionTables = [
246
- 't_decision_history',
247
- 't_decision_tags',
248
- 't_decision_scopes',
249
- 't_file_changes',
250
- 't_constraints',
251
- 't_tasks',
252
- // 't_task_details', // Handled in STEP 4.7 (needs table recreation)
253
- // 't_task_tags', // Handled in STEP 4.5 (composite PRIMARY KEY)
254
- 't_task_file_links',
255
- 't_task_decision_links',
256
- // 't_task_dependencies', // Handled in STEP 4.6 (composite PRIMARY KEY)
257
- 't_activity_log', // Required for stats.clear to filter by project_id
258
- ];
259
- for (const tableName of transactionTables) {
260
- await addProjectIdColumn(tableName, knex, defaultProjectId);
261
- }
262
- // ============================================================================
263
- // STEP 4: Fix PRIMARY KEY Constraints (t_decisions tables)
264
- // ============================================================================
265
- // For SQLite, we need to recreate tables to change PRIMARY KEY from single-column
266
- // to composite (key_id, project_id)
267
- if (!hasMigrationMarker) {
268
- console.log('🔄 Fixing PRIMARY KEY constraints for t_decisions tables...');
269
- // Drop t_decision_context temporarily (has FK to t_decisions)
270
- let decisionContextData = [];
271
- const hasDecisionContext = await knex.schema.hasTable('t_decision_context');
272
- if (hasDecisionContext) {
273
- decisionContextData = await knex('t_decision_context').select('*');
274
- await knex.schema.dropTable('t_decision_context');
275
- console.log('✓ Temporarily dropped t_decision_context (will recreate)');
276
- }
277
- // 4a. t_decisions
278
- const decisionsData = await knex('t_decisions').select('*');
279
- await knex.schema.dropTableIfExists('t_decisions');
280
- await knex.schema.createTable('t_decisions', (table) => {
281
- table.integer('key_id').unsigned().notNullable();
282
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
283
- table.text('value').notNullable();
284
- table.integer('agent_id').unsigned();
285
- table.integer('layer_id').unsigned();
286
- table.string('version', 20).defaultTo('1.0.0');
287
- table.integer('status').defaultTo(1);
288
- table.integer('ts').notNullable();
289
- // Composite PRIMARY KEY
290
- table.primary(['key_id', 'project_id']);
291
- // Foreign keys
292
- table.foreign('key_id').references('m_context_keys.id');
293
- table.foreign('agent_id').references('m_agents.id');
294
- table.foreign('layer_id').references('m_layers.id');
295
- table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
296
- });
297
- if (decisionsData.length > 0) {
298
- // Ensure project_id is set for existing data
299
- await knex('t_decisions').insert(decisionsData.map((row) => ({
300
- ...row,
301
- project_id: row.project_id || defaultProjectId,
302
- })));
303
- }
304
- console.log(`✓ Recreated t_decisions with composite PRIMARY KEY (${decisionsData.length} rows)`);
305
- // 4b. t_decisions_numeric
306
- const decisionsNumericData = await knex('t_decisions_numeric').select('*');
307
- await knex.schema.dropTableIfExists('t_decisions_numeric');
308
- await knex.schema.createTable('t_decisions_numeric', (table) => {
309
- table.integer('key_id').unsigned().notNullable();
310
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
311
- table.double('value').notNullable();
312
- table.integer('agent_id').unsigned();
313
- table.integer('layer_id').unsigned();
314
- table.string('version', 20).defaultTo('1.0.0');
315
- table.integer('status').defaultTo(1);
316
- table.integer('ts').notNullable();
317
- // Composite PRIMARY KEY
318
- table.primary(['key_id', 'project_id']);
319
- // Foreign keys
320
- table.foreign('key_id').references('m_context_keys.id');
321
- table.foreign('agent_id').references('m_agents.id');
322
- table.foreign('layer_id').references('m_layers.id');
323
- table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
324
- });
325
- if (decisionsNumericData.length > 0) {
326
- await knex('t_decisions_numeric').insert(decisionsNumericData.map((row) => ({
327
- ...row,
328
- project_id: row.project_id || defaultProjectId,
329
- })));
330
- }
331
- console.log(`✓ Recreated t_decisions_numeric with composite PRIMARY KEY (${decisionsNumericData.length} rows)`);
332
- // Create migration marker
333
- await knex.schema.createTable('_multi_project_pk_fixed', (table) => {
334
- table.integer('applied_ts').notNullable();
335
- });
336
- await knex('_multi_project_pk_fixed').insert({
337
- applied_ts: Math.floor(Date.now() / 1000),
338
- });
339
- console.log('✓ Created migration marker table');
340
- // Recreate t_decision_context if it existed
341
- if (hasDecisionContext) {
342
- await knex.schema.createTable('t_decision_context', (table) => {
343
- table.increments('id').primary();
344
- table.integer('decision_key_id').unsigned().notNullable();
345
- table.text('rationale');
346
- table.text('alternatives_considered'); // JSON array (was 'alternatives' - fixed for compatibility)
347
- table.text('tradeoffs'); // JSON object
348
- table.integer('agent_id').unsigned();
349
- table.integer('decision_date').notNullable().defaultTo(knex.raw('(unixepoch())'));
350
- table.integer('related_task_id').unsigned();
351
- table.integer('related_constraint_id').unsigned();
352
- table.integer('ts').notNullable().defaultTo(knex.raw('(unixepoch())'));
353
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
354
- // Foreign keys
355
- table.foreign('decision_key_id').references('m_context_keys.id');
356
- table.foreign('agent_id').references('m_agents.id');
357
- table.foreign('related_task_id').references('t_tasks.id').onDelete('SET NULL');
358
- table.foreign('related_constraint_id').references('t_constraints.id').onDelete('SET NULL');
359
- table.foreign('project_id').references('m_projects.id').onDelete('CASCADE');
360
- // Unique constraint
361
- table.unique(['decision_key_id', 'id']);
362
- });
363
- // Restore data with project_id
364
- if (decisionContextData.length > 0) {
365
- await knex('t_decision_context').insert(decisionContextData.map((row) => ({
366
- ...row,
367
- project_id: row.project_id || defaultProjectId,
368
- })));
369
- }
370
- console.log(`✓ Recreated t_decision_context (${decisionContextData.length} rows)`);
371
- }
372
- }
373
- else {
374
- console.log('✓ PRIMARY KEY constraints already fixed, skipping');
375
- }
376
- // ============================================================================
377
- // STEP 4.5: Fix t_task_tags PRIMARY KEY (Constraint #41)
378
- // ============================================================================
379
- // t_task_tags needs composite PRIMARY KEY (project_id, task_id, tag_id)
380
- // to support ON CONFLICT clause for multi-project tag insertion
381
- const taskTagsHasCorrectPK = await knex.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_tags'`).then((result) => {
382
- const createSql = result[0]?.sql || '';
383
- return createSql.includes('PRIMARY KEY (project_id, task_id, tag_id)') ||
384
- createSql.includes('PRIMARY KEY(project_id, task_id, tag_id)');
385
- });
386
- if (!taskTagsHasCorrectPK) {
387
- console.log('🔄 Fixing t_task_tags PRIMARY KEY to include project_id...');
388
- // Backup existing data
389
- const taskTagsData = await knex('t_task_tags').select('*');
390
- // Drop and recreate table with correct PRIMARY KEY
391
- await knex.schema.dropTableIfExists('t_task_tags');
392
- await knex.schema.createTable('t_task_tags', (table) => {
393
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
394
- table.integer('task_id').unsigned().notNullable();
395
- table.integer('tag_id').unsigned().notNullable();
396
- // Composite PRIMARY KEY with project_id first
397
- table.primary(['project_id', 'task_id', 'tag_id']);
398
- // Foreign keys
399
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
400
- table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
401
- table.foreign('tag_id').references('id').inTable('m_tags');
402
- });
403
- // Restore data with project_id
404
- if (taskTagsData.length > 0) {
405
- await knex('t_task_tags').insert(taskTagsData.map((row) => ({
406
- ...row,
407
- project_id: row.project_id || defaultProjectId,
408
- })));
409
- }
410
- console.log(`✓ Recreated t_task_tags with composite PRIMARY KEY (${taskTagsData.length} rows)`);
411
- }
412
- else {
413
- console.log('✓ t_task_tags PRIMARY KEY already correct, skipping');
414
- }
415
- // STEP 4.6: Fix t_task_dependencies PRIMARY KEY (Constraint #42)
416
- // PRIMARY KEY must be (project_id, blocker_task_id, blocked_task_id) for multi-project support
417
- const taskDepsHasCorrectPK = await knex.raw(`SELECT sql FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'`).then((result) => {
418
- const createSql = result[0]?.sql || '';
419
- return createSql.includes('PRIMARY KEY (project_id, blocker_task_id, blocked_task_id)') ||
420
- createSql.includes('PRIMARY KEY(project_id, blocker_task_id, blocked_task_id)');
421
- });
422
- if (!taskDepsHasCorrectPK) {
423
- console.log('🔄 Fixing t_task_dependencies PRIMARY KEY to include project_id...');
424
- const taskDepsData = await knex('t_task_dependencies').select('*');
425
- await knex.schema.dropTableIfExists('t_task_dependencies');
426
- await knex.schema.createTable('t_task_dependencies', (table) => {
427
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
428
- table.integer('blocker_task_id').unsigned().notNullable();
429
- table.integer('blocked_task_id').unsigned().notNullable();
430
- table.integer('created_ts').notNullable();
431
- table.primary(['project_id', 'blocker_task_id', 'blocked_task_id']);
432
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
433
- table.foreign('blocker_task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
434
- table.foreign('blocked_task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
435
- table.index('blocked_task_id', 'idx_task_deps_blocked');
436
- });
437
- if (taskDepsData.length > 0) {
438
- await knex('t_task_dependencies').insert(taskDepsData.map((row) => ({
439
- ...row,
440
- project_id: row.project_id || defaultProjectId,
441
- })));
442
- }
443
- console.log(`✓ Recreated t_task_dependencies with composite PRIMARY KEY (${taskDepsData.length} rows)`);
444
- }
445
- else {
446
- console.log('✓ t_task_dependencies PRIMARY KEY already correct, skipping');
447
- }
448
- // ============================================================================
449
- // STEP 4.7: Fix t_task_details - Add project_id with table recreation
450
- // ============================================================================
451
- // t_task_details needs project_id but ALTER TABLE may fail due to foreign key constraints
452
- // Recreate table to ensure proper schema
453
- const taskDetailsHasProjectId = await knex.schema.hasColumn('t_task_details', 'project_id');
454
- if (!taskDetailsHasProjectId) {
455
- console.log('🔄 Adding project_id to t_task_details (table recreation)...');
456
- // Backup existing data
457
- const taskDetailsData = await knex('t_task_details').select('*');
458
- // Get project_id mapping from t_tasks
459
- const tasksWithProjects = await knex('t_tasks')
460
- .select('id', 'project_id')
461
- .whereIn('id', taskDetailsData.map((row) => row.task_id));
462
- const projectMap = new Map(tasksWithProjects.map((t) => [t.id, t.project_id]));
463
- // Drop and recreate table with project_id
464
- await knex.schema.dropTableIfExists('t_task_details');
465
- await knex.schema.createTable('t_task_details', (table) => {
466
- table.integer('task_id').primary();
467
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
468
- table.text('description');
469
- table.text('acceptance_criteria');
470
- table.text('notes');
471
- table.text('acceptance_criteria_json');
472
- // Foreign keys
473
- table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
474
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
475
- // Index for project-scoped queries
476
- table.index(['project_id', 'task_id'], 'idx_task_details_project');
477
- });
478
- // Restore data with project_id from parent tasks
479
- if (taskDetailsData.length > 0) {
480
- await knex('t_task_details').insert(taskDetailsData.map((row) => ({
481
- ...row,
482
- project_id: projectMap.get(row.task_id) || defaultProjectId,
483
- })));
484
- }
485
- console.log(`✓ Recreated t_task_details with project_id (${taskDetailsData.length} rows)`);
486
- }
487
- else {
488
- console.log('✓ t_task_details already has project_id, skipping');
489
- }
490
- // ============================================================================
491
- // STEP 4.8: Fix t_task_file_links - Add project_id with table recreation
492
- // ============================================================================
493
- // t_task_file_links needs project_id but ALTER TABLE may fail due to foreign key constraints
494
- // Recreate table to ensure proper schema
495
- const taskFileLinksHasProjectId = await knex.schema.hasColumn('t_task_file_links', 'project_id');
496
- if (!taskFileLinksHasProjectId) {
497
- console.log('🔄 Adding project_id to t_task_file_links (table recreation)...');
498
- // Backup existing data
499
- const taskFileLinksData = await knex('t_task_file_links').select('*');
500
- // Get project_id mapping from t_tasks
501
- const tasksWithProjects2 = await knex('t_tasks')
502
- .select('id', 'project_id')
503
- .whereIn('id', taskFileLinksData.map((row) => row.task_id));
504
- const projectMap2 = new Map(tasksWithProjects2.map((t) => [t.id, t.project_id]));
505
- // Drop and recreate table with project_id
506
- await knex.schema.dropTableIfExists('t_task_file_links');
507
- await knex.schema.createTable('t_task_file_links', (table) => {
508
- table.increments('id').primary();
509
- table.integer('task_id').unsigned().notNullable();
510
- table.integer('file_id').unsigned().notNullable();
511
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
512
- table.integer('linked_ts').notNullable();
513
- // Foreign keys
514
- table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
515
- table.foreign('file_id').references('id').inTable('m_files');
516
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
517
- // Indexes
518
- table.index('task_id', 'idx_task_file_links_task');
519
- table.index(['project_id', 'task_id'], 'idx_task_file_links_project');
520
- });
521
- // Restore data with project_id from parent tasks
522
- if (taskFileLinksData.length > 0) {
523
- await knex('t_task_file_links').insert(taskFileLinksData.map((row) => ({
524
- ...row,
525
- project_id: projectMap2.get(row.task_id) || defaultProjectId,
526
- })));
527
- }
528
- console.log(`✓ Recreated t_task_file_links with project_id (${taskFileLinksData.length} rows)`);
529
- }
530
- else {
531
- console.log('✓ t_task_file_links already has project_id, skipping');
532
- }
533
- // ============================================================================
534
- // STEP 4.9: Fix t_task_decision_links - Add project_id with table recreation
535
- // ============================================================================
536
- // t_task_decision_links needs project_id but ALTER TABLE may fail due to foreign key constraints
537
- // Recreate table to ensure proper schema
538
- const taskDecisionLinksHasProjectId = await knex.schema.hasColumn('t_task_decision_links', 'project_id');
539
- if (!taskDecisionLinksHasProjectId) {
540
- console.log('🔄 Adding project_id to t_task_decision_links (table recreation)...');
541
- // Backup existing data
542
- const taskDecisionLinksData = await knex('t_task_decision_links').select('*');
543
- // Get project_id mapping from t_tasks
544
- const tasksWithProjects3 = await knex('t_tasks')
545
- .select('id', 'project_id')
546
- .whereIn('id', taskDecisionLinksData.map((row) => row.task_id));
547
- const projectMap3 = new Map(tasksWithProjects3.map((t) => [t.id, t.project_id]));
548
- // Drop and recreate table with project_id
549
- await knex.schema.dropTableIfExists('t_task_decision_links');
550
- await knex.schema.createTable('t_task_decision_links', (table) => {
551
- table.increments('id').primary();
552
- table.integer('task_id').unsigned().notNullable();
553
- table.integer('decision_key_id').unsigned().notNullable();
554
- table.integer('project_id').unsigned().notNullable().defaultTo(defaultProjectId);
555
- table.text('link_type').defaultTo('implements');
556
- table.integer('linked_ts').notNullable();
557
- // Foreign keys
558
- table.foreign('task_id').references('id').inTable('t_tasks').onDelete('CASCADE');
559
- table.foreign('decision_key_id').references('id').inTable('m_context_keys');
560
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
561
- // Indexes
562
- table.index('task_id', 'idx_task_decision_links_task');
563
- table.index('decision_key_id', 'idx_task_decision_links_decision');
564
- table.index(['project_id', 'task_id'], 'idx_task_decision_links_project');
565
- });
566
- // Restore data with project_id from parent tasks
567
- if (taskDecisionLinksData.length > 0) {
568
- await knex('t_task_decision_links').insert(taskDecisionLinksData.map((row) => ({
569
- ...row,
570
- project_id: projectMap3.get(row.task_id) || defaultProjectId,
571
- })));
572
- }
573
- console.log(`✓ Recreated t_task_decision_links with project_id (${taskDecisionLinksData.length} rows)`);
574
- }
575
- else {
576
- console.log('✓ t_task_decision_links already has project_id, skipping');
577
- }
578
- // ============================================================================
579
- // STEP 5: Recreate m_config Table
580
- // ============================================================================
581
- // m_config needs special handling to avoid nullable composite PRIMARY KEY
582
- // We use a single-column PRIMARY KEY on 'key' and project_id is nullable
583
- const configHasProjectId = await knex.schema.hasColumn('m_config', 'project_id');
584
- if (!configHasProjectId) {
585
- console.log('🔄 Recreating m_config table with multi-project support...');
586
- // Drop temp table if exists from previous partial run
587
- await knex.schema.dropTableIfExists('m_config_new');
588
- // Create new m_config table with project_id
589
- await knex.schema.createTable('m_config_new', (table) => {
590
- table.string('key', 64).notNullable();
591
- table.integer('project_id').unsigned().nullable(); // Nullable for global config
592
- table.text('value').notNullable();
593
- // Single-column PRIMARY KEY (key only)
594
- table.primary(['key']);
595
- // Foreign key with CASCADE delete
596
- table.foreign('project_id').references('id').inTable('m_projects').onDelete('CASCADE');
597
- // Composite index for project-scoped lookups
598
- table.index(['project_id', 'key'], 'idx_config_project_key');
599
- });
600
- // Migrate existing config data
601
- const existingConfig = await knex('m_config').select('key', 'value');
602
- if (existingConfig.length > 0) {
603
- await knex('m_config_new').insert(existingConfig.map((row) => ({
604
- key: row.key,
605
- project_id: null, // Global config has NULL project_id
606
- value: row.value,
607
- })));
608
- }
609
- // Swap tables
610
- await knex.schema.dropTable('m_config');
611
- await knex.schema.renameTable('m_config_new', 'm_config');
612
- console.log(`✓ Recreated m_config table (${existingConfig.length} rows migrated)`);
613
- }
614
- else {
615
- console.log('✓ m_config already has project_id, skipping');
616
- }
617
- // ============================================================================
618
- // STEP 6: Create Composite Indexes (Constraint #39)
619
- // ============================================================================
620
- // All multi-project indexes should have project_id first for optimal performance
621
- const indexes = [
622
- { table: 't_decisions', columns: ['project_id', 'key_id'], name: 'idx_decisions_project_key' },
623
- { table: 't_decisions', columns: ['project_id', 'ts'], name: 'idx_decisions_project_ts' },
624
- { table: 't_decisions_numeric', columns: ['project_id', 'key_id'], name: 'idx_decisions_numeric_project_key' },
625
- { table: 't_decision_tags', columns: ['project_id', 'decision_key_id'], name: 'idx_decision_tags_project_key' },
626
- { table: 't_tasks', columns: ['project_id', 'status_id'], name: 'idx_tasks_project_status' },
627
- { table: 't_tasks', columns: ['project_id', 'created_ts'], name: 'idx_tasks_project_created' },
628
- ];
629
- for (const { table, columns, name } of indexes) {
630
- try {
631
- // Check if index already exists
632
- const indexCheck = await knex.raw(`SELECT name FROM sqlite_master WHERE type='index' AND name=?`, [name]);
633
- if (!indexCheck || indexCheck.length === 0) {
634
- await knex.schema.alterTable(table, (tbl) => {
635
- tbl.index(columns, name);
636
- });
637
- console.log(`✓ Created index ${name}`);
638
- }
639
- else {
640
- console.log(` ⏭ Index ${name} already exists, skipping`);
641
- }
642
- }
643
- catch (error) {
644
- // Ignore duplicate index errors
645
- if (!error.message.includes('already exists')) {
646
- throw error;
647
- }
648
- console.log(` ⏭ Index ${name} already exists, skipping`);
649
- }
650
- }
651
- // ============================================================================
652
- // STEP 7: Recreate All Views with Multi-Project Support
653
- // ============================================================================
654
- console.log('🔄 Recreating views with multi-project support...');
655
- // v_tagged_decisions - Must match bootstrap schema (20251025070349_create_views.ts)
656
- await knex.raw(`
657
- CREATE VIEW v_tagged_decisions AS
658
- SELECT
659
- k.key,
660
- d.value,
661
- d.version,
662
- CASE d.status WHEN 1 THEN 'active' WHEN 2 THEN 'deprecated' ELSE 'draft' END as status,
663
- d.project_id,
664
- l.name as layer,
665
- (SELECT GROUP_CONCAT(t2.name, ',') FROM t_decision_tags dt2
666
- JOIN m_tags t2 ON dt2.tag_id = t2.id
667
- WHERE dt2.decision_key_id = d.key_id AND dt2.project_id = d.project_id) as tags,
668
- (SELECT GROUP_CONCAT(s2.name, ',') FROM t_decision_scopes ds2
669
- JOIN m_scopes s2 ON ds2.scope_id = s2.id
670
- WHERE ds2.decision_key_id = d.key_id AND ds2.project_id = d.project_id) as scopes,
671
- a.name as decided_by,
672
- datetime(d.ts, 'unixepoch') as updated
673
- FROM t_decisions d
674
- JOIN m_context_keys k ON d.key_id = k.id
675
- LEFT JOIN m_layers l ON d.layer_id = l.id
676
- LEFT JOIN m_agents a ON d.agent_id = a.id
677
- `);
678
- // v_active_context
679
- await knex.raw(`
680
- CREATE VIEW v_active_context AS
681
- SELECT
682
- k.key,
683
- d.value,
684
- d.project_id,
685
- l.name as layer,
686
- a.name as decided_by,
687
- datetime(d.ts, 'unixepoch') as updated
688
- FROM t_decisions d
689
- JOIN m_context_keys k ON d.key_id = k.id
690
- LEFT JOIN m_layers l ON d.layer_id = l.id
691
- LEFT JOIN m_agents a ON d.agent_id = a.id
692
- WHERE d.status = 1 AND d.ts > (strftime('%s','now') - 3600)
693
- ORDER BY d.ts DESC
694
- `);
695
- // v_layer_summary - Must match bootstrap schema (correct column names)
696
- await knex.raw(`
697
- CREATE VIEW v_layer_summary AS
698
- SELECT
699
- l.name as layer,
700
- l.id as layer_id,
701
- (SELECT COUNT(DISTINCT d2.key_id) FROM t_decisions d2
702
- WHERE d2.layer_id = l.id AND d2.status = 1 AND d2.project_id = d.project_id) as decisions_count,
703
- (SELECT COUNT(DISTINCT fc2.id) FROM t_file_changes fc2
704
- WHERE fc2.layer_id = l.id AND fc2.ts > (strftime('%s','now') - 3600) AND fc2.project_id = d.project_id) as file_changes_count,
705
- (SELECT COUNT(DISTINCT c2.id) FROM t_constraints c2
706
- WHERE c2.layer_id = l.id AND c2.active = 1 AND c2.project_id = d.project_id) as constraints_count,
707
- d.project_id
708
- FROM m_layers l
709
- CROSS JOIN (SELECT DISTINCT project_id FROM t_decisions) d
710
- GROUP BY l.id, l.name, d.project_id
711
- `);
712
- // v_recent_file_changes
713
- await knex.raw(`
714
- CREATE VIEW v_recent_file_changes AS
715
- SELECT f.path as file_path,
716
- fc.project_id,
717
- l.name as layer,
718
- a.name as changed_by,
719
- datetime(fc.ts, 'unixepoch') as changed_at
720
- FROM t_file_changes fc
721
- JOIN m_files f ON fc.file_id = f.id
722
- LEFT JOIN m_layers l ON fc.layer_id = l.id
723
- LEFT JOIN m_agents a ON fc.agent_id = a.id
724
- ORDER BY fc.ts DESC
725
- LIMIT 50
726
- `);
727
- // v_tagged_constraints
728
- await knex.raw(`
729
- CREATE VIEW v_tagged_constraints AS
730
- SELECT c.id,
731
- c.constraint_text,
732
- c.project_id,
733
- cat.name as category,
734
- c.priority,
735
- a.name as author,
736
- datetime(c.ts, 'unixepoch') as created
737
- FROM t_constraints c
738
- LEFT JOIN m_constraint_categories cat ON c.category_id = cat.id
739
- LEFT JOIN m_agents a ON c.agent_id = a.id
740
- WHERE c.active = 1
741
- ORDER BY c.priority DESC, c.ts DESC
742
- `);
743
- // v_task_board - Must match bootstrap schema (include all columns)
744
- await knex.raw(`
745
- CREATE VIEW v_task_board AS
746
- SELECT
747
- t.id,
748
- t.title,
749
- t.project_id,
750
- s.name as status,
751
- t.priority,
752
- a.name as assigned_to,
753
- l.name as layer,
754
- t.created_ts,
755
- t.updated_ts,
756
- t.completed_ts,
757
- (SELECT GROUP_CONCAT(tg2.name, ', ')
758
- FROM t_task_tags tt2
759
- JOIN m_tags tg2 ON tt2.tag_id = tg2.id
760
- WHERE tt2.task_id = t.id AND tt2.project_id = t.project_id) as tags
761
- FROM t_tasks t
762
- LEFT JOIN m_task_statuses s ON t.status_id = s.id
763
- LEFT JOIN m_agents a ON t.assigned_agent_id = a.id
764
- LEFT JOIN m_layers l ON t.layer_id = l.id
765
- `);
766
- console.log('✓ Recreated all 6 views with project_id support');
767
- // ============================================================================
768
- // STEP 8: Re-enable Foreign Key Constraints
769
- // ============================================================================
770
- await knex.raw('PRAGMA foreign_keys = ON');
771
- console.log('✓ Re-enabled foreign key constraints');
772
- console.log('✅ Multi-project support migration v3.7.0 completed successfully');
773
- }
774
- export async function down(knex) {
775
- console.log('🔄 Rolling back multi-project support migration...');
776
- // Drop views
777
- await knex.raw('DROP VIEW IF EXISTS v_tagged_decisions');
778
- await knex.raw('DROP VIEW IF EXISTS v_active_context');
779
- await knex.raw('DROP VIEW IF EXISTS v_layer_summary');
780
- await knex.raw('DROP VIEW IF EXISTS v_recent_file_changes');
781
- await knex.raw('DROP VIEW IF EXISTS v_tagged_constraints');
782
- await knex.raw('DROP VIEW IF EXISTS v_task_board');
783
- // Drop indexes
784
- const indexes = [
785
- 'idx_decisions_project_key',
786
- 'idx_decisions_project_ts',
787
- 'idx_decisions_numeric_project_key',
788
- 'idx_decision_tags_project_key',
789
- 'idx_tasks_project_status',
790
- 'idx_tasks_project_created',
791
- 'idx_config_project_key',
792
- ];
793
- for (const indexName of indexes) {
794
- await knex.raw(`DROP INDEX IF EXISTS ${indexName}`);
795
- }
796
- // Restore m_config to original structure
797
- const configHasProjectId = await knex.schema.hasColumn('m_config', 'project_id');
798
- if (configHasProjectId) {
799
- await knex.schema.dropTableIfExists('m_config_old');
800
- await knex.schema.createTable('m_config_old', (table) => {
801
- table.string('key', 64).primary();
802
- table.text('value').notNullable();
803
- });
804
- const configData = await knex('m_config').where({ project_id: null }).select('key', 'value');
805
- if (configData.length > 0) {
806
- await knex('m_config_old').insert(configData);
807
- }
808
- await knex.schema.dropTable('m_config');
809
- await knex.schema.renameTable('m_config_old', 'm_config');
810
- }
811
- // Restore t_decisions tables to single-column PRIMARY KEY
812
- const decisionsData = await knex('t_decisions').select('*');
813
- await knex.schema.dropTableIfExists('t_decisions');
814
- await knex.schema.createTable('t_decisions', (table) => {
815
- table.integer('key_id').unsigned().primary();
816
- table.text('value').notNullable();
817
- table.integer('agent_id').unsigned();
818
- table.integer('layer_id').unsigned();
819
- table.string('version', 20).defaultTo('1.0.0');
820
- table.integer('status').defaultTo(1);
821
- table.integer('ts').notNullable();
822
- table.foreign('key_id').references('m_context_keys.id');
823
- table.foreign('agent_id').references('m_agents.id');
824
- table.foreign('layer_id').references('m_layers.id');
825
- });
826
- // Note: Data may be lost if there were multiple projects
827
- if (decisionsData.length > 0) {
828
- await knex('t_decisions').insert(decisionsData.map((row) => {
829
- const { project_id, ...rest } = row;
830
- return rest;
831
- }));
832
- }
833
- // Same for t_decisions_numeric
834
- const decisionsNumericData = await knex('t_decisions_numeric').select('*');
835
- await knex.schema.dropTableIfExists('t_decisions_numeric');
836
- await knex.schema.createTable('t_decisions_numeric', (table) => {
837
- table.integer('key_id').unsigned().primary();
838
- table.double('value').notNullable();
839
- table.integer('agent_id').unsigned();
840
- table.integer('layer_id').unsigned();
841
- table.string('version', 20).defaultTo('1.0.0');
842
- table.integer('status').defaultTo(1);
843
- table.integer('ts').notNullable();
844
- table.foreign('key_id').references('m_context_keys.id');
845
- table.foreign('agent_id').references('m_agents.id');
846
- table.foreign('layer_id').references('m_layers.id');
847
- });
848
- if (decisionsNumericData.length > 0) {
849
- await knex('t_decisions_numeric').insert(decisionsNumericData.map((row) => {
850
- const { project_id, ...rest } = row;
851
- return rest;
852
- }));
853
- }
854
- // Remove project_id from all transaction tables
855
- const transactionTables = [
856
- 't_task_dependencies',
857
- 't_task_decision_links',
858
- 't_task_file_links',
859
- 't_task_tags',
860
- 't_task_details',
861
- 't_tasks',
862
- 't_constraints',
863
- 't_file_changes',
864
- 't_decision_context',
865
- 't_decision_scopes',
866
- 't_decision_tags',
867
- 't_decision_history',
868
- ];
869
- for (const tableName of transactionTables) {
870
- const hasTable = await knex.schema.hasTable(tableName);
871
- if (hasTable) {
872
- const hasColumn = await knex.schema.hasColumn(tableName, 'project_id');
873
- if (hasColumn) {
874
- await knex.schema.alterTable(tableName, (table) => {
875
- table.dropColumn('project_id');
876
- });
877
- console.log(`✓ Removed project_id from ${tableName}`);
878
- }
879
- }
880
- }
881
- // Drop migration marker
882
- await knex.schema.dropTableIfExists('_multi_project_pk_fixed');
883
- // Drop m_projects table
884
- await knex.schema.dropTableIfExists('m_projects');
885
- // Recreate original views (without project_id)
886
- await knex.raw(`
887
- CREATE VIEW v_tagged_decisions AS
888
- SELECT
889
- k.key,
890
- d.value,
891
- l.name as layer,
892
- a.name as decided_by,
893
- datetime(d.ts, 'unixepoch') as updated,
894
- GROUP_CONCAT(t.name, ', ') as tags
895
- FROM t_decisions d
896
- JOIN m_context_keys k ON d.key_id = k.id
897
- LEFT JOIN m_layers l ON d.layer_id = l.id
898
- LEFT JOIN m_agents a ON d.agent_id = a.id
899
- LEFT JOIN t_decision_tags dt ON d.key_id = dt.decision_key_id
900
- LEFT JOIN m_tags t ON dt.tag_id = t.id
901
- WHERE d.status = 1
902
- GROUP BY d.key_id
903
- ORDER BY d.ts DESC
904
- `);
905
- await knex.raw(`
906
- CREATE VIEW v_active_context AS
907
- SELECT
908
- k.key,
909
- d.value,
910
- l.name as layer,
911
- a.name as decided_by,
912
- datetime(d.ts, 'unixepoch') as updated
913
- FROM t_decisions d
914
- JOIN m_context_keys k ON d.key_id = k.id
915
- LEFT JOIN m_layers l ON d.layer_id = l.id
916
- LEFT JOIN m_agents a ON d.agent_id = a.id
917
- WHERE d.status = 1 AND d.ts > (strftime('%s','now') - 3600)
918
- ORDER BY d.ts DESC
919
- `);
920
- await knex.raw(`
921
- CREATE VIEW v_layer_summary AS
922
- SELECT l.name as layer,
923
- COUNT(*) as decision_count
924
- FROM t_decisions d
925
- JOIN m_layers l ON d.layer_id = l.id
926
- WHERE d.status = 1
927
- GROUP BY l.id, l.name
928
- ORDER BY decision_count DESC
929
- `);
930
- await knex.raw(`
931
- CREATE VIEW v_recent_file_changes AS
932
- SELECT f.path as file_path,
933
- l.name as layer,
934
- a.name as changed_by,
935
- datetime(fc.ts, 'unixepoch') as changed_at
936
- FROM t_file_changes fc
937
- JOIN m_files f ON fc.file_id = f.id
938
- LEFT JOIN m_layers l ON fc.layer_id = l.id
939
- LEFT JOIN m_agents a ON fc.agent_id = a.id
940
- ORDER BY fc.ts DESC
941
- LIMIT 50
942
- `);
943
- await knex.raw(`
944
- CREATE VIEW v_tagged_constraints AS
945
- SELECT c.id,
946
- c.constraint_text,
947
- c.project_id,
948
- cat.name as category,
949
- c.priority,
950
- a.name as author,
951
- datetime(c.ts, 'unixepoch') as created
952
- FROM t_constraints c
953
- LEFT JOIN m_constraint_categories cat ON c.category_id = cat.id
954
- LEFT JOIN m_agents a ON c.agent_id = a.id
955
- WHERE c.active = 1
956
- ORDER BY c.priority DESC, c.ts DESC
957
- `);
958
- await knex.raw(`
959
- CREATE VIEW v_task_board AS
960
- SELECT t.id,
961
- t.title,
962
- ts.name as status,
963
- t.priority,
964
- a.name as assigned_to,
965
- datetime(t.created_ts, 'unixepoch') as created,
966
- datetime(t.updated_ts, 'unixepoch') as updated
967
- FROM t_tasks t
968
- JOIN m_task_statuses ts ON t.status_id = ts.id
969
- LEFT JOIN m_agents a ON t.assigned_agent_id = a.id
970
- ORDER BY t.priority DESC, t.created_ts DESC
971
- `);
972
- console.log('✅ Multi-project rollback completed');
973
- }
974
- //# sourceMappingURL=20251104000000_add_multi_project_v3_7_0.js.map