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.
- package/CHANGELOG.md +247 -1772
- package/README.md +70 -304
- package/assets/config.example.toml +106 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mysql-adapter.d.ts +31 -0
- package/dist/adapters/mysql-adapter.d.ts.map +1 -0
- package/dist/adapters/mysql-adapter.js +63 -0
- package/dist/adapters/mysql-adapter.js.map +1 -0
- package/dist/adapters/postgresql-adapter.d.ts +31 -0
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
- package/dist/adapters/postgresql-adapter.js +63 -0
- package/dist/adapters/postgresql-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +37 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +129 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.js +55 -54
- package/dist/cli.js.map +1 -1
- package/dist/config/example-generator.d.ts +11 -0
- package/dist/config/example-generator.d.ts.map +1 -0
- package/dist/config/example-generator.js +48 -0
- package/dist/config/example-generator.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +11 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database.d.ts +56 -121
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +266 -414
- package/dist/database.js.map +1 -1
- package/dist/index.js +329 -245
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts +6 -0
- package/dist/knexfile.d.ts.map +1 -0
- package/dist/knexfile.js +85 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/add-help-system-tables.d.ts +35 -0
- package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
- package/dist/migrations/add-help-system-tables.js +206 -0
- package/dist/migrations/add-help-system-tables.js.map +1 -0
- package/dist/migrations/add-token-tracking.d.ts +28 -0
- package/dist/migrations/add-token-tracking.d.ts.map +1 -0
- package/dist/migrations/add-token-tracking.js +108 -0
- package/dist/migrations/add-token-tracking.js.map +1 -0
- package/dist/migrations/index.d.ts +25 -12
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +147 -20
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.js +143 -0
- package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/migrations/seed-help-data.d.ts +48 -0
- package/dist/migrations/seed-help-data.d.ts.map +1 -0
- package/dist/migrations/seed-help-data.js +1466 -0
- package/dist/migrations/seed-help-data.js.map +1 -0
- package/dist/migrations/seed-tool-metadata.d.ts +24 -0
- package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
- package/dist/migrations/seed-tool-metadata.js +392 -0
- package/dist/migrations/seed-tool-metadata.js.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -1
- package/dist/tests/agent-reuse.test.d.ts +6 -0
- package/dist/tests/agent-reuse.test.d.ts.map +1 -0
- package/dist/tests/agent-reuse.test.js +242 -0
- package/dist/tests/agent-reuse.test.js.map +1 -0
- package/dist/tests/all-features.test.d.ts +7 -0
- package/dist/tests/all-features.test.d.ts.map +1 -0
- package/dist/tests/all-features.test.js +514 -0
- package/dist/tests/all-features.test.js.map +1 -0
- package/dist/tests/git-aware-completion.test.js +89 -70
- package/dist/tests/git-aware-completion.test.js.map +1 -1
- package/dist/tests/help-system.test.d.ts +23 -0
- package/dist/tests/help-system.test.d.ts.map +1 -0
- package/dist/tests/help-system.test.js +374 -0
- package/dist/tests/help-system.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
- package/dist/tests/tasks.dependencies.test.js +338 -307
- package/dist/tests/tasks.dependencies.test.js.map +1 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +122 -101
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
- package/dist/tests/two-step-git-completion.test.js +176 -133
- package/dist/tests/two-step-git-completion.test.js.map +1 -1
- package/dist/tests/vcs-staging.test.js +1 -1
- package/dist/tests/vcs-staging.test.js.map +1 -1
- package/dist/tools/config.d.ts +9 -6
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +16 -14
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +10 -7
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +73 -51
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +36 -33
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +441 -340
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +12 -9
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +173 -95
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/help-queries.d.ts +130 -0
- package/dist/tools/help-queries.d.ts.map +1 -0
- package/dist/tools/help-queries.js +393 -0
- package/dist/tools/help-queries.js.map +1 -0
- package/dist/tools/messaging.d.ts +14 -11
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +239 -133
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +18 -16
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +519 -442
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +14 -11
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +90 -122
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/activity-logging.d.ts +114 -0
- package/dist/utils/activity-logging.d.ts.map +1 -0
- package/dist/utils/activity-logging.js +162 -0
- package/dist/utils/activity-logging.js.map +1 -0
- package/dist/utils/batch.d.ts +2 -2
- package/dist/utils/batch.d.ts.map +1 -1
- package/dist/utils/batch.js +8 -8
- package/dist/utils/batch.js.map +1 -1
- package/dist/utils/cleanup.d.ts +24 -14
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +37 -27
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +99 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +267 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/error-handler.d.ts +28 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +121 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/help-tracking.d.ts +55 -0
- package/dist/utils/help-tracking.d.ts.map +1 -0
- package/dist/utils/help-tracking.js +88 -0
- package/dist/utils/help-tracking.js.map +1 -0
- package/dist/utils/param-parser.d.ts +23 -0
- package/dist/utils/param-parser.d.ts.map +1 -0
- package/dist/utils/param-parser.js +52 -0
- package/dist/utils/param-parser.js.map +1 -0
- package/dist/utils/retention.d.ts +17 -7
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +31 -12
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +15 -13
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +100 -302
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-estimation.d.ts +72 -0
- package/dist/utils/token-estimation.d.ts.map +1 -0
- package/dist/utils/token-estimation.js +71 -0
- package/dist/utils/token-estimation.js.map +1 -0
- package/dist/utils/token-logging.d.ts +48 -0
- package/dist/utils/token-logging.d.ts.map +1 -0
- package/dist/utils/token-logging.js +112 -0
- package/dist/utils/token-logging.js.map +1 -0
- package/dist/utils/view-queries.d.ts +34 -0
- package/dist/utils/view-queries.d.ts.map +1 -0
- package/dist/utils/view-queries.js +192 -0
- package/dist/utils/view-queries.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +25 -11
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/BEST_PRACTICES.md +56 -448
- package/docs/MIGRATION_v3.6.0.md +170 -0
- package/docs/SHARED_CONCEPTS.md +63 -208
- package/docs/TASK_OVERVIEW.md +2 -2
- package/docs/TOOL_SELECTION.md +41 -248
- package/package.json +17 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter parsing utilities for MCP tool parameters
|
|
3
|
+
* Handles JSON array strings from MCP SDK
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse a parameter that could be a string array or a JSON-encoded string array
|
|
7
|
+
* MCP SDK sometimes sends arrays as JSON strings: "[\"tag1\", \"tag2\"]"
|
|
8
|
+
*
|
|
9
|
+
* @param param - The parameter to parse (array or JSON string)
|
|
10
|
+
* @returns Parsed string array
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* parseStringArray(['tag1', 'tag2']) // returns ['tag1', 'tag2']
|
|
14
|
+
* parseStringArray('["tag1", "tag2"]') // returns ['tag1', 'tag2']
|
|
15
|
+
* parseStringArray('single-tag') // returns ['single-tag']
|
|
16
|
+
*/
|
|
17
|
+
export function parseStringArray(param) {
|
|
18
|
+
if (!param) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
// Already an array
|
|
22
|
+
if (Array.isArray(param)) {
|
|
23
|
+
return param;
|
|
24
|
+
}
|
|
25
|
+
// Try to parse as JSON
|
|
26
|
+
if (typeof param === 'string') {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(param);
|
|
29
|
+
// If parsed result is an array, return it
|
|
30
|
+
if (Array.isArray(parsed)) {
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
// If it's a single string after parsing, return as array
|
|
34
|
+
return [String(parsed)];
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
// If parse fails, treat as single string
|
|
38
|
+
return [param];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Fallback: convert to string and return as single-element array
|
|
42
|
+
return [String(param)];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse optional string array parameter
|
|
46
|
+
* Returns undefined if param is null/undefined/empty
|
|
47
|
+
*/
|
|
48
|
+
export function parseOptionalStringArray(param) {
|
|
49
|
+
const result = parseStringArray(param);
|
|
50
|
+
return result.length > 0 ? result : undefined;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=param-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-parser.js","sourceRoot":"","sources":["../../src/utils/param-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA2C;IAC1E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,0CAA0C;YAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,yDAAyD;YACzD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAA2C;IAClF,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC"}
|
|
@@ -2,31 +2,32 @@
|
|
|
2
2
|
* Weekend-aware retention logic for auto-deletion
|
|
3
3
|
* Calculates cutoff timestamps that skip weekends when configured
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { Knex } from 'knex';
|
|
6
|
+
import { DatabaseAdapter } from '../adapters/index.js';
|
|
6
7
|
/**
|
|
7
8
|
* Calculate cutoff timestamp for message retention
|
|
8
9
|
* Respects weekend-awareness configuration
|
|
9
10
|
*
|
|
10
|
-
* @param
|
|
11
|
+
* @param adapter - Database adapter instance
|
|
11
12
|
* @returns Unix timestamp (seconds) for cutoff
|
|
12
13
|
*/
|
|
13
|
-
export declare function calculateMessageCutoff(
|
|
14
|
+
export declare function calculateMessageCutoff(adapter: DatabaseAdapter): Promise<number>;
|
|
14
15
|
/**
|
|
15
16
|
* Calculate cutoff timestamp for file change retention
|
|
16
17
|
* Respects weekend-awareness configuration
|
|
17
18
|
*
|
|
18
|
-
* @param
|
|
19
|
+
* @param adapter - Database adapter instance
|
|
19
20
|
* @returns Unix timestamp (seconds) for cutoff
|
|
20
21
|
*/
|
|
21
|
-
export declare function calculateFileChangeCutoff(
|
|
22
|
+
export declare function calculateFileChangeCutoff(adapter: DatabaseAdapter): Promise<number>;
|
|
22
23
|
/**
|
|
23
24
|
* Calculate cutoff timestamp for task archive (done → archived)
|
|
24
25
|
* Respects weekend-awareness configuration
|
|
25
26
|
*
|
|
26
|
-
* @param
|
|
27
|
+
* @param adapter - Database adapter instance
|
|
27
28
|
* @returns Unix timestamp (seconds) for cutoff
|
|
28
29
|
*/
|
|
29
|
-
export declare function calculateTaskArchiveCutoff(
|
|
30
|
+
export declare function calculateTaskArchiveCutoff(adapter: DatabaseAdapter): Promise<number>;
|
|
30
31
|
/**
|
|
31
32
|
* Calculate cutoff timestamp with optional weekend-awareness
|
|
32
33
|
*
|
|
@@ -52,4 +53,13 @@ export declare function countWeekendDays(startDate: Date, endDate: Date): number
|
|
|
52
53
|
* @returns New date with business days added
|
|
53
54
|
*/
|
|
54
55
|
export declare function addBusinessDays(date: Date, days: number): Date;
|
|
56
|
+
/**
|
|
57
|
+
* Release inactive generic agent slots for reuse
|
|
58
|
+
* Marks generic agents as inactive if they haven't been active for the specified hours
|
|
59
|
+
*
|
|
60
|
+
* @param adapter - Database adapter instance
|
|
61
|
+
* @param inactivityHours - Hours of inactivity before releasing (default: 24)
|
|
62
|
+
* @returns Number of agents released
|
|
63
|
+
*/
|
|
64
|
+
export declare function releaseInactiveAgents(adapter: DatabaseAdapter, inactivityHours?: number, trx?: Knex.Transaction): Promise<number>;
|
|
55
65
|
//# sourceMappingURL=retention.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/utils/retention.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/utils/retention.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtF;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAKzF;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1F;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,IAAI,EAAE,OAAO,GAAG,MAAM,GACrB,MAAM,CAYR;AA4CD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,CAavE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAe9D;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,eAAe,EACxB,eAAe,GAAE,MAAW,EAC5B,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|
package/dist/utils/retention.js
CHANGED
|
@@ -8,36 +8,36 @@ import { CONFIG_KEYS } from '../constants.js';
|
|
|
8
8
|
* Calculate cutoff timestamp for message retention
|
|
9
9
|
* Respects weekend-awareness configuration
|
|
10
10
|
*
|
|
11
|
-
* @param
|
|
11
|
+
* @param adapter - Database adapter instance
|
|
12
12
|
* @returns Unix timestamp (seconds) for cutoff
|
|
13
13
|
*/
|
|
14
|
-
export function calculateMessageCutoff(
|
|
15
|
-
const ignoreWeekends = getConfigBool(
|
|
16
|
-
const retentionHours = getConfigInt(
|
|
14
|
+
export async function calculateMessageCutoff(adapter) {
|
|
15
|
+
const ignoreWeekends = await getConfigBool(adapter, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, false);
|
|
16
|
+
const retentionHours = await getConfigInt(adapter, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, 24);
|
|
17
17
|
return calculateCutoffTimestamp(retentionHours, ignoreWeekends, 'hours');
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Calculate cutoff timestamp for file change retention
|
|
21
21
|
* Respects weekend-awareness configuration
|
|
22
22
|
*
|
|
23
|
-
* @param
|
|
23
|
+
* @param adapter - Database adapter instance
|
|
24
24
|
* @returns Unix timestamp (seconds) for cutoff
|
|
25
25
|
*/
|
|
26
|
-
export function calculateFileChangeCutoff(
|
|
27
|
-
const ignoreWeekends = getConfigBool(
|
|
28
|
-
const retentionDays = getConfigInt(
|
|
26
|
+
export async function calculateFileChangeCutoff(adapter) {
|
|
27
|
+
const ignoreWeekends = await getConfigBool(adapter, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, false);
|
|
28
|
+
const retentionDays = await getConfigInt(adapter, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, 7);
|
|
29
29
|
return calculateCutoffTimestamp(retentionDays, ignoreWeekends, 'days');
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* Calculate cutoff timestamp for task archive (done → archived)
|
|
33
33
|
* Respects weekend-awareness configuration
|
|
34
34
|
*
|
|
35
|
-
* @param
|
|
35
|
+
* @param adapter - Database adapter instance
|
|
36
36
|
* @returns Unix timestamp (seconds) for cutoff
|
|
37
37
|
*/
|
|
38
|
-
export function calculateTaskArchiveCutoff(
|
|
39
|
-
const ignoreWeekends = getConfigBool(
|
|
40
|
-
const retentionDays = getConfigInt(
|
|
38
|
+
export async function calculateTaskArchiveCutoff(adapter) {
|
|
39
|
+
const ignoreWeekends = await getConfigBool(adapter, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, false);
|
|
40
|
+
const retentionDays = await getConfigInt(adapter, CONFIG_KEYS.AUTO_ARCHIVE_DONE_DAYS, 2); // Default: 2 days (48 hours)
|
|
41
41
|
return calculateCutoffTimestamp(retentionDays, ignoreWeekends, 'days');
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
@@ -134,4 +134,23 @@ export function addBusinessDays(date, days) {
|
|
|
134
134
|
}
|
|
135
135
|
return result;
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Release inactive generic agent slots for reuse
|
|
139
|
+
* Marks generic agents as inactive if they haven't been active for the specified hours
|
|
140
|
+
*
|
|
141
|
+
* @param adapter - Database adapter instance
|
|
142
|
+
* @param inactivityHours - Hours of inactivity before releasing (default: 24)
|
|
143
|
+
* @returns Number of agents released
|
|
144
|
+
*/
|
|
145
|
+
export async function releaseInactiveAgents(adapter, inactivityHours = 24, trx) {
|
|
146
|
+
const knex = trx || adapter.getKnex();
|
|
147
|
+
const now = Math.floor(Date.now() / 1000);
|
|
148
|
+
const cutoffTs = now - (inactivityHours * 3600);
|
|
149
|
+
const result = await knex('m_agents')
|
|
150
|
+
.where('is_reusable', true)
|
|
151
|
+
.where('in_use', true)
|
|
152
|
+
.where('last_active_ts', '<', cutoffTs)
|
|
153
|
+
.update({ in_use: false });
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
137
156
|
//# sourceMappingURL=retention.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/utils/retention.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"retention.js","sourceRoot":"","sources":["../../src/utils/retention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,31 @@
|
|
|
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 {
|
|
7
|
+
import { DatabaseAdapter } from '../adapters/index.js';
|
|
6
8
|
/**
|
|
7
9
|
* Detect and transition stale tasks automatically
|
|
8
10
|
*
|
|
9
11
|
* Detection logic:
|
|
10
12
|
* - Tasks in `in_progress` with `updated_ts` older than threshold → move to `waiting_review`
|
|
11
13
|
*
|
|
12
|
-
* @param
|
|
14
|
+
* @param adapter - Database adapter instance
|
|
13
15
|
* @returns Count of transitioned tasks
|
|
14
16
|
*/
|
|
15
|
-
export declare function detectAndTransitionStaleTasks(
|
|
17
|
+
export declare function detectAndTransitionStaleTasks(adapter?: DatabaseAdapter): Promise<number>;
|
|
16
18
|
/**
|
|
17
19
|
* Get current auto-stale configuration
|
|
18
20
|
*
|
|
19
|
-
* @param
|
|
21
|
+
* @param adapter - Database adapter instance
|
|
20
22
|
* @returns Current configuration values
|
|
21
23
|
*/
|
|
22
|
-
export declare function getStaleDetectionConfig(
|
|
24
|
+
export declare function getStaleDetectionConfig(adapter?: DatabaseAdapter): Promise<{
|
|
23
25
|
enabled: boolean;
|
|
24
26
|
inProgressThresholdHours: number;
|
|
25
27
|
waitingReviewThresholdHours: number;
|
|
26
|
-
}
|
|
28
|
+
}>;
|
|
27
29
|
/**
|
|
28
30
|
* Auto-archive old done tasks
|
|
29
31
|
* Archives tasks in 'done' status older than configured threshold
|
|
@@ -32,10 +34,10 @@ export declare function getStaleDetectionConfig(db: Database): {
|
|
|
32
34
|
* Default: 48 hours (2 days)
|
|
33
35
|
* Weekend-aware: Task done Friday → archives Tuesday (skip Sat/Sun)
|
|
34
36
|
*
|
|
35
|
-
* @param
|
|
37
|
+
* @param adapter - Database adapter instance
|
|
36
38
|
* @returns Count of archived tasks
|
|
37
39
|
*/
|
|
38
|
-
export declare function autoArchiveOldDoneTasks(
|
|
40
|
+
export declare function autoArchiveOldDoneTasks(adapter?: DatabaseAdapter): Promise<number>;
|
|
39
41
|
/**
|
|
40
42
|
* Detect and complete tasks in waiting_review or in_progress when all watched files are committed
|
|
41
43
|
*
|
|
@@ -47,10 +49,10 @@ export declare function autoArchiveOldDoneTasks(db: Database): number;
|
|
|
47
49
|
* - Supports multiple VCS: Git, Mercurial, SVN
|
|
48
50
|
* - Gracefully handle non-VCS repos (skip auto-complete)
|
|
49
51
|
*
|
|
50
|
-
* @param
|
|
52
|
+
* @param adapter - Database adapter instance
|
|
51
53
|
* @returns Count of auto-completed tasks
|
|
52
54
|
*/
|
|
53
|
-
export declare function detectAndCompleteReviewedTasks(
|
|
55
|
+
export declare function detectAndCompleteReviewedTasks(adapter?: DatabaseAdapter): Promise<number>;
|
|
54
56
|
/**
|
|
55
57
|
* Detect and auto-complete tasks in waiting_review when all watched files are staged
|
|
56
58
|
* (v3.5.2 - Two-step Git-aware workflow: staging → done)
|
|
@@ -64,7 +66,7 @@ export declare function detectAndCompleteReviewedTasks(db: Database): Promise<nu
|
|
|
64
66
|
* @param db - Database instance
|
|
65
67
|
* @returns Count of auto-completed tasks
|
|
66
68
|
*/
|
|
67
|
-
export declare function detectAndCompleteOnStaging(
|
|
69
|
+
export declare function detectAndCompleteOnStaging(adapter?: DatabaseAdapter): Promise<number>;
|
|
68
70
|
/**
|
|
69
71
|
* Detect and auto-archive tasks in done when all watched files are committed
|
|
70
72
|
* (v3.5.2 - Two-step Git-aware workflow: commit → archived)
|
|
@@ -78,7 +80,7 @@ export declare function detectAndCompleteOnStaging(db: Database): Promise<number
|
|
|
78
80
|
* @param db - Database instance
|
|
79
81
|
* @returns Count of auto-archived tasks
|
|
80
82
|
*/
|
|
81
|
-
export declare function detectAndArchiveOnCommit(
|
|
83
|
+
export declare function detectAndArchiveOnCommit(adapter?: DatabaseAdapter): Promise<number>;
|
|
82
84
|
/**
|
|
83
85
|
* Detect and transition in_progress tasks to waiting_review based on quality gates
|
|
84
86
|
* Database-backed approach that survives restarts
|
|
@@ -92,5 +94,5 @@ export declare function detectAndArchiveOnCommit(db: Database): Promise<number>;
|
|
|
92
94
|
* @param db - Database instance
|
|
93
95
|
* @returns Count of transitioned tasks
|
|
94
96
|
*/
|
|
95
|
-
export declare function detectAndTransitionToReview(
|
|
97
|
+
export declare function detectAndTransitionToReview(adapter?: DatabaseAdapter): Promise<number>;
|
|
96
98
|
//# sourceMappingURL=task-stale-detection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-stale-detection.d.ts","sourceRoot":"","sources":["../../src/utils/task-stale-detection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"task-stale-detection.d.ts","sourceRoot":"","sources":["../../src/utils/task-stale-detection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAiDvD;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqD9F;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IAChF,OAAO,EAAE,OAAO,CAAC;IACjB,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;CACrC,CAAC,CAoBD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBxF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqG/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAgGzF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5F"}
|