sqlew 3.5.3 → 3.6.1

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 (257) hide show
  1. package/CHANGELOG.md +247 -1772
  2. package/README.md +70 -304
  3. package/assets/config.example.toml +106 -0
  4. package/dist/adapters/index.d.ts +11 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/adapters/index.js +21 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/mysql-adapter.d.ts +31 -0
  9. package/dist/adapters/mysql-adapter.d.ts.map +1 -0
  10. package/dist/adapters/mysql-adapter.js +63 -0
  11. package/dist/adapters/mysql-adapter.js.map +1 -0
  12. package/dist/adapters/postgresql-adapter.d.ts +31 -0
  13. package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
  14. package/dist/adapters/postgresql-adapter.js +63 -0
  15. package/dist/adapters/postgresql-adapter.js.map +1 -0
  16. package/dist/adapters/sqlite-adapter.d.ts +37 -0
  17. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  18. package/dist/adapters/sqlite-adapter.js +129 -0
  19. package/dist/adapters/sqlite-adapter.js.map +1 -0
  20. package/dist/adapters/types.d.ts +33 -0
  21. package/dist/adapters/types.d.ts.map +1 -0
  22. package/dist/adapters/types.js +2 -0
  23. package/dist/adapters/types.js.map +1 -0
  24. package/dist/cli.js +55 -54
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config/example-generator.d.ts +11 -0
  27. package/dist/config/example-generator.d.ts.map +1 -0
  28. package/dist/config/example-generator.js +48 -0
  29. package/dist/config/example-generator.js.map +1 -0
  30. package/dist/config/loader.d.ts.map +1 -1
  31. package/dist/config/loader.js +4 -0
  32. package/dist/config/loader.js.map +1 -1
  33. package/dist/config/types.d.ts +11 -0
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/config/types.js.map +1 -1
  36. package/dist/database.d.ts +56 -121
  37. package/dist/database.d.ts.map +1 -1
  38. package/dist/database.js +266 -414
  39. package/dist/database.js.map +1 -1
  40. package/dist/index.js +329 -245
  41. package/dist/index.js.map +1 -1
  42. package/dist/knexfile.d.ts +6 -0
  43. package/dist/knexfile.d.ts.map +1 -0
  44. package/dist/knexfile.js +85 -0
  45. package/dist/knexfile.js.map +1 -0
  46. package/dist/migrations/add-help-system-tables.d.ts +35 -0
  47. package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
  48. package/dist/migrations/add-help-system-tables.js +206 -0
  49. package/dist/migrations/add-help-system-tables.js.map +1 -0
  50. package/dist/migrations/add-token-tracking.d.ts +28 -0
  51. package/dist/migrations/add-token-tracking.d.ts.map +1 -0
  52. package/dist/migrations/add-token-tracking.js +108 -0
  53. package/dist/migrations/add-token-tracking.js.map +1 -0
  54. package/dist/migrations/index.d.ts +25 -12
  55. package/dist/migrations/index.d.ts.map +1 -1
  56. package/dist/migrations/index.js +147 -20
  57. package/dist/migrations/index.js.map +1 -1
  58. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
  59. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
  60. package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
  61. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
  62. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
  63. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
  64. package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
  65. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
  66. package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
  67. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
  68. package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
  69. package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
  70. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
  71. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
  72. package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
  73. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
  74. package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
  75. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
  76. package/dist/migrations/knex/20251025070349_create_views.js +143 -0
  77. package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
  78. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
  79. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  80. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
  81. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  82. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
  83. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  84. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
  85. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  86. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
  87. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
  88. package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
  89. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
  90. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
  91. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  92. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
  93. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  94. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
  95. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
  96. package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
  97. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
  98. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
  99. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  100. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
  101. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
  102. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
  103. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  104. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
  105. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  106. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
  107. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  108. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
  109. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
  110. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
  111. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  112. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
  113. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  114. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
  115. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
  116. package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
  117. package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
  118. package/dist/migrations/seed-help-data.d.ts +48 -0
  119. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  120. package/dist/migrations/seed-help-data.js +1466 -0
  121. package/dist/migrations/seed-help-data.js.map +1 -0
  122. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  123. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  124. package/dist/migrations/seed-tool-metadata.js +392 -0
  125. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  126. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  127. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  128. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  129. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  130. package/dist/schema.d.ts.map +1 -1
  131. package/dist/schema.js +2 -0
  132. package/dist/schema.js.map +1 -1
  133. package/dist/tests/agent-reuse.test.d.ts +6 -0
  134. package/dist/tests/agent-reuse.test.d.ts.map +1 -0
  135. package/dist/tests/agent-reuse.test.js +242 -0
  136. package/dist/tests/agent-reuse.test.js.map +1 -0
  137. package/dist/tests/all-features.test.d.ts +7 -0
  138. package/dist/tests/all-features.test.d.ts.map +1 -0
  139. package/dist/tests/all-features.test.js +514 -0
  140. package/dist/tests/all-features.test.js.map +1 -0
  141. package/dist/tests/git-aware-completion.test.js +89 -70
  142. package/dist/tests/git-aware-completion.test.js.map +1 -1
  143. package/dist/tests/help-system.test.d.ts +23 -0
  144. package/dist/tests/help-system.test.d.ts.map +1 -0
  145. package/dist/tests/help-system.test.js +374 -0
  146. package/dist/tests/help-system.test.js.map +1 -0
  147. package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
  148. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
  149. package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
  150. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  151. package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
  152. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
  153. package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
  154. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
  155. package/dist/tests/tasks.dependencies.test.js +338 -307
  156. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  157. package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
  158. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  159. package/dist/tests/tasks.watch-files-action.test.js +122 -101
  160. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  161. package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
  162. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  163. package/dist/tests/two-step-git-completion.test.js +176 -133
  164. package/dist/tests/two-step-git-completion.test.js.map +1 -1
  165. package/dist/tests/vcs-staging.test.js +1 -1
  166. package/dist/tests/vcs-staging.test.js.map +1 -1
  167. package/dist/tools/config.d.ts +9 -6
  168. package/dist/tools/config.d.ts.map +1 -1
  169. package/dist/tools/config.js +16 -14
  170. package/dist/tools/config.js.map +1 -1
  171. package/dist/tools/constraints.d.ts +10 -7
  172. package/dist/tools/constraints.d.ts.map +1 -1
  173. package/dist/tools/constraints.js +73 -51
  174. package/dist/tools/constraints.js.map +1 -1
  175. package/dist/tools/context.d.ts +36 -33
  176. package/dist/tools/context.d.ts.map +1 -1
  177. package/dist/tools/context.js +441 -340
  178. package/dist/tools/context.js.map +1 -1
  179. package/dist/tools/files.d.ts +12 -9
  180. package/dist/tools/files.d.ts.map +1 -1
  181. package/dist/tools/files.js +173 -95
  182. package/dist/tools/files.js.map +1 -1
  183. package/dist/tools/help-queries.d.ts +130 -0
  184. package/dist/tools/help-queries.d.ts.map +1 -0
  185. package/dist/tools/help-queries.js +393 -0
  186. package/dist/tools/help-queries.js.map +1 -0
  187. package/dist/tools/messaging.d.ts +14 -11
  188. package/dist/tools/messaging.d.ts.map +1 -1
  189. package/dist/tools/messaging.js +239 -133
  190. package/dist/tools/messaging.js.map +1 -1
  191. package/dist/tools/tasks.d.ts +18 -16
  192. package/dist/tools/tasks.d.ts.map +1 -1
  193. package/dist/tools/tasks.js +519 -442
  194. package/dist/tools/tasks.js.map +1 -1
  195. package/dist/tools/utils.d.ts +14 -11
  196. package/dist/tools/utils.d.ts.map +1 -1
  197. package/dist/tools/utils.js +90 -122
  198. package/dist/tools/utils.js.map +1 -1
  199. package/dist/types.d.ts +1 -0
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/utils/activity-logging.d.ts +114 -0
  202. package/dist/utils/activity-logging.d.ts.map +1 -0
  203. package/dist/utils/activity-logging.js +162 -0
  204. package/dist/utils/activity-logging.js.map +1 -0
  205. package/dist/utils/batch.d.ts +2 -2
  206. package/dist/utils/batch.d.ts.map +1 -1
  207. package/dist/utils/batch.js +8 -8
  208. package/dist/utils/batch.js.map +1 -1
  209. package/dist/utils/cleanup.d.ts +24 -14
  210. package/dist/utils/cleanup.d.ts.map +1 -1
  211. package/dist/utils/cleanup.js +37 -27
  212. package/dist/utils/cleanup.js.map +1 -1
  213. package/dist/utils/debug-logger.d.ts +99 -0
  214. package/dist/utils/debug-logger.d.ts.map +1 -0
  215. package/dist/utils/debug-logger.js +267 -0
  216. package/dist/utils/debug-logger.js.map +1 -0
  217. package/dist/utils/error-handler.d.ts +28 -0
  218. package/dist/utils/error-handler.d.ts.map +1 -0
  219. package/dist/utils/error-handler.js +121 -0
  220. package/dist/utils/error-handler.js.map +1 -0
  221. package/dist/utils/help-tracking.d.ts +55 -0
  222. package/dist/utils/help-tracking.d.ts.map +1 -0
  223. package/dist/utils/help-tracking.js +88 -0
  224. package/dist/utils/help-tracking.js.map +1 -0
  225. package/dist/utils/param-parser.d.ts +23 -0
  226. package/dist/utils/param-parser.d.ts.map +1 -0
  227. package/dist/utils/param-parser.js +52 -0
  228. package/dist/utils/param-parser.js.map +1 -0
  229. package/dist/utils/retention.d.ts +17 -7
  230. package/dist/utils/retention.d.ts.map +1 -1
  231. package/dist/utils/retention.js +31 -12
  232. package/dist/utils/retention.js.map +1 -1
  233. package/dist/utils/task-stale-detection.d.ts +15 -13
  234. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  235. package/dist/utils/task-stale-detection.js +100 -302
  236. package/dist/utils/task-stale-detection.js.map +1 -1
  237. package/dist/utils/token-estimation.d.ts +72 -0
  238. package/dist/utils/token-estimation.d.ts.map +1 -0
  239. package/dist/utils/token-estimation.js +71 -0
  240. package/dist/utils/token-estimation.js.map +1 -0
  241. package/dist/utils/token-logging.d.ts +48 -0
  242. package/dist/utils/token-logging.d.ts.map +1 -0
  243. package/dist/utils/token-logging.js +112 -0
  244. package/dist/utils/token-logging.js.map +1 -0
  245. package/dist/utils/view-queries.d.ts +34 -0
  246. package/dist/utils/view-queries.d.ts.map +1 -0
  247. package/dist/utils/view-queries.js +192 -0
  248. package/dist/utils/view-queries.js.map +1 -0
  249. package/dist/watcher/file-watcher.d.ts.map +1 -1
  250. package/dist/watcher/file-watcher.js +25 -11
  251. package/dist/watcher/file-watcher.js.map +1 -1
  252. package/docs/BEST_PRACTICES.md +56 -448
  253. package/docs/MIGRATION_v3.6.0.md +170 -0
  254. package/docs/SHARED_CONCEPTS.md +63 -208
  255. package/docs/TASK_OVERVIEW.md +2 -2
  256. package/docs/TOOL_SELECTION.md +41 -248
  257. package/package.json +17 -4
@@ -1,13 +1,11 @@
1
1
  /**
2
2
  * Auto-stale detection for Kanban Task Watcher
3
3
  * Automatically transitions abandoned tasks based on time thresholds
4
+ *
5
+ * CONVERTED: Using Knex.js with DatabaseAdapter (async/await)
4
6
  */
5
- import { getConfigBool, getConfigInt } from '../database.js';
7
+ import { getConfigBool, getConfigInt, getAdapter } from '../database.js';
6
8
  import { calculateTaskArchiveCutoff } from './retention.js';
7
- import { checkReadyForReview } from './quality-checks.js';
8
- import { pruneNonExistentFiles } from './file-pruning.js';
9
- import { statSync, existsSync } from 'fs';
10
- import { join } from 'path';
11
9
  import { detectVCS } from './vcs-adapter.js';
12
10
  /**
13
11
  * Task status IDs (matching schema)
@@ -37,9 +35,12 @@ const CONFIG_KEYS = {
37
35
  };
38
36
  /**
39
37
  * Default configuration values
38
+ *
39
+ * STALE_HOURS_IN_PROGRESS: 18 hours (supports multi-day tasks and lunch breaks)
40
+ * STALE_HOURS_WAITING_REVIEW: 24 hours (1 day wait for review feedback)
40
41
  */
41
42
  const DEFAULTS = {
42
- STALE_HOURS_IN_PROGRESS: 2,
43
+ STALE_HOURS_IN_PROGRESS: 18,
43
44
  STALE_HOURS_WAITING_REVIEW: 24,
44
45
  AUTO_STALE_ENABLED: true,
45
46
  };
@@ -49,50 +50,53 @@ const DEFAULTS = {
49
50
  * Detection logic:
50
51
  * - Tasks in `in_progress` with `updated_ts` older than threshold → move to `waiting_review`
51
52
  *
52
- * @param db - Database instance
53
+ * @param adapter - Database adapter instance
53
54
  * @returns Count of transitioned tasks
54
55
  */
55
- export function detectAndTransitionStaleTasks(db) {
56
+ export async function detectAndTransitionStaleTasks(adapter) {
57
+ const actualAdapter = adapter ?? getAdapter();
58
+ const knex = actualAdapter.getKnex();
56
59
  // 1. Check if auto-stale is enabled
57
- const isEnabled = getConfigBool(db, CONFIG_KEYS.TASK_AUTO_STALE_ENABLED, DEFAULTS.AUTO_STALE_ENABLED);
60
+ const isEnabled = await getConfigBool(actualAdapter, CONFIG_KEYS.TASK_AUTO_STALE_ENABLED, DEFAULTS.AUTO_STALE_ENABLED);
58
61
  if (!isEnabled) {
59
62
  return 0;
60
63
  }
61
64
  // 2. Get threshold configs (in hours)
62
- const inProgressThresholdHours = getConfigInt(db, CONFIG_KEYS.TASK_STALE_HOURS_IN_PROGRESS, DEFAULTS.STALE_HOURS_IN_PROGRESS);
63
- const waitingReviewThresholdHours = getConfigInt(db, CONFIG_KEYS.TASK_STALE_HOURS_WAITING_REVIEW, DEFAULTS.STALE_HOURS_WAITING_REVIEW);
65
+ const inProgressThresholdHours = await getConfigInt(actualAdapter, CONFIG_KEYS.TASK_STALE_HOURS_IN_PROGRESS, DEFAULTS.STALE_HOURS_IN_PROGRESS);
66
+ const waitingReviewThresholdHours = await getConfigInt(actualAdapter, CONFIG_KEYS.TASK_STALE_HOURS_WAITING_REVIEW, DEFAULTS.STALE_HOURS_WAITING_REVIEW);
64
67
  // Convert hours to seconds for timestamp comparison
65
68
  const inProgressThresholdSeconds = inProgressThresholdHours * 3600;
66
69
  const waitingReviewThresholdSeconds = waitingReviewThresholdHours * 3600;
67
70
  let totalTransitioned = 0;
68
71
  // 3. Transition stale tasks in a transaction
69
- const updateStmt = db.transaction(() => {
72
+ await actualAdapter.transaction(async (trx) => {
70
73
  // 3a. Find and transition in_progress tasks older than threshold to waiting_review
71
- const inProgressTransitioned = db.prepare(`
72
- UPDATE t_tasks
73
- SET status_id = ?,
74
- updated_ts = unixepoch()
75
- WHERE status_id = ?
76
- AND updated_ts < unixepoch() - ?
77
- `).run(TASK_STATUS.WAITING_REVIEW, TASK_STATUS.IN_PROGRESS, inProgressThresholdSeconds);
78
- totalTransitioned += inProgressTransitioned.changes;
74
+ const currentTs = Math.floor(Date.now() / 1000);
75
+ const cutoffTs = currentTs - inProgressThresholdSeconds;
76
+ const inProgressTransitioned = await trx('t_tasks')
77
+ .where('status_id', TASK_STATUS.IN_PROGRESS)
78
+ .where('updated_ts', '<', cutoffTs)
79
+ .update({
80
+ status_id: TASK_STATUS.WAITING_REVIEW,
81
+ updated_ts: currentTs
82
+ });
83
+ totalTransitioned += inProgressTransitioned;
79
84
  });
80
- // Execute the transaction
81
- updateStmt();
82
85
  // 4. Return count of transitioned tasks
83
86
  return totalTransitioned;
84
87
  }
85
88
  /**
86
89
  * Get current auto-stale configuration
87
90
  *
88
- * @param db - Database instance
91
+ * @param adapter - Database adapter instance
89
92
  * @returns Current configuration values
90
93
  */
91
- export function getStaleDetectionConfig(db) {
94
+ export async function getStaleDetectionConfig(adapter) {
95
+ const actualAdapter = adapter ?? getAdapter();
92
96
  return {
93
- enabled: getConfigBool(db, CONFIG_KEYS.TASK_AUTO_STALE_ENABLED, DEFAULTS.AUTO_STALE_ENABLED),
94
- inProgressThresholdHours: getConfigInt(db, CONFIG_KEYS.TASK_STALE_HOURS_IN_PROGRESS, DEFAULTS.STALE_HOURS_IN_PROGRESS),
95
- waitingReviewThresholdHours: getConfigInt(db, CONFIG_KEYS.TASK_STALE_HOURS_WAITING_REVIEW, DEFAULTS.STALE_HOURS_WAITING_REVIEW),
97
+ enabled: await getConfigBool(actualAdapter, CONFIG_KEYS.TASK_AUTO_STALE_ENABLED, DEFAULTS.AUTO_STALE_ENABLED),
98
+ inProgressThresholdHours: await getConfigInt(actualAdapter, CONFIG_KEYS.TASK_STALE_HOURS_IN_PROGRESS, DEFAULTS.STALE_HOURS_IN_PROGRESS),
99
+ waitingReviewThresholdHours: await getConfigInt(actualAdapter, CONFIG_KEYS.TASK_STALE_HOURS_WAITING_REVIEW, DEFAULTS.STALE_HOURS_WAITING_REVIEW),
96
100
  };
97
101
  }
98
102
  /**
@@ -103,21 +107,24 @@ export function getStaleDetectionConfig(db) {
103
107
  * Default: 48 hours (2 days)
104
108
  * Weekend-aware: Task done Friday → archives Tuesday (skip Sat/Sun)
105
109
  *
106
- * @param db - Database instance
110
+ * @param adapter - Database adapter instance
107
111
  * @returns Count of archived tasks
108
112
  */
109
- export function autoArchiveOldDoneTasks(db) {
113
+ export async function autoArchiveOldDoneTasks(adapter) {
114
+ const actualAdapter = adapter ?? getAdapter();
115
+ const knex = actualAdapter.getKnex();
110
116
  // Calculate cutoff timestamp using weekend-aware retention logic
111
- const cutoffTimestamp = calculateTaskArchiveCutoff(db);
117
+ const cutoffTimestamp = await calculateTaskArchiveCutoff(actualAdapter);
112
118
  // Archive done tasks older than cutoff
113
- const result = db.prepare(`
114
- UPDATE t_tasks
115
- SET status_id = ?,
116
- updated_ts = unixepoch()
117
- WHERE status_id = ?
118
- AND updated_ts < ?
119
- `).run(TASK_STATUS.ARCHIVED, TASK_STATUS.DONE, cutoffTimestamp);
120
- return result.changes;
119
+ const currentTs = Math.floor(Date.now() / 1000);
120
+ const archivedCount = await knex('t_tasks')
121
+ .where('status_id', TASK_STATUS.DONE)
122
+ .where('updated_ts', '<', cutoffTimestamp)
123
+ .update({
124
+ status_id: TASK_STATUS.ARCHIVED,
125
+ updated_ts: currentTs
126
+ });
127
+ return archivedCount;
121
128
  }
122
129
  /**
123
130
  * Detect and complete tasks in waiting_review or in_progress when all watched files are committed
@@ -130,23 +137,23 @@ export function autoArchiveOldDoneTasks(db) {
130
137
  * - Supports multiple VCS: Git, Mercurial, SVN
131
138
  * - Gracefully handle non-VCS repos (skip auto-complete)
132
139
  *
133
- * @param db - Database instance
140
+ * @param adapter - Database adapter instance
134
141
  * @returns Count of auto-completed tasks
135
142
  */
136
- export async function detectAndCompleteReviewedTasks(db) {
143
+ export async function detectAndCompleteReviewedTasks(adapter) {
144
+ const actualAdapter = adapter ?? getAdapter();
145
+ const knex = actualAdapter.getKnex();
137
146
  // 1. Check if auto-complete is enabled
138
- const isEnabled = getConfigBool(db, CONFIG_KEYS.GIT_AUTO_COMPLETE_ENABLED, true);
147
+ const isEnabled = await getConfigBool(actualAdapter, CONFIG_KEYS.GIT_AUTO_COMPLETE_ENABLED, true);
139
148
  if (!isEnabled) {
140
149
  return 0;
141
150
  }
142
- const requireAllFilesCommitted = getConfigBool(db, CONFIG_KEYS.REQUIRE_ALL_FILES_COMMITTED, true);
151
+ const requireAllFilesCommitted = await getConfigBool(actualAdapter, CONFIG_KEYS.REQUIRE_ALL_FILES_COMMITTED, true);
143
152
  // 2. Find all waiting_review and in_progress tasks
144
- const candidateTasks = db.prepare(`
145
- SELECT t.id, t.created_ts, s.name as status_name
146
- FROM t_tasks t
147
- JOIN m_task_statuses s ON t.status_id = s.id
148
- WHERE s.name IN ('waiting_review', 'in_progress')
149
- `).all();
153
+ const candidateTasks = await knex('t_tasks as t')
154
+ .join('m_task_statuses as s', 't.status_id', 's.id')
155
+ .whereIn('s.name', ['waiting_review', 'in_progress'])
156
+ .select('t.id', 't.created_ts', 's.name as status_name');
150
157
  if (candidateTasks.length === 0) {
151
158
  return 0;
152
159
  }
@@ -164,12 +171,10 @@ export async function detectAndCompleteReviewedTasks(db) {
164
171
  for (const task of candidateTasks) {
165
172
  try {
166
173
  // Get watched files for this task
167
- const watchedFiles = db.prepare(`
168
- SELECT f.path
169
- FROM t_task_file_links tfl
170
- JOIN m_files f ON tfl.file_id = f.id
171
- WHERE tfl.task_id = ?
172
- `).all(task.id);
174
+ const watchedFiles = await knex('t_task_file_links as tfl')
175
+ .join('m_files as f', 'tfl.file_id', 'f.id')
176
+ .where('tfl.task_id', task.id)
177
+ .select('f.path');
173
178
  if (watchedFiles.length === 0) {
174
179
  // No watched files - skip this task
175
180
  continue;
@@ -201,12 +206,13 @@ export async function detectAndCompleteReviewedTasks(db) {
201
206
  : committedFiles.size > 0 && uncommittedFiles.length < filePaths.length; // At least SOME files committed
202
207
  if (shouldComplete) {
203
208
  // All watched files committed - transition to done
204
- db.prepare(`
205
- UPDATE t_tasks
206
- SET status_id = ?,
207
- updated_ts = unixepoch()
208
- WHERE id = ?
209
- `).run(TASK_STATUS.DONE, task.id);
209
+ const currentTs = Math.floor(Date.now() / 1000);
210
+ await knex('t_tasks')
211
+ .where({ id: task.id })
212
+ .update({
213
+ status_id: TASK_STATUS.DONE,
214
+ updated_ts: currentTs
215
+ });
210
216
  completed++;
211
217
  console.error(` ✓ Task #${task.id}: ${task.status_name} → done (all ${filePaths.length} watched files committed)`);
212
218
  }
@@ -234,90 +240,13 @@ export async function detectAndCompleteReviewedTasks(db) {
234
240
  * @param db - Database instance
235
241
  * @returns Count of auto-completed tasks
236
242
  */
237
- export async function detectAndCompleteOnStaging(db) {
238
- // 1. Check if auto-complete on staging is enabled
239
- const isEnabled = getConfigBool(db, 'git_auto_complete_on_stage', true);
240
- if (!isEnabled) {
241
- return 0;
242
- }
243
- const requireAllFilesStaged = getConfigBool(db, 'require_all_files_staged', true);
244
- // 2. Find all waiting_review tasks
245
- const candidateTasks = db.prepare(`
246
- SELECT t.id
247
- FROM t_tasks t
248
- JOIN m_task_statuses s ON t.status_id = s.id
249
- WHERE s.name = 'waiting_review'
250
- `).all();
251
- if (candidateTasks.length === 0) {
252
- return 0;
253
- }
254
- let completed = 0;
255
- const projectRoot = process.cwd();
256
- // 3. Detect VCS type
257
- const vcsAdapter = await detectVCS(projectRoot);
258
- if (!vcsAdapter) {
259
- // Not a VCS repository - skip VCS-aware completion
260
- return 0;
261
- }
262
- // 4. Get currently staged files
263
- let stagedFiles;
264
- try {
265
- const stagedFilesList = await vcsAdapter.getStagedFiles();
266
- stagedFiles = new Set(stagedFilesList);
267
- }
268
- catch (error) {
269
- // VCS query failed
270
- console.error(` ⏸ ${vcsAdapter.getVCSType()} staging query failed - ${error instanceof Error ? error.message : String(error)}`);
271
- return 0;
272
- }
273
- if (stagedFiles.size === 0) {
274
- // No staged files at all
275
- return 0;
276
- }
277
- // 5. For each candidate task, check if all watched files are staged
278
- for (const task of candidateTasks) {
279
- try {
280
- // Get watched files for this task
281
- const watchedFiles = db.prepare(`
282
- SELECT f.path
283
- FROM t_task_file_links tfl
284
- JOIN m_files f ON tfl.file_id = f.id
285
- WHERE tfl.task_id = ?
286
- `).all(task.id);
287
- if (watchedFiles.length === 0) {
288
- // No watched files - skip this task
289
- continue;
290
- }
291
- const filePaths = watchedFiles.map(f => f.path);
292
- // Check if all watched files are staged
293
- const unstagedFiles = [];
294
- for (const filePath of filePaths) {
295
- if (!stagedFiles.has(filePath)) {
296
- unstagedFiles.push(filePath);
297
- }
298
- }
299
- // Determine if task should auto-complete
300
- const shouldComplete = requireAllFilesStaged
301
- ? unstagedFiles.length === 0 // ALL files must be staged
302
- : stagedFiles.size > 0 && unstagedFiles.length < filePaths.length; // At least SOME files staged
303
- if (shouldComplete) {
304
- // All watched files staged - transition to done
305
- db.prepare(`
306
- UPDATE t_tasks
307
- SET status_id = ?,
308
- updated_ts = unixepoch()
309
- WHERE id = ?
310
- `).run(TASK_STATUS.DONE, task.id);
311
- completed++;
312
- console.error(` ✓ Task #${task.id}: waiting_review → done (all ${filePaths.length} watched files staged)`);
313
- }
314
- }
315
- catch (error) {
316
- console.error(` ✗ Error checking task #${task.id} for staged files:`, error);
317
- continue;
318
- }
319
- }
320
- return completed;
243
+ export async function detectAndCompleteOnStaging(adapter) {
244
+ const actualAdapter = adapter ?? getAdapter();
245
+ const knex = actualAdapter.getKnex();
246
+ // TODO: Convert this function to use Knex.js
247
+ // For now, return 0 as this function is not used by tasks.ts
248
+ console.warn('detectAndCompleteOnStaging not yet fully converted to Knex.js');
249
+ return 0;
321
250
  }
322
251
  /**
323
252
  * Detect and auto-archive tasks in done when all watched files are committed
@@ -332,20 +261,20 @@ export async function detectAndCompleteOnStaging(db) {
332
261
  * @param db - Database instance
333
262
  * @returns Count of auto-archived tasks
334
263
  */
335
- export async function detectAndArchiveOnCommit(db) {
264
+ export async function detectAndArchiveOnCommit(adapter) {
265
+ const actualAdapter = adapter ?? getAdapter();
266
+ const knex = actualAdapter.getKnex();
336
267
  // 1. Check if auto-archive on commit is enabled
337
- const isEnabled = getConfigBool(db, 'git_auto_archive_on_commit', true);
268
+ const isEnabled = await getConfigBool(actualAdapter, 'git_auto_archive_on_commit', true);
338
269
  if (!isEnabled) {
339
270
  return 0;
340
271
  }
341
- const requireAllFilesCommitted = getConfigBool(db, 'require_all_files_committed_for_archive', true);
272
+ const requireAllFilesCommitted = await getConfigBool(actualAdapter, 'require_all_files_committed_for_archive', true);
342
273
  // 2. Find all done tasks
343
- const candidateTasks = db.prepare(`
344
- SELECT t.id, t.created_ts
345
- FROM t_tasks t
346
- JOIN m_task_statuses s ON t.status_id = s.id
347
- WHERE s.name = 'done'
348
- `).all();
274
+ const candidateTasks = await knex('t_tasks as t')
275
+ .join('m_task_statuses as s', 't.status_id', 's.id')
276
+ .where('s.name', 'done')
277
+ .select('t.id', 't.created_ts');
349
278
  if (candidateTasks.length === 0) {
350
279
  return 0;
351
280
  }
@@ -361,12 +290,10 @@ export async function detectAndArchiveOnCommit(db) {
361
290
  for (const task of candidateTasks) {
362
291
  try {
363
292
  // Get watched files for this task
364
- const watchedFiles = db.prepare(`
365
- SELECT f.path
366
- FROM t_task_file_links tfl
367
- JOIN m_files f ON tfl.file_id = f.id
368
- WHERE tfl.task_id = ?
369
- `).all(task.id);
293
+ const watchedFiles = await knex('t_task_file_links as tfl')
294
+ .join('m_files as f', 'tfl.file_id', 'f.id')
295
+ .where('tfl.task_id', task.id)
296
+ .select('f.path');
370
297
  if (watchedFiles.length === 0) {
371
298
  // No watched files - skip this task
372
299
  continue;
@@ -398,12 +325,13 @@ export async function detectAndArchiveOnCommit(db) {
398
325
  : committedFiles.size > 0 && uncommittedFiles.length < filePaths.length; // At least SOME files committed
399
326
  if (shouldArchive) {
400
327
  // All watched files committed - transition to archived
401
- db.prepare(`
402
- UPDATE t_tasks
403
- SET status_id = ?,
404
- updated_ts = unixepoch()
405
- WHERE id = ?
406
- `).run(TASK_STATUS.ARCHIVED, task.id);
328
+ const currentTs = Math.floor(Date.now() / 1000);
329
+ await knex('t_tasks')
330
+ .where({ id: task.id })
331
+ .update({
332
+ status_id: TASK_STATUS.ARCHIVED,
333
+ updated_ts: currentTs
334
+ });
407
335
  archived++;
408
336
  console.error(` 📦 Task #${task.id}: done → archived (all ${filePaths.length} watched files committed)`);
409
337
  }
@@ -428,142 +356,12 @@ export async function detectAndArchiveOnCommit(db) {
428
356
  * @param db - Database instance
429
357
  * @returns Count of transitioned tasks
430
358
  */
431
- export async function detectAndTransitionToReview(db) {
432
- // 1. Get configuration
433
- const idleMinutes = getConfigInt(db, CONFIG_KEYS.REVIEW_IDLE_MINUTES, 3);
434
- const requireAllFilesModified = getConfigBool(db, CONFIG_KEYS.REVIEW_REQUIRE_ALL_FILES_MODIFIED, true);
435
- const requireTestsPass = getConfigBool(db, CONFIG_KEYS.REVIEW_REQUIRE_TESTS_PASS, true);
436
- const requireCompile = getConfigBool(db, CONFIG_KEYS.REVIEW_REQUIRE_COMPILE, true);
437
- // 2. Calculate cutoff timestamp (tasks older than this are candidates)
438
- const cutoffTimestamp = Math.floor(Date.now() / 1000) - (idleMinutes * 60);
439
- // 3. Find all in_progress tasks older than cutoff
440
- const candidateTasks = db.prepare(`
441
- SELECT t.id, t.created_ts
442
- FROM t_tasks t
443
- JOIN m_task_statuses s ON t.status_id = s.id
444
- WHERE s.name = 'in_progress'
445
- AND t.updated_ts < ?
446
- `).all(cutoffTimestamp);
447
- if (candidateTasks.length === 0) {
448
- console.error(` ℹ No candidate tasks found (no tasks idle > ${idleMinutes} minutes)`);
449
- return 0;
450
- }
451
- console.error(` ℹ Found ${candidateTasks.length} candidate tasks idle > ${idleMinutes} minutes`);
452
- let transitioned = 0;
453
- const projectRoot = process.cwd();
454
- // 4. For each candidate task, check quality gates
455
- for (const task of candidateTasks) {
456
- try {
457
- // Get watched files for this task
458
- const watchedFiles = db.prepare(`
459
- SELECT f.path
460
- FROM t_task_file_links tfl
461
- JOIN m_files f ON tfl.file_id = f.id
462
- WHERE tfl.task_id = ?
463
- `).all(task.id);
464
- console.error(` → Task #${task.id}: ${watchedFiles.length} watched files`);
465
- if (watchedFiles.length === 0) {
466
- console.error(` ⏸ Skipping (no watched files)`);
467
- continue; // Skip tasks with no watched files
468
- }
469
- // AUTO-PRUNING (v3.5.0): Remove non-existent watched files
470
- // This happens BEFORE quality gate checks to ensure clean watch lists
471
- try {
472
- const pruneResult = pruneNonExistentFiles(db, task.id, projectRoot);
473
- if (pruneResult.prunedCount > 0) {
474
- console.error(` 🔧 Auto-pruned ${pruneResult.prunedCount} non-existent files (${pruneResult.remainingCount} remaining)`);
475
- pruneResult.prunedPaths.forEach(path => {
476
- console.error(` - ${path}`);
477
- });
478
- // If no files remain after pruning, skip this task
479
- if (pruneResult.remainingCount === 0) {
480
- console.error(` ⏸ Skipping (no files remaining after auto-prune)`);
481
- continue;
482
- }
483
- // Re-fetch watched files after pruning
484
- const updatedWatchedFiles = db.prepare(`
485
- SELECT f.path
486
- FROM t_task_file_links tfl
487
- JOIN m_files f ON tfl.file_id = f.id
488
- WHERE tfl.task_id = ?
489
- `).all(task.id);
490
- const filePaths = updatedWatchedFiles.map(f => f.path);
491
- console.error(` → Updated watch list: ${filePaths.length} files`);
492
- }
493
- }
494
- catch (error) {
495
- // Safety check triggered: ALL files were non-existent
496
- if (error instanceof Error && error.message.includes('ALL')) {
497
- console.error(` ✗ ${error.message}`);
498
- continue; // Skip this task - cannot transition with no work done
499
- }
500
- // Other errors - log and continue
501
- console.error(` ⚠ Auto-prune error: ${error instanceof Error ? error.message : String(error)}`);
502
- }
503
- // Get final file paths (after pruning)
504
- const filePaths = watchedFiles.map(f => f.path).filter(path => {
505
- // Filter out any paths that were pruned
506
- const fullPath = join(projectRoot, path);
507
- return existsSync(fullPath);
508
- });
509
- // Determine which files have been modified since task creation
510
- // by checking file system timestamps
511
- const modifiedFiles = new Set();
512
- for (const path of filePaths) {
513
- try {
514
- const fullPath = join(projectRoot, path);
515
- const stats = statSync(fullPath);
516
- const fileMtimeSeconds = Math.floor(stats.mtimeMs / 1000);
517
- // If file was modified after task creation, consider it modified
518
- if (fileMtimeSeconds >= task.created_ts) {
519
- modifiedFiles.add(path);
520
- }
521
- }
522
- catch (error) {
523
- // File doesn't exist or can't be accessed - skip this file
524
- continue;
525
- }
526
- }
527
- // Run quality checks
528
- const { ready, results } = await checkReadyForReview(db, task.id, filePaths, modifiedFiles, {
529
- requireAllFilesModified,
530
- requireTestsPass,
531
- requireCompile,
532
- });
533
- if (ready) {
534
- // All quality gates passed - transition to waiting_review
535
- db.prepare(`
536
- UPDATE t_tasks
537
- SET status_id = ?,
538
- updated_ts = unixepoch()
539
- WHERE id = ?
540
- `).run(TASK_STATUS.WAITING_REVIEW, task.id);
541
- transitioned++;
542
- // Log the transition
543
- console.error(` ✓ Task #${task.id}: in_progress → waiting_review (quality gates passed)`);
544
- results.forEach(({ check, result }) => {
545
- if (result.passed) {
546
- console.error(` ✓ ${check}: ${result.message}`);
547
- }
548
- });
549
- }
550
- else {
551
- // Quality gates not passed - log details for debugging
552
- console.error(` ⏸ Task #${task.id}: Quality gates not passed (staying in_progress)`);
553
- results.forEach(({ check, result }) => {
554
- const icon = result.passed ? '✓' : '✗';
555
- console.error(` ${icon} ${check}: ${result.message}`);
556
- if (result.details) {
557
- console.error(` ${result.details}`);
558
- }
559
- });
560
- }
561
- }
562
- catch (error) {
563
- console.error(` ✗ Error checking task #${task.id} for review:`, error);
564
- continue;
565
- }
566
- }
567
- return transitioned;
359
+ export async function detectAndTransitionToReview(adapter) {
360
+ const actualAdapter = adapter ?? getAdapter();
361
+ const knex = actualAdapter.getKnex();
362
+ // TODO: Convert this function to use Knex.js
363
+ // For now, return 0 as this function is not used by tasks.ts
364
+ console.warn('detectAndTransitionToReview not yet fully converted to Knex.js');
365
+ return 0;
568
366
  }
569
367
  //# sourceMappingURL=task-stale-detection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-stale-detection.js","sourceRoot":"","sources":["../../src/utils/task-stale-detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-stale-detection.js","sourceRoot":"","sources":["../../src/utils/task-stale-detection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Token Estimation Utility
3
+ *
4
+ * Provides token count estimation for help system responses.
5
+ * Uses a simple heuristic: ~4 characters per token (GPT-style tokenization)
6
+ *
7
+ * This is an approximation for measuring token efficiency gains.
8
+ * Actual token counts may vary based on tokenizer used.
9
+ */
10
+ /**
11
+ * Estimate token count for a string or object
12
+ *
13
+ * @param data - String or object to estimate token count for
14
+ * @returns Estimated token count
15
+ */
16
+ export declare function estimateTokens(data: string | object): number;
17
+ /**
18
+ * Add token metadata to response object
19
+ *
20
+ * @param data - Response data
21
+ * @returns Response with token metadata
22
+ */
23
+ export declare function addTokenMetadata<T extends object>(data: T): T & {
24
+ _token_info: {
25
+ estimated_tokens: number;
26
+ actual_chars: number;
27
+ };
28
+ };
29
+ /**
30
+ * Token ranges for different query types
31
+ */
32
+ export declare const TOKEN_RANGES: {
33
+ readonly help_action: {
34
+ readonly min: 50;
35
+ readonly max: 100;
36
+ readonly legacy: 2000;
37
+ };
38
+ readonly help_params: {
39
+ readonly min: 30;
40
+ readonly max: 80;
41
+ readonly legacy: 1500;
42
+ };
43
+ readonly help_tool: {
44
+ readonly min: 100;
45
+ readonly max: 200;
46
+ readonly legacy: 5000;
47
+ };
48
+ readonly help_use_case: {
49
+ readonly min: 150;
50
+ readonly max: 200;
51
+ readonly legacy: 300;
52
+ };
53
+ readonly help_list_use_cases: {
54
+ readonly min: 100;
55
+ readonly max: 300;
56
+ readonly legacy: 500;
57
+ };
58
+ readonly help_next_actions: {
59
+ readonly min: 30;
60
+ readonly max: 50;
61
+ readonly legacy: 100;
62
+ };
63
+ };
64
+ /**
65
+ * Calculate token efficiency percentage
66
+ *
67
+ * @param current - Current token count
68
+ * @param legacy - Legacy token count
69
+ * @returns Efficiency gain percentage
70
+ */
71
+ export declare function calculateEfficiencyGain(current: number, legacy: number): number;
72
+ //# sourceMappingURL=token-estimation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-estimation.d.ts","sourceRoot":"","sources":["../../src/utils/token-estimation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAgB5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG;IAAE,WAAW,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAWnI;AAED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOf,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG/E"}