@ruaruababa/vibe-kit 1.0.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 (462) hide show
  1. package/CATALOG.md +317 -0
  2. package/README.md +121 -0
  3. package/aliases.json +65 -0
  4. package/bin/vibe.js +2 -0
  5. package/bundles.json +265 -0
  6. package/catalog.json +1560 -0
  7. package/dist/antigravity-skills/bin/cli.js +438 -0
  8. package/dist/antigravity-skills/lib/skill-utils.js +158 -0
  9. package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
  10. package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
  11. package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
  12. package/dist/bin/vibe.js +2 -0
  13. package/dist/dist/src/cli/index.js +26 -0
  14. package/dist/lib/skill-utils.js +158 -0
  15. package/dist/scripts/build-catalog.js +50 -0
  16. package/dist/scripts/normalize-frontmatter.js +144 -0
  17. package/dist/scripts/validate-skills.js +56 -0
  18. package/dist/src/cli/index.js +146 -0
  19. package/dist/src/types/index.js +13 -0
  20. package/dist/src/utils/fs.js +1 -0
  21. package/package.json +43 -0
  22. package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
  23. package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
  24. package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
  25. package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
  26. package/skills/agent-orchestrator/SKILL.md +24 -0
  27. package/skills/ai-engineer/SKILL.md +171 -0
  28. package/skills/airflow-dag-patterns/SKILL.md +41 -0
  29. package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
  30. package/skills/angular-migration/SKILL.md +428 -0
  31. package/skills/anti-reversing-techniques/SKILL.md +42 -0
  32. package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
  33. package/skills/api-design-principles/SKILL.md +37 -0
  34. package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  35. package/skills/api-design-principles/assets/rest-api-template.py +182 -0
  36. package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  37. package/skills/api-design-principles/references/rest-best-practices.md +408 -0
  38. package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  39. package/skills/api-documenter/SKILL.md +184 -0
  40. package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
  41. package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
  42. package/skills/application-performance-performance-optimization/SKILL.md +154 -0
  43. package/skills/architect-review/SKILL.md +174 -0
  44. package/skills/architecture-decision-records/SKILL.md +441 -0
  45. package/skills/architecture-patterns/SKILL.md +37 -0
  46. package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
  47. package/skills/arm-cortex-expert/SKILL.md +306 -0
  48. package/skills/async-python-patterns/SKILL.md +39 -0
  49. package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
  50. package/skills/attack-tree-construction/SKILL.md +38 -0
  51. package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
  52. package/skills/auth-implementation-patterns/SKILL.md +39 -0
  53. package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
  54. package/skills/backend-architect/SKILL.md +333 -0
  55. package/skills/backend-development-feature-development/SKILL.md +180 -0
  56. package/skills/backend-security-coder/SKILL.md +156 -0
  57. package/skills/backtesting-frameworks/SKILL.md +39 -0
  58. package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
  59. package/skills/bash-defensive-patterns/SKILL.md +43 -0
  60. package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
  61. package/skills/bash-pro/SKILL.md +310 -0
  62. package/skills/bats-testing-patterns/SKILL.md +34 -0
  63. package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
  64. package/skills/bazel-build-optimization/SKILL.md +397 -0
  65. package/skills/billing-automation/SKILL.md +42 -0
  66. package/skills/billing-automation/resources/implementation-playbook.md +544 -0
  67. package/skills/binary-analysis-patterns/SKILL.md +450 -0
  68. package/skills/blockchain-developer/SKILL.md +208 -0
  69. package/skills/business-analyst/SKILL.md +182 -0
  70. package/skills/c-pro/SKILL.md +56 -0
  71. package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
  72. package/skills/c4-code/SKILL.md +244 -0
  73. package/skills/c4-component/SKILL.md +153 -0
  74. package/skills/c4-container/SKILL.md +171 -0
  75. package/skills/c4-context/SKILL.md +150 -0
  76. package/skills/changelog-automation/SKILL.md +38 -0
  77. package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
  78. package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
  79. package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
  80. package/skills/clean-markdown/SKILL.md +23 -0
  81. package/skills/cloud-architect/SKILL.md +135 -0
  82. package/skills/code-documentation-code-explain/SKILL.md +46 -0
  83. package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
  84. package/skills/code-documentation-doc-generate/SKILL.md +48 -0
  85. package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
  86. package/skills/code-refactoring-context-restore/SKILL.md +179 -0
  87. package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
  88. package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
  89. package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
  90. package/skills/code-review-ai-ai-review/SKILL.md +450 -0
  91. package/skills/code-review-excellence/SKILL.md +40 -0
  92. package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
  93. package/skills/code-reviewer/SKILL.md +178 -0
  94. package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
  95. package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
  96. package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
  97. package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
  98. package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
  99. package/skills/competitive-landscape/SKILL.md +34 -0
  100. package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
  101. package/skills/comprehensive-review-full-review/SKILL.md +146 -0
  102. package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
  103. package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
  104. package/skills/conductor-implement/SKILL.md +388 -0
  105. package/skills/conductor-manage/SKILL.md +39 -0
  106. package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
  107. package/skills/conductor-new-track/SKILL.md +433 -0
  108. package/skills/conductor-revert/SKILL.md +372 -0
  109. package/skills/conductor-setup/SKILL.md +426 -0
  110. package/skills/conductor-status/SKILL.md +338 -0
  111. package/skills/conductor-validator/SKILL.md +62 -0
  112. package/skills/content-marketer/SKILL.md +170 -0
  113. package/skills/context-driven-development/SKILL.md +400 -0
  114. package/skills/context-management-context-restore/SKILL.md +179 -0
  115. package/skills/context-management-context-save/SKILL.md +177 -0
  116. package/skills/context-manager/SKILL.md +185 -0
  117. package/skills/cost-optimization/SKILL.md +286 -0
  118. package/skills/cpp-pro/SKILL.md +59 -0
  119. package/skills/cqrs-implementation/SKILL.md +35 -0
  120. package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
  121. package/skills/csharp-pro/SKILL.md +59 -0
  122. package/skills/customer-support/SKILL.md +170 -0
  123. package/skills/data-engineer/SKILL.md +224 -0
  124. package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
  125. package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
  126. package/skills/data-quality-frameworks/SKILL.md +40 -0
  127. package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
  128. package/skills/data-scientist/SKILL.md +199 -0
  129. package/skills/data-storytelling/SKILL.md +465 -0
  130. package/skills/database-admin/SKILL.md +165 -0
  131. package/skills/database-architect/SKILL.md +268 -0
  132. package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
  133. package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
  134. package/skills/database-migration/SKILL.md +436 -0
  135. package/skills/database-migrations-migration-observability/SKILL.md +420 -0
  136. package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
  137. package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
  138. package/skills/database-optimizer/SKILL.md +167 -0
  139. package/skills/dbt-transformation-patterns/SKILL.md +34 -0
  140. package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
  141. package/skills/debugger/SKILL.md +49 -0
  142. package/skills/debugging-strategies/SKILL.md +34 -0
  143. package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
  144. package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
  145. package/skills/defi-protocol-templates/SKILL.md +466 -0
  146. package/skills/dependency-management-deps-audit/SKILL.md +44 -0
  147. package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
  148. package/skills/dependency-upgrade/SKILL.md +421 -0
  149. package/skills/deployment-engineer/SKILL.md +170 -0
  150. package/skills/deployment-pipeline-design/SKILL.md +371 -0
  151. package/skills/deployment-validation-config-validate/SKILL.md +496 -0
  152. package/skills/devops-troubleshooter/SKILL.md +161 -0
  153. package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
  154. package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
  155. package/skills/distributed-tracing/SKILL.md +450 -0
  156. package/skills/django-pro/SKILL.md +180 -0
  157. package/skills/docs-architect/SKILL.md +98 -0
  158. package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
  159. package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
  160. package/skills/dotnet-architect/SKILL.md +197 -0
  161. package/skills/dotnet-backend-patterns/SKILL.md +37 -0
  162. package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  163. package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  164. package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  165. package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  166. package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
  167. package/skills/dummy-skill/SKILL.md +5 -0
  168. package/skills/dx-optimizer/SKILL.md +83 -0
  169. package/skills/e2e-testing-patterns/SKILL.md +41 -0
  170. package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
  171. package/skills/elixir-pro/SKILL.md +59 -0
  172. package/skills/embedding-strategies/SKILL.md +491 -0
  173. package/skills/employment-contract-templates/SKILL.md +39 -0
  174. package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
  175. package/skills/error-debugging-error-analysis/SKILL.md +47 -0
  176. package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
  177. package/skills/error-debugging-error-trace/SKILL.md +43 -0
  178. package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
  179. package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
  180. package/skills/error-detective/SKILL.md +53 -0
  181. package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
  182. package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
  183. package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
  184. package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
  185. package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
  186. package/skills/error-handling-patterns/SKILL.md +35 -0
  187. package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
  188. package/skills/event-sourcing-architect/SKILL.md +58 -0
  189. package/skills/event-store-design/SKILL.md +449 -0
  190. package/skills/fastapi-pro/SKILL.md +192 -0
  191. package/skills/fastapi-templates/SKILL.md +32 -0
  192. package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
  193. package/skills/final-test/SKILL.md +5 -0
  194. package/skills/firmware-analyst/SKILL.md +320 -0
  195. package/skills/flutter-expert/SKILL.md +200 -0
  196. package/skills/framework-migration-code-migrate/SKILL.md +48 -0
  197. package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
  198. package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
  199. package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
  200. package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
  201. package/skills/frontend-developer/SKILL.md +171 -0
  202. package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
  203. package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
  204. package/skills/frontend-security-coder/SKILL.md +170 -0
  205. package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
  206. package/skills/gdpr-data-handling/SKILL.md +33 -0
  207. package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
  208. package/skills/git-advanced-workflows/SKILL.md +412 -0
  209. package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
  210. package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
  211. package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
  212. package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
  213. package/skills/github-actions-templates/SKILL.md +345 -0
  214. package/skills/gitlab-ci-patterns/SKILL.md +283 -0
  215. package/skills/gitops-workflow/SKILL.md +303 -0
  216. package/skills/gitops-workflow/references/argocd-setup.md +134 -0
  217. package/skills/gitops-workflow/references/sync-policies.md +131 -0
  218. package/skills/go-concurrency-patterns/SKILL.md +33 -0
  219. package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  220. package/skills/godot-gdscript-patterns/SKILL.md +33 -0
  221. package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
  222. package/skills/golang-pro/SKILL.md +179 -0
  223. package/skills/grafana-dashboards/SKILL.md +381 -0
  224. package/skills/graphql-architect/SKILL.md +182 -0
  225. package/skills/haskell-pro/SKILL.md +56 -0
  226. package/skills/helm-chart-scaffolding/SKILL.md +34 -0
  227. package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  228. package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  229. package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  230. package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
  231. package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  232. package/skills/hr-pro/SKILL.md +126 -0
  233. package/skills/hybrid-cloud-architect/SKILL.md +168 -0
  234. package/skills/hybrid-cloud-networking/SKILL.md +238 -0
  235. package/skills/hybrid-search-implementation/SKILL.md +32 -0
  236. package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
  237. package/skills/incident-responder/SKILL.md +213 -0
  238. package/skills/incident-response-incident-response/SKILL.md +168 -0
  239. package/skills/incident-response-smart-fix/SKILL.md +29 -0
  240. package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
  241. package/skills/incident-runbook-templates/SKILL.md +395 -0
  242. package/skills/ios-developer/SKILL.md +219 -0
  243. package/skills/istio-traffic-management/SKILL.md +337 -0
  244. package/skills/java-pro/SKILL.md +177 -0
  245. package/skills/javascript-pro/SKILL.md +57 -0
  246. package/skills/javascript-testing-patterns/SKILL.md +35 -0
  247. package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
  248. package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
  249. package/skills/julia-pro/SKILL.md +209 -0
  250. package/skills/k8s-manifest-generator/SKILL.md +35 -0
  251. package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  252. package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  253. package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  254. package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  255. package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  256. package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
  257. package/skills/k8s-security-policies/SKILL.md +346 -0
  258. package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  259. package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  260. package/skills/kpi-dashboard-design/SKILL.md +440 -0
  261. package/skills/kubernetes-architect/SKILL.md +170 -0
  262. package/skills/langchain-architecture/SKILL.md +350 -0
  263. package/skills/legacy-modernizer/SKILL.md +53 -0
  264. package/skills/legal-advisor/SKILL.md +70 -0
  265. package/skills/linkerd-patterns/SKILL.md +321 -0
  266. package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
  267. package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  268. package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
  269. package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
  270. package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
  271. package/skills/llm-evaluation/SKILL.md +483 -0
  272. package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
  273. package/skills/malware-analyst/SKILL.md +247 -0
  274. package/skills/market-sizing-analysis/SKILL.md +425 -0
  275. package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
  276. package/skills/market-sizing-analysis/references/data-sources.md +360 -0
  277. package/skills/memory-forensics/SKILL.md +491 -0
  278. package/skills/memory-safety-patterns/SKILL.md +33 -0
  279. package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
  280. package/skills/mermaid-expert/SKILL.md +59 -0
  281. package/skills/microservices-patterns/SKILL.md +35 -0
  282. package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
  283. package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
  284. package/skills/ml-engineer/SKILL.md +168 -0
  285. package/skills/ml-pipeline-workflow/SKILL.md +257 -0
  286. package/skills/mlops-engineer/SKILL.md +219 -0
  287. package/skills/mobile-developer/SKILL.md +205 -0
  288. package/skills/mobile-security-coder/SKILL.md +184 -0
  289. package/skills/modern-javascript-patterns/SKILL.md +35 -0
  290. package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  291. package/skills/monorepo-architect/SKILL.md +61 -0
  292. package/skills/monorepo-management/SKILL.md +35 -0
  293. package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
  294. package/skills/mtls-configuration/SKILL.md +359 -0
  295. package/skills/multi-cloud-architecture/SKILL.md +189 -0
  296. package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
  297. package/skills/network-engineer/SKILL.md +169 -0
  298. package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
  299. package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  300. package/skills/nft-standards/SKILL.md +395 -0
  301. package/skills/node-expert/SKILL.md +23 -0
  302. package/skills/nodejs-backend-patterns/SKILL.md +35 -0
  303. package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
  304. package/skills/nx-workspace-patterns/SKILL.md +464 -0
  305. package/skills/observability-engineer/SKILL.md +237 -0
  306. package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
  307. package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
  308. package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
  309. package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
  310. package/skills/on-call-handoff-patterns/SKILL.md +453 -0
  311. package/skills/openapi-spec-generation/SKILL.md +33 -0
  312. package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  313. package/skills/payment-integration/SKILL.md +77 -0
  314. package/skills/paypal-integration/SKILL.md +479 -0
  315. package/skills/pci-compliance/SKILL.md +478 -0
  316. package/skills/performance-engineer/SKILL.md +180 -0
  317. package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
  318. package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
  319. package/skills/php-pro/SKILL.md +63 -0
  320. package/skills/posix-shell-pro/SKILL.md +304 -0
  321. package/skills/postgresql/SKILL.md +230 -0
  322. package/skills/postmortem-writing/SKILL.md +386 -0
  323. package/skills/projection-patterns/SKILL.md +33 -0
  324. package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
  325. package/skills/prometheus-configuration/SKILL.md +404 -0
  326. package/skills/prompt-engineer/SKILL.md +272 -0
  327. package/skills/prompt-engineering-patterns/SKILL.md +213 -0
  328. package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  329. package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  330. package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  331. package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  332. package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  333. package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  334. package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  335. package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  336. package/skills/protocol-reverse-engineering/SKILL.md +29 -0
  337. package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
  338. package/skills/python-development-python-scaffold/SKILL.md +331 -0
  339. package/skills/python-packaging/SKILL.md +36 -0
  340. package/skills/python-packaging/resources/implementation-playbook.md +869 -0
  341. package/skills/python-performance-optimization/SKILL.md +36 -0
  342. package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
  343. package/skills/python-pro/SKILL.md +158 -0
  344. package/skills/python-testing-patterns/SKILL.md +37 -0
  345. package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
  346. package/skills/quant-analyst/SKILL.md +53 -0
  347. package/skills/rag-implementation/SKILL.md +421 -0
  348. package/skills/react-modernization/SKILL.md +34 -0
  349. package/skills/react-modernization/resources/implementation-playbook.md +512 -0
  350. package/skills/react-native-architecture/SKILL.md +33 -0
  351. package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
  352. package/skills/react-state-management/SKILL.md +441 -0
  353. package/skills/reference-builder/SKILL.md +188 -0
  354. package/skills/reverse-engineer/SKILL.md +173 -0
  355. package/skills/risk-manager/SKILL.md +61 -0
  356. package/skills/risk-metrics-calculation/SKILL.md +33 -0
  357. package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
  358. package/skills/ruby-pro/SKILL.md +56 -0
  359. package/skills/rust-async-patterns/SKILL.md +33 -0
  360. package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
  361. package/skills/rust-pro/SKILL.md +178 -0
  362. package/skills/saga-orchestration/SKILL.md +496 -0
  363. package/skills/sales-automator/SKILL.md +55 -0
  364. package/skills/sast-configuration/SKILL.md +212 -0
  365. package/skills/scala-pro/SKILL.md +82 -0
  366. package/skills/screen-reader-testing/SKILL.md +33 -0
  367. package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
  368. package/skills/search-specialist/SKILL.md +80 -0
  369. package/skills/secrets-management/SKILL.md +364 -0
  370. package/skills/security-auditor/SKILL.md +169 -0
  371. package/skills/security-compliance-compliance-check/SKILL.md +55 -0
  372. package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
  373. package/skills/security-requirement-extraction/SKILL.md +33 -0
  374. package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
  375. package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
  376. package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
  377. package/skills/security-scanning-security-hardening/SKILL.md +147 -0
  378. package/skills/security-scanning-security-sast/SKILL.md +495 -0
  379. package/skills/seo-authority-builder/SKILL.md +136 -0
  380. package/skills/seo-cannibalization-detector/SKILL.md +123 -0
  381. package/skills/seo-content-auditor/SKILL.md +83 -0
  382. package/skills/seo-content-planner/SKILL.md +108 -0
  383. package/skills/seo-content-refresher/SKILL.md +118 -0
  384. package/skills/seo-content-writer/SKILL.md +96 -0
  385. package/skills/seo-keyword-strategist/SKILL.md +95 -0
  386. package/skills/seo-meta-optimizer/SKILL.md +92 -0
  387. package/skills/seo-snippet-hunter/SKILL.md +114 -0
  388. package/skills/seo-structure-architect/SKILL.md +108 -0
  389. package/skills/service-mesh-expert/SKILL.md +58 -0
  390. package/skills/service-mesh-observability/SKILL.md +395 -0
  391. package/skills/shellcheck-configuration/SKILL.md +466 -0
  392. package/skills/similarity-search-patterns/SKILL.md +33 -0
  393. package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
  394. package/skills/slo-implementation/SKILL.md +341 -0
  395. package/skills/solidity-security/SKILL.md +34 -0
  396. package/skills/solidity-security/resources/implementation-playbook.md +524 -0
  397. package/skills/spark-optimization/SKILL.md +427 -0
  398. package/skills/sql-optimization-patterns/SKILL.md +35 -0
  399. package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
  400. package/skills/sql-pro/SKILL.md +173 -0
  401. package/skills/startup-analyst/SKILL.md +328 -0
  402. package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
  403. package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
  404. package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
  405. package/skills/startup-financial-modeling/SKILL.md +467 -0
  406. package/skills/startup-metrics-framework/SKILL.md +34 -0
  407. package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
  408. package/skills/stride-analysis-patterns/SKILL.md +33 -0
  409. package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
  410. package/skills/stripe-integration/SKILL.md +454 -0
  411. package/skills/systems-programming-rust-project/SKILL.md +440 -0
  412. package/skills/tailwind-design-system/SKILL.md +33 -0
  413. package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
  414. package/skills/tdd-orchestrator/SKILL.md +205 -0
  415. package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
  416. package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
  417. package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
  418. package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
  419. package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
  420. package/skills/team-collaboration-issue/SKILL.md +37 -0
  421. package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
  422. package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
  423. package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
  424. package/skills/team-composition-analysis/SKILL.md +413 -0
  425. package/skills/temporal-python-pro/SKILL.md +370 -0
  426. package/skills/temporal-python-testing/SKILL.md +170 -0
  427. package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  428. package/skills/temporal-python-testing/resources/local-setup.md +553 -0
  429. package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  430. package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  431. package/skills/terraform-module-library/SKILL.md +261 -0
  432. package/skills/terraform-module-library/references/aws-modules.md +63 -0
  433. package/skills/terraform-specialist/SKILL.md +166 -0
  434. package/skills/test-automator/SKILL.md +224 -0
  435. package/skills/threat-mitigation-mapping/SKILL.md +33 -0
  436. package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
  437. package/skills/threat-modeling-expert/SKILL.md +60 -0
  438. package/skills/track-management/SKILL.md +38 -0
  439. package/skills/track-management/resources/implementation-playbook.md +591 -0
  440. package/skills/turborepo-caching/SKILL.md +419 -0
  441. package/skills/tutorial-engineer/SKILL.md +139 -0
  442. package/skills/typescript-advanced-types/SKILL.md +35 -0
  443. package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
  444. package/skills/typescript-pro/SKILL.md +55 -0
  445. package/skills/ui-minimal/SKILL.md +23 -0
  446. package/skills/ui-ux-designer/SKILL.md +209 -0
  447. package/skills/ui-visual-validator/SKILL.md +214 -0
  448. package/skills/unit-testing-test-generate/SKILL.md +319 -0
  449. package/skills/unity-developer/SKILL.md +230 -0
  450. package/skills/unity-ecs-patterns/SKILL.md +33 -0
  451. package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
  452. package/skills/uv-package-manager/SKILL.md +37 -0
  453. package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
  454. package/skills/vector-database-engineer/SKILL.md +60 -0
  455. package/skills/vector-index-tuning/SKILL.md +42 -0
  456. package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
  457. package/skills/wcag-audit-patterns/SKILL.md +41 -0
  458. package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  459. package/skills/web3-testing/SKILL.md +427 -0
  460. package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
  461. package/skills/workflow-patterns/SKILL.md +38 -0
  462. package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
@@ -0,0 +1,1371 @@
1
+ # Error Tracking and Monitoring Implementation Playbook
2
+
3
+ This file contains detailed patterns, checklists, and code samples referenced by the skill.
4
+
5
+ # Error Tracking and Monitoring
6
+
7
+ You are an error tracking and observability expert specializing in implementing comprehensive error monitoring solutions. Set up error tracking systems, configure alerts, implement structured logging, and ensure teams can quickly identify and resolve production issues.
8
+
9
+ ## Context
10
+ The user needs to implement or improve error tracking and monitoring. Focus on real-time error detection, meaningful alerts, error grouping, performance monitoring, and integration with popular error tracking services.
11
+
12
+ ## Requirements
13
+ $ARGUMENTS
14
+
15
+ ## Instructions
16
+
17
+ ### 1. Error Tracking Analysis
18
+
19
+ Analyze current error handling and tracking:
20
+
21
+ **Error Analysis Script**
22
+ ```python
23
+ import os
24
+ import re
25
+ import ast
26
+ from pathlib import Path
27
+ from collections import defaultdict
28
+
29
+ class ErrorTrackingAnalyzer:
30
+ def analyze_codebase(self, project_path):
31
+ """
32
+ Analyze error handling patterns in codebase
33
+ """
34
+ analysis = {
35
+ 'error_handling': self._analyze_error_handling(project_path),
36
+ 'logging_usage': self._analyze_logging(project_path),
37
+ 'monitoring_setup': self._check_monitoring_setup(project_path),
38
+ 'error_patterns': self._identify_error_patterns(project_path),
39
+ 'recommendations': []
40
+ }
41
+
42
+ self._generate_recommendations(analysis)
43
+ return analysis
44
+
45
+ def _analyze_error_handling(self, project_path):
46
+ """Analyze error handling patterns"""
47
+ patterns = {
48
+ 'try_catch_blocks': 0,
49
+ 'unhandled_promises': 0,
50
+ 'generic_catches': 0,
51
+ 'error_types': defaultdict(int),
52
+ 'error_reporting': []
53
+ }
54
+
55
+ for file_path in Path(project_path).rglob('*.{js,ts,py,java,go}'):
56
+ content = file_path.read_text(errors='ignore')
57
+
58
+ # JavaScript/TypeScript patterns
59
+ if file_path.suffix in ['.js', '.ts']:
60
+ patterns['try_catch_blocks'] += len(re.findall(r'try\s*{', content))
61
+ patterns['generic_catches'] += len(re.findall(r'catch\s*\([^)]*\)\s*{\s*}', content))
62
+ patterns['unhandled_promises'] += len(re.findall(r'\.then\([^)]+\)(?!\.catch)', content))
63
+
64
+ # Python patterns
65
+ elif file_path.suffix == '.py':
66
+ try:
67
+ tree = ast.parse(content)
68
+ for node in ast.walk(tree):
69
+ if isinstance(node, ast.Try):
70
+ patterns['try_catch_blocks'] += 1
71
+ for handler in node.handlers:
72
+ if handler.type is None:
73
+ patterns['generic_catches'] += 1
74
+ except:
75
+ pass
76
+
77
+ return patterns
78
+
79
+ def _analyze_logging(self, project_path):
80
+ """Analyze logging patterns"""
81
+ logging_patterns = {
82
+ 'console_logs': 0,
83
+ 'structured_logging': False,
84
+ 'log_levels_used': set(),
85
+ 'logging_frameworks': []
86
+ }
87
+
88
+ # Check for logging frameworks
89
+ package_files = ['package.json', 'requirements.txt', 'go.mod', 'pom.xml']
90
+ for pkg_file in package_files:
91
+ pkg_path = Path(project_path) / pkg_file
92
+ if pkg_path.exists():
93
+ content = pkg_path.read_text()
94
+ if 'winston' in content or 'bunyan' in content:
95
+ logging_patterns['logging_frameworks'].append('winston/bunyan')
96
+ if 'pino' in content:
97
+ logging_patterns['logging_frameworks'].append('pino')
98
+ if 'logging' in content:
99
+ logging_patterns['logging_frameworks'].append('python-logging')
100
+ if 'logrus' in content or 'zap' in content:
101
+ logging_patterns['logging_frameworks'].append('logrus/zap')
102
+
103
+ return logging_patterns
104
+ ```
105
+
106
+ ### 2. Error Tracking Service Integration
107
+
108
+ Implement integrations with popular error tracking services:
109
+
110
+ **Sentry Integration**
111
+ ```javascript
112
+ // sentry-setup.js
113
+ import * as Sentry from "@sentry/node";
114
+ import { ProfilingIntegration } from "@sentry/profiling-node";
115
+
116
+ class SentryErrorTracker {
117
+ constructor(config) {
118
+ this.config = config;
119
+ this.initialized = false;
120
+ }
121
+
122
+ initialize() {
123
+ Sentry.init({
124
+ dsn: this.config.dsn,
125
+ environment: this.config.environment,
126
+ release: this.config.release,
127
+
128
+ // Performance Monitoring
129
+ tracesSampleRate: this.config.tracesSampleRate || 0.1,
130
+ profilesSampleRate: this.config.profilesSampleRate || 0.1,
131
+
132
+ // Integrations
133
+ integrations: [
134
+ // HTTP integration
135
+ new Sentry.Integrations.Http({ tracing: true }),
136
+
137
+ // Express integration
138
+ new Sentry.Integrations.Express({
139
+ app: this.config.app,
140
+ router: true,
141
+ methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH']
142
+ }),
143
+
144
+ // Database integration
145
+ new Sentry.Integrations.Postgres(),
146
+ new Sentry.Integrations.Mysql(),
147
+ new Sentry.Integrations.Mongo(),
148
+
149
+ // Profiling
150
+ new ProfilingIntegration(),
151
+
152
+ // Custom integrations
153
+ ...this.getCustomIntegrations()
154
+ ],
155
+
156
+ // Filtering
157
+ beforeSend: (event, hint) => {
158
+ // Filter sensitive data
159
+ if (event.request?.cookies) {
160
+ delete event.request.cookies;
161
+ }
162
+
163
+ // Filter out specific errors
164
+ if (this.shouldFilterError(event, hint)) {
165
+ return null;
166
+ }
167
+
168
+ // Enhance error context
169
+ return this.enhanceErrorEvent(event, hint);
170
+ },
171
+
172
+ // Breadcrumbs
173
+ beforeBreadcrumb: (breadcrumb, hint) => {
174
+ // Filter sensitive breadcrumbs
175
+ if (breadcrumb.category === 'console' && breadcrumb.level === 'debug') {
176
+ return null;
177
+ }
178
+
179
+ return breadcrumb;
180
+ },
181
+
182
+ // Options
183
+ attachStacktrace: true,
184
+ shutdownTimeout: 5000,
185
+ maxBreadcrumbs: 100,
186
+ debug: this.config.debug || false,
187
+
188
+ // Tags
189
+ initialScope: {
190
+ tags: {
191
+ component: this.config.component,
192
+ version: this.config.version
193
+ },
194
+ user: {
195
+ id: this.config.userId,
196
+ segment: this.config.userSegment
197
+ }
198
+ }
199
+ });
200
+
201
+ this.initialized = true;
202
+ this.setupErrorHandlers();
203
+ }
204
+
205
+ setupErrorHandlers() {
206
+ // Global error handler
207
+ process.on('uncaughtException', (error) => {
208
+ console.error('Uncaught Exception:', error);
209
+ Sentry.captureException(error, {
210
+ tags: { type: 'uncaught_exception' },
211
+ level: 'fatal'
212
+ });
213
+
214
+ // Graceful shutdown
215
+ this.gracefulShutdown();
216
+ });
217
+
218
+ // Promise rejection handler
219
+ process.on('unhandledRejection', (reason, promise) => {
220
+ console.error('Unhandled Rejection:', reason);
221
+ Sentry.captureException(reason, {
222
+ tags: { type: 'unhandled_rejection' },
223
+ extra: { promise: promise.toString() }
224
+ });
225
+ });
226
+ }
227
+
228
+ enhanceErrorEvent(event, hint) {
229
+ // Add custom context
230
+ event.extra = {
231
+ ...event.extra,
232
+ memory: process.memoryUsage(),
233
+ uptime: process.uptime(),
234
+ nodeVersion: process.version
235
+ };
236
+
237
+ // Add user context
238
+ if (this.config.getUserContext) {
239
+ event.user = this.config.getUserContext();
240
+ }
241
+
242
+ // Add custom fingerprinting
243
+ if (hint.originalException) {
244
+ event.fingerprint = this.generateFingerprint(hint.originalException);
245
+ }
246
+
247
+ return event;
248
+ }
249
+
250
+ generateFingerprint(error) {
251
+ // Custom fingerprinting logic
252
+ const fingerprint = [];
253
+
254
+ // Group by error type
255
+ fingerprint.push(error.name || 'Error');
256
+
257
+ // Group by error location
258
+ if (error.stack) {
259
+ const match = error.stack.match(/at\s+(.+?)\s+\(/);
260
+ if (match) {
261
+ fingerprint.push(match[1]);
262
+ }
263
+ }
264
+
265
+ // Group by custom properties
266
+ if (error.code) {
267
+ fingerprint.push(error.code);
268
+ }
269
+
270
+ return fingerprint;
271
+ }
272
+ }
273
+
274
+ // Express middleware
275
+ export const sentryMiddleware = {
276
+ requestHandler: Sentry.Handlers.requestHandler(),
277
+ tracingHandler: Sentry.Handlers.tracingHandler(),
278
+ errorHandler: Sentry.Handlers.errorHandler({
279
+ shouldHandleError(error) {
280
+ // Capture 4xx and 5xx errors
281
+ if (error.status >= 400) {
282
+ return true;
283
+ }
284
+ return false;
285
+ }
286
+ })
287
+ };
288
+ ```
289
+
290
+ **Custom Error Tracking Service**
291
+ ```typescript
292
+ // error-tracker.ts
293
+ interface ErrorEvent {
294
+ timestamp: Date;
295
+ level: 'debug' | 'info' | 'warning' | 'error' | 'fatal';
296
+ message: string;
297
+ stack?: string;
298
+ context: {
299
+ user?: any;
300
+ request?: any;
301
+ environment: string;
302
+ release: string;
303
+ tags: Record<string, string>;
304
+ extra: Record<string, any>;
305
+ };
306
+ fingerprint: string[];
307
+ }
308
+
309
+ class ErrorTracker {
310
+ private queue: ErrorEvent[] = [];
311
+ private batchSize = 10;
312
+ private flushInterval = 5000;
313
+
314
+ constructor(private config: ErrorTrackerConfig) {
315
+ this.startBatchProcessor();
316
+ }
317
+
318
+ captureException(error: Error, context?: Partial<ErrorEvent['context']>) {
319
+ const event: ErrorEvent = {
320
+ timestamp: new Date(),
321
+ level: 'error',
322
+ message: error.message,
323
+ stack: error.stack,
324
+ context: {
325
+ environment: this.config.environment,
326
+ release: this.config.release,
327
+ tags: {},
328
+ extra: {},
329
+ ...context
330
+ },
331
+ fingerprint: this.generateFingerprint(error)
332
+ };
333
+
334
+ this.addToQueue(event);
335
+ }
336
+
337
+ captureMessage(message: string, level: ErrorEvent['level'] = 'info') {
338
+ const event: ErrorEvent = {
339
+ timestamp: new Date(),
340
+ level,
341
+ message,
342
+ context: {
343
+ environment: this.config.environment,
344
+ release: this.config.release,
345
+ tags: {},
346
+ extra: {}
347
+ },
348
+ fingerprint: [message]
349
+ };
350
+
351
+ this.addToQueue(event);
352
+ }
353
+
354
+ private addToQueue(event: ErrorEvent) {
355
+ // Apply sampling
356
+ if (Math.random() > this.config.sampleRate) {
357
+ return;
358
+ }
359
+
360
+ // Filter sensitive data
361
+ event = this.sanitizeEvent(event);
362
+
363
+ // Add to queue
364
+ this.queue.push(event);
365
+
366
+ // Flush if queue is full
367
+ if (this.queue.length >= this.batchSize) {
368
+ this.flush();
369
+ }
370
+ }
371
+
372
+ private sanitizeEvent(event: ErrorEvent): ErrorEvent {
373
+ // Remove sensitive data
374
+ const sensitiveKeys = ['password', 'token', 'secret', 'api_key'];
375
+
376
+ const sanitize = (obj: any): any => {
377
+ if (!obj || typeof obj !== 'object') return obj;
378
+
379
+ const cleaned = Array.isArray(obj) ? [] : {};
380
+
381
+ for (const [key, value] of Object.entries(obj)) {
382
+ if (sensitiveKeys.some(k => key.toLowerCase().includes(k))) {
383
+ cleaned[key] = '[REDACTED]';
384
+ } else if (typeof value === 'object') {
385
+ cleaned[key] = sanitize(value);
386
+ } else {
387
+ cleaned[key] = value;
388
+ }
389
+ }
390
+
391
+ return cleaned;
392
+ };
393
+
394
+ return {
395
+ ...event,
396
+ context: sanitize(event.context)
397
+ };
398
+ }
399
+
400
+ private async flush() {
401
+ if (this.queue.length === 0) return;
402
+
403
+ const events = this.queue.splice(0, this.batchSize);
404
+
405
+ try {
406
+ await this.sendEvents(events);
407
+ } catch (error) {
408
+ console.error('Failed to send error events:', error);
409
+ // Re-queue events
410
+ this.queue.unshift(...events);
411
+ }
412
+ }
413
+
414
+ private async sendEvents(events: ErrorEvent[]) {
415
+ const response = await fetch(this.config.endpoint, {
416
+ method: 'POST',
417
+ headers: {
418
+ 'Content-Type': 'application/json',
419
+ 'Authorization': `Bearer ${this.config.apiKey}`
420
+ },
421
+ body: JSON.stringify({ events })
422
+ });
423
+
424
+ if (!response.ok) {
425
+ throw new Error(`Error tracking API returned ${response.status}`);
426
+ }
427
+ }
428
+ }
429
+ ```
430
+
431
+ ### 3. Structured Logging Implementation
432
+
433
+ Implement comprehensive structured logging:
434
+
435
+ **Advanced Logger**
436
+ ```typescript
437
+ // structured-logger.ts
438
+ import winston from 'winston';
439
+ import { ElasticsearchTransport } from 'winston-elasticsearch';
440
+
441
+ class StructuredLogger {
442
+ private logger: winston.Logger;
443
+
444
+ constructor(config: LoggerConfig) {
445
+ this.logger = winston.createLogger({
446
+ level: config.level || 'info',
447
+ format: winston.format.combine(
448
+ winston.format.timestamp(),
449
+ winston.format.errors({ stack: true }),
450
+ winston.format.metadata(),
451
+ winston.format.json()
452
+ ),
453
+ defaultMeta: {
454
+ service: config.service,
455
+ environment: config.environment,
456
+ version: config.version
457
+ },
458
+ transports: this.createTransports(config)
459
+ });
460
+ }
461
+
462
+ private createTransports(config: LoggerConfig): winston.transport[] {
463
+ const transports: winston.transport[] = [];
464
+
465
+ // Console transport for development
466
+ if (config.environment === 'development') {
467
+ transports.push(new winston.transports.Console({
468
+ format: winston.format.combine(
469
+ winston.format.colorize(),
470
+ winston.format.simple()
471
+ )
472
+ }));
473
+ }
474
+
475
+ // File transport for all environments
476
+ transports.push(new winston.transports.File({
477
+ filename: 'logs/error.log',
478
+ level: 'error',
479
+ maxsize: 5242880, // 5MB
480
+ maxFiles: 5
481
+ }));
482
+
483
+ transports.push(new winston.transports.File({
484
+ filename: 'logs/combined.log',
485
+ maxsize: 5242880,
486
+ maxFiles: 5
487
+ });
488
+
489
+ // Elasticsearch transport for production
490
+ if (config.elasticsearch) {
491
+ transports.push(new ElasticsearchTransport({
492
+ level: 'info',
493
+ clientOpts: config.elasticsearch,
494
+ index: `logs-${config.service}`,
495
+ transformer: (logData) => {
496
+ return {
497
+ '@timestamp': logData.timestamp,
498
+ severity: logData.level,
499
+ message: logData.message,
500
+ fields: {
501
+ ...logData.metadata,
502
+ ...logData.defaultMeta
503
+ }
504
+ };
505
+ }
506
+ }));
507
+ }
508
+
509
+ return transports;
510
+ }
511
+
512
+ // Logging methods with context
513
+ error(message: string, error?: Error, context?: any) {
514
+ this.logger.error(message, {
515
+ error: {
516
+ message: error?.message,
517
+ stack: error?.stack,
518
+ name: error?.name
519
+ },
520
+ ...context
521
+ });
522
+ }
523
+
524
+ warn(message: string, context?: any) {
525
+ this.logger.warn(message, context);
526
+ }
527
+
528
+ info(message: string, context?: any) {
529
+ this.logger.info(message, context);
530
+ }
531
+
532
+ debug(message: string, context?: any) {
533
+ this.logger.debug(message, context);
534
+ }
535
+
536
+ // Performance logging
537
+ startTimer(label: string): () => void {
538
+ const start = Date.now();
539
+ return () => {
540
+ const duration = Date.now() - start;
541
+ this.info(`Timer ${label}`, { duration, label });
542
+ };
543
+ }
544
+
545
+ // Audit logging
546
+ audit(action: string, userId: string, details: any) {
547
+ this.info('Audit Event', {
548
+ type: 'audit',
549
+ action,
550
+ userId,
551
+ timestamp: new Date().toISOString(),
552
+ details
553
+ });
554
+ }
555
+ }
556
+
557
+ // Request logging middleware
558
+ export function requestLoggingMiddleware(logger: StructuredLogger) {
559
+ return (req: Request, res: Response, next: NextFunction) => {
560
+ const start = Date.now();
561
+
562
+ // Log request
563
+ logger.info('Incoming request', {
564
+ method: req.method,
565
+ url: req.url,
566
+ ip: req.ip,
567
+ userAgent: req.get('user-agent')
568
+ });
569
+
570
+ // Log response
571
+ res.on('finish', () => {
572
+ const duration = Date.now() - start;
573
+ logger.info('Request completed', {
574
+ method: req.method,
575
+ url: req.url,
576
+ status: res.statusCode,
577
+ duration,
578
+ contentLength: res.get('content-length')
579
+ });
580
+ });
581
+
582
+ next();
583
+ };
584
+ }
585
+ ```
586
+
587
+ ### 4. Error Alerting Configuration
588
+
589
+ Set up intelligent alerting:
590
+
591
+ **Alert Manager**
592
+ ```python
593
+ # alert_manager.py
594
+ from dataclasses import dataclass
595
+ from typing import List, Dict, Optional
596
+ from datetime import datetime, timedelta
597
+ import asyncio
598
+
599
+ @dataclass
600
+ class AlertRule:
601
+ name: str
602
+ condition: str
603
+ threshold: float
604
+ window: timedelta
605
+ severity: str
606
+ channels: List[str]
607
+ cooldown: timedelta = timedelta(minutes=15)
608
+
609
+ class AlertManager:
610
+ def __init__(self, config):
611
+ self.config = config
612
+ self.rules = self._load_rules()
613
+ self.alert_history = {}
614
+ self.channels = self._setup_channels()
615
+
616
+ def _load_rules(self):
617
+ """Load alert rules from configuration"""
618
+ return [
619
+ AlertRule(
620
+ name="High Error Rate",
621
+ condition="error_rate",
622
+ threshold=0.05, # 5% error rate
623
+ window=timedelta(minutes=5),
624
+ severity="critical",
625
+ channels=["slack", "pagerduty"]
626
+ ),
627
+ AlertRule(
628
+ name="Response Time Degradation",
629
+ condition="response_time_p95",
630
+ threshold=1000, # 1 second
631
+ window=timedelta(minutes=10),
632
+ severity="warning",
633
+ channels=["slack"]
634
+ ),
635
+ AlertRule(
636
+ name="Memory Usage Critical",
637
+ condition="memory_usage_percent",
638
+ threshold=90,
639
+ window=timedelta(minutes=5),
640
+ severity="critical",
641
+ channels=["slack", "pagerduty"]
642
+ ),
643
+ AlertRule(
644
+ name="Disk Space Low",
645
+ condition="disk_free_percent",
646
+ threshold=10,
647
+ window=timedelta(minutes=15),
648
+ severity="warning",
649
+ channels=["slack", "email"]
650
+ )
651
+ ]
652
+
653
+ async def evaluate_rules(self, metrics: Dict):
654
+ """Evaluate all alert rules against current metrics"""
655
+ for rule in self.rules:
656
+ if await self._should_alert(rule, metrics):
657
+ await self._send_alert(rule, metrics)
658
+
659
+ async def _should_alert(self, rule: AlertRule, metrics: Dict) -> bool:
660
+ """Check if alert should be triggered"""
661
+ # Check if metric exists
662
+ if rule.condition not in metrics:
663
+ return False
664
+
665
+ # Check threshold
666
+ value = metrics[rule.condition]
667
+ if not self._check_threshold(value, rule.threshold, rule.condition):
668
+ return False
669
+
670
+ # Check cooldown
671
+ last_alert = self.alert_history.get(rule.name)
672
+ if last_alert and datetime.now() - last_alert < rule.cooldown:
673
+ return False
674
+
675
+ return True
676
+
677
+ async def _send_alert(self, rule: AlertRule, metrics: Dict):
678
+ """Send alert through configured channels"""
679
+ alert_data = {
680
+ "rule": rule.name,
681
+ "severity": rule.severity,
682
+ "value": metrics[rule.condition],
683
+ "threshold": rule.threshold,
684
+ "timestamp": datetime.now().isoformat(),
685
+ "environment": self.config.environment,
686
+ "service": self.config.service
687
+ }
688
+
689
+ # Send to all channels
690
+ tasks = []
691
+ for channel_name in rule.channels:
692
+ if channel_name in self.channels:
693
+ channel = self.channels[channel_name]
694
+ tasks.append(channel.send(alert_data))
695
+
696
+ await asyncio.gather(*tasks)
697
+
698
+ # Update alert history
699
+ self.alert_history[rule.name] = datetime.now()
700
+
701
+ # Alert channels
702
+ class SlackAlertChannel:
703
+ def __init__(self, webhook_url):
704
+ self.webhook_url = webhook_url
705
+
706
+ async def send(self, alert_data):
707
+ """Send alert to Slack"""
708
+ color = {
709
+ "critical": "danger",
710
+ "warning": "warning",
711
+ "info": "good"
712
+ }.get(alert_data["severity"], "danger")
713
+
714
+ payload = {
715
+ "attachments": [{
716
+ "color": color,
717
+ "title": f"🚨 {alert_data['rule']}",
718
+ "fields": [
719
+ {
720
+ "title": "Severity",
721
+ "value": alert_data["severity"].upper(),
722
+ "short": True
723
+ },
724
+ {
725
+ "title": "Environment",
726
+ "value": alert_data["environment"],
727
+ "short": True
728
+ },
729
+ {
730
+ "title": "Current Value",
731
+ "value": str(alert_data["value"]),
732
+ "short": True
733
+ },
734
+ {
735
+ "title": "Threshold",
736
+ "value": str(alert_data["threshold"]),
737
+ "short": True
738
+ }
739
+ ],
740
+ "footer": alert_data["service"],
741
+ "ts": int(datetime.now().timestamp())
742
+ }]
743
+ }
744
+
745
+ # Send to Slack
746
+ async with aiohttp.ClientSession() as session:
747
+ await session.post(self.webhook_url, json=payload)
748
+ ```
749
+
750
+ ### 5. Error Grouping and Deduplication
751
+
752
+ Implement intelligent error grouping:
753
+
754
+ **Error Grouping Algorithm**
755
+ ```python
756
+ import hashlib
757
+ import re
758
+ from difflib import SequenceMatcher
759
+
760
+ class ErrorGrouper:
761
+ def __init__(self):
762
+ self.groups = {}
763
+ self.patterns = self._compile_patterns()
764
+
765
+ def _compile_patterns(self):
766
+ """Compile regex patterns for normalization"""
767
+ return {
768
+ 'numbers': re.compile(r'\b\d+\b'),
769
+ 'uuids': re.compile(r'[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}'),
770
+ 'urls': re.compile(r'https?://[^\s]+'),
771
+ 'file_paths': re.compile(r'(/[^/\s]+)+'),
772
+ 'memory_addresses': re.compile(r'0x[0-9a-fA-F]+'),
773
+ 'timestamps': re.compile(r'\d{4}-\d{2}-\d{2}[T\s]\d{2}:\d{2}:\d{2}')
774
+ }
775
+
776
+ def group_error(self, error):
777
+ """Group error with similar errors"""
778
+ fingerprint = self.generate_fingerprint(error)
779
+
780
+ # Find existing group
781
+ group = self.find_similar_group(fingerprint, error)
782
+
783
+ if group:
784
+ group['count'] += 1
785
+ group['last_seen'] = error['timestamp']
786
+ group['instances'].append(error)
787
+ else:
788
+ # Create new group
789
+ self.groups[fingerprint] = {
790
+ 'fingerprint': fingerprint,
791
+ 'first_seen': error['timestamp'],
792
+ 'last_seen': error['timestamp'],
793
+ 'count': 1,
794
+ 'instances': [error],
795
+ 'pattern': self.extract_pattern(error)
796
+ }
797
+
798
+ return fingerprint
799
+
800
+ def generate_fingerprint(self, error):
801
+ """Generate unique fingerprint for error"""
802
+ # Normalize error message
803
+ normalized = self.normalize_message(error['message'])
804
+
805
+ # Include error type and location
806
+ components = [
807
+ error.get('type', 'Unknown'),
808
+ normalized,
809
+ self.extract_location(error.get('stack', ''))
810
+ ]
811
+
812
+ # Generate hash
813
+ fingerprint = hashlib.sha256(
814
+ '|'.join(components).encode()
815
+ ).hexdigest()[:16]
816
+
817
+ return fingerprint
818
+
819
+ def normalize_message(self, message):
820
+ """Normalize error message for grouping"""
821
+ # Replace dynamic values
822
+ normalized = message
823
+ for pattern_name, pattern in self.patterns.items():
824
+ normalized = pattern.sub(f'<{pattern_name}>', normalized)
825
+
826
+ return normalized.strip()
827
+
828
+ def extract_location(self, stack):
829
+ """Extract error location from stack trace"""
830
+ if not stack:
831
+ return 'unknown'
832
+
833
+ lines = stack.split('\n')
834
+ for line in lines:
835
+ # Look for file references
836
+ if ' at ' in line:
837
+ # Extract file and line number
838
+ match = re.search(r'at\s+(.+?)\s*\((.+?):(\d+):(\d+)\)', line)
839
+ if match:
840
+ file_path = match.group(2)
841
+ # Normalize file path
842
+ file_path = re.sub(r'.*/(?=src/|lib/|app/)', '', file_path)
843
+ return f"{file_path}:{match.group(3)}"
844
+
845
+ return 'unknown'
846
+
847
+ def find_similar_group(self, fingerprint, error):
848
+ """Find similar error group using fuzzy matching"""
849
+ if fingerprint in self.groups:
850
+ return self.groups[fingerprint]
851
+
852
+ # Try fuzzy matching
853
+ normalized_message = self.normalize_message(error['message'])
854
+
855
+ for group_fp, group in self.groups.items():
856
+ similarity = SequenceMatcher(
857
+ None,
858
+ normalized_message,
859
+ group['pattern']
860
+ ).ratio()
861
+
862
+ if similarity > 0.85: # 85% similarity threshold
863
+ return group
864
+
865
+ return None
866
+ ```
867
+
868
+ ### 6. Performance Impact Tracking
869
+
870
+ Monitor performance impact of errors:
871
+
872
+ **Performance Monitor**
873
+ ```typescript
874
+ // performance-monitor.ts
875
+ interface PerformanceMetrics {
876
+ responseTime: number;
877
+ errorRate: number;
878
+ throughput: number;
879
+ apdex: number;
880
+ resourceUsage: {
881
+ cpu: number;
882
+ memory: number;
883
+ disk: number;
884
+ };
885
+ }
886
+
887
+ class PerformanceMonitor {
888
+ private metrics: Map<string, PerformanceMetrics[]> = new Map();
889
+ private intervals: Map<string, NodeJS.Timer> = new Map();
890
+
891
+ startMonitoring(service: string, interval: number = 60000) {
892
+ const timer = setInterval(() => {
893
+ this.collectMetrics(service);
894
+ }, interval);
895
+
896
+ this.intervals.set(service, timer);
897
+ }
898
+
899
+ private async collectMetrics(service: string) {
900
+ const metrics: PerformanceMetrics = {
901
+ responseTime: await this.getResponseTime(service),
902
+ errorRate: await this.getErrorRate(service),
903
+ throughput: await this.getThroughput(service),
904
+ apdex: await this.calculateApdex(service),
905
+ resourceUsage: await this.getResourceUsage()
906
+ };
907
+
908
+ // Store metrics
909
+ if (!this.metrics.has(service)) {
910
+ this.metrics.set(service, []);
911
+ }
912
+
913
+ const serviceMetrics = this.metrics.get(service)!;
914
+ serviceMetrics.push(metrics);
915
+
916
+ // Keep only last 24 hours
917
+ const dayAgo = Date.now() - 24 * 60 * 60 * 1000;
918
+ const filtered = serviceMetrics.filter(m => m.timestamp > dayAgo);
919
+ this.metrics.set(service, filtered);
920
+
921
+ // Check for anomalies
922
+ this.detectAnomalies(service, metrics);
923
+ }
924
+
925
+ private detectAnomalies(service: string, current: PerformanceMetrics) {
926
+ const history = this.metrics.get(service) || [];
927
+ if (history.length < 10) return; // Need history for comparison
928
+
929
+ // Calculate baselines
930
+ const baseline = this.calculateBaseline(history.slice(-60)); // Last hour
931
+
932
+ // Check for anomalies
933
+ const anomalies = [];
934
+
935
+ if (current.responseTime > baseline.responseTime * 2) {
936
+ anomalies.push({
937
+ type: 'response_time_spike',
938
+ severity: 'warning',
939
+ value: current.responseTime,
940
+ baseline: baseline.responseTime
941
+ });
942
+ }
943
+
944
+ if (current.errorRate > baseline.errorRate + 0.05) {
945
+ anomalies.push({
946
+ type: 'error_rate_increase',
947
+ severity: 'critical',
948
+ value: current.errorRate,
949
+ baseline: baseline.errorRate
950
+ });
951
+ }
952
+
953
+ if (anomalies.length > 0) {
954
+ this.reportAnomalies(service, anomalies);
955
+ }
956
+ }
957
+
958
+ private calculateBaseline(history: PerformanceMetrics[]) {
959
+ const sum = history.reduce((acc, m) => ({
960
+ responseTime: acc.responseTime + m.responseTime,
961
+ errorRate: acc.errorRate + m.errorRate,
962
+ throughput: acc.throughput + m.throughput,
963
+ apdex: acc.apdex + m.apdex
964
+ }), {
965
+ responseTime: 0,
966
+ errorRate: 0,
967
+ throughput: 0,
968
+ apdex: 0
969
+ });
970
+
971
+ return {
972
+ responseTime: sum.responseTime / history.length,
973
+ errorRate: sum.errorRate / history.length,
974
+ throughput: sum.throughput / history.length,
975
+ apdex: sum.apdex / history.length
976
+ };
977
+ }
978
+
979
+ async calculateApdex(service: string, threshold: number = 500) {
980
+ // Apdex = (Satisfied + Tolerating/2) / Total
981
+ const satisfied = await this.countRequests(service, 0, threshold);
982
+ const tolerating = await this.countRequests(service, threshold, threshold * 4);
983
+ const total = await this.getTotalRequests(service);
984
+
985
+ if (total === 0) return 1;
986
+
987
+ return (satisfied + tolerating / 2) / total;
988
+ }
989
+ }
990
+ ```
991
+
992
+ ### 7. Error Recovery Strategies
993
+
994
+ Implement automatic error recovery:
995
+
996
+ **Recovery Manager**
997
+ ```javascript
998
+ // recovery-manager.js
999
+ class RecoveryManager {
1000
+ constructor(config) {
1001
+ this.strategies = new Map();
1002
+ this.retryPolicies = config.retryPolicies || {};
1003
+ this.circuitBreakers = new Map();
1004
+ this.registerDefaultStrategies();
1005
+ }
1006
+
1007
+ registerStrategy(errorType, strategy) {
1008
+ this.strategies.set(errorType, strategy);
1009
+ }
1010
+
1011
+ registerDefaultStrategies() {
1012
+ // Network errors
1013
+ this.registerStrategy('NetworkError', async (error, context) => {
1014
+ return this.retryWithBackoff(
1015
+ context.operation,
1016
+ this.retryPolicies.network || {
1017
+ maxRetries: 3,
1018
+ baseDelay: 1000,
1019
+ maxDelay: 10000
1020
+ }
1021
+ );
1022
+ });
1023
+
1024
+ // Database errors
1025
+ this.registerStrategy('DatabaseError', async (error, context) => {
1026
+ // Try read replica if available
1027
+ if (context.operation.type === 'read' && context.readReplicas) {
1028
+ return this.tryReadReplica(context);
1029
+ }
1030
+
1031
+ // Otherwise retry with backoff
1032
+ return this.retryWithBackoff(
1033
+ context.operation,
1034
+ this.retryPolicies.database || {
1035
+ maxRetries: 2,
1036
+ baseDelay: 500,
1037
+ maxDelay: 5000
1038
+ }
1039
+ );
1040
+ });
1041
+
1042
+ // Rate limit errors
1043
+ this.registerStrategy('RateLimitError', async (error, context) => {
1044
+ const retryAfter = error.retryAfter || 60;
1045
+ await this.delay(retryAfter * 1000);
1046
+ return context.operation();
1047
+ });
1048
+
1049
+ // Circuit breaker for external services
1050
+ this.registerStrategy('ExternalServiceError', async (error, context) => {
1051
+ const breaker = this.getCircuitBreaker(context.service);
1052
+
1053
+ try {
1054
+ return await breaker.execute(context.operation);
1055
+ } catch (error) {
1056
+ // Fallback to cache or default
1057
+ if (context.fallback) {
1058
+ return context.fallback();
1059
+ }
1060
+ throw error;
1061
+ }
1062
+ });
1063
+ }
1064
+
1065
+ async recover(error, context) {
1066
+ const errorType = this.classifyError(error);
1067
+ const strategy = this.strategies.get(errorType);
1068
+
1069
+ if (!strategy) {
1070
+ // No recovery strategy, rethrow
1071
+ throw error;
1072
+ }
1073
+
1074
+ try {
1075
+ const result = await strategy(error, context);
1076
+
1077
+ // Log recovery success
1078
+ this.logRecovery(error, errorType, 'success');
1079
+
1080
+ return result;
1081
+ } catch (recoveryError) {
1082
+ // Log recovery failure
1083
+ this.logRecovery(error, errorType, 'failure', recoveryError);
1084
+
1085
+ // Throw original error
1086
+ throw error;
1087
+ }
1088
+ }
1089
+
1090
+ async retryWithBackoff(operation, policy) {
1091
+ let lastError;
1092
+ let delay = policy.baseDelay;
1093
+
1094
+ for (let attempt = 0; attempt < policy.maxRetries; attempt++) {
1095
+ try {
1096
+ return await operation();
1097
+ } catch (error) {
1098
+ lastError = error;
1099
+
1100
+ if (attempt < policy.maxRetries - 1) {
1101
+ await this.delay(delay);
1102
+ delay = Math.min(delay * 2, policy.maxDelay);
1103
+ }
1104
+ }
1105
+ }
1106
+
1107
+ throw lastError;
1108
+ }
1109
+
1110
+ getCircuitBreaker(service) {
1111
+ if (!this.circuitBreakers.has(service)) {
1112
+ this.circuitBreakers.set(service, new CircuitBreaker({
1113
+ timeout: 3000,
1114
+ errorThresholdPercentage: 50,
1115
+ resetTimeout: 30000,
1116
+ rollingCountTimeout: 10000,
1117
+ rollingCountBuckets: 10,
1118
+ volumeThreshold: 10
1119
+ }));
1120
+ }
1121
+
1122
+ return this.circuitBreakers.get(service);
1123
+ }
1124
+
1125
+ classifyError(error) {
1126
+ // Classify by error code
1127
+ if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {
1128
+ return 'NetworkError';
1129
+ }
1130
+
1131
+ if (error.code === 'ER_LOCK_DEADLOCK' || error.code === 'SQLITE_BUSY') {
1132
+ return 'DatabaseError';
1133
+ }
1134
+
1135
+ if (error.status === 429) {
1136
+ return 'RateLimitError';
1137
+ }
1138
+
1139
+ if (error.isExternalService) {
1140
+ return 'ExternalServiceError';
1141
+ }
1142
+
1143
+ // Default
1144
+ return 'UnknownError';
1145
+ }
1146
+ }
1147
+
1148
+ // Circuit breaker implementation
1149
+ class CircuitBreaker {
1150
+ constructor(options) {
1151
+ this.options = options;
1152
+ this.state = 'CLOSED';
1153
+ this.failures = 0;
1154
+ this.successes = 0;
1155
+ this.nextAttempt = Date.now();
1156
+ }
1157
+
1158
+ async execute(operation) {
1159
+ if (this.state === 'OPEN') {
1160
+ if (Date.now() < this.nextAttempt) {
1161
+ throw new Error('Circuit breaker is OPEN');
1162
+ }
1163
+
1164
+ // Try half-open
1165
+ this.state = 'HALF_OPEN';
1166
+ }
1167
+
1168
+ try {
1169
+ const result = await Promise.race([
1170
+ operation(),
1171
+ this.timeout(this.options.timeout)
1172
+ ]);
1173
+
1174
+ this.onSuccess();
1175
+ return result;
1176
+ } catch (error) {
1177
+ this.onFailure();
1178
+ throw error;
1179
+ }
1180
+ }
1181
+
1182
+ onSuccess() {
1183
+ this.failures = 0;
1184
+
1185
+ if (this.state === 'HALF_OPEN') {
1186
+ this.successes++;
1187
+ if (this.successes >= this.options.volumeThreshold) {
1188
+ this.state = 'CLOSED';
1189
+ this.successes = 0;
1190
+ }
1191
+ }
1192
+ }
1193
+
1194
+ onFailure() {
1195
+ this.failures++;
1196
+
1197
+ if (this.state === 'HALF_OPEN') {
1198
+ this.state = 'OPEN';
1199
+ this.nextAttempt = Date.now() + this.options.resetTimeout;
1200
+ } else if (this.failures >= this.options.volumeThreshold) {
1201
+ this.state = 'OPEN';
1202
+ this.nextAttempt = Date.now() + this.options.resetTimeout;
1203
+ }
1204
+ }
1205
+ }
1206
+ ```
1207
+
1208
+ ### 8. Error Dashboard
1209
+
1210
+ Create comprehensive error dashboard:
1211
+
1212
+ **Dashboard Component**
1213
+ ```typescript
1214
+ // error-dashboard.tsx
1215
+ import React from 'react';
1216
+ import { LineChart, BarChart, PieChart } from 'recharts';
1217
+
1218
+ const ErrorDashboard: React.FC = () => {
1219
+ const [metrics, setMetrics] = useState<DashboardMetrics>();
1220
+ const [timeRange, setTimeRange] = useState('1h');
1221
+
1222
+ useEffect(() => {
1223
+ const fetchMetrics = async () => {
1224
+ const data = await getErrorMetrics(timeRange);
1225
+ setMetrics(data);
1226
+ };
1227
+
1228
+ fetchMetrics();
1229
+ const interval = setInterval(fetchMetrics, 30000); // Update every 30s
1230
+
1231
+ return () => clearInterval(interval);
1232
+ }, [timeRange]);
1233
+
1234
+ if (!metrics) return <Loading />;
1235
+
1236
+ return (
1237
+ <div className="error-dashboard">
1238
+ <Header>
1239
+ <h1>Error Tracking Dashboard</h1>
1240
+ <TimeRangeSelector
1241
+ value={timeRange}
1242
+ onChange={setTimeRange}
1243
+ options={['1h', '6h', '24h', '7d', '30d']}
1244
+ />
1245
+ </Header>
1246
+
1247
+ <MetricCards>
1248
+ <MetricCard
1249
+ title="Error Rate"
1250
+ value={`${(metrics.errorRate * 100).toFixed(2)}%`}
1251
+ trend={metrics.errorRateTrend}
1252
+ status={metrics.errorRate > 0.05 ? 'critical' : 'ok'}
1253
+ />
1254
+ <MetricCard
1255
+ title="Total Errors"
1256
+ value={metrics.totalErrors.toLocaleString()}
1257
+ trend={metrics.errorsTrend}
1258
+ />
1259
+ <MetricCard
1260
+ title="Affected Users"
1261
+ value={metrics.affectedUsers.toLocaleString()}
1262
+ trend={metrics.usersTrend}
1263
+ />
1264
+ <MetricCard
1265
+ title="MTTR"
1266
+ value={formatDuration(metrics.mttr)}
1267
+ trend={metrics.mttrTrend}
1268
+ />
1269
+ </MetricCards>
1270
+
1271
+ <ChartGrid>
1272
+ <ChartCard title="Error Trend">
1273
+ <LineChart data={metrics.errorTrend}>
1274
+ <Line
1275
+ type="monotone"
1276
+ dataKey="errors"
1277
+ stroke="#ff6b6b"
1278
+ strokeWidth={2}
1279
+ />
1280
+ <Line
1281
+ type="monotone"
1282
+ dataKey="warnings"
1283
+ stroke="#ffd93d"
1284
+ strokeWidth={2}
1285
+ />
1286
+ </LineChart>
1287
+ </ChartCard>
1288
+
1289
+ <ChartCard title="Error Distribution">
1290
+ <PieChart data={metrics.errorDistribution}>
1291
+ <Pie
1292
+ dataKey="count"
1293
+ nameKey="type"
1294
+ cx="50%"
1295
+ cy="50%"
1296
+ outerRadius={80}
1297
+ />
1298
+ </PieChart>
1299
+ </ChartCard>
1300
+
1301
+ <ChartCard title="Top Errors">
1302
+ <BarChart data={metrics.topErrors}>
1303
+ <Bar dataKey="count" fill="#ff6b6b" />
1304
+ </BarChart>
1305
+ </ChartCard>
1306
+
1307
+ <ChartCard title="Error Heatmap">
1308
+ <ErrorHeatmap data={metrics.errorHeatmap} />
1309
+ </ChartCard>
1310
+ </ChartGrid>
1311
+
1312
+ <ErrorList>
1313
+ <h2>Recent Errors</h2>
1314
+ <ErrorTable
1315
+ errors={metrics.recentErrors}
1316
+ onErrorClick={handleErrorClick}
1317
+ />
1318
+ </ErrorList>
1319
+
1320
+ <AlertsSection>
1321
+ <h2>Active Alerts</h2>
1322
+ <AlertsList alerts={metrics.activeAlerts} />
1323
+ </AlertsSection>
1324
+ </div>
1325
+ );
1326
+ };
1327
+
1328
+ // Real-time error stream
1329
+ const ErrorStream: React.FC = () => {
1330
+ const [errors, setErrors] = useState<ErrorEvent[]>([]);
1331
+
1332
+ useEffect(() => {
1333
+ const eventSource = new EventSource('/api/errors/stream');
1334
+
1335
+ eventSource.onmessage = (event) => {
1336
+ const error = JSON.parse(event.data);
1337
+ setErrors(prev => [error, ...prev].slice(0, 100));
1338
+ };
1339
+
1340
+ return () => eventSource.close();
1341
+ }, []);
1342
+
1343
+ return (
1344
+ <div className="error-stream">
1345
+ <h3>Live Error Stream</h3>
1346
+ <div className="stream-container">
1347
+ {errors.map((error, index) => (
1348
+ <ErrorStreamItem
1349
+ key={error.id}
1350
+ error={error}
1351
+ isNew={index === 0}
1352
+ />
1353
+ ))}
1354
+ </div>
1355
+ </div>
1356
+ );
1357
+ };
1358
+ ```
1359
+
1360
+ ## Output Format
1361
+
1362
+ 1. **Error Tracking Analysis**: Current error handling assessment
1363
+ 2. **Integration Configuration**: Setup for error tracking services
1364
+ 3. **Logging Implementation**: Structured logging setup
1365
+ 4. **Alert Rules**: Intelligent alerting configuration
1366
+ 5. **Error Grouping**: Deduplication and grouping logic
1367
+ 6. **Recovery Strategies**: Automatic error recovery implementation
1368
+ 7. **Dashboard Setup**: Real-time error monitoring dashboard
1369
+ 8. **Documentation**: Implementation and troubleshooting guide
1370
+
1371
+ Focus on providing comprehensive error visibility, intelligent alerting, and quick error resolution capabilities.