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,915 @@
1
+ # Container Security
2
+
3
+ Comprehensive guide to securing container images and runtime environments, covering image scanning, base image selection, vulnerability remediation, distroless images, runtime security, and container best practices.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Overview](#overview)
8
+ - [Image Scanning](#image-scanning)
9
+ - [Base Image Selection](#base-image-selection)
10
+ - [Distroless Images](#distroless-images)
11
+ - [Runtime Security](#runtime-security)
12
+ - [Pod Security Standards](#pod-security-standards)
13
+ - [Image Signing and Verification](#image-signing-and-verification)
14
+ - [Container Hardening](#container-hardening)
15
+ - [Best Practices](#best-practices)
16
+ - [Anti-Patterns](#anti-patterns)
17
+
18
+ ## Overview
19
+
20
+ **Container Security Layers:**
21
+
22
+ ```
23
+ ┌────────────────────────────────────────────────┐
24
+ │ Supply Chain Security │
25
+ │ (Image signing, SBOM, provenance) │
26
+ ├────────────────────────────────────────────────┤
27
+ │ Build-Time Security │
28
+ │ (Base image, dependencies, scanning) │
29
+ ├────────────────────────────────────────────────┤
30
+ │ Registry Security │
31
+ │ (Access control, encryption, scanning) │
32
+ ├────────────────────────────────────────────────┤
33
+ │ Runtime Security │
34
+ │ (Falco, AppArmor, Seccomp, monitoring) │
35
+ └────────────────────────────────────────────────┘
36
+ ```
37
+
38
+ ## Image Scanning
39
+
40
+ ### Trivy Image Scanning
41
+
42
+ **Basic Scanning:**
43
+ ```bash
44
+ # Scan image
45
+ trivy image nginx:latest
46
+
47
+ # Scan with severity filter
48
+ trivy image --severity HIGH,CRITICAL nginx:latest
49
+
50
+ # Scan local Dockerfile
51
+ trivy config Dockerfile
52
+
53
+ # Scan and fail on vulnerabilities
54
+ trivy image --exit-code 1 --severity CRITICAL nginx:latest
55
+
56
+ # Generate SBOM
57
+ trivy image --format cyclonedx nginx:latest
58
+ ```
59
+
60
+ **CI Integration:**
61
+ ```yaml
62
+ # .github/workflows/container-scan.yml
63
+ name: Container Security Scan
64
+
65
+ on:
66
+ push:
67
+ branches: [ main ]
68
+ pull_request:
69
+
70
+ jobs:
71
+ trivy-scan:
72
+ runs-on: ubuntu-latest
73
+ steps:
74
+ - uses: actions/checkout@v3
75
+
76
+ - name: Build image
77
+ run: |
78
+ docker build -t myapp:${{ github.sha }} .
79
+
80
+ - name: Run Trivy vulnerability scanner
81
+ uses: aquasecurity/trivy-action@master
82
+ with:
83
+ image-ref: 'myapp:${{ github.sha }}'
84
+ format: 'sarif'
85
+ output: 'trivy-results.sarif'
86
+ severity: 'CRITICAL,HIGH'
87
+ exit-code: '1'
88
+
89
+ - name: Upload Trivy results to GitHub Security
90
+ uses: github/codeql-action/upload-sarif@v2
91
+ if: always()
92
+ with:
93
+ sarif_file: 'trivy-results.sarif'
94
+
95
+ - name: Generate SBOM
96
+ uses: aquasecurity/trivy-action@master
97
+ with:
98
+ image-ref: 'myapp:${{ github.sha }}'
99
+ format: 'cyclonedx'
100
+ output: 'sbom.json'
101
+
102
+ - name: Upload SBOM
103
+ uses: actions/upload-artifact@v3
104
+ with:
105
+ name: sbom
106
+ path: sbom.json
107
+ ```
108
+
109
+ **Trivy Configuration:**
110
+ ```yaml
111
+ # trivy.yaml
112
+ scan:
113
+ security-checks:
114
+ - vuln
115
+ - config
116
+ - secret
117
+
118
+ severity:
119
+ - CRITICAL
120
+ - HIGH
121
+
122
+ vulnerability:
123
+ type:
124
+ - os
125
+ - library
126
+
127
+ ignore-unfixed: true
128
+
129
+ secret:
130
+ config: .trivyignore-secrets
131
+ ```
132
+
133
+ **Ignore File:**
134
+ ```
135
+ # .trivyignore
136
+ # Temporary ignore for CVE with no fix available
137
+ CVE-2023-12345
138
+
139
+ # Ignore low severity in dev dependencies
140
+ CVE-2023-67890 npm:dev-dependency
141
+ ```
142
+
143
+ ### Grype Scanning
144
+
145
+ ```bash
146
+ # Install Grype
147
+ curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh
148
+
149
+ # Scan image
150
+ grype nginx:latest
151
+
152
+ # Only high/critical
153
+ grype nginx:latest --fail-on high
154
+
155
+ # Output formats
156
+ grype nginx:latest -o json > results.json
157
+ grype nginx:latest -o sarif > results.sarif
158
+ grype nginx:latest -o template -t grype-report.tmpl
159
+ ```
160
+
161
+ ### Snyk Container
162
+
163
+ ```bash
164
+ # Authenticate
165
+ snyk auth
166
+
167
+ # Scan image
168
+ snyk container test nginx:latest
169
+
170
+ # Monitor image
171
+ snyk container monitor nginx:latest --project-name=nginx-prod
172
+
173
+ # Test Dockerfile
174
+ snyk container test nginx:latest --file=Dockerfile
175
+
176
+ # Get remediation advice
177
+ snyk container test nginx:latest --json | jq '.vulnerabilities[].remediation'
178
+ ```
179
+
180
+ **GitHub Action:**
181
+ ```yaml
182
+ - name: Snyk Container Scan
183
+ uses: snyk/actions/docker@master
184
+ env:
185
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
186
+ with:
187
+ image: myapp:latest
188
+ args: --severity-threshold=high --file=Dockerfile
189
+ ```
190
+
191
+ ## Base Image Selection
192
+
193
+ ### Official vs Custom Images
194
+
195
+ **Official Images (Recommended):**
196
+ ```dockerfile
197
+ # ✅ Good: Official images, well-maintained
198
+ FROM node:20-alpine
199
+ FROM python:3.11-slim
200
+ FROM nginx:1.25-alpine
201
+ FROM postgres:15-alpine
202
+ ```
203
+
204
+ **Avoid:**
205
+ ```dockerfile
206
+ # ❌ Bad: Unknown source, no security updates
207
+ FROM someuser/custom-node:latest
208
+ FROM random-image:v1
209
+ ```
210
+
211
+ ### Choosing the Right Variant
212
+
213
+ **Variants Comparison:**
214
+
215
+ | Variant | Size | Use Case | Security |
216
+ |---------|------|----------|----------|
217
+ | `alpine` | ~5MB | Production, minimal | Excellent |
218
+ | `slim` | ~50MB | Good balance | Very Good |
219
+ | `standard` | ~200MB | Dev, all tools | Good |
220
+ | `distroless` | ~20MB | Production, secure | Excellent |
221
+
222
+ **Examples:**
223
+
224
+ ```dockerfile
225
+ # Alpine (smallest)
226
+ FROM node:20-alpine
227
+ # Size: ~50MB, Good for production
228
+
229
+ # Slim (balanced)
230
+ FROM python:3.11-slim
231
+ # Size: ~150MB, Common packages included
232
+
233
+ # Distroless (most secure)
234
+ FROM gcr.io/distroless/nodejs20-debian11
235
+ # Size: ~70MB, No shell, minimal attack surface
236
+ ```
237
+
238
+ ### Multi-Stage Builds
239
+
240
+ **Security Benefits:**
241
+ - Remove build tools from final image
242
+ - Smaller attack surface
243
+ - Reduced vulnerability count
244
+
245
+ ```dockerfile
246
+ # Multi-stage build for security
247
+ FROM node:20-alpine AS builder
248
+ WORKDIR /app
249
+
250
+ # Install dependencies
251
+ COPY package*.json ./
252
+ RUN npm ci --only=production && \
253
+ npm cache clean --force
254
+
255
+ COPY . .
256
+ RUN npm run build
257
+
258
+ # Final production image
259
+ FROM gcr.io/distroless/nodejs20-debian11
260
+ WORKDIR /app
261
+
262
+ # Copy only necessary files
263
+ COPY --from=builder /app/dist ./dist
264
+ COPY --from=builder /app/node_modules ./node_modules
265
+ COPY --from=builder /app/package.json ./
266
+
267
+ # Non-root user (distroless default)
268
+ USER nonroot:nonroot
269
+
270
+ # Start app
271
+ CMD ["dist/index.js"]
272
+ ```
273
+
274
+ **Comparison:**
275
+
276
+ ```bash
277
+ # Standard build
278
+ FROM node:20
279
+ WORKDIR /app
280
+ COPY . .
281
+ RUN npm install
282
+ CMD ["node", "index.js"]
283
+ # Result: 900MB, 200+ vulnerabilities
284
+
285
+ # Multi-stage + distroless
286
+ FROM node:20-alpine AS builder
287
+ # ... build steps
288
+ FROM gcr.io/distroless/nodejs20-debian11
289
+ # ... minimal copy
290
+ # Result: 150MB, 5 vulnerabilities
291
+ ```
292
+
293
+ ## Distroless Images
294
+
295
+ ### What are Distroless Images?
296
+
297
+ **Traditional Image:**
298
+ ```
299
+ Application
300
+ Node.js Runtime
301
+ Shell, Package Manager, Utils
302
+ Base OS (Debian/Alpine)
303
+ ────────────────────
304
+ Size: 200MB
305
+ Attack Surface: Large
306
+ CVEs: 100+
307
+ ```
308
+
309
+ **Distroless Image:**
310
+ ```
311
+ Application
312
+ Node.js Runtime
313
+ Base OS (minimal)
314
+ ────────────────────
315
+ Size: 70MB
316
+ Attack Surface: Minimal
317
+ CVEs: 5-10
318
+ ```
319
+
320
+ ### Using Distroless
321
+
322
+ **Node.js Example:**
323
+ ```dockerfile
324
+ FROM node:20-alpine AS builder
325
+ WORKDIR /app
326
+ COPY package*.json ./
327
+ RUN npm ci --only=production
328
+ COPY . .
329
+ RUN npm run build
330
+
331
+ FROM gcr.io/distroless/nodejs20-debian11
332
+ WORKDIR /app
333
+ COPY --from=builder /app/dist ./dist
334
+ COPY --from=builder /app/node_modules ./node_modules
335
+ EXPOSE 3000
336
+ USER nonroot:nonroot
337
+ CMD ["dist/index.js"]
338
+ ```
339
+
340
+ **Python Example:**
341
+ ```dockerfile
342
+ FROM python:3.11-slim AS builder
343
+ WORKDIR /app
344
+ COPY requirements.txt .
345
+ RUN pip install --user --no-cache-dir -r requirements.txt
346
+ COPY . .
347
+
348
+ FROM gcr.io/distroless/python3-debian11
349
+ WORKDIR /app
350
+ COPY --from=builder /root/.local /root/.local
351
+ COPY --from=builder /app .
352
+ ENV PATH=/root/.local/bin:$PATH
353
+ USER nonroot:nonroot
354
+ CMD ["app.py"]
355
+ ```
356
+
357
+ **Java Example:**
358
+ ```dockerfile
359
+ FROM maven:3.9-eclipse-temurin-17 AS builder
360
+ WORKDIR /app
361
+ COPY pom.xml .
362
+ RUN mvn dependency:go-offline
363
+ COPY src ./src
364
+ RUN mvn package -DskipTests
365
+
366
+ FROM gcr.io/distroless/java17-debian11
367
+ WORKDIR /app
368
+ COPY --from=builder /app/target/app.jar .
369
+ USER nonroot:nonroot
370
+ CMD ["app.jar"]
371
+ ```
372
+
373
+ ### Debugging Distroless Images
374
+
375
+ **Problem:** No shell for debugging
376
+
377
+ **Solution 1: Debug Variant**
378
+ ```dockerfile
379
+ # Use debug variant for troubleshooting
380
+ FROM gcr.io/distroless/nodejs20-debian11:debug
381
+ # Includes busybox shell
382
+ ```
383
+
384
+ ```bash
385
+ # Debug with docker exec
386
+ docker run -it --entrypoint=/busybox/sh myapp:debug
387
+ ```
388
+
389
+ **Solution 2: Ephemeral Debug Container**
390
+ ```bash
391
+ # Kubernetes ephemeral container
392
+ kubectl debug pod/myapp -it --image=busybox --target=myapp
393
+ ```
394
+
395
+ ## Runtime Security
396
+
397
+ ### Falco Implementation
398
+
399
+ **Installation (Kubernetes):**
400
+ ```yaml
401
+ # falco-helm-values.yaml
402
+ falco:
403
+ rules_file:
404
+ - /etc/falco/falco_rules.yaml
405
+ - /etc/falco/falco_rules.local.yaml
406
+ - /etc/falco/k8s_audit_rules.yaml
407
+
408
+ json_output: true
409
+ json_include_output_property: true
410
+
411
+ priority: warning
412
+
413
+ falcosidekick:
414
+ enabled: true
415
+ webui:
416
+ enabled: true
417
+ ```
418
+
419
+ ```bash
420
+ # Install via Helm
421
+ helm repo add falcosecurity https://falcosecurity.github.io/charts
422
+ helm repo update
423
+
424
+ helm install falco falcosecurity/falco \
425
+ --namespace falco --create-namespace \
426
+ -f falco-helm-values.yaml
427
+ ```
428
+
429
+ **Custom Falco Rules:**
430
+ ```yaml
431
+ # custom-rules.yaml
432
+ - rule: Unauthorized Process in Container
433
+ desc: Detect unauthorized processes running in containers
434
+ condition: >
435
+ spawned_process and
436
+ container and
437
+ not proc.name in (node, npm, python, java)
438
+ output: >
439
+ Unauthorized process started in container
440
+ (user=%user.name process=%proc.name
441
+ container=%container.name image=%container.image)
442
+ priority: WARNING
443
+
444
+ - rule: Container Drift Detected
445
+ desc: Detect file modifications in container
446
+ condition: >
447
+ evt.type = open and
448
+ evt.dir = < and
449
+ container and
450
+ fd.name startswith /app/ and
451
+ not proc.name in (node, npm)
452
+ output: >
453
+ File modified in running container
454
+ (file=%fd.name process=%proc.name
455
+ container=%container.name)
456
+ priority: ERROR
457
+
458
+ - rule: Sensitive File Access
459
+ desc: Detect access to sensitive files
460
+ condition: >
461
+ open_read and
462
+ sensitive_files and
463
+ not trusted_process
464
+ output: >
465
+ Sensitive file accessed
466
+ (file=%fd.name process=%proc.name user=%user.name)
467
+ priority: CRITICAL
468
+ ```
469
+
470
+ ### AppArmor Profiles
471
+
472
+ **Kubernetes with AppArmor:**
473
+ ```yaml
474
+ apiVersion: v1
475
+ kind: Pod
476
+ metadata:
477
+ name: secured-app
478
+ annotations:
479
+ container.apparmor.security.beta.kubernetes.io/app: localhost/k8s-apparmor-example
480
+ spec:
481
+ containers:
482
+ - name: app
483
+ image: nginx:alpine
484
+ securityContext:
485
+ allowPrivilegeEscalation: false
486
+ ```
487
+
488
+ **AppArmor Profile:**
489
+ ```
490
+ #include <tunables/global>
491
+
492
+ profile k8s-apparmor-example flags=(attach_disconnected,mediate_deleted) {
493
+ #include <abstractions/base>
494
+
495
+ # Allow network
496
+ network inet tcp,
497
+ network inet udp,
498
+
499
+ # Deny all file writes except in specific directories
500
+ deny /** w,
501
+ /app/** rw,
502
+ /tmp/** rw,
503
+
504
+ # Deny process execution except allowed binaries
505
+ deny /bin/** x,
506
+ deny /usr/bin/** x,
507
+ /usr/bin/node ix,
508
+
509
+ # Deny capability
510
+ deny capability sys_admin,
511
+ deny capability net_admin,
512
+ }
513
+ ```
514
+
515
+ ### Seccomp Profiles
516
+
517
+ ```json
518
+ {
519
+ "defaultAction": "SCMP_ACT_ERRNO",
520
+ "architectures": [
521
+ "SCMP_ARCH_X86_64",
522
+ "SCMP_ARCH_X86",
523
+ "SCMP_ARCH_ARM64"
524
+ ],
525
+ "syscalls": [
526
+ {
527
+ "names": [
528
+ "accept4", "bind", "listen", "connect", "socket",
529
+ "read", "write", "open", "close", "stat",
530
+ "fstat", "lstat", "poll", "epoll_wait",
531
+ "rt_sigaction", "rt_sigprocmask", "clone",
532
+ "execve", "wait4", "exit", "exit_group"
533
+ ],
534
+ "action": "SCMP_ACT_ALLOW"
535
+ }
536
+ ]
537
+ }
538
+ ```
539
+
540
+ **Using in Kubernetes:**
541
+ ```yaml
542
+ apiVersion: v1
543
+ kind: Pod
544
+ metadata:
545
+ name: secured-pod
546
+ spec:
547
+ securityContext:
548
+ seccompProfile:
549
+ type: Localhost
550
+ localhostProfile: profiles/restricted.json
551
+ containers:
552
+ - name: app
553
+ image: myapp:latest
554
+ ```
555
+
556
+ ## Pod Security Standards
557
+
558
+ ### Pod Security Levels
559
+
560
+ **Privileged (Unrestricted):**
561
+ ```yaml
562
+ # No restrictions - avoid in production
563
+ ```
564
+
565
+ **Baseline (Minimally Restrictive):**
566
+ ```yaml
567
+ apiVersion: v1
568
+ kind: Pod
569
+ metadata:
570
+ name: baseline-pod
571
+ spec:
572
+ containers:
573
+ - name: app
574
+ image: nginx:alpine
575
+ securityContext:
576
+ allowPrivilegeEscalation: false
577
+ capabilities:
578
+ drop: ["ALL"]
579
+ runAsNonRoot: true
580
+ ```
581
+
582
+ **Restricted (Highly Restrictive - Recommended):**
583
+ ```yaml
584
+ apiVersion: v1
585
+ kind: Pod
586
+ metadata:
587
+ name: restricted-pod
588
+ spec:
589
+ securityContext:
590
+ runAsNonRoot: true
591
+ runAsUser: 1000
592
+ fsGroup: 1000
593
+ seccompProfile:
594
+ type: RuntimeDefault
595
+
596
+ containers:
597
+ - name: app
598
+ image: nginx:alpine
599
+ securityContext:
600
+ allowPrivilegeEscalation: false
601
+ runAsNonRoot: true
602
+ runAsUser: 1000
603
+ capabilities:
604
+ drop: ["ALL"]
605
+ readOnlyRootFilesystem: true
606
+
607
+ volumeMounts:
608
+ - name: tmp
609
+ mountPath: /tmp
610
+ - name: cache
611
+ mountPath: /var/cache/nginx
612
+
613
+ volumes:
614
+ - name: tmp
615
+ emptyDir: {}
616
+ - name: cache
617
+ emptyDir: {}
618
+ ```
619
+
620
+ ### Namespace-Level Enforcement
621
+
622
+ ```yaml
623
+ # Enforce restricted standard for namespace
624
+ apiVersion: v1
625
+ kind: Namespace
626
+ metadata:
627
+ name: production
628
+ labels:
629
+ pod-security.kubernetes.io/enforce: restricted
630
+ pod-security.kubernetes.io/audit: restricted
631
+ pod-security.kubernetes.io/warn: restricted
632
+ ```
633
+
634
+ ## Image Signing and Verification
635
+
636
+ ### Cosign (Sigstore)
637
+
638
+ **Install Cosign:**
639
+ ```bash
640
+ # Linux
641
+ wget https://github.com/sigstore/cosign/releases/download/v2.0.0/cosign-linux-amd64
642
+ chmod +x cosign-linux-amd64
643
+ mv cosign-linux-amd64 /usr/local/bin/cosign
644
+
645
+ # macOS
646
+ brew install cosign
647
+ ```
648
+
649
+ **Generate Keys:**
650
+ ```bash
651
+ # Generate key pair
652
+ cosign generate-key-pair
653
+
654
+ # Outputs:
655
+ # - cosign.key (private key - keep secure!)
656
+ # - cosign.pub (public key - distribute)
657
+ ```
658
+
659
+ **Sign Image:**
660
+ ```bash
661
+ # Sign image
662
+ cosign sign --key cosign.key myregistry.com/myapp:v1.0.0
663
+
664
+ # Keyless signing (OIDC)
665
+ cosign sign myregistry.com/myapp:v1.0.0
666
+
667
+ # Sign with annotations
668
+ cosign sign --key cosign.key \
669
+ -a git_commit=$(git rev-parse HEAD) \
670
+ -a build_date=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
671
+ myregistry.com/myapp:v1.0.0
672
+ ```
673
+
674
+ **Verify Image:**
675
+ ```bash
676
+ # Verify signature
677
+ cosign verify --key cosign.pub myregistry.com/myapp:v1.0.0
678
+
679
+ # Keyless verification
680
+ cosign verify \
681
+ --certificate-identity=user@example.com \
682
+ --certificate-oidc-issuer=https://github.com/login/oauth \
683
+ myregistry.com/myapp:v1.0.0
684
+ ```
685
+
686
+ **CI Integration:**
687
+ ```yaml
688
+ # .github/workflows/sign-image.yml
689
+ name: Build and Sign Container
690
+
691
+ on:
692
+ push:
693
+ tags: [ 'v*' ]
694
+
695
+ jobs:
696
+ build-sign:
697
+ runs-on: ubuntu-latest
698
+ permissions:
699
+ contents: read
700
+ packages: write
701
+ id-token: write # For keyless signing
702
+
703
+ steps:
704
+ - uses: actions/checkout@v3
705
+
706
+ - name: Login to registry
707
+ uses: docker/login-action@v2
708
+ with:
709
+ registry: ghcr.io
710
+ username: ${{ github.actor }}
711
+ password: ${{ secrets.GITHUB_TOKEN }}
712
+
713
+ - name: Build and push
714
+ uses: docker/build-push-action@v4
715
+ with:
716
+ push: true
717
+ tags: ghcr.io/${{ github.repository }}:${{ github.ref_name }}
718
+
719
+ - name: Install Cosign
720
+ uses: sigstore/cosign-installer@v3
721
+
722
+ - name: Sign image
723
+ run: |
724
+ cosign sign --yes \
725
+ ghcr.io/${{ github.repository }}:${{ github.ref_name }}
726
+ ```
727
+
728
+ ### Admission Controller Verification
729
+
730
+ **Kyverno Policy:**
731
+ ```yaml
732
+ apiVersion: kyverno.io/v1
733
+ kind: ClusterPolicy
734
+ metadata:
735
+ name: verify-image-signature
736
+ spec:
737
+ validationFailureAction: enforce
738
+ background: false
739
+ rules:
740
+ - name: verify-signature
741
+ match:
742
+ any:
743
+ - resources:
744
+ kinds:
745
+ - Pod
746
+ verifyImages:
747
+ - imageReferences:
748
+ - "myregistry.com/*"
749
+ attestors:
750
+ - entries:
751
+ - keys:
752
+ publicKeys: |-
753
+ -----BEGIN PUBLIC KEY-----
754
+ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...
755
+ -----END PUBLIC KEY-----
756
+ ```
757
+
758
+ ## Container Hardening
759
+
760
+ ### Minimal Dockerfile
761
+
762
+ ```dockerfile
763
+ # ✅ Secure Dockerfile
764
+ FROM node:20-alpine AS builder
765
+ WORKDIR /app
766
+
767
+ # Install dependencies as non-root
768
+ RUN addgroup -g 1001 -S nodejs && \
769
+ adduser -S nodejs -u 1001
770
+
771
+ # Copy dependency files
772
+ COPY --chown=nodejs:nodejs package*.json ./
773
+
774
+ # Install dependencies
775
+ RUN npm ci --only=production && \
776
+ npm cache clean --force
777
+
778
+ # Copy application
779
+ COPY --chown=nodejs:nodejs . .
780
+
781
+ # Build application
782
+ RUN npm run build
783
+
784
+ # Production image
785
+ FROM gcr.io/distroless/nodejs20-debian11
786
+ WORKDIR /app
787
+
788
+ # Copy from builder
789
+ COPY --from=builder --chown=nonroot:nonroot /app/dist ./dist
790
+ COPY --from=builder --chown=nonroot:nonroot /app/node_modules ./node_modules
791
+ COPY --from=builder --chown=nonroot:nonroot /app/package.json ./
792
+
793
+ # Use non-root user
794
+ USER nonroot:nonroot
795
+
796
+ # Health check
797
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
798
+ CMD ["/nodejs/bin/node", "-e", "fetch('http://localhost:3000/health')"]
799
+
800
+ # Expose port
801
+ EXPOSE 3000
802
+
803
+ # Start application
804
+ CMD ["dist/index.js"]
805
+ ```
806
+
807
+ ### Security Best Practices
808
+
809
+ ```dockerfile
810
+ # ❌ Bad practices
811
+ FROM ubuntu:latest # Don't use 'latest'
812
+ RUN apt-get update # Don't run as root
813
+ ADD http://example.com/file.tar.gz / # Unsafe ADD
814
+ COPY secrets.env . # Never copy secrets
815
+ RUN chmod 777 /app # Overly permissive
816
+
817
+ # ✅ Good practices
818
+ FROM ubuntu:22.04 # Use specific versions
819
+ RUN apt-get update && apt-get install -y package \
820
+ && rm -rf /var/lib/apt/lists/* # Clean up
821
+ COPY --chown=user:user file.tar.gz / # Use COPY, set ownership
822
+ # Use secret management, not files
823
+ RUN chmod 755 /app # Minimal permissions
824
+ USER nonroot # Run as non-root
825
+ ```
826
+
827
+ ## Best Practices
828
+
829
+ ### 1. Use Minimal Base Images
830
+
831
+ ```dockerfile
832
+ # Size and security comparison
833
+ alpine: 5 MB, ~5 CVEs
834
+ distroless: 20 MB, ~3 CVEs
835
+ slim: 50 MB, ~15 CVEs
836
+ standard: 200 MB, ~50 CVEs
837
+ ```
838
+
839
+ ### 2. Multi-Stage Builds
840
+
841
+ Keep build tools out of production images.
842
+
843
+ ### 3. Scan Images Regularly
844
+
845
+ ```bash
846
+ # Scan on build
847
+ # Scan on schedule (weekly)
848
+ # Scan on new vulnerabilities
849
+ ```
850
+
851
+ ### 4. Sign Images
852
+
853
+ Verify image authenticity and integrity.
854
+
855
+ ### 5. Run as Non-Root
856
+
857
+ ```dockerfile
858
+ USER nonroot:nonroot
859
+ ```
860
+
861
+ ### 6. Drop Capabilities
862
+
863
+ ```yaml
864
+ securityContext:
865
+ capabilities:
866
+ drop: ["ALL"]
867
+ ```
868
+
869
+ ### 7. Read-Only Root Filesystem
870
+
871
+ ```yaml
872
+ securityContext:
873
+ readOnlyRootFilesystem: true
874
+ ```
875
+
876
+ ### 8. Network Policies
877
+
878
+ Restrict container network access.
879
+
880
+ ### 9. Resource Limits
881
+
882
+ Prevent resource exhaustion.
883
+
884
+ ### 10. Runtime Monitoring
885
+
886
+ Use Falco or similar tools.
887
+
888
+ ## Anti-Patterns
889
+
890
+ ❌ **Using `latest` tag** - Unpredictable, not reproducible
891
+
892
+ ❌ **Running as root** - Unnecessary privilege
893
+
894
+ ❌ **Including secrets in image** - Exposed in layers
895
+
896
+ ❌ **Not scanning images** - Unknown vulnerabilities
897
+
898
+ ❌ **Privileged containers** - Full host access
899
+
900
+ ❌ **No resource limits** - Resource exhaustion risk
901
+
902
+ ❌ **Mutable containers** - Configuration drift
903
+
904
+ ❌ **Ignoring CVEs** - "Won't fix" attitude
905
+
906
+ ❌ **No signature verification** - Supply chain risk
907
+
908
+ ❌ **Large images** - More vulnerabilities, slow deployments
909
+
910
+ ---
911
+
912
+ **Related Resources:**
913
+ - [security-scanning.md](security-scanning.md) - Vulnerability scanning tools
914
+ - [supply-chain-security.md](supply-chain-security.md) - SBOM, provenance
915
+ - [policy-enforcement.md](policy-enforcement.md) - OPA, Kyverno policies