blockmine 1.21.0 → 1.23.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 (492) 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 +59 -0
  55. package/.claude/settings.local.json +36 -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 +102 -42
  255. package/CLAUDE.md +284 -0
  256. package/README.md +315 -71
  257. package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
  258. package/backend/jest.config.js +59 -0
  259. package/backend/package-lock.json +6801 -0
  260. package/backend/package.json +24 -4
  261. package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
  262. package/backend/prisma/migrations/20251116111851_add_execution_trace/migration.sql +22 -0
  263. package/backend/prisma/migrations/20251120154914_add_panel_api_keys/migration.sql +21 -0
  264. package/backend/prisma/migrations/20251121110241_add_proxy_table/migration.sql +45 -0
  265. package/backend/prisma/migrations/migration_lock.toml +2 -2
  266. package/backend/prisma/schema.prisma +103 -1
  267. package/backend/src/__tests__/core/DependencyService.test.js +336 -0
  268. package/backend/src/__tests__/core/UserService.test.js +875 -0
  269. package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
  270. package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
  271. package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
  272. package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
  273. package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
  274. package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
  275. package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
  276. package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
  277. package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
  278. package/backend/src/__tests__/secretsFilter.test.js +425 -0
  279. package/backend/src/__tests__/services/BotLifecycleService.test.js +416 -0
  280. package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
  281. package/backend/src/__tests__/services/CacheManager.test.js +125 -0
  282. package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
  283. package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
  284. package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
  285. package/backend/src/__tests__/setup.js +25 -0
  286. package/backend/src/ai/plugin-assistant-system-prompt.md +788 -0
  287. package/backend/src/api/middleware/auth.js +27 -0
  288. package/backend/src/api/middleware/botAccess.js +7 -3
  289. package/backend/src/api/middleware/panelApiAuth.js +135 -0
  290. package/backend/src/api/routes/aiAssistant.js +995 -0
  291. package/backend/src/api/routes/apiKeys.js +181 -0
  292. package/backend/src/api/routes/auth.js +669 -633
  293. package/backend/src/api/routes/botCommands.js +107 -0
  294. package/backend/src/api/routes/botGroups.js +165 -0
  295. package/backend/src/api/routes/botHistory.js +108 -0
  296. package/backend/src/api/routes/botPermissions.js +99 -0
  297. package/backend/src/api/routes/botStatus.js +36 -0
  298. package/backend/src/api/routes/botUsers.js +162 -0
  299. package/backend/src/api/routes/bots.js +2451 -2360
  300. package/backend/src/api/routes/eventGraphs.js +4 -1
  301. package/backend/src/api/routes/logs.js +13 -3
  302. package/backend/src/api/routes/panel.js +66 -66
  303. package/backend/src/api/routes/panelApiKeys.js +179 -0
  304. package/backend/src/api/routes/pluginIde.js +1715 -135
  305. package/backend/src/api/routes/plugins.js +376 -218
  306. package/backend/src/api/routes/proxies.js +130 -0
  307. package/backend/src/api/routes/search.js +4 -0
  308. package/backend/src/api/routes/servers.js +20 -3
  309. package/backend/src/api/routes/settings.js +5 -0
  310. package/backend/src/api/routes/system.js +174 -0
  311. package/backend/src/api/routes/traces.js +131 -0
  312. package/backend/src/config/debug.config.js +36 -0
  313. package/backend/src/container.js +82 -0
  314. package/backend/src/core/BotHistoryStore.js +180 -0
  315. package/backend/src/core/BotManager.js +149 -868
  316. package/backend/src/core/BotManager.old.js +1093 -0
  317. package/backend/src/core/BotProcess.js +850 -191
  318. package/backend/src/core/EventGraphManager.js +194 -198
  319. package/backend/src/core/GraphExecutionEngine.js +709 -57
  320. package/backend/src/core/MessageQueue.js +39 -12
  321. package/backend/src/core/NodeRegistry.js +37 -1134
  322. package/backend/src/core/PluginLoader.js +99 -5
  323. package/backend/src/core/PluginManager.js +126 -15
  324. package/backend/src/core/PrismaService.js +32 -0
  325. package/backend/src/core/TaskScheduler.js +1 -1
  326. package/backend/src/core/UserService.js +3 -3
  327. package/backend/src/core/__tests__/PrismaService.test.js +24 -0
  328. package/backend/src/core/commands/README.md +305 -0
  329. package/backend/src/core/commands/dev.js +13 -7
  330. package/backend/src/core/commands/ping.js +10 -4
  331. package/backend/src/core/commands/whois.js +63 -0
  332. package/backend/src/core/config/validation.js +27 -0
  333. package/backend/src/core/constants/graphTypes.js +21 -0
  334. package/backend/src/core/node-registries/actions.js +202 -0
  335. package/backend/src/core/node-registries/arrays.js +155 -0
  336. package/backend/src/core/node-registries/bot.js +23 -0
  337. package/backend/src/core/node-registries/data.js +290 -0
  338. package/backend/src/core/node-registries/debug.js +26 -0
  339. package/backend/src/core/node-registries/events.js +201 -0
  340. package/backend/src/core/node-registries/flow.js +139 -0
  341. package/backend/src/core/node-registries/logic.js +62 -0
  342. package/backend/src/core/node-registries/math.js +42 -0
  343. package/backend/src/core/node-registries/objects.js +98 -0
  344. package/backend/src/core/node-registries/strings.js +187 -0
  345. package/backend/src/core/node-registries/time.js +113 -0
  346. package/backend/src/core/node-registries/type.js +25 -0
  347. package/backend/src/core/node-registries/users.js +79 -0
  348. package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
  349. package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
  350. package/backend/src/core/nodes/actions/create_command.js +189 -0
  351. package/backend/src/core/nodes/actions/delete_command.js +92 -0
  352. package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
  353. package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
  354. package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
  355. package/backend/src/core/nodes/actions/update_command.js +133 -0
  356. package/backend/src/core/nodes/arrays/get_next.js +35 -0
  357. package/backend/src/core/nodes/arrays/join.js +28 -0
  358. package/backend/src/core/nodes/{data_cast.js → data/cast.js} +10 -1
  359. package/backend/src/core/nodes/data/datetime_literal.js +27 -0
  360. package/backend/src/core/nodes/data/entity_info.js +69 -0
  361. package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
  362. package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
  363. package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
  364. package/backend/src/core/nodes/data/type_check.js +53 -0
  365. package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
  366. package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
  367. package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
  368. package/backend/src/core/nodes/flow/delay.js +43 -0
  369. package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
  370. package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
  371. package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
  372. package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
  373. package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
  374. package/backend/src/core/nodes/logic/not.js +22 -0
  375. package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
  376. package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
  377. package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +1 -1
  378. package/backend/src/core/nodes/strings/to_lower.js +22 -0
  379. package/backend/src/core/nodes/strings/to_upper.js +22 -0
  380. package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
  381. package/backend/src/core/nodes/time/add.js +33 -0
  382. package/backend/src/core/nodes/time/compare.js +35 -0
  383. package/backend/src/core/nodes/time/diff.js +29 -0
  384. package/backend/src/core/nodes/time/format.js +32 -0
  385. package/backend/src/core/nodes/time/now.js +18 -0
  386. package/backend/src/core/nodes/type/to_string.js +32 -0
  387. package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
  388. package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
  389. package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
  390. package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
  391. package/backend/src/core/services/BotLifecycleService.js +835 -0
  392. package/backend/src/core/services/BotProcessManager.js +163 -0
  393. package/backend/src/core/services/CacheManager.js +111 -0
  394. package/backend/src/core/services/CommandExecutionService.js +430 -0
  395. package/backend/src/core/services/DebugSessionManager.js +347 -0
  396. package/backend/src/core/services/GraphCollaborationManager.js +501 -0
  397. package/backend/src/core/services/MinecraftBotManager.js +259 -0
  398. package/backend/src/core/services/MinecraftViewerService.js +216 -0
  399. package/backend/src/core/services/ResourceMonitorService.js +90 -0
  400. package/backend/src/core/services/TelemetryService.js +124 -0
  401. package/backend/src/core/services/TraceCollectorService.js +545 -0
  402. package/backend/src/core/services/ValidationService.js +132 -0
  403. package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
  404. package/backend/src/core/services.js +20 -5
  405. package/backend/src/core/system/CommandContext.js +84 -0
  406. package/backend/src/core/system/RuntimeCommandRegistry.js +116 -0
  407. package/backend/src/core/system/Transport.js +74 -0
  408. package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
  409. package/backend/src/core/utils/jsonParser.js +18 -0
  410. package/backend/src/core/utils/secretsFilter.js +262 -0
  411. package/backend/src/core/utils/variableParser.js +89 -0
  412. package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
  413. package/backend/src/core/validation/nodeSchemas.js +112 -0
  414. package/backend/src/lib/prisma.js +2 -4
  415. package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
  416. package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
  417. package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
  418. package/backend/src/real-time/botApi/handlers/index.js +43 -0
  419. package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
  420. package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
  421. package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
  422. package/backend/src/real-time/botApi/index.js +40 -0
  423. package/backend/src/real-time/botApi/middleware.js +79 -0
  424. package/backend/src/real-time/botApi/utils.js +65 -0
  425. package/backend/src/real-time/panelNamespace.js +387 -0
  426. package/backend/src/real-time/presence.js +7 -2
  427. package/backend/src/real-time/socketHandler.js +400 -5
  428. package/backend/src/repositories/BaseRepository.js +43 -0
  429. package/backend/src/repositories/BotRepository.js +42 -0
  430. package/backend/src/repositories/CommandRepository.js +53 -0
  431. package/backend/src/repositories/EventGraphRepository.js +40 -0
  432. package/backend/src/repositories/GroupRepository.js +69 -0
  433. package/backend/src/repositories/PermissionRepository.js +48 -0
  434. package/backend/src/repositories/PluginRepository.js +42 -0
  435. package/backend/src/repositories/ServerRepository.js +27 -0
  436. package/backend/src/repositories/UserRepository.js +48 -0
  437. package/backend/src/server.js +21 -0
  438. package/backend/src/test-refactor.js +85 -0
  439. package/frontend/dist/assets/index-B1serztM.js +11210 -0
  440. package/frontend/dist/assets/index-t6K1u4OV.css +32 -0
  441. package/frontend/dist/index.html +2 -2
  442. package/frontend/package-lock.json +9437 -0
  443. package/frontend/package.json +8 -5
  444. package/package.json +3 -2
  445. package/screen/console.png +0 -0
  446. package/screen/dashboard.png +0 -0
  447. package/screen/graph_collabe.png +0 -0
  448. package/screen/graph_live_debug.png +0 -0
  449. package/screen/management_command.png +0 -0
  450. package/screen/node_debug_trace.png +0 -0
  451. package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
  452. package/screen/websocket.png +0 -0
  453. package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
  454. package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
  455. package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
  456. package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
  457. package/nul +0 -0
  458. /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
  459. /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
  460. /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
  461. /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
  462. /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
  463. /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
  464. /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
  465. /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
  466. /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
  467. /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
  468. /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
  469. /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
  470. /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
  471. /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
  472. /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
  473. /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
  474. /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
  475. /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
  476. /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
  477. /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
  478. /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
  479. /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
  480. /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
  481. /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
  482. /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
  483. /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
  484. /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
  485. /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
  486. /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
  487. /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
  488. /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
  489. /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
  490. /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
  491. /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
  492. /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
@@ -0,0 +1,998 @@
1
+ # Configuration Management
2
+
3
+ Comprehensive guide to configuration management tools including Ansible, Chef, and Puppet with production-ready playbooks, cookbooks, and manifests for infrastructure automation.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Configuration Management Overview](#configuration-management-overview)
8
+ - [Ansible](#ansible)
9
+ - [Chef](#chef)
10
+ - [Puppet](#puppet)
11
+ - [Idempotency Patterns](#idempotency-patterns)
12
+ - [Testing Infrastructure Code](#testing-infrastructure-code)
13
+ - [Version Control Strategies](#version-control-strategies)
14
+ - [Best Practices](#best-practices)
15
+
16
+ ## Configuration Management Overview
17
+
18
+ ### Why Configuration Management?
19
+
20
+ ```
21
+ Benefits:
22
+ ✓ Infrastructure as Code
23
+ ✓ Reproducibility
24
+ ✓ Version control
25
+ ✓ Automated deployments
26
+ ✓ Consistency across environments
27
+ ✓ Disaster recovery
28
+ ✓ Documentation (code is documentation)
29
+ ```
30
+
31
+ ### Tool Comparison
32
+
33
+ | Feature | Ansible | Chef | Puppet |
34
+ |---------|---------|------|--------|
35
+ | **Architecture** | Agentless (SSH) | Agent-based | Agent-based |
36
+ | **Language** | YAML | Ruby DSL | Declarative DSL |
37
+ | **Learning Curve** | Low | Medium | Medium-High |
38
+ | **Execution** | Push model | Pull model | Pull model |
39
+ | **Best For** | Quick automation | Large infrastructures | Compliance |
40
+
41
+ ## Ansible
42
+
43
+ ### Directory Structure
44
+
45
+ ```
46
+ ansible/
47
+ ├── ansible.cfg # Ansible configuration
48
+ ├── inventory/
49
+ │ ├── production/
50
+ │ │ ├── hosts # Inventory file
51
+ │ │ └── group_vars/
52
+ │ │ ├── all.yml # Variables for all hosts
53
+ │ │ ├── webservers.yml # Web server vars
54
+ │ │ └── databases.yml # Database vars
55
+ │ └── staging/
56
+ │ ├── hosts
57
+ │ └── group_vars/
58
+ ├── roles/
59
+ │ ├── common/ # Base configuration
60
+ │ │ ├── tasks/
61
+ │ │ │ └── main.yml
62
+ │ │ ├── handlers/
63
+ │ │ │ └── main.yml
64
+ │ │ ├── templates/
65
+ │ │ ├── files/
66
+ │ │ ├── vars/
67
+ │ │ │ └── main.yml
68
+ │ │ ├── defaults/
69
+ │ │ │ └── main.yml
70
+ │ │ └── meta/
71
+ │ │ └── main.yml
72
+ │ ├── nginx/
73
+ │ ├── postgresql/
74
+ │ └── application/
75
+ ├── playbooks/
76
+ │ ├── site.yml # Master playbook
77
+ │ ├── webservers.yml
78
+ │ ├── databases.yml
79
+ │ └── deploy.yml
80
+ ├── group_vars/
81
+ │ └── all.yml
82
+ └── host_vars/
83
+ └── server1.yml
84
+ ```
85
+
86
+ ### Ansible Configuration
87
+
88
+ ```ini
89
+ # ansible.cfg
90
+ [defaults]
91
+ inventory = inventory/production/hosts
92
+ remote_user = ansible
93
+ host_key_checking = False
94
+ retry_files_enabled = False
95
+ gathering = smart
96
+ fact_caching = jsonfile
97
+ fact_caching_connection = /tmp/ansible_facts
98
+ fact_caching_timeout = 86400
99
+
100
+ # Logging
101
+ log_path = /var/log/ansible.log
102
+
103
+ # SSH
104
+ [ssh_connection]
105
+ ssh_args = -o ControlMaster=auto -o ControlPersist=60s
106
+ pipelining = True
107
+ ```
108
+
109
+ ### Inventory File
110
+
111
+ ```ini
112
+ # inventory/production/hosts
113
+
114
+ [webservers]
115
+ web1.example.com ansible_host=192.168.1.101
116
+ web2.example.com ansible_host=192.168.1.102
117
+ web3.example.com ansible_host=192.168.1.103
118
+
119
+ [databases]
120
+ db1.example.com ansible_host=192.168.1.111 postgresql_role=primary
121
+ db2.example.com ansible_host=192.168.1.112 postgresql_role=replica
122
+
123
+ [loadbalancers]
124
+ lb1.example.com ansible_host=192.168.1.201
125
+
126
+ [production:children]
127
+ webservers
128
+ databases
129
+ loadbalancers
130
+
131
+ [production:vars]
132
+ env=production
133
+ ```
134
+
135
+ ### Role: Common (Base Configuration)
136
+
137
+ ```yaml
138
+ # roles/common/tasks/main.yml
139
+ ---
140
+ - name: Update apt cache
141
+ apt:
142
+ update_cache: yes
143
+ cache_valid_time: 3600
144
+ when: ansible_os_family == "Debian"
145
+
146
+ - name: Install common packages
147
+ apt:
148
+ name:
149
+ - vim
150
+ - git
151
+ - htop
152
+ - curl
153
+ - wget
154
+ - unzip
155
+ - net-tools
156
+ state: present
157
+
158
+ - name: Configure timezone
159
+ timezone:
160
+ name: "{{ timezone | default('UTC') }}"
161
+
162
+ - name: Set hostname
163
+ hostname:
164
+ name: "{{ inventory_hostname }}"
165
+
166
+ - name: Configure NTP
167
+ include_tasks: ntp.yml
168
+
169
+ - name: Configure firewall
170
+ include_tasks: firewall.yml
171
+
172
+ - name: Create admin users
173
+ user:
174
+ name: "{{ item.username }}"
175
+ groups: "{{ item.groups }}"
176
+ shell: /bin/bash
177
+ create_home: yes
178
+ loop: "{{ admin_users }}"
179
+
180
+ - name: Add SSH keys for admin users
181
+ authorized_key:
182
+ user: "{{ item.username }}"
183
+ key: "{{ item.ssh_key }}"
184
+ state: present
185
+ loop: "{{ admin_users }}"
186
+
187
+ - name: Configure sudoers
188
+ template:
189
+ src: sudoers.j2
190
+ dest: /etc/sudoers.d/admins
191
+ mode: '0440'
192
+ validate: 'visudo -cf %s'
193
+ ```
194
+
195
+ ### Role: Nginx Web Server
196
+
197
+ ```yaml
198
+ # roles/nginx/tasks/main.yml
199
+ ---
200
+ - name: Install nginx
201
+ apt:
202
+ name: nginx
203
+ state: present
204
+
205
+ - name: Create nginx directories
206
+ file:
207
+ path: "{{ item }}"
208
+ state: directory
209
+ owner: www-data
210
+ group: www-data
211
+ mode: '0755'
212
+ loop:
213
+ - /var/www/{{ app_name }}
214
+ - /var/log/nginx/{{ app_name }}
215
+
216
+ - name: Configure nginx site
217
+ template:
218
+ src: nginx-site.conf.j2
219
+ dest: /etc/nginx/sites-available/{{ app_name }}
220
+ owner: root
221
+ group: root
222
+ mode: '0644'
223
+ notify: Reload nginx
224
+
225
+ - name: Enable nginx site
226
+ file:
227
+ src: /etc/nginx/sites-available/{{ app_name }}
228
+ dest: /etc/nginx/sites-enabled/{{ app_name }}
229
+ state: link
230
+ notify: Reload nginx
231
+
232
+ - name: Remove default nginx site
233
+ file:
234
+ path: /etc/nginx/sites-enabled/default
235
+ state: absent
236
+ notify: Reload nginx
237
+
238
+ - name: Configure nginx.conf
239
+ template:
240
+ src: nginx.conf.j2
241
+ dest: /etc/nginx/nginx.conf
242
+ owner: root
243
+ group: root
244
+ mode: '0644'
245
+ notify: Reload nginx
246
+
247
+ - name: Ensure nginx is started and enabled
248
+ systemd:
249
+ name: nginx
250
+ state: started
251
+ enabled: yes
252
+
253
+ - name: Configure log rotation
254
+ template:
255
+ src: logrotate.j2
256
+ dest: /etc/logrotate.d/nginx-{{ app_name }}
257
+ owner: root
258
+ group: root
259
+ mode: '0644'
260
+ ```
261
+
262
+ ```yaml
263
+ # roles/nginx/handlers/main.yml
264
+ ---
265
+ - name: Reload nginx
266
+ systemd:
267
+ name: nginx
268
+ state: reloaded
269
+
270
+ - name: Restart nginx
271
+ systemd:
272
+ name: nginx
273
+ state: restarted
274
+ ```
275
+
276
+ ```jinja2
277
+ # roles/nginx/templates/nginx-site.conf.j2
278
+ upstream {{ app_name }}_backend {
279
+ {% for server in backend_servers %}
280
+ server {{ server.host }}:{{ server.port }} weight={{ server.weight | default(1) }};
281
+ {% endfor %}
282
+ }
283
+
284
+ server {
285
+ listen 80;
286
+ server_name {{ server_name }};
287
+
288
+ {% if ssl_enabled %}
289
+ listen 443 ssl http2;
290
+ ssl_certificate {{ ssl_cert_path }};
291
+ ssl_certificate_key {{ ssl_key_path }};
292
+ ssl_protocols TLSv1.2 TLSv1.3;
293
+ ssl_ciphers HIGH:!aNULL:!MD5;
294
+ {% endif %}
295
+
296
+ access_log /var/log/nginx/{{ app_name }}/access.log;
297
+ error_log /var/log/nginx/{{ app_name }}/error.log;
298
+
299
+ location / {
300
+ proxy_pass http://{{ app_name }}_backend;
301
+ proxy_set_header Host $host;
302
+ proxy_set_header X-Real-IP $remote_addr;
303
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
304
+ proxy_set_header X-Forwarded-Proto $scheme;
305
+
306
+ proxy_connect_timeout 60s;
307
+ proxy_send_timeout 60s;
308
+ proxy_read_timeout 60s;
309
+ }
310
+
311
+ location /static {
312
+ alias /var/www/{{ app_name }}/static;
313
+ expires 30d;
314
+ add_header Cache-Control "public, immutable";
315
+ }
316
+ }
317
+ ```
318
+
319
+ ### Complete Playbook Example
320
+
321
+ ```yaml
322
+ # playbooks/site.yml
323
+ ---
324
+ - name: Configure all servers
325
+ hosts: all
326
+ become: yes
327
+ roles:
328
+ - common
329
+
330
+ - name: Configure web servers
331
+ hosts: webservers
332
+ become: yes
333
+ vars:
334
+ app_name: myapp
335
+ server_name: example.com
336
+ backend_servers:
337
+ - { host: '127.0.0.1', port: 3000, weight: 1 }
338
+ roles:
339
+ - nginx
340
+ - application
341
+
342
+ - name: Configure databases
343
+ hosts: databases
344
+ become: yes
345
+ roles:
346
+ - postgresql
347
+
348
+ - name: Configure load balancers
349
+ hosts: loadbalancers
350
+ become: yes
351
+ roles:
352
+ - haproxy
353
+ ```
354
+
355
+ ### Running Playbooks
356
+
357
+ ```bash
358
+ # Syntax check
359
+ ansible-playbook playbooks/site.yml --syntax-check
360
+
361
+ # Dry run (check mode)
362
+ ansible-playbook playbooks/site.yml --check
363
+
364
+ # Run with diff output
365
+ ansible-playbook playbooks/site.yml --check --diff
366
+
367
+ # Run playbook
368
+ ansible-playbook playbooks/site.yml
369
+
370
+ # Run specific tags
371
+ ansible-playbook playbooks/site.yml --tags "nginx,application"
372
+
373
+ # Skip tags
374
+ ansible-playbook playbooks/site.yml --skip-tags "database"
375
+
376
+ # Limit to specific hosts
377
+ ansible-playbook playbooks/site.yml --limit webservers
378
+
379
+ # Verbose output
380
+ ansible-playbook playbooks/site.yml -v
381
+ ansible-playbook playbooks/site.yml -vvv # Very verbose
382
+
383
+ # Use different inventory
384
+ ansible-playbook -i inventory/staging/hosts playbooks/site.yml
385
+ ```
386
+
387
+ ## Chef
388
+
389
+ ### Repository Structure
390
+
391
+ ```
392
+ chef-repo/
393
+ ├── .chef/
394
+ │ ├── config.rb
395
+ │ └── credentials
396
+ ├── cookbooks/
397
+ │ ├── myapp/
398
+ │ │ ├── attributes/
399
+ │ │ │ └── default.rb
400
+ │ │ ├── recipes/
401
+ │ │ │ ├── default.rb
402
+ │ │ │ └── nginx.rb
403
+ │ │ ├── templates/
404
+ │ │ │ └── default/
405
+ │ │ │ └── nginx.conf.erb
406
+ │ │ ├── files/
407
+ │ │ │ └── default/
408
+ │ │ ├── spec/
409
+ │ │ │ └── unit/
410
+ │ │ ├── test/
411
+ │ │ │ └── integration/
412
+ │ │ └── metadata.rb
413
+ ├── roles/
414
+ │ ├── webserver.rb
415
+ │ └── database.rb
416
+ ├── environments/
417
+ │ ├── production.rb
418
+ │ └── staging.rb
419
+ ├── data_bags/
420
+ │ ├── users/
421
+ │ └── secrets/
422
+ └── Policyfile.rb
423
+ ```
424
+
425
+ ### Cookbook: Nginx
426
+
427
+ ```ruby
428
+ # cookbooks/myapp/metadata.rb
429
+ name 'myapp'
430
+ maintainer 'Your Team'
431
+ maintainer_email 'team@example.com'
432
+ license 'Apache-2.0'
433
+ description 'Installs and configures myapp'
434
+ version '1.0.0'
435
+
436
+ depends 'nginx', '~> 10.0'
437
+ ```
438
+
439
+ ```ruby
440
+ # cookbooks/myapp/attributes/default.rb
441
+ default['myapp']['version'] = '1.0.0'
442
+ default['myapp']['port'] = 3000
443
+ default['myapp']['user'] = 'myapp'
444
+ default['myapp']['group'] = 'myapp'
445
+ default['myapp']['install_path'] = '/opt/myapp'
446
+
447
+ # Nginx configuration
448
+ default['myapp']['nginx']['server_name'] = 'example.com'
449
+ default['myapp']['nginx']['listen_port'] = 80
450
+ default['myapp']['nginx']['ssl_enabled'] = false
451
+ ```
452
+
453
+ ```ruby
454
+ # cookbooks/myapp/recipes/default.rb
455
+
456
+ # Create application user
457
+ user node['myapp']['user'] do
458
+ system true
459
+ shell '/bin/bash'
460
+ home node['myapp']['install_path']
461
+ action :create
462
+ end
463
+
464
+ # Create application directory
465
+ directory node['myapp']['install_path'] do
466
+ owner node['myapp']['user']
467
+ group node['myapp']['group']
468
+ mode '0755'
469
+ recursive true
470
+ action :create
471
+ end
472
+
473
+ # Install application dependencies
474
+ package %w(git curl build-essential) do
475
+ action :install
476
+ end
477
+
478
+ # Deploy application
479
+ git node['myapp']['install_path'] do
480
+ repository node['myapp']['git_repo']
481
+ revision node['myapp']['version']
482
+ user node['myapp']['user']
483
+ group node['myapp']['group']
484
+ action :sync
485
+ notifies :restart, 'systemd_unit[myapp.service]'
486
+ end
487
+
488
+ # Create systemd service
489
+ template '/etc/systemd/system/myapp.service' do
490
+ source 'myapp.service.erb'
491
+ owner 'root'
492
+ group 'root'
493
+ mode '0644'
494
+ notifies :run, 'execute[systemctl-daemon-reload]', :immediately
495
+ end
496
+
497
+ execute 'systemctl-daemon-reload' do
498
+ command 'systemctl daemon-reload'
499
+ action :nothing
500
+ end
501
+
502
+ # Start and enable service
503
+ systemd_unit 'myapp.service' do
504
+ action [:enable, :start]
505
+ end
506
+
507
+ # Include nginx recipe
508
+ include_recipe 'myapp::nginx'
509
+ ```
510
+
511
+ ```ruby
512
+ # cookbooks/myapp/recipes/nginx.rb
513
+
514
+ include_recipe 'nginx::default'
515
+
516
+ # Configure nginx site
517
+ template '/etc/nginx/sites-available/myapp' do
518
+ source 'nginx.conf.erb'
519
+ owner 'root'
520
+ group 'root'
521
+ mode '0644'
522
+ variables(
523
+ server_name: node['myapp']['nginx']['server_name'],
524
+ port: node['myapp']['port'],
525
+ app_path: node['myapp']['install_path']
526
+ )
527
+ notifies :reload, 'service[nginx]'
528
+ end
529
+
530
+ # Enable site
531
+ link '/etc/nginx/sites-enabled/myapp' do
532
+ to '/etc/nginx/sites-available/myapp'
533
+ notifies :reload, 'service[nginx]'
534
+ end
535
+
536
+ # Disable default site
537
+ file '/etc/nginx/sites-enabled/default' do
538
+ action :delete
539
+ notifies :reload, 'service[nginx]'
540
+ end
541
+
542
+ service 'nginx' do
543
+ action [:enable, :start]
544
+ end
545
+ ```
546
+
547
+ ### Role Definition
548
+
549
+ ```ruby
550
+ # roles/webserver.rb
551
+ name 'webserver'
552
+ description 'Web server role'
553
+
554
+ run_list(
555
+ 'recipe[myapp::default]',
556
+ 'recipe[myapp::nginx]'
557
+ )
558
+
559
+ default_attributes(
560
+ 'myapp' => {
561
+ 'version' => '1.0.0',
562
+ 'port' => 3000
563
+ }
564
+ )
565
+
566
+ override_attributes(
567
+ 'nginx' => {
568
+ 'worker_processes' => 4
569
+ }
570
+ )
571
+ ```
572
+
573
+ ### Bootstrap and Run
574
+
575
+ ```bash
576
+ # Bootstrap node
577
+ knife bootstrap 192.168.1.101 \
578
+ --ssh-user ubuntu \
579
+ --sudo \
580
+ --node-name web1 \
581
+ --run-list 'role[webserver]'
582
+
583
+ # Upload cookbook
584
+ knife cookbook upload myapp
585
+
586
+ # Upload role
587
+ knife role from file roles/webserver.rb
588
+
589
+ # Run chef-client on node
590
+ knife ssh 'role:webserver' 'sudo chef-client' -x ubuntu
591
+ ```
592
+
593
+ ## Puppet
594
+
595
+ ### Module Structure
596
+
597
+ ```
598
+ modules/
599
+ └── myapp/
600
+ ├── manifests/
601
+ │ ├── init.pp
602
+ │ ├── install.pp
603
+ │ ├── config.pp
604
+ │ └── service.pp
605
+ ├── templates/
606
+ │ ├── nginx.conf.erb
607
+ │ └── myapp.service.erb
608
+ ├── files/
609
+ ├── spec/
610
+ │ └── classes/
611
+ │ └── init_spec.rb
612
+ └── metadata.json
613
+ ```
614
+
615
+ ### Puppet Manifest
616
+
617
+ ```puppet
618
+ # modules/myapp/manifests/init.pp
619
+ class myapp (
620
+ String $version = '1.0.0',
621
+ Integer $port = 3000,
622
+ String $user = 'myapp',
623
+ String $group = 'myapp',
624
+ String $install_path = '/opt/myapp',
625
+ String $git_repo = 'https://github.com/example/myapp.git',
626
+ ) {
627
+ contain myapp::install
628
+ contain myapp::config
629
+ contain myapp::service
630
+
631
+ Class['myapp::install']
632
+ -> Class['myapp::config']
633
+ ~> Class['myapp::service']
634
+ }
635
+ ```
636
+
637
+ ```puppet
638
+ # modules/myapp/manifests/install.pp
639
+ class myapp::install {
640
+ # Create user
641
+ user { $myapp::user:
642
+ ensure => present,
643
+ system => true,
644
+ shell => '/bin/bash',
645
+ home => $myapp::install_path,
646
+ managehome => true,
647
+ }
648
+
649
+ # Install packages
650
+ package { ['git', 'curl', 'build-essential']:
651
+ ensure => installed,
652
+ }
653
+
654
+ # Clone repository
655
+ vcsrepo { $myapp::install_path:
656
+ ensure => present,
657
+ provider => git,
658
+ source => $myapp::git_repo,
659
+ revision => $myapp::version,
660
+ user => $myapp::user,
661
+ require => User[$myapp::user],
662
+ }
663
+ }
664
+ ```
665
+
666
+ ```puppet
667
+ # modules/myapp/manifests/config.pp
668
+ class myapp::config {
669
+ # Application configuration
670
+ file { "${myapp::install_path}/config":
671
+ ensure => directory,
672
+ owner => $myapp::user,
673
+ group => $myapp::group,
674
+ mode => '0755',
675
+ }
676
+
677
+ # Systemd service
678
+ file { '/etc/systemd/system/myapp.service':
679
+ ensure => file,
680
+ owner => 'root',
681
+ group => 'root',
682
+ mode => '0644',
683
+ content => template('myapp/myapp.service.erb'),
684
+ notify => Exec['systemctl-daemon-reload'],
685
+ }
686
+
687
+ exec { 'systemctl-daemon-reload':
688
+ command => '/bin/systemctl daemon-reload',
689
+ refreshonly => true,
690
+ }
691
+ }
692
+ ```
693
+
694
+ ```puppet
695
+ # modules/myapp/manifests/service.pp
696
+ class myapp::service {
697
+ service { 'myapp':
698
+ ensure => running,
699
+ enable => true,
700
+ hasrestart => true,
701
+ hasstatus => true,
702
+ require => File['/etc/systemd/system/myapp.service'],
703
+ }
704
+ }
705
+ ```
706
+
707
+ ### Site Manifest
708
+
709
+ ```puppet
710
+ # manifests/site.pp
711
+
712
+ # Default node configuration
713
+ node default {
714
+ include common
715
+ }
716
+
717
+ # Web servers
718
+ node /^web\d+\.example\.com$/ {
719
+ include common
720
+ include myapp
721
+ include nginx
722
+ }
723
+
724
+ # Database servers
725
+ node /^db\d+\.example\.com$/ {
726
+ include common
727
+ include postgresql
728
+ }
729
+ ```
730
+
731
+ ### Hiera Configuration
732
+
733
+ ```yaml
734
+ # hiera.yaml
735
+ ---
736
+ version: 5
737
+ defaults:
738
+ datadir: data
739
+ data_hash: yaml_data
740
+
741
+ hierarchy:
742
+ - name: "Per-node data"
743
+ path: "nodes/%{trusted.certname}.yaml"
744
+
745
+ - name: "Per-environment data"
746
+ path: "environments/%{environment}.yaml"
747
+
748
+ - name: "Common data"
749
+ path: "common.yaml"
750
+ ```
751
+
752
+ ```yaml
753
+ # data/common.yaml
754
+ ---
755
+ myapp::version: '1.0.0'
756
+ myapp::port: 3000
757
+ myapp::git_repo: 'https://github.com/example/myapp.git'
758
+ ```
759
+
760
+ ## Idempotency Patterns
761
+
762
+ ### Ansible Idempotency
763
+
764
+ ```yaml
765
+ # BAD - Not idempotent
766
+ - name: Add line to file
767
+ shell: echo "new line" >> /etc/myconfig
768
+
769
+ # GOOD - Idempotent
770
+ - name: Add line to file
771
+ lineinfile:
772
+ path: /etc/myconfig
773
+ line: "new line"
774
+ state: present
775
+
776
+ # BAD - Creates multiple cron entries
777
+ - name: Add cron job
778
+ shell: echo "0 2 * * * /backup.sh" | crontab
779
+
780
+ # GOOD - Idempotent cron
781
+ - name: Add backup cron job
782
+ cron:
783
+ name: "Daily backup"
784
+ hour: "2"
785
+ minute: "0"
786
+ job: "/backup.sh"
787
+ ```
788
+
789
+ ### Check Before Change Pattern
790
+
791
+ ```yaml
792
+ # Ansible
793
+ - name: Check if service exists
794
+ stat:
795
+ path: /etc/systemd/system/myapp.service
796
+ register: service_file
797
+
798
+ - name: Configure service
799
+ template:
800
+ src: myapp.service.j2
801
+ dest: /etc/systemd/system/myapp.service
802
+ when: not service_file.stat.exists or force_update
803
+ ```
804
+
805
+ ```ruby
806
+ # Chef
807
+ file '/etc/myapp/config.yml' do
808
+ content lazy { generate_config }
809
+ action :create
810
+ not_if { ::File.exist?('/etc/myapp/config.yml') && !node['myapp']['force_update'] }
811
+ end
812
+ ```
813
+
814
+ ## Testing Infrastructure Code
815
+
816
+ ### Ansible Testing
817
+
818
+ ```bash
819
+ # Install testing tools
820
+ pip install ansible-lint molecule molecule-docker
821
+
822
+ # Lint playbook
823
+ ansible-lint playbooks/site.yml
824
+
825
+ # Syntax check
826
+ ansible-playbook playbooks/site.yml --syntax-check
827
+
828
+ # Molecule testing
829
+ cd roles/myapp
830
+ molecule init scenario
831
+ molecule test
832
+ ```
833
+
834
+ ```yaml
835
+ # molecule/default/molecule.yml
836
+ ---
837
+ dependency:
838
+ name: galaxy
839
+ driver:
840
+ name: docker
841
+ platforms:
842
+ - name: instance
843
+ image: ubuntu:22.04
844
+ pre_build_image: true
845
+ provisioner:
846
+ name: ansible
847
+ verifier:
848
+ name: ansible
849
+ ```
850
+
851
+ ### Chef Testing (Test Kitchen)
852
+
853
+ ```yaml
854
+ # .kitchen.yml
855
+ ---
856
+ driver:
857
+ name: docker
858
+
859
+ provisioner:
860
+ name: chef_zero
861
+
862
+ platforms:
863
+ - name: ubuntu-22.04
864
+
865
+ suites:
866
+ - name: default
867
+ run_list:
868
+ - recipe[myapp::default]
869
+ attributes:
870
+ ```
871
+
872
+ ```bash
873
+ # Run tests
874
+ kitchen test
875
+
876
+ # Create instance
877
+ kitchen create
878
+
879
+ # Converge (apply cookbook)
880
+ kitchen converge
881
+
882
+ # Verify
883
+ kitchen verify
884
+
885
+ # Destroy
886
+ kitchen destroy
887
+ ```
888
+
889
+ ### Puppet Testing (rspec-puppet)
890
+
891
+ ```ruby
892
+ # spec/classes/init_spec.rb
893
+ require 'spec_helper'
894
+
895
+ describe 'myapp' do
896
+ on_supported_os.each do |os, facts|
897
+ context "on #{os}" do
898
+ let(:facts) { facts }
899
+
900
+ it { is_expected.to compile.with_all_deps }
901
+ it { is_expected.to contain_class('myapp::install') }
902
+ it { is_expected.to contain_class('myapp::config') }
903
+ it { is_expected.to contain_class('myapp::service') }
904
+
905
+ it do
906
+ is_expected.to contain_service('myapp')
907
+ .with_ensure('running')
908
+ .with_enable(true)
909
+ end
910
+ end
911
+ end
912
+ end
913
+ ```
914
+
915
+ ```bash
916
+ # Run tests
917
+ bundle exec rake spec
918
+ ```
919
+
920
+ ## Version Control Strategies
921
+
922
+ ### Git Workflow
923
+
924
+ ```bash
925
+ # Repository structure
926
+ git-repo/
927
+ ├── main (production)
928
+ ├── staging
929
+ └── development
930
+
931
+ # Feature workflow
932
+ git checkout -b feature/new-role development
933
+ # Make changes
934
+ git add .
935
+ git commit -m "Add new role for application deployment"
936
+ git push origin feature/new-role
937
+ # Create pull request
938
+ # After review, merge to development
939
+ # Test in dev environment
940
+ # Merge to staging for QA
941
+ # Finally merge to main for production
942
+ ```
943
+
944
+ ### Environment Branches
945
+
946
+ ```bash
947
+ # Ansible
948
+ ansible-playbook -i inventory/dev playbooks/site.yml
949
+ ansible-playbook -i inventory/staging playbooks/site.yml
950
+ ansible-playbook -i inventory/prod playbooks/site.yml
951
+
952
+ # Use environment-specific variables
953
+ group_vars/
954
+ ├── dev/
955
+ │ └── all.yml
956
+ ├── staging/
957
+ │ └── all.yml
958
+ └── prod/
959
+ └── all.yml
960
+ ```
961
+
962
+ ## Best Practices
963
+
964
+ 1. **Use Version Control:**
965
+ - All configuration in Git
966
+ - Tag releases
967
+ - Document changes in commits
968
+ - Use pull requests for review
969
+
970
+ 2. **Test Before Production:**
971
+ - Use linters (ansible-lint, foodcritic, puppet-lint)
972
+ - Run in staging first
973
+ - Automated testing (Molecule, Test Kitchen, rspec-puppet)
974
+ - Dry run before applying
975
+
976
+ 3. **Make Idempotent:**
977
+ - Code should be safe to run multiple times
978
+ - Check state before making changes
979
+ - Use proper modules (not shell/exec)
980
+
981
+ 4. **Security:**
982
+ - Encrypt secrets (Ansible Vault, Chef encrypted data bags)
983
+ - Don't commit credentials
984
+ - Use SSH keys, not passwords
985
+ - Audit changes
986
+
987
+ 5. **Documentation:**
988
+ - README for each role/cookbook
989
+ - Variable documentation
990
+ - Usage examples
991
+ - Runbooks for operations
992
+
993
+ ---
994
+
995
+ **Related Topics:**
996
+ - See [automation-patterns.md](automation-patterns.md) for automation best practices
997
+ - See [shell-scripting.md](shell-scripting.md) for scripting patterns
998
+ - See [linux-administration.md](linux-administration.md) for system management