blockmine 1.21.0 → 1.22.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 (433) hide show
  1. package/.claude/agents/README.md +469 -0
  2. package/.claude/agents/auth-route-debugger.md +118 -0
  3. package/.claude/agents/auth-route-tester.md +93 -0
  4. package/.claude/agents/auto-error-resolver.md +97 -0
  5. package/.claude/agents/build-optimizer.md +236 -0
  6. package/.claude/agents/code-architecture-reviewer.md +83 -0
  7. package/.claude/agents/code-refactor-master.md +94 -0
  8. package/.claude/agents/cost-optimizer.md +134 -0
  9. package/.claude/agents/deployment-orchestrator.md +113 -0
  10. package/.claude/agents/documentation-architect.md +82 -0
  11. package/.claude/agents/frontend-error-fixer.md +77 -0
  12. package/.claude/agents/iac-code-generator.md +71 -0
  13. package/.claude/agents/incident-responder.md +346 -0
  14. package/.claude/agents/infrastructure-architect.md +31 -0
  15. package/.claude/agents/kubernetes-specialist.md +56 -0
  16. package/.claude/agents/migration-planner.md +181 -0
  17. package/.claude/agents/network-architect.md +196 -0
  18. package/.claude/agents/plan-reviewer.md +52 -0
  19. package/.claude/agents/refactor-planner.md +63 -0
  20. package/.claude/agents/security-scanner.md +102 -0
  21. package/.claude/agents/web-research-specialist.md +78 -0
  22. package/.claude/commands/cost-analysis.md +315 -0
  23. package/.claude/commands/dev-docs-update.md +55 -0
  24. package/.claude/commands/dev-docs.md +51 -0
  25. package/.claude/commands/incident-debug.md +247 -0
  26. package/.claude/commands/infra-plan.md +81 -0
  27. package/.claude/commands/migration-plan.md +478 -0
  28. package/.claude/commands/route-research-for-testing.md +37 -0
  29. package/.claude/commands/security-review.md +66 -0
  30. package/.claude/hooks/CONFIG.md +448 -0
  31. package/.claude/hooks/README.md +163 -0
  32. package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
  33. package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
  34. package/.claude/hooks/add-skill-activation-banners.ts +132 -0
  35. package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
  36. package/.claude/hooks/error-handling-reminder.sh +12 -0
  37. package/.claude/hooks/error-handling-reminder.ts +222 -0
  38. package/.claude/hooks/k8s-manifest-validator.sh +56 -0
  39. package/.claude/hooks/package-lock.json +556 -0
  40. package/.claude/hooks/package.json +16 -0
  41. package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
  42. package/.claude/hooks/post-tool-use-tracker.sh +183 -0
  43. package/.claude/hooks/security-policy-check.sh +247 -0
  44. package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
  45. package/.claude/hooks/skill-activation-prompt.sh +10 -0
  46. package/.claude/hooks/skill-activation-prompt.ts +141 -0
  47. package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
  48. package/.claude/hooks/terraform-validator.sh +53 -0
  49. package/.claude/hooks/test-input.json +7 -0
  50. package/.claude/hooks/test-skill-activation.ts +427 -0
  51. package/.claude/hooks/trigger-build-resolver.sh +79 -0
  52. package/.claude/hooks/tsc-check.sh +173 -0
  53. package/.claude/hooks/tsconfig.json +19 -0
  54. package/.claude/settings.json +55 -0
  55. package/.claude/settings.local.json +27 -14
  56. package/.claude/skills/README.md +507 -0
  57. package/.claude/skills/api-engineering/SKILL.md +63 -0
  58. package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
  59. package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
  60. package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
  61. package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
  62. package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
  63. package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
  64. package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
  65. package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
  66. package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
  67. package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
  68. package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
  69. package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
  70. package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
  71. package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
  72. package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
  73. package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
  74. package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
  75. package/.claude/skills/build-engineering/SKILL.md +431 -0
  76. package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
  77. package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
  78. package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
  79. package/.claude/skills/build-engineering/resources/build-security.md +95 -0
  80. package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
  81. package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
  82. package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
  83. package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
  84. package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
  85. package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
  86. package/.claude/skills/cloud-engineering/SKILL.md +675 -0
  87. package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
  88. package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
  89. package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
  90. package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
  91. package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
  92. package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
  93. package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
  94. package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
  95. package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
  96. package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
  97. package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
  98. package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
  99. package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
  100. package/.claude/skills/cybersecurity/SKILL.md +409 -0
  101. package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
  102. package/.claude/skills/database-engineering/SKILL.md +61 -0
  103. package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
  104. package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
  105. package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
  106. package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
  107. package/.claude/skills/devsecops/SKILL.md +374 -0
  108. package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
  109. package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
  110. package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
  111. package/.claude/skills/devsecops/resources/container-security.md +915 -0
  112. package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
  113. package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
  114. package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
  115. package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
  116. package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
  117. package/.claude/skills/devsecops/resources/security-testing.md +203 -0
  118. package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
  119. package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
  120. package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
  121. package/.claude/skills/documentation-as-code/SKILL.md +323 -0
  122. package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
  123. package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
  124. package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
  125. package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
  126. package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
  127. package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
  128. package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
  129. package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
  130. package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
  131. package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
  132. package/.claude/skills/engineering-management/SKILL.md +356 -0
  133. package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
  134. package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
  135. package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
  136. package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
  137. package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
  138. package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
  139. package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
  140. package/.claude/skills/error-tracking/SKILL.md +379 -0
  141. package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
  142. package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  143. package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  144. package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  145. package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  146. package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
  147. package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  148. package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
  149. package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  150. package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  151. package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  152. package/.claude/skills/general-it-engineering/SKILL.md +393 -0
  153. package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
  154. package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
  155. package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
  156. package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
  157. package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
  158. package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
  159. package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
  160. package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
  161. package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
  162. package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
  163. package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
  164. package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
  165. package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
  166. package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
  167. package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
  168. package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
  169. package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
  170. package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
  171. package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
  172. package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
  173. package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
  174. package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
  175. package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
  176. package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
  177. package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
  178. package/.claude/skills/network-engineering/SKILL.md +385 -0
  179. package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
  180. package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
  181. package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
  182. package/.claude/skills/network-engineering/resources/network-security.md +921 -0
  183. package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
  184. package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
  185. package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
  186. package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
  187. package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
  188. package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
  189. package/.claude/skills/observability-engineering/SKILL.md +101 -0
  190. package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
  191. package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
  192. package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
  193. package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
  194. package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
  195. package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
  196. package/.claude/skills/platform-engineering/SKILL.md +555 -0
  197. package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
  198. package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
  199. package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
  200. package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
  201. package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
  202. package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
  203. package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
  204. package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
  205. package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
  206. package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
  207. package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
  208. package/.claude/skills/release-engineering/SKILL.md +393 -0
  209. package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
  210. package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
  211. package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
  212. package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
  213. package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
  214. package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
  215. package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
  216. package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
  217. package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
  218. package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
  219. package/.claude/skills/route-tester/SKILL.md +392 -0
  220. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  221. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  222. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  223. package/.claude/skills/skill-developer/SKILL.md +430 -0
  224. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  225. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  226. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  227. package/.claude/skills/skill-rules.json +2940 -0
  228. package/.claude/skills/sre/SKILL.md +464 -0
  229. package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
  230. package/.claude/skills/sre/resources/capacity-planning.md +226 -0
  231. package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
  232. package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
  233. package/.claude/skills/sre/resources/incident-management.md +436 -0
  234. package/.claude/skills/sre/resources/observability-stack.md +240 -0
  235. package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
  236. package/.claude/skills/sre/resources/performance-optimization.md +108 -0
  237. package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
  238. package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
  239. package/.claude/skills/sre/resources/toil-reduction.md +145 -0
  240. package/.claude/skills/systems-engineering/SKILL.md +648 -0
  241. package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
  242. package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
  243. package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
  244. package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
  245. package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
  246. package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
  247. package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
  248. package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
  249. package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
  250. package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
  251. package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
  252. package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
  253. package/.claude/skills/technical-leadership/SKILL.md +728 -0
  254. package/CHANGELOG.md +90 -54
  255. package/README.md +94 -0
  256. package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
  257. package/backend/jest.config.js +59 -0
  258. package/backend/package-lock.json +6129 -0
  259. package/backend/package.json +16 -4
  260. package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
  261. package/backend/prisma/schema.prisma +33 -0
  262. package/backend/src/__tests__/core/DependencyService.test.js +336 -0
  263. package/backend/src/__tests__/core/UserService.test.js +875 -0
  264. package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
  265. package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
  266. package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
  267. package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
  268. package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
  269. package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
  270. package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
  271. package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
  272. package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
  273. package/backend/src/__tests__/secretsFilter.test.js +425 -0
  274. package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
  275. package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
  276. package/backend/src/__tests__/services/CacheManager.test.js +125 -0
  277. package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
  278. package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
  279. package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
  280. package/backend/src/__tests__/setup.js +25 -0
  281. package/backend/src/api/routes/apiKeys.js +181 -0
  282. package/backend/src/api/routes/bots.js +49 -7
  283. package/backend/src/api/routes/plugins.js +2 -1
  284. package/backend/src/api/routes/system.js +174 -0
  285. package/backend/src/container.js +82 -0
  286. package/backend/src/core/BotManager.js +142 -871
  287. package/backend/src/core/BotManager.old.js +1093 -0
  288. package/backend/src/core/BotProcess.js +1092 -858
  289. package/backend/src/core/EventGraphManager.js +280 -198
  290. package/backend/src/core/GraphExecutionEngine.js +321 -325
  291. package/backend/src/core/MessageQueue.js +27 -6
  292. package/backend/src/core/NodeRegistry.js +37 -1134
  293. package/backend/src/core/PluginManager.js +62 -12
  294. package/backend/src/core/PrismaService.js +32 -0
  295. package/backend/src/core/UserService.js +3 -3
  296. package/backend/src/core/__tests__/PrismaService.test.js +24 -0
  297. package/backend/src/core/commands/README.md +305 -0
  298. package/backend/src/core/commands/dev.js +13 -7
  299. package/backend/src/core/commands/ping.js +10 -4
  300. package/backend/src/core/commands/whois.js +63 -0
  301. package/backend/src/core/config/validation.js +27 -0
  302. package/backend/src/core/constants/graphTypes.js +21 -0
  303. package/backend/src/core/node-registries/actions.js +132 -0
  304. package/backend/src/core/node-registries/arrays.js +137 -0
  305. package/backend/src/core/node-registries/bot.js +23 -0
  306. package/backend/src/core/node-registries/data.js +290 -0
  307. package/backend/src/core/node-registries/debug.js +26 -0
  308. package/backend/src/core/node-registries/events.js +187 -0
  309. package/backend/src/core/node-registries/flow.js +139 -0
  310. package/backend/src/core/node-registries/logic.js +45 -0
  311. package/backend/src/core/node-registries/math.js +42 -0
  312. package/backend/src/core/node-registries/objects.js +98 -0
  313. package/backend/src/core/node-registries/strings.js +153 -0
  314. package/backend/src/core/node-registries/time.js +113 -0
  315. package/backend/src/core/node-registries/users.js +79 -0
  316. package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
  317. package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
  318. package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
  319. package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
  320. package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
  321. package/backend/src/core/nodes/arrays/get_next.js +35 -0
  322. package/backend/src/core/nodes/{data_cast.js → data/cast.js} +8 -0
  323. package/backend/src/core/nodes/data/datetime_literal.js +27 -0
  324. package/backend/src/core/nodes/data/entity_info.js +69 -0
  325. package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
  326. package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
  327. package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
  328. package/backend/src/core/nodes/data/type_check.js +53 -0
  329. package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
  330. package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
  331. package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
  332. package/backend/src/core/nodes/flow/delay.js +43 -0
  333. package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
  334. package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
  335. package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
  336. package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
  337. package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
  338. package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
  339. package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
  340. package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
  341. package/backend/src/core/nodes/time/add.js +33 -0
  342. package/backend/src/core/nodes/time/compare.js +35 -0
  343. package/backend/src/core/nodes/time/diff.js +29 -0
  344. package/backend/src/core/nodes/time/format.js +32 -0
  345. package/backend/src/core/nodes/time/now.js +18 -0
  346. package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
  347. package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
  348. package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
  349. package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
  350. package/backend/src/core/services/BotLifecycleService.js +596 -0
  351. package/backend/src/core/services/BotProcessManager.js +163 -0
  352. package/backend/src/core/services/CacheManager.js +111 -0
  353. package/backend/src/core/services/CommandExecutionService.js +351 -0
  354. package/backend/src/core/services/ResourceMonitorService.js +90 -0
  355. package/backend/src/core/services/TelemetryService.js +124 -0
  356. package/backend/src/core/services/ValidationService.js +132 -0
  357. package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
  358. package/backend/src/core/services.js +20 -5
  359. package/backend/src/core/system/CommandContext.js +84 -0
  360. package/backend/src/core/system/Transport.js +78 -0
  361. package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
  362. package/backend/src/core/utils/jsonParser.js +18 -0
  363. package/backend/src/core/utils/secretsFilter.js +262 -0
  364. package/backend/src/core/utils/variableParser.js +89 -0
  365. package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
  366. package/backend/src/core/validation/nodeSchemas.js +112 -0
  367. package/backend/src/lib/prisma.js +2 -4
  368. package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
  369. package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
  370. package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
  371. package/backend/src/real-time/botApi/handlers/index.js +43 -0
  372. package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
  373. package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
  374. package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
  375. package/backend/src/real-time/botApi/index.js +40 -0
  376. package/backend/src/real-time/botApi/middleware.js +79 -0
  377. package/backend/src/real-time/botApi/utils.js +54 -0
  378. package/backend/src/real-time/socketHandler.js +6 -2
  379. package/backend/src/repositories/BaseRepository.js +43 -0
  380. package/backend/src/repositories/BotRepository.js +42 -0
  381. package/backend/src/repositories/CommandRepository.js +53 -0
  382. package/backend/src/repositories/EventGraphRepository.js +40 -0
  383. package/backend/src/repositories/GroupRepository.js +69 -0
  384. package/backend/src/repositories/PermissionRepository.js +48 -0
  385. package/backend/src/repositories/PluginRepository.js +42 -0
  386. package/backend/src/repositories/ServerRepository.js +27 -0
  387. package/backend/src/repositories/UserRepository.js +48 -0
  388. package/backend/src/server.js +3 -0
  389. package/backend/src/test-refactor.js +85 -0
  390. package/frontend/dist/assets/index-CfTo92bP.css +1 -0
  391. package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
  392. package/frontend/dist/index.html +2 -2
  393. package/frontend/package.json +0 -5
  394. package/package.json +2 -1
  395. package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
  396. package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
  397. package/nul +0 -0
  398. /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
  399. /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
  400. /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
  401. /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
  402. /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
  403. /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
  404. /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
  405. /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
  406. /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
  407. /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
  408. /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
  409. /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
  410. /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
  411. /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
  412. /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
  413. /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
  414. /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
  415. /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
  416. /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
  417. /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
  418. /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
  419. /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
  420. /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
  421. /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
  422. /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
  423. /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
  424. /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
  425. /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
  426. /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
  427. /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
  428. /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
  429. /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
  430. /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
  431. /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
  432. /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
  433. /package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +0 -0
@@ -0,0 +1,101 @@
1
+ # Observability Engineering
2
+
3
+ Deep dive into distributed tracing, APM tools, OpenTelemetry, logs aggregation, and observability best practices.
4
+
5
+ ## Purpose
6
+
7
+ Enable teams to gain deep visibility into distributed systems with comprehensive observability practices beyond basic monitoring.
8
+
9
+ ## When to Use This Skill
10
+
11
+ Automatically activates when working on:
12
+ - Distributed tracing (Jaeger, Tempo, Zipkin)
13
+ - OpenTelemetry instrumentation
14
+ - APM tools (DataDog, New Relic, Dynatrace)
15
+ - Logs aggregation (ELK, Loki)
16
+ - Correlation strategies (trace IDs, unified observability)
17
+ - Service mesh observability
18
+ - Observability cost optimization
19
+
20
+ ## Quick Start Checklist
21
+
22
+ - [ ] Instrument application with OpenTelemetry
23
+ - [ ] Set up distributed tracing backend
24
+ - [ ] Configure logs aggregation
25
+ - [ ] Implement correlation (trace IDs across logs/metrics/traces)
26
+ - [ ] Set up APM dashboards
27
+ - [ ] Configure sampling strategies
28
+ - [ ] Monitor observability costs
29
+ - [ ] Create SLO-based alerts
30
+
31
+ ## Core Concepts
32
+
33
+ ### Three Pillars of Observability
34
+
35
+ ```
36
+ Logs: What happened (events)
37
+ Metrics: How much (counters, gauges)
38
+ Traces: Where time was spent (distributed request flow)
39
+ ```
40
+
41
+ ### OpenTelemetry
42
+
43
+ ```typescript
44
+ import { trace, context } from '@opentelemetry/api';
45
+
46
+ const tracer = trace.getTracer('my-service');
47
+
48
+ async function handleRequest(req, res) {
49
+ const span = tracer.startSpan('handleRequest');
50
+
51
+ try {
52
+ const user = await fetchUser(req.userId);
53
+ span.setAttribute('user.id', user.id);
54
+
55
+ const result = await processData(user);
56
+ res.json(result);
57
+ } finally {
58
+ span.end();
59
+ }
60
+ }
61
+ ```
62
+
63
+ ## Resource Files
64
+
65
+ ### Tracing & APM
66
+ - **[distributed-tracing.md](resources/distributed-tracing.md)** - Jaeger, Tempo, trace propagation, span design
67
+ - **[opentelemetry.md](resources/opentelemetry.md)** - OTEL SDK, auto-instrumentation, collectors, exporters
68
+ - **[apm-tools.md](resources/apm-tools.md)** - DataDog, New Relic, Dynatrace comparison
69
+
70
+ ### Logs & Correlation
71
+ - **[logs-aggregation.md](resources/logs-aggregation.md)** - ELK Stack, Loki, structured logging
72
+ - **[correlation-strategies.md](resources/correlation-strategies.md)** - Trace IDs, unified observability
73
+
74
+ ### Cost & Best Practices
75
+ - **[observability-cost-optimization.md](resources/observability-cost-optimization.md)** - Sampling, retention, cost strategies
76
+
77
+ ## Best Practices
78
+
79
+ ✅ Use OpenTelemetry (vendor-neutral)
80
+ ✅ Implement structured logging
81
+ ✅ Correlate logs/metrics/traces (trace IDs)
82
+ ✅ Sample intelligently (head-based, tail-based)
83
+ ✅ Monitor observability costs
84
+ ✅ Create dashboards from traces
85
+ ✅ Use service mesh for automatic instrumentation
86
+
87
+ ## Integration Points
88
+
89
+ - **sre**: Monitoring and alerting
90
+ - **devsecops**: Security monitoring
91
+ - **platform-engineering**: Service mesh observability
92
+ - **backend-dev-guidelines**: Application instrumentation
93
+
94
+ ---
95
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
96
+ 🎯 SKILL ACTIVATED: observability-engineering
97
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
98
+
99
+
100
+ **Total Resources:** 6 focused guides on observability engineering
101
+ **Focus:** Distributed tracing, OpenTelemetry, APM, cost optimization
@@ -0,0 +1,97 @@
1
+ # APM Tools
2
+
3
+ Comparison and guide to Application Performance Monitoring tools: DataDog, New Relic, Dynatrace.
4
+
5
+ ## DataDog
6
+
7
+ ```typescript
8
+ // DataDog APM
9
+ import tracer from 'dd-trace';
10
+ tracer.init({
11
+ service: 'my-app',
12
+ env: 'production',
13
+ version: '1.0.0',
14
+ });
15
+
16
+ // Auto-instruments Express, Prisma, Redis, etc.
17
+ ```
18
+
19
+ **Pros:**
20
+ - ✅ Easy setup (auto-instrumentation)
21
+ - ✅ Unified logs/metrics/traces
22
+ - ✅ Great dashboards
23
+ - ✅ APM + infrastructure monitoring
24
+
25
+ **Cons:**
26
+ - ❌ Expensive at scale
27
+ - ❌ Vendor lock-in
28
+
29
+ ## New Relic
30
+
31
+ ```javascript
32
+ // newrelic.js
33
+ exports.config = {
34
+ app_name: ['My App'],
35
+ license_key: process.env.NEW_RELIC_LICENSE_KEY,
36
+ distributed_tracing: {
37
+ enabled: true,
38
+ },
39
+ };
40
+
41
+ // Load before app
42
+ require('newrelic');
43
+ const app = require('./app');
44
+ ```
45
+
46
+ **Pros:**
47
+ - ✅ Powerful query language (NRQL)
48
+ - ✅ Good for complex architectures
49
+ - ✅ Real-time alerting
50
+
51
+ **Cons:**
52
+ - ❌ Steeper learning curve
53
+ - ❌ Can be expensive
54
+
55
+ ## Dynatrace
56
+
57
+ ```
58
+ Dynatrace OneAgent (auto-deploys)
59
+ - No code changes required
60
+ - Full-stack monitoring
61
+ ```
62
+
63
+ **Pros:**
64
+ - ✅ AI-powered root cause analysis
65
+ - ✅ Zero-code instrumentation
66
+ - ✅ Enterprise features
67
+
68
+ **Cons:**
69
+ - ❌ Most expensive
70
+ - ❌ Overkill for small teams
71
+
72
+ ## Cost Comparison
73
+
74
+ ```
75
+ Small team (5 services, 1M spans/month):
76
+ - DataDog: ~$500/month
77
+ - New Relic: ~$400/month
78
+ - Dynatrace: ~$800/month
79
+
80
+ Large team (50 services, 100M spans/month):
81
+ - DataDog: ~$5,000/month
82
+ - New Relic: ~$4,000/month
83
+ - Dynatrace: ~$10,000/month
84
+ ```
85
+
86
+ ## Open Source Alternative
87
+
88
+ ```
89
+ Jaeger + Prometheus + Grafana = $0
90
+ (but requires self-hosting and maintenance)
91
+ ```
92
+
93
+ ---
94
+
95
+ **Related Resources:**
96
+ - observability-cost-optimization.md - Cost management
97
+ - opentelemetry.md - Vendor-neutral instrumentation
@@ -0,0 +1,87 @@
1
+ # Correlation Strategies
2
+
3
+ Guide to correlating logs, metrics, and traces for unified observability.
4
+
5
+ ## Trace ID Propagation
6
+
7
+ ```typescript
8
+ import { trace, context } from '@opentelemetry/api';
9
+ import { logger } from './logger';
10
+
11
+ app.use((req, res, next) => {
12
+ const span = trace.getActiveSpan();
13
+ const traceId = span?.spanContext().traceId;
14
+
15
+ // Attach trace ID to logger context
16
+ req.logger = logger.child({ traceId });
17
+
18
+ next();
19
+ });
20
+
21
+ app.get('/users/:id', async (req, res) => {
22
+ req.logger.info('Fetching user', { userId: req.params.id });
23
+ // Log includes traceId automatically
24
+
25
+ const user = await getUser(req.params.id);
26
+ res.json(user);
27
+ });
28
+ ```
29
+
30
+ ## Unified Observability
31
+
32
+ ```
33
+ Request arrives:
34
+ 1. Generate trace ID
35
+ 2. Create span (trace)
36
+ 3. Emit metrics (counter, histogram)
37
+ 4. Log with trace ID
38
+
39
+ All three pillars linked by trace ID:
40
+ - Logs: {"traceId": "abc123", "message": "User fetched"}
41
+ - Metrics: user_requests_total{trace_id="abc123"}
42
+ - Traces: Trace abc123 shows spans
43
+ ```
44
+
45
+ ## Correlation in Practice
46
+
47
+ ```typescript
48
+ // 1. Start span (tracing)
49
+ const span = tracer.startSpan('handleRequest');
50
+ const traceId = span.spanContext().traceId;
51
+
52
+ // 2. Log with trace ID (logs)
53
+ logger.info('Processing request', { traceId, userId: req.userId });
54
+
55
+ // 3. Increment metric (metrics)
56
+ requestCounter.add(1, { traceId, endpoint: '/users' });
57
+
58
+ // 4. All linked by traceId
59
+ span.end();
60
+ ```
61
+
62
+ ## Querying Across Pillars
63
+
64
+ ```
65
+ # Find all logs for a trace
66
+ traceId:"abc123"
67
+
68
+ # Find traces with errors
69
+ status:error AND service:"user-service"
70
+
71
+ # Find metrics for specific trace
72
+ trace_id="abc123" AND metric="http_request_duration"
73
+ ```
74
+
75
+ ## Best Practices
76
+
77
+ ✅ Always propagate trace IDs
78
+ ✅ Include trace IDs in all logs
79
+ ✅ Use trace IDs in metric labels (when cardinality allows)
80
+ ✅ Link dashboards (click log → view trace)
81
+ ✅ Standardize field names (traceId, spanId)
82
+
83
+ ---
84
+
85
+ **Related Resources:**
86
+ - distributed-tracing.md - Trace propagation
87
+ - logs-aggregation.md - Structured logging with trace IDs
@@ -0,0 +1,98 @@
1
+ # Distributed Tracing
2
+
3
+ Guide to implementing distributed tracing with Jaeger, Tempo, and other tools.
4
+
5
+ ## What is Distributed Tracing?
6
+
7
+ Tracks requests as they flow through microservices:
8
+
9
+ ```
10
+ User Request
11
+
12
+ API Gateway (span 1) ──→ 50ms
13
+
14
+ User Service (span 2) ──→ 20ms
15
+
16
+ Database (span 3) ──────→ 80ms
17
+ Total: 150ms
18
+
19
+ Trace shows:
20
+ - Total request time: 150ms
21
+ - Database was bottleneck: 80ms (53%)
22
+ ```
23
+
24
+ ## Jaeger Setup
25
+
26
+ ```yaml
27
+ # docker-compose.yml
28
+ version: '3'
29
+ services:
30
+ jaeger:
31
+ image: jaegertracing/all-in-one:latest
32
+ ports:
33
+ - "16686:16686" # UI
34
+ - "14268:14268" # HTTP collector
35
+ - "6831:6831/udp" # Agent
36
+ ```
37
+
38
+ ## Instrumentation
39
+
40
+ ```typescript
41
+ import { trace, context, SpanStatusCode } from '@opentelemetry/api';
42
+
43
+ const tracer = trace.getTracer('user-service');
44
+
45
+ async function getUser(userId: string) {
46
+ const span = tracer.startSpan('getUser');
47
+ span.setAttribute('user.id', userId);
48
+
49
+ try {
50
+ const user = await db.users.findUnique({ where: { id: userId } });
51
+ span.setStatus({ code: SpanStatusCode.OK });
52
+ return user;
53
+ } catch (error) {
54
+ span.setStatus({
55
+ code: SpanStatusCode.ERROR,
56
+ message: error.message
57
+ });
58
+ span.recordException(error);
59
+ throw error;
60
+ } finally {
61
+ span.end();
62
+ }
63
+ }
64
+ ```
65
+
66
+ ## Trace Propagation
67
+
68
+ ```typescript
69
+ // Service A creates trace
70
+ const span = tracer.startSpan('callServiceB');
71
+ const headers = {};
72
+
73
+ // Inject trace context into headers
74
+ propagation.inject(context.active(), headers);
75
+
76
+ // Call Service B with trace context
77
+ await fetch('http://service-b/api', { headers });
78
+
79
+ span.end();
80
+
81
+ // Service B continues the trace
82
+ const extractedContext = propagation.extract(context.active(), req.headers);
83
+ const span = tracer.startSpan('handleRequest', {}, extractedContext);
84
+ ```
85
+
86
+ ## Best Practices
87
+
88
+ ✅ Trace critical paths
89
+ ✅ Add meaningful attributes
90
+ ✅ Sample high-volume endpoints
91
+ ✅ Keep span names consistent
92
+ ✅ Record errors in spans
93
+
94
+ ---
95
+
96
+ **Related Resources:**
97
+ - opentelemetry.md - OTEL implementation
98
+ - correlation-strategies.md - Trace ID usage
@@ -0,0 +1,118 @@
1
+ # Logs Aggregation
2
+
3
+ Guide to ELK Stack, Loki, and structured logging for centralized log management.
4
+
5
+ ## ELK Stack (Elasticsearch, Logstash, Kibana)
6
+
7
+ ```yaml
8
+ # docker-compose.yml
9
+ version: '3'
10
+ services:
11
+ elasticsearch:
12
+ image: elasticsearch:8.11.0
13
+ environment:
14
+ - discovery.type=single-node
15
+ ports:
16
+ - "9200:9200"
17
+
18
+ logstash:
19
+ image: logstash:8.11.0
20
+ volumes:
21
+ - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
22
+
23
+ kibana:
24
+ image: kibana:8.11.0
25
+ ports:
26
+ - "5601:5601"
27
+ ```
28
+
29
+ ## Structured Logging
30
+
31
+ ```typescript
32
+ import winston from 'winston';
33
+
34
+ const logger = winston.createLogger({
35
+ format: winston.format.json(),
36
+ transports: [
37
+ new winston.transports.Console(),
38
+ ],
39
+ });
40
+
41
+ logger.info('User logged in', {
42
+ userId: 'user-123',
43
+ ipAddress: req.ip,
44
+ traceId: span.spanContext().traceId, // Correlation
45
+ timestamp: new Date().toISOString(),
46
+ });
47
+
48
+ // Output:
49
+ // {"level":"info","message":"User logged in","userId":"user-123","traceId":"abc123",...}
50
+ ```
51
+
52
+ ## Grafana Loki
53
+
54
+ ```yaml
55
+ # loki-config.yaml
56
+ auth_enabled: false
57
+
58
+ server:
59
+ http_listen_port: 3100
60
+
61
+ ingester:
62
+ lifecycler:
63
+ ring:
64
+ kvstore:
65
+ store: inmemory
66
+ replication_factor: 1
67
+
68
+ schema_config:
69
+ configs:
70
+ - from: 2020-10-24
71
+ store: boltdb-shipper
72
+ object_store: s3
73
+ schema: v11
74
+ ```
75
+
76
+ ```typescript
77
+ // Ship logs to Loki
78
+ import Pino from 'pino';
79
+
80
+ const logger = Pino({
81
+ transport: {
82
+ target: 'pino-loki',
83
+ options: {
84
+ batching: true,
85
+ interval: 5,
86
+ host: 'http://loki:3100',
87
+ labels: {
88
+ service: 'my-app',
89
+ env: 'production',
90
+ },
91
+ },
92
+ },
93
+ });
94
+ ```
95
+
96
+ ## Log Levels
97
+
98
+ ```typescript
99
+ logger.error('Payment failed', { orderId: '123', error: err.message });
100
+ logger.warn('High memory usage', { memoryMB: 850 });
101
+ logger.info('User registered', { userId: 'user-456' });
102
+ logger.debug('Cache miss', { key: 'user:123' });
103
+ ```
104
+
105
+ ## Best Practices
106
+
107
+ ✅ Use structured logging (JSON)
108
+ ✅ Include trace IDs for correlation
109
+ ✅ Log at appropriate levels
110
+ ✅ Avoid logging sensitive data (PII, passwords)
111
+ ✅ Set retention policies (30-90 days)
112
+ ✅ Index important fields
113
+
114
+ ---
115
+
116
+ **Related Resources:**
117
+ - correlation-strategies.md - Linking logs with traces
118
+ - observability-cost-optimization.md - Log retention costs
@@ -0,0 +1,141 @@
1
+ # Observability Cost Optimization
2
+
3
+ Guide to managing observability costs through sampling, retention policies, and efficient practices.
4
+
5
+ ## Sampling Strategies
6
+
7
+ ### Head-Based Sampling
8
+ ```typescript
9
+ // Sample 10% of traces
10
+ const sampler = new TraceIdRatioBasedSampler(0.1);
11
+
12
+ const sdk = new NodeSDK({
13
+ sampler,
14
+ // ...
15
+ });
16
+
17
+ // Pros: Simple, predictable cost
18
+ // Cons: May miss rare errors
19
+ ```
20
+
21
+ ### Tail-Based Sampling
22
+ ```typescript
23
+ // Sample based on outcome (keep all errors, 1% of success)
24
+ const tailSampler = {
25
+ shouldSample: (span) => {
26
+ if (span.status.code === SpanStatusCode.ERROR) {
27
+ return true; // Keep all errors
28
+ }
29
+ if (span.attributes['http.status_code'] >= 500) {
30
+ return true; // Keep server errors
31
+ }
32
+ return Math.random() < 0.01; // 1% of successful requests
33
+ },
34
+ };
35
+
36
+ // Pros: Keeps important traces, lower cost
37
+ // Cons: More complex
38
+ ```
39
+
40
+ ## Retention Policies
41
+
42
+ ```
43
+ Hot storage (recent, fast):
44
+ - Traces: 7 days
45
+ - Logs: 14 days
46
+ - Metrics: 30 days
47
+
48
+ Warm storage (archived, slower):
49
+ - Traces: 30 days
50
+ - Logs: 90 days
51
+ - Metrics: 1 year
52
+
53
+ Cold storage (compliance):
54
+ - Logs: 7 years (compressed)
55
+ ```
56
+
57
+ ## Cost Breakdown
58
+
59
+ ```
60
+ Typical observability costs (10 services, 1M RPM):
61
+
62
+ DataDog:
63
+ - APM: $2,000/month (100M spans)
64
+ - Logs: $1,500/month (500 GB)
65
+ - Metrics: $500/month
66
+ - Total: $4,000/month
67
+
68
+ Self-Hosted (Jaeger + Loki + Prometheus):
69
+ - Infrastructure: $800/month
70
+ - Maintenance: $3,000/month (0.3 engineer)
71
+ - Total: $3,800/month
72
+
73
+ Savings with optimization:
74
+ - 90% sampling: $400 APM (vs $2,000)
75
+ - 30-day retention: $500 logs (vs $1,500)
76
+ - Total: $1,400/month (65% reduction)
77
+ ```
78
+
79
+ ## Optimization Strategies
80
+
81
+ ### 1. Sample Aggressively
82
+ ```
83
+ High-volume endpoints: 1% sample rate
84
+ Low-volume endpoints: 100% sample rate
85
+ Errors: Always keep
86
+ ```
87
+
88
+ ### 2. Reduce Log Volume
89
+ ```typescript
90
+ // Don't log every request
91
+ if (req.path !== '/health' && req.path !== '/metrics') {
92
+ logger.info('Request', { method: req.method, path: req.path });
93
+ }
94
+
95
+ // Sample logs
96
+ if (Math.random() < 0.1) { // 10% of logs
97
+ logger.debug('Debug info', { ...details });
98
+ }
99
+ ```
100
+
101
+ ### 3. Optimize Metric Cardinality
102
+ ```typescript
103
+ // ❌ Bad: Unbounded cardinality
104
+ requestCounter.add(1, { userId: req.userId }); // Millions of users
105
+
106
+ // ✅ Good: Bounded cardinality
107
+ requestCounter.add(1, { endpoint: req.route }); // ~100 endpoints
108
+ ```
109
+
110
+ ### 4. Use Cheaper Storage
111
+ ```
112
+ S3 Glacier for old logs: $0.004/GB (vs $0.023/GB Standard)
113
+ 83% cheaper for infrequently accessed data
114
+ ```
115
+
116
+ ## Monitoring Observability Costs
117
+
118
+ ```typescript
119
+ // Track observability data volume
120
+ observabilityCostGauge.set(dailySpanCount * 0.0001); // $0.0001 per span
121
+
122
+ // Alert on cost spikes
123
+ if (dailyObservabilityCost > threshold) {
124
+ alert('Observability costs exceeded budget');
125
+ }
126
+ ```
127
+
128
+ ## Best Practices
129
+
130
+ ✅ Sample high-volume endpoints
131
+ ✅ Always keep errors
132
+ ✅ Set aggressive retention policies
133
+ ✅ Reduce metric cardinality
134
+ ✅ Use cheaper storage tiers
135
+ ✅ Monitor observability costs
136
+
137
+ ---
138
+
139
+ **Related Resources:**
140
+ - distributed-tracing.md - Sampling implementation
141
+ - logs-aggregation.md - Log retention