sqlew 3.5.3 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +247 -1772
  2. package/README.md +70 -304
  3. package/assets/config.example.toml +106 -0
  4. package/dist/adapters/index.d.ts +11 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/adapters/index.js +21 -0
  7. package/dist/adapters/index.js.map +1 -0
  8. package/dist/adapters/mysql-adapter.d.ts +31 -0
  9. package/dist/adapters/mysql-adapter.d.ts.map +1 -0
  10. package/dist/adapters/mysql-adapter.js +63 -0
  11. package/dist/adapters/mysql-adapter.js.map +1 -0
  12. package/dist/adapters/postgresql-adapter.d.ts +31 -0
  13. package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
  14. package/dist/adapters/postgresql-adapter.js +63 -0
  15. package/dist/adapters/postgresql-adapter.js.map +1 -0
  16. package/dist/adapters/sqlite-adapter.d.ts +37 -0
  17. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  18. package/dist/adapters/sqlite-adapter.js +129 -0
  19. package/dist/adapters/sqlite-adapter.js.map +1 -0
  20. package/dist/adapters/types.d.ts +33 -0
  21. package/dist/adapters/types.d.ts.map +1 -0
  22. package/dist/adapters/types.js +2 -0
  23. package/dist/adapters/types.js.map +1 -0
  24. package/dist/cli.js +55 -54
  25. package/dist/cli.js.map +1 -1
  26. package/dist/config/example-generator.d.ts +11 -0
  27. package/dist/config/example-generator.d.ts.map +1 -0
  28. package/dist/config/example-generator.js +48 -0
  29. package/dist/config/example-generator.js.map +1 -0
  30. package/dist/config/loader.d.ts.map +1 -1
  31. package/dist/config/loader.js +4 -0
  32. package/dist/config/loader.js.map +1 -1
  33. package/dist/config/types.d.ts +11 -0
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/config/types.js.map +1 -1
  36. package/dist/database.d.ts +56 -121
  37. package/dist/database.d.ts.map +1 -1
  38. package/dist/database.js +266 -414
  39. package/dist/database.js.map +1 -1
  40. package/dist/index.js +329 -245
  41. package/dist/index.js.map +1 -1
  42. package/dist/knexfile.d.ts +6 -0
  43. package/dist/knexfile.d.ts.map +1 -0
  44. package/dist/knexfile.js +85 -0
  45. package/dist/knexfile.js.map +1 -0
  46. package/dist/migrations/add-help-system-tables.d.ts +35 -0
  47. package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
  48. package/dist/migrations/add-help-system-tables.js +206 -0
  49. package/dist/migrations/add-help-system-tables.js.map +1 -0
  50. package/dist/migrations/add-token-tracking.d.ts +28 -0
  51. package/dist/migrations/add-token-tracking.d.ts.map +1 -0
  52. package/dist/migrations/add-token-tracking.js +108 -0
  53. package/dist/migrations/add-token-tracking.js.map +1 -0
  54. package/dist/migrations/index.d.ts +25 -12
  55. package/dist/migrations/index.d.ts.map +1 -1
  56. package/dist/migrations/index.js +147 -20
  57. package/dist/migrations/index.js.map +1 -1
  58. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
  59. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
  60. package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
  61. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
  62. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
  63. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
  64. package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
  65. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
  66. package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
  67. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
  68. package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
  69. package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
  70. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
  71. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
  72. package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
  73. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
  74. package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
  75. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
  76. package/dist/migrations/knex/20251025070349_create_views.js +143 -0
  77. package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
  78. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
  79. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  80. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
  81. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  82. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
  83. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  84. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
  85. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  86. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
  87. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
  88. package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
  89. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
  90. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
  91. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  92. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
  93. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  94. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
  95. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
  96. package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
  97. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
  98. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
  99. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  100. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
  101. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
  102. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
  103. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  104. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
  105. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  106. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
  107. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  108. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
  109. package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
  110. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
  111. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  112. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
  113. package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  114. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
  115. package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
  116. package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
  117. package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
  118. package/dist/migrations/seed-help-data.d.ts +48 -0
  119. package/dist/migrations/seed-help-data.d.ts.map +1 -0
  120. package/dist/migrations/seed-help-data.js +1466 -0
  121. package/dist/migrations/seed-help-data.js.map +1 -0
  122. package/dist/migrations/seed-tool-metadata.d.ts +24 -0
  123. package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
  124. package/dist/migrations/seed-tool-metadata.js +392 -0
  125. package/dist/migrations/seed-tool-metadata.js.map +1 -0
  126. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
  127. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
  128. package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
  129. package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
  130. package/dist/schema.d.ts.map +1 -1
  131. package/dist/schema.js +2 -0
  132. package/dist/schema.js.map +1 -1
  133. package/dist/tests/agent-reuse.test.d.ts +6 -0
  134. package/dist/tests/agent-reuse.test.d.ts.map +1 -0
  135. package/dist/tests/agent-reuse.test.js +242 -0
  136. package/dist/tests/agent-reuse.test.js.map +1 -0
  137. package/dist/tests/all-features.test.d.ts +7 -0
  138. package/dist/tests/all-features.test.d.ts.map +1 -0
  139. package/dist/tests/all-features.test.js +514 -0
  140. package/dist/tests/all-features.test.js.map +1 -0
  141. package/dist/tests/git-aware-completion.test.js +89 -70
  142. package/dist/tests/git-aware-completion.test.js.map +1 -1
  143. package/dist/tests/help-system.test.d.ts +23 -0
  144. package/dist/tests/help-system.test.d.ts.map +1 -0
  145. package/dist/tests/help-system.test.js +374 -0
  146. package/dist/tests/help-system.test.js.map +1 -0
  147. package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
  148. package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
  149. package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
  150. package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
  151. package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
  152. package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
  153. package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
  154. package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
  155. package/dist/tests/tasks.dependencies.test.js +338 -307
  156. package/dist/tests/tasks.dependencies.test.js.map +1 -1
  157. package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
  158. package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
  159. package/dist/tests/tasks.watch-files-action.test.js +122 -101
  160. package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
  161. package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
  162. package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
  163. package/dist/tests/two-step-git-completion.test.js +176 -133
  164. package/dist/tests/two-step-git-completion.test.js.map +1 -1
  165. package/dist/tests/vcs-staging.test.js +1 -1
  166. package/dist/tests/vcs-staging.test.js.map +1 -1
  167. package/dist/tools/config.d.ts +9 -6
  168. package/dist/tools/config.d.ts.map +1 -1
  169. package/dist/tools/config.js +16 -14
  170. package/dist/tools/config.js.map +1 -1
  171. package/dist/tools/constraints.d.ts +10 -7
  172. package/dist/tools/constraints.d.ts.map +1 -1
  173. package/dist/tools/constraints.js +73 -51
  174. package/dist/tools/constraints.js.map +1 -1
  175. package/dist/tools/context.d.ts +36 -33
  176. package/dist/tools/context.d.ts.map +1 -1
  177. package/dist/tools/context.js +441 -340
  178. package/dist/tools/context.js.map +1 -1
  179. package/dist/tools/files.d.ts +12 -9
  180. package/dist/tools/files.d.ts.map +1 -1
  181. package/dist/tools/files.js +173 -95
  182. package/dist/tools/files.js.map +1 -1
  183. package/dist/tools/help-queries.d.ts +130 -0
  184. package/dist/tools/help-queries.d.ts.map +1 -0
  185. package/dist/tools/help-queries.js +393 -0
  186. package/dist/tools/help-queries.js.map +1 -0
  187. package/dist/tools/messaging.d.ts +14 -11
  188. package/dist/tools/messaging.d.ts.map +1 -1
  189. package/dist/tools/messaging.js +239 -133
  190. package/dist/tools/messaging.js.map +1 -1
  191. package/dist/tools/tasks.d.ts +18 -16
  192. package/dist/tools/tasks.d.ts.map +1 -1
  193. package/dist/tools/tasks.js +519 -442
  194. package/dist/tools/tasks.js.map +1 -1
  195. package/dist/tools/utils.d.ts +14 -11
  196. package/dist/tools/utils.d.ts.map +1 -1
  197. package/dist/tools/utils.js +90 -122
  198. package/dist/tools/utils.js.map +1 -1
  199. package/dist/types.d.ts +1 -0
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/utils/activity-logging.d.ts +114 -0
  202. package/dist/utils/activity-logging.d.ts.map +1 -0
  203. package/dist/utils/activity-logging.js +162 -0
  204. package/dist/utils/activity-logging.js.map +1 -0
  205. package/dist/utils/batch.d.ts +2 -2
  206. package/dist/utils/batch.d.ts.map +1 -1
  207. package/dist/utils/batch.js +8 -8
  208. package/dist/utils/batch.js.map +1 -1
  209. package/dist/utils/cleanup.d.ts +24 -14
  210. package/dist/utils/cleanup.d.ts.map +1 -1
  211. package/dist/utils/cleanup.js +37 -27
  212. package/dist/utils/cleanup.js.map +1 -1
  213. package/dist/utils/debug-logger.d.ts +99 -0
  214. package/dist/utils/debug-logger.d.ts.map +1 -0
  215. package/dist/utils/debug-logger.js +267 -0
  216. package/dist/utils/debug-logger.js.map +1 -0
  217. package/dist/utils/error-handler.d.ts +28 -0
  218. package/dist/utils/error-handler.d.ts.map +1 -0
  219. package/dist/utils/error-handler.js +121 -0
  220. package/dist/utils/error-handler.js.map +1 -0
  221. package/dist/utils/help-tracking.d.ts +55 -0
  222. package/dist/utils/help-tracking.d.ts.map +1 -0
  223. package/dist/utils/help-tracking.js +88 -0
  224. package/dist/utils/help-tracking.js.map +1 -0
  225. package/dist/utils/param-parser.d.ts +23 -0
  226. package/dist/utils/param-parser.d.ts.map +1 -0
  227. package/dist/utils/param-parser.js +52 -0
  228. package/dist/utils/param-parser.js.map +1 -0
  229. package/dist/utils/retention.d.ts +17 -7
  230. package/dist/utils/retention.d.ts.map +1 -1
  231. package/dist/utils/retention.js +31 -12
  232. package/dist/utils/retention.js.map +1 -1
  233. package/dist/utils/task-stale-detection.d.ts +15 -13
  234. package/dist/utils/task-stale-detection.d.ts.map +1 -1
  235. package/dist/utils/task-stale-detection.js +100 -302
  236. package/dist/utils/task-stale-detection.js.map +1 -1
  237. package/dist/utils/token-estimation.d.ts +72 -0
  238. package/dist/utils/token-estimation.d.ts.map +1 -0
  239. package/dist/utils/token-estimation.js +71 -0
  240. package/dist/utils/token-estimation.js.map +1 -0
  241. package/dist/utils/token-logging.d.ts +48 -0
  242. package/dist/utils/token-logging.d.ts.map +1 -0
  243. package/dist/utils/token-logging.js +112 -0
  244. package/dist/utils/token-logging.js.map +1 -0
  245. package/dist/utils/view-queries.d.ts +34 -0
  246. package/dist/utils/view-queries.d.ts.map +1 -0
  247. package/dist/utils/view-queries.js +192 -0
  248. package/dist/utils/view-queries.js.map +1 -0
  249. package/dist/watcher/file-watcher.d.ts.map +1 -1
  250. package/dist/watcher/file-watcher.js +25 -11
  251. package/dist/watcher/file-watcher.js.map +1 -1
  252. package/docs/BEST_PRACTICES.md +56 -448
  253. package/docs/MIGRATION_v3.6.0.md +170 -0
  254. package/docs/SHARED_CONCEPTS.md +63 -208
  255. package/docs/TASK_OVERVIEW.md +2 -2
  256. package/docs/TOOL_SELECTION.md +41 -248
  257. package/package.json +17 -4
@@ -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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,WAAW,GAA0B,IAAI,CAAC;AAC9C,IAAI,cAAc,GAAkB,IAAI,CAAC;AACzC,IAAI,eAAe,GAAwC,MAAM,CAAC;AAElE,qDAAqD;AACrD,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;CACX,CAAC;AAEF;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,EAA6B,CAAC,IAAI,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACjD,OAAO,UAAU,IAAI,YAAY,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,YAAqB,EAAE,QAAiB;IACtE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,cAAc,GAAG,YAAY,CAAC;IAE9B,oDAAoD;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAyC,CAAC;QACjF,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,eAAe,GAAG,UAAU,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,oCAAoC;QACpC,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,YAAY,GAAG,IAAI,CAAC;QAEpB,uCAAuC;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC;QACzF,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAExF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,QAAQ,CAAC,MAAM,EAAE,6CAA6C,CAAC,CAAC;QAChE,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,MAAM,EAAE,eAAe,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,YAAY,EAAE,CAAC,CAAC;QACpD,QAAQ,CAAC,MAAM,EAAE,cAAc,eAAe,EAAE,CAAC,CAAC;QAClD,QAAQ,CAAC,MAAM,EAAE,WAAW,MAAM,KAAK,YAAY,GAAG,CAAC,CAAC;QACxD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;QAC7D,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAA0C,EAAE,OAAe,EAAE,IAAU;IAC9F,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,QAAQ,GAAG,IAAI,SAAS,MAAM,KAAK,KAAK,OAAO,EAAE,CAAC;IAEtD,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ;gBACtC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACzB,QAAQ,IAAI,YAAY,OAAO,EAAE,CAAC;QACpC,CAAC;QAED,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAW;IAC5E,QAAQ,CAAC,OAAO,EAAE,cAAc,QAAQ,IAAI,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,MAAc,EAAE,OAAgB,EAAE,MAAY,EAAE,KAAW;IAChH,QAAQ,CACN,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAC3B,kBAAkB,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,EACxE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,KAAU,EAAE,iBAAuB;IAChF,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,KAAK,YAAY,EAAE,EAAE;QAC/C,KAAK;QACL,GAAG,iBAAiB;KACrB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,WAAW,EAAE,CAAC;QAChB,QAAQ,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;QAC9D,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,WAAW,CAAC,GAAG,EAAE,CAAC;QAClB,WAAW,GAAG,IAAI,CAAC;QACnB,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,iDAAiD;AACjD,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,GAAW,EAAE,MAAY,EAAE,QAAiB;IACzF,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,OAAO,GAAQ;QACnB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;QACpC,MAAM,EAAE,MAAM,IAAI,IAAI;KACvB,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,OAAO,EAAE,aAAa,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,SAKlD;IACC,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,0BAA0B,OAAO,GAAG,EAAE,SAAS,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuC,EAAE,OAAe,EAAE,aAAsB;IAClH,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,eAAe,MAAM,KAAK,OAAO,GAAG,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,SAAiB,EAAE,KAAU,EAAE,KAAc,EAAE,QAAiB;IAClH,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CACN,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EACxB,yBAAyB,OAAO,GAAG,EACnC;QACE,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;QAChE,KAAK;QACL,KAAK,EAAE,QAAQ,IAAI,IAAI;KACxB,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAoD,EACpD,KAAa,EACb,OAAkB,EAClB,WAAoB,EACpB,MAAY;IAEZ,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,qBAAqB,SAAS,IAAI,KAAK,EAAE,EAAE;QAC3D,OAAO,EAAE,OAAO,IAAI,IAAI;QACxB,KAAK,EAAE,WAAW,IAAI,IAAI;QAC1B,MAAM,EAAE,MAAM,IAAI,IAAI;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,SAAgC,EAAE,KAAU,EAAE,OAAgB,EAAE,KAAc;IAC1H,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CACN,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAC3B,QAAQ,SAAS,KAAK,OAAO,GAAG,EAChC;QACE,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAChE,OAAO;QACP,KAAK,EAAE,KAAK,IAAI,IAAI;KACrB,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,MAAW;IACrE,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,qBAAqB,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB,EAAE,OAAgB,EAAE,MAAY,EAAE,KAAW;IACpG,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CACN,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAC3B,oBAAoB,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,EACpE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,QAAiB;IAC1E,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,wBAAwB,OAAO,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,QAAiB;IAC1E,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,QAAQ,CAAC,OAAO,EAAE,wBAAwB,OAAO,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,KAAU,EACV,iBAKC;IAED,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,OAAO,GAAG,EAAE;QAClD,KAAK,EAAE,YAAY;QACnB,KAAK;QACL,GAAG,iBAAiB;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -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"}