sqlew 4.3.0 → 5.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 (858) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/LICENSE +1 -1
  3. package/NOTICE +2 -2
  4. package/README.md +338 -269
  5. package/assets/claude-md-snippets/plan-mode-integration.md +104 -48
  6. package/assets/claude-md-snippets/queue-monitoring.md +84 -0
  7. package/dist/backend/backend-factory.d.ts +67 -0
  8. package/dist/backend/backend-factory.d.ts.map +1 -0
  9. package/dist/backend/backend-factory.js +171 -0
  10. package/dist/backend/backend-factory.js.map +1 -0
  11. package/dist/backend/index.d.ts +12 -0
  12. package/dist/backend/index.d.ts.map +1 -0
  13. package/dist/backend/index.js +13 -0
  14. package/dist/backend/index.js.map +1 -0
  15. package/dist/backend/inference.d.ts +38 -0
  16. package/dist/backend/inference.d.ts.map +1 -0
  17. package/dist/backend/inference.js +76 -0
  18. package/dist/backend/inference.js.map +1 -0
  19. package/dist/backend/local-backend.d.ts +40 -0
  20. package/dist/backend/local-backend.d.ts.map +1 -0
  21. package/dist/backend/local-backend.js +410 -0
  22. package/dist/backend/local-backend.js.map +1 -0
  23. package/dist/backend/transforming-backend.d.ts +47 -0
  24. package/dist/backend/transforming-backend.d.ts.map +1 -0
  25. package/dist/backend/transforming-backend.js +80 -0
  26. package/dist/backend/transforming-backend.js.map +1 -0
  27. package/dist/backend/types.d.ts +58 -0
  28. package/dist/backend/types.d.ts.map +1 -0
  29. package/dist/backend/types.js +7 -0
  30. package/dist/backend/types.js.map +1 -0
  31. package/dist/cli/db-dump.js +45 -45
  32. package/dist/cli/db-dump.js.map +1 -1
  33. package/dist/cli/db-export.js +30 -30
  34. package/dist/cli/db-export.js.map +1 -1
  35. package/dist/cli/db-import.d.ts.map +1 -1
  36. package/dist/cli/db-import.js +32 -33
  37. package/dist/cli/db-import.js.map +1 -1
  38. package/dist/cli/hooks/check-completion.d.ts +1 -0
  39. package/dist/cli/hooks/check-completion.d.ts.map +1 -1
  40. package/dist/cli/hooks/check-completion.js +15 -26
  41. package/dist/cli/hooks/check-completion.js.map +1 -1
  42. package/dist/cli/hooks/mark-done.d.ts +1 -0
  43. package/dist/cli/hooks/mark-done.d.ts.map +1 -1
  44. package/dist/cli/hooks/mark-done.js +12 -17
  45. package/dist/cli/hooks/mark-done.js.map +1 -1
  46. package/dist/cli/hooks/on-enter-plan.js +2 -2
  47. package/dist/cli/hooks/on-enter-plan.js.map +1 -1
  48. package/dist/cli/hooks/on-session-start.d.ts +23 -0
  49. package/dist/cli/hooks/on-session-start.d.ts.map +1 -0
  50. package/dist/cli/hooks/on-session-start.js +70 -0
  51. package/dist/cli/hooks/on-session-start.js.map +1 -0
  52. package/dist/cli/hooks/on-stop.js +5 -5
  53. package/dist/cli/hooks/on-stop.js.map +1 -1
  54. package/dist/cli/hooks/{plan-toml-parser.d.ts → plan-parser.d.ts} +1 -1
  55. package/dist/cli/hooks/plan-parser.d.ts.map +1 -0
  56. package/dist/cli/hooks/{plan-toml-parser.js → plan-parser.js} +1 -1
  57. package/dist/cli/hooks/plan-parser.js.map +1 -0
  58. package/dist/cli/hooks/plan-pattern-extractor.d.ts.map +1 -1
  59. package/dist/cli/hooks/plan-pattern-extractor.js +6 -3
  60. package/dist/cli/hooks/plan-pattern-extractor.js.map +1 -1
  61. package/dist/cli/hooks/plan-processor.js +1 -1
  62. package/dist/cli/hooks/plan-processor.js.map +1 -1
  63. package/dist/cli/hooks/stdin-parser.d.ts +4 -0
  64. package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
  65. package/dist/cli/hooks/stdin-parser.js.map +1 -1
  66. package/dist/cli/hooks/suggest.js +2 -2
  67. package/dist/cli/hooks/suggest.js.map +1 -1
  68. package/dist/cli/hooks/track-plan.d.ts.map +1 -1
  69. package/dist/cli/hooks/track-plan.js +24 -18
  70. package/dist/cli/hooks/track-plan.js.map +1 -1
  71. package/dist/cli.d.ts.map +1 -1
  72. package/dist/cli.js +108 -108
  73. package/dist/cli.js.map +1 -1
  74. package/dist/config/cloud-config-loader.d.ts +107 -0
  75. package/dist/config/cloud-config-loader.d.ts.map +1 -0
  76. package/dist/config/cloud-config-loader.js +273 -0
  77. package/dist/config/cloud-config-loader.js.map +1 -0
  78. package/dist/config/global-config.d.ts +10 -10
  79. package/dist/config/global-config.d.ts.map +1 -1
  80. package/dist/config/global-config.js +12 -12
  81. package/dist/config/global-config.js.map +1 -1
  82. package/dist/config/loader.d.ts.map +1 -1
  83. package/dist/config/loader.js +5 -1
  84. package/dist/config/loader.js.map +1 -1
  85. package/dist/config/minimal-generator.d.ts.map +1 -1
  86. package/dist/config/minimal-generator.js +22 -72
  87. package/dist/config/minimal-generator.js.map +1 -1
  88. package/dist/config/types.d.ts +59 -1
  89. package/dist/config/types.d.ts.map +1 -1
  90. package/dist/config/types.js +14 -0
  91. package/dist/config/types.js.map +1 -1
  92. package/dist/constants.d.ts +1 -29
  93. package/dist/constants.d.ts.map +1 -1
  94. package/dist/constants.js +1 -38
  95. package/dist/constants.js.map +1 -1
  96. package/dist/database/initialization/cleanup.d.ts.map +1 -1
  97. package/dist/database/initialization/cleanup.js +0 -13
  98. package/dist/database/initialization/cleanup.js.map +1 -1
  99. package/dist/database/initialization/init.d.ts.map +1 -1
  100. package/dist/database/initialization/init.js +0 -9
  101. package/dist/database/initialization/init.js.map +1 -1
  102. package/dist/database/initialization/schema-version.d.ts +4 -4
  103. package/dist/database/initialization/schema-version.js +9 -9
  104. package/dist/database/initialization/schema-version.js.map +1 -1
  105. package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.d.ts +36 -0
  106. package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.d.ts.map +1 -0
  107. package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.js +135 -0
  108. package/dist/database/migrations/v4/20260107000000_v5_drop_task_file_tables.js.map +1 -0
  109. package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.d.ts +20 -0
  110. package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.d.ts.map +1 -0
  111. package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.js +168 -0
  112. package/dist/database/migrations/v4/20260107000001_v5_drop_legacy_tables.js.map +1 -0
  113. package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.d.ts +23 -0
  114. package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.d.ts.map +1 -0
  115. package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.js +570 -0
  116. package/dist/database/migrations/v4/20260108000000_v5_rename_to_m_t_prefix.js.map +1 -0
  117. package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.d.ts +29 -0
  118. package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.d.ts.map +1 -0
  119. package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.js +80 -0
  120. package/dist/database/migrations/v4/20260109000000_v5_drop_help_tables.js.map +1 -0
  121. package/dist/database/operations/inserts.js +11 -11
  122. package/dist/database/operations/inserts.js.map +1 -1
  123. package/dist/database/operations/queries.js +9 -9
  124. package/dist/database/operations/queries.js.map +1 -1
  125. package/dist/formatters/adr-formatter.d.ts +22 -0
  126. package/dist/formatters/adr-formatter.d.ts.map +1 -0
  127. package/dist/formatters/adr-formatter.js +127 -0
  128. package/dist/formatters/adr-formatter.js.map +1 -0
  129. package/dist/formatters/confluence-formatter.d.ts +26 -0
  130. package/dist/formatters/confluence-formatter.d.ts.map +1 -0
  131. package/dist/formatters/confluence-formatter.js +129 -0
  132. package/dist/formatters/confluence-formatter.js.map +1 -0
  133. package/dist/formatters/index.d.ts +34 -0
  134. package/dist/formatters/index.d.ts.map +1 -0
  135. package/dist/formatters/index.js +57 -0
  136. package/dist/formatters/index.js.map +1 -0
  137. package/dist/formatters/markdown-formatter.d.ts +16 -0
  138. package/dist/formatters/markdown-formatter.d.ts.map +1 -0
  139. package/dist/formatters/markdown-formatter.js +110 -0
  140. package/dist/formatters/markdown-formatter.js.map +1 -0
  141. package/dist/formatters/notion-formatter.d.ts +29 -0
  142. package/dist/formatters/notion-formatter.d.ts.map +1 -0
  143. package/dist/formatters/notion-formatter.js +177 -0
  144. package/dist/formatters/notion-formatter.js.map +1 -0
  145. package/dist/formatters/types.d.ts +31 -0
  146. package/dist/formatters/types.d.ts.map +1 -0
  147. package/dist/formatters/types.js +6 -0
  148. package/dist/formatters/types.js.map +1 -0
  149. package/dist/help-data/_schema.toml +21 -0
  150. package/dist/help-data/constraint.toml +259 -0
  151. package/dist/help-data/decision.toml +833 -0
  152. package/dist/help-data/example.toml +177 -0
  153. package/dist/help-data/help.toml +246 -0
  154. package/dist/help-data/queue.toml +134 -0
  155. package/dist/help-data/suggest.toml +219 -0
  156. package/dist/help-data/use-cases/_categories.toml +22 -0
  157. package/dist/help-data/use-cases/constraint-basic.toml +34 -0
  158. package/dist/help-data/use-cases/cross-tool-workflow.toml +50 -0
  159. package/dist/help-data/use-cases/decision-intelligence-duplicate.toml +35 -0
  160. package/dist/help-data/use-cases/decision-intelligence-related.toml +35 -0
  161. package/dist/help-data/use-cases/decision-tracking-basic.toml +42 -0
  162. package/dist/help-data/use-cases/decision-tracking-versions.toml +42 -0
  163. package/dist/help-data/use_case.toml +147 -0
  164. package/dist/help-loader.d.ts +194 -0
  165. package/dist/help-loader.d.ts.map +1 -0
  166. package/dist/help-loader.js +419 -0
  167. package/dist/help-loader.js.map +1 -0
  168. package/dist/index.js +15 -10
  169. package/dist/index.js.map +1 -1
  170. package/dist/init-rules.d.ts +42 -0
  171. package/dist/init-rules.d.ts.map +1 -0
  172. package/dist/init-rules.js +217 -0
  173. package/dist/init-rules.js.map +1 -0
  174. package/dist/schema.d.ts +4 -6
  175. package/dist/schema.d.ts.map +1 -1
  176. package/dist/schema.js +28 -45
  177. package/dist/schema.js.map +1 -1
  178. package/dist/server/setup.d.ts +0 -10
  179. package/dist/server/setup.d.ts.map +1 -1
  180. package/dist/server/setup.js +97 -89
  181. package/dist/server/setup.js.map +1 -1
  182. package/dist/server/shutdown.d.ts +1 -1
  183. package/dist/server/shutdown.d.ts.map +1 -1
  184. package/dist/server/shutdown.js +1 -16
  185. package/dist/server/shutdown.js.map +1 -1
  186. package/dist/server/tool-handlers.d.ts +15 -0
  187. package/dist/server/tool-handlers.d.ts.map +1 -1
  188. package/dist/server/tool-handlers.js +47 -462
  189. package/dist/server/tool-handlers.js.map +1 -1
  190. package/dist/server/tool-registry.d.ts.map +1 -1
  191. package/dist/server/tool-registry.js +50 -62
  192. package/dist/server/tool-registry.js.map +1 -1
  193. package/dist/tests/backend/backend-factory.test.d.ts +7 -0
  194. package/dist/tests/backend/backend-factory.test.d.ts.map +1 -0
  195. package/dist/tests/backend/backend-factory.test.js +157 -0
  196. package/dist/tests/backend/backend-factory.test.js.map +1 -0
  197. package/dist/tests/backend/inference.test.d.ts +7 -0
  198. package/dist/tests/backend/inference.test.d.ts.map +1 -0
  199. package/dist/tests/backend/inference.test.js +142 -0
  200. package/dist/tests/backend/inference.test.js.map +1 -0
  201. package/dist/tests/database/multi-project/multi-project.test.js +9 -70
  202. package/dist/tests/database/multi-project/multi-project.test.js.map +1 -1
  203. package/dist/tests/database/sql-dump/table-ordering.test.js +14 -14
  204. package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -1
  205. package/dist/tests/docker/cross-database.test.js +32 -32
  206. package/dist/tests/docker/cross-database.test.js.map +1 -1
  207. package/dist/tests/docker/dump-import.test.js +55 -55
  208. package/dist/tests/docker/dump-import.test.js.map +1 -1
  209. package/dist/tests/docker/fk-constraints.test.js +3 -3
  210. package/dist/tests/docker/indexes.test.js +34 -34
  211. package/dist/tests/docker/integration.test.js +33 -33
  212. package/dist/tests/docker/multi-project-migration.test.js +47 -47
  213. package/dist/tests/docker/multi-project-migration.test.js.map +1 -1
  214. package/dist/tests/docker/native/constraint-operations.test.js +49 -49
  215. package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
  216. package/dist/tests/docker/native/db-init.d.ts +3 -1
  217. package/dist/tests/docker/native/db-init.d.ts.map +1 -1
  218. package/dist/tests/docker/native/db-init.js +14 -12
  219. package/dist/tests/docker/native/db-init.js.map +1 -1
  220. package/dist/tests/docker/native/decision-operations.test.js +91 -91
  221. package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
  222. package/dist/tests/docker/native/help-system.test.d.ts +2 -2
  223. package/dist/tests/docker/native/help-system.test.js +113 -138
  224. package/dist/tests/docker/native/help-system.test.js.map +1 -1
  225. package/dist/tests/docker/native/suggest-tool.test.d.ts +2 -2
  226. package/dist/tests/docker/native/suggest-tool.test.js +35 -35
  227. package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
  228. package/dist/tests/docker/native/test-harness.d.ts +6 -12
  229. package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
  230. package/dist/tests/docker/native/test-harness.js +74 -156
  231. package/dist/tests/docker/native/test-harness.js.map +1 -1
  232. package/dist/tests/docker/schema-migration.test.js +6 -6
  233. package/dist/tests/feature/decision/batch-validation-comprehensive.test.d.ts +3 -7
  234. package/dist/tests/feature/decision/batch-validation-comprehensive.test.d.ts.map +1 -1
  235. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +7 -318
  236. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
  237. package/dist/tests/feature/help/help-system.test.d.ts +6 -6
  238. package/dist/tests/feature/help/help-system.test.js +166 -124
  239. package/dist/tests/feature/help/help-system.test.js.map +1 -1
  240. package/dist/tests/integration/auto-trigger-suggestions.test.js +22 -22
  241. package/dist/tests/integration/auto-trigger-suggestions.test.js.map +1 -1
  242. package/dist/tests/integration/decision-intelligence-e2e.test.js +23 -22
  243. package/dist/tests/integration/decision-intelligence-e2e.test.js.map +1 -1
  244. package/dist/tests/integration/e2e-workflow1-debug.test.js +3 -3
  245. package/dist/tests/integration/e2e-workflow1-debug.test.js.map +1 -1
  246. package/dist/tests/integration/hybrid-similarity-detection.test.js +25 -25
  247. package/dist/tests/integration/hybrid-similarity-detection.test.js.map +1 -1
  248. package/dist/tests/integration/suggest-simple.test.js +18 -0
  249. package/dist/tests/integration/suggest-simple.test.js.map +1 -1
  250. package/dist/tests/migrations/test-all-versions.js +212 -212
  251. package/dist/tests/migrations/test-all-versions.js.map +1 -1
  252. package/dist/tests/migrations/v4/v4-fresh-install.test.js +29 -29
  253. package/dist/tests/migrations/v4/v4-fresh-install.test.js.map +1 -1
  254. package/dist/tests/migrations/v4/v4-migrate-data.test.js +20 -20
  255. package/dist/tests/migrations/v4/v4-migrate-data.test.js.map +1 -1
  256. package/dist/tests/test-v4-native-rdbms.js +20 -20
  257. package/dist/tests/test-v4-native-rdbms.js.map +1 -1
  258. package/dist/tests/unit/config/cloud-config-loader.test.d.ts +2 -0
  259. package/dist/tests/unit/config/cloud-config-loader.test.d.ts.map +1 -0
  260. package/dist/tests/unit/config/cloud-config-loader.test.js +103 -0
  261. package/dist/tests/unit/config/cloud-config-loader.test.js.map +1 -0
  262. package/dist/tests/unit/config/{plan-toml-cache.test.d.ts → plan-cache.test.d.ts} +1 -1
  263. package/dist/tests/unit/config/plan-cache.test.d.ts.map +1 -0
  264. package/dist/tests/unit/config/{plan-toml-cache.test.js → plan-cache.test.js} +32 -32
  265. package/dist/tests/unit/config/plan-cache.test.js.map +1 -0
  266. package/dist/tests/unit/hooks/{plan-toml-parser.test.d.ts → plan-parser.test.d.ts} +1 -1
  267. package/dist/tests/unit/hooks/plan-parser.test.d.ts.map +1 -0
  268. package/dist/tests/unit/hooks/{plan-toml-parser.test.js → plan-parser.test.js} +179 -179
  269. package/dist/tests/unit/hooks/plan-parser.test.js.map +1 -0
  270. package/dist/tests/unit/server/tool-handlers.test.d.ts +7 -0
  271. package/dist/tests/unit/server/tool-handlers.test.d.ts.map +1 -0
  272. package/dist/tests/unit/server/tool-handlers.test.js +76 -0
  273. package/dist/tests/unit/server/tool-handlers.test.js.map +1 -0
  274. package/dist/tests/unit/utils/config-loader.test.js +17 -17
  275. package/dist/tests/unit/utils/connection-hash.test.d.ts +2 -0
  276. package/dist/tests/unit/utils/connection-hash.test.d.ts.map +1 -0
  277. package/dist/tests/unit/utils/connection-hash.test.js +57 -0
  278. package/dist/tests/unit/utils/connection-hash.test.js.map +1 -0
  279. package/dist/tests/unit/utils/environment-detector.test.d.ts +2 -0
  280. package/dist/tests/unit/utils/environment-detector.test.d.ts.map +1 -0
  281. package/dist/tests/unit/utils/environment-detector.test.js +43 -0
  282. package/dist/tests/unit/utils/environment-detector.test.js.map +1 -0
  283. package/dist/tests/unit/utils/path-utils.test.d.ts +2 -0
  284. package/dist/tests/unit/utils/path-utils.test.d.ts.map +1 -0
  285. package/dist/tests/unit/utils/path-utils.test.js +72 -0
  286. package/dist/tests/unit/utils/path-utils.test.js.map +1 -0
  287. package/dist/tests/unit/utils/project-detector.test.js +14 -13
  288. package/dist/tests/unit/utils/project-detector.test.js.map +1 -1
  289. package/dist/tests/unit/validation/parameter-validation.test.d.ts +2 -1
  290. package/dist/tests/unit/validation/parameter-validation.test.d.ts.map +1 -1
  291. package/dist/tests/unit/validation/parameter-validation.test.js +5 -133
  292. package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
  293. package/dist/tests/unit/validation/policy-validation.test.js +15 -15
  294. package/dist/tests/unit/validation/policy-validation.test.js.map +1 -1
  295. package/dist/tests/utils/db-schema.js +48 -48
  296. package/dist/tests/utils/db-seeding.js +11 -11
  297. package/dist/tests/utils/db-seeding.js.map +1 -1
  298. package/dist/tests/utils/json-export-import.test.d.ts +6 -0
  299. package/dist/tests/utils/json-export-import.test.d.ts.map +1 -0
  300. package/dist/tests/utils/json-export-import.test.js +474 -0
  301. package/dist/tests/utils/json-export-import.test.js.map +1 -0
  302. package/dist/tests/utils/test-helpers.js +59 -59
  303. package/dist/tests/utils/test-helpers.js.map +1 -1
  304. package/dist/tools/constraints/actions/activate.d.ts +2 -2
  305. package/dist/tools/constraints/actions/activate.d.ts.map +1 -1
  306. package/dist/tools/constraints/actions/activate.js +12 -12
  307. package/dist/tools/constraints/actions/activate.js.map +1 -1
  308. package/dist/tools/constraints/actions/add.js +3 -3
  309. package/dist/tools/constraints/actions/add.js.map +1 -1
  310. package/dist/tools/constraints/actions/deactivate.js +6 -6
  311. package/dist/tools/constraints/actions/deactivate.js.map +1 -1
  312. package/dist/tools/constraints/actions/get.d.ts +2 -2
  313. package/dist/tools/constraints/actions/get.js +9 -9
  314. package/dist/tools/constraints/actions/get.js.map +1 -1
  315. package/dist/tools/constraints/actions/suggest-pending.js +2 -2
  316. package/dist/tools/constraints/actions/suggest-pending.js.map +1 -1
  317. package/dist/tools/constraints/index.d.ts +1 -1
  318. package/dist/tools/constraints/index.d.ts.map +1 -1
  319. package/dist/tools/constraints/index.js +1 -1
  320. package/dist/tools/constraints/index.js.map +1 -1
  321. package/dist/tools/context/actions/create-policy.js +3 -3
  322. package/dist/tools/context/actions/create-policy.js.map +1 -1
  323. package/dist/tools/context/actions/create-template.js +2 -2
  324. package/dist/tools/context/actions/create-template.js.map +1 -1
  325. package/dist/tools/context/actions/export.d.ts +35 -0
  326. package/dist/tools/context/actions/export.d.ts.map +1 -0
  327. package/dist/tools/context/actions/export.js +93 -0
  328. package/dist/tools/context/actions/export.js.map +1 -0
  329. package/dist/tools/context/actions/hard-delete.js +11 -11
  330. package/dist/tools/context/actions/hard-delete.js.map +1 -1
  331. package/dist/tools/context/actions/has-updates.d.ts +1 -1
  332. package/dist/tools/context/actions/has-updates.d.ts.map +1 -1
  333. package/dist/tools/context/actions/has-updates.js +5 -17
  334. package/dist/tools/context/actions/has-updates.js.map +1 -1
  335. package/dist/tools/context/actions/list-policies.js +1 -1
  336. package/dist/tools/context/actions/list-policies.js.map +1 -1
  337. package/dist/tools/context/actions/list-templates.js +2 -2
  338. package/dist/tools/context/actions/list-templates.js.map +1 -1
  339. package/dist/tools/context/actions/list.js +1 -1
  340. package/dist/tools/context/actions/list.js.map +1 -1
  341. package/dist/tools/context/actions/search-layer.js +8 -8
  342. package/dist/tools/context/actions/search-layer.js.map +1 -1
  343. package/dist/tools/context/actions/set-from-policy.js +1 -1
  344. package/dist/tools/context/actions/set-from-policy.js.map +1 -1
  345. package/dist/tools/context/actions/set-from-template.js +2 -2
  346. package/dist/tools/context/actions/set-from-template.js.map +1 -1
  347. package/dist/tools/context/actions/versions.js +3 -3
  348. package/dist/tools/context/actions/versions.js.map +1 -1
  349. package/dist/tools/context/index.d.ts +1 -0
  350. package/dist/tools/context/index.d.ts.map +1 -1
  351. package/dist/tools/context/index.js +2 -0
  352. package/dist/tools/context/index.js.map +1 -1
  353. package/dist/tools/context/internal/queries.d.ts.map +1 -1
  354. package/dist/tools/context/internal/queries.js +54 -43
  355. package/dist/tools/context/internal/queries.js.map +1 -1
  356. package/dist/tools/context/types.d.ts +1 -1
  357. package/dist/tools/context/types.d.ts.map +1 -1
  358. package/dist/tools/example/actions/get.d.ts +8 -3
  359. package/dist/tools/example/actions/get.d.ts.map +1 -1
  360. package/dist/tools/example/actions/get.js +29 -30
  361. package/dist/tools/example/actions/get.js.map +1 -1
  362. package/dist/tools/example/actions/list-all.d.ts +8 -2
  363. package/dist/tools/example/actions/list-all.d.ts.map +1 -1
  364. package/dist/tools/example/actions/list-all.js +37 -29
  365. package/dist/tools/example/actions/list-all.js.map +1 -1
  366. package/dist/tools/example/actions/search.d.ts +8 -3
  367. package/dist/tools/example/actions/search.d.ts.map +1 -1
  368. package/dist/tools/example/actions/search.js +29 -43
  369. package/dist/tools/example/actions/search.js.map +1 -1
  370. package/dist/tools/help/actions/batch-guide.js +5 -5
  371. package/dist/tools/help/actions/batch-guide.js.map +1 -1
  372. package/dist/tools/help/actions/query-action.d.ts +7 -3
  373. package/dist/tools/help/actions/query-action.d.ts.map +1 -1
  374. package/dist/tools/help/actions/query-action.js +35 -6
  375. package/dist/tools/help/actions/query-action.js.map +1 -1
  376. package/dist/tools/help/actions/query-params.d.ts +5 -3
  377. package/dist/tools/help/actions/query-params.d.ts.map +1 -1
  378. package/dist/tools/help/actions/query-params.js +28 -6
  379. package/dist/tools/help/actions/query-params.js.map +1 -1
  380. package/dist/tools/help/actions/query-tool.d.ts +5 -3
  381. package/dist/tools/help/actions/query-tool.d.ts.map +1 -1
  382. package/dist/tools/help/actions/query-tool.js +23 -6
  383. package/dist/tools/help/actions/query-tool.js.map +1 -1
  384. package/dist/tools/help/actions/workflow-hints.d.ts +5 -3
  385. package/dist/tools/help/actions/workflow-hints.d.ts.map +1 -1
  386. package/dist/tools/help/actions/workflow-hints.js +21 -6
  387. package/dist/tools/help/actions/workflow-hints.js.map +1 -1
  388. package/dist/tools/queue/actions/clear.d.ts +19 -0
  389. package/dist/tools/queue/actions/clear.d.ts.map +1 -0
  390. package/dist/tools/queue/actions/clear.js +79 -0
  391. package/dist/tools/queue/actions/clear.js.map +1 -0
  392. package/dist/tools/queue/actions/list.d.ts +16 -0
  393. package/dist/tools/queue/actions/list.d.ts.map +1 -0
  394. package/dist/tools/queue/actions/list.js +95 -0
  395. package/dist/tools/queue/actions/list.js.map +1 -0
  396. package/dist/tools/queue/actions/remove.d.ts +19 -0
  397. package/dist/tools/queue/actions/remove.d.ts.map +1 -0
  398. package/dist/tools/queue/actions/remove.js +81 -0
  399. package/dist/tools/queue/actions/remove.js.map +1 -0
  400. package/dist/tools/queue/index.d.ts +13 -0
  401. package/dist/tools/queue/index.d.ts.map +1 -0
  402. package/dist/tools/queue/index.js +13 -0
  403. package/dist/tools/queue/index.js.map +1 -0
  404. package/dist/tools/queue/types.d.ts +87 -0
  405. package/dist/tools/queue/types.d.ts.map +1 -0
  406. package/dist/tools/queue/types.js +9 -0
  407. package/dist/tools/queue/types.js.map +1 -0
  408. package/dist/tools/suggest/actions/by-context.d.ts.map +1 -1
  409. package/dist/tools/suggest/actions/by-context.js +7 -15
  410. package/dist/tools/suggest/actions/by-context.js.map +1 -1
  411. package/dist/tools/suggest/actions/by-key.d.ts.map +1 -1
  412. package/dist/tools/suggest/actions/by-key.js +7 -15
  413. package/dist/tools/suggest/actions/by-key.js.map +1 -1
  414. package/dist/tools/suggest/actions/by-tags.d.ts +2 -2
  415. package/dist/tools/suggest/actions/by-tags.d.ts.map +1 -1
  416. package/dist/tools/suggest/actions/by-tags.js +8 -18
  417. package/dist/tools/suggest/actions/by-tags.js.map +1 -1
  418. package/dist/tools/suggest/actions/constraint-by-context.d.ts +1 -1
  419. package/dist/tools/suggest/actions/constraint-by-context.d.ts.map +1 -1
  420. package/dist/tools/suggest/actions/constraint-by-context.js +9 -16
  421. package/dist/tools/suggest/actions/constraint-by-context.js.map +1 -1
  422. package/dist/tools/suggest/actions/constraint-by-tags.d.ts +1 -1
  423. package/dist/tools/suggest/actions/constraint-by-tags.d.ts.map +1 -1
  424. package/dist/tools/suggest/actions/constraint-by-tags.js +11 -17
  425. package/dist/tools/suggest/actions/constraint-by-tags.js.map +1 -1
  426. package/dist/tools/suggest/actions/constraint-by-text.d.ts +1 -1
  427. package/dist/tools/suggest/actions/constraint-by-text.d.ts.map +1 -1
  428. package/dist/tools/suggest/actions/constraint-by-text.js +6 -15
  429. package/dist/tools/suggest/actions/constraint-by-text.js.map +1 -1
  430. package/dist/tools/suggest/internal/constraint-queries.d.ts +4 -4
  431. package/dist/tools/suggest/internal/constraint-queries.js +14 -14
  432. package/dist/tools/suggest/internal/constraint-queries.js.map +1 -1
  433. package/dist/tools/suggest/internal/queries.d.ts +4 -4
  434. package/dist/tools/suggest/internal/queries.js +25 -25
  435. package/dist/tools/suggest/internal/queries.js.map +1 -1
  436. package/dist/tools/use_case/actions/get.d.ts +5 -3
  437. package/dist/tools/use_case/actions/get.d.ts.map +1 -1
  438. package/dist/tools/use_case/actions/get.js +20 -6
  439. package/dist/tools/use_case/actions/get.js.map +1 -1
  440. package/dist/tools/use_case/actions/list-all.d.ts +5 -3
  441. package/dist/tools/use_case/actions/list-all.d.ts.map +1 -1
  442. package/dist/tools/use_case/actions/list-all.js +36 -6
  443. package/dist/tools/use_case/actions/list-all.js.map +1 -1
  444. package/dist/tools/use_case/actions/search.d.ts +6 -3
  445. package/dist/tools/use_case/actions/search.d.ts.map +1 -1
  446. package/dist/tools/use_case/actions/search.js +37 -67
  447. package/dist/tools/use_case/actions/search.js.map +1 -1
  448. package/dist/tools/use_case/help/example.js +17 -17
  449. package/dist/tools/use_case/help/example.js.map +1 -1
  450. package/dist/types.d.ts +81 -380
  451. package/dist/types.d.ts.map +1 -1
  452. package/dist/types.js +0 -10
  453. package/dist/types.js.map +1 -1
  454. package/dist/utils/action-specs/constraint-specs.js +6 -6
  455. package/dist/utils/action-specs/constraint-specs.js.map +1 -1
  456. package/dist/utils/action-specs/index.d.ts +0 -2
  457. package/dist/utils/action-specs/index.d.ts.map +1 -1
  458. package/dist/utils/action-specs/index.js +0 -6
  459. package/dist/utils/action-specs/index.js.map +1 -1
  460. package/dist/utils/batch-validation.d.ts +1 -1
  461. package/dist/utils/batch-validation.js +3 -3
  462. package/dist/utils/batch-validation.js.map +1 -1
  463. package/dist/utils/case-insensitive-validator.d.ts +2 -2
  464. package/dist/utils/case-insensitive-validator.js +2 -2
  465. package/dist/utils/connection-hash.d.ts +37 -0
  466. package/dist/utils/connection-hash.d.ts.map +1 -0
  467. package/dist/utils/connection-hash.js +55 -0
  468. package/dist/utils/connection-hash.js.map +1 -0
  469. package/dist/utils/db-aggregations.js +16 -16
  470. package/dist/utils/db-aggregations.js.map +1 -1
  471. package/dist/utils/enum-converter.d.ts +0 -21
  472. package/dist/utils/enum-converter.d.ts.map +1 -1
  473. package/dist/utils/enum-converter.js +1 -23
  474. package/dist/utils/enum-converter.js.map +1 -1
  475. package/dist/utils/environment-detector.d.ts +30 -0
  476. package/dist/utils/environment-detector.d.ts.map +1 -0
  477. package/dist/utils/environment-detector.js +86 -0
  478. package/dist/utils/environment-detector.js.map +1 -0
  479. package/dist/utils/example-filter.d.ts +34 -0
  480. package/dist/utils/example-filter.d.ts.map +1 -0
  481. package/dist/utils/example-filter.js +45 -0
  482. package/dist/utils/example-filter.js.map +1 -0
  483. package/dist/utils/exporter/export.d.ts +2 -16
  484. package/dist/utils/exporter/export.d.ts.map +1 -1
  485. package/dist/utils/exporter/export.js +49 -130
  486. package/dist/utils/exporter/export.js.map +1 -1
  487. package/dist/utils/hook-queue.d.ts +60 -0
  488. package/dist/utils/hook-queue.d.ts.map +1 -1
  489. package/dist/utils/hook-queue.js +114 -11
  490. package/dist/utils/hook-queue.js.map +1 -1
  491. package/dist/utils/importer/import.d.ts.map +1 -1
  492. package/dist/utils/importer/import.js +33 -188
  493. package/dist/utils/importer/import.js.map +1 -1
  494. package/dist/utils/importer/master-tables.d.ts +2 -1
  495. package/dist/utils/importer/master-tables.d.ts.map +1 -1
  496. package/dist/utils/importer/master-tables.js +35 -81
  497. package/dist/utils/importer/master-tables.js.map +1 -1
  498. package/dist/utils/param-normalizer.d.ts +0 -1
  499. package/dist/utils/param-normalizer.d.ts.map +1 -1
  500. package/dist/utils/param-normalizer.js +1 -3
  501. package/dist/utils/param-normalizer.js.map +1 -1
  502. package/dist/utils/path-utils.d.ts +46 -0
  503. package/dist/utils/path-utils.d.ts.map +1 -0
  504. package/dist/utils/path-utils.js +74 -0
  505. package/dist/utils/path-utils.js.map +1 -0
  506. package/dist/utils/policy-validator.js +1 -1
  507. package/dist/utils/policy-validator.js.map +1 -1
  508. package/dist/utils/project-context.d.ts +23 -0
  509. package/dist/utils/project-context.d.ts.map +1 -1
  510. package/dist/utils/project-context.js +45 -3
  511. package/dist/utils/project-context.js.map +1 -1
  512. package/dist/utils/project-root.d.ts +2 -2
  513. package/dist/utils/project-root.js +2 -2
  514. package/dist/utils/sql-dump/core/index-export.js +7 -7
  515. package/dist/utils/sql-dump/schema/indexes.js +24 -24
  516. package/dist/utils/sql-dump/schema/tables.js +44 -44
  517. package/dist/utils/suggest-helpers.d.ts +82 -0
  518. package/dist/utils/suggest-helpers.d.ts.map +1 -0
  519. package/dist/utils/suggest-helpers.js +93 -0
  520. package/dist/utils/suggest-helpers.js.map +1 -0
  521. package/dist/utils/token-logging.js +6 -6
  522. package/dist/utils/token-logging.js.map +1 -1
  523. package/dist/utils/validators.js +1 -1
  524. package/dist/utils/validators.js.map +1 -1
  525. package/dist/utils/view-queries.d.ts +0 -8
  526. package/dist/utils/view-queries.d.ts.map +1 -1
  527. package/dist/utils/view-queries.js +29 -84
  528. package/dist/utils/view-queries.js.map +1 -1
  529. package/dist/watcher/index.d.ts +1 -4
  530. package/dist/watcher/index.d.ts.map +1 -1
  531. package/dist/watcher/index.js +1 -3
  532. package/dist/watcher/index.js.map +1 -1
  533. package/dist/watcher/queue-watcher.d.ts +10 -3
  534. package/dist/watcher/queue-watcher.d.ts.map +1 -1
  535. package/dist/watcher/queue-watcher.js +24 -21
  536. package/dist/watcher/queue-watcher.js.map +1 -1
  537. package/docs/CONFIGURATION.md +14 -14
  538. package/docs/DATABASE_AUTH.md +1 -1
  539. package/docs/HOOKS_GUIDE.md +30 -50
  540. package/docs/HOW_TO_UNINSTALL.md +199 -0
  541. package/docs/MIGRATION_CLEANUP_GUIDE.md +212 -0
  542. package/docs/MIGRATION_TO_SAAS.md +176 -0
  543. package/docs/SLASH_COMMANDS.md +1 -1
  544. package/docs/cli/DATABASE_MIGRATION.md +13 -13
  545. package/docs/cli/DATA_EXPORT_IMPORT.md +71 -69
  546. package/package.json +10 -8
  547. package/saas-connector/LICENSE +190 -0
  548. package/saas-connector/README.md +122 -0
  549. package/saas-connector/dist/auth/auth-manager.d.ts +6 -0
  550. package/saas-connector/dist/auth/auth-manager.d.ts.map +1 -0
  551. package/saas-connector/dist/auth/auth-manager.js +39 -0
  552. package/saas-connector/dist/auth/auth-manager.js.map +7 -0
  553. package/saas-connector/dist/backend/saas-backend.d.ts +20 -0
  554. package/saas-connector/dist/backend/saas-backend.d.ts.map +1 -0
  555. package/saas-connector/dist/backend/saas-backend.js +104 -0
  556. package/saas-connector/dist/backend/saas-backend.js.map +7 -0
  557. package/saas-connector/dist/client/http-client.d.ts +33 -0
  558. package/saas-connector/dist/client/http-client.d.ts.map +1 -0
  559. package/saas-connector/dist/client/http-client.js +226 -0
  560. package/saas-connector/dist/client/http-client.js.map +7 -0
  561. package/saas-connector/dist/client/types.d.ts +62 -0
  562. package/saas-connector/dist/client/types.d.ts.map +1 -0
  563. package/saas-connector/dist/client/types.js +17 -0
  564. package/saas-connector/dist/client/types.js.map +7 -0
  565. package/saas-connector/dist/config/constants.d.ts +14 -0
  566. package/saas-connector/dist/config/constants.d.ts.map +1 -0
  567. package/saas-connector/dist/config/constants.js +68 -0
  568. package/saas-connector/dist/config/constants.js.map +7 -0
  569. package/saas-connector/dist/errors/api-error.d.ts +26 -0
  570. package/saas-connector/dist/errors/api-error.d.ts.map +1 -0
  571. package/saas-connector/dist/errors/api-error.js +62 -0
  572. package/saas-connector/dist/errors/api-error.js.map +7 -0
  573. package/saas-connector/dist/index.d.ts +18 -0
  574. package/saas-connector/dist/index.d.ts.map +1 -0
  575. package/saas-connector/dist/index.js +51 -0
  576. package/saas-connector/dist/index.js.map +7 -0
  577. package/saas-connector/package-lock.json +518 -0
  578. package/saas-connector/package.json +34 -0
  579. package/scripts/copy-help-data.js +19 -0
  580. package/assets/config.example.toml +0 -282
  581. package/assets/kanban-style.png +0 -0
  582. package/assets/kanban-visualizer.png +0 -0
  583. package/assets/sample-agents/README.md +0 -36
  584. package/assets/sample-agents/sqlew-architect.md +0 -321
  585. package/assets/sample-agents/sqlew-researcher.md +0 -292
  586. package/assets/sample-agents/sqlew-scrum-master.md +0 -286
  587. package/assets/sample-commands/README.md +0 -56
  588. package/assets/sample-commands/sqlew.md +0 -144
  589. package/assets/sample-skills/sqlew-decision-format/SKILL.md +0 -73
  590. package/assets/sample-skills/sqlew-plan-guidance/SKILL.md +0 -62
  591. package/assets/schema.sql +0 -564
  592. package/dist/cli/hooks/init-hooks.d.ts +0 -35
  593. package/dist/cli/hooks/init-hooks.d.ts.map +0 -1
  594. package/dist/cli/hooks/init-hooks.js +0 -517
  595. package/dist/cli/hooks/init-hooks.js.map +0 -1
  596. package/dist/cli/hooks/plan-toml-parser.d.ts.map +0 -1
  597. package/dist/cli/hooks/plan-toml-parser.js.map +0 -1
  598. package/dist/init-agents.d.ts +0 -7
  599. package/dist/init-agents.d.ts.map +0 -1
  600. package/dist/init-agents.js +0 -206
  601. package/dist/init-agents.js.map +0 -1
  602. package/dist/init-commands.d.ts +0 -10
  603. package/dist/init-commands.d.ts.map +0 -1
  604. package/dist/init-commands.js +0 -46
  605. package/dist/init-commands.js.map +0 -1
  606. package/dist/init-skills.d.ts +0 -25
  607. package/dist/init-skills.d.ts.map +0 -1
  608. package/dist/init-skills.js +0 -160
  609. package/dist/init-skills.js.map +0 -1
  610. package/dist/sync-agents.d.ts +0 -13
  611. package/dist/sync-agents.d.ts.map +0 -1
  612. package/dist/sync-agents.js +0 -157
  613. package/dist/sync-agents.js.map +0 -1
  614. package/dist/sync-commands.d.ts +0 -13
  615. package/dist/sync-commands.d.ts.map +0 -1
  616. package/dist/sync-commands.js +0 -150
  617. package/dist/sync-commands.js.map +0 -1
  618. package/dist/sync-gitignore.d.ts +0 -13
  619. package/dist/sync-gitignore.d.ts.map +0 -1
  620. package/dist/sync-gitignore.js +0 -60
  621. package/dist/sync-gitignore.js.map +0 -1
  622. package/dist/tests/docker/native/task-operations.test.d.ts +0 -16
  623. package/dist/tests/docker/native/task-operations.test.d.ts.map +0 -1
  624. package/dist/tests/docker/native/task-operations.test.js +0 -800
  625. package/dist/tests/docker/native/task-operations.test.js.map +0 -1
  626. package/dist/tests/feature/decision/batch-validation-integration.test.d.ts +0 -6
  627. package/dist/tests/feature/decision/batch-validation-integration.test.d.ts.map +0 -1
  628. package/dist/tests/feature/decision/batch-validation-integration.test.js +0 -193
  629. package/dist/tests/feature/decision/batch-validation-integration.test.js.map +0 -1
  630. package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts +0 -6
  631. package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts.map +0 -1
  632. package/dist/tests/feature/task/auto-pruning-decision-link.test.js +0 -281
  633. package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +0 -1
  634. package/dist/tests/feature/task/auto-pruning-partial.test.d.ts +0 -6
  635. package/dist/tests/feature/task/auto-pruning-partial.test.d.ts.map +0 -1
  636. package/dist/tests/feature/task/auto-pruning-partial.test.js +0 -305
  637. package/dist/tests/feature/task/auto-pruning-partial.test.js.map +0 -1
  638. package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts +0 -6
  639. package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts.map +0 -1
  640. package/dist/tests/feature/task/auto-pruning-persistence.test.js +0 -267
  641. package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +0 -1
  642. package/dist/tests/feature/task/auto-pruning-safety.test.d.ts +0 -12
  643. package/dist/tests/feature/task/auto-pruning-safety.test.d.ts.map +0 -1
  644. package/dist/tests/feature/task/auto-pruning-safety.test.js +0 -224
  645. package/dist/tests/feature/task/auto-pruning-safety.test.js.map +0 -1
  646. package/dist/tests/feature/task/dependencies.test.d.ts +0 -7
  647. package/dist/tests/feature/task/dependencies.test.d.ts.map +0 -1
  648. package/dist/tests/feature/task/dependencies.test.js +0 -656
  649. package/dist/tests/feature/task/dependencies.test.js.map +0 -1
  650. package/dist/tests/feature/task/file-actions-integration.test.d.ts +0 -10
  651. package/dist/tests/feature/task/file-actions-integration.test.d.ts.map +0 -1
  652. package/dist/tests/feature/task/file-actions-integration.test.js +0 -162
  653. package/dist/tests/feature/task/file-actions-integration.test.js.map +0 -1
  654. package/dist/tests/feature/task/file-actions-validation.test.d.ts +0 -6
  655. package/dist/tests/feature/task/file-actions-validation.test.d.ts.map +0 -1
  656. package/dist/tests/feature/task/file-actions-validation.test.js +0 -228
  657. package/dist/tests/feature/task/file-actions-validation.test.js.map +0 -1
  658. package/dist/tests/feature/task/link-file-backward-compat.test.d.ts +0 -6
  659. package/dist/tests/feature/task/link-file-backward-compat.test.d.ts.map +0 -1
  660. package/dist/tests/feature/task/link-file-backward-compat.test.js +0 -280
  661. package/dist/tests/feature/task/link-file-backward-compat.test.js.map +0 -1
  662. package/dist/tests/feature/task/watch-files-action.test.d.ts +0 -8
  663. package/dist/tests/feature/task/watch-files-action.test.d.ts.map +0 -1
  664. package/dist/tests/feature/task/watch-files-action.test.js +0 -402
  665. package/dist/tests/feature/task/watch-files-action.test.js.map +0 -1
  666. package/dist/tests/feature/task/watch-files-parameter.test.d.ts +0 -8
  667. package/dist/tests/feature/task/watch-files-parameter.test.d.ts.map +0 -1
  668. package/dist/tests/feature/task/watch-files-parameter.test.js +0 -283
  669. package/dist/tests/feature/task/watch-files-parameter.test.js.map +0 -1
  670. package/dist/tests/integration/all-features.standalone.d.ts +0 -7
  671. package/dist/tests/integration/all-features.standalone.d.ts.map +0 -1
  672. package/dist/tests/integration/all-features.standalone.js +0 -417
  673. package/dist/tests/integration/all-features.standalone.js.map +0 -1
  674. package/dist/tests/unit/config/plan-toml-cache.test.d.ts.map +0 -1
  675. package/dist/tests/unit/config/plan-toml-cache.test.js.map +0 -1
  676. package/dist/tests/unit/hooks/plan-toml-parser.test.d.ts.map +0 -1
  677. package/dist/tests/unit/hooks/plan-toml-parser.test.js.map +0 -1
  678. package/dist/tools/files/actions/check-lock.d.ts +0 -16
  679. package/dist/tools/files/actions/check-lock.d.ts.map +0 -1
  680. package/dist/tools/files/actions/check-lock.js +0 -74
  681. package/dist/tools/files/actions/check-lock.js.map +0 -1
  682. package/dist/tools/files/actions/get.d.ts +0 -16
  683. package/dist/tools/files/actions/get.d.ts.map +0 -1
  684. package/dist/tools/files/actions/get.js +0 -85
  685. package/dist/tools/files/actions/get.js.map +0 -1
  686. package/dist/tools/files/actions/record-batch.d.ts +0 -18
  687. package/dist/tools/files/actions/record-batch.d.ts.map +0 -1
  688. package/dist/tools/files/actions/record-batch.js +0 -119
  689. package/dist/tools/files/actions/record-batch.js.map +0 -1
  690. package/dist/tools/files/actions/record.d.ts +0 -16
  691. package/dist/tools/files/actions/record.d.ts.map +0 -1
  692. package/dist/tools/files/actions/record.js +0 -43
  693. package/dist/tools/files/actions/record.js.map +0 -1
  694. package/dist/tools/files/actions/sqlite-flush.d.ts +0 -27
  695. package/dist/tools/files/actions/sqlite-flush.d.ts.map +0 -1
  696. package/dist/tools/files/actions/sqlite-flush.js +0 -66
  697. package/dist/tools/files/actions/sqlite-flush.js.map +0 -1
  698. package/dist/tools/files/help/example.d.ts +0 -5
  699. package/dist/tools/files/help/example.d.ts.map +0 -1
  700. package/dist/tools/files/help/example.js +0 -98
  701. package/dist/tools/files/help/example.js.map +0 -1
  702. package/dist/tools/files/help/help.d.ts +0 -5
  703. package/dist/tools/files/help/help.d.ts.map +0 -1
  704. package/dist/tools/files/help/help.js +0 -24
  705. package/dist/tools/files/help/help.js.map +0 -1
  706. package/dist/tools/files/index.d.ts +0 -14
  707. package/dist/tools/files/index.d.ts.map +0 -1
  708. package/dist/tools/files/index.js +0 -15
  709. package/dist/tools/files/index.js.map +0 -1
  710. package/dist/tools/files/internal/queries.d.ts +0 -18
  711. package/dist/tools/files/internal/queries.d.ts.map +0 -1
  712. package/dist/tools/files/internal/queries.js +0 -54
  713. package/dist/tools/files/internal/queries.js.map +0 -1
  714. package/dist/tools/files/internal/validation.d.ts +0 -18
  715. package/dist/tools/files/internal/validation.d.ts.map +0 -1
  716. package/dist/tools/files/internal/validation.js +0 -39
  717. package/dist/tools/files/internal/validation.js.map +0 -1
  718. package/dist/tools/files/types.d.ts +0 -6
  719. package/dist/tools/files/types.d.ts.map +0 -1
  720. package/dist/tools/files/types.js +0 -6
  721. package/dist/tools/files/types.js.map +0 -1
  722. package/dist/tools/help-queries.d.ts +0 -130
  723. package/dist/tools/help-queries.d.ts.map +0 -1
  724. package/dist/tools/help-queries.js +0 -411
  725. package/dist/tools/help-queries.js.map +0 -1
  726. package/dist/tools/tasks/actions/add-dependency.d.ts +0 -12
  727. package/dist/tools/tasks/actions/add-dependency.d.ts.map +0 -1
  728. package/dist/tools/tasks/actions/add-dependency.js +0 -129
  729. package/dist/tools/tasks/actions/add-dependency.js.map +0 -1
  730. package/dist/tools/tasks/actions/archive.d.ts +0 -11
  731. package/dist/tools/tasks/actions/archive.d.ts.map +0 -1
  732. package/dist/tools/tasks/actions/archive.js +0 -58
  733. package/dist/tools/tasks/actions/archive.js.map +0 -1
  734. package/dist/tools/tasks/actions/create-batch.d.ts +0 -19
  735. package/dist/tools/tasks/actions/create-batch.d.ts.map +0 -1
  736. package/dist/tools/tasks/actions/create-batch.js +0 -103
  737. package/dist/tools/tasks/actions/create-batch.js.map +0 -1
  738. package/dist/tools/tasks/actions/create.d.ts +0 -16
  739. package/dist/tools/tasks/actions/create.d.ts.map +0 -1
  740. package/dist/tools/tasks/actions/create.js +0 -163
  741. package/dist/tools/tasks/actions/create.js.map +0 -1
  742. package/dist/tools/tasks/actions/get-dependencies.d.ts +0 -12
  743. package/dist/tools/tasks/actions/get-dependencies.d.ts.map +0 -1
  744. package/dist/tools/tasks/actions/get-dependencies.js +0 -41
  745. package/dist/tools/tasks/actions/get-dependencies.js.map +0 -1
  746. package/dist/tools/tasks/actions/get-pruned-files.d.ts +0 -13
  747. package/dist/tools/tasks/actions/get-pruned-files.d.ts.map +0 -1
  748. package/dist/tools/tasks/actions/get-pruned-files.js +0 -45
  749. package/dist/tools/tasks/actions/get-pruned-files.js.map +0 -1
  750. package/dist/tools/tasks/actions/get.d.ts +0 -12
  751. package/dist/tools/tasks/actions/get.d.ts.map +0 -1
  752. package/dist/tools/tasks/actions/get.js +0 -84
  753. package/dist/tools/tasks/actions/get.js.map +0 -1
  754. package/dist/tools/tasks/actions/link-pruned-file.d.ts +0 -14
  755. package/dist/tools/tasks/actions/link-pruned-file.d.ts.map +0 -1
  756. package/dist/tools/tasks/actions/link-pruned-file.js +0 -68
  757. package/dist/tools/tasks/actions/link-pruned-file.js.map +0 -1
  758. package/dist/tools/tasks/actions/link.d.ts +0 -14
  759. package/dist/tools/tasks/actions/link.d.ts.map +0 -1
  760. package/dist/tools/tasks/actions/link.js +0 -120
  761. package/dist/tools/tasks/actions/link.js.map +0 -1
  762. package/dist/tools/tasks/actions/list.d.ts +0 -17
  763. package/dist/tools/tasks/actions/list.d.ts.map +0 -1
  764. package/dist/tools/tasks/actions/list.js +0 -100
  765. package/dist/tools/tasks/actions/list.js.map +0 -1
  766. package/dist/tools/tasks/actions/move.d.ts +0 -13
  767. package/dist/tools/tasks/actions/move.d.ts.map +0 -1
  768. package/dist/tools/tasks/actions/move.js +0 -91
  769. package/dist/tools/tasks/actions/move.js.map +0 -1
  770. package/dist/tools/tasks/actions/remove-dependency.d.ts +0 -12
  771. package/dist/tools/tasks/actions/remove-dependency.d.ts.map +0 -1
  772. package/dist/tools/tasks/actions/remove-dependency.js +0 -36
  773. package/dist/tools/tasks/actions/remove-dependency.js.map +0 -1
  774. package/dist/tools/tasks/actions/update.d.ts +0 -10
  775. package/dist/tools/tasks/actions/update.d.ts.map +0 -1
  776. package/dist/tools/tasks/actions/update.js +0 -183
  777. package/dist/tools/tasks/actions/update.js.map +0 -1
  778. package/dist/tools/tasks/actions/watch-files.d.ts +0 -14
  779. package/dist/tools/tasks/actions/watch-files.d.ts.map +0 -1
  780. package/dist/tools/tasks/actions/watch-files.js +0 -127
  781. package/dist/tools/tasks/actions/watch-files.js.map +0 -1
  782. package/dist/tools/tasks/help/example.d.ts +0 -8
  783. package/dist/tools/tasks/help/example.d.ts.map +0 -1
  784. package/dist/tools/tasks/help/example.js +0 -225
  785. package/dist/tools/tasks/help/example.js.map +0 -1
  786. package/dist/tools/tasks/help/help.d.ts +0 -8
  787. package/dist/tools/tasks/help/help.d.ts.map +0 -1
  788. package/dist/tools/tasks/help/help.js +0 -307
  789. package/dist/tools/tasks/help/help.js.map +0 -1
  790. package/dist/tools/tasks/help/use-case.d.ts +0 -11
  791. package/dist/tools/tasks/help/use-case.d.ts.map +0 -1
  792. package/dist/tools/tasks/help/use-case.js +0 -767
  793. package/dist/tools/tasks/help/use-case.js.map +0 -1
  794. package/dist/tools/tasks/index.d.ts +0 -28
  795. package/dist/tools/tasks/index.d.ts.map +0 -1
  796. package/dist/tools/tasks/index.js +0 -33
  797. package/dist/tools/tasks/index.js.map +0 -1
  798. package/dist/tools/tasks/internal/state-machine.d.ts +0 -16
  799. package/dist/tools/tasks/internal/state-machine.d.ts.map +0 -1
  800. package/dist/tools/tasks/internal/state-machine.js +0 -36
  801. package/dist/tools/tasks/internal/state-machine.js.map +0 -1
  802. package/dist/tools/tasks/internal/task-queries.d.ts +0 -12
  803. package/dist/tools/tasks/internal/task-queries.d.ts.map +0 -1
  804. package/dist/tools/tasks/internal/task-queries.js +0 -53
  805. package/dist/tools/tasks/internal/task-queries.js.map +0 -1
  806. package/dist/tools/tasks/internal/validation.d.ts +0 -47
  807. package/dist/tools/tasks/internal/validation.d.ts.map +0 -1
  808. package/dist/tools/tasks/internal/validation.js +0 -261
  809. package/dist/tools/tasks/internal/validation.js.map +0 -1
  810. package/dist/tools/tasks/types.d.ts +0 -80
  811. package/dist/tools/tasks/types.d.ts.map +0 -1
  812. package/dist/tools/tasks/types.js +0 -68
  813. package/dist/tools/tasks/types.js.map +0 -1
  814. package/dist/tools/tasks/watcher/status.d.ts +0 -9
  815. package/dist/tools/tasks/watcher/status.d.ts.map +0 -1
  816. package/dist/tools/tasks/watcher/status.js +0 -130
  817. package/dist/tools/tasks/watcher/status.js.map +0 -1
  818. package/dist/tools/tasks.d.ts +0 -16
  819. package/dist/tools/tasks.d.ts.map +0 -1
  820. package/dist/tools/tasks.js +0 -17
  821. package/dist/tools/tasks.js.map +0 -1
  822. package/dist/utils/action-specs/file-specs.d.ts +0 -9
  823. package/dist/utils/action-specs/file-specs.d.ts.map +0 -1
  824. package/dist/utils/action-specs/file-specs.js +0 -54
  825. package/dist/utils/action-specs/file-specs.js.map +0 -1
  826. package/dist/utils/action-specs/task-specs.d.ts +0 -9
  827. package/dist/utils/action-specs/task-specs.d.ts.map +0 -1
  828. package/dist/utils/action-specs/task-specs.js +0 -143
  829. package/dist/utils/action-specs/task-specs.js.map +0 -1
  830. package/dist/utils/cleanup.d.ts +0 -69
  831. package/dist/utils/cleanup.d.ts.map +0 -1
  832. package/dist/utils/cleanup.js +0 -102
  833. package/dist/utils/cleanup.js.map +0 -1
  834. package/dist/utils/file-pruning.d.ts +0 -93
  835. package/dist/utils/file-pruning.d.ts.map +0 -1
  836. package/dist/utils/file-pruning.js +0 -194
  837. package/dist/utils/file-pruning.js.map +0 -1
  838. package/dist/utils/importer/topological-sort.d.ts +0 -61
  839. package/dist/utils/importer/topological-sort.d.ts.map +0 -1
  840. package/dist/utils/importer/topological-sort.js +0 -143
  841. package/dist/utils/importer/topological-sort.js.map +0 -1
  842. package/dist/utils/retention.d.ts +0 -65
  843. package/dist/utils/retention.d.ts.map +0 -1
  844. package/dist/utils/retention.js +0 -156
  845. package/dist/utils/retention.js.map +0 -1
  846. package/dist/utils/task-stale-detection.d.ts +0 -98
  847. package/dist/utils/task-stale-detection.d.ts.map +0 -1
  848. package/dist/utils/task-stale-detection.js +0 -479
  849. package/dist/utils/task-stale-detection.js.map +0 -1
  850. package/dist/watcher/file-watcher.d.ts +0 -131
  851. package/dist/watcher/file-watcher.d.ts.map +0 -1
  852. package/dist/watcher/file-watcher.js +0 -730
  853. package/dist/watcher/file-watcher.js.map +0 -1
  854. package/dist/watcher/test-executor.d.ts +0 -23
  855. package/dist/watcher/test-executor.d.ts.map +0 -1
  856. package/dist/watcher/test-executor.js +0 -226
  857. package/dist/watcher/test-executor.js.map +0 -1
  858. package/docs/TASK_SYSTEM_DEPRECATED.md +0 -88
@@ -1,800 +0,0 @@
1
- /**
2
- * Task Operations - Native RDBMS Integration Tests
3
- *
4
- * Tests task table schema and operations (CRUD, dependencies, status transitions,
5
- * FK constraints, cascade delete) on fresh MySQL, MariaDB, and PostgreSQL installations.
6
- *
7
- * Task #532: Refactor task-operations.test.ts to use direct Knex operations
8
- *
9
- * ARCHITECTURE: Native RDBMS tests focus on database layer validation.
10
- * - NO MCP tool function imports
11
- * - Direct Knex operations only
12
- * - Tests database constraints, indexes, views, triggers
13
- * - Cross-database compatibility validation
14
- */
15
- import { describe, it } from 'node:test';
16
- import assert from 'node:assert';
17
- import { runTestsOnAllDatabases, getLayerId, getTagId } from './test-harness.js';
18
- // ============================================================================
19
- // Test Helpers
20
- // ============================================================================
21
- /**
22
- * Get task status ID by status name
23
- */
24
- async function getStatusId(db, statusName) {
25
- const status = await db('v4_task_statuses').where({ name: statusName }).first();
26
- assert.ok(status, `Status "${statusName}" should exist`);
27
- return status.id;
28
- }
29
- /**
30
- * Insert a task with required fields (helper for test setup)
31
- */
32
- async function insertTask(db, data) {
33
- const statusId = await getStatusId(db, data.status || 'todo');
34
- const layerId = data.layer ? await getLayerId(db, data.layer) : await getLayerId(db, 'business');
35
- const timestamp = Math.floor(Date.now() / 1000);
36
- const insertData = {
37
- title: data.title,
38
- status_id: statusId,
39
- priority: data.priority || 2,
40
- layer_id: layerId,
41
- project_id: 1,
42
- created_ts: timestamp,
43
- updated_ts: timestamp,
44
- };
45
- const result = await db('v4_tasks').insert(insertData);
46
- // Get the inserted ID (different return format across databases)
47
- let taskId;
48
- if (Array.isArray(result) && result.length > 0) {
49
- taskId = result[0];
50
- }
51
- else if (typeof result === 'number') {
52
- taskId = result;
53
- }
54
- else {
55
- // Fallback: query the last inserted task
56
- const task = await db('v4_tasks')
57
- .where({ title: data.title, project_id: 1 })
58
- .orderBy('id', 'desc')
59
- .first();
60
- taskId = task.id;
61
- }
62
- // Insert task details if description provided
63
- if (data.description) {
64
- await db('v4_task_details').insert({
65
- task_id: taskId,
66
- description: data.description,
67
- });
68
- }
69
- return taskId;
70
- }
71
- /**
72
- * Assert task has expected status
73
- */
74
- async function assertTaskHasStatus(db, taskId, expectedStatus) {
75
- const task = await db('v4_tasks')
76
- .join('v4_task_statuses', 'v4_tasks.status_id', 'v4_task_statuses.id')
77
- .where({ 'v4_tasks.id': taskId })
78
- .select('v4_task_statuses.name as status')
79
- .first();
80
- assert.ok(task, `Task ${taskId} should exist`);
81
- assert.strictEqual(task.status, expectedStatus, `Task ${taskId} status should be ${expectedStatus}`);
82
- }
83
- // ============================================================================
84
- // Test Suite
85
- // ============================================================================
86
- runTestsOnAllDatabases('Task Operations', (getDb, dbType) => {
87
- // ============================================================================
88
- // Basic CRUD Operations
89
- // ============================================================================
90
- describe('Task CRUD', () => {
91
- it('should insert task with required fields', async () => {
92
- const db = getDb();
93
- const taskId = await insertTask(db, {
94
- title: 'Implement authentication',
95
- priority: 3,
96
- layer: 'business',
97
- });
98
- assert.ok(taskId, 'Should return task ID');
99
- // Verify task exists
100
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
101
- assert.strictEqual(task.title, 'Implement authentication');
102
- assert.strictEqual(task.priority, 3);
103
- await assertTaskHasStatus(db, taskId, 'todo');
104
- });
105
- it('should insert task with all optional fields', async () => {
106
- const db = getDb();
107
- const taskId = await insertTask(db, {
108
- title: 'Complex task with all fields',
109
- description: 'This is a detailed description',
110
- priority: 4,
111
- layer: 'infrastructure',
112
- });
113
- // Verify core task data
114
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
115
- assert.strictEqual(task.title, 'Complex task with all fields');
116
- assert.strictEqual(task.priority, 4);
117
- const layerId = await getLayerId(db, 'infrastructure');
118
- assert.strictEqual(task.layer_id, layerId);
119
- // Verify task details
120
- const details = await db('v4_task_details').where({ task_id: taskId }).first();
121
- assert.ok(details, 'Task details should exist');
122
- assert.strictEqual(details.description, 'This is a detailed description');
123
- });
124
- it('should update task fields', async () => {
125
- const db = getDb();
126
- const taskId = await insertTask(db, {
127
- title: 'Original title',
128
- priority: 2,
129
- });
130
- // Update title and priority
131
- await db('v4_tasks')
132
- .where({ id: taskId, project_id: 1 })
133
- .update({
134
- title: 'Updated title',
135
- priority: 4,
136
- updated_ts: Math.floor(Date.now() / 1000),
137
- });
138
- // Verify update
139
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
140
- assert.strictEqual(task.title, 'Updated title');
141
- assert.strictEqual(task.priority, 4);
142
- });
143
- it('should delete task', async () => {
144
- const db = getDb();
145
- const taskId = await insertTask(db, {
146
- title: 'Task to delete',
147
- });
148
- // Delete task
149
- await db('v4_tasks').where({ id: taskId, project_id: 1 }).delete();
150
- // Verify deletion
151
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
152
- assert.strictEqual(task, undefined, 'Task should be deleted');
153
- });
154
- });
155
- // ============================================================================
156
- // Foreign Key Constraints
157
- // ============================================================================
158
- describe('Foreign Key Constraints', () => {
159
- it('should enforce FK constraint on status_id', async () => {
160
- const db = getDb();
161
- const insertPromise = db('v4_tasks').insert({
162
- title: 'Invalid status task',
163
- status_id: 99999, // Non-existent status
164
- priority: 2,
165
- project_id: 1,
166
- layer_id: 1,
167
- created_ts: Math.floor(Date.now() / 1000),
168
- updated_ts: Math.floor(Date.now() / 1000),
169
- });
170
- await assert.rejects(insertPromise, {
171
- message: /foreign key constraint|violates foreign key|Cannot add or update a child row/i,
172
- });
173
- });
174
- it('should enforce FK constraint on layer_id', async () => {
175
- const db = getDb();
176
- const statusId = await getStatusId(db, 'todo');
177
- const insertPromise = db('v4_tasks').insert({
178
- title: 'Invalid layer task',
179
- status_id: statusId,
180
- priority: 2,
181
- project_id: 1,
182
- layer_id: 99999, // Non-existent layer
183
- created_ts: Math.floor(Date.now() / 1000),
184
- updated_ts: Math.floor(Date.now() / 1000),
185
- });
186
- await assert.rejects(insertPromise, {
187
- message: /foreign key constraint|violates foreign key|Cannot add or update a child row/i,
188
- });
189
- });
190
- });
191
- // ============================================================================
192
- // Task Status Transitions
193
- // ============================================================================
194
- describe('Task Status Transitions', () => {
195
- it('should transition from todo to in_progress', async () => {
196
- const db = getDb();
197
- const taskId = await insertTask(db, { title: 'Move to in_progress' });
198
- await assertTaskHasStatus(db, taskId, 'todo');
199
- // Move to in_progress
200
- const inProgressId = await getStatusId(db, 'in_progress');
201
- await db('v4_tasks')
202
- .where({ id: taskId })
203
- .update({
204
- status_id: inProgressId,
205
- updated_ts: Math.floor(Date.now() / 1000),
206
- });
207
- await assertTaskHasStatus(db, taskId, 'in_progress');
208
- });
209
- it('should transition from in_progress to done', async () => {
210
- const db = getDb();
211
- const taskId = await insertTask(db, { title: 'Complete task', status: 'in_progress' });
212
- await assertTaskHasStatus(db, taskId, 'in_progress');
213
- // Move to done
214
- const doneId = await getStatusId(db, 'done');
215
- const completedTs = Math.floor(Date.now() / 1000);
216
- await db('v4_tasks')
217
- .where({ id: taskId })
218
- .update({
219
- status_id: doneId,
220
- completed_ts: completedTs,
221
- updated_ts: completedTs,
222
- });
223
- await assertTaskHasStatus(db, taskId, 'done');
224
- // Verify completed_ts was set
225
- const task = await db('v4_tasks').where({ id: taskId }).first();
226
- assert.ok(task.completed_ts, 'completed_ts should be set');
227
- });
228
- it('should transition to blocked status', async () => {
229
- const db = getDb();
230
- const taskId = await insertTask(db, { title: 'Blocked task' });
231
- const blockedId = await getStatusId(db, 'blocked');
232
- await db('v4_tasks')
233
- .where({ id: taskId })
234
- .update({
235
- status_id: blockedId,
236
- updated_ts: Math.floor(Date.now() / 1000),
237
- });
238
- await assertTaskHasStatus(db, taskId, 'blocked');
239
- });
240
- it('should transition to archived status', async () => {
241
- const db = getDb();
242
- const taskId = await insertTask(db, { title: 'Archive task' });
243
- const archivedId = await getStatusId(db, 'archived');
244
- await db('v4_tasks')
245
- .where({ id: taskId })
246
- .update({
247
- status_id: archivedId,
248
- updated_ts: Math.floor(Date.now() / 1000),
249
- });
250
- await assertTaskHasStatus(db, taskId, 'archived');
251
- });
252
- });
253
- // ============================================================================
254
- // Task File Links
255
- // ============================================================================
256
- describe('Task File Links', () => {
257
- it('should insert file links for task', async () => {
258
- const db = getDb();
259
- const taskId = await insertTask(db, { title: 'Task with files' });
260
- const timestamp = Math.floor(Date.now() / 1000);
261
- // First, create file records in m_files
262
- const file1Result = await db('v4_files').insert({ project_id: 1, path: 'src/auth/login.ts' });
263
- const file2Result = await db('v4_files').insert({ project_id: 1, path: 'src/auth/types.ts' });
264
- const file3Result = await db('v4_files').insert({ project_id: 1, path: 'src/auth/old.ts' });
265
- // Get file IDs
266
- const file1 = await db('v4_files').where({ path: 'src/auth/login.ts', project_id: 1 }).first();
267
- const file2 = await db('v4_files').where({ path: 'src/auth/types.ts', project_id: 1 }).first();
268
- const file3 = await db('v4_files').where({ path: 'src/auth/old.ts', project_id: 1 }).first();
269
- // Insert file links
270
- await db('v4_task_file_links').insert([
271
- { task_id: taskId, file_id: file1.id, project_id: 1, linked_ts: timestamp },
272
- { task_id: taskId, file_id: file2.id, project_id: 1, linked_ts: timestamp },
273
- { task_id: taskId, file_id: file3.id, project_id: 1, linked_ts: timestamp },
274
- ]);
275
- // Verify file links
276
- const fileLinks = await db('v4_task_file_links')
277
- .join('v4_files', 'v4_task_file_links.file_id', 'v4_files.id')
278
- .where({ 'v4_task_file_links.task_id': taskId })
279
- .select('v4_task_file_links.*', 'v4_files.path')
280
- .orderBy('v4_files.path');
281
- assert.strictEqual(fileLinks.length, 3);
282
- assert.strictEqual(fileLinks[0].path, 'src/auth/login.ts');
283
- assert.strictEqual(fileLinks[1].path, 'src/auth/old.ts');
284
- assert.strictEqual(fileLinks[2].path, 'src/auth/types.ts');
285
- });
286
- it('should enforce unique constraint on task-file combination', async () => {
287
- const db = getDb();
288
- const taskId = await insertTask(db, { title: 'Unique file link test' });
289
- const timestamp = Math.floor(Date.now() / 1000);
290
- // Create a file record
291
- await db('v4_files').insert({ project_id: 1, path: 'src/unique-test.ts' });
292
- const file = await db('v4_files').where({ path: 'src/unique-test.ts', project_id: 1 }).first();
293
- await db('v4_task_file_links').insert({
294
- task_id: taskId,
295
- file_id: file.id,
296
- project_id: 1,
297
- linked_ts: timestamp,
298
- });
299
- // Try to insert duplicate
300
- const duplicatePromise = db('v4_task_file_links').insert({
301
- task_id: taskId,
302
- file_id: file.id,
303
- project_id: 1,
304
- linked_ts: timestamp,
305
- });
306
- await assert.rejects(duplicatePromise, {
307
- message: /UNIQUE constraint|unique constraint|Duplicate entry/i,
308
- });
309
- });
310
- it('should cascade delete file links when task deleted', async () => {
311
- const db = getDb();
312
- const taskId = await insertTask(db, { title: 'Cascade delete file links' });
313
- const timestamp = Math.floor(Date.now() / 1000);
314
- // Create a file record
315
- await db('v4_files').insert({ project_id: 1, path: 'src/cascade-test.ts' });
316
- const file = await db('v4_files').where({ path: 'src/cascade-test.ts', project_id: 1 }).first();
317
- await db('v4_task_file_links').insert({
318
- task_id: taskId,
319
- file_id: file.id,
320
- project_id: 1,
321
- linked_ts: timestamp,
322
- });
323
- // Delete task
324
- await db('v4_tasks').where({ id: taskId }).delete();
325
- // Verify file links were cascade deleted
326
- const fileLinks = await db('v4_task_file_links').where({ task_id: taskId });
327
- assert.strictEqual(fileLinks.length, 0, 'File links should be cascade deleted');
328
- });
329
- });
330
- // ============================================================================
331
- // Task Tags
332
- // ============================================================================
333
- describe('Task Tags', () => {
334
- it('should associate tags with task', async () => {
335
- const db = getDb();
336
- const taskId = await insertTask(db, { title: 'Tagged task' });
337
- // Get tag IDs
338
- const apiTagId = await getTagId(db, 'api');
339
- const securityTagId = await getTagId(db, 'security');
340
- const perfTagId = await getTagId(db, 'performance');
341
- // Insert tag associations (v4_task_tags requires project_id)
342
- await db('v4_task_tags').insert([
343
- { task_id: taskId, tag_id: apiTagId, project_id: 1 },
344
- { task_id: taskId, tag_id: securityTagId, project_id: 1 },
345
- { task_id: taskId, tag_id: perfTagId, project_id: 1 },
346
- ]);
347
- // Verify tags
348
- const tags = await db('v4_task_tags as tt')
349
- .join('v4_tags as t', 'tt.tag_id', 't.id')
350
- .where({ 'tt.task_id': taskId })
351
- .select('t.name as tag_name');
352
- assert.strictEqual(tags.length, 3);
353
- const tagNames = tags.map(t => t.tag_name);
354
- assert.ok(tagNames.includes('api'));
355
- assert.ok(tagNames.includes('security'));
356
- assert.ok(tagNames.includes('performance'));
357
- });
358
- it('should cascade delete tags when task deleted', async () => {
359
- const db = getDb();
360
- const taskId = await insertTask(db, { title: 'Task with tags for cascade' });
361
- const tagId = await getTagId(db, 'test');
362
- await db('v4_task_tags').insert({
363
- task_id: taskId,
364
- tag_id: tagId,
365
- project_id: 1,
366
- });
367
- // Delete task
368
- await db('v4_tasks').where({ id: taskId }).delete();
369
- // Verify tags were cascade deleted
370
- const tags = await db('v4_task_tags').where({ task_id: taskId });
371
- assert.strictEqual(tags.length, 0, 'Tags should be cascade deleted');
372
- });
373
- });
374
- // ============================================================================
375
- // Task Dependencies
376
- // ============================================================================
377
- describe('Task Dependencies', () => {
378
- it('should add dependency between tasks', async () => {
379
- const db = getDb();
380
- const blockerTaskId = await insertTask(db, { title: 'Blocker task' });
381
- const blockedTaskId = await insertTask(db, { title: 'Blocked task' });
382
- // Add dependency: blocker blocks blocked
383
- await db('v4_task_dependencies').insert({
384
- blocker_task_id: blockerTaskId,
385
- blocked_task_id: blockedTaskId,
386
- project_id: 1,
387
- created_ts: Math.floor(Date.now() / 1000),
388
- });
389
- // Verify dependency exists
390
- const dependency = await db('v4_task_dependencies')
391
- .where({ blocker_task_id: blockerTaskId, blocked_task_id: blockedTaskId })
392
- .first();
393
- assert.ok(dependency, 'Dependency should exist');
394
- });
395
- it('should prevent self-dependency (circular dependency)', async () => {
396
- const db = getDb();
397
- const taskId = await insertTask(db, { title: 'Self-blocking task' });
398
- // Try to create self-dependency
399
- const selfDepPromise = db('v4_task_dependencies').insert({
400
- blocker_task_id: taskId,
401
- blocked_task_id: taskId, // Same task
402
- project_id: 1,
403
- created_ts: Math.floor(Date.now() / 1000),
404
- });
405
- // Should fail (either via trigger or application-level check)
406
- // Note: Some databases may allow this at schema level but fail at trigger level
407
- // For now, we just test if it rejects
408
- const shouldReject = async () => {
409
- try {
410
- await selfDepPromise;
411
- // If insert succeeds, check if there's a trigger that prevents it
412
- // This is database-specific behavior
413
- const dep = await db('v4_task_dependencies')
414
- .where({ blocker_task_id: taskId, blocked_task_id: taskId })
415
- .first();
416
- // If dependency was inserted, we need to check if the application
417
- // layer prevents this. For now, we'll fail the test if it was inserted.
418
- if (dep) {
419
- throw new Error('Self-dependency should not be allowed');
420
- }
421
- }
422
- catch (error) {
423
- // Expected: trigger or constraint prevents self-dependency
424
- if (!error.message.includes('should not be allowed')) {
425
- // This is expected database error
426
- return;
427
- }
428
- throw error;
429
- }
430
- };
431
- // For databases without trigger, this test will pass
432
- // For databases with trigger, this will throw expected error
433
- try {
434
- await shouldReject();
435
- }
436
- catch (error) {
437
- // Acceptable error messages
438
- if (error.message.includes('circular') ||
439
- error.message.includes('self') ||
440
- error.message.includes('should not be allowed')) {
441
- // Expected behavior
442
- return;
443
- }
444
- throw error;
445
- }
446
- });
447
- it('should detect transitive circular dependency (A→B→A)', async () => {
448
- const db = getDb();
449
- const taskA = await insertTask(db, { title: 'Task A' });
450
- const taskB = await insertTask(db, { title: 'Task B' });
451
- // Create A blocks B
452
- await db('v4_task_dependencies').insert({
453
- blocker_task_id: taskA,
454
- blocked_task_id: taskB,
455
- project_id: 1,
456
- created_ts: Math.floor(Date.now() / 1000),
457
- });
458
- // Try to create B blocks A (circular)
459
- // Note: Detection of transitive circular dependencies requires
460
- // application-level logic or recursive triggers.
461
- // The schema may allow this at database level.
462
- // This test documents expected behavior.
463
- const circularPromise = db('v4_task_dependencies').insert({
464
- blocker_task_id: taskB,
465
- blocked_task_id: taskA,
466
- project_id: 1,
467
- created_ts: Math.floor(Date.now() / 1000),
468
- });
469
- // For now, we expect application-level validation to prevent this
470
- // If the database allows it, we'll just document it
471
- try {
472
- await circularPromise;
473
- // If it succeeds, verify both dependencies exist
474
- const deps = await db('v4_task_dependencies')
475
- .whereIn('blocker_task_id', [taskA, taskB])
476
- .whereIn('blocked_task_id', [taskA, taskB]);
477
- // Note: Schema allows this, but application should prevent it
478
- // This documents the current behavior
479
- if (deps.length === 2) {
480
- console.log(` ⚠️ [${dbType}] Database allows circular dependencies A→B→A (application must validate)`);
481
- }
482
- }
483
- catch (error) {
484
- // If database prevents it, that's good
485
- if (error.message.includes('circular') || error.message.includes('cycle')) {
486
- console.log(` ✅ [${dbType}] Database prevents circular dependencies at schema level`);
487
- }
488
- else {
489
- throw error;
490
- }
491
- }
492
- });
493
- it('should remove dependency', async () => {
494
- const db = getDb();
495
- const blockerTaskId = await insertTask(db, { title: 'Blocker for removal' });
496
- const blockedTaskId = await insertTask(db, { title: 'Blocked for removal' });
497
- await db('v4_task_dependencies').insert({
498
- blocker_task_id: blockerTaskId,
499
- blocked_task_id: blockedTaskId,
500
- project_id: 1,
501
- created_ts: Math.floor(Date.now() / 1000),
502
- });
503
- // Remove dependency
504
- await db('v4_task_dependencies')
505
- .where({ blocker_task_id: blockerTaskId, blocked_task_id: blockedTaskId })
506
- .delete();
507
- // Verify removal
508
- const dependency = await db('v4_task_dependencies')
509
- .where({ blocker_task_id: blockerTaskId, blocked_task_id: blockedTaskId })
510
- .first();
511
- assert.strictEqual(dependency, undefined, 'Dependency should be removed');
512
- });
513
- it('should cascade delete dependencies when task deleted', async () => {
514
- const db = getDb();
515
- const blockerTaskId = await insertTask(db, { title: 'Blocker for cascade' });
516
- const blockedTaskId = await insertTask(db, { title: 'Blocked for cascade' });
517
- await db('v4_task_dependencies').insert({
518
- blocker_task_id: blockerTaskId,
519
- blocked_task_id: blockedTaskId,
520
- project_id: 1,
521
- created_ts: Math.floor(Date.now() / 1000),
522
- });
523
- // Delete blocker task
524
- await db('v4_tasks').where({ id: blockerTaskId }).delete();
525
- // Verify dependencies were cascade deleted
526
- const dependencies = await db('v4_task_dependencies')
527
- .where({ blocker_task_id: blockerTaskId })
528
- .orWhere({ blocked_task_id: blockerTaskId });
529
- assert.strictEqual(dependencies.length, 0, 'Dependencies should be cascade deleted');
530
- });
531
- it('should get task blocking relationships', async () => {
532
- const db = getDb();
533
- const blockerTaskId = await insertTask(db, { title: 'Blocker' });
534
- const blocked1Id = await insertTask(db, { title: 'Blocked 1' });
535
- const blocked2Id = await insertTask(db, { title: 'Blocked 2' });
536
- // Blocker blocks both blocked tasks
537
- await db('v4_task_dependencies').insert([
538
- {
539
- blocker_task_id: blockerTaskId,
540
- blocked_task_id: blocked1Id,
541
- project_id: 1,
542
- created_ts: Math.floor(Date.now() / 1000),
543
- },
544
- {
545
- blocker_task_id: blockerTaskId,
546
- blocked_task_id: blocked2Id,
547
- project_id: 1,
548
- created_ts: Math.floor(Date.now() / 1000),
549
- },
550
- ]);
551
- // Query what blocker is blocking
552
- const blocking = await db('v4_task_dependencies')
553
- .where({ blocker_task_id: blockerTaskId })
554
- .select('blocked_task_id');
555
- assert.strictEqual(blocking.length, 2);
556
- const blockedIds = blocking.map(b => b.blocked_task_id);
557
- assert.ok(blockedIds.includes(blocked1Id));
558
- assert.ok(blockedIds.includes(blocked2Id));
559
- });
560
- it('should get task blocker relationships', async () => {
561
- const db = getDb();
562
- const blockedTaskId = await insertTask(db, { title: 'Blocked' });
563
- const blocker1Id = await insertTask(db, { title: 'Blocker 1' });
564
- const blocker2Id = await insertTask(db, { title: 'Blocker 2' });
565
- // Blocked is blocked by both blockers
566
- await db('v4_task_dependencies').insert([
567
- {
568
- blocker_task_id: blocker1Id,
569
- blocked_task_id: blockedTaskId,
570
- project_id: 1,
571
- created_ts: Math.floor(Date.now() / 1000),
572
- },
573
- {
574
- blocker_task_id: blocker2Id,
575
- blocked_task_id: blockedTaskId,
576
- project_id: 1,
577
- created_ts: Math.floor(Date.now() / 1000),
578
- },
579
- ]);
580
- // Query what is blocking this task
581
- const blockers = await db('v4_task_dependencies')
582
- .where({ blocked_task_id: blockedTaskId })
583
- .select('blocker_task_id');
584
- assert.strictEqual(blockers.length, 2);
585
- const blockerIds = blockers.map(b => b.blocker_task_id);
586
- assert.ok(blockerIds.includes(blocker1Id));
587
- assert.ok(blockerIds.includes(blocker2Id));
588
- });
589
- });
590
- // ============================================================================
591
- // Task-Decision Links
592
- // ============================================================================
593
- describe('Task-Decision Links', () => {
594
- it('should link task to decision', async () => {
595
- const db = getDb();
596
- const taskId = await insertTask(db, { title: 'Task implementing decision' });
597
- const timestamp = Math.floor(Date.now() / 1000);
598
- // Create a decision
599
- const layerId = await getLayerId(db, 'business');
600
- // v4_context_keys has no project_id column
601
- await db('v4_context_keys').insert({
602
- key_name: 'test/link-decision',
603
- });
604
- const contextKey = await db('v4_context_keys')
605
- .where({ key_name: 'test/link-decision' })
606
- .first();
607
- await db('v4_decisions').insert({
608
- key_id: contextKey.id,
609
- project_id: 1,
610
- value: 'test value',
611
- version: '1.0.0',
612
- ts: timestamp,
613
- layer_id: layerId,
614
- status: 1, // 1=active (integer enum, not string)
615
- });
616
- // Link task to decision (using decision_key_id, not decision_id)
617
- await db('v4_task_decision_links').insert({
618
- task_id: taskId,
619
- decision_key_id: contextKey.id,
620
- project_id: 1,
621
- link_type: 'implements',
622
- linked_ts: timestamp,
623
- });
624
- // Verify link
625
- const link = await db('v4_task_decision_links')
626
- .where({ task_id: taskId, decision_key_id: contextKey.id })
627
- .first();
628
- assert.ok(link, 'Link should exist');
629
- assert.strictEqual(link.link_type, 'implements');
630
- });
631
- it('should cascade delete task-decision links when task deleted', async () => {
632
- const db = getDb();
633
- const taskId = await insertTask(db, { title: 'Task for cascade link delete' });
634
- const timestamp = Math.floor(Date.now() / 1000);
635
- // Create decision and link (simplified)
636
- const layerId = await getLayerId(db, 'business');
637
- // m_context_keys has no project_id column
638
- await db('v4_context_keys').insert({ key_name: 'test/cascade-link' });
639
- const contextKey = await db('v4_context_keys')
640
- .where({ key_name: 'test/cascade-link' })
641
- .first();
642
- await db('v4_decisions').insert({
643
- key_id: contextKey.id,
644
- project_id: 1,
645
- value: 'test',
646
- version: '1.0.0',
647
- ts: timestamp,
648
- layer_id: layerId,
649
- status: 1, // 1=active (integer enum)
650
- });
651
- await db('v4_task_decision_links').insert({
652
- task_id: taskId,
653
- decision_key_id: contextKey.id,
654
- project_id: 1,
655
- link_type: 'implements',
656
- linked_ts: timestamp,
657
- });
658
- // Delete task
659
- await db('v4_tasks').where({ id: taskId }).delete();
660
- // Verify links were cascade deleted
661
- const links = await db('v4_task_decision_links').where({ task_id: taskId });
662
- assert.strictEqual(links.length, 0, 'Task-decision links should be cascade deleted');
663
- });
664
- });
665
- // ============================================================================
666
- // Task-Constraint Links
667
- // ============================================================================
668
- describe('Task-Constraint Links', () => {
669
- it('should link task to constraint', async () => {
670
- const db = getDb();
671
- const taskId = await insertTask(db, { title: 'Task with constraint' });
672
- // Create a constraint
673
- const layerId = await getLayerId(db, 'business');
674
- // Get constraint category
675
- const category = await db('v4_constraint_categories')
676
- .where({ name: 'architecture' })
677
- .first();
678
- const constraintText = 'Test constraint for linking';
679
- await db('v4_constraints').insert({
680
- constraint_text: constraintText,
681
- // Note: v4 schema does not have constraint_text_hash column
682
- category_id: category.id,
683
- priority: 2,
684
- project_id: 1,
685
- layer_id: layerId,
686
- ts: Math.floor(Date.now() / 1000),
687
- active: 1,
688
- });
689
- const constraint = await db('v4_constraints')
690
- .where({ constraint_text: constraintText, project_id: 1 })
691
- .first();
692
- // Link task to constraint
693
- await db('v4_task_constraint_links').insert({
694
- task_id: taskId,
695
- constraint_id: constraint.id,
696
- });
697
- // Verify link
698
- const link = await db('v4_task_constraint_links')
699
- .where({ task_id: taskId, constraint_id: constraint.id })
700
- .first();
701
- assert.ok(link, 'Constraint link should exist');
702
- });
703
- it('should cascade delete task-constraint links when task deleted', async () => {
704
- const db = getDb();
705
- const taskId = await insertTask(db, { title: 'Task for constraint cascade' });
706
- // Create constraint and link (simplified)
707
- const layerId = await getLayerId(db, 'business');
708
- const category = await db('v4_constraint_categories')
709
- .where({ name: 'architecture' })
710
- .first();
711
- const constraintText = 'Cascade test constraint';
712
- await db('v4_constraints').insert({
713
- constraint_text: constraintText,
714
- // Note: v4 schema does not have constraint_text_hash column
715
- category_id: category.id,
716
- priority: 2,
717
- project_id: 1,
718
- layer_id: layerId,
719
- ts: Math.floor(Date.now() / 1000),
720
- active: 1,
721
- });
722
- const constraint = await db('v4_constraints')
723
- .where({ constraint_text: constraintText, project_id: 1 })
724
- .first();
725
- await db('v4_task_constraint_links').insert({
726
- task_id: taskId,
727
- constraint_id: constraint.id,
728
- });
729
- // Delete task
730
- await db('v4_tasks').where({ id: taskId }).delete();
731
- // Verify links were cascade deleted
732
- const links = await db('v4_task_constraint_links').where({ task_id: taskId });
733
- assert.strictEqual(links.length, 0, 'Task-constraint links should be cascade deleted');
734
- });
735
- });
736
- // ============================================================================
737
- // Cross-Database Compatibility Tests
738
- // ============================================================================
739
- describe(`Cross-database compatibility - ${dbType}`, () => {
740
- it('should handle long task titles', async () => {
741
- const db = getDb();
742
- const longTitle = 'A'.repeat(200);
743
- const taskId = await insertTask(db, {
744
- title: longTitle,
745
- priority: 2,
746
- });
747
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
748
- assert.strictEqual(task.title, longTitle);
749
- });
750
- it('should handle special characters in descriptions', async () => {
751
- const db = getDb();
752
- const specialDesc = "Description with 'quotes', \"double quotes\", and \\backslashes";
753
- const taskId = await insertTask(db, {
754
- title: 'Special chars test',
755
- description: specialDesc,
756
- });
757
- const details = await db('v4_task_details').where({ task_id: taskId }).first();
758
- assert.strictEqual(details.description, specialDesc);
759
- });
760
- it('should handle unicode in task fields', async () => {
761
- const db = getDb();
762
- const unicodeTitle = 'タスク 任务 작업 🚀';
763
- const taskId = await insertTask(db, {
764
- title: unicodeTitle,
765
- });
766
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
767
- assert.strictEqual(task.title, unicodeTitle);
768
- });
769
- it('should handle NULL optional fields', async () => {
770
- const db = getDb();
771
- const statusId = await getStatusId(db, 'todo');
772
- const layerId = await getLayerId(db, 'business');
773
- // Insert with NULL optional fields (completed_ts is nullable)
774
- const timestamp = Math.floor(Date.now() / 1000);
775
- const result = await db('v4_tasks').insert({
776
- title: 'Task with NULL completed_ts',
777
- status_id: statusId,
778
- priority: 2,
779
- project_id: 1,
780
- layer_id: layerId,
781
- completed_ts: null, // NULL is allowed
782
- created_ts: timestamp,
783
- updated_ts: timestamp,
784
- });
785
- let taskId;
786
- if (Array.isArray(result) && result.length > 0) {
787
- taskId = result[0];
788
- }
789
- else {
790
- const task = await db('v4_tasks')
791
- .where({ title: 'Task with NULL completed_ts', project_id: 1 })
792
- .first();
793
- taskId = task.id;
794
- }
795
- const task = await db('v4_tasks').where({ id: taskId, project_id: 1 }).first();
796
- assert.strictEqual(task.completed_ts, null);
797
- });
798
- });
799
- });
800
- //# sourceMappingURL=task-operations.test.js.map