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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Logger for MCP Shared Context Server
|
|
3
|
+
*
|
|
4
|
+
* Enables debug logging when specified via CLI arg, environment variable, or config file.
|
|
5
|
+
* Priority: CLI arg > Environment variable > Config file
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* node dist/index.js --debug-log=/path/to/debug.log
|
|
9
|
+
* SQLEW_DEBUG=/path/to/debug.log node dist/index.js
|
|
10
|
+
* OR set debug.log_path in .sqlew/config.toml
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
let debugEnabled = false;
|
|
15
|
+
let debugStream = null;
|
|
16
|
+
let currentLogPath = null;
|
|
17
|
+
let currentLogLevel = 'INFO';
|
|
18
|
+
// Log level hierarchy (higher number = more verbose)
|
|
19
|
+
const LOG_LEVELS = {
|
|
20
|
+
'ERROR': 1,
|
|
21
|
+
'WARN': 2,
|
|
22
|
+
'INFO': 3,
|
|
23
|
+
'DEBUG': 4
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Check if a log level should be written
|
|
27
|
+
* @param level - Level to check
|
|
28
|
+
* @returns true if should log
|
|
29
|
+
*/
|
|
30
|
+
function shouldLog(level) {
|
|
31
|
+
const levelValue = LOG_LEVELS[level.toUpperCase()] || 0;
|
|
32
|
+
const currentValue = LOG_LEVELS[currentLogLevel];
|
|
33
|
+
return levelValue <= currentValue;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Initialize debug logger
|
|
37
|
+
* @param debugLogPath - Log path (already resolved with priority: CLI > env > config)
|
|
38
|
+
* @param logLevel - Log level (case-insensitive: "error", "warn", "info", "debug")
|
|
39
|
+
*/
|
|
40
|
+
export function initDebugLogger(debugLogPath, logLevel) {
|
|
41
|
+
if (!debugLogPath) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
currentLogPath = debugLogPath;
|
|
45
|
+
// Set log level (case-insensitive, default to INFO)
|
|
46
|
+
if (logLevel) {
|
|
47
|
+
const upperLevel = logLevel.toUpperCase();
|
|
48
|
+
if (LOG_LEVELS[upperLevel]) {
|
|
49
|
+
currentLogLevel = upperLevel;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Ensure directory exists
|
|
54
|
+
const logDir = path.dirname(debugLogPath);
|
|
55
|
+
if (!fs.existsSync(logDir)) {
|
|
56
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
// Create write stream (append mode)
|
|
59
|
+
debugStream = fs.createWriteStream(debugLogPath, { flags: 'a' });
|
|
60
|
+
debugEnabled = true;
|
|
61
|
+
// Detect source (for logging purposes)
|
|
62
|
+
const cliArg = process.argv.find(arg => arg.startsWith('--debug-log'));
|
|
63
|
+
const envVar = process.env.SQLEW_DEBUG;
|
|
64
|
+
const source = cliArg ? 'CLI Argument' : envVar ? 'Environment Variable' : 'Config File';
|
|
65
|
+
const sourceDetail = cliArg ? '--debug-log' : envVar ? 'SQLEW_DEBUG' : 'debug.log_path';
|
|
66
|
+
debugLog('INFO', '='.repeat(80));
|
|
67
|
+
debugLog('INFO', `MCP Shared Context Server Debug Log Started`);
|
|
68
|
+
debugLog('INFO', `Timestamp: ${new Date().toISOString()}`);
|
|
69
|
+
debugLog('INFO', `Process ID: ${process.pid}`);
|
|
70
|
+
debugLog('INFO', `Debug Log Path: ${debugLogPath}`);
|
|
71
|
+
debugLog('INFO', `Log Level: ${currentLogLevel}`);
|
|
72
|
+
debugLog('INFO', `Source: ${source} (${sourceDetail})`);
|
|
73
|
+
debugLog('INFO', '='.repeat(80));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`Failed to initialize debug logger: ${error}`);
|
|
77
|
+
debugEnabled = false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Write debug log entry
|
|
82
|
+
* @param level - Log level (INFO, WARN, ERROR, DEBUG)
|
|
83
|
+
* @param message - Log message
|
|
84
|
+
* @param data - Optional data to log
|
|
85
|
+
*/
|
|
86
|
+
export function debugLog(level, message, data) {
|
|
87
|
+
if (!debugEnabled || !debugStream) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Check log level filtering
|
|
91
|
+
if (!shouldLog(level)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const timestamp = new Date().toISOString();
|
|
95
|
+
let logEntry = `[${timestamp}] [${level}] ${message}`;
|
|
96
|
+
try {
|
|
97
|
+
if (data !== undefined) {
|
|
98
|
+
const dataStr = typeof data === 'string'
|
|
99
|
+
? data
|
|
100
|
+
: JSON.stringify(data);
|
|
101
|
+
logEntry += ` | Data: ${dataStr}`;
|
|
102
|
+
}
|
|
103
|
+
debugStream.write(logEntry + '\n');
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error(`Failed to write debug log: ${error}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Log MCP tool call
|
|
111
|
+
*/
|
|
112
|
+
export function debugLogToolCall(toolName, action, params) {
|
|
113
|
+
debugLog('DEBUG', `Tool Call: ${toolName}.${action}`, { params });
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Log MCP tool response
|
|
117
|
+
*/
|
|
118
|
+
export function debugLogToolResponse(toolName, action, success, result, error) {
|
|
119
|
+
debugLog(success ? 'DEBUG' : 'ERROR', `Tool Response: ${toolName}.${action} ${success ? 'SUCCESS' : 'FAILED'}`, success ? result : error);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Log error with stack trace
|
|
123
|
+
*/
|
|
124
|
+
export function debugLogError(context, error, additionalContext) {
|
|
125
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
126
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
127
|
+
debugLog('ERROR', `${context}: ${errorMessage}`, {
|
|
128
|
+
stack,
|
|
129
|
+
...additionalContext
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Close debug logger
|
|
134
|
+
*/
|
|
135
|
+
export function closeDebugLogger() {
|
|
136
|
+
if (debugStream) {
|
|
137
|
+
debugLog('INFO', 'MCP Shared Context Server Debug Log Ended');
|
|
138
|
+
debugLog('INFO', '_'.repeat(80));
|
|
139
|
+
debugStream.end();
|
|
140
|
+
debugStream = null;
|
|
141
|
+
debugEnabled = false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if debug logging is enabled
|
|
146
|
+
*/
|
|
147
|
+
export function isDebugEnabled() {
|
|
148
|
+
return debugEnabled;
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Enhanced Debug Logging for Crash Investigation
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/**
|
|
154
|
+
* Log database query execution with detailed information
|
|
155
|
+
*/
|
|
156
|
+
export function debugLogQuery(context, sql, params, duration) {
|
|
157
|
+
if (!debugEnabled)
|
|
158
|
+
return;
|
|
159
|
+
const logData = {
|
|
160
|
+
sql: sql.replace(/\s+/g, ' ').trim(),
|
|
161
|
+
params: params || null
|
|
162
|
+
};
|
|
163
|
+
if (duration !== undefined) {
|
|
164
|
+
logData.duration_ms = duration;
|
|
165
|
+
}
|
|
166
|
+
debugLog('DEBUG', `DB Query [${context}]`, logData);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Log connection pool state
|
|
170
|
+
*/
|
|
171
|
+
export function debugLogPoolState(context, poolState) {
|
|
172
|
+
if (!debugEnabled)
|
|
173
|
+
return;
|
|
174
|
+
debugLog('DEBUG', `Connection Pool State [${context}]`, poolState);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Log transaction boundaries
|
|
178
|
+
*/
|
|
179
|
+
export function debugLogTransaction(action, context, transactionId) {
|
|
180
|
+
if (!debugEnabled)
|
|
181
|
+
return;
|
|
182
|
+
debugLog('DEBUG', `Transaction ${action} [${context}]`, { transaction_id: transactionId });
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Log parameter validation
|
|
186
|
+
*/
|
|
187
|
+
export function debugLogValidation(context, paramName, value, valid, errorMsg) {
|
|
188
|
+
if (!debugEnabled)
|
|
189
|
+
return;
|
|
190
|
+
debugLog(valid ? 'DEBUG' : 'WARN', `Parameter Validation [${context}]`, {
|
|
191
|
+
parameter: paramName,
|
|
192
|
+
value: typeof value === 'object' ? JSON.stringify(value) : value,
|
|
193
|
+
valid,
|
|
194
|
+
error: errorMsg || null
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Log schema operation (insert, update, select)
|
|
199
|
+
*/
|
|
200
|
+
export function debugLogSchemaOperation(operation, table, columns, whereClause, values) {
|
|
201
|
+
if (!debugEnabled)
|
|
202
|
+
return;
|
|
203
|
+
debugLog('DEBUG', `Schema Operation: ${operation} ${table}`, {
|
|
204
|
+
columns: columns || null,
|
|
205
|
+
where: whereClause || null,
|
|
206
|
+
values: values || null
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Log JSON parsing/serialization
|
|
211
|
+
*/
|
|
212
|
+
export function debugLogJSON(context, operation, input, success, error) {
|
|
213
|
+
if (!debugEnabled)
|
|
214
|
+
return;
|
|
215
|
+
debugLog(success ? 'DEBUG' : 'ERROR', `JSON ${operation} [${context}]`, {
|
|
216
|
+
input: typeof input === 'string' ? input : JSON.stringify(input),
|
|
217
|
+
success,
|
|
218
|
+
error: error || null
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Log function entry with parameters
|
|
223
|
+
*/
|
|
224
|
+
export function debugLogFunctionEntry(functionName, params) {
|
|
225
|
+
if (!debugEnabled)
|
|
226
|
+
return;
|
|
227
|
+
debugLog('DEBUG', `→ Function Entry: ${functionName}`, { params });
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Log function exit with result
|
|
231
|
+
*/
|
|
232
|
+
export function debugLogFunctionExit(functionName, success, result, error) {
|
|
233
|
+
if (!debugEnabled)
|
|
234
|
+
return;
|
|
235
|
+
debugLog(success ? 'DEBUG' : 'ERROR', `← Function Exit: ${functionName} ${success ? 'SUCCESS' : 'FAILED'}`, success ? { result } : { error: error instanceof Error ? error.message : String(error) });
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Log connection acquisition
|
|
239
|
+
*/
|
|
240
|
+
export function debugLogConnectionAcquire(context, waitTime) {
|
|
241
|
+
if (!debugEnabled)
|
|
242
|
+
return;
|
|
243
|
+
debugLog('DEBUG', `Connection Acquired [${context}]`, { wait_time_ms: waitTime || 0 });
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Log connection release
|
|
247
|
+
*/
|
|
248
|
+
export function debugLogConnectionRelease(context, duration) {
|
|
249
|
+
if (!debugEnabled)
|
|
250
|
+
return;
|
|
251
|
+
debugLog('DEBUG', `Connection Released [${context}]`, { duration_ms: duration || 0 });
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Log critical error with full context
|
|
255
|
+
*/
|
|
256
|
+
export function debugLogCriticalError(context, error, additionalContext) {
|
|
257
|
+
if (!debugEnabled)
|
|
258
|
+
return;
|
|
259
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
260
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
261
|
+
debugLog('ERROR', `💥 CRITICAL ERROR [${context}]`, {
|
|
262
|
+
error: errorMessage,
|
|
263
|
+
stack,
|
|
264
|
+
...additionalContext
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=debug-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-logger.js","sourceRoot":"","sources":["../../src/utils/debug-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized error handling module for MCP Sqlew server
|
|
3
|
+
* Provides consistent error logging, reporting, and recovery
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Handle tool execution errors
|
|
7
|
+
* Logs the error with context and returns formatted error response
|
|
8
|
+
*/
|
|
9
|
+
export declare function handleToolError(toolName: string, action: string, error: any, params?: any): {
|
|
10
|
+
message: string;
|
|
11
|
+
stack?: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Handle initialization errors
|
|
15
|
+
* Logs the error and returns formatted error message
|
|
16
|
+
*/
|
|
17
|
+
export declare function handleInitializationError(error: any): string;
|
|
18
|
+
/**
|
|
19
|
+
* Setup global error handlers for uncaught exceptions and unhandled rejections
|
|
20
|
+
* Server continues running to maintain availability
|
|
21
|
+
*/
|
|
22
|
+
export declare function setupGlobalErrorHandlers(onCleanup?: () => void): void;
|
|
23
|
+
/**
|
|
24
|
+
* Handle validation errors
|
|
25
|
+
* Returns user-friendly error message
|
|
26
|
+
*/
|
|
27
|
+
export declare function handleValidationError(toolName: string, action: string, validationMessage: string): string;
|
|
28
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBrC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,IAAI,CAsDN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAMR"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized error handling module for MCP Sqlew server
|
|
3
|
+
* Provides consistent error logging, reporting, and recovery
|
|
4
|
+
*/
|
|
5
|
+
import { debugLog, debugLogError } from './debug-logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Format error details for logging and reporting
|
|
8
|
+
*/
|
|
9
|
+
function formatErrorDetails(error) {
|
|
10
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
11
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
12
|
+
const errorType = error?.constructor?.name || 'Unknown';
|
|
13
|
+
return { message, stack, errorType };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Handle tool execution errors
|
|
17
|
+
* Logs the error with context and returns formatted error response
|
|
18
|
+
*/
|
|
19
|
+
export function handleToolError(toolName, action, error, params) {
|
|
20
|
+
const { message, stack, errorType } = formatErrorDetails(error);
|
|
21
|
+
// Enhanced debug logging with full error details
|
|
22
|
+
debugLogError(`Tool ${toolName}.${action}`, error, {
|
|
23
|
+
tool: toolName,
|
|
24
|
+
action: action,
|
|
25
|
+
params: params,
|
|
26
|
+
errorType: errorType,
|
|
27
|
+
stack: stack
|
|
28
|
+
});
|
|
29
|
+
// Log to stderr for immediate visibility
|
|
30
|
+
console.error(`\n❌ ERROR in ${toolName}.${action}:`);
|
|
31
|
+
console.error(` Message: ${message}`);
|
|
32
|
+
if (stack) {
|
|
33
|
+
console.error(` Stack trace:`);
|
|
34
|
+
console.error(stack.split('\n').map(line => ` ${line}`).join('\n'));
|
|
35
|
+
}
|
|
36
|
+
if (params) {
|
|
37
|
+
console.error(` Params: ${JSON.stringify(params, null, 2)}`);
|
|
38
|
+
}
|
|
39
|
+
console.error('');
|
|
40
|
+
return { message, stack };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Handle initialization errors
|
|
44
|
+
* Logs the error and returns formatted error message
|
|
45
|
+
*/
|
|
46
|
+
export function handleInitializationError(error) {
|
|
47
|
+
const { message, stack, errorType } = formatErrorDetails(error);
|
|
48
|
+
debugLogError('INITIALIZATION_ERROR', error, {
|
|
49
|
+
errorType: errorType,
|
|
50
|
+
stack: stack
|
|
51
|
+
});
|
|
52
|
+
console.error('\n❌ INITIALIZATION ERROR:');
|
|
53
|
+
console.error(` Message: ${message}`);
|
|
54
|
+
if (stack) {
|
|
55
|
+
console.error(` Stack trace:`);
|
|
56
|
+
console.error(stack.split('\n').map(line => ` ${line}`).join('\n'));
|
|
57
|
+
}
|
|
58
|
+
console.error('');
|
|
59
|
+
return message;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Setup global error handlers for uncaught exceptions and unhandled rejections
|
|
63
|
+
* Server continues running to maintain availability
|
|
64
|
+
*/
|
|
65
|
+
export function setupGlobalErrorHandlers(onCleanup) {
|
|
66
|
+
// Handle uncaught exceptions
|
|
67
|
+
process.on('uncaughtException', (error) => {
|
|
68
|
+
const { message, stack, errorType } = formatErrorDetails(error);
|
|
69
|
+
console.error('\n❌ UNCAUGHT EXCEPTION (server continuing):');
|
|
70
|
+
console.error(` Message: ${message}`);
|
|
71
|
+
console.error(` Stack trace:`);
|
|
72
|
+
console.error(stack?.split('\n').map(line => ` ${line}`).join('\n'));
|
|
73
|
+
debugLogError('UNCAUGHT_EXCEPTION', error, {
|
|
74
|
+
errorType: errorType,
|
|
75
|
+
stack: stack
|
|
76
|
+
});
|
|
77
|
+
console.error(' ⚠️ Server continuing despite error\n');
|
|
78
|
+
});
|
|
79
|
+
// Handle unhandled promise rejections
|
|
80
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
81
|
+
const { message, stack, errorType } = formatErrorDetails(reason);
|
|
82
|
+
console.error('\n❌ UNHANDLED PROMISE REJECTION (server continuing):');
|
|
83
|
+
console.error(` Reason: ${message}`);
|
|
84
|
+
if (stack) {
|
|
85
|
+
console.error(` Stack trace:`);
|
|
86
|
+
console.error(stack.split('\n').map(line => ` ${line}`).join('\n'));
|
|
87
|
+
}
|
|
88
|
+
debugLogError('UNHANDLED_REJECTION', reason, {
|
|
89
|
+
errorType: errorType,
|
|
90
|
+
stack: stack,
|
|
91
|
+
promise: String(promise)
|
|
92
|
+
});
|
|
93
|
+
console.error(' ⚠️ Server continuing despite error\n');
|
|
94
|
+
});
|
|
95
|
+
// Handle graceful shutdown
|
|
96
|
+
process.on('SIGINT', async () => {
|
|
97
|
+
console.error('\n✓ Shutting down MCP server...');
|
|
98
|
+
if (onCleanup) {
|
|
99
|
+
onCleanup();
|
|
100
|
+
}
|
|
101
|
+
process.exit(0);
|
|
102
|
+
});
|
|
103
|
+
process.on('SIGTERM', async () => {
|
|
104
|
+
console.error('\n✓ Shutting down MCP server...');
|
|
105
|
+
if (onCleanup) {
|
|
106
|
+
onCleanup();
|
|
107
|
+
}
|
|
108
|
+
process.exit(0);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Handle validation errors
|
|
113
|
+
* Returns user-friendly error message
|
|
114
|
+
*/
|
|
115
|
+
export function handleValidationError(toolName, action, validationMessage) {
|
|
116
|
+
debugLog('WARN', `Validation error in ${toolName}.${action}`, {
|
|
117
|
+
validation: validationMessage
|
|
118
|
+
});
|
|
119
|
+
return validationMessage;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help Action Usage Tracking
|
|
3
|
+
*
|
|
4
|
+
* Lightweight logging system to track help/example action invocations
|
|
5
|
+
* for understanding usage patterns and optimizing documentation.
|
|
6
|
+
*
|
|
7
|
+
* Data collected:
|
|
8
|
+
* - tool_name: Which MCP tool invoked help/example
|
|
9
|
+
* - action_name: "help" or "example"
|
|
10
|
+
* - timestamp: When the action was invoked
|
|
11
|
+
* - token_count: Estimated tokens in request + response
|
|
12
|
+
*
|
|
13
|
+
* Storage: Temporary log file in .sqlew/tmp/help-usage.log
|
|
14
|
+
* Format: JSON lines (one JSON object per line for easy parsing)
|
|
15
|
+
* Retention: Manual cleanup after 1-2 week analysis period
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Help action invocation record
|
|
19
|
+
*/
|
|
20
|
+
export interface HelpUsageRecord {
|
|
21
|
+
tool_name: string;
|
|
22
|
+
action_name: 'help' | 'example' | 'use_case';
|
|
23
|
+
timestamp: string;
|
|
24
|
+
token_count: number;
|
|
25
|
+
context?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Log a help action invocation
|
|
29
|
+
* Appends JSON line to log file for analysis
|
|
30
|
+
*
|
|
31
|
+
* @param record - Help usage record to log
|
|
32
|
+
*/
|
|
33
|
+
export declare function logHelpUsage(record: HelpUsageRecord): void;
|
|
34
|
+
/**
|
|
35
|
+
* Estimate token count for help/example action
|
|
36
|
+
* Rough estimation based on response length
|
|
37
|
+
*
|
|
38
|
+
* @param toolName - Name of the MCP tool
|
|
39
|
+
* @param actionName - "help" or "example"
|
|
40
|
+
* @param responseLength - Length of response text
|
|
41
|
+
* @returns Estimated token count (request + response)
|
|
42
|
+
*/
|
|
43
|
+
export declare function estimateHelpTokens(toolName: string, actionName: 'help' | 'example' | 'use_case', responseLength: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Track help action and return the help content
|
|
46
|
+
* Convenience wrapper that logs and returns content
|
|
47
|
+
*
|
|
48
|
+
* @param toolName - Name of the MCP tool
|
|
49
|
+
* @param actionName - "help" or "example"
|
|
50
|
+
* @param content - Help content to return
|
|
51
|
+
* @param context - Optional context about what triggered help
|
|
52
|
+
* @returns The help content (pass-through)
|
|
53
|
+
*/
|
|
54
|
+
export declare function trackAndReturnHelp(toolName: string, actionName: 'help' | 'example' | 'use_case', content: string, context?: string): string;
|
|
55
|
+
//# sourceMappingURL=help-tracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-tracking.d.ts","sourceRoot":"","sources":["../../src/utils/help-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAkBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAW1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,EAC3C,cAAc,EAAE,MAAM,GACrB,MAAM,CAQR;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,EAC3C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAYR"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help Action Usage Tracking
|
|
3
|
+
*
|
|
4
|
+
* Lightweight logging system to track help/example action invocations
|
|
5
|
+
* for understanding usage patterns and optimizing documentation.
|
|
6
|
+
*
|
|
7
|
+
* Data collected:
|
|
8
|
+
* - tool_name: Which MCP tool invoked help/example
|
|
9
|
+
* - action_name: "help" or "example"
|
|
10
|
+
* - timestamp: When the action was invoked
|
|
11
|
+
* - token_count: Estimated tokens in request + response
|
|
12
|
+
*
|
|
13
|
+
* Storage: Temporary log file in .sqlew/tmp/help-usage.log
|
|
14
|
+
* Format: JSON lines (one JSON object per line for easy parsing)
|
|
15
|
+
* Retention: Manual cleanup after 1-2 week analysis period
|
|
16
|
+
*/
|
|
17
|
+
import { appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
18
|
+
import { resolve } from 'path';
|
|
19
|
+
/**
|
|
20
|
+
* Log file configuration
|
|
21
|
+
*/
|
|
22
|
+
const LOG_DIR = resolve(process.cwd(), '.sqlew', 'tmp');
|
|
23
|
+
const LOG_FILE = resolve(LOG_DIR, 'help-usage.log');
|
|
24
|
+
/**
|
|
25
|
+
* Initialize logging directory
|
|
26
|
+
* Creates .sqlew/tmp/ if it doesn't exist
|
|
27
|
+
*/
|
|
28
|
+
function ensureLogDirectory() {
|
|
29
|
+
if (!existsSync(LOG_DIR)) {
|
|
30
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Log a help action invocation
|
|
35
|
+
* Appends JSON line to log file for analysis
|
|
36
|
+
*
|
|
37
|
+
* @param record - Help usage record to log
|
|
38
|
+
*/
|
|
39
|
+
export function logHelpUsage(record) {
|
|
40
|
+
try {
|
|
41
|
+
ensureLogDirectory();
|
|
42
|
+
// Append as JSON line (newline-delimited JSON)
|
|
43
|
+
const jsonLine = JSON.stringify(record) + '\n';
|
|
44
|
+
appendFileSync(LOG_FILE, jsonLine, 'utf8');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
// Silent failure - don't break tool execution if logging fails
|
|
48
|
+
console.error('[Help Tracking] Failed to log usage:', error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Estimate token count for help/example action
|
|
53
|
+
* Rough estimation based on response length
|
|
54
|
+
*
|
|
55
|
+
* @param toolName - Name of the MCP tool
|
|
56
|
+
* @param actionName - "help" or "example"
|
|
57
|
+
* @param responseLength - Length of response text
|
|
58
|
+
* @returns Estimated token count (request + response)
|
|
59
|
+
*/
|
|
60
|
+
export function estimateHelpTokens(toolName, actionName, responseLength) {
|
|
61
|
+
// Request tokens: tool name + action parameter (~50 tokens)
|
|
62
|
+
const requestTokens = 50;
|
|
63
|
+
// Response tokens: approximate 4 chars per token
|
|
64
|
+
const responseTokens = Math.ceil(responseLength / 4);
|
|
65
|
+
return requestTokens + responseTokens;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Track help action and return the help content
|
|
69
|
+
* Convenience wrapper that logs and returns content
|
|
70
|
+
*
|
|
71
|
+
* @param toolName - Name of the MCP tool
|
|
72
|
+
* @param actionName - "help" or "example"
|
|
73
|
+
* @param content - Help content to return
|
|
74
|
+
* @param context - Optional context about what triggered help
|
|
75
|
+
* @returns The help content (pass-through)
|
|
76
|
+
*/
|
|
77
|
+
export function trackAndReturnHelp(toolName, actionName, content, context) {
|
|
78
|
+
const tokenCount = estimateHelpTokens(toolName, actionName, content.length);
|
|
79
|
+
logHelpUsage({
|
|
80
|
+
tool_name: toolName,
|
|
81
|
+
action_name: actionName,
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
token_count: tokenCount,
|
|
84
|
+
context
|
|
85
|
+
});
|
|
86
|
+
return content;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=help-tracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-tracking.js","sourceRoot":"","sources":["../../src/utils/help-tracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAa/B;;GAEG;AACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAEpD;;;GAGG;AACH,SAAS,kBAAkB;IACzB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,IAAI,CAAC;QACH,kBAAkB,EAAE,CAAC;QAErB,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC/C,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+DAA+D;QAC/D,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,UAA2C,EAC3C,cAAsB;IAEtB,4DAA4D;IAC5D,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,iDAAiD;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAErD,OAAO,aAAa,GAAG,cAAc,CAAC;AACxC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,UAA2C,EAC3C,OAAe,EACf,OAAgB;IAEhB,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5E,YAAY,CAAC;QACX,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,UAAU;QACvB,OAAO;KACR,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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 declare function parseStringArray(param: string | string[] | undefined | null): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Parse optional string array parameter
|
|
20
|
+
* Returns undefined if param is null/undefined/empty
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseOptionalStringArray(param: string | string[] | undefined | null): string[] | undefined;
|
|
23
|
+
//# sourceMappingURL=param-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-parser.d.ts","sourceRoot":"","sources":["../../src/utils/param-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CA4BtF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,GAAG,SAAS,CAG1G"}
|