@nanocollective/nanocoder 1.18.0 → 1.19.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.
Files changed (603) hide show
  1. package/README.md +176 -8
  2. package/assets/nanocoder-vscode.vsix +0 -0
  3. package/dist/ai-sdk-client-empty-message.spec.js.map +1 -1
  4. package/dist/ai-sdk-client.d.ts +1 -1
  5. package/dist/ai-sdk-client.d.ts.map +1 -1
  6. package/dist/ai-sdk-client.js +261 -150
  7. package/dist/ai-sdk-client.js.map +1 -1
  8. package/dist/app/utils/appUtils.d.ts +1 -1
  9. package/dist/app/utils/appUtils.d.ts.map +1 -1
  10. package/dist/app/utils/appUtils.js +78 -12
  11. package/dist/app/utils/appUtils.js.map +1 -1
  12. package/dist/app.d.ts +22 -1
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +353 -48
  15. package/dist/app.js.map +1 -1
  16. package/dist/cli.js +37 -2
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cli.spec.d.ts +2 -0
  19. package/dist/cli.spec.d.ts.map +1 -0
  20. package/dist/cli.spec.js +101 -0
  21. package/dist/cli.spec.js.map +1 -0
  22. package/dist/client-factory.d.ts.map +1 -1
  23. package/dist/client-factory.js +2 -2
  24. package/dist/client-factory.js.map +1 -1
  25. package/dist/commands/checkpoint.d.ts +6 -0
  26. package/dist/commands/checkpoint.d.ts.map +1 -0
  27. package/dist/commands/checkpoint.js +277 -0
  28. package/dist/commands/checkpoint.js.map +1 -0
  29. package/dist/commands/clear.d.ts.map +1 -1
  30. package/dist/commands/clear.js +1 -1
  31. package/dist/commands/clear.js.map +1 -1
  32. package/dist/commands/custom-commands.d.ts.map +1 -1
  33. package/dist/commands/custom-commands.js +4 -4
  34. package/dist/commands/custom-commands.js.map +1 -1
  35. package/dist/commands/exit.d.ts.map +1 -1
  36. package/dist/commands/exit.js.map +1 -1
  37. package/dist/commands/export.d.ts.map +1 -1
  38. package/dist/commands/export.js +2 -2
  39. package/dist/commands/export.js.map +1 -1
  40. package/dist/commands/help.d.ts.map +1 -1
  41. package/dist/commands/help.js +5 -5
  42. package/dist/commands/help.js.map +1 -1
  43. package/dist/commands/index.d.ts +1 -1
  44. package/dist/commands/index.d.ts.map +1 -1
  45. package/dist/commands/index.js +1 -1
  46. package/dist/commands/index.js.map +1 -1
  47. package/dist/commands/init.d.ts.map +1 -1
  48. package/dist/commands/init.js +15 -14
  49. package/dist/commands/init.js.map +1 -1
  50. package/dist/commands/lsp.d.ts.map +1 -1
  51. package/dist/commands/lsp.js +6 -6
  52. package/dist/commands/lsp.js.map +1 -1
  53. package/dist/commands/mcp.d.ts +1 -1
  54. package/dist/commands/mcp.d.ts.map +1 -1
  55. package/dist/commands/mcp.js +6 -6
  56. package/dist/commands/mcp.js.map +1 -1
  57. package/dist/commands/model-database.d.ts.map +1 -1
  58. package/dist/commands/model-database.js +8 -8
  59. package/dist/commands/model-database.js.map +1 -1
  60. package/dist/commands/model.d.ts.map +1 -1
  61. package/dist/commands/model.js.map +1 -1
  62. package/dist/commands/provider.d.ts.map +1 -1
  63. package/dist/commands/provider.js.map +1 -1
  64. package/dist/commands/setup-config.js +1 -1
  65. package/dist/commands/setup-config.js.map +1 -1
  66. package/dist/commands/status.d.ts.map +1 -1
  67. package/dist/commands/status.js.map +1 -1
  68. package/dist/commands/theme.d.ts.map +1 -1
  69. package/dist/commands/theme.js.map +1 -1
  70. package/dist/commands/update.d.ts.map +1 -1
  71. package/dist/commands/update.js +5 -5
  72. package/dist/commands/update.js.map +1 -1
  73. package/dist/commands/usage.d.ts.map +1 -1
  74. package/dist/commands/usage.js +3 -3
  75. package/dist/commands/usage.js.map +1 -1
  76. package/dist/commands.d.ts.map +1 -1
  77. package/dist/commands.js +1 -1
  78. package/dist/commands.js.map +1 -1
  79. package/dist/components/assistant-message.d.ts.map +1 -1
  80. package/dist/components/assistant-message.js +2 -2
  81. package/dist/components/assistant-message.js.map +1 -1
  82. package/dist/components/bash-execution-indicator.d.ts.map +1 -1
  83. package/dist/components/bash-execution-indicator.js +2 -2
  84. package/dist/components/bash-execution-indicator.js.map +1 -1
  85. package/dist/components/cancelling-indicator.js +3 -3
  86. package/dist/components/cancelling-indicator.js.map +1 -1
  87. package/dist/components/chat-queue.d.ts.map +1 -1
  88. package/dist/components/chat-queue.js +1 -1
  89. package/dist/components/chat-queue.js.map +1 -1
  90. package/dist/components/checkpoint-display.d.ts +8 -0
  91. package/dist/components/checkpoint-display.d.ts.map +1 -0
  92. package/dist/components/checkpoint-display.js +29 -0
  93. package/dist/components/checkpoint-display.js.map +1 -0
  94. package/dist/components/checkpoint-selector.d.ts +11 -0
  95. package/dist/components/checkpoint-selector.d.ts.map +1 -0
  96. package/dist/components/checkpoint-selector.js +55 -0
  97. package/dist/components/checkpoint-selector.js.map +1 -0
  98. package/dist/components/error-message.d.ts.map +1 -1
  99. package/dist/components/error-message.js +4 -4
  100. package/dist/components/error-message.js.map +1 -1
  101. package/dist/components/info-message.d.ts.map +1 -1
  102. package/dist/components/info-message.js +4 -4
  103. package/dist/components/info-message.js.map +1 -1
  104. package/dist/components/model-selector.d.ts.map +1 -1
  105. package/dist/components/model-selector.js +7 -7
  106. package/dist/components/model-selector.js.map +1 -1
  107. package/dist/components/provider-selector.d.ts.map +1 -1
  108. package/dist/components/provider-selector.js +6 -6
  109. package/dist/components/provider-selector.js.map +1 -1
  110. package/dist/components/security-disclaimer.d.ts.map +1 -1
  111. package/dist/components/security-disclaimer.js +4 -4
  112. package/dist/components/security-disclaimer.js.map +1 -1
  113. package/dist/components/status.d.ts +3 -1
  114. package/dist/components/status.d.ts.map +1 -1
  115. package/dist/components/status.js +17 -9
  116. package/dist/components/status.js.map +1 -1
  117. package/dist/components/success-message.d.ts.map +1 -1
  118. package/dist/components/success-message.js +4 -4
  119. package/dist/components/success-message.js.map +1 -1
  120. package/dist/components/theme-selector.d.ts.map +1 -1
  121. package/dist/components/theme-selector.js +8 -8
  122. package/dist/components/theme-selector.js.map +1 -1
  123. package/dist/components/tool-confirmation.d.ts.map +1 -1
  124. package/dist/components/tool-confirmation.js +7 -7
  125. package/dist/components/tool-confirmation.js.map +1 -1
  126. package/dist/components/tool-execution-indicator.d.ts.map +1 -1
  127. package/dist/components/tool-execution-indicator.js +2 -2
  128. package/dist/components/tool-execution-indicator.js.map +1 -1
  129. package/dist/components/tool-message.d.ts.map +1 -1
  130. package/dist/components/tool-message.js +4 -5
  131. package/dist/components/tool-message.js.map +1 -1
  132. package/dist/components/ui/titled-box.d.ts +16 -0
  133. package/dist/components/ui/titled-box.d.ts.map +1 -0
  134. package/dist/components/ui/titled-box.js +10 -0
  135. package/dist/components/ui/titled-box.js.map +1 -0
  136. package/dist/components/usage/progress-bar.d.ts.map +1 -1
  137. package/dist/components/usage/progress-bar.js +3 -0
  138. package/dist/components/usage/progress-bar.js.map +1 -1
  139. package/dist/components/usage/usage-display.d.ts.map +1 -1
  140. package/dist/components/usage/usage-display.js +7 -4
  141. package/dist/components/usage/usage-display.js.map +1 -1
  142. package/dist/components/user-input.d.ts.map +1 -1
  143. package/dist/components/user-input.js +7 -7
  144. package/dist/components/user-input.js.map +1 -1
  145. package/dist/components/user-message.d.ts.map +1 -1
  146. package/dist/components/user-message.js +1 -1
  147. package/dist/components/user-message.js.map +1 -1
  148. package/dist/components/vscode-extension-prompt.js +3 -3
  149. package/dist/components/vscode-extension-prompt.js.map +1 -1
  150. package/dist/components/warning-message.d.ts.map +1 -1
  151. package/dist/components/warning-message.js +4 -4
  152. package/dist/components/warning-message.js.map +1 -1
  153. package/dist/components/welcome-message.d.ts.map +1 -1
  154. package/dist/components/welcome-message.js +4 -4
  155. package/dist/components/welcome-message.js.map +1 -1
  156. package/dist/config/index.d.ts.map +1 -1
  157. package/dist/config/index.js +7 -7
  158. package/dist/config/index.js.map +1 -1
  159. package/dist/config/index.spec.js +4 -4
  160. package/dist/config/index.spec.js.map +1 -1
  161. package/dist/config/paths.spec.js +1 -1
  162. package/dist/config/paths.spec.js.map +1 -1
  163. package/dist/config/preferences.d.ts +0 -2
  164. package/dist/config/preferences.d.ts.map +1 -1
  165. package/dist/config/preferences.js +1 -11
  166. package/dist/config/preferences.js.map +1 -1
  167. package/dist/custom-commands/executor.d.ts.map +1 -1
  168. package/dist/custom-commands/executor.js.map +1 -1
  169. package/dist/custom-commands/loader.d.ts.map +1 -1
  170. package/dist/custom-commands/loader.js +1 -1
  171. package/dist/custom-commands/loader.js.map +1 -1
  172. package/dist/custom-commands/parser.d.ts.map +1 -1
  173. package/dist/custom-commands/parser.js.map +1 -1
  174. package/dist/hooks/useAppInitialization.d.ts +7 -5
  175. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  176. package/dist/hooks/useAppInitialization.js +21 -22
  177. package/dist/hooks/useAppInitialization.js.map +1 -1
  178. package/dist/hooks/useAppState.d.ts +22 -5
  179. package/dist/hooks/useAppState.d.ts.map +1 -1
  180. package/dist/hooks/useAppState.js +17 -1
  181. package/dist/hooks/useAppState.js.map +1 -1
  182. package/dist/hooks/useChatHandler.d.ts +4 -2
  183. package/dist/hooks/useChatHandler.d.ts.map +1 -1
  184. package/dist/hooks/useChatHandler.js +35 -10
  185. package/dist/hooks/useChatHandler.js.map +1 -1
  186. package/dist/hooks/useDirectoryTrust.js +1 -1
  187. package/dist/hooks/useDirectoryTrust.js.map +1 -1
  188. package/dist/hooks/useInputState.js +2 -2
  189. package/dist/hooks/useInputState.js.map +1 -1
  190. package/dist/hooks/useModeHandlers.d.ts +1 -1
  191. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  192. package/dist/hooks/useModeHandlers.js +3 -3
  193. package/dist/hooks/useModeHandlers.js.map +1 -1
  194. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  195. package/dist/hooks/useTerminalWidth.js +3 -3
  196. package/dist/hooks/useTerminalWidth.js.map +1 -1
  197. package/dist/hooks/useTheme.d.ts.map +1 -1
  198. package/dist/hooks/useTheme.js +1 -1
  199. package/dist/hooks/useTheme.js.map +1 -1
  200. package/dist/hooks/useToolHandler.d.ts +1 -1
  201. package/dist/hooks/useToolHandler.d.ts.map +1 -1
  202. package/dist/hooks/useToolHandler.js +4 -4
  203. package/dist/hooks/useToolHandler.js.map +1 -1
  204. package/dist/hooks/useUIState.d.ts +1 -1
  205. package/dist/hooks/useUIState.d.ts.map +1 -1
  206. package/dist/hooks/useUIState.js.map +1 -1
  207. package/dist/hooks/useVSCodeServer.js +2 -2
  208. package/dist/hooks/useVSCodeServer.js.map +1 -1
  209. package/dist/init/agents-template-generator.d.ts +1 -1
  210. package/dist/init/agents-template-generator.d.ts.map +1 -1
  211. package/dist/init/agents-template-generator.js.map +1 -1
  212. package/dist/init/existing-rules-extractor.js +1 -1
  213. package/dist/init/existing-rules-extractor.js.map +1 -1
  214. package/dist/init/file-scanner.js +2 -2
  215. package/dist/init/file-scanner.js.map +1 -1
  216. package/dist/init/framework-detector.js +1 -1
  217. package/dist/init/framework-detector.js.map +1 -1
  218. package/dist/init/project-analyzer.d.ts +1 -1
  219. package/dist/init/project-analyzer.d.ts.map +1 -1
  220. package/dist/init/project-analyzer.js +3 -3
  221. package/dist/init/project-analyzer.js.map +1 -1
  222. package/dist/lsp/lsp-client.d.ts +1 -1
  223. package/dist/lsp/lsp-client.d.ts.map +1 -1
  224. package/dist/lsp/lsp-client.js +1 -1
  225. package/dist/lsp/lsp-client.js.map +1 -1
  226. package/dist/lsp/lsp-client.spec.js +1 -2
  227. package/dist/lsp/lsp-client.spec.js.map +1 -1
  228. package/dist/lsp/lsp-manager.d.ts +1 -1
  229. package/dist/lsp/lsp-manager.d.ts.map +1 -1
  230. package/dist/lsp/lsp-manager.js.map +1 -1
  231. package/dist/lsp/lsp-manager.spec.js +1 -1
  232. package/dist/lsp/lsp-manager.spec.js.map +1 -1
  233. package/dist/lsp/protocol.spec.js +1 -1
  234. package/dist/lsp/protocol.spec.js.map +1 -1
  235. package/dist/lsp/server-discovery.spec.js +1 -1
  236. package/dist/lsp/server-discovery.spec.js.map +1 -1
  237. package/dist/markdown-parser/index.spec.js.map +1 -1
  238. package/dist/markdown-parser/table-parser.spec.js.map +1 -1
  239. package/dist/mcp/mcp-client.d.ts +3 -2
  240. package/dist/mcp/mcp-client.d.ts.map +1 -1
  241. package/dist/mcp/mcp-client.js +264 -91
  242. package/dist/mcp/mcp-client.js.map +1 -1
  243. package/dist/mcp/transport-factory.d.ts +1 -1
  244. package/dist/mcp/transport-factory.d.ts.map +1 -1
  245. package/dist/mcp/transport-factory.js +16 -3
  246. package/dist/mcp/transport-factory.js.map +1 -1
  247. package/dist/mcp/transport-factory.spec.js +30 -48
  248. package/dist/mcp/transport-factory.spec.js.map +1 -1
  249. package/dist/message-handler.d.ts +1 -1
  250. package/dist/message-handler.d.ts.map +1 -1
  251. package/dist/model-database/database-engine.d.ts.map +1 -1
  252. package/dist/model-database/database-engine.js.map +1 -1
  253. package/dist/model-database/database-engine.spec.js.map +1 -1
  254. package/dist/model-database/model-database.js +1 -1
  255. package/dist/model-database/model-database.js.map +1 -1
  256. package/dist/model-database/model-engine.d.ts.map +1 -1
  257. package/dist/model-database/model-engine.js.map +1 -1
  258. package/dist/model-database/model-engine.spec.js +1 -1
  259. package/dist/model-database/model-engine.spec.js.map +1 -1
  260. package/dist/model-database/model-fetcher.d.ts.map +1 -1
  261. package/dist/model-database/model-fetcher.js +2 -1
  262. package/dist/model-database/model-fetcher.js.map +1 -1
  263. package/dist/model-database/model-fetcher.spec.js +1 -1
  264. package/dist/model-database/model-fetcher.spec.js.map +1 -1
  265. package/dist/models/models-cache.d.ts +1 -1
  266. package/dist/models/models-cache.d.ts.map +1 -1
  267. package/dist/models/models-cache.js +1 -1
  268. package/dist/models/models-cache.js.map +1 -1
  269. package/dist/models/models-dev-client.d.ts.map +1 -1
  270. package/dist/models/models-dev-client.js +18 -10
  271. package/dist/models/models-dev-client.js.map +1 -1
  272. package/dist/prompt-history.js +2 -2
  273. package/dist/prompt-history.js.map +1 -1
  274. package/dist/services/checkpoint-manager.d.ts +68 -0
  275. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  276. package/dist/services/checkpoint-manager.js +345 -0
  277. package/dist/services/checkpoint-manager.js.map +1 -0
  278. package/dist/services/checkpoint-manager.spec.d.ts +2 -0
  279. package/dist/services/checkpoint-manager.spec.d.ts.map +1 -0
  280. package/dist/services/checkpoint-manager.spec.js +353 -0
  281. package/dist/services/checkpoint-manager.spec.js.map +1 -0
  282. package/dist/services/file-snapshot.d.ts +32 -0
  283. package/dist/services/file-snapshot.d.ts.map +1 -0
  284. package/dist/services/file-snapshot.js +161 -0
  285. package/dist/services/file-snapshot.js.map +1 -0
  286. package/dist/services/file-snapshot.spec.d.ts +2 -0
  287. package/dist/services/file-snapshot.spec.d.ts.map +1 -0
  288. package/dist/services/file-snapshot.spec.js +285 -0
  289. package/dist/services/file-snapshot.spec.js.map +1 -0
  290. package/dist/test-utils/render-with-theme.d.ts +7 -0
  291. package/dist/test-utils/render-with-theme.d.ts.map +1 -0
  292. package/dist/test-utils/render-with-theme.js +38 -0
  293. package/dist/test-utils/render-with-theme.js.map +1 -0
  294. package/dist/tokenization/tokenizer-factory.js +2 -2
  295. package/dist/tokenization/tokenizer-factory.js.map +1 -1
  296. package/dist/tokenization/tokenizer-factory.spec.js +2 -2
  297. package/dist/tokenization/tokenizer-factory.spec.js.map +1 -1
  298. package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts +1 -1
  299. package/dist/tokenization/tokenizers/anthropic-tokenizer.d.ts.map +1 -1
  300. package/dist/tokenization/tokenizers/anthropic-tokenizer.js.map +1 -1
  301. package/dist/tokenization/tokenizers/anthropic-tokenizer.spec.js.map +1 -1
  302. package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts +1 -1
  303. package/dist/tokenization/tokenizers/fallback-tokenizer.d.ts.map +1 -1
  304. package/dist/tokenization/tokenizers/fallback-tokenizer.spec.js.map +1 -1
  305. package/dist/tokenization/tokenizers/llama-tokenizer.d.ts +1 -1
  306. package/dist/tokenization/tokenizers/llama-tokenizer.d.ts.map +1 -1
  307. package/dist/tokenization/tokenizers/llama-tokenizer.js.map +1 -1
  308. package/dist/tokenization/tokenizers/llama-tokenizer.spec.js.map +1 -1
  309. package/dist/tokenization/tokenizers/openai-tokenizer.d.ts +1 -1
  310. package/dist/tokenization/tokenizers/openai-tokenizer.d.ts.map +1 -1
  311. package/dist/tokenization/tokenizers/openai-tokenizer.js.map +1 -1
  312. package/dist/tokenization/tokenizers/openai-tokenizer.spec.js.map +1 -1
  313. package/dist/tool-calling/json-parser.d.ts.map +1 -1
  314. package/dist/tool-calling/json-parser.js +2 -10
  315. package/dist/tool-calling/json-parser.js.map +1 -1
  316. package/dist/tool-calling/json-parser.spec.js +7 -7
  317. package/dist/tool-calling/json-parser.spec.js.map +1 -1
  318. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  319. package/dist/tool-calling/tool-parser.js +1 -1
  320. package/dist/tool-calling/tool-parser.js.map +1 -1
  321. package/dist/tool-calling/tool-parser.spec.js +3 -3
  322. package/dist/tool-calling/tool-parser.spec.js.map +1 -1
  323. package/dist/tools/create-file.d.ts.map +1 -1
  324. package/dist/tools/create-file.js +7 -7
  325. package/dist/tools/create-file.js.map +1 -1
  326. package/dist/tools/delete-lines.d.ts.map +1 -1
  327. package/dist/tools/delete-lines.js +9 -9
  328. package/dist/tools/delete-lines.js.map +1 -1
  329. package/dist/tools/execute-bash.d.ts.map +1 -1
  330. package/dist/tools/execute-bash.js +3 -3
  331. package/dist/tools/execute-bash.js.map +1 -1
  332. package/dist/tools/execute-function.spec.js +4 -4
  333. package/dist/tools/execute-function.spec.js.map +1 -1
  334. package/dist/tools/fetch-url.d.ts.map +1 -1
  335. package/dist/tools/fetch-url.js +3 -3
  336. package/dist/tools/fetch-url.js.map +1 -1
  337. package/dist/tools/find-files.d.ts.map +1 -1
  338. package/dist/tools/find-files.js +6 -6
  339. package/dist/tools/find-files.js.map +1 -1
  340. package/dist/tools/index.d.ts +1 -1
  341. package/dist/tools/index.d.ts.map +1 -1
  342. package/dist/tools/index.js +7 -7
  343. package/dist/tools/index.js.map +1 -1
  344. package/dist/tools/insert-lines.d.ts.map +1 -1
  345. package/dist/tools/insert-lines.js +8 -8
  346. package/dist/tools/insert-lines.js.map +1 -1
  347. package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
  348. package/dist/tools/lsp-get-diagnostics.js +5 -5
  349. package/dist/tools/lsp-get-diagnostics.js.map +1 -1
  350. package/dist/tools/needs-approval.spec.js +6 -6
  351. package/dist/tools/needs-approval.spec.js.map +1 -1
  352. package/dist/tools/read-file.js +6 -6
  353. package/dist/tools/read-file.js.map +1 -1
  354. package/dist/tools/replace-lines.d.ts.map +1 -1
  355. package/dist/tools/replace-lines.js +8 -8
  356. package/dist/tools/replace-lines.js.map +1 -1
  357. package/dist/tools/search-file-contents.d.ts.map +1 -1
  358. package/dist/tools/search-file-contents.js +6 -6
  359. package/dist/tools/search-file-contents.js.map +1 -1
  360. package/dist/tools/tool-manager.d.ts +1 -1
  361. package/dist/tools/tool-manager.d.ts.map +1 -1
  362. package/dist/tools/tool-manager.js +1 -1
  363. package/dist/tools/tool-manager.js.map +1 -1
  364. package/dist/tools/tool-registry.d.ts +1 -1
  365. package/dist/tools/tool-registry.d.ts.map +1 -1
  366. package/dist/tools/web-search.d.ts.map +1 -1
  367. package/dist/tools/web-search.js +4 -4
  368. package/dist/tools/web-search.js.map +1 -1
  369. package/dist/types/app.d.ts +6 -3
  370. package/dist/types/app.d.ts.map +1 -1
  371. package/dist/types/checkpoint.d.ts +43 -0
  372. package/dist/types/checkpoint.d.ts.map +1 -0
  373. package/dist/types/checkpoint.js +2 -0
  374. package/dist/types/checkpoint.js.map +1 -0
  375. package/dist/types/config.d.ts +0 -1
  376. package/dist/types/config.d.ts.map +1 -1
  377. package/dist/types/core-connection-status.spec.js.map +1 -1
  378. package/dist/types/core.d.ts +1 -1
  379. package/dist/types/core.d.ts.map +1 -1
  380. package/dist/types/core.js +1 -1
  381. package/dist/types/core.js.map +1 -1
  382. package/dist/types/index.d.ts +1 -0
  383. package/dist/types/index.d.ts.map +1 -1
  384. package/dist/types/index.js +1 -0
  385. package/dist/types/index.js.map +1 -1
  386. package/dist/usage/calculator.spec.js +1 -1
  387. package/dist/usage/calculator.spec.js.map +1 -1
  388. package/dist/usage/storage.d.ts +1 -1
  389. package/dist/usage/storage.d.ts.map +1 -1
  390. package/dist/usage/storage.js +9 -3
  391. package/dist/usage/storage.js.map +1 -1
  392. package/dist/usage/storage.spec.js +3 -3
  393. package/dist/usage/storage.spec.js.map +1 -1
  394. package/dist/usage/tracker.d.ts.map +1 -1
  395. package/dist/usage/tracker.js +1 -1
  396. package/dist/usage/tracker.js.map +1 -1
  397. package/dist/usage/tracker.spec.js +4 -4
  398. package/dist/usage/tracker.spec.js.map +1 -1
  399. package/dist/utils/atomic-deletion.spec.js +1 -1
  400. package/dist/utils/atomic-deletion.spec.js.map +1 -1
  401. package/dist/utils/checkpoint-utils.d.ts +12 -0
  402. package/dist/utils/checkpoint-utils.d.ts.map +1 -0
  403. package/dist/utils/checkpoint-utils.js +85 -0
  404. package/dist/utils/checkpoint-utils.js.map +1 -0
  405. package/dist/utils/checkpoint-utils.spec.d.ts +2 -0
  406. package/dist/utils/checkpoint-utils.spec.d.ts.map +1 -0
  407. package/dist/utils/checkpoint-utils.spec.js +182 -0
  408. package/dist/utils/checkpoint-utils.spec.js.map +1 -0
  409. package/dist/utils/error-formatter.d.ts +35 -0
  410. package/dist/utils/error-formatter.d.ts.map +1 -1
  411. package/dist/utils/error-formatter.js +123 -0
  412. package/dist/utils/error-formatter.js.map +1 -1
  413. package/dist/utils/file-autocomplete.js +2 -2
  414. package/dist/utils/file-autocomplete.js.map +1 -1
  415. package/dist/utils/file-autocomplete.spec.js +1 -1
  416. package/dist/utils/file-autocomplete.spec.js.map +1 -1
  417. package/dist/utils/file-content-loader.js +1 -1
  418. package/dist/utils/file-content-loader.js.map +1 -1
  419. package/dist/utils/file-content-loader.spec.js +4 -4
  420. package/dist/utils/file-content-loader.spec.js.map +1 -1
  421. package/dist/utils/file-mention-handler.js.map +1 -1
  422. package/dist/utils/file-mention-handler.spec.js +4 -4
  423. package/dist/utils/file-mention-handler.spec.js.map +1 -1
  424. package/dist/utils/file-mention-parser.spec.js +2 -2
  425. package/dist/utils/file-mention-parser.spec.js.map +1 -1
  426. package/dist/utils/installation-detector.js +2 -2
  427. package/dist/utils/installation-detector.js.map +1 -1
  428. package/dist/utils/installation-detector.spec.js +10 -17
  429. package/dist/utils/installation-detector.spec.js.map +1 -1
  430. package/dist/utils/logging/config.d.ts +41 -0
  431. package/dist/utils/logging/config.d.ts.map +1 -0
  432. package/dist/utils/logging/config.js +188 -0
  433. package/dist/utils/logging/config.js.map +1 -0
  434. package/dist/utils/logging/config.spec.d.ts +2 -0
  435. package/dist/utils/logging/config.spec.d.ts.map +1 -0
  436. package/dist/utils/logging/config.spec.js +233 -0
  437. package/dist/utils/logging/config.spec.js.map +1 -0
  438. package/dist/utils/logging/console-facade.d.ts +93 -0
  439. package/dist/utils/logging/console-facade.d.ts.map +1 -0
  440. package/dist/utils/logging/console-facade.js +295 -0
  441. package/dist/utils/logging/console-facade.js.map +1 -0
  442. package/dist/utils/logging/console-facade.spec.d.ts +2 -0
  443. package/dist/utils/logging/console-facade.spec.d.ts.map +1 -0
  444. package/dist/utils/logging/console-facade.spec.js +143 -0
  445. package/dist/utils/logging/console-facade.spec.js.map +1 -0
  446. package/dist/utils/logging/correlation.d.ts +139 -0
  447. package/dist/utils/logging/correlation.d.ts.map +1 -0
  448. package/dist/utils/logging/correlation.js +410 -0
  449. package/dist/utils/logging/correlation.js.map +1 -0
  450. package/dist/utils/logging/correlation.spec.d.ts +2 -0
  451. package/dist/utils/logging/correlation.spec.d.ts.map +1 -0
  452. package/dist/utils/logging/correlation.spec.js +449 -0
  453. package/dist/utils/logging/correlation.spec.js.map +1 -0
  454. package/dist/utils/logging/formatters.d.ts +70 -0
  455. package/dist/utils/logging/formatters.d.ts.map +1 -0
  456. package/dist/utils/logging/formatters.js +186 -0
  457. package/dist/utils/logging/formatters.js.map +1 -0
  458. package/dist/utils/logging/formatters.spec.d.ts +2 -0
  459. package/dist/utils/logging/formatters.spec.d.ts.map +1 -0
  460. package/dist/utils/logging/formatters.spec.js +356 -0
  461. package/dist/utils/logging/formatters.spec.js.map +1 -0
  462. package/dist/utils/logging/health-monitor.d.ts +216 -0
  463. package/dist/utils/logging/health-monitor.d.ts.map +1 -0
  464. package/dist/utils/logging/health-monitor.js +760 -0
  465. package/dist/utils/logging/health-monitor.js.map +1 -0
  466. package/dist/utils/logging/health-monitor.spec.d.ts +2 -0
  467. package/dist/utils/logging/health-monitor.spec.d.ts.map +1 -0
  468. package/dist/utils/logging/health-monitor.spec.js +305 -0
  469. package/dist/utils/logging/health-monitor.spec.js.map +1 -0
  470. package/dist/utils/logging/index.d.ts +100 -0
  471. package/dist/utils/logging/index.d.ts.map +1 -0
  472. package/dist/utils/logging/index.js +186 -0
  473. package/dist/utils/logging/index.js.map +1 -0
  474. package/dist/utils/logging/index.spec.d.ts +2 -0
  475. package/dist/utils/logging/index.spec.d.ts.map +1 -0
  476. package/dist/utils/logging/index.spec.js +214 -0
  477. package/dist/utils/logging/index.spec.js.map +1 -0
  478. package/dist/utils/logging/integration.spec.d.ts +2 -0
  479. package/dist/utils/logging/integration.spec.d.ts.map +1 -0
  480. package/dist/utils/logging/integration.spec.js +312 -0
  481. package/dist/utils/logging/integration.spec.js.map +1 -0
  482. package/dist/utils/logging/log-method-factory.d.ts +43 -0
  483. package/dist/utils/logging/log-method-factory.d.ts.map +1 -0
  484. package/dist/utils/logging/log-method-factory.js +176 -0
  485. package/dist/utils/logging/log-method-factory.js.map +1 -0
  486. package/dist/utils/logging/log-method-factory.spec.d.ts +2 -0
  487. package/dist/utils/logging/log-method-factory.spec.d.ts.map +1 -0
  488. package/dist/utils/logging/log-method-factory.spec.js +428 -0
  489. package/dist/utils/logging/log-method-factory.spec.js.map +1 -0
  490. package/dist/utils/logging/log-query.d.ts +275 -0
  491. package/dist/utils/logging/log-query.d.ts.map +1 -0
  492. package/dist/utils/logging/log-query.js +621 -0
  493. package/dist/utils/logging/log-query.js.map +1 -0
  494. package/dist/utils/logging/log-query.spec.d.ts +2 -0
  495. package/dist/utils/logging/log-query.spec.d.ts.map +1 -0
  496. package/dist/utils/logging/log-query.spec.js +737 -0
  497. package/dist/utils/logging/log-query.spec.js.map +1 -0
  498. package/dist/utils/logging/logger-provider.d.ts +73 -0
  499. package/dist/utils/logging/logger-provider.d.ts.map +1 -0
  500. package/dist/utils/logging/logger-provider.js +298 -0
  501. package/dist/utils/logging/logger-provider.js.map +1 -0
  502. package/dist/utils/logging/logger-provider.spec.d.ts +2 -0
  503. package/dist/utils/logging/logger-provider.spec.d.ts.map +1 -0
  504. package/dist/utils/logging/logger-provider.spec.js +204 -0
  505. package/dist/utils/logging/logger-provider.spec.js.map +1 -0
  506. package/dist/utils/logging/performance.d.ts +147 -0
  507. package/dist/utils/logging/performance.d.ts.map +1 -0
  508. package/dist/utils/logging/performance.js +520 -0
  509. package/dist/utils/logging/performance.js.map +1 -0
  510. package/dist/utils/logging/performance.spec.d.ts +2 -0
  511. package/dist/utils/logging/performance.spec.d.ts.map +1 -0
  512. package/dist/utils/logging/performance.spec.js +139 -0
  513. package/dist/utils/logging/performance.spec.js.map +1 -0
  514. package/dist/utils/logging/pino-logger.d.ts +22 -0
  515. package/dist/utils/logging/pino-logger.d.ts.map +1 -0
  516. package/dist/utils/logging/pino-logger.js +372 -0
  517. package/dist/utils/logging/pino-logger.js.map +1 -0
  518. package/dist/utils/logging/pino-logger.spec.d.ts +2 -0
  519. package/dist/utils/logging/pino-logger.spec.d.ts.map +1 -0
  520. package/dist/utils/logging/pino-logger.spec.js +294 -0
  521. package/dist/utils/logging/pino-logger.spec.js.map +1 -0
  522. package/dist/utils/logging/redaction.d.ts +38 -0
  523. package/dist/utils/logging/redaction.d.ts.map +1 -0
  524. package/dist/utils/logging/redaction.js +210 -0
  525. package/dist/utils/logging/redaction.js.map +1 -0
  526. package/dist/utils/logging/redaction.spec.d.ts +2 -0
  527. package/dist/utils/logging/redaction.spec.d.ts.map +1 -0
  528. package/dist/utils/logging/redaction.spec.js +338 -0
  529. package/dist/utils/logging/redaction.spec.js.map +1 -0
  530. package/dist/utils/logging/request-tracker.d.ts +189 -0
  531. package/dist/utils/logging/request-tracker.d.ts.map +1 -0
  532. package/dist/utils/logging/request-tracker.js +569 -0
  533. package/dist/utils/logging/request-tracker.js.map +1 -0
  534. package/dist/utils/logging/request-tracker.spec.d.ts +2 -0
  535. package/dist/utils/logging/request-tracker.spec.d.ts.map +1 -0
  536. package/dist/utils/logging/request-tracker.spec.js +868 -0
  537. package/dist/utils/logging/request-tracker.spec.js.map +1 -0
  538. package/dist/utils/logging/transports.d.ts +55 -0
  539. package/dist/utils/logging/transports.d.ts.map +1 -0
  540. package/dist/utils/logging/transports.js +252 -0
  541. package/dist/utils/logging/transports.js.map +1 -0
  542. package/dist/utils/logging/transports.spec.d.ts +2 -0
  543. package/dist/utils/logging/transports.spec.d.ts.map +1 -0
  544. package/dist/utils/logging/transports.spec.js +390 -0
  545. package/dist/utils/logging/transports.spec.js.map +1 -0
  546. package/dist/utils/logging/types.d.ts +173 -0
  547. package/dist/utils/logging/types.d.ts.map +1 -0
  548. package/dist/utils/logging/types.js +5 -0
  549. package/dist/utils/logging/types.js.map +1 -0
  550. package/dist/utils/message-queue.d.ts +64 -4
  551. package/dist/utils/message-queue.d.ts.map +1 -1
  552. package/dist/utils/message-queue.js +282 -28
  553. package/dist/utils/message-queue.js.map +1 -1
  554. package/dist/utils/paste-utils.spec.js +1 -1
  555. package/dist/utils/paste-utils.spec.js.map +1 -1
  556. package/dist/utils/prompt-processor.js +2 -2
  557. package/dist/utils/prompt-processor.js.map +1 -1
  558. package/dist/utils/tool-cancellation.spec.js.map +1 -1
  559. package/dist/utils/tool-result-display.d.ts +2 -2
  560. package/dist/utils/tool-result-display.d.ts.map +1 -1
  561. package/dist/utils/tool-result-display.js +3 -3
  562. package/dist/utils/tool-result-display.js.map +1 -1
  563. package/dist/utils/update-checker.d.ts.map +1 -1
  564. package/dist/utils/update-checker.js +1 -1
  565. package/dist/utils/update-checker.js.map +1 -1
  566. package/dist/utils/update-checker.spec.js +2 -2
  567. package/dist/utils/update-checker.spec.js.map +1 -1
  568. package/dist/vscode/extension-installer.js +1 -1
  569. package/dist/vscode/extension-installer.js.map +1 -1
  570. package/dist/vscode/extension-installer.spec.js +1 -1
  571. package/dist/vscode/extension-installer.spec.js.map +1 -1
  572. package/dist/vscode/protocol.spec.js +1 -1
  573. package/dist/vscode/protocol.spec.js.map +1 -1
  574. package/dist/vscode/vscode-server.d.ts.map +1 -1
  575. package/dist/vscode/vscode-server.js +2 -2
  576. package/dist/vscode/vscode-server.js.map +1 -1
  577. package/dist/vscode/vscode-server.spec.js.map +1 -1
  578. package/dist/wizard/config-wizard.d.ts.map +1 -1
  579. package/dist/wizard/config-wizard.js +16 -12
  580. package/dist/wizard/config-wizard.js.map +1 -1
  581. package/dist/wizard/steps/location-step.js +4 -4
  582. package/dist/wizard/steps/location-step.js.map +1 -1
  583. package/dist/wizard/steps/mcp-step.d.ts.map +1 -1
  584. package/dist/wizard/steps/mcp-step.js +4 -4
  585. package/dist/wizard/steps/mcp-step.js.map +1 -1
  586. package/dist/wizard/steps/provider-step.d.ts.map +1 -1
  587. package/dist/wizard/steps/provider-step.js +4 -4
  588. package/dist/wizard/steps/provider-step.js.map +1 -1
  589. package/dist/wizard/steps/summary-step.d.ts.map +1 -1
  590. package/dist/wizard/steps/summary-step.js +2 -2
  591. package/dist/wizard/steps/summary-step.js.map +1 -1
  592. package/dist/wizard/templates/provider-templates.d.ts.map +1 -1
  593. package/dist/wizard/templates/provider-templates.js +64 -0
  594. package/dist/wizard/templates/provider-templates.js.map +1 -1
  595. package/dist/wizard/validation-array.spec.js +1 -1
  596. package/dist/wizard/validation-array.spec.js.map +1 -1
  597. package/dist/wizard/validation.spec.js +1 -1
  598. package/dist/wizard/validation.spec.js.map +1 -1
  599. package/package.json +23 -22
  600. package/dist/commands/debugging.d.ts +0 -3
  601. package/dist/commands/debugging.d.ts.map +0 -1
  602. package/dist/commands/debugging.js +0 -23
  603. package/dist/commands/debugging.js.map +0 -1
@@ -0,0 +1,760 @@
1
+ /**
2
+ * Health check and monitoring system for logging infrastructure
3
+ * Provides comprehensive health metrics and monitoring capabilities
4
+ */
5
+ import { loadavg } from 'os';
6
+ import { generateCorrelationId, getLogger, withNewCorrelationContext, } from './index.js';
7
+ import { globalLogStorage } from './log-query.js';
8
+ import { globalPerformanceMonitor } from './performance.js';
9
+ import { globalRequestTracker } from './request-tracker.js';
10
+ // Get logger instance directly to avoid circular dependencies
11
+ const logger = getLogger();
12
+ /**
13
+ * Health monitoring system
14
+ */
15
+ export class HealthMonitor {
16
+ config;
17
+ isRunning = false;
18
+ intervalId;
19
+ lastCheck;
20
+ lastAlert;
21
+ correlationId;
22
+ constructor(config) {
23
+ this.correlationId = generateCorrelationId();
24
+ this.config = {
25
+ enabled: true,
26
+ interval: 30000, // 30 seconds
27
+ timeout: 5000, // 5 seconds
28
+ thresholds: {
29
+ memory: {
30
+ heapUsageWarning: 0.8,
31
+ heapUsageCritical: 0.95,
32
+ externalWarning: 256,
33
+ externalCritical: 512,
34
+ },
35
+ performance: {
36
+ averageDurationWarning: 1000,
37
+ averageDurationCritical: 5000,
38
+ errorRateWarning: 0.05,
39
+ errorRateCritical: 0.1,
40
+ },
41
+ logging: {
42
+ logRateWarning: 100,
43
+ logRateCritical: 500,
44
+ errorRateWarning: 0.02,
45
+ errorRateCritical: 0.05,
46
+ },
47
+ requests: {
48
+ durationWarning: 2000,
49
+ durationCritical: 10000,
50
+ errorRateWarning: 0.05,
51
+ errorRateCritical: 0.1,
52
+ },
53
+ },
54
+ alerts: {
55
+ enabled: true,
56
+ channels: ['console'],
57
+ cooldown: 300000, // 5 minutes
58
+ },
59
+ ...config,
60
+ };
61
+ }
62
+ /**
63
+ * Start health monitoring
64
+ */
65
+ start() {
66
+ try {
67
+ if (this.isRunning) {
68
+ logger.warn('Health monitoring already running', {
69
+ correlationId: this.correlationId,
70
+ source: 'health-monitor',
71
+ });
72
+ return;
73
+ }
74
+ this.isRunning = true;
75
+ // Run initial check
76
+ try {
77
+ void this.runHealthCheck();
78
+ }
79
+ catch (error) {
80
+ logger.error('Failed to run initial health check', {
81
+ error: error instanceof Error ? error.message : error,
82
+ correlationId: this.correlationId,
83
+ source: 'health-monitor',
84
+ });
85
+ // Continue starting monitoring even if initial check fails
86
+ }
87
+ // Schedule regular checks
88
+ try {
89
+ this.intervalId = setInterval(() => {
90
+ try {
91
+ void this.runHealthCheck();
92
+ }
93
+ catch (error) {
94
+ logger.error('Failed to run scheduled health check', {
95
+ error: error instanceof Error ? error.message : error,
96
+ correlationId: this.correlationId,
97
+ source: 'health-monitor',
98
+ });
99
+ }
100
+ }, this.config.interval);
101
+ }
102
+ catch (error) {
103
+ logger.error('Failed to schedule health monitoring', {
104
+ error: error instanceof Error ? error.message : error,
105
+ correlationId: this.correlationId,
106
+ source: 'health-monitor',
107
+ });
108
+ this.isRunning = false;
109
+ return;
110
+ }
111
+ logger.info('Health monitoring started', {
112
+ interval: `${this.config.interval}ms`,
113
+ timeout: `${this.config.timeout}ms`,
114
+ correlationId: this.correlationId,
115
+ source: 'health-monitor',
116
+ });
117
+ }
118
+ catch (error) {
119
+ logger.error('Critical error starting health monitoring', {
120
+ error: error instanceof Error ? error.message : error,
121
+ correlationId: this.correlationId,
122
+ source: 'health-monitor',
123
+ });
124
+ this.isRunning = false;
125
+ }
126
+ }
127
+ /**
128
+ * Stop health monitoring
129
+ */
130
+ stop() {
131
+ try {
132
+ if (!this.isRunning) {
133
+ logger.debug('Health monitoring not running', {
134
+ correlationId: this.correlationId,
135
+ source: 'health-monitor',
136
+ });
137
+ return;
138
+ }
139
+ this.isRunning = false;
140
+ try {
141
+ if (this.intervalId) {
142
+ clearInterval(this.intervalId);
143
+ this.intervalId = undefined;
144
+ }
145
+ }
146
+ catch (error) {
147
+ logger.error('Failed to clear health monitoring interval', {
148
+ error: error instanceof Error ? error.message : error,
149
+ correlationId: this.correlationId,
150
+ source: 'health-monitor',
151
+ });
152
+ // Continue with cleanup even if interval clearing fails
153
+ }
154
+ logger.info('Health monitoring stopped', {
155
+ correlationId: this.correlationId,
156
+ source: 'health-monitor',
157
+ });
158
+ }
159
+ catch (error) {
160
+ logger.error('Critical error stopping health monitoring', {
161
+ error: error instanceof Error ? error.message : error,
162
+ correlationId: this.correlationId,
163
+ source: 'health-monitor',
164
+ });
165
+ // Ensure we don't leave the system in a bad state
166
+ this.isRunning = false;
167
+ if (this.intervalId) {
168
+ try {
169
+ clearInterval(this.intervalId);
170
+ this.intervalId = undefined;
171
+ }
172
+ catch (cleanupError) {
173
+ // Final fallback - log but don't rethrow
174
+ logger.error('Failed to cleanup health monitoring interval during error recovery', {
175
+ error: cleanupError instanceof Error
176
+ ? cleanupError.message
177
+ : cleanupError,
178
+ correlationId: this.correlationId,
179
+ source: 'health-monitor',
180
+ });
181
+ }
182
+ }
183
+ }
184
+ }
185
+ /**
186
+ * Run a comprehensive health check
187
+ */
188
+ async runHealthCheck() {
189
+ return withNewCorrelationContext(async (_context) => {
190
+ const startTime = performance.now();
191
+ try {
192
+ logger.debug('Starting health check', {
193
+ correlationId: this.correlationId,
194
+ source: 'health-monitor',
195
+ });
196
+ const checks = [];
197
+ // Run all health checks
198
+ checks.push(await this.checkMemory());
199
+ checks.push(await this.checkLoggingSystem());
200
+ checks.push(await this.checkRequestTracking());
201
+ checks.push(await this.checkPerformanceMonitoring());
202
+ checks.push(await this.checkConfigurationSystem());
203
+ // Calculate overall health
204
+ const totalChecks = checks.length;
205
+ const passedChecks = checks.filter(c => c.status === 'pass').length;
206
+ const failedChecks = checks.filter(c => c.status === 'fail').length;
207
+ const warningChecks = checks.filter(c => c.status === 'warn').length;
208
+ const averageScore = checks.reduce((sum, c) => sum + c.score, 0) / totalChecks;
209
+ // Determine overall status
210
+ let status;
211
+ if (failedChecks > 0) {
212
+ status = 'unhealthy';
213
+ }
214
+ else if (warningChecks > 0 || averageScore < 80) {
215
+ status = 'degraded';
216
+ }
217
+ else {
218
+ status = 'healthy';
219
+ }
220
+ const duration = performance.now() - startTime;
221
+ const result = {
222
+ status,
223
+ score: Math.round(averageScore),
224
+ checks,
225
+ timestamp: new Date().toISOString(),
226
+ duration: Math.round(duration),
227
+ correlationId: this.correlationId,
228
+ summary: {
229
+ total: totalChecks,
230
+ passed: passedChecks,
231
+ failed: failedChecks,
232
+ warnings: warningChecks,
233
+ },
234
+ recommendations: this.generateRecommendations(checks, status),
235
+ };
236
+ this.lastCheck = result;
237
+ // Log health check result
238
+ logger.info('Health check completed', {
239
+ status,
240
+ score: result.score,
241
+ duration: `${duration.toFixed(2)}ms`,
242
+ summary: result.summary,
243
+ correlationId: this.correlationId,
244
+ source: 'health-monitor',
245
+ });
246
+ // Check if alerts should be sent
247
+ if (this.config.alerts.enabled &&
248
+ (status === 'unhealthy' || status === 'degraded')) {
249
+ await this.sendAlert(result);
250
+ }
251
+ return result;
252
+ }
253
+ catch (error) {
254
+ const duration = performance.now() - startTime;
255
+ logger.error('Health check failed', {
256
+ error: error instanceof Error ? error.message : error,
257
+ duration: `${duration.toFixed(2)}ms`,
258
+ correlationId: this.correlationId,
259
+ source: 'health-monitor',
260
+ });
261
+ const result = {
262
+ status: 'unhealthy',
263
+ score: 0,
264
+ checks: [
265
+ {
266
+ name: 'health-check-system',
267
+ status: 'fail',
268
+ score: 0,
269
+ duration,
270
+ error: error instanceof Error ? error.message : String(error),
271
+ },
272
+ ],
273
+ timestamp: new Date().toISOString(),
274
+ duration: Math.round(duration),
275
+ correlationId: this.correlationId,
276
+ summary: {
277
+ total: 1,
278
+ passed: 0,
279
+ failed: 1,
280
+ warnings: 0,
281
+ },
282
+ recommendations: [
283
+ 'Fix health check system errors',
284
+ 'Check system resources',
285
+ 'Review configuration',
286
+ ],
287
+ };
288
+ this.lastCheck = result;
289
+ return result;
290
+ }
291
+ });
292
+ }
293
+ /**
294
+ * Get current system metrics
295
+ */
296
+ getSystemMetrics() {
297
+ const _now = Date.now();
298
+ const memory = process.memoryUsage();
299
+ const cpuUsage = process.cpuUsage();
300
+ const requestStats = globalRequestTracker.getStats();
301
+ const logStats = globalLogStorage.getEntryCount();
302
+ const perfStats = globalPerformanceMonitor.getAllStats();
303
+ // Calculate rates (approximate based on current state)
304
+ const logRate = logStats / (process.uptime() / 60); // logs per minute
305
+ const errorRate = requestStats.errorRate;
306
+ const requestsPerSecond = requestStats.totalRequests / process.uptime();
307
+ // Calculate average operation duration from performance stats
308
+ const allPerfStats = Object.values(perfStats).filter(Boolean);
309
+ const averageDuration = allPerfStats.length > 0
310
+ ? allPerfStats.reduce((sum, stat) => sum + (stat?.avgDuration || 0), 0) / allPerfStats.length
311
+ : 0;
312
+ return {
313
+ timestamp: new Date().toISOString(),
314
+ memory: {
315
+ heapUsed: memory.heapUsed,
316
+ heapTotal: memory.heapTotal,
317
+ external: memory.external,
318
+ rss: memory.rss,
319
+ heapUsagePercent: memory.heapUsed / memory.heapTotal,
320
+ },
321
+ cpu: {
322
+ usage: (cpuUsage.user + cpuUsage.system) / 1000000, // Convert to milliseconds
323
+ loadAverage: loadavg(),
324
+ },
325
+ process: {
326
+ uptime: process.uptime(),
327
+ pid: process.pid,
328
+ nodeVersion: process.version,
329
+ platform: process.platform,
330
+ arch: process.arch,
331
+ },
332
+ logging: {
333
+ totalLogEntries: logStats,
334
+ logRate,
335
+ errorRate,
336
+ averageLogSize: 256, // Estimated
337
+ },
338
+ requests: {
339
+ totalRequests: requestStats.totalRequests,
340
+ activeRequests: globalRequestTracker.getActiveRequests().length,
341
+ averageDuration: requestStats.averageDuration,
342
+ errorRate: requestStats.errorRate,
343
+ requestsPerSecond,
344
+ },
345
+ performance: {
346
+ operationCount: allPerfStats.reduce((sum, stat) => sum + (stat?.count || 0), 0),
347
+ averageDuration,
348
+ slowOperations: 0, // Would need tracking over time
349
+ memoryIntensiveOps: 0, // Would need tracking over time
350
+ },
351
+ };
352
+ }
353
+ /**
354
+ * Get last health check result
355
+ */
356
+ getLastHealthCheck() {
357
+ return this.lastCheck;
358
+ }
359
+ /**
360
+ * Check if monitoring is running
361
+ */
362
+ isActive() {
363
+ return this.isRunning;
364
+ }
365
+ /**
366
+ * Update health check configuration
367
+ */
368
+ updateConfig(config) {
369
+ this.config = { ...this.config, ...config };
370
+ logger.info('Health monitor configuration updated', {
371
+ enabled: this.config.enabled,
372
+ interval: `${this.config.interval}ms`,
373
+ correlationId: this.correlationId,
374
+ source: 'health-monitor',
375
+ });
376
+ // Restart monitoring if running
377
+ if (this.isRunning) {
378
+ this.stop();
379
+ this.start();
380
+ }
381
+ }
382
+ checkMemory() {
383
+ const startTime = performance.now();
384
+ const memory = process.memoryUsage();
385
+ const heapUsagePercent = memory.heapUsed / memory.heapTotal;
386
+ const externalMB = memory.external / 1024 / 1024;
387
+ const thresholds = this.config.thresholds.memory;
388
+ let status = 'pass';
389
+ let message = 'Memory usage is healthy';
390
+ const details = {
391
+ heapUsedMB: Math.round(memory.heapUsed / 1024 / 1024),
392
+ heapTotalMB: Math.round(memory.heapTotal / 1024 / 1024),
393
+ heapUsagePercent: Math.round(heapUsagePercent * 100),
394
+ externalMB: Math.round(externalMB),
395
+ rssMB: Math.round(memory.rss / 1024 / 1024),
396
+ };
397
+ if (heapUsagePercent > thresholds.heapUsageCritical ||
398
+ externalMB > thresholds.externalCritical) {
399
+ status = 'fail';
400
+ message = 'Memory usage is critically high';
401
+ }
402
+ else if (heapUsagePercent > thresholds.heapUsageWarning ||
403
+ externalMB > thresholds.externalWarning) {
404
+ status = 'warn';
405
+ message = 'Memory usage is elevated';
406
+ }
407
+ return Promise.resolve({
408
+ name: 'memory-usage',
409
+ status,
410
+ score: this.calculateScore(status, heapUsagePercent, thresholds.heapUsageWarning, thresholds.heapUsageCritical),
411
+ duration: performance.now() - startTime,
412
+ message,
413
+ details,
414
+ threshold: {
415
+ warning: thresholds.heapUsageWarning,
416
+ critical: thresholds.heapUsageCritical,
417
+ },
418
+ });
419
+ }
420
+ checkLoggingSystem() {
421
+ const startTime = performance.now();
422
+ const logCount = globalLogStorage.getEntryCount();
423
+ const thresholds = this.config.thresholds.logging;
424
+ // Check if logging system is functional
425
+ let status = 'pass';
426
+ let message = 'Logging system is healthy';
427
+ const details = {
428
+ totalEntries: logCount,
429
+ isConfigReloaderActive: false,
430
+ hasLogger: !!getLogger(),
431
+ };
432
+ if (!getLogger()) {
433
+ status = 'fail';
434
+ message = 'Logger is not initialized';
435
+ }
436
+ else if (logCount === 0 && process.uptime() > 60) {
437
+ status = 'warn';
438
+ message = 'No log entries detected';
439
+ }
440
+ return Promise.resolve({
441
+ name: 'logging-system',
442
+ status,
443
+ score: this.calculateScore(status, 0, 0, 0),
444
+ duration: performance.now() - startTime,
445
+ message,
446
+ details,
447
+ threshold: {
448
+ warning: thresholds.logRateWarning,
449
+ critical: thresholds.logRateCritical,
450
+ },
451
+ });
452
+ }
453
+ checkRequestTracking() {
454
+ const startTime = performance.now();
455
+ const stats = globalRequestTracker.getStats();
456
+ const thresholds = this.config.thresholds.requests;
457
+ let status = 'pass';
458
+ let message = 'Request tracking is healthy';
459
+ const details = {
460
+ totalRequests: stats.totalRequests,
461
+ averageDuration: Math.round(stats.averageDuration),
462
+ errorRate: Math.round(stats.errorRate * 10000) / 100, // percentage with 2 decimals
463
+ activeRequests: globalRequestTracker.getActiveRequests().length,
464
+ };
465
+ if (stats.errorRate > thresholds.errorRateCritical) {
466
+ status = 'fail';
467
+ message = 'Request error rate is critically high';
468
+ }
469
+ else if (stats.averageDuration > thresholds.durationCritical) {
470
+ status = 'fail';
471
+ message = 'Request duration is critically high';
472
+ }
473
+ else if (stats.errorRate > thresholds.errorRateWarning) {
474
+ status = 'warn';
475
+ message = 'Request error rate is elevated';
476
+ }
477
+ else if (stats.averageDuration > thresholds.durationWarning) {
478
+ status = 'warn';
479
+ message = 'Request duration is elevated';
480
+ }
481
+ return Promise.resolve({
482
+ name: 'request-tracking',
483
+ status,
484
+ score: this.calculateScore(status, stats.errorRate, thresholds.errorRateWarning, thresholds.errorRateCritical),
485
+ duration: performance.now() - startTime,
486
+ message,
487
+ details,
488
+ threshold: {
489
+ warning: thresholds.errorRateWarning,
490
+ critical: thresholds.errorRateCritical,
491
+ },
492
+ });
493
+ }
494
+ checkPerformanceMonitoring() {
495
+ const startTime = performance.now();
496
+ const stats = globalPerformanceMonitor.getAllStats();
497
+ const thresholds = this.config.thresholds.performance;
498
+ let status = 'pass';
499
+ let message = 'Performance monitoring is healthy';
500
+ const details = {
501
+ trackedOperations: Object.keys(stats).length,
502
+ totalMeasurements: Object.values(stats).reduce((sum, stat) => sum + (stat?.count || 0), 0),
503
+ };
504
+ // Check if performance monitoring is functional
505
+ if (Object.keys(stats).length === 0 && process.uptime() > 60) {
506
+ status = 'warn';
507
+ message = 'No performance measurements detected';
508
+ }
509
+ return Promise.resolve({
510
+ name: 'performance-monitoring',
511
+ status,
512
+ score: this.calculateScore(status, 0, 0, 0),
513
+ duration: performance.now() - startTime,
514
+ message,
515
+ details,
516
+ threshold: {
517
+ warning: thresholds.averageDurationWarning,
518
+ critical: thresholds.averageDurationCritical,
519
+ },
520
+ });
521
+ }
522
+ checkConfigurationSystem() {
523
+ const startTime = performance.now();
524
+ const reloaderStats = { isEnabled: false, watcherCount: 0 };
525
+ const status = 'pass';
526
+ const message = 'Configuration system is healthy';
527
+ const details = {
528
+ isEnabled: reloaderStats.isEnabled,
529
+ watcherCount: reloaderStats.watcherCount,
530
+ listenerCount: 0,
531
+ hasPendingReloads: false,
532
+ };
533
+ return Promise.resolve({
534
+ name: 'configuration-system',
535
+ status,
536
+ score: this.calculateScore(status, 0, 0, 0),
537
+ duration: performance.now() - startTime,
538
+ message,
539
+ details,
540
+ });
541
+ }
542
+ calculateScore(status, value, warningThreshold, criticalThreshold) {
543
+ if (status === 'fail')
544
+ return 0;
545
+ if (status === 'pass')
546
+ return 100;
547
+ if (status === 'warn') {
548
+ // Calculate score based on how far from critical threshold
549
+ const range = criticalThreshold - warningThreshold;
550
+ const distance = criticalThreshold - value;
551
+ return Math.max(50, Math.min(80, 50 + (distance / range) * 30));
552
+ }
553
+ return 50; // default for unknown status
554
+ }
555
+ generateRecommendations(checks, status) {
556
+ const recommendations = [];
557
+ for (const check of checks) {
558
+ switch (check.name) {
559
+ case 'memory-usage':
560
+ if (check.status === 'fail') {
561
+ recommendations.push('Immediate memory optimization required - consider increasing memory limits or fixing memory leaks');
562
+ }
563
+ else if (check.status === 'warn') {
564
+ recommendations.push('Monitor memory usage and optimize memory-intensive operations');
565
+ }
566
+ break;
567
+ case 'logging-system':
568
+ if (check.status === 'fail') {
569
+ recommendations.push('Fix logging system initialization - check logger configuration');
570
+ }
571
+ break;
572
+ case 'request-tracking':
573
+ if (check.status === 'fail') {
574
+ recommendations.push('Address high request error rates or slow request processing');
575
+ }
576
+ else if (check.status === 'warn') {
577
+ recommendations.push('Monitor request performance and optimize slow endpoints');
578
+ }
579
+ break;
580
+ case 'performance-monitoring':
581
+ if (check.status === 'warn') {
582
+ recommendations.push('Ensure performance monitoring is integrated into critical operations');
583
+ }
584
+ break;
585
+ }
586
+ }
587
+ if (status === 'unhealthy') {
588
+ recommendations.push('System health is critical - immediate attention required');
589
+ }
590
+ else if (status === 'degraded') {
591
+ recommendations.push('System performance is degraded - review recommendations and optimize');
592
+ }
593
+ return recommendations;
594
+ }
595
+ sendAlert(result) {
596
+ if (!this.config.alerts.enabled)
597
+ return Promise.resolve();
598
+ // Check cooldown
599
+ if (this.lastAlert &&
600
+ Date.now() - this.lastAlert < this.config.alerts.cooldown) {
601
+ return Promise.resolve();
602
+ }
603
+ this.lastAlert = Date.now();
604
+ const alertMessage = `Health Alert: ${result.status.toUpperCase()} - Score: ${result.score}/100`;
605
+ const alertDetails = {
606
+ status: result.status,
607
+ score: result.score,
608
+ summary: result.summary,
609
+ recommendations: result.recommendations,
610
+ timestamp: result.timestamp,
611
+ correlationId: this.correlationId,
612
+ };
613
+ // Send to configured channels
614
+ for (const channel of this.config.alerts.channels) {
615
+ switch (channel) {
616
+ case 'console':
617
+ logger.error(alertMessage, {
618
+ ...alertDetails,
619
+ source: 'health-monitor-alert',
620
+ });
621
+ break;
622
+ case 'file':
623
+ // Could implement file-based alerting
624
+ logger.warn(alertMessage, {
625
+ ...alertDetails,
626
+ source: 'health-monitor-alert',
627
+ });
628
+ break;
629
+ case 'webhook':
630
+ if (this.config.alerts.webhookUrl) {
631
+ try {
632
+ // TODO: implement webhook call here
633
+ logger.info('Webhook alert would be sent', {
634
+ url: this.config.alerts.webhookUrl,
635
+ correlationId: this.correlationId,
636
+ source: 'health-monitor-alert',
637
+ });
638
+ }
639
+ catch (error) {
640
+ logger.error('Failed to send webhook alert', {
641
+ url: this.config.alerts.webhookUrl,
642
+ error: error instanceof Error ? error.message : error,
643
+ correlationId: this.correlationId,
644
+ source: 'health-monitor-alert',
645
+ });
646
+ }
647
+ }
648
+ break;
649
+ }
650
+ }
651
+ return Promise.resolve();
652
+ }
653
+ }
654
+ /**
655
+ * Global health monitor instance
656
+ */
657
+ export const globalHealthMonitor = new HealthMonitor();
658
+ /**
659
+ * Quick health check functions
660
+ */
661
+ export const healthChecks = {
662
+ /**
663
+ * Quick health check - returns status only
664
+ */
665
+ quick: async () => {
666
+ const result = await globalHealthMonitor.runHealthCheck();
667
+ return result.status;
668
+ },
669
+ /**
670
+ * Full health check with details
671
+ */
672
+ full: () => globalHealthMonitor.runHealthCheck(),
673
+ /**
674
+ * System metrics snapshot
675
+ */
676
+ metrics: () => globalHealthMonitor.getSystemMetrics(),
677
+ /**
678
+ * Check if system is ready
679
+ */
680
+ ready: async () => {
681
+ const result = await globalHealthMonitor.runHealthCheck();
682
+ return result.status === 'healthy';
683
+ },
684
+ /**
685
+ * Check if system is alive (basic check)
686
+ */
687
+ alive: () => {
688
+ try {
689
+ const metrics = globalHealthMonitor.getSystemMetrics();
690
+ return metrics.process.uptime > 0;
691
+ }
692
+ catch {
693
+ return false;
694
+ }
695
+ },
696
+ };
697
+ /**
698
+ * Initialize health monitoring with default configuration
699
+ */
700
+ export function initializeHealthMonitoring(config) {
701
+ globalHealthMonitor.updateConfig(config || {});
702
+ globalHealthMonitor.start();
703
+ logger.info('Health monitoring initialized', {
704
+ enabled: globalHealthMonitor.isActive(),
705
+ correlationId: generateCorrelationId(),
706
+ source: 'health-monitor-init',
707
+ });
708
+ }
709
+ /**
710
+ * Health check middleware for HTTP servers
711
+ */
712
+ export function healthCheckMiddleware() {
713
+ return async (req, res, next) => {
714
+ if (req.path === '/health') {
715
+ try {
716
+ const health = await healthChecks.full();
717
+ const statusCode = health.status === 'healthy'
718
+ ? 200
719
+ : health.status === 'degraded'
720
+ ? 200
721
+ : 503;
722
+ res.status(statusCode).json({
723
+ status: health.status,
724
+ timestamp: health.timestamp,
725
+ score: health.score,
726
+ checks: health.checks.map(check => ({
727
+ name: check.name,
728
+ status: check.status,
729
+ score: check.score,
730
+ })),
731
+ });
732
+ }
733
+ catch (error) {
734
+ res.status(503).json({
735
+ status: 'unhealthy',
736
+ timestamp: new Date().toISOString(),
737
+ error: error instanceof Error ? error.message : 'Unknown error',
738
+ });
739
+ }
740
+ }
741
+ else if (req.path === '/health/ready') {
742
+ const ready = await healthChecks.ready();
743
+ const statusCode = ready ? 200 : 503;
744
+ res.status(statusCode).json({ ready });
745
+ }
746
+ else if (req.path === '/health/live') {
747
+ const alive = healthChecks.alive();
748
+ const statusCode = alive ? 200 : 503;
749
+ res.status(statusCode).json({ alive });
750
+ }
751
+ else if (req.path === '/metrics') {
752
+ const metrics = healthChecks.metrics();
753
+ res.json(metrics);
754
+ }
755
+ else {
756
+ next();
757
+ }
758
+ };
759
+ }
760
+ //# sourceMappingURL=health-monitor.js.map