sqlew 3.2.5 → 3.6.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.
- package/CHANGELOG.md +288 -1011
- package/README.md +80 -263
- package/assets/config.example.toml +97 -0
- package/assets/schema.sql +6 -1
- 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 +46 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +155 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +86 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +28 -0
- package/dist/config/types.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/database.d.ts +44 -122
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +145 -349
- package/dist/database.js.map +1 -1
- package/dist/index.js +223 -175
- 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/add-v3.5.0-pruned-files.d.ts +26 -0
- package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +1 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js +107 -0
- package/dist/migrations/add-v3.5.0-pruned-files.js.map +1 -0
- package/dist/migrations/index.d.ts +26 -12
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +162 -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/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/git-aware-completion.test.d.ts +6 -0
- package/dist/tests/git-aware-completion.test.d.ts.map +1 -0
- package/dist/tests/git-aware-completion.test.js +160 -0
- package/dist/tests/git-aware-completion.test.js.map +1 -0
- 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.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +264 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-partial.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js +285 -0
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts +6 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js +250 -0
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts +12 -0
- package/dist/tests/tasks.auto-pruning-safety.test.d.ts.map +1 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js +217 -0
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -0
- 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.d.ts +6 -0
- package/dist/tests/tasks.link-file-backward-compat.test.d.ts.map +1 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js +247 -0
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-action.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-action.test.js +372 -0
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts +6 -0
- package/dist/tests/tasks.watch-files-parameter.test.d.ts.map +1 -0
- package/dist/tests/tasks.watch-files-parameter.test.js +260 -0
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -0
- package/dist/tests/two-step-git-completion.test.d.ts +6 -0
- package/dist/tests/two-step-git-completion.test.d.ts.map +1 -0
- package/dist/tests/two-step-git-completion.test.js +326 -0
- package/dist/tests/two-step-git-completion.test.js.map +1 -0
- package/dist/tests/vcs-staging.test.d.ts +6 -0
- package/dist/tests/vcs-staging.test.d.ts.map +1 -0
- package/dist/tests/vcs-staging.test.js +137 -0
- package/dist/tests/vcs-staging.test.js.map +1 -0
- package/dist/tools/config.d.ts +9 -4
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +16 -12
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +9 -3
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +66 -45
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +35 -16
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +374 -314
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +11 -4
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +173 -91
- 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 +13 -6
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +217 -129
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +42 -12
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +809 -347
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +13 -5
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +92 -115
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +4 -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 +21 -13
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +31 -24
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +44 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +116 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/file-pruning.d.ts +69 -0
- package/dist/utils/file-pruning.d.ts.map +1 -0
- package/dist/utils/file-pruning.js +185 -0
- package/dist/utils/file-pruning.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/quality-checks.d.ts +60 -0
- package/dist/utils/quality-checks.d.ts.map +1 -0
- package/dist/utils/quality-checks.js +228 -0
- package/dist/utils/quality-checks.js.map +1 -0
- package/dist/utils/retention.d.ts +13 -5
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +20 -8
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +77 -7
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +309 -34
- 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/vcs-adapter.d.ts +68 -0
- package/dist/utils/vcs-adapter.d.ts.map +1 -0
- package/dist/utils/vcs-adapter.js +187 -0
- package/dist/utils/vcs-adapter.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 +54 -4
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +329 -33
- package/dist/watcher/file-watcher.js.map +1 -1
- package/dist/watcher/gitignore-parser.d.ts +70 -0
- package/dist/watcher/gitignore-parser.d.ts.map +1 -0
- package/dist/watcher/gitignore-parser.js +191 -0
- package/dist/watcher/gitignore-parser.js.map +1 -0
- package/dist/watcher/index.d.ts +1 -0
- package/dist/watcher/index.d.ts.map +1 -1
- package/dist/watcher/index.js +1 -0
- package/dist/watcher/index.js.map +1 -1
- package/docs/AI_AGENT_GUIDE.md +1 -1
- package/docs/ARCHITECTURE.md +12 -0
- package/docs/AUTO_FILE_TRACKING.md +486 -82
- package/docs/BEST_PRACTICES.md +56 -448
- package/docs/CONFIGURATION.md +908 -0
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +645 -0
- package/docs/MIGRATION_v3.3.md +602 -0
- package/docs/MIGRATION_v3.6.0.md +170 -0
- package/docs/SHARED_CONCEPTS.md +65 -209
- package/docs/TASK_ACTIONS.md +12 -0
- package/docs/TASK_OVERVIEW.md +125 -24
- package/docs/TASK_PRUNING.md +589 -0
- package/docs/TASK_SYSTEM.md +83 -13
- package/docs/TOOL_REFERENCE.md +94 -6
- package/docs/TOOL_SELECTION.md +41 -248
- package/package.json +21 -7
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Logging Utility
|
|
3
|
+
*
|
|
4
|
+
* Logs token usage to database for measuring help system efficiency.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Log token usage to database
|
|
8
|
+
*
|
|
9
|
+
* @param db - Database connection
|
|
10
|
+
* @param entry - Token log entry
|
|
11
|
+
*/
|
|
12
|
+
export function logTokenUsage(db, entry) {
|
|
13
|
+
try {
|
|
14
|
+
// Check if table exists (migration may not have run yet)
|
|
15
|
+
const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_token_usage'").get();
|
|
16
|
+
if (!tableExists) {
|
|
17
|
+
// Silently skip if table doesn't exist
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const stmt = db.prepare(`
|
|
21
|
+
INSERT INTO t_help_token_usage
|
|
22
|
+
(query_type, tool_name, action_name, estimated_tokens, actual_chars)
|
|
23
|
+
VALUES
|
|
24
|
+
(?, ?, ?, ?, ?)
|
|
25
|
+
`);
|
|
26
|
+
stmt.run(entry.query_type, entry.tool_name || null, entry.action_name || null, entry.estimated_tokens, entry.actual_chars);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
// Silently fail - logging should not break functionality
|
|
30
|
+
console.error('Warning: Failed to log token usage:', error instanceof Error ? error.message : String(error));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get token usage statistics for a query type
|
|
35
|
+
*
|
|
36
|
+
* @param db - Database connection
|
|
37
|
+
* @param query_type - Type of query
|
|
38
|
+
* @returns Statistics object
|
|
39
|
+
*/
|
|
40
|
+
export function getTokenStats(db, query_type) {
|
|
41
|
+
try {
|
|
42
|
+
const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_token_usage'").get();
|
|
43
|
+
if (!tableExists) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const result = db.prepare(`
|
|
47
|
+
SELECT
|
|
48
|
+
COUNT(*) as total_queries,
|
|
49
|
+
AVG(estimated_tokens) as avg_tokens,
|
|
50
|
+
MIN(estimated_tokens) as min_tokens,
|
|
51
|
+
MAX(estimated_tokens) as max_tokens,
|
|
52
|
+
SUM(estimated_tokens) as total_tokens
|
|
53
|
+
FROM t_help_token_usage
|
|
54
|
+
WHERE query_type = ?
|
|
55
|
+
`).get(query_type);
|
|
56
|
+
if (!result || result.total_queries === 0) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
total_queries: result.total_queries,
|
|
61
|
+
avg_tokens: Math.round(result.avg_tokens),
|
|
62
|
+
min_tokens: result.min_tokens,
|
|
63
|
+
max_tokens: result.max_tokens,
|
|
64
|
+
total_tokens: result.total_tokens
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('Warning: Failed to get token stats:', error instanceof Error ? error.message : String(error));
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get all token usage statistics
|
|
74
|
+
*
|
|
75
|
+
* @param db - Database connection
|
|
76
|
+
* @returns Map of query type to statistics
|
|
77
|
+
*/
|
|
78
|
+
export function getAllTokenStats(db) {
|
|
79
|
+
const stats = new Map();
|
|
80
|
+
try {
|
|
81
|
+
const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_token_usage'").get();
|
|
82
|
+
if (!tableExists) {
|
|
83
|
+
return stats;
|
|
84
|
+
}
|
|
85
|
+
const results = db.prepare(`
|
|
86
|
+
SELECT
|
|
87
|
+
query_type,
|
|
88
|
+
COUNT(*) as total_queries,
|
|
89
|
+
AVG(estimated_tokens) as avg_tokens,
|
|
90
|
+
MIN(estimated_tokens) as min_tokens,
|
|
91
|
+
MAX(estimated_tokens) as max_tokens,
|
|
92
|
+
SUM(estimated_tokens) as total_tokens
|
|
93
|
+
FROM t_help_token_usage
|
|
94
|
+
GROUP BY query_type
|
|
95
|
+
ORDER BY query_type
|
|
96
|
+
`).all();
|
|
97
|
+
for (const row of results) {
|
|
98
|
+
stats.set(row.query_type, {
|
|
99
|
+
total_queries: row.total_queries,
|
|
100
|
+
avg_tokens: Math.round(row.avg_tokens),
|
|
101
|
+
min_tokens: row.min_tokens,
|
|
102
|
+
max_tokens: row.max_tokens,
|
|
103
|
+
total_tokens: row.total_tokens
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error('Warning: Failed to get all token stats:', error instanceof Error ? error.message : String(error));
|
|
109
|
+
}
|
|
110
|
+
return stats;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=token-logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-logging.js","sourceRoot":"","sources":["../../src/utils/token-logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VCS Adapter Interface
|
|
3
|
+
*
|
|
4
|
+
* Provides abstraction layer for version control systems to support
|
|
5
|
+
* git-aware auto-complete across multiple VCS platforms.
|
|
6
|
+
*/
|
|
7
|
+
export interface VCSAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Check if the current directory is a valid VCS repository
|
|
10
|
+
*/
|
|
11
|
+
isRepository(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Get list of files committed since a given timestamp
|
|
14
|
+
* @param sinceTimestamp ISO 8601 timestamp
|
|
15
|
+
* @returns Array of committed file paths
|
|
16
|
+
*/
|
|
17
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Get list of files currently staged (ready to commit)
|
|
20
|
+
* @returns Array of staged file paths
|
|
21
|
+
*/
|
|
22
|
+
getStagedFiles(): Promise<string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the VCS type name (for logging)
|
|
25
|
+
*/
|
|
26
|
+
getVCSType(): string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Git VCS Adapter
|
|
30
|
+
*/
|
|
31
|
+
export declare class GitAdapter implements VCSAdapter {
|
|
32
|
+
private projectRoot;
|
|
33
|
+
constructor(projectRoot: string);
|
|
34
|
+
isRepository(): Promise<boolean>;
|
|
35
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
36
|
+
getStagedFiles(): Promise<string[]>;
|
|
37
|
+
getVCSType(): string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* SVN (Subversion) VCS Adapter
|
|
41
|
+
*/
|
|
42
|
+
export declare class SVNAdapter implements VCSAdapter {
|
|
43
|
+
private projectRoot;
|
|
44
|
+
constructor(projectRoot: string);
|
|
45
|
+
isRepository(): Promise<boolean>;
|
|
46
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
47
|
+
getStagedFiles(): Promise<string[]>;
|
|
48
|
+
getVCSType(): string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mercurial (hg) VCS Adapter
|
|
52
|
+
*/
|
|
53
|
+
export declare class MercurialAdapter implements VCSAdapter {
|
|
54
|
+
private projectRoot;
|
|
55
|
+
constructor(projectRoot: string);
|
|
56
|
+
isRepository(): Promise<boolean>;
|
|
57
|
+
getCommittedFilesSince(sinceTimestamp: string): Promise<string[]>;
|
|
58
|
+
getStagedFiles(): Promise<string[]>;
|
|
59
|
+
getVCSType(): string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Auto-detect and create appropriate VCS adapter
|
|
63
|
+
*
|
|
64
|
+
* Detection order: Git → Mercurial → SVN
|
|
65
|
+
* (Most common to least common in modern development)
|
|
66
|
+
*/
|
|
67
|
+
export declare function detectVCS(projectRoot: string): Promise<VCSAdapter | null>;
|
|
68
|
+
//# sourceMappingURL=vcs-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcs-adapter.d.ts","sourceRoot":"","sources":["../../src/utils/vcs-adapter.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAElE;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAajE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;GAEG;AACH,qBAAa,UAAW,YAAW,UAAU;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBjE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBjE,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBzC,UAAU,IAAI,MAAM;CAGrB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAqB/E"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { promisify } from 'util';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
const execAsync = promisify(exec);
|
|
4
|
+
/**
|
|
5
|
+
* Git VCS Adapter
|
|
6
|
+
*/
|
|
7
|
+
export class GitAdapter {
|
|
8
|
+
projectRoot;
|
|
9
|
+
constructor(projectRoot) {
|
|
10
|
+
this.projectRoot = projectRoot;
|
|
11
|
+
}
|
|
12
|
+
async isRepository() {
|
|
13
|
+
try {
|
|
14
|
+
await execAsync('git rev-parse --git-dir', { cwd: this.projectRoot });
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
22
|
+
const gitCommand = `git log --since="${sinceTimestamp}" --name-only --pretty=format:""`;
|
|
23
|
+
const { stdout } = await execAsync(gitCommand, { cwd: this.projectRoot });
|
|
24
|
+
const committedFiles = stdout
|
|
25
|
+
.split('\n')
|
|
26
|
+
.map(line => line.trim())
|
|
27
|
+
.filter(line => line.length > 0);
|
|
28
|
+
// Remove duplicates
|
|
29
|
+
return [...new Set(committedFiles)];
|
|
30
|
+
}
|
|
31
|
+
async getStagedFiles() {
|
|
32
|
+
try {
|
|
33
|
+
const gitCommand = 'git diff --cached --name-only';
|
|
34
|
+
const { stdout } = await execAsync(gitCommand, { cwd: this.projectRoot });
|
|
35
|
+
const stagedFiles = stdout
|
|
36
|
+
.split('\n')
|
|
37
|
+
.map(line => line.trim())
|
|
38
|
+
.filter(line => line.length > 0);
|
|
39
|
+
return stagedFiles;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Not in a git repo or error occurred
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getVCSType() {
|
|
47
|
+
return 'Git';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* SVN (Subversion) VCS Adapter
|
|
52
|
+
*/
|
|
53
|
+
export class SVNAdapter {
|
|
54
|
+
projectRoot;
|
|
55
|
+
constructor(projectRoot) {
|
|
56
|
+
this.projectRoot = projectRoot;
|
|
57
|
+
}
|
|
58
|
+
async isRepository() {
|
|
59
|
+
try {
|
|
60
|
+
await execAsync('svn info', { cwd: this.projectRoot });
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
68
|
+
// Convert ISO timestamp to SVN revision range
|
|
69
|
+
const date = new Date(sinceTimestamp);
|
|
70
|
+
const svnDate = date.toISOString().split('.')[0] + 'Z';
|
|
71
|
+
// Get log with changed paths since the date
|
|
72
|
+
const svnCommand = `svn log -v --xml -r {${svnDate}}:HEAD`;
|
|
73
|
+
const { stdout } = await execAsync(svnCommand, { cwd: this.projectRoot });
|
|
74
|
+
// Parse XML to extract file paths
|
|
75
|
+
const pathMatches = stdout.matchAll(/<path[^>]*>([^<]+)<\/path>/g);
|
|
76
|
+
const committedFiles = Array.from(pathMatches, match => match[1])
|
|
77
|
+
.map(path => path.replace(/^\//, '')); // Remove leading slash
|
|
78
|
+
// Remove duplicates
|
|
79
|
+
return [...new Set(committedFiles)];
|
|
80
|
+
}
|
|
81
|
+
async getStagedFiles() {
|
|
82
|
+
try {
|
|
83
|
+
// SVN doesn't have a staging area - all changes are "staged"
|
|
84
|
+
// Get modified (M) and added (A) files
|
|
85
|
+
const svnCommand = 'svn status';
|
|
86
|
+
const { stdout } = await execAsync(svnCommand, { cwd: this.projectRoot });
|
|
87
|
+
const stagedFiles = stdout
|
|
88
|
+
.split('\n')
|
|
89
|
+
.filter(line => {
|
|
90
|
+
const trimmed = line.trim();
|
|
91
|
+
return trimmed.startsWith('M ') || trimmed.startsWith('A ');
|
|
92
|
+
})
|
|
93
|
+
.map(line => line.substring(2).trim()) // Remove status prefix
|
|
94
|
+
.filter(path => path.length > 0);
|
|
95
|
+
return stagedFiles;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Not in an SVN repo or error occurred
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getVCSType() {
|
|
103
|
+
return 'SVN';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Mercurial (hg) VCS Adapter
|
|
108
|
+
*/
|
|
109
|
+
export class MercurialAdapter {
|
|
110
|
+
projectRoot;
|
|
111
|
+
constructor(projectRoot) {
|
|
112
|
+
this.projectRoot = projectRoot;
|
|
113
|
+
}
|
|
114
|
+
async isRepository() {
|
|
115
|
+
try {
|
|
116
|
+
await execAsync('hg root', { cwd: this.projectRoot });
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async getCommittedFilesSince(sinceTimestamp) {
|
|
124
|
+
// Convert ISO timestamp to Mercurial date format
|
|
125
|
+
const date = new Date(sinceTimestamp);
|
|
126
|
+
const hgDate = date.toISOString().split('T')[0]; // YYYY-MM-DD
|
|
127
|
+
// Get files changed since date
|
|
128
|
+
const hgCommand = `hg log --style default --template "{files}\\n" -d ">${hgDate}"`;
|
|
129
|
+
const { stdout } = await execAsync(hgCommand, { cwd: this.projectRoot });
|
|
130
|
+
const committedFiles = stdout
|
|
131
|
+
.split('\n')
|
|
132
|
+
.flatMap(line => line.split(' '))
|
|
133
|
+
.map(file => file.trim())
|
|
134
|
+
.filter(file => file.length > 0);
|
|
135
|
+
// Remove duplicates
|
|
136
|
+
return [...new Set(committedFiles)];
|
|
137
|
+
}
|
|
138
|
+
async getStagedFiles() {
|
|
139
|
+
try {
|
|
140
|
+
// Get modified (M), added (A), and removed (R) files in working directory
|
|
141
|
+
const hgCommand = 'hg status -m -a -r';
|
|
142
|
+
const { stdout } = await execAsync(hgCommand, { cwd: this.projectRoot });
|
|
143
|
+
const stagedFiles = stdout
|
|
144
|
+
.split('\n')
|
|
145
|
+
.filter(line => {
|
|
146
|
+
const trimmed = line.trim();
|
|
147
|
+
return trimmed.startsWith('M ') || trimmed.startsWith('A ') || trimmed.startsWith('R ');
|
|
148
|
+
})
|
|
149
|
+
.map(line => line.substring(2).trim()) // Remove status prefix
|
|
150
|
+
.filter(path => path.length > 0);
|
|
151
|
+
return stagedFiles;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Not in a Mercurial repo or error occurred
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
getVCSType() {
|
|
159
|
+
return 'Mercurial';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Auto-detect and create appropriate VCS adapter
|
|
164
|
+
*
|
|
165
|
+
* Detection order: Git → Mercurial → SVN
|
|
166
|
+
* (Most common to least common in modern development)
|
|
167
|
+
*/
|
|
168
|
+
export async function detectVCS(projectRoot) {
|
|
169
|
+
// Try Git first (most common)
|
|
170
|
+
const gitAdapter = new GitAdapter(projectRoot);
|
|
171
|
+
if (await gitAdapter.isRepository()) {
|
|
172
|
+
return gitAdapter;
|
|
173
|
+
}
|
|
174
|
+
// Try Mercurial
|
|
175
|
+
const hgAdapter = new MercurialAdapter(projectRoot);
|
|
176
|
+
if (await hgAdapter.isRepository()) {
|
|
177
|
+
return hgAdapter;
|
|
178
|
+
}
|
|
179
|
+
// Try SVN
|
|
180
|
+
const svnAdapter = new SVNAdapter(projectRoot);
|
|
181
|
+
if (await svnAdapter.isRepository()) {
|
|
182
|
+
return svnAdapter;
|
|
183
|
+
}
|
|
184
|
+
// No VCS detected
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=vcs-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcs-adapter.js","sourceRoot":"","sources":["../../src/utils/vcs-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* View query functions - replacements for SQL views
|
|
4
|
+
* These provide portable query builders that work across databases
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* v_tagged_decisions - Decisions with metadata (tags, layers, scopes)
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTaggedDecisions(knex: Knex): Promise<any[]>;
|
|
10
|
+
/**
|
|
11
|
+
* v_active_context - Recently active decisions (last hour)
|
|
12
|
+
*/
|
|
13
|
+
export declare function getActiveContext(knex: Knex): Promise<any[]>;
|
|
14
|
+
/**
|
|
15
|
+
* v_layer_summary - Aggregated stats per layer
|
|
16
|
+
*/
|
|
17
|
+
export declare function getLayerSummary(knex: Knex): Promise<any[]>;
|
|
18
|
+
/**
|
|
19
|
+
* v_unread_messages_by_priority - Unread messages grouped by priority
|
|
20
|
+
*/
|
|
21
|
+
export declare function getUnreadMessagesByPriority(knex: Knex): Promise<any[]>;
|
|
22
|
+
/**
|
|
23
|
+
* v_recent_file_changes - Recent file changes with layer info
|
|
24
|
+
*/
|
|
25
|
+
export declare function getRecentFileChanges(knex: Knex): Promise<any[]>;
|
|
26
|
+
/**
|
|
27
|
+
* v_tagged_constraints - Active constraints with tags
|
|
28
|
+
*/
|
|
29
|
+
export declare function getTaggedConstraints(knex: Knex): Promise<any[]>;
|
|
30
|
+
/**
|
|
31
|
+
* v_task_board - Metadata-only task queries (v3.0.0)
|
|
32
|
+
*/
|
|
33
|
+
export declare function getTaskBoard(knex: Knex): Promise<any[]>;
|
|
34
|
+
//# sourceMappingURL=view-queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-queries.d.ts","sourceRoot":"","sources":["../../src/utils/view-queries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;;GAGG;AAEH;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAmCnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAkBjE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAehE;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAiB5E;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAqBrE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CA4BrE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CA6B7D"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View query functions - replacements for SQL views
|
|
3
|
+
* These provide portable query builders that work across databases
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* v_tagged_decisions - Decisions with metadata (tags, layers, scopes)
|
|
7
|
+
*/
|
|
8
|
+
export async function getTaggedDecisions(knex) {
|
|
9
|
+
// Use subqueries for tag/scope aggregation (SQLite GROUP_CONCAT)
|
|
10
|
+
const result = await knex('t_decisions as d')
|
|
11
|
+
.join('m_context_keys as k', 'd.key_id', 'k.id')
|
|
12
|
+
.leftJoin('m_layers as l', 'd.layer_id', 'l.id')
|
|
13
|
+
.leftJoin('m_agents as a', 'd.agent_id', 'a.id')
|
|
14
|
+
.select([
|
|
15
|
+
'k.key',
|
|
16
|
+
'd.value',
|
|
17
|
+
'd.version',
|
|
18
|
+
knex.raw(`CASE d.status
|
|
19
|
+
WHEN 1 THEN 'active'
|
|
20
|
+
WHEN 2 THEN 'deprecated'
|
|
21
|
+
ELSE 'draft'
|
|
22
|
+
END as status`),
|
|
23
|
+
'l.name as layer',
|
|
24
|
+
'a.name as decided_by',
|
|
25
|
+
knex.raw(`datetime(d.ts, 'unixepoch') as updated`),
|
|
26
|
+
// Tags subquery
|
|
27
|
+
knex.raw(`(
|
|
28
|
+
SELECT GROUP_CONCAT(t2.name, ',')
|
|
29
|
+
FROM t_decision_tags dt2
|
|
30
|
+
JOIN m_tags t2 ON dt2.tag_id = t2.id
|
|
31
|
+
WHERE dt2.decision_key_id = d.key_id
|
|
32
|
+
) as tags`),
|
|
33
|
+
// Scopes subquery
|
|
34
|
+
knex.raw(`(
|
|
35
|
+
SELECT GROUP_CONCAT(s2.name, ',')
|
|
36
|
+
FROM t_decision_scopes ds2
|
|
37
|
+
JOIN m_scopes s2 ON ds2.scope_id = s2.id
|
|
38
|
+
WHERE ds2.decision_key_id = d.key_id
|
|
39
|
+
) as scopes`),
|
|
40
|
+
]);
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* v_active_context - Recently active decisions (last hour)
|
|
45
|
+
*/
|
|
46
|
+
export async function getActiveContext(knex) {
|
|
47
|
+
const oneHourAgo = knex.raw('unixepoch() - 3600');
|
|
48
|
+
return knex('t_decisions as d')
|
|
49
|
+
.join('m_context_keys as k', 'd.key_id', 'k.id')
|
|
50
|
+
.leftJoin('m_layers as l', 'd.layer_id', 'l.id')
|
|
51
|
+
.leftJoin('m_agents as a', 'd.agent_id', 'a.id')
|
|
52
|
+
.where('d.ts', '>=', oneHourAgo)
|
|
53
|
+
.andWhere('d.status', 1) // active only
|
|
54
|
+
.select([
|
|
55
|
+
'k.key',
|
|
56
|
+
'd.value',
|
|
57
|
+
'd.version',
|
|
58
|
+
'l.name as layer',
|
|
59
|
+
'a.name as decided_by',
|
|
60
|
+
knex.raw(`datetime(d.ts, 'unixepoch') as updated`),
|
|
61
|
+
])
|
|
62
|
+
.orderBy('d.ts', 'desc');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* v_layer_summary - Aggregated stats per layer
|
|
66
|
+
*/
|
|
67
|
+
export async function getLayerSummary(knex) {
|
|
68
|
+
const oneHourAgo = knex.raw('unixepoch() - 3600');
|
|
69
|
+
return knex('m_layers as l')
|
|
70
|
+
.leftJoin('t_decisions as d', 'l.id', 'd.layer_id')
|
|
71
|
+
.leftJoin('t_constraints as c', 'l.id', 'c.layer_id')
|
|
72
|
+
.leftJoin('t_file_changes as f', 'l.id', 'f.layer_id')
|
|
73
|
+
.select([
|
|
74
|
+
'l.name as layer',
|
|
75
|
+
knex.raw('COUNT(DISTINCT d.key_id) as decision_count'),
|
|
76
|
+
knex.raw('COUNT(DISTINCT CASE WHEN c.active = 1 THEN c.id END) as constraint_count'),
|
|
77
|
+
knex.raw(`COUNT(DISTINCT CASE WHEN f.ts >= ${oneHourAgo.toQuery()} THEN f.id END) as recent_changes`),
|
|
78
|
+
])
|
|
79
|
+
.groupBy('l.id', 'l.name')
|
|
80
|
+
.orderBy('l.name');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* v_unread_messages_by_priority - Unread messages grouped by priority
|
|
84
|
+
*/
|
|
85
|
+
export async function getUnreadMessagesByPriority(knex) {
|
|
86
|
+
return knex('t_agent_messages as m')
|
|
87
|
+
.leftJoin('m_agents as a', 'm.from_agent_id', 'a.id')
|
|
88
|
+
.where('m.read', false)
|
|
89
|
+
.select([
|
|
90
|
+
knex.raw(`CASE m.priority
|
|
91
|
+
WHEN 1 THEN 'low'
|
|
92
|
+
WHEN 2 THEN 'medium'
|
|
93
|
+
WHEN 3 THEN 'high'
|
|
94
|
+
ELSE 'critical'
|
|
95
|
+
END as priority`),
|
|
96
|
+
'm.message',
|
|
97
|
+
'a.name as from_agent',
|
|
98
|
+
knex.raw(`datetime(m.ts, 'unixepoch') as sent_at`),
|
|
99
|
+
])
|
|
100
|
+
.orderBy('m.priority', 'desc')
|
|
101
|
+
.orderBy('m.ts', 'desc');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* v_recent_file_changes - Recent file changes with layer info
|
|
105
|
+
*/
|
|
106
|
+
export async function getRecentFileChanges(knex) {
|
|
107
|
+
const oneHourAgo = knex.raw('unixepoch() - 3600');
|
|
108
|
+
return knex('t_file_changes as fc')
|
|
109
|
+
.join('m_files as f', 'fc.file_id', 'f.id')
|
|
110
|
+
.leftJoin('m_layers as l', 'fc.layer_id', 'l.id')
|
|
111
|
+
.leftJoin('m_agents as a', 'fc.agent_id', 'a.id')
|
|
112
|
+
.where('fc.ts', '>=', oneHourAgo)
|
|
113
|
+
.select([
|
|
114
|
+
'f.path',
|
|
115
|
+
knex.raw(`CASE fc.change_type
|
|
116
|
+
WHEN 1 THEN 'created'
|
|
117
|
+
WHEN 2 THEN 'modified'
|
|
118
|
+
ELSE 'deleted'
|
|
119
|
+
END as change_type`),
|
|
120
|
+
'l.name as layer',
|
|
121
|
+
'a.name as changed_by',
|
|
122
|
+
'fc.description',
|
|
123
|
+
knex.raw(`datetime(fc.ts, 'unixepoch') as changed_at`),
|
|
124
|
+
])
|
|
125
|
+
.orderBy('fc.ts', 'desc');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* v_tagged_constraints - Active constraints with tags
|
|
129
|
+
*/
|
|
130
|
+
export async function getTaggedConstraints(knex) {
|
|
131
|
+
return knex('t_constraints as c')
|
|
132
|
+
.join('m_constraint_categories as cat', 'c.category_id', 'cat.id')
|
|
133
|
+
.leftJoin('m_layers as l', 'c.layer_id', 'l.id')
|
|
134
|
+
.leftJoin('m_agents as a', 'c.agent_id', 'a.id')
|
|
135
|
+
.where('c.active', true)
|
|
136
|
+
.select([
|
|
137
|
+
'cat.name as category',
|
|
138
|
+
'c.constraint_text',
|
|
139
|
+
knex.raw(`CASE c.priority
|
|
140
|
+
WHEN 1 THEN 'low'
|
|
141
|
+
WHEN 2 THEN 'medium'
|
|
142
|
+
WHEN 3 THEN 'high'
|
|
143
|
+
ELSE 'critical'
|
|
144
|
+
END as priority`),
|
|
145
|
+
'l.name as layer',
|
|
146
|
+
'a.name as added_by',
|
|
147
|
+
knex.raw(`datetime(c.ts, 'unixepoch') as added_at`),
|
|
148
|
+
// Tags subquery
|
|
149
|
+
knex.raw(`(
|
|
150
|
+
SELECT GROUP_CONCAT(t2.name, ',')
|
|
151
|
+
FROM t_constraint_tags ct2
|
|
152
|
+
JOIN m_tags t2 ON ct2.tag_id = t2.id
|
|
153
|
+
WHERE ct2.constraint_id = c.id
|
|
154
|
+
) as tags`),
|
|
155
|
+
])
|
|
156
|
+
.orderBy('c.priority', 'desc')
|
|
157
|
+
.orderBy('c.ts', 'desc');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* v_task_board - Metadata-only task queries (v3.0.0)
|
|
161
|
+
*/
|
|
162
|
+
export async function getTaskBoard(knex) {
|
|
163
|
+
return knex('t_tasks as t')
|
|
164
|
+
.join('m_task_statuses as ts', 't.status_id', 'ts.id')
|
|
165
|
+
.leftJoin('m_layers as l', 't.layer_id', 'l.id')
|
|
166
|
+
.leftJoin('m_agents as a', 't.assigned_agent_id', 'a.id')
|
|
167
|
+
.select([
|
|
168
|
+
't.id as task_id',
|
|
169
|
+
't.title',
|
|
170
|
+
'ts.name as status',
|
|
171
|
+
knex.raw(`CASE t.priority
|
|
172
|
+
WHEN 1 THEN 'low'
|
|
173
|
+
WHEN 2 THEN 'medium'
|
|
174
|
+
WHEN 3 THEN 'high'
|
|
175
|
+
ELSE 'critical'
|
|
176
|
+
END as priority`),
|
|
177
|
+
'l.name as layer',
|
|
178
|
+
'a.name as assigned_to',
|
|
179
|
+
knex.raw(`datetime(t.created_ts, 'unixepoch') as created`),
|
|
180
|
+
knex.raw(`datetime(t.updated_ts, 'unixepoch') as updated`),
|
|
181
|
+
// Tags subquery
|
|
182
|
+
knex.raw(`(
|
|
183
|
+
SELECT GROUP_CONCAT(tag.name, ',')
|
|
184
|
+
FROM t_task_tags tt
|
|
185
|
+
JOIN m_tags tag ON tt.tag_id = tag.id
|
|
186
|
+
WHERE tt.task_id = t.id
|
|
187
|
+
) as tags`),
|
|
188
|
+
])
|
|
189
|
+
.orderBy('t.priority', 'desc')
|
|
190
|
+
.orderBy('t.updated_ts', 'desc');
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=view-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-queries.js","sourceRoot":"","sources":["../../src/utils/view-queries.ts"],"names":[],"mappings":"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"}
|