sqlew 4.3.1 → 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 (841) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/LICENSE +1 -1
  3. package/NOTICE +2 -2
  4. package/README.md +112 -42
  5. package/assets/claude-md-snippets/plan-mode-integration.md +54 -0
  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 +72 -72
  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 -13
  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 +3 -1
  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 +3 -1
  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.js +3 -3
  416. package/dist/tools/suggest/actions/by-tags.js.map +1 -1
  417. package/dist/tools/suggest/internal/constraint-queries.d.ts +4 -4
  418. package/dist/tools/suggest/internal/constraint-queries.js +14 -14
  419. package/dist/tools/suggest/internal/constraint-queries.js.map +1 -1
  420. package/dist/tools/suggest/internal/queries.d.ts +4 -4
  421. package/dist/tools/suggest/internal/queries.js +25 -25
  422. package/dist/tools/suggest/internal/queries.js.map +1 -1
  423. package/dist/tools/use_case/actions/get.d.ts +5 -3
  424. package/dist/tools/use_case/actions/get.d.ts.map +1 -1
  425. package/dist/tools/use_case/actions/get.js +20 -6
  426. package/dist/tools/use_case/actions/get.js.map +1 -1
  427. package/dist/tools/use_case/actions/list-all.d.ts +5 -3
  428. package/dist/tools/use_case/actions/list-all.d.ts.map +1 -1
  429. package/dist/tools/use_case/actions/list-all.js +36 -6
  430. package/dist/tools/use_case/actions/list-all.js.map +1 -1
  431. package/dist/tools/use_case/actions/search.d.ts +6 -3
  432. package/dist/tools/use_case/actions/search.d.ts.map +1 -1
  433. package/dist/tools/use_case/actions/search.js +37 -67
  434. package/dist/tools/use_case/actions/search.js.map +1 -1
  435. package/dist/tools/use_case/help/example.js +17 -17
  436. package/dist/tools/use_case/help/example.js.map +1 -1
  437. package/dist/types.d.ts +82 -153
  438. package/dist/types.d.ts.map +1 -1
  439. package/dist/types.js +0 -10
  440. package/dist/types.js.map +1 -1
  441. package/dist/utils/action-specs/constraint-specs.js +6 -6
  442. package/dist/utils/action-specs/constraint-specs.js.map +1 -1
  443. package/dist/utils/action-specs/index.d.ts +0 -2
  444. package/dist/utils/action-specs/index.d.ts.map +1 -1
  445. package/dist/utils/action-specs/index.js +0 -6
  446. package/dist/utils/action-specs/index.js.map +1 -1
  447. package/dist/utils/batch-validation.d.ts +1 -1
  448. package/dist/utils/batch-validation.js +3 -3
  449. package/dist/utils/batch-validation.js.map +1 -1
  450. package/dist/utils/case-insensitive-validator.d.ts +2 -2
  451. package/dist/utils/case-insensitive-validator.js +2 -2
  452. package/dist/utils/connection-hash.d.ts +37 -0
  453. package/dist/utils/connection-hash.d.ts.map +1 -0
  454. package/dist/utils/connection-hash.js +55 -0
  455. package/dist/utils/connection-hash.js.map +1 -0
  456. package/dist/utils/db-aggregations.js +16 -16
  457. package/dist/utils/db-aggregations.js.map +1 -1
  458. package/dist/utils/enum-converter.d.ts +0 -21
  459. package/dist/utils/enum-converter.d.ts.map +1 -1
  460. package/dist/utils/enum-converter.js +1 -23
  461. package/dist/utils/enum-converter.js.map +1 -1
  462. package/dist/utils/environment-detector.d.ts +30 -0
  463. package/dist/utils/environment-detector.d.ts.map +1 -0
  464. package/dist/utils/environment-detector.js +86 -0
  465. package/dist/utils/environment-detector.js.map +1 -0
  466. package/dist/utils/example-filter.d.ts +34 -0
  467. package/dist/utils/example-filter.d.ts.map +1 -0
  468. package/dist/utils/example-filter.js +45 -0
  469. package/dist/utils/example-filter.js.map +1 -0
  470. package/dist/utils/exporter/export.d.ts +2 -16
  471. package/dist/utils/exporter/export.d.ts.map +1 -1
  472. package/dist/utils/exporter/export.js +49 -130
  473. package/dist/utils/exporter/export.js.map +1 -1
  474. package/dist/utils/hook-queue.d.ts +60 -0
  475. package/dist/utils/hook-queue.d.ts.map +1 -1
  476. package/dist/utils/hook-queue.js +114 -11
  477. package/dist/utils/hook-queue.js.map +1 -1
  478. package/dist/utils/importer/import.d.ts.map +1 -1
  479. package/dist/utils/importer/import.js +33 -188
  480. package/dist/utils/importer/import.js.map +1 -1
  481. package/dist/utils/importer/master-tables.d.ts +2 -1
  482. package/dist/utils/importer/master-tables.d.ts.map +1 -1
  483. package/dist/utils/importer/master-tables.js +35 -81
  484. package/dist/utils/importer/master-tables.js.map +1 -1
  485. package/dist/utils/param-normalizer.d.ts +0 -1
  486. package/dist/utils/param-normalizer.d.ts.map +1 -1
  487. package/dist/utils/param-normalizer.js +1 -3
  488. package/dist/utils/param-normalizer.js.map +1 -1
  489. package/dist/utils/path-utils.d.ts +46 -0
  490. package/dist/utils/path-utils.d.ts.map +1 -0
  491. package/dist/utils/path-utils.js +74 -0
  492. package/dist/utils/path-utils.js.map +1 -0
  493. package/dist/utils/policy-validator.js +1 -1
  494. package/dist/utils/policy-validator.js.map +1 -1
  495. package/dist/utils/project-context.d.ts +23 -0
  496. package/dist/utils/project-context.d.ts.map +1 -1
  497. package/dist/utils/project-context.js +45 -3
  498. package/dist/utils/project-context.js.map +1 -1
  499. package/dist/utils/project-root.d.ts +2 -2
  500. package/dist/utils/project-root.js +2 -2
  501. package/dist/utils/sql-dump/core/index-export.js +7 -7
  502. package/dist/utils/sql-dump/schema/indexes.js +24 -24
  503. package/dist/utils/sql-dump/schema/tables.js +44 -44
  504. package/dist/utils/token-logging.js +6 -6
  505. package/dist/utils/token-logging.js.map +1 -1
  506. package/dist/utils/validators.js +1 -1
  507. package/dist/utils/validators.js.map +1 -1
  508. package/dist/utils/view-queries.d.ts +0 -8
  509. package/dist/utils/view-queries.d.ts.map +1 -1
  510. package/dist/utils/view-queries.js +29 -84
  511. package/dist/utils/view-queries.js.map +1 -1
  512. package/dist/watcher/index.d.ts +1 -4
  513. package/dist/watcher/index.d.ts.map +1 -1
  514. package/dist/watcher/index.js +1 -3
  515. package/dist/watcher/index.js.map +1 -1
  516. package/dist/watcher/queue-watcher.d.ts +10 -3
  517. package/dist/watcher/queue-watcher.d.ts.map +1 -1
  518. package/dist/watcher/queue-watcher.js +24 -21
  519. package/dist/watcher/queue-watcher.js.map +1 -1
  520. package/docs/CONFIGURATION.md +14 -14
  521. package/docs/DATABASE_AUTH.md +1 -1
  522. package/docs/HOOKS_GUIDE.md +30 -50
  523. package/docs/HOW_TO_UNINSTALL.md +199 -0
  524. package/docs/MIGRATION_CLEANUP_GUIDE.md +212 -0
  525. package/docs/MIGRATION_TO_SAAS.md +176 -0
  526. package/docs/SLASH_COMMANDS.md +1 -1
  527. package/docs/cli/DATABASE_MIGRATION.md +13 -13
  528. package/docs/cli/DATA_EXPORT_IMPORT.md +71 -69
  529. package/package.json +10 -8
  530. package/saas-connector/LICENSE +190 -0
  531. package/saas-connector/README.md +122 -0
  532. package/saas-connector/dist/auth/auth-manager.d.ts +6 -0
  533. package/saas-connector/dist/auth/auth-manager.d.ts.map +1 -0
  534. package/saas-connector/dist/auth/auth-manager.js +39 -0
  535. package/saas-connector/dist/auth/auth-manager.js.map +7 -0
  536. package/saas-connector/dist/backend/saas-backend.d.ts +20 -0
  537. package/saas-connector/dist/backend/saas-backend.d.ts.map +1 -0
  538. package/saas-connector/dist/backend/saas-backend.js +104 -0
  539. package/saas-connector/dist/backend/saas-backend.js.map +7 -0
  540. package/saas-connector/dist/client/http-client.d.ts +33 -0
  541. package/saas-connector/dist/client/http-client.d.ts.map +1 -0
  542. package/saas-connector/dist/client/http-client.js +226 -0
  543. package/saas-connector/dist/client/http-client.js.map +7 -0
  544. package/saas-connector/dist/client/types.d.ts +62 -0
  545. package/saas-connector/dist/client/types.d.ts.map +1 -0
  546. package/saas-connector/dist/client/types.js +17 -0
  547. package/saas-connector/dist/client/types.js.map +7 -0
  548. package/saas-connector/dist/config/constants.d.ts +14 -0
  549. package/saas-connector/dist/config/constants.d.ts.map +1 -0
  550. package/saas-connector/dist/config/constants.js +68 -0
  551. package/saas-connector/dist/config/constants.js.map +7 -0
  552. package/saas-connector/dist/errors/api-error.d.ts +26 -0
  553. package/saas-connector/dist/errors/api-error.d.ts.map +1 -0
  554. package/saas-connector/dist/errors/api-error.js +62 -0
  555. package/saas-connector/dist/errors/api-error.js.map +7 -0
  556. package/saas-connector/dist/index.d.ts +18 -0
  557. package/saas-connector/dist/index.d.ts.map +1 -0
  558. package/saas-connector/dist/index.js +51 -0
  559. package/saas-connector/dist/index.js.map +7 -0
  560. package/saas-connector/package-lock.json +518 -0
  561. package/saas-connector/package.json +34 -0
  562. package/scripts/copy-help-data.js +19 -0
  563. package/assets/config.example.toml +0 -120
  564. package/assets/kanban-style.png +0 -0
  565. package/assets/kanban-visualizer.png +0 -0
  566. package/assets/sample-agents/README.md +0 -36
  567. package/assets/sample-agents/sqlew-architect.md +0 -321
  568. package/assets/sample-agents/sqlew-researcher.md +0 -292
  569. package/assets/sample-agents/sqlew-scrum-master.md +0 -286
  570. package/assets/sample-commands/README.md +0 -56
  571. package/assets/sample-commands/sqlew.md +0 -144
  572. package/assets/sample-skills/sqlew-decision-format/SKILL.md +0 -73
  573. package/assets/sample-skills/sqlew-plan-guidance/SKILL.md +0 -62
  574. package/assets/schema.sql +0 -564
  575. package/dist/cli/hooks/init-hooks.d.ts +0 -35
  576. package/dist/cli/hooks/init-hooks.d.ts.map +0 -1
  577. package/dist/cli/hooks/init-hooks.js +0 -517
  578. package/dist/cli/hooks/init-hooks.js.map +0 -1
  579. package/dist/cli/hooks/plan-toml-parser.d.ts.map +0 -1
  580. package/dist/cli/hooks/plan-toml-parser.js.map +0 -1
  581. package/dist/init-agents.d.ts +0 -7
  582. package/dist/init-agents.d.ts.map +0 -1
  583. package/dist/init-agents.js +0 -206
  584. package/dist/init-agents.js.map +0 -1
  585. package/dist/init-commands.d.ts +0 -10
  586. package/dist/init-commands.d.ts.map +0 -1
  587. package/dist/init-commands.js +0 -46
  588. package/dist/init-commands.js.map +0 -1
  589. package/dist/init-skills.d.ts +0 -29
  590. package/dist/init-skills.d.ts.map +0 -1
  591. package/dist/init-skills.js +0 -183
  592. package/dist/init-skills.js.map +0 -1
  593. package/dist/sync-agents.d.ts +0 -13
  594. package/dist/sync-agents.d.ts.map +0 -1
  595. package/dist/sync-agents.js +0 -157
  596. package/dist/sync-agents.js.map +0 -1
  597. package/dist/sync-commands.d.ts +0 -13
  598. package/dist/sync-commands.d.ts.map +0 -1
  599. package/dist/sync-commands.js +0 -150
  600. package/dist/sync-commands.js.map +0 -1
  601. package/dist/sync-gitignore.d.ts +0 -13
  602. package/dist/sync-gitignore.d.ts.map +0 -1
  603. package/dist/sync-gitignore.js +0 -60
  604. package/dist/sync-gitignore.js.map +0 -1
  605. package/dist/tests/docker/native/task-operations.test.d.ts +0 -16
  606. package/dist/tests/docker/native/task-operations.test.d.ts.map +0 -1
  607. package/dist/tests/docker/native/task-operations.test.js +0 -800
  608. package/dist/tests/docker/native/task-operations.test.js.map +0 -1
  609. package/dist/tests/feature/decision/batch-validation-integration.test.d.ts +0 -6
  610. package/dist/tests/feature/decision/batch-validation-integration.test.d.ts.map +0 -1
  611. package/dist/tests/feature/decision/batch-validation-integration.test.js +0 -193
  612. package/dist/tests/feature/decision/batch-validation-integration.test.js.map +0 -1
  613. package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts +0 -6
  614. package/dist/tests/feature/task/auto-pruning-decision-link.test.d.ts.map +0 -1
  615. package/dist/tests/feature/task/auto-pruning-decision-link.test.js +0 -281
  616. package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +0 -1
  617. package/dist/tests/feature/task/auto-pruning-partial.test.d.ts +0 -6
  618. package/dist/tests/feature/task/auto-pruning-partial.test.d.ts.map +0 -1
  619. package/dist/tests/feature/task/auto-pruning-partial.test.js +0 -305
  620. package/dist/tests/feature/task/auto-pruning-partial.test.js.map +0 -1
  621. package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts +0 -6
  622. package/dist/tests/feature/task/auto-pruning-persistence.test.d.ts.map +0 -1
  623. package/dist/tests/feature/task/auto-pruning-persistence.test.js +0 -267
  624. package/dist/tests/feature/task/auto-pruning-persistence.test.js.map +0 -1
  625. package/dist/tests/feature/task/auto-pruning-safety.test.d.ts +0 -12
  626. package/dist/tests/feature/task/auto-pruning-safety.test.d.ts.map +0 -1
  627. package/dist/tests/feature/task/auto-pruning-safety.test.js +0 -224
  628. package/dist/tests/feature/task/auto-pruning-safety.test.js.map +0 -1
  629. package/dist/tests/feature/task/dependencies.test.d.ts +0 -7
  630. package/dist/tests/feature/task/dependencies.test.d.ts.map +0 -1
  631. package/dist/tests/feature/task/dependencies.test.js +0 -656
  632. package/dist/tests/feature/task/dependencies.test.js.map +0 -1
  633. package/dist/tests/feature/task/file-actions-integration.test.d.ts +0 -10
  634. package/dist/tests/feature/task/file-actions-integration.test.d.ts.map +0 -1
  635. package/dist/tests/feature/task/file-actions-integration.test.js +0 -162
  636. package/dist/tests/feature/task/file-actions-integration.test.js.map +0 -1
  637. package/dist/tests/feature/task/file-actions-validation.test.d.ts +0 -6
  638. package/dist/tests/feature/task/file-actions-validation.test.d.ts.map +0 -1
  639. package/dist/tests/feature/task/file-actions-validation.test.js +0 -228
  640. package/dist/tests/feature/task/file-actions-validation.test.js.map +0 -1
  641. package/dist/tests/feature/task/link-file-backward-compat.test.d.ts +0 -6
  642. package/dist/tests/feature/task/link-file-backward-compat.test.d.ts.map +0 -1
  643. package/dist/tests/feature/task/link-file-backward-compat.test.js +0 -280
  644. package/dist/tests/feature/task/link-file-backward-compat.test.js.map +0 -1
  645. package/dist/tests/feature/task/watch-files-action.test.d.ts +0 -8
  646. package/dist/tests/feature/task/watch-files-action.test.d.ts.map +0 -1
  647. package/dist/tests/feature/task/watch-files-action.test.js +0 -402
  648. package/dist/tests/feature/task/watch-files-action.test.js.map +0 -1
  649. package/dist/tests/feature/task/watch-files-parameter.test.d.ts +0 -8
  650. package/dist/tests/feature/task/watch-files-parameter.test.d.ts.map +0 -1
  651. package/dist/tests/feature/task/watch-files-parameter.test.js +0 -283
  652. package/dist/tests/feature/task/watch-files-parameter.test.js.map +0 -1
  653. package/dist/tests/integration/all-features.standalone.d.ts +0 -7
  654. package/dist/tests/integration/all-features.standalone.d.ts.map +0 -1
  655. package/dist/tests/integration/all-features.standalone.js +0 -417
  656. package/dist/tests/integration/all-features.standalone.js.map +0 -1
  657. package/dist/tests/unit/config/plan-toml-cache.test.d.ts.map +0 -1
  658. package/dist/tests/unit/config/plan-toml-cache.test.js.map +0 -1
  659. package/dist/tests/unit/hooks/plan-toml-parser.test.d.ts.map +0 -1
  660. package/dist/tests/unit/hooks/plan-toml-parser.test.js.map +0 -1
  661. package/dist/tools/files/actions/check-lock.d.ts +0 -16
  662. package/dist/tools/files/actions/check-lock.d.ts.map +0 -1
  663. package/dist/tools/files/actions/check-lock.js +0 -74
  664. package/dist/tools/files/actions/check-lock.js.map +0 -1
  665. package/dist/tools/files/actions/get.d.ts +0 -16
  666. package/dist/tools/files/actions/get.d.ts.map +0 -1
  667. package/dist/tools/files/actions/get.js +0 -85
  668. package/dist/tools/files/actions/get.js.map +0 -1
  669. package/dist/tools/files/actions/record-batch.d.ts +0 -18
  670. package/dist/tools/files/actions/record-batch.d.ts.map +0 -1
  671. package/dist/tools/files/actions/record-batch.js +0 -119
  672. package/dist/tools/files/actions/record-batch.js.map +0 -1
  673. package/dist/tools/files/actions/record.d.ts +0 -16
  674. package/dist/tools/files/actions/record.d.ts.map +0 -1
  675. package/dist/tools/files/actions/record.js +0 -43
  676. package/dist/tools/files/actions/record.js.map +0 -1
  677. package/dist/tools/files/actions/sqlite-flush.d.ts +0 -27
  678. package/dist/tools/files/actions/sqlite-flush.d.ts.map +0 -1
  679. package/dist/tools/files/actions/sqlite-flush.js +0 -66
  680. package/dist/tools/files/actions/sqlite-flush.js.map +0 -1
  681. package/dist/tools/files/help/example.d.ts +0 -5
  682. package/dist/tools/files/help/example.d.ts.map +0 -1
  683. package/dist/tools/files/help/example.js +0 -109
  684. package/dist/tools/files/help/example.js.map +0 -1
  685. package/dist/tools/files/help/help.d.ts +0 -5
  686. package/dist/tools/files/help/help.d.ts.map +0 -1
  687. package/dist/tools/files/help/help.js +0 -35
  688. package/dist/tools/files/help/help.js.map +0 -1
  689. package/dist/tools/files/index.d.ts +0 -14
  690. package/dist/tools/files/index.d.ts.map +0 -1
  691. package/dist/tools/files/index.js +0 -15
  692. package/dist/tools/files/index.js.map +0 -1
  693. package/dist/tools/files/internal/queries.d.ts +0 -18
  694. package/dist/tools/files/internal/queries.d.ts.map +0 -1
  695. package/dist/tools/files/internal/queries.js +0 -54
  696. package/dist/tools/files/internal/queries.js.map +0 -1
  697. package/dist/tools/files/internal/validation.d.ts +0 -18
  698. package/dist/tools/files/internal/validation.d.ts.map +0 -1
  699. package/dist/tools/files/internal/validation.js +0 -39
  700. package/dist/tools/files/internal/validation.js.map +0 -1
  701. package/dist/tools/files/types.d.ts +0 -6
  702. package/dist/tools/files/types.d.ts.map +0 -1
  703. package/dist/tools/files/types.js +0 -6
  704. package/dist/tools/files/types.js.map +0 -1
  705. package/dist/tools/help-queries.d.ts +0 -130
  706. package/dist/tools/help-queries.d.ts.map +0 -1
  707. package/dist/tools/help-queries.js +0 -411
  708. package/dist/tools/help-queries.js.map +0 -1
  709. package/dist/tools/tasks/actions/add-dependency.d.ts +0 -12
  710. package/dist/tools/tasks/actions/add-dependency.d.ts.map +0 -1
  711. package/dist/tools/tasks/actions/add-dependency.js +0 -129
  712. package/dist/tools/tasks/actions/add-dependency.js.map +0 -1
  713. package/dist/tools/tasks/actions/archive.d.ts +0 -11
  714. package/dist/tools/tasks/actions/archive.d.ts.map +0 -1
  715. package/dist/tools/tasks/actions/archive.js +0 -58
  716. package/dist/tools/tasks/actions/archive.js.map +0 -1
  717. package/dist/tools/tasks/actions/create-batch.d.ts +0 -19
  718. package/dist/tools/tasks/actions/create-batch.d.ts.map +0 -1
  719. package/dist/tools/tasks/actions/create-batch.js +0 -103
  720. package/dist/tools/tasks/actions/create-batch.js.map +0 -1
  721. package/dist/tools/tasks/actions/create.d.ts +0 -16
  722. package/dist/tools/tasks/actions/create.d.ts.map +0 -1
  723. package/dist/tools/tasks/actions/create.js +0 -163
  724. package/dist/tools/tasks/actions/create.js.map +0 -1
  725. package/dist/tools/tasks/actions/get-dependencies.d.ts +0 -12
  726. package/dist/tools/tasks/actions/get-dependencies.d.ts.map +0 -1
  727. package/dist/tools/tasks/actions/get-dependencies.js +0 -41
  728. package/dist/tools/tasks/actions/get-dependencies.js.map +0 -1
  729. package/dist/tools/tasks/actions/get-pruned-files.d.ts +0 -13
  730. package/dist/tools/tasks/actions/get-pruned-files.d.ts.map +0 -1
  731. package/dist/tools/tasks/actions/get-pruned-files.js +0 -45
  732. package/dist/tools/tasks/actions/get-pruned-files.js.map +0 -1
  733. package/dist/tools/tasks/actions/get.d.ts +0 -12
  734. package/dist/tools/tasks/actions/get.d.ts.map +0 -1
  735. package/dist/tools/tasks/actions/get.js +0 -84
  736. package/dist/tools/tasks/actions/get.js.map +0 -1
  737. package/dist/tools/tasks/actions/link-pruned-file.d.ts +0 -14
  738. package/dist/tools/tasks/actions/link-pruned-file.d.ts.map +0 -1
  739. package/dist/tools/tasks/actions/link-pruned-file.js +0 -68
  740. package/dist/tools/tasks/actions/link-pruned-file.js.map +0 -1
  741. package/dist/tools/tasks/actions/link.d.ts +0 -14
  742. package/dist/tools/tasks/actions/link.d.ts.map +0 -1
  743. package/dist/tools/tasks/actions/link.js +0 -120
  744. package/dist/tools/tasks/actions/link.js.map +0 -1
  745. package/dist/tools/tasks/actions/list.d.ts +0 -17
  746. package/dist/tools/tasks/actions/list.d.ts.map +0 -1
  747. package/dist/tools/tasks/actions/list.js +0 -100
  748. package/dist/tools/tasks/actions/list.js.map +0 -1
  749. package/dist/tools/tasks/actions/move.d.ts +0 -13
  750. package/dist/tools/tasks/actions/move.d.ts.map +0 -1
  751. package/dist/tools/tasks/actions/move.js +0 -91
  752. package/dist/tools/tasks/actions/move.js.map +0 -1
  753. package/dist/tools/tasks/actions/remove-dependency.d.ts +0 -12
  754. package/dist/tools/tasks/actions/remove-dependency.d.ts.map +0 -1
  755. package/dist/tools/tasks/actions/remove-dependency.js +0 -36
  756. package/dist/tools/tasks/actions/remove-dependency.js.map +0 -1
  757. package/dist/tools/tasks/actions/update.d.ts +0 -10
  758. package/dist/tools/tasks/actions/update.d.ts.map +0 -1
  759. package/dist/tools/tasks/actions/update.js +0 -183
  760. package/dist/tools/tasks/actions/update.js.map +0 -1
  761. package/dist/tools/tasks/actions/watch-files.d.ts +0 -14
  762. package/dist/tools/tasks/actions/watch-files.d.ts.map +0 -1
  763. package/dist/tools/tasks/actions/watch-files.js +0 -127
  764. package/dist/tools/tasks/actions/watch-files.js.map +0 -1
  765. package/dist/tools/tasks/help/example.d.ts +0 -8
  766. package/dist/tools/tasks/help/example.d.ts.map +0 -1
  767. package/dist/tools/tasks/help/example.js +0 -225
  768. package/dist/tools/tasks/help/example.js.map +0 -1
  769. package/dist/tools/tasks/help/help.d.ts +0 -8
  770. package/dist/tools/tasks/help/help.d.ts.map +0 -1
  771. package/dist/tools/tasks/help/help.js +0 -307
  772. package/dist/tools/tasks/help/help.js.map +0 -1
  773. package/dist/tools/tasks/help/use-case.d.ts +0 -11
  774. package/dist/tools/tasks/help/use-case.d.ts.map +0 -1
  775. package/dist/tools/tasks/help/use-case.js +0 -767
  776. package/dist/tools/tasks/help/use-case.js.map +0 -1
  777. package/dist/tools/tasks/index.d.ts +0 -28
  778. package/dist/tools/tasks/index.d.ts.map +0 -1
  779. package/dist/tools/tasks/index.js +0 -33
  780. package/dist/tools/tasks/index.js.map +0 -1
  781. package/dist/tools/tasks/internal/state-machine.d.ts +0 -16
  782. package/dist/tools/tasks/internal/state-machine.d.ts.map +0 -1
  783. package/dist/tools/tasks/internal/state-machine.js +0 -36
  784. package/dist/tools/tasks/internal/state-machine.js.map +0 -1
  785. package/dist/tools/tasks/internal/task-queries.d.ts +0 -12
  786. package/dist/tools/tasks/internal/task-queries.d.ts.map +0 -1
  787. package/dist/tools/tasks/internal/task-queries.js +0 -53
  788. package/dist/tools/tasks/internal/task-queries.js.map +0 -1
  789. package/dist/tools/tasks/internal/validation.d.ts +0 -47
  790. package/dist/tools/tasks/internal/validation.d.ts.map +0 -1
  791. package/dist/tools/tasks/internal/validation.js +0 -261
  792. package/dist/tools/tasks/internal/validation.js.map +0 -1
  793. package/dist/tools/tasks/types.d.ts +0 -80
  794. package/dist/tools/tasks/types.d.ts.map +0 -1
  795. package/dist/tools/tasks/types.js +0 -68
  796. package/dist/tools/tasks/types.js.map +0 -1
  797. package/dist/tools/tasks/watcher/status.d.ts +0 -9
  798. package/dist/tools/tasks/watcher/status.d.ts.map +0 -1
  799. package/dist/tools/tasks/watcher/status.js +0 -130
  800. package/dist/tools/tasks/watcher/status.js.map +0 -1
  801. package/dist/tools/tasks.d.ts +0 -16
  802. package/dist/tools/tasks.d.ts.map +0 -1
  803. package/dist/tools/tasks.js +0 -17
  804. package/dist/tools/tasks.js.map +0 -1
  805. package/dist/utils/action-specs/file-specs.d.ts +0 -9
  806. package/dist/utils/action-specs/file-specs.d.ts.map +0 -1
  807. package/dist/utils/action-specs/file-specs.js +0 -54
  808. package/dist/utils/action-specs/file-specs.js.map +0 -1
  809. package/dist/utils/action-specs/task-specs.d.ts +0 -9
  810. package/dist/utils/action-specs/task-specs.d.ts.map +0 -1
  811. package/dist/utils/action-specs/task-specs.js +0 -143
  812. package/dist/utils/action-specs/task-specs.js.map +0 -1
  813. package/dist/utils/cleanup.d.ts +0 -69
  814. package/dist/utils/cleanup.d.ts.map +0 -1
  815. package/dist/utils/cleanup.js +0 -102
  816. package/dist/utils/cleanup.js.map +0 -1
  817. package/dist/utils/file-pruning.d.ts +0 -93
  818. package/dist/utils/file-pruning.d.ts.map +0 -1
  819. package/dist/utils/file-pruning.js +0 -194
  820. package/dist/utils/file-pruning.js.map +0 -1
  821. package/dist/utils/importer/topological-sort.d.ts +0 -61
  822. package/dist/utils/importer/topological-sort.d.ts.map +0 -1
  823. package/dist/utils/importer/topological-sort.js +0 -143
  824. package/dist/utils/importer/topological-sort.js.map +0 -1
  825. package/dist/utils/retention.d.ts +0 -65
  826. package/dist/utils/retention.d.ts.map +0 -1
  827. package/dist/utils/retention.js +0 -156
  828. package/dist/utils/retention.js.map +0 -1
  829. package/dist/utils/task-stale-detection.d.ts +0 -98
  830. package/dist/utils/task-stale-detection.d.ts.map +0 -1
  831. package/dist/utils/task-stale-detection.js +0 -479
  832. package/dist/utils/task-stale-detection.js.map +0 -1
  833. package/dist/watcher/file-watcher.d.ts +0 -131
  834. package/dist/watcher/file-watcher.d.ts.map +0 -1
  835. package/dist/watcher/file-watcher.js +0 -730
  836. package/dist/watcher/file-watcher.js.map +0 -1
  837. package/dist/watcher/test-executor.d.ts +0 -23
  838. package/dist/watcher/test-executor.d.ts.map +0 -1
  839. package/dist/watcher/test-executor.js +0 -226
  840. package/dist/watcher/test-executor.js.map +0 -1
  841. package/docs/TASK_SYSTEM_DEPRECATED.md +0 -88
@@ -1,656 +0,0 @@
1
- /**
2
- * Unit tests for Task Dependency feature
3
- * Tests add_dependency, remove_dependency, get_dependencies actions
4
- * and enhanced list/get actions with dependency support
5
- */
6
- import { describe, it, beforeEach, afterEach } from 'node:test';
7
- import assert from 'node:assert/strict';
8
- import { initializeDatabase, closeDatabase } from '../../../database.js';
9
- import { ProjectContext } from '../../../utils/project-context.js';
10
- import fs from 'fs';
11
- import path from 'path';
12
- import os from 'os';
13
- /**
14
- * Test database instance
15
- */
16
- let testDb;
17
- let tempDir;
18
- let tempDbPath;
19
- /**
20
- * Helper: Create a test task
21
- * Note: Agent tracking removed in v4.0
22
- */
23
- async function createTestTask(db, title, status = 'todo') {
24
- const projectId = ProjectContext.getInstance().getProjectId();
25
- const statusIdMap = {
26
- 'todo': 1,
27
- 'in_progress': 2,
28
- 'waiting_review': 3,
29
- 'blocked': 4,
30
- 'done': 5,
31
- 'archived': 6
32
- };
33
- const statusId = statusIdMap[status];
34
- const knex = db.getKnex();
35
- const now = Math.floor(Date.now() / 1000);
36
- const [taskId] = await knex('v4_tasks').insert({
37
- title,
38
- status_id: statusId,
39
- priority: 2,
40
- project_id: projectId,
41
- created_ts: now,
42
- updated_ts: now
43
- });
44
- return taskId;
45
- }
46
- /**
47
- * Inline implementation of addDependency for testing (avoiding module dependency)
48
- */
49
- async function addDependencyTest(db, params) {
50
- if (!params.depends_on_task_id) {
51
- throw new Error('Parameter "depends_on_task_id" is required');
52
- }
53
- if (!params.task_id) {
54
- throw new Error('Parameter "task_id" is required');
55
- }
56
- const knex = db.getKnex();
57
- return await knex.transaction(async (trx) => {
58
- const TASK_STATUS_ARCHIVED = 6;
59
- // Validation 1: No self-dependencies
60
- if (params.depends_on_task_id === params.task_id) {
61
- throw new Error('Self-dependency not allowed');
62
- }
63
- // Validation 2: Both tasks must exist and check if archived
64
- const dependsOnTask = await trx('v4_tasks')
65
- .where({ id: params.depends_on_task_id })
66
- .select('id', 'status_id')
67
- .first();
68
- const task = await trx('v4_tasks')
69
- .where({ id: params.task_id })
70
- .select('id', 'status_id')
71
- .first();
72
- if (!dependsOnTask) {
73
- throw new Error(`Task #${params.depends_on_task_id} not found`);
74
- }
75
- if (!task) {
76
- throw new Error(`Task #${params.task_id} not found`);
77
- }
78
- // Validation 3: Neither task is archived
79
- if (dependsOnTask.status_id === TASK_STATUS_ARCHIVED) {
80
- throw new Error(`Cannot add dependency: Task #${params.depends_on_task_id} is archived`);
81
- }
82
- if (task.status_id === TASK_STATUS_ARCHIVED) {
83
- throw new Error(`Cannot add dependency: Task #${params.task_id} is archived`);
84
- }
85
- // Validation 4: No direct circular (reverse relationship)
86
- const projectId = ProjectContext.getInstance().getProjectId();
87
- const reverseExists = await trx('v4_task_dependencies')
88
- .where({
89
- project_id: projectId,
90
- blocker_task_id: params.task_id,
91
- blocked_task_id: params.depends_on_task_id
92
- })
93
- .first();
94
- if (reverseExists) {
95
- throw new Error(`Circular dependency detected: Task #${params.task_id} already depends on Task #${params.depends_on_task_id}`);
96
- }
97
- // Validation 5: No transitive circular (check if adding this would create a cycle)
98
- const cycleCheck = await trx.raw(`
99
- WITH RECURSIVE dependency_chain AS (
100
- -- Start from the task that would have the dependency
101
- SELECT blocked_task_id, 1 as depth
102
- FROM v4_task_dependencies
103
- WHERE blocker_task_id = ?
104
-
105
- UNION ALL
106
-
107
- -- Follow the chain of dependencies
108
- SELECT d.blocked_task_id, dc.depth + 1
109
- FROM v4_task_dependencies d
110
- JOIN dependency_chain dc ON d.blocker_task_id = dc.blocked_task_id
111
- WHERE dc.depth < 100
112
- )
113
- SELECT blocked_task_id FROM dependency_chain WHERE blocked_task_id = ?
114
- `, [params.task_id, params.depends_on_task_id]);
115
- const cycleResult = Array.isArray(cycleCheck) ? cycleCheck[0] : cycleCheck;
116
- if (cycleResult && cycleResult.blocked_task_id) {
117
- // Build cycle path for error message
118
- const cyclePathResult = await trx.raw(`
119
- WITH RECURSIVE dependency_chain AS (
120
- SELECT blocked_task_id, 1 as depth,
121
- CAST(blocked_task_id AS TEXT) as path
122
- FROM v4_task_dependencies
123
- WHERE blocker_task_id = ?
124
-
125
- UNION ALL
126
-
127
- SELECT d.blocked_task_id, dc.depth + 1,
128
- dc.path || ' → ' || d.blocked_task_id
129
- FROM v4_task_dependencies d
130
- JOIN dependency_chain dc ON d.blocker_task_id = dc.blocked_task_id
131
- WHERE dc.depth < 100
132
- )
133
- SELECT path FROM dependency_chain WHERE blocked_task_id = ? ORDER BY depth DESC LIMIT 1
134
- `, [params.task_id, params.depends_on_task_id]);
135
- const pathResult = Array.isArray(cyclePathResult) ? cyclePathResult[0] : cyclePathResult;
136
- const cyclePath = pathResult?.path || `#${params.task_id} → ... → #${params.depends_on_task_id}`;
137
- throw new Error(`Circular dependency detected: Task #${params.depends_on_task_id} → #${cyclePath} → #${params.depends_on_task_id}`);
138
- }
139
- // All validations passed - insert dependency
140
- const now = Math.floor(Date.now() / 1000);
141
- await trx('v4_task_dependencies').insert({
142
- project_id: projectId,
143
- blocker_task_id: params.depends_on_task_id,
144
- blocked_task_id: params.task_id,
145
- created_ts: now
146
- });
147
- return {
148
- success: true,
149
- message: `Dependency added: Task #${params.task_id} depends on Task #${params.depends_on_task_id}`
150
- };
151
- });
152
- }
153
- /**
154
- * Inline implementation of removeDependency for testing
155
- */
156
- async function removeDependencyTest(db, params) {
157
- if (!params.depends_on_task_id) {
158
- throw new Error('Parameter "depends_on_task_id" is required');
159
- }
160
- if (!params.task_id) {
161
- throw new Error('Parameter "task_id" is required');
162
- }
163
- const knex = db.getKnex();
164
- const projectId = ProjectContext.getInstance().getProjectId();
165
- await knex('v4_task_dependencies')
166
- .where({
167
- project_id: projectId,
168
- blocker_task_id: params.depends_on_task_id,
169
- blocked_task_id: params.task_id
170
- })
171
- .delete();
172
- return {
173
- success: true,
174
- message: `Dependency removed: Task #${params.task_id} no longer depends on Task #${params.depends_on_task_id}`
175
- };
176
- }
177
- /**
178
- * Inline implementation of getDependencies for testing
179
- */
180
- async function getDependenciesTest(db, params) {
181
- if (!params.task_id) {
182
- throw new Error('Parameter "task_id" is required');
183
- }
184
- const includeDetails = params.include_details || false;
185
- const knex = db.getKnex();
186
- // Check if task exists
187
- const taskExists = await knex('v4_tasks')
188
- .where({ id: params.task_id })
189
- .select('id')
190
- .first();
191
- if (!taskExists) {
192
- throw new Error(`Task with id ${params.task_id} not found`);
193
- }
194
- // Build query based on include_details flag
195
- // Note: Agent tracking removed in v4.0
196
- let selectFields;
197
- if (includeDetails) {
198
- selectFields = [
199
- 't.id',
200
- 't.title',
201
- 's.name as status',
202
- 't.priority',
203
- 't.created_ts',
204
- 't.updated_ts',
205
- 'td.description'
206
- ];
207
- }
208
- else {
209
- selectFields = [
210
- 't.id',
211
- 't.title',
212
- 's.name as status',
213
- 't.priority'
214
- ];
215
- }
216
- // Get blockers (tasks that this task depends on)
217
- let blockersQuery = knex('v4_tasks as t')
218
- .join('v4_task_dependencies as d', 't.id', 'd.blocker_task_id')
219
- .leftJoin('v4_task_statuses as s', 't.status_id', 's.id')
220
- .where('d.blocked_task_id', params.task_id)
221
- .select(selectFields);
222
- if (includeDetails) {
223
- blockersQuery = blockersQuery.leftJoin('v4_task_details as td', 't.id', 'td.task_id');
224
- }
225
- const blockers = await blockersQuery;
226
- // Get blocking (tasks that depend on this task)
227
- let blockingQuery = knex('v4_tasks as t')
228
- .join('v4_task_dependencies as d', 't.id', 'd.blocked_task_id')
229
- .leftJoin('v4_task_statuses as s', 't.status_id', 's.id')
230
- .where('d.blocker_task_id', params.task_id)
231
- .select(selectFields);
232
- if (includeDetails) {
233
- blockingQuery = blockingQuery.leftJoin('v4_task_details as td', 't.id', 'td.task_id');
234
- }
235
- const blocking = await blockingQuery;
236
- return {
237
- task_id: params.task_id,
238
- blockers,
239
- blocking
240
- };
241
- }
242
- /**
243
- * Setup before each test
244
- */
245
- beforeEach(async () => {
246
- // Create temp directory for test files and database
247
- tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sqlew-test-'));
248
- tempDbPath = path.join(tempDir, 'test.db');
249
- // Initialize database with Knex adapter
250
- testDb = await initializeDatabase({
251
- databaseType: 'sqlite',
252
- connection: {
253
- filename: tempDbPath,
254
- },
255
- });
256
- // Initialize project context (required after v3.7.0)
257
- const knex = testDb.getKnex();
258
- const projectContext = ProjectContext.getInstance();
259
- await projectContext.ensureProject(knex, 'test-task-dependencies', 'config', {
260
- projectRootPath: process.cwd()
261
- });
262
- });
263
- afterEach(async () => {
264
- await closeDatabase();
265
- // Reset ProjectContext singleton for test isolation
266
- ProjectContext.reset();
267
- // Cleanup temp directory
268
- if (fs.existsSync(tempDir)) {
269
- fs.rmSync(tempDir, { recursive: true, force: true });
270
- }
271
- });
272
- // ============================================================================
273
- // Task #66: Unit Tests for add_dependency Validation
274
- // ============================================================================
275
- describe('add_dependency - Success Cases', () => {
276
- it('should add valid dependency', async () => {
277
- // Arrange
278
- const task1 = await createTestTask(testDb, 'Task 1');
279
- const task2 = await createTestTask(testDb, 'Task 2');
280
- // Act
281
- const result = await addDependencyTest(testDb, {
282
- depends_on_task_id: task1,
283
- task_id: task2
284
- });
285
- // Assert
286
- assert.strictEqual(result.success, true);
287
- assert.match(result.message, /Dependency added/);
288
- // Verify in database
289
- const knex = testDb.getKnex();
290
- const deps = await knex('v4_task_dependencies')
291
- .where({
292
- blocker_task_id: task1,
293
- blocked_task_id: task2
294
- })
295
- .first();
296
- assert.ok(deps);
297
- });
298
- it('should add valid dependency and verify via get_dependencies', async () => {
299
- // Arrange
300
- const task1 = await createTestTask(testDb, 'Task 1');
301
- const task2 = await createTestTask(testDb, 'Task 2');
302
- // Act
303
- await addDependencyTest(testDb, {
304
- depends_on_task_id: task1,
305
- task_id: task2
306
- });
307
- const result = await getDependenciesTest(testDb, { task_id: task2 });
308
- // Assert
309
- assert.strictEqual(result.task_id, task2);
310
- assert.strictEqual(result.blockers.length, 1);
311
- assert.strictEqual(result.blockers[0].id, task1);
312
- assert.strictEqual(result.blocking.length, 0);
313
- });
314
- });
315
- describe('add_dependency - Validation: Self-Dependency', () => {
316
- it('should reject self-dependency', async () => {
317
- // Arrange
318
- const task1 = await createTestTask(testDb, 'Task 1');
319
- // Act & Assert
320
- await assert.rejects(async () => {
321
- await addDependencyTest(testDb, {
322
- depends_on_task_id: task1,
323
- task_id: task1
324
- });
325
- }, {
326
- message: /Self-dependency not allowed/
327
- });
328
- });
329
- });
330
- describe('add_dependency - Validation: Direct Circular', () => {
331
- it('should reject direct circular dependency', async () => {
332
- // Arrange
333
- const taskA = await createTestTask(testDb, 'Task A');
334
- const taskB = await createTestTask(testDb, 'Task B');
335
- // Add A blocks B (B depends on A)
336
- await addDependencyTest(testDb, {
337
- depends_on_task_id: taskA,
338
- task_id: taskB
339
- });
340
- // Act & Assert - Try to add B blocks A (A depends on B)
341
- await assert.rejects(async () => {
342
- await addDependencyTest(testDb, {
343
- depends_on_task_id: taskB,
344
- task_id: taskA
345
- });
346
- }, {
347
- message: /Circular dependency detected/
348
- });
349
- });
350
- });
351
- describe('add_dependency - Validation: Transitive Circular', () => {
352
- it('should reject transitive circular dependency (A→B→C→A)', async () => {
353
- // Arrange
354
- const taskA = await createTestTask(testDb, 'Task A');
355
- const taskB = await createTestTask(testDb, 'Task B');
356
- const taskC = await createTestTask(testDb, 'Task C');
357
- // Add A blocks B (B depends on A)
358
- await addDependencyTest(testDb, {
359
- depends_on_task_id: taskA,
360
- task_id: taskB
361
- });
362
- // Add B blocks C (C depends on B)
363
- await addDependencyTest(testDb, {
364
- depends_on_task_id: taskB,
365
- task_id: taskC
366
- });
367
- // Act & Assert - Try to add C blocks A (A depends on C, would create cycle)
368
- await assert.rejects(async () => {
369
- await addDependencyTest(testDb, {
370
- depends_on_task_id: taskC,
371
- task_id: taskA
372
- });
373
- }, {
374
- message: /Circular dependency detected/
375
- });
376
- });
377
- it('should reject transitive circular with cycle path in error message', async () => {
378
- // Arrange
379
- const task1 = await createTestTask(testDb, 'Task 1');
380
- const task2 = await createTestTask(testDb, 'Task 2');
381
- const task3 = await createTestTask(testDb, 'Task 3');
382
- // Create chain: 1 → 2 → 3 (2 depends on 1, 3 depends on 2)
383
- await addDependencyTest(testDb, {
384
- depends_on_task_id: task1,
385
- task_id: task2
386
- });
387
- await addDependencyTest(testDb, {
388
- depends_on_task_id: task2,
389
- task_id: task3
390
- });
391
- // Act & Assert - Try to add 3 → 1 (1 depends on 3)
392
- let errorMessage = '';
393
- try {
394
- await addDependencyTest(testDb, {
395
- depends_on_task_id: task3,
396
- task_id: task1
397
- });
398
- }
399
- catch (error) {
400
- errorMessage = error instanceof Error ? error.message : '';
401
- }
402
- // Verify error message contains cycle path
403
- assert.match(errorMessage, /Circular dependency detected/);
404
- // The error message should contain task IDs (may have # prefix or not depending on path formatting)
405
- assert.match(errorMessage, new RegExp(`${task3}`));
406
- assert.match(errorMessage, new RegExp(`${task2}`));
407
- assert.match(errorMessage, new RegExp(`Task #${task3}`)); // Verify the main task ID has # prefix
408
- });
409
- });
410
- describe('add_dependency - Validation: Non-Existent Tasks', () => {
411
- it('should reject dependency with non-existent blocker', async () => {
412
- // Arrange
413
- const task1 = await createTestTask(testDb, 'Task 1');
414
- // Act & Assert
415
- await assert.rejects(async () => {
416
- await addDependencyTest(testDb, {
417
- depends_on_task_id: 999,
418
- task_id: task1
419
- });
420
- }, {
421
- message: /Task #999 not found/
422
- });
423
- });
424
- it('should reject dependency with non-existent blocked', async () => {
425
- // Arrange
426
- const task1 = await createTestTask(testDb, 'Task 1');
427
- // Act & Assert
428
- await assert.rejects(async () => {
429
- await addDependencyTest(testDb, {
430
- depends_on_task_id: task1,
431
- task_id: 999
432
- });
433
- }, {
434
- message: /Task #999 not found/
435
- });
436
- });
437
- });
438
- describe('add_dependency - Validation: Archived Tasks', () => {
439
- it('should reject dependency with archived blocker', async () => {
440
- // Arrange
441
- const task1 = await createTestTask(testDb, 'Task 1', 'archived');
442
- const task2 = await createTestTask(testDb, 'Task 2');
443
- // Act & Assert
444
- await assert.rejects(async () => {
445
- await addDependencyTest(testDb, {
446
- depends_on_task_id: task1,
447
- task_id: task2
448
- });
449
- }, {
450
- message: /Cannot add dependency: Task #\d+ is archived/
451
- });
452
- });
453
- it('should reject dependency with archived blocked', async () => {
454
- // Arrange
455
- const task1 = await createTestTask(testDb, 'Task 1');
456
- const task2 = await createTestTask(testDb, 'Task 2', 'archived');
457
- // Act & Assert
458
- await assert.rejects(async () => {
459
- await addDependencyTest(testDb, {
460
- depends_on_task_id: task1,
461
- task_id: task2
462
- });
463
- }, {
464
- message: /Cannot add dependency: Task #\d+ is archived/
465
- });
466
- });
467
- });
468
- // ============================================================================
469
- // Task #67: Unit Tests for remove_dependency and get_dependencies
470
- // ============================================================================
471
- describe('remove_dependency', () => {
472
- it('should remove existing dependency', async () => {
473
- // Arrange
474
- const task1 = await createTestTask(testDb, 'Task 1');
475
- const task2 = await createTestTask(testDb, 'Task 2');
476
- await addDependencyTest(testDb, {
477
- depends_on_task_id: task1,
478
- task_id: task2
479
- });
480
- // Verify it exists
481
- const beforeDeps = await getDependenciesTest(testDb, { task_id: task2 });
482
- assert.strictEqual(beforeDeps.blockers.length, 1);
483
- // Act
484
- const result = await removeDependencyTest(testDb, {
485
- depends_on_task_id: task1,
486
- task_id: task2
487
- });
488
- // Assert
489
- assert.strictEqual(result.success, true);
490
- assert.match(result.message, /Dependency removed/);
491
- // Verify it no longer exists
492
- const afterDeps = await getDependenciesTest(testDb, { task_id: task2 });
493
- assert.strictEqual(afterDeps.blockers.length, 0);
494
- });
495
- it('should succeed silently when removing non-existent dependency (idempotent)', async () => {
496
- // Arrange
497
- const task1 = await createTestTask(testDb, 'Task 1');
498
- const task2 = await createTestTask(testDb, 'Task 2');
499
- // Act - Remove dependency that doesn't exist
500
- const result = await removeDependencyTest(testDb, {
501
- depends_on_task_id: task1,
502
- task_id: task2
503
- });
504
- // Assert
505
- assert.strictEqual(result.success, true);
506
- assert.match(result.message, /Dependency removed/);
507
- });
508
- });
509
- describe('get_dependencies - Metadata Only', () => {
510
- it('should return blockers and blocking (metadata-only)', async () => {
511
- // Arrange
512
- const taskA = await createTestTask(testDb, 'Task A');
513
- const taskB = await createTestTask(testDb, 'Task B');
514
- const taskC = await createTestTask(testDb, 'Task C');
515
- // A blocks B, B blocks C (B depends on A, C depends on B)
516
- await addDependencyTest(testDb, {
517
- depends_on_task_id: taskA,
518
- task_id: taskB
519
- });
520
- await addDependencyTest(testDb, {
521
- depends_on_task_id: taskB,
522
- task_id: taskC
523
- });
524
- // Act - Get dependencies for B
525
- const result = await getDependenciesTest(testDb, { task_id: taskB });
526
- // Assert
527
- assert.strictEqual(result.task_id, taskB);
528
- // B is blocked by A
529
- assert.strictEqual(result.blockers.length, 1);
530
- assert.strictEqual(result.blockers[0].id, taskA);
531
- assert.strictEqual(result.blockers[0].title, 'Task A');
532
- // B blocks C
533
- assert.strictEqual(result.blocking.length, 1);
534
- assert.strictEqual(result.blocking[0].id, taskC);
535
- assert.strictEqual(result.blocking[0].title, 'Task C');
536
- // Verify metadata-only (no description field)
537
- assert.strictEqual(result.blockers[0].description, undefined);
538
- assert.strictEqual(result.blocking[0].description, undefined);
539
- });
540
- it('should return empty arrays for task with no dependencies', async () => {
541
- // Arrange
542
- const task1 = await createTestTask(testDb, 'Task 1');
543
- // Act
544
- const result = await getDependenciesTest(testDb, { task_id: task1 });
545
- // Assert
546
- assert.strictEqual(result.task_id, task1);
547
- assert.strictEqual(result.blockers.length, 0);
548
- assert.strictEqual(result.blocking.length, 0);
549
- });
550
- });
551
- describe('get_dependencies - With Details', () => {
552
- it('should return full details when include_details=true', async () => {
553
- // Arrange
554
- const task1 = await createTestTask(testDb, 'Task 1');
555
- const task2 = await createTestTask(testDb, 'Task 2');
556
- // Add description to task1
557
- const knex = testDb.getKnex();
558
- await knex('v4_task_details').insert({
559
- task_id: task1,
560
- description: 'This is task 1 description'
561
- });
562
- // Add dependency (task2 depends on task1)
563
- await addDependencyTest(testDb, {
564
- depends_on_task_id: task1,
565
- task_id: task2
566
- });
567
- // Act
568
- const result = await getDependenciesTest(testDb, {
569
- task_id: task2,
570
- include_details: true
571
- });
572
- // Assert
573
- assert.strictEqual(result.blockers.length, 1);
574
- assert.strictEqual(result.blockers[0].id, task1);
575
- assert.strictEqual(result.blockers[0].description, 'This is task 1 description');
576
- });
577
- it('should not include description by default', async () => {
578
- // Arrange
579
- const task1 = await createTestTask(testDb, 'Task 1');
580
- const task2 = await createTestTask(testDb, 'Task 2');
581
- // Add description
582
- const knex = testDb.getKnex();
583
- await knex('v4_task_details').insert({
584
- task_id: task1,
585
- description: 'This is task 1 description'
586
- });
587
- await addDependencyTest(testDb, {
588
- depends_on_task_id: task1,
589
- task_id: task2
590
- });
591
- // Act
592
- const result = await getDependenciesTest(testDb, { task_id: task2 });
593
- // Assert
594
- assert.strictEqual(result.blockers[0].description, undefined);
595
- });
596
- });
597
- describe('get_dependencies - Error Handling', () => {
598
- it('should throw error for non-existent task', async () => {
599
- // Act & Assert
600
- await assert.rejects(async () => {
601
- await getDependenciesTest(testDb, { task_id: 999 });
602
- }, {
603
- message: /Task with id 999 not found/
604
- });
605
- });
606
- });
607
- describe('CASCADE Deletion', () => {
608
- it('should cascade delete dependencies when task deleted', async () => {
609
- // Arrange
610
- const taskA = await createTestTask(testDb, 'Task A');
611
- const taskB = await createTestTask(testDb, 'Task B');
612
- // Add A blocks B (B depends on A)
613
- await addDependencyTest(testDb, {
614
- depends_on_task_id: taskA,
615
- task_id: taskB
616
- });
617
- // Verify dependency exists
618
- const beforeDeps = await getDependenciesTest(testDb, { task_id: taskB });
619
- assert.strictEqual(beforeDeps.blockers.length, 1);
620
- // Act - Delete task A
621
- const knex = testDb.getKnex();
622
- await knex('v4_tasks').where({ id: taskA }).delete();
623
- // Assert - Dependency should be deleted
624
- const depsInDb = await knex('v4_task_dependencies')
625
- .where('blocker_task_id', taskA)
626
- .orWhere('blocked_task_id', taskA);
627
- assert.strictEqual(depsInDb.length, 0);
628
- // Verify B still exists
629
- const taskBExists = await knex('v4_tasks').where({ id: taskB }).first();
630
- assert.ok(taskBExists);
631
- // Verify B has no dependencies anymore
632
- const afterDeps = await getDependenciesTest(testDb, { task_id: taskB });
633
- assert.strictEqual(afterDeps.blockers.length, 0);
634
- });
635
- it('should cascade delete when blocked task is deleted', async () => {
636
- // Arrange
637
- const taskA = await createTestTask(testDb, 'Task A');
638
- const taskB = await createTestTask(testDb, 'Task B');
639
- await addDependencyTest(testDb, {
640
- depends_on_task_id: taskA,
641
- task_id: taskB
642
- });
643
- // Act - Delete task B
644
- const knex = testDb.getKnex();
645
- await knex('v4_tasks').where({ id: taskB }).delete();
646
- // Assert - Dependency should be deleted
647
- const depsInDb = await knex('v4_task_dependencies')
648
- .where('blocked_task_id', taskB);
649
- assert.strictEqual(depsInDb.length, 0);
650
- // Verify A still exists with no dependencies
651
- const afterDeps = await getDependenciesTest(testDb, { task_id: taskA });
652
- assert.strictEqual(afterDeps.blocking.length, 0);
653
- });
654
- });
655
- console.log('✓ All task dependency tests defined');
656
- //# sourceMappingURL=dependencies.test.js.map