pumuki-ast-hooks 5.3.1

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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1105 -0
  3. package/bin/__tests__/auto-fix-violations.spec.js +132 -0
  4. package/bin/__tests__/auto-restart-guards.spec.js +11 -0
  5. package/bin/__tests__/check-doc-drift.spec.js +11 -0
  6. package/bin/__tests__/check-version.spec.js +240 -0
  7. package/bin/__tests__/cli.spec.js +11 -0
  8. package/bin/__tests__/guard-auto-manager.spec.js +11 -0
  9. package/bin/__tests__/guard-supervisor.spec.js +11 -0
  10. package/bin/__tests__/hook-status.spec.js +11 -0
  11. package/bin/__tests__/install.spec.js +11 -0
  12. package/bin/__tests__/nightly-metrics-report.spec.js +94 -0
  13. package/bin/__tests__/plan-review.spec.js +11 -0
  14. package/bin/__tests__/predictive-hooks.spec.js +11 -0
  15. package/bin/__tests__/run-ast-adapter.spec.js +11 -0
  16. package/bin/__tests__/run-orchestrator.spec.js +11 -0
  17. package/bin/__tests__/run-playbook.spec.js +11 -0
  18. package/bin/__tests__/setup-eslint.spec.js +11 -0
  19. package/bin/__tests__/violations-api.spec.js +11 -0
  20. package/bin/__tests__/watch-hooks.spec.js +11 -0
  21. package/bin/ai-commit.sh +5 -0
  22. package/bin/audit +5 -0
  23. package/bin/audit-library.js +6 -0
  24. package/bin/auto-fix-violations.js +19 -0
  25. package/bin/auto-restart-guards.js +6 -0
  26. package/bin/check-doc-drift.js +6 -0
  27. package/bin/check-version.js +19 -0
  28. package/bin/cleanup-branches.sh +5 -0
  29. package/bin/cli.js +6 -0
  30. package/bin/demo-recording.sh +5 -0
  31. package/bin/demo-violations +5 -0
  32. package/bin/fix-enforcer +5 -0
  33. package/bin/fix-gitflow-enforcement.sh +5 -0
  34. package/bin/generate-progress-report.sh +5 -0
  35. package/bin/git-analyze-pairs.sh +5 -0
  36. package/bin/git-leave-branch-check.sh +5 -0
  37. package/bin/gitflow +5 -0
  38. package/bin/gitflow-shell-integration.sh +5 -0
  39. package/bin/guard-auto-manager.js +6 -0
  40. package/bin/guard-autostart.sh +5 -0
  41. package/bin/guard-env.sh +5 -0
  42. package/bin/guard-supervisor.js +6 -0
  43. package/bin/hook-status.js +6 -0
  44. package/bin/install-git-wrapper.sh +5 -0
  45. package/bin/install.js +6 -0
  46. package/bin/kill-mcp-zombies.sh +5 -0
  47. package/bin/nightly-metrics-report.js +8 -0
  48. package/bin/plan-review.js +6 -0
  49. package/bin/predictive-hooks.js +6 -0
  50. package/bin/pumuki-audit.js +6 -0
  51. package/bin/pumuki-init.js +19 -0
  52. package/bin/pumuki-mcp-server.js +13 -0
  53. package/bin/pumuki-mcp.js +6 -0
  54. package/bin/pumuki-rules.js +6 -0
  55. package/bin/request-no-verify-approval.sh +5 -0
  56. package/bin/run-ast-adapter.js +6 -0
  57. package/bin/run-intelligent-audit.sh +5 -0
  58. package/bin/run-orchestrator.js +6 -0
  59. package/bin/run-playbook.js +6 -0
  60. package/bin/session-loader.sh +5 -0
  61. package/bin/setup-eslint.js +6 -0
  62. package/bin/start-guards.sh +5 -0
  63. package/bin/sync-autonomous-orchestrator.sh +5 -0
  64. package/bin/sync-to-library.sh +5 -0
  65. package/bin/update-evidence.sh +5 -0
  66. package/bin/update-session-context.sh +5 -0
  67. package/bin/verify-no-verify.sh +5 -0
  68. package/bin/violations +5 -0
  69. package/bin/violations-api.js +6 -0
  70. package/bin/watch-hooks.js +6 -0
  71. package/docs/API_REFERENCE.md +161 -0
  72. package/docs/ARCHITECTURE.md +236 -0
  73. package/docs/ARCHITECTURE_DETAILED.md +499 -0
  74. package/docs/BRANCH_PROTECTION_GUIDE.md +236 -0
  75. package/docs/CODE_STANDARDS.md +440 -0
  76. package/docs/CONTRIBUTING.md +246 -0
  77. package/docs/DEPENDENCIES.md +541 -0
  78. package/docs/HOW_IT_WORKS.md +716 -0
  79. package/docs/INSTALLATION.md +784 -0
  80. package/docs/MCP_SERVERS.md +786 -0
  81. package/docs/TESTING.md +423 -0
  82. package/docs/USAGE.md +856 -0
  83. package/docs/images/ast_intelligence_01.png +0 -0
  84. package/docs/images/ast_intelligence_02.png +0 -0
  85. package/docs/images/ast_intelligence_03.png +0 -0
  86. package/docs/images/ast_intelligence_04.png +0 -0
  87. package/docs/images/ast_intelligence_05.png +0 -0
  88. package/hooks/getSkillRulesPath.ts +52 -0
  89. package/hooks/git-status-monitor.ts +160 -0
  90. package/hooks/index.js +5 -0
  91. package/hooks/notify-macos.ts +42 -0
  92. package/hooks/package.json +16 -0
  93. package/hooks/post-tool-use-tracker.sh +89 -0
  94. package/hooks/pre-tool-use-evidence-validator.ts +252 -0
  95. package/hooks/pre-tool-use-guard.ts +151 -0
  96. package/hooks/skill-activation-prompt.sh +8 -0
  97. package/hooks/skill-activation-prompt.ts +307 -0
  98. package/index.js +49 -0
  99. package/package.json +117 -0
  100. package/presentation/cli/audit.sh +24 -0
  101. package/presentation/cli/autonomous-status.sh +92 -0
  102. package/presentation/cli/categorize-violations.sh +179 -0
  103. package/presentation/cli/direct-audit-option2.sh +23 -0
  104. package/presentation/cli/direct-audit.sh +33 -0
  105. package/scripts/hooks-system/.AI_TOKEN_STATUS.txt +16 -0
  106. package/scripts/hooks-system/.audit-reports/auto-recovery.log +1 -0
  107. package/scripts/hooks-system/.audit-reports/install-wizard.log +4 -0
  108. package/scripts/hooks-system/.audit-reports/notifications.log +425 -0
  109. package/scripts/hooks-system/.audit-reports/token-monitor.log +1275 -0
  110. package/scripts/hooks-system/.audit_tmp/intelligent-report.json +44953 -0
  111. package/scripts/hooks-system/.audit_tmp/intelligent-report.txt +1338 -0
  112. package/scripts/hooks-system/.audit_tmp/severity-history.jsonl +1 -0
  113. package/scripts/hooks-system/.audit_tmp/token-usage.jsonl +1 -0
  114. package/scripts/hooks-system/.hook-system/config.json +8 -0
  115. package/scripts/hooks-system/application/CompositionRoot.js +325 -0
  116. package/scripts/hooks-system/application/__tests__/CompositionRoot.spec.js +84 -0
  117. package/scripts/hooks-system/application/commands/index.js +64 -0
  118. package/scripts/hooks-system/application/queries/index.js +60 -0
  119. package/scripts/hooks-system/application/services/AutonomousOrchestrator.js +130 -0
  120. package/scripts/hooks-system/application/services/ContextDetectionEngine.js +181 -0
  121. package/scripts/hooks-system/application/services/DynamicRulesLoader.js +182 -0
  122. package/scripts/hooks-system/application/services/GitFlowService.js +156 -0
  123. package/scripts/hooks-system/application/services/GitTreeState.js +140 -0
  124. package/scripts/hooks-system/application/services/HookSystemScheduler.js +77 -0
  125. package/scripts/hooks-system/application/services/IntelligentCommitAnalyzer.js +151 -0
  126. package/scripts/hooks-system/application/services/IntelligentGitTreeMonitor.js +118 -0
  127. package/scripts/hooks-system/application/services/PlatformAnalysisService.js +173 -0
  128. package/scripts/hooks-system/application/services/PlatformDetectionService.js +168 -0
  129. package/scripts/hooks-system/application/services/PlaybookRunner.js +39 -0
  130. package/scripts/hooks-system/application/services/PredictiveHookAdvisor.js +56 -0
  131. package/scripts/hooks-system/application/services/RealtimeGuardPlugin.js +62 -0
  132. package/scripts/hooks-system/application/services/RealtimeGuardService.js +374 -0
  133. package/scripts/hooks-system/application/services/SmartDirtyTreeAnalyzer.js +63 -0
  134. package/scripts/hooks-system/application/services/__tests__/AutonomousOrchestrator.spec.js +36 -0
  135. package/scripts/hooks-system/application/services/__tests__/ContextDetectionEngine.spec.js +33 -0
  136. package/scripts/hooks-system/application/services/__tests__/DynamicRulesLoader.spec.js +43 -0
  137. package/scripts/hooks-system/application/services/__tests__/GitTreeState.spec.js +163 -0
  138. package/scripts/hooks-system/application/services/__tests__/HookSystemScheduler.spec.js +207 -0
  139. package/scripts/hooks-system/application/services/__tests__/IntelligentCommitAnalyzer.spec.js +365 -0
  140. package/scripts/hooks-system/application/services/__tests__/IntelligentGitTreeMonitor.spec.js +188 -0
  141. package/scripts/hooks-system/application/services/__tests__/PlatformDetectionService.spec.js +28 -0
  142. package/scripts/hooks-system/application/services/__tests__/PlaybookRunner.spec.js +143 -0
  143. package/scripts/hooks-system/application/services/__tests__/PredictiveHookAdvisor.spec.js +181 -0
  144. package/scripts/hooks-system/application/services/__tests__/RealtimeGuardPlugin.spec.js +45 -0
  145. package/scripts/hooks-system/application/services/__tests__/RealtimeGuardService.critical.spec.js +401 -0
  146. package/scripts/hooks-system/application/services/commit/CommitMessageGenerator.js +34 -0
  147. package/scripts/hooks-system/application/services/commit/FeatureDetector.js +101 -0
  148. package/scripts/hooks-system/application/services/evidence/EvidenceContextManager.js +163 -0
  149. package/scripts/hooks-system/application/services/evidence/__tests__/EvidenceContextManager.spec.js +98 -0
  150. package/scripts/hooks-system/application/services/guard/GuardAutoManagerService.js +169 -0
  151. package/scripts/hooks-system/application/services/guard/GuardConfig.js +15 -0
  152. package/scripts/hooks-system/application/services/guard/GuardEventLogger.js +70 -0
  153. package/scripts/hooks-system/application/services/guard/GuardHealthReminder.js +54 -0
  154. package/scripts/hooks-system/application/services/guard/GuardHeartbeatMonitor.js +94 -0
  155. package/scripts/hooks-system/application/services/guard/GuardLockManager.js +72 -0
  156. package/scripts/hooks-system/application/services/guard/GuardMonitorLoop.js +29 -0
  157. package/scripts/hooks-system/application/services/guard/GuardNotificationHandler.js +36 -0
  158. package/scripts/hooks-system/application/services/guard/GuardProcessManager.js +113 -0
  159. package/scripts/hooks-system/application/services/guard/GuardRecoveryService.js +90 -0
  160. package/scripts/hooks-system/application/services/guard/__tests__/GuardAutoManagerService.spec.js +77 -0
  161. package/scripts/hooks-system/application/services/installation/ConfigurationGeneratorService.js +123 -0
  162. package/scripts/hooks-system/application/services/installation/FileSystemInstallerService.js +112 -0
  163. package/scripts/hooks-system/application/services/installation/GitEnvironmentService.js +166 -0
  164. package/scripts/hooks-system/application/services/installation/HookInstaller.js +197 -0
  165. package/scripts/hooks-system/application/services/installation/IdeIntegrationService.js +37 -0
  166. package/scripts/hooks-system/application/services/installation/InstallService.js +130 -0
  167. package/scripts/hooks-system/application/services/installation/McpConfigurator.js +172 -0
  168. package/scripts/hooks-system/application/services/installation/PlatformDetectorService.js +36 -0
  169. package/scripts/hooks-system/application/services/installation/VSCodeTaskConfigurator.js +97 -0
  170. package/scripts/hooks-system/application/services/logging/UnifiedLogger.js +142 -0
  171. package/scripts/hooks-system/application/services/logging/__tests__/UnifiedLogger.spec.js +66 -0
  172. package/scripts/hooks-system/application/services/monitoring/ActivityMonitor.js +80 -0
  173. package/scripts/hooks-system/application/services/monitoring/AstMonitor.js +140 -0
  174. package/scripts/hooks-system/application/services/monitoring/DevDocsMonitor.js +85 -0
  175. package/scripts/hooks-system/application/services/monitoring/EvidenceMonitor.js +103 -0
  176. package/scripts/hooks-system/application/services/monitoring/EvidenceMonitorService.js +162 -0
  177. package/scripts/hooks-system/application/services/monitoring/GitTreeMonitor.js +123 -0
  178. package/scripts/hooks-system/application/services/monitoring/GitTreeMonitorService.js +114 -0
  179. package/scripts/hooks-system/application/services/monitoring/HealthCheckProviders.js +153 -0
  180. package/scripts/hooks-system/application/services/monitoring/HealthCheckService.js +118 -0
  181. package/scripts/hooks-system/application/services/monitoring/HeartbeatMonitorService.js +61 -0
  182. package/scripts/hooks-system/application/services/monitoring/TokenMonitor.js +60 -0
  183. package/scripts/hooks-system/application/services/monitoring/__tests__/EvidenceMonitorService.spec.js +107 -0
  184. package/scripts/hooks-system/application/services/monitoring/__tests__/GitTreeMonitorService.spec.js +27 -0
  185. package/scripts/hooks-system/application/services/monitoring/__tests__/HealthCheckProviders.spec.js +68 -0
  186. package/scripts/hooks-system/application/services/monitoring/__tests__/HealthCheckService.spec.js +69 -0
  187. package/scripts/hooks-system/application/services/monitoring/__tests__/HeartbeatMonitorService.spec.js +35 -0
  188. package/scripts/hooks-system/application/services/notification/MacNotificationSender.js +106 -0
  189. package/scripts/hooks-system/application/services/notification/NotificationCenterService.js +221 -0
  190. package/scripts/hooks-system/application/services/notification/NotificationDispatcher.js +42 -0
  191. package/scripts/hooks-system/application/services/notification/__tests__/NotificationCenterService.spec.js +40 -0
  192. package/scripts/hooks-system/application/services/notification/components/NotificationCooldownManager.js +62 -0
  193. package/scripts/hooks-system/application/services/notification/components/NotificationDeduplicator.js +67 -0
  194. package/scripts/hooks-system/application/services/notification/components/NotificationQueue.js +36 -0
  195. package/scripts/hooks-system/application/services/notification/components/NotificationRetryExecutor.js +58 -0
  196. package/scripts/hooks-system/application/services/platform/PlatformHeuristics.js +144 -0
  197. package/scripts/hooks-system/application/services/recovery/AutoRecoveryManager.js +137 -0
  198. package/scripts/hooks-system/application/services/recovery/__tests__/AutoRecoveryManager.spec.js +62 -0
  199. package/scripts/hooks-system/application/services/smart-commit/CommitMessageSuggester.js +97 -0
  200. package/scripts/hooks-system/application/services/smart-commit/FileContextGrouper.js +114 -0
  201. package/scripts/hooks-system/application/services/smart-commit/SmartCommitSummaryBuilder.js +53 -0
  202. package/scripts/hooks-system/application/services/token/CursorTokenService.js +44 -0
  203. package/scripts/hooks-system/application/services/token/TokenMetricsService.js +109 -0
  204. package/scripts/hooks-system/application/services/token/TokenMonitorService.js +160 -0
  205. package/scripts/hooks-system/application/services/token/TokenStatusReporter.js +56 -0
  206. package/scripts/hooks-system/application/services/token/__tests__/CursorTokenService.spec.js +69 -0
  207. package/scripts/hooks-system/application/services/token/__tests__/TokenMonitorService.spec.js +185 -0
  208. package/scripts/hooks-system/application/state/HookSystemStateMachine.js +59 -0
  209. package/scripts/hooks-system/application/state/__tests__/HookSystemStateMachine.spec.js +115 -0
  210. package/scripts/hooks-system/application/use-cases/AnalyzeCodebaseUseCase.js +54 -0
  211. package/scripts/hooks-system/application/use-cases/AnalyzeStagedFilesUseCase.js +61 -0
  212. package/scripts/hooks-system/application/use-cases/AutoExecuteAIStartUseCase.js +123 -0
  213. package/scripts/hooks-system/application/use-cases/BlockCommitUseCase.js +90 -0
  214. package/scripts/hooks-system/application/use-cases/GenerateAuditReportUseCase.js +184 -0
  215. package/scripts/hooks-system/application/use-cases/__tests__/AnalyzeCodebaseUseCase.spec.js +156 -0
  216. package/scripts/hooks-system/application/use-cases/__tests__/AnalyzeStagedFilesUseCase.spec.js +146 -0
  217. package/scripts/hooks-system/application/use-cases/__tests__/AutoExecuteAIStartUseCase.spec.js +89 -0
  218. package/scripts/hooks-system/application/use-cases/__tests__/BlockCommitUseCase.spec.js +171 -0
  219. package/scripts/hooks-system/application/use-cases/__tests__/GenerateAuditReportUseCase.spec.js +207 -0
  220. package/scripts/hooks-system/bin/__tests__/auto-fix-violations.spec.js +132 -0
  221. package/scripts/hooks-system/bin/__tests__/auto-restart-guards.spec.js +11 -0
  222. package/scripts/hooks-system/bin/__tests__/check-doc-drift.spec.js +11 -0
  223. package/scripts/hooks-system/bin/__tests__/check-version.spec.js +240 -0
  224. package/scripts/hooks-system/bin/__tests__/cli.spec.js +11 -0
  225. package/scripts/hooks-system/bin/__tests__/guard-auto-manager.spec.js +11 -0
  226. package/scripts/hooks-system/bin/__tests__/guard-supervisor.spec.js +11 -0
  227. package/scripts/hooks-system/bin/__tests__/hook-status.spec.js +11 -0
  228. package/scripts/hooks-system/bin/__tests__/install.spec.js +11 -0
  229. package/scripts/hooks-system/bin/__tests__/nightly-metrics-report.spec.js +94 -0
  230. package/scripts/hooks-system/bin/__tests__/plan-review.spec.js +11 -0
  231. package/scripts/hooks-system/bin/__tests__/predictive-hooks.spec.js +11 -0
  232. package/scripts/hooks-system/bin/__tests__/run-ast-adapter.spec.js +11 -0
  233. package/scripts/hooks-system/bin/__tests__/run-orchestrator.spec.js +11 -0
  234. package/scripts/hooks-system/bin/__tests__/run-playbook.spec.js +11 -0
  235. package/scripts/hooks-system/bin/__tests__/setup-eslint.spec.js +11 -0
  236. package/scripts/hooks-system/bin/__tests__/violations-api.spec.js +11 -0
  237. package/scripts/hooks-system/bin/__tests__/watch-hooks.spec.js +11 -0
  238. package/scripts/hooks-system/bin/ai-commit.sh +63 -0
  239. package/scripts/hooks-system/bin/audit +463 -0
  240. package/scripts/hooks-system/bin/audit-library.js +54 -0
  241. package/scripts/hooks-system/bin/auto-fix-violations.js +130 -0
  242. package/scripts/hooks-system/bin/auto-restart-guards.js +93 -0
  243. package/scripts/hooks-system/bin/check-doc-drift.js +35 -0
  244. package/scripts/hooks-system/bin/check-version.js +201 -0
  245. package/scripts/hooks-system/bin/cleanup-branches.sh +106 -0
  246. package/scripts/hooks-system/bin/cli.js +208 -0
  247. package/scripts/hooks-system/bin/demo-recording.sh +57 -0
  248. package/scripts/hooks-system/bin/demo-violations +44 -0
  249. package/scripts/hooks-system/bin/fix-enforcer +27 -0
  250. package/scripts/hooks-system/bin/fix-gitflow-enforcement.sh +68 -0
  251. package/scripts/hooks-system/bin/generate-progress-report.sh +129 -0
  252. package/scripts/hooks-system/bin/git-analyze-pairs.sh +0 -0
  253. package/scripts/hooks-system/bin/git-leave-branch-check.sh +73 -0
  254. package/scripts/hooks-system/bin/gitflow +17 -0
  255. package/scripts/hooks-system/bin/gitflow-shell-integration.sh +64 -0
  256. package/scripts/hooks-system/bin/guard-auto-manager.js +44 -0
  257. package/scripts/hooks-system/bin/guard-autostart.sh +158 -0
  258. package/scripts/hooks-system/bin/guard-env.sh +40 -0
  259. package/scripts/hooks-system/bin/guard-supervisor.js +516 -0
  260. package/scripts/hooks-system/bin/hook-status.js +41 -0
  261. package/scripts/hooks-system/bin/install-git-wrapper.sh +53 -0
  262. package/scripts/hooks-system/bin/install.js +10 -0
  263. package/scripts/hooks-system/bin/kill-mcp-zombies.sh +48 -0
  264. package/scripts/hooks-system/bin/nightly-metrics-report.js +138 -0
  265. package/scripts/hooks-system/bin/plan-review.js +31 -0
  266. package/scripts/hooks-system/bin/predictive-hooks.js +18 -0
  267. package/scripts/hooks-system/bin/pumuki-audit.js +113 -0
  268. package/scripts/hooks-system/bin/pumuki-init.js +104 -0
  269. package/scripts/hooks-system/bin/pumuki-mcp.js +74 -0
  270. package/scripts/hooks-system/bin/pumuki-rules.js +74 -0
  271. package/scripts/hooks-system/bin/request-no-verify-approval.sh +116 -0
  272. package/scripts/hooks-system/bin/run-ast-adapter.js +86 -0
  273. package/scripts/hooks-system/bin/run-intelligent-audit.sh +67 -0
  274. package/scripts/hooks-system/bin/run-orchestrator.js +27 -0
  275. package/scripts/hooks-system/bin/run-playbook.js +23 -0
  276. package/scripts/hooks-system/bin/session-loader.sh +264 -0
  277. package/scripts/hooks-system/bin/setup-eslint.js +110 -0
  278. package/scripts/hooks-system/bin/start-guards.sh +190 -0
  279. package/scripts/hooks-system/bin/sync-autonomous-orchestrator.sh +32 -0
  280. package/scripts/hooks-system/bin/sync-to-library.sh +46 -0
  281. package/scripts/hooks-system/bin/update-evidence.sh +1167 -0
  282. package/scripts/hooks-system/bin/update-session-context.sh +261 -0
  283. package/scripts/hooks-system/bin/verify-no-verify.sh +68 -0
  284. package/scripts/hooks-system/bin/violations +20 -0
  285. package/scripts/hooks-system/bin/violations-api.js +345 -0
  286. package/scripts/hooks-system/bin/watch-hooks.js +20 -0
  287. package/scripts/hooks-system/config/project.config.json +36 -0
  288. package/scripts/hooks-system/config/state-map.json +12 -0
  289. package/scripts/hooks-system/domain/entities/AuditResult.js +139 -0
  290. package/scripts/hooks-system/domain/entities/Finding.js +116 -0
  291. package/scripts/hooks-system/domain/entities/SeverityConfig.js +73 -0
  292. package/scripts/hooks-system/domain/entities/SeverityConfig.ts +90 -0
  293. package/scripts/hooks-system/domain/entities/__tests__/AuditResult.spec.js +450 -0
  294. package/scripts/hooks-system/domain/entities/__tests__/Finding.spec.js +335 -0
  295. package/scripts/hooks-system/domain/entities/__tests__/SeverityConfig.spec.js +240 -0
  296. package/scripts/hooks-system/domain/entities/__tests__/entities.spec.js +29 -0
  297. package/scripts/hooks-system/domain/errors/__tests__/DomainErrors.spec.js +59 -0
  298. package/scripts/hooks-system/domain/errors/index.js +169 -0
  299. package/scripts/hooks-system/domain/events/__tests__/DomainEvents.spec.js +60 -0
  300. package/scripts/hooks-system/domain/events/index.js +121 -0
  301. package/scripts/hooks-system/domain/ports/IAstPort.js +67 -0
  302. package/scripts/hooks-system/domain/ports/IEvidencePort.js +86 -0
  303. package/scripts/hooks-system/domain/ports/IGitCommandPort.js +110 -0
  304. package/scripts/hooks-system/domain/ports/IGitPort.js +114 -0
  305. package/scripts/hooks-system/domain/ports/IGitQueryPort.js +93 -0
  306. package/scripts/hooks-system/domain/ports/INotificationPort.js +35 -0
  307. package/scripts/hooks-system/domain/ports/__tests__/ports.spec.js +36 -0
  308. package/scripts/hooks-system/domain/ports/index.js +14 -0
  309. package/scripts/hooks-system/domain/repositories/ICursorTokenRepository.js +13 -0
  310. package/scripts/hooks-system/domain/repositories/IFindingsRepository.js +30 -0
  311. package/scripts/hooks-system/domain/repositories/__tests__/IFindingsRepository.spec.js +18 -0
  312. package/scripts/hooks-system/domain/rules/CommitBlockingRules.js +142 -0
  313. package/scripts/hooks-system/domain/rules/__tests__/CommitBlockingRules.spec.js +18 -0
  314. package/scripts/hooks-system/domain/services/AuditAnalyzer.js +103 -0
  315. package/scripts/hooks-system/domain/services/AuditFilter.js +26 -0
  316. package/scripts/hooks-system/domain/services/AuditResultSerializer.js +35 -0
  317. package/scripts/hooks-system/domain/services/AuditScorer.js +38 -0
  318. package/scripts/hooks-system/domain/values/Severity.js +93 -0
  319. package/scripts/hooks-system/index.js +49 -0
  320. package/scripts/hooks-system/infrastructure/adapters/AstAnalyzerAdapter.js +150 -0
  321. package/scripts/hooks-system/infrastructure/adapters/FileEvidenceAdapter.js +140 -0
  322. package/scripts/hooks-system/infrastructure/adapters/GitCliAdapter.js +16 -0
  323. package/scripts/hooks-system/infrastructure/adapters/GitCommandAdapter.js +68 -0
  324. package/scripts/hooks-system/infrastructure/adapters/GitHubCliAdapter.js +85 -0
  325. package/scripts/hooks-system/infrastructure/adapters/GitQueryAdapter.js +58 -0
  326. package/scripts/hooks-system/infrastructure/adapters/LegacyAnalyzerAdapter.js +61 -0
  327. package/scripts/hooks-system/infrastructure/adapters/MacOSNotificationAdapter.js +99 -0
  328. package/scripts/hooks-system/infrastructure/adapters/__tests__/AstAnalyzerAdapter.spec.js +32 -0
  329. package/scripts/hooks-system/infrastructure/adapters/__tests__/FileEvidenceAdapter.spec.js +31 -0
  330. package/scripts/hooks-system/infrastructure/adapters/__tests__/GitCliAdapter.spec.js +39 -0
  331. package/scripts/hooks-system/infrastructure/adapters/__tests__/MacOSNotificationAdapter.spec.js +33 -0
  332. package/scripts/hooks-system/infrastructure/adapters/git/GitCommandRunner.js +78 -0
  333. package/scripts/hooks-system/infrastructure/adapters/git/GitCommandService.js +67 -0
  334. package/scripts/hooks-system/infrastructure/adapters/git/GitQueryService.js +50 -0
  335. package/scripts/hooks-system/infrastructure/adapters/index.js +14 -0
  336. package/scripts/hooks-system/infrastructure/ast/README.md +198 -0
  337. package/scripts/hooks-system/infrastructure/ast/__tests__/ast-core.spec.js +160 -0
  338. package/scripts/hooks-system/infrastructure/ast/__tests__/ast-intelligence.spec.js +20 -0
  339. package/scripts/hooks-system/infrastructure/ast/android/__tests__/ast-android.spec.js +33 -0
  340. package/scripts/hooks-system/infrastructure/ast/android/__tests__/clean-architecture-analyzer.spec.js +96 -0
  341. package/scripts/hooks-system/infrastructure/ast/android/__tests__/ddd-analyzer.spec.js +113 -0
  342. package/scripts/hooks-system/infrastructure/ast/android/__tests__/detekt-runner.spec.js +36 -0
  343. package/scripts/hooks-system/infrastructure/ast/android/__tests__/feature-first-analyzer.spec.js +80 -0
  344. package/scripts/hooks-system/infrastructure/ast/android/__tests__/native-bridge.spec.js +31 -0
  345. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidASTIntelligentAnalyzer.js +15 -0
  346. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidASTParser.js +157 -0
  347. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidAnalysisOrchestrator.js +164 -0
  348. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidArchitectureDetector.js +334 -0
  349. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidClassAnalyzer.js +162 -0
  350. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidForbiddenLiteralsAnalyzer.js +261 -0
  351. package/scripts/hooks-system/infrastructure/ast/android/analyzers/AndroidSOLIDAnalyzer.js +287 -0
  352. package/scripts/hooks-system/infrastructure/ast/android/analyzers/__tests__/AndroidForbiddenLiteralsAnalyzer.spec.js +58 -0
  353. package/scripts/hooks-system/infrastructure/ast/android/analyzers/__tests__/AndroidSOLIDAnalyzer.spec.js +84 -0
  354. package/scripts/hooks-system/infrastructure/ast/android/ast-android.js +1785 -0
  355. package/scripts/hooks-system/infrastructure/ast/android/clean-architecture-analyzer.js +115 -0
  356. package/scripts/hooks-system/infrastructure/ast/android/ddd-analyzer.js +70 -0
  357. package/scripts/hooks-system/infrastructure/ast/android/detekt-runner.js +81 -0
  358. package/scripts/hooks-system/infrastructure/ast/android/feature-first-analyzer.js +53 -0
  359. package/scripts/hooks-system/infrastructure/ast/android/native-bridge.js +119 -0
  360. package/scripts/hooks-system/infrastructure/ast/archive/README.md +18 -0
  361. package/scripts/hooks-system/infrastructure/ast/archive/ast-intelligence.ts +276 -0
  362. package/scripts/hooks-system/infrastructure/ast/archive/ios-rules.js +329 -0
  363. package/scripts/hooks-system/infrastructure/ast/archive/kotlin-analyzer.js +332 -0
  364. package/scripts/hooks-system/infrastructure/ast/archive/kotlin-parser.js +303 -0
  365. package/scripts/hooks-system/infrastructure/ast/archive/swift-analyzer.js +390 -0
  366. package/scripts/hooks-system/infrastructure/ast/ast-core.js +594 -0
  367. package/scripts/hooks-system/infrastructure/ast/ast-intelligence.js +617 -0
  368. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/ast-backend.spec.js +20 -0
  369. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/clean-architecture-analyzer.spec.js +151 -0
  370. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/ddd-analyzer.spec.js +124 -0
  371. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/feature-first-analyzer.spec.js +128 -0
  372. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/forbidden-literals-analyzer.spec.js +95 -0
  373. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/nestjs-patterns-analyzer.spec.js +59 -0
  374. package/scripts/hooks-system/infrastructure/ast/backend/__tests__/solid-analyzer.spec.js +114 -0
  375. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/BackendArchitectureDetector.js +141 -0
  376. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/BackendPatternDetector.js +23 -0
  377. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/__tests__/BackendArchitectureDetector.spec.js +239 -0
  378. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/__tests__/BackendPatternDetector.spec.js +58 -0
  379. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/CQRSDetector.js +41 -0
  380. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/CleanArchitectureDetector.js +52 -0
  381. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/FeatureFirstCleanDetector.js +74 -0
  382. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/LayeredArchitectureDetector.js +25 -0
  383. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/MVCDetector.js +32 -0
  384. package/scripts/hooks-system/infrastructure/ast/backend/analyzers/detectors/OnionArchitectureDetector.js +32 -0
  385. package/scripts/hooks-system/infrastructure/ast/backend/ast-backend-clean.js +44 -0
  386. package/scripts/hooks-system/infrastructure/ast/backend/ast-backend.js +2048 -0
  387. package/scripts/hooks-system/infrastructure/ast/backend/clean-architecture-analyzer.js +142 -0
  388. package/scripts/hooks-system/infrastructure/ast/backend/ddd-analyzer.js +256 -0
  389. package/scripts/hooks-system/infrastructure/ast/backend/feature-first-analyzer.js +70 -0
  390. package/scripts/hooks-system/infrastructure/ast/backend/forbidden-literals-analyzer.js +236 -0
  391. package/scripts/hooks-system/infrastructure/ast/backend/nestjs-patterns-analyzer.js +11 -0
  392. package/scripts/hooks-system/infrastructure/ast/backend/solid-analyzer.js +392 -0
  393. package/scripts/hooks-system/infrastructure/ast/common/BDDTDDWorkflowRules.js +52 -0
  394. package/scripts/hooks-system/infrastructure/ast/common/__tests__/BDDTDDWorkflowRules.spec.js +133 -0
  395. package/scripts/hooks-system/infrastructure/ast/common/__tests__/ast-common.spec.js +20 -0
  396. package/scripts/hooks-system/infrastructure/ast/common/__tests__/documentation-analyzer.spec.js +120 -0
  397. package/scripts/hooks-system/infrastructure/ast/common/__tests__/images-backend-analyzer.spec.js +123 -0
  398. package/scripts/hooks-system/infrastructure/ast/common/__tests__/monorepo-health-analyzer.spec.js +118 -0
  399. package/scripts/hooks-system/infrastructure/ast/common/__tests__/network-resilience-analyzer.spec.js +180 -0
  400. package/scripts/hooks-system/infrastructure/ast/common/__tests__/offline-backend-analyzer.spec.js +111 -0
  401. package/scripts/hooks-system/infrastructure/ast/common/__tests__/push-backend-analyzer.spec.js +124 -0
  402. package/scripts/hooks-system/infrastructure/ast/common/ast-common.js +345 -0
  403. package/scripts/hooks-system/infrastructure/ast/common/documentation-analyzer.js +217 -0
  404. package/scripts/hooks-system/infrastructure/ast/common/images-backend-analyzer.js +36 -0
  405. package/scripts/hooks-system/infrastructure/ast/common/monorepo-health-analyzer.js +452 -0
  406. package/scripts/hooks-system/infrastructure/ast/common/network-resilience-analyzer.js +178 -0
  407. package/scripts/hooks-system/infrastructure/ast/common/offline-backend-analyzer.js +53 -0
  408. package/scripts/hooks-system/infrastructure/ast/common/push-backend-analyzer.js +42 -0
  409. package/scripts/hooks-system/infrastructure/ast/common/rules/BDDRules.js +87 -0
  410. package/scripts/hooks-system/infrastructure/ast/common/rules/ImplementationRules.js +83 -0
  411. package/scripts/hooks-system/infrastructure/ast/common/rules/TDDRules.js +109 -0
  412. package/scripts/hooks-system/infrastructure/ast/common/rules/WorkflowRules.js +137 -0
  413. package/scripts/hooks-system/infrastructure/ast/frontend/__tests__/ast-frontend.spec.js +20 -0
  414. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/FrontendArchitectureDetector.js +289 -0
  415. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/FrontendForbiddenLiteralsAnalyzer.js +257 -0
  416. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/FrontendSOLIDAnalyzer.js +274 -0
  417. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/__tests__/FrontendArchitectureDetector.spec.js +151 -0
  418. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/__tests__/FrontendForbiddenLiteralsAnalyzer.spec.js +20 -0
  419. package/scripts/hooks-system/infrastructure/ast/frontend/analyzers/__tests__/FrontendSOLIDAnalyzer.spec.js +108 -0
  420. package/scripts/hooks-system/infrastructure/ast/frontend/ast-frontend-clean.js +42 -0
  421. package/scripts/hooks-system/infrastructure/ast/frontend/ast-frontend.js +2094 -0
  422. package/scripts/hooks-system/infrastructure/ast/frontend/clean-architecture-analyzer.js +88 -0
  423. package/scripts/hooks-system/infrastructure/ast/frontend/ddd-analyzer.js +94 -0
  424. package/scripts/hooks-system/infrastructure/ast/frontend/feature-first-analyzer.js +51 -0
  425. package/scripts/hooks-system/infrastructure/ast/ios/__tests__/ast-ios.spec.js +40 -0
  426. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSArchitectureDetector.spec.js +20 -0
  427. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSArchitectureRules.spec.js +61 -0
  428. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSCICDRules.spec.js +10 -0
  429. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSEnterpriseAnalyzer.spec.js +36 -0
  430. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSForbiddenLiteralsAnalyzer.spec.js +64 -0
  431. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSNetworkingAdvancedRules.spec.js +10 -0
  432. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSPerformanceRules.spec.js +34 -0
  433. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSSPMRules.spec.js +10 -0
  434. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/__tests__/iOSSwiftUIAdvancedRules.spec.js +10 -0
  435. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSASTIntelligentAnalyzer.js +894 -0
  436. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSArchitectureDetector.js +445 -0
  437. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSArchitectureRules.js +700 -0
  438. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSCICDRules.js +431 -0
  439. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSEnterpriseAnalyzer.js +580 -0
  440. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSForbiddenLiteralsAnalyzer.js +261 -0
  441. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSNetworkingAdvancedRules.js +177 -0
  442. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSPerformanceRules.js +11 -0
  443. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSSPMRules.js +496 -0
  444. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSSwiftUIAdvancedRules.js +333 -0
  445. package/scripts/hooks-system/infrastructure/ast/ios/analyzers/iOSTestingAdvancedRules.js +225 -0
  446. package/scripts/hooks-system/infrastructure/ast/ios/ast-ios.js +2176 -0
  447. package/scripts/hooks-system/infrastructure/ast/ios/native-bridge.js +92 -0
  448. package/scripts/hooks-system/infrastructure/ast/ios/parsers/SourceKittenParser.js +471 -0
  449. package/scripts/hooks-system/infrastructure/ast/ios/parsers/__tests__/SourceKittenParser.spec.js +41 -0
  450. package/scripts/hooks-system/infrastructure/ast/text/__tests__/text-scanner.spec.js +20 -0
  451. package/scripts/hooks-system/infrastructure/ast/text/text-scanner.js +1120 -0
  452. package/scripts/hooks-system/infrastructure/cache/CacheService.js +160 -0
  453. package/scripts/hooks-system/infrastructure/cli/__tests__/install-wizard.spec.js +16 -0
  454. package/scripts/hooks-system/infrastructure/cli/install-wizard.js +74 -0
  455. package/scripts/hooks-system/infrastructure/core/GitOperations.js +50 -0
  456. package/scripts/hooks-system/infrastructure/core/GitOperations.ts +112 -0
  457. package/scripts/hooks-system/infrastructure/core/__tests__/GitOperations.spec.js +146 -0
  458. package/scripts/hooks-system/infrastructure/eslint/eslint-integration.sh +75 -0
  459. package/scripts/hooks-system/infrastructure/events/EventListeners.js +143 -0
  460. package/scripts/hooks-system/infrastructure/events/__tests__/events.spec.js +14 -0
  461. package/scripts/hooks-system/infrastructure/external-tools/GitOperations.js +54 -0
  462. package/scripts/hooks-system/infrastructure/external-tools/eslint/backend.config.template.mjs +58 -0
  463. package/scripts/hooks-system/infrastructure/git-hooks/pre-push +35 -0
  464. package/scripts/hooks-system/infrastructure/git-server/pre-receive-hook +253 -0
  465. package/scripts/hooks-system/infrastructure/guards/git-wrapper.sh +32 -0
  466. package/scripts/hooks-system/infrastructure/guards/master-validator.sh +247 -0
  467. package/scripts/hooks-system/infrastructure/guards/prevent-no-verify.sh +34 -0
  468. package/scripts/hooks-system/infrastructure/hooks/__tests__/skill-activation-prompt.spec.js +11 -0
  469. package/scripts/hooks-system/infrastructure/hooks/pre-tool-use-intelligent-enforcer.sh +489 -0
  470. package/scripts/hooks-system/infrastructure/hooks/skill-activation-prompt.js +244 -0
  471. package/scripts/hooks-system/infrastructure/logging/UnifiedLoggerFactory.js +40 -0
  472. package/scripts/hooks-system/infrastructure/logging/__tests__/logging.spec.js +9 -0
  473. package/scripts/hooks-system/infrastructure/mcp/README.md +116 -0
  474. package/scripts/hooks-system/infrastructure/mcp/__tests__/ast-intelligence-automation.spec.js +38 -0
  475. package/scripts/hooks-system/infrastructure/mcp/__tests__/evidence-watcher.spec.js +38 -0
  476. package/scripts/hooks-system/infrastructure/mcp/ast-intelligence-automation.js +1097 -0
  477. package/scripts/hooks-system/infrastructure/mcp/evidence-watcher.js +128 -0
  478. package/scripts/hooks-system/infrastructure/mcp/package.json +17 -0
  479. package/scripts/hooks-system/infrastructure/mcp/services/EvidenceService.js +87 -0
  480. package/scripts/hooks-system/infrastructure/mcp/services/McpProtocolHandler.js +166 -0
  481. package/scripts/hooks-system/infrastructure/orchestration/__tests__/intelligent-audit.spec.js +11 -0
  482. package/scripts/hooks-system/infrastructure/orchestration/intelligent-audit.js +353 -0
  483. package/scripts/hooks-system/infrastructure/patterns/pattern-checks.sh +98 -0
  484. package/scripts/hooks-system/infrastructure/reporting/ReportImpactAnalyzer.js +109 -0
  485. package/scripts/hooks-system/infrastructure/reporting/ReportMetricsCalculator.js +114 -0
  486. package/scripts/hooks-system/infrastructure/reporting/ReportPresenter.js +86 -0
  487. package/scripts/hooks-system/infrastructure/reporting/__tests__/reporting.spec.js +15 -0
  488. package/scripts/hooks-system/infrastructure/reporting/report-generator.js +130 -0
  489. package/scripts/hooks-system/infrastructure/reporting/severity-tracker.js +105 -0
  490. package/scripts/hooks-system/infrastructure/repositories/CursorTokenRepository.js +76 -0
  491. package/scripts/hooks-system/infrastructure/repositories/FileFindingsRepository.js +88 -0
  492. package/scripts/hooks-system/infrastructure/repositories/__tests__/repositories.spec.js +20 -0
  493. package/scripts/hooks-system/infrastructure/repositories/datasources/CursorApiDataSource.js +73 -0
  494. package/scripts/hooks-system/infrastructure/repositories/datasources/CursorFileDataSource.js +55 -0
  495. package/scripts/hooks-system/infrastructure/severity/__tests__/severity-evaluator.spec.js +18 -0
  496. package/scripts/hooks-system/infrastructure/severity/analyzers/__tests__/maintainability-analyzer.spec.js +170 -0
  497. package/scripts/hooks-system/infrastructure/severity/analyzers/__tests__/performance-analyzer.spec.js +186 -0
  498. package/scripts/hooks-system/infrastructure/severity/analyzers/__tests__/security-analyzer.spec.js +151 -0
  499. package/scripts/hooks-system/infrastructure/severity/analyzers/__tests__/stability-analyzer.spec.js +143 -0
  500. package/scripts/hooks-system/infrastructure/severity/analyzers/maintainability-analyzer.js +100 -0
  501. package/scripts/hooks-system/infrastructure/severity/analyzers/performance-analyzer.js +109 -0
  502. package/scripts/hooks-system/infrastructure/severity/analyzers/security-analyzer.js +104 -0
  503. package/scripts/hooks-system/infrastructure/severity/analyzers/stability-analyzer.js +85 -0
  504. package/scripts/hooks-system/infrastructure/severity/context/analyzers/CodeClassificationAnalyzer.js +71 -0
  505. package/scripts/hooks-system/infrastructure/severity/context/analyzers/DataAnalyzer.js +64 -0
  506. package/scripts/hooks-system/infrastructure/severity/context/analyzers/ImpactAnalyzer.js +68 -0
  507. package/scripts/hooks-system/infrastructure/severity/context/analyzers/SafetyAnalyzer.js +82 -0
  508. package/scripts/hooks-system/infrastructure/severity/context/context-builder.js +88 -0
  509. package/scripts/hooks-system/infrastructure/severity/generators/RecommendationGenerator.js +153 -0
  510. package/scripts/hooks-system/infrastructure/severity/mappers/SeverityMapper.js +10 -0
  511. package/scripts/hooks-system/infrastructure/severity/policies/gate-policies.js +136 -0
  512. package/scripts/hooks-system/infrastructure/severity/policies/severity-policies.json +206 -0
  513. package/scripts/hooks-system/infrastructure/severity/scorers/ContextMultiplier.js +49 -0
  514. package/scripts/hooks-system/infrastructure/severity/severity-evaluator.js +117 -0
  515. package/scripts/hooks-system/infrastructure/shell/core/constants.sh +26 -0
  516. package/scripts/hooks-system/infrastructure/shell/core/utils.sh +45 -0
  517. package/scripts/hooks-system/infrastructure/shell/gitflow/git-wrapper.sh +646 -0
  518. package/scripts/hooks-system/infrastructure/shell/gitflow/gitflow-enforcer.sh +620 -0
  519. package/scripts/hooks-system/infrastructure/shell/gitflow/gitflow-state-manager.sh +235 -0
  520. package/scripts/hooks-system/infrastructure/shell/gitflow-state-manager.sh +225 -0
  521. package/scripts/hooks-system/infrastructure/shell/orchestrators/audit-orchestrator.sh +1106 -0
  522. package/scripts/hooks-system/infrastructure/shell/security/detect-secrets.sh +26 -0
  523. package/scripts/hooks-system/infrastructure/shell/security/detect_secrets.py +182 -0
  524. package/scripts/hooks-system/infrastructure/shell/validate-clean-architecture.sh +254 -0
  525. package/scripts/hooks-system/infrastructure/shell/validators/check-doc-structure.sh +62 -0
  526. package/scripts/hooks-system/infrastructure/shell/validators/ensure-critical-docs.sh +26 -0
  527. package/scripts/hooks-system/infrastructure/shell/validators/validate-ai-protocol.sh +474 -0
  528. package/scripts/hooks-system/infrastructure/shell/validators/validate-clean-architecture.sh +303 -0
  529. package/scripts/hooks-system/infrastructure/shell/validators/validate-conventional-commit.sh +42 -0
  530. package/scripts/hooks-system/infrastructure/storage/file-operations.sh +31 -0
  531. package/scripts/hooks-system/infrastructure/telemetry/TelemetryService.js +165 -0
  532. package/scripts/hooks-system/infrastructure/telemetry/__tests__/telemetry.spec.js +15 -0
  533. package/scripts/hooks-system/infrastructure/telemetry/metrics-logger.js +66 -0
  534. package/scripts/hooks-system/infrastructure/telemetry/metrics-server.js +61 -0
  535. package/scripts/hooks-system/infrastructure/utils/__tests__/utils.spec.js +8 -0
  536. package/scripts/hooks-system/infrastructure/utils/error-utils.js +28 -0
  537. package/scripts/hooks-system/infrastructure/utils/timestamp-helper.sh +106 -0
  538. package/scripts/hooks-system/infrastructure/utils/token-manager.js +121 -0
  539. package/scripts/hooks-system/infrastructure/validators/__tests__/detect-commit-language.spec.js +16 -0
  540. package/scripts/hooks-system/infrastructure/validators/__tests__/enforce-english-literals.spec.js +67 -0
  541. package/scripts/hooks-system/infrastructure/validators/detect-commit-language.js +145 -0
  542. package/scripts/hooks-system/infrastructure/validators/enforce-english-literals.js +202 -0
  543. package/scripts/hooks-system/infrastructure/watchdog/__tests__/.audit-reports/token-monitor.log +18 -0
  544. package/scripts/hooks-system/infrastructure/watchdog/__tests__/auto-recovery.spec.js +14 -0
  545. package/scripts/hooks-system/infrastructure/watchdog/__tests__/token-monitor.spec.js +67 -0
  546. package/scripts/hooks-system/infrastructure/watchdog/__tests__/watchdog.spec.js +22 -0
  547. package/scripts/hooks-system/infrastructure/watchdog/ai-watchdog.sh +278 -0
  548. package/scripts/hooks-system/infrastructure/watchdog/auto-recovery.js +32 -0
  549. package/scripts/hooks-system/infrastructure/watchdog/health-check.js +58 -0
  550. package/scripts/hooks-system/infrastructure/watchdog/token-monitor-loop.sh +20 -0
  551. package/scripts/hooks-system/infrastructure/watchdog/token-monitor.js +69 -0
  552. package/scripts/hooks-system/infrastructure/watchdog/token-tracker.sh +208 -0
  553. package/scripts/hooks-system/presentation/cli/audit.sh +32 -0
  554. package/scripts/hooks-system/presentation/cli/autonomous-status.sh +92 -0
  555. package/scripts/hooks-system/presentation/cli/categorize-violations.sh +179 -0
  556. package/scripts/hooks-system/presentation/cli/direct-audit-option2.sh +23 -0
  557. package/scripts/hooks-system/presentation/cli/direct-audit.sh +33 -0
  558. package/skills/android-guidelines/SKILL.md +475 -0
  559. package/skills/android-guidelines/resources/advanced-topics.md +44 -0
  560. package/skills/android-guidelines/resources/architecture-overview.md +44 -0
  561. package/skills/backend-guidelines/SKILL.md +335 -0
  562. package/skills/backend-guidelines/resources/architecture-overview.md +48 -0
  563. package/skills/frontend-guidelines/SKILL.md +367 -0
  564. package/skills/frontend-guidelines/resources/architecture-overview.md +44 -0
  565. package/skills/ios-guidelines/SKILL.md +406 -0
  566. package/skills/ios-guidelines/resources/architecture-overview.md +47 -0
  567. package/skills/skill-rules.json +334 -0
@@ -0,0 +1,146 @@
1
+ const AnalyzeStagedFilesUseCase = require('../AnalyzeStagedFilesUseCase');
2
+ const AuditResult = require('../../../domain/entities/AuditResult');
3
+ const Finding = require('../../../domain/entities/Finding');
4
+
5
+ function makeSUT() {
6
+ const mockPlatformAnalyzers = {
7
+ backend: {
8
+ analyzeFiles: jest.fn().mockResolvedValue([
9
+ new Finding('backend.rule1', 'high', 'Backend violation', 'backend/test.ts', 10, 'backend'),
10
+ ]),
11
+ },
12
+ frontend: {
13
+ analyzeFiles: jest.fn().mockResolvedValue([
14
+ new Finding('frontend.rule1', 'medium', 'Frontend violation', 'frontend/test.tsx', 20, 'frontend'),
15
+ ]),
16
+ },
17
+ };
18
+
19
+ const mockGitOperations = {
20
+ getStagedFiles: jest.fn().mockResolvedValue([
21
+ 'backend/test.ts',
22
+ 'frontend/test.tsx',
23
+ ]),
24
+ };
25
+
26
+ const mockPlatformDetectionService = {
27
+ detectPlatformFromFile: jest.fn((filePath) => {
28
+ if (filePath.includes('backend')) return 'backend';
29
+ if (filePath.includes('frontend')) return 'frontend';
30
+ return 'unknown';
31
+ }),
32
+ };
33
+
34
+ const useCase = new AnalyzeStagedFilesUseCase(
35
+ mockPlatformAnalyzers,
36
+ mockGitOperations,
37
+ mockPlatformDetectionService
38
+ );
39
+
40
+ return { useCase, mockPlatformAnalyzers, mockGitOperations, mockPlatformDetectionService };
41
+ }
42
+
43
+ describe('AnalyzeStagedFilesUseCase', () => {
44
+ describe('execute', () => {
45
+ it('should analyze staged files grouped by platform', async () => {
46
+ const { useCase, mockGitOperations, mockPlatformAnalyzers } = makeSUT();
47
+ const result = await useCase.execute({});
48
+ expect(mockGitOperations.getStagedFiles).toHaveBeenCalled();
49
+ expect(mockPlatformAnalyzers.backend.analyzeFiles).toHaveBeenCalled();
50
+ expect(mockPlatformAnalyzers.frontend.analyzeFiles).toHaveBeenCalled();
51
+ expect(result).toBeInstanceOf(AuditResult);
52
+ });
53
+
54
+ it('should return empty AuditResult when no staged files', async () => {
55
+ const { useCase, mockGitOperations } = makeSUT();
56
+ mockGitOperations.getStagedFiles.mockResolvedValue([]);
57
+ const result = await useCase.execute({});
58
+ expect(result.getTotalViolations()).toBe(0);
59
+ expect(result).toBeInstanceOf(AuditResult);
60
+ });
61
+
62
+ it('should skip platforms without analyzers', async () => {
63
+ const { useCase, mockGitOperations, mockPlatformDetectionService } = makeSUT();
64
+ mockGitOperations.getStagedFiles.mockResolvedValue(['ios/test.swift']);
65
+ mockPlatformDetectionService.detectPlatformFromFile.mockReturnValue('ios');
66
+ const result = await useCase.execute({});
67
+ expect(result.getTotalViolations()).toBe(0);
68
+ });
69
+
70
+ it('should group files by platform before analysis', async () => {
71
+ const { useCase, mockGitOperations, mockPlatformAnalyzers } = makeSUT();
72
+ mockGitOperations.getStagedFiles.mockResolvedValue([
73
+ 'backend/file1.ts',
74
+ 'backend/file2.ts',
75
+ 'frontend/file1.tsx',
76
+ ]);
77
+ await useCase.execute({});
78
+ expect(mockPlatformAnalyzers.backend.analyzeFiles).toHaveBeenCalledWith(
79
+ ['backend/file1.ts', 'backend/file2.ts'],
80
+ {}
81
+ );
82
+ expect(mockPlatformAnalyzers.frontend.analyzeFiles).toHaveBeenCalledWith(
83
+ ['frontend/file1.tsx'],
84
+ {}
85
+ );
86
+ });
87
+
88
+ it('should pass options to analyzers', async () => {
89
+ const { useCase, mockPlatformAnalyzers } = makeSUT();
90
+ const options = { strictMode: true, includeTests: false };
91
+ await useCase.execute(options);
92
+ expect(mockPlatformAnalyzers.backend.analyzeFiles).toHaveBeenCalledWith(
93
+ expect.any(Array),
94
+ options
95
+ );
96
+ });
97
+
98
+ it('should handle empty findings from analyzers', async () => {
99
+ const { useCase, mockPlatformAnalyzers } = makeSUT();
100
+ mockPlatformAnalyzers.backend.analyzeFiles.mockResolvedValue([]);
101
+ mockPlatformAnalyzers.frontend.analyzeFiles.mockResolvedValue([]);
102
+ const result = await useCase.execute({});
103
+ expect(result.getTotalViolations()).toBe(0);
104
+ });
105
+
106
+ it('should handle null findings from analyzers', async () => {
107
+ const { useCase, mockPlatformAnalyzers } = makeSUT();
108
+ mockPlatformAnalyzers.backend.analyzeFiles.mockResolvedValue(null);
109
+ const result = await useCase.execute({});
110
+ expect(result.getTotalViolations()).toBeGreaterThanOrEqual(0);
111
+ });
112
+
113
+ it('should propagate errors from git operations', async () => {
114
+ const { useCase, mockGitOperations } = makeSUT();
115
+ const error = new Error('Git operation failed');
116
+ mockGitOperations.getStagedFiles.mockRejectedValue(error);
117
+ await expect(useCase.execute({})).rejects.toThrow('Git operation failed');
118
+ });
119
+
120
+ it('should propagate errors from analyzers', async () => {
121
+ const { useCase, mockPlatformAnalyzers } = makeSUT();
122
+ const error = new Error('Analysis failed');
123
+ mockPlatformAnalyzers.backend.analyzeFiles.mockRejectedValue(error);
124
+ await expect(useCase.execute({})).rejects.toThrow('Analysis failed');
125
+ });
126
+ });
127
+
128
+ describe('groupFilesByPlatform', () => {
129
+ it('should group files by detected platform', () => {
130
+ const { useCase } = makeSUT();
131
+ const stagedFiles = ['backend/file1.ts', 'frontend/file1.tsx', 'backend/file2.ts'];
132
+ const grouped = useCase.groupFilesByPlatform(stagedFiles);
133
+ expect(grouped.backend).toHaveLength(2);
134
+ expect(grouped.frontend).toHaveLength(1);
135
+ });
136
+
137
+ it('should handle unknown platforms', () => {
138
+ const { useCase, mockPlatformDetectionService } = makeSUT();
139
+ mockPlatformDetectionService.detectPlatformFromFile.mockReturnValue('unknown');
140
+ const stagedFiles = ['unknown/file.txt'];
141
+ const grouped = useCase.groupFilesByPlatform(stagedFiles);
142
+ expect(grouped.unknown).toHaveLength(1);
143
+ });
144
+ });
145
+ });
146
+
@@ -0,0 +1,89 @@
1
+ const AutoExecuteAIStartUseCase = require('../AutoExecuteAIStartUseCase');
2
+ const path = require('path');
3
+
4
+ function makeSUT(customRepoRoot = null) {
5
+ const mockOrchestrator = {
6
+ execute: jest.fn(),
7
+ };
8
+ const repoRoot = customRepoRoot || '/test/repo';
9
+ return new AutoExecuteAIStartUseCase(mockOrchestrator, repoRoot);
10
+ }
11
+
12
+ describe('AutoExecuteAIStartUseCase', () => {
13
+ describe('execute', () => {
14
+ it('should return error when no platforms provided', async () => {
15
+ const useCase = makeSUT();
16
+ const result = await useCase.execute([], 90);
17
+ expect(result.success).toBe(false);
18
+ expect(result.action).toBe('error');
19
+ expect(result.message).toContain('No platforms provided');
20
+ });
21
+
22
+ it('should return ignored when confidence is below 70', async () => {
23
+ const useCase = makeSUT();
24
+ const result = await useCase.execute(['backend'], 65);
25
+ expect(result.success).toBe(true);
26
+ expect(result.action).toBe('ignored');
27
+ expect(result.confidence).toBe(65);
28
+ expect(result.message).toContain('Confidence too low');
29
+ });
30
+
31
+ it('should return ask when confidence is between 70 and 89', async () => {
32
+ const useCase = makeSUT();
33
+ const result = await useCase.execute(['backend'], 75);
34
+ expect(result.success).toBe(true);
35
+ expect(result.action).toBe('ask');
36
+ expect(result.confidence).toBe(75);
37
+ expect(result.message).toContain('Medium confidence');
38
+ });
39
+
40
+ it('should attempt auto-execute when confidence is 90 or higher', async () => {
41
+ const useCase = makeSUT();
42
+ const result = await useCase.execute(['backend'], 90);
43
+ expect(['auto-executed', 'error']).toContain(result.action);
44
+ });
45
+
46
+ it('should handle platform objects with platform property', async () => {
47
+ const useCase = makeSUT();
48
+ const platforms = [{ platform: 'backend' }, { platform: 'frontend' }];
49
+ const result = await useCase.execute(platforms, 95);
50
+ expect(result.platforms).toEqual(platforms);
51
+ });
52
+
53
+ it('should filter out invalid platform entries', async () => {
54
+ const useCase = makeSUT();
55
+ const platforms = [{ platform: 'backend' }, null, undefined, ''];
56
+ const result = await useCase.execute(platforms, 95);
57
+ expect(['auto-executed', 'error']).toContain(result.action);
58
+ });
59
+ });
60
+
61
+ describe('autoExecute', () => {
62
+ it('should return error when update-evidence script not found', async () => {
63
+ const useCase = makeSUT();
64
+ const platforms = ['backend', 'frontend'];
65
+ const result = await useCase.autoExecute(platforms, 95);
66
+ expect(result.success).toBe(false);
67
+ expect(result.message).toContain('not found');
68
+ });
69
+
70
+ it('should handle script execution errors gracefully', async () => {
71
+ const useCase = makeSUT('/nonexistent/path');
72
+ const platforms = ['backend'];
73
+ const result = await useCase.autoExecute(platforms, 95);
74
+ expect(result.success).toBe(false);
75
+ expect(result.action).toBe('error');
76
+ });
77
+
78
+ it('should include output field when script executes successfully', async () => {
79
+ const repoRoot = process.cwd();
80
+ const useCase = makeSUT(repoRoot);
81
+ const platforms = ['backend'];
82
+ const result = await useCase.autoExecute(platforms, 95);
83
+ if (result.success && result.output) {
84
+ expect(typeof result.output).toBe('object');
85
+ }
86
+ });
87
+ });
88
+ });
89
+
@@ -0,0 +1,171 @@
1
+ const BlockCommitUseCase = require('../BlockCommitUseCase');
2
+ const CommitBlockingRules = require('../../../domain/rules/CommitBlockingRules');
3
+ const AuditResult = require('../../../domain/entities/AuditResult');
4
+ const Finding = require('../../../domain/entities/Finding');
5
+
6
+ function makeSUT(customCommitBlockingRules = null) {
7
+ const commitBlockingRules = customCommitBlockingRules || new CommitBlockingRules();
8
+ return new BlockCommitUseCase(commitBlockingRules);
9
+ }
10
+
11
+ function createAuditResultWithFindings(findings) {
12
+ return new AuditResult(findings);
13
+ }
14
+
15
+ describe('BlockCommitUseCase', () => {
16
+ describe('execute', () => {
17
+ it('should block commit when critical violations exist', async () => {
18
+ const useCase = makeSUT();
19
+ const criticalFinding = new Finding('test.rule', 'critical', 'Critical violation', 'test.ts', 1, 'backend');
20
+ const auditResult = createAuditResultWithFindings([criticalFinding]);
21
+ const decision = await useCase.execute(auditResult, { strictMode: true });
22
+ expect(decision.shouldBlock).toBe(true);
23
+ });
24
+
25
+ it('should block commit when high violations exist in strict mode', async () => {
26
+ const useCase = makeSUT();
27
+ const highFinding = new Finding('test.rule', 'high', 'High violation', 'test.ts', 1, 'backend');
28
+ const auditResult = createAuditResultWithFindings([highFinding]);
29
+ const decision = await useCase.execute(auditResult, { strictMode: true });
30
+ expect(decision.shouldBlock).toBe(true);
31
+ });
32
+
33
+ it('should allow commit when only medium violations exist', async () => {
34
+ const useCase = makeSUT();
35
+ const mediumFinding = new Finding('test.rule', 'medium', 'Medium violation', 'test.ts', 1, 'backend');
36
+ const auditResult = createAuditResultWithFindings([mediumFinding]);
37
+ const decision = await useCase.execute(auditResult, { strictMode: false });
38
+ expect(decision.shouldBlock).toBe(false);
39
+ });
40
+
41
+ it('should use staged files only when useStagedOnly is true', async () => {
42
+ const mockCommitBlockingRules = {
43
+ shouldBlockByStagedFiles: jest.fn().mockReturnValue({ shouldBlock: false }),
44
+ shouldBlockCommit: jest.fn(),
45
+ calculateTechnicalDebtThreshold: jest.fn().mockReturnValue({ currentDebt: 0, message: '' }),
46
+ getMaintainabilityGate: jest.fn().mockReturnValue({ score: 100 }),
47
+ };
48
+ const useCase = makeSUT(mockCommitBlockingRules);
49
+ const auditResult = createAuditResultWithFindings([]);
50
+ await useCase.execute(auditResult, { useStagedOnly: true });
51
+ expect(mockCommitBlockingRules.shouldBlockByStagedFiles).toHaveBeenCalled();
52
+ expect(mockCommitBlockingRules.shouldBlockCommit).not.toHaveBeenCalled();
53
+ });
54
+
55
+ it('should use full audit result when useStagedOnly is false', async () => {
56
+ const mockCommitBlockingRules = {
57
+ shouldBlockByStagedFiles: jest.fn(),
58
+ shouldBlockCommit: jest.fn().mockReturnValue({ shouldBlock: false }),
59
+ calculateTechnicalDebtThreshold: jest.fn().mockReturnValue({ currentDebt: 0, message: '' }),
60
+ getMaintainabilityGate: jest.fn().mockReturnValue({ score: 100 }),
61
+ };
62
+ const useCase = makeSUT(mockCommitBlockingRules);
63
+ const auditResult = createAuditResultWithFindings([]);
64
+ await useCase.execute(auditResult, { useStagedOnly: false });
65
+ expect(mockCommitBlockingRules.shouldBlockCommit).toHaveBeenCalled();
66
+ expect(mockCommitBlockingRules.shouldBlockByStagedFiles).not.toHaveBeenCalled();
67
+ });
68
+
69
+ it('should include technical debt information when commit is allowed', async () => {
70
+ const mockCommitBlockingRules = {
71
+ shouldBlockCommit: jest.fn().mockReturnValue({ shouldBlock: false }),
72
+ calculateTechnicalDebtThreshold: jest.fn().mockReturnValue({
73
+ currentDebt: 10,
74
+ message: '10 hours of technical debt',
75
+ }),
76
+ getMaintainabilityGate: jest.fn().mockReturnValue({ score: 85 }),
77
+ };
78
+ const useCase = makeSUT(mockCommitBlockingRules);
79
+ const auditResult = createAuditResultWithFindings([]);
80
+ const decision = await useCase.execute(auditResult, {});
81
+ expect(decision.technicalDebt).toBe(10);
82
+ expect(decision.debtMessage).toBe('10 hours of technical debt');
83
+ expect(decision.maintainability).toBeDefined();
84
+ });
85
+
86
+ it('should include maintainability gate when commit is allowed', async () => {
87
+ const mockCommitBlockingRules = {
88
+ shouldBlockCommit: jest.fn().mockReturnValue({ shouldBlock: false }),
89
+ calculateTechnicalDebtThreshold: jest.fn().mockReturnValue({ currentDebt: 0, message: '' }),
90
+ getMaintainabilityGate: jest.fn().mockReturnValue({ score: 90 }),
91
+ };
92
+ const useCase = makeSUT(mockCommitBlockingRules);
93
+ const auditResult = createAuditResultWithFindings([]);
94
+ const decision = await useCase.execute(auditResult, {});
95
+ expect(decision.maintainability.score).toBe(90);
96
+ });
97
+
98
+ it('should respect blockOnlyCriticalHigh option', async () => {
99
+ const mockCommitBlockingRules = {
100
+ shouldBlockCommit: jest.fn().mockReturnValue({ shouldBlock: false }),
101
+ calculateTechnicalDebtThreshold: jest.fn().mockReturnValue({ currentDebt: 0, message: '' }),
102
+ getMaintainabilityGate: jest.fn().mockReturnValue({ score: 100 }),
103
+ };
104
+ const useCase = makeSUT(mockCommitBlockingRules);
105
+ const auditResult = createAuditResultWithFindings([]);
106
+ await useCase.execute(auditResult, { blockOnlyCriticalHigh: true });
107
+ expect(mockCommitBlockingRules.shouldBlockCommit).toHaveBeenCalledWith(
108
+ auditResult,
109
+ false,
110
+ true
111
+ );
112
+ });
113
+
114
+ it('should propagate errors from commit blocking rules', async () => {
115
+ const mockCommitBlockingRules = {
116
+ shouldBlockCommit: jest.fn().mockImplementation(() => {
117
+ throw new Error('Blocking rules error');
118
+ }),
119
+ };
120
+ const useCase = makeSUT(mockCommitBlockingRules);
121
+ const auditResult = createAuditResultWithFindings([]);
122
+ await expect(useCase.execute(auditResult, {})).rejects.toThrow('Blocking rules error');
123
+ });
124
+ });
125
+
126
+ describe('formatDecisionMessage', () => {
127
+ it('should format blocking decision message', () => {
128
+ const useCase = makeSUT();
129
+ const decision = {
130
+ shouldBlock: true,
131
+ reason: 'Critical violations detected',
132
+ violations: { critical: 2, high: 5 },
133
+ };
134
+ const message = useCase.formatDecisionMessage(decision);
135
+ expect(message).toContain('COMMIT BLOCKED');
136
+ expect(message).toContain('Critical violations detected');
137
+ expect(message).toContain('CRITICAL: 2');
138
+ expect(message).toContain('HIGH: 5');
139
+ });
140
+
141
+ it('should format allowed decision message', () => {
142
+ const useCase = makeSUT();
143
+ const decision = {
144
+ shouldBlock: false,
145
+ reason: 'No blocking violations',
146
+ technicalDebt: 5,
147
+ debtMessage: '5 hours of technical debt',
148
+ maintainability: { score: 90 },
149
+ };
150
+ const message = useCase.formatDecisionMessage(decision);
151
+ expect(message).toContain('COMMIT ALLOWED');
152
+ expect(message).toContain('No blocking violations');
153
+ expect(message).toContain('Technical Debt Tracking');
154
+ });
155
+
156
+ it('should include technical debt information when present', () => {
157
+ const useCase = makeSUT();
158
+ const decision = {
159
+ shouldBlock: false,
160
+ reason: 'Allowed',
161
+ technicalDebt: 10,
162
+ debtMessage: '10 hours',
163
+ maintainability: { score: 85 },
164
+ };
165
+ const message = useCase.formatDecisionMessage(decision);
166
+ expect(message).toContain('10 hours');
167
+ expect(message).toContain('85.0/100');
168
+ });
169
+ });
170
+ });
171
+
@@ -0,0 +1,207 @@
1
+ const GenerateAuditReportUseCase = require('../GenerateAuditReportUseCase');
2
+ const AuditResult = require('../../../domain/entities/AuditResult');
3
+ const Finding = require('../../../domain/entities/Finding');
4
+
5
+ function makeSUT(customOutputFormatter = null) {
6
+ const outputFormatter = customOutputFormatter || null;
7
+ return new GenerateAuditReportUseCase(outputFormatter);
8
+ }
9
+
10
+ function createAuditResultWithFindings(findings) {
11
+ const result = new AuditResult(findings);
12
+ result.setMetadata(10, 1000, ['backend', 'frontend']);
13
+ return result;
14
+ }
15
+
16
+ describe('GenerateAuditReportUseCase', () => {
17
+ describe('execute', () => {
18
+ it('should generate console report by default', async () => {
19
+ const useCase = makeSUT();
20
+ const findings = [
21
+ new Finding('test.rule1', 'high', 'Violation 1', 'test1.ts', 1, 'backend'),
22
+ new Finding('test.rule2', 'medium', 'Violation 2', 'test2.ts', 2, 'frontend'),
23
+ ];
24
+ const auditResult = createAuditResultWithFindings(findings);
25
+ const report = await useCase.execute(auditResult, {});
26
+ expect(report).toContain('AUDIT SUMMARY');
27
+ expect(report).toContain('Total Violations: 2');
28
+ });
29
+
30
+ it('should generate JSON report when reportType is json', async () => {
31
+ const useCase = makeSUT();
32
+ const findings = [new Finding('test.rule', 'high', 'Violation', 'test.ts', 1, 'backend')];
33
+ const auditResult = createAuditResultWithFindings(findings);
34
+ const report = await useCase.execute(auditResult, { reportType: 'json' });
35
+ const parsed = JSON.parse(report);
36
+ expect(parsed.summary).toBeDefined();
37
+ expect(parsed.findings).toBeDefined();
38
+ });
39
+
40
+ it('should generate HTML report when reportType is html', async () => {
41
+ const useCase = makeSUT();
42
+ const findings = [new Finding('test.rule', 'high', 'Violation', 'test.ts', 1, 'backend')];
43
+ const auditResult = createAuditResultWithFindings(findings);
44
+ const report = await useCase.execute(auditResult, { reportType: 'html' });
45
+ expect(report).toContain('<!DOCTYPE html>');
46
+ expect(report).toContain('Audit Report');
47
+ });
48
+
49
+ it('should include signature by default', async () => {
50
+ const useCase = makeSUT();
51
+ const auditResult = createAuditResultWithFindings([]);
52
+ const report = await useCase.execute(auditResult, {});
53
+ expect(report).toContain('PUMUKI TEAM');
54
+ });
55
+
56
+ it('should exclude signature when includeSignature is false', async () => {
57
+ const useCase = makeSUT();
58
+ const auditResult = createAuditResultWithFindings([]);
59
+ const report = await useCase.execute(auditResult, { includeSignature: false });
60
+ expect(report).not.toContain('PUMUKI TEAM');
61
+ });
62
+
63
+ it('should propagate errors during report generation', async () => {
64
+ const useCase = makeSUT();
65
+ const invalidAuditResult = null;
66
+ await expect(useCase.execute(invalidAuditResult, {})).rejects.toThrow();
67
+ });
68
+ });
69
+
70
+ describe('generateJSONReport', () => {
71
+ it('should serialize audit result to JSON', () => {
72
+ const useCase = makeSUT();
73
+ const findings = [new Finding('test.rule', 'high', 'Violation', 'test.ts', 1, 'backend')];
74
+ const auditResult = createAuditResultWithFindings(findings);
75
+ const json = useCase.generateJSONReport(auditResult);
76
+ const parsed = JSON.parse(json);
77
+ expect(parsed.summary.totalViolations).toBe(1);
78
+ expect(parsed.findings).toHaveLength(1);
79
+ });
80
+
81
+ it('should include all audit result data in JSON', () => {
82
+ const useCase = makeSUT();
83
+ const auditResult = createAuditResultWithFindings([]);
84
+ const json = useCase.generateJSONReport(auditResult);
85
+ const parsed = JSON.parse(json);
86
+ expect(parsed.timestamp).toBeDefined();
87
+ expect(parsed.summary).toBeDefined();
88
+ expect(parsed.metadata).toBeDefined();
89
+ expect(parsed.findings).toBeDefined();
90
+ });
91
+ });
92
+
93
+ describe('generateHTMLReport', () => {
94
+ it('should generate HTML with summary information', () => {
95
+ const useCase = makeSUT();
96
+ const findings = [
97
+ new Finding('test.rule1', 'critical', 'Critical', 'test1.ts', 1, 'backend'),
98
+ new Finding('test.rule2', 'high', 'High', 'test2.ts', 2, 'frontend'),
99
+ ];
100
+ const auditResult = createAuditResultWithFindings(findings);
101
+ const html = useCase.generateHTMLReport(auditResult);
102
+ expect(html).toContain('Total Violations:');
103
+ expect(html).toMatch(/Total Violations:.*2/);
104
+ expect(html).toContain('Critical:');
105
+ expect(html).toContain('<span class="critical">1</span>');
106
+ expect(html).toContain('High:');
107
+ expect(html).toContain('<span class="high">1</span>');
108
+ });
109
+
110
+ it('should include technical debt hours in HTML', () => {
111
+ const useCase = makeSUT();
112
+ const findings = [new Finding('test.rule', 'high', 'Violation', 'test.ts', 1, 'backend')];
113
+ const auditResult = createAuditResultWithFindings(findings);
114
+ const html = useCase.generateHTMLReport(auditResult);
115
+ expect(html).toContain('Technical Debt:');
116
+ });
117
+
118
+ it('should include maintainability index in HTML', () => {
119
+ const useCase = makeSUT();
120
+ const auditResult = createAuditResultWithFindings([]);
121
+ const html = useCase.generateHTMLReport(auditResult);
122
+ expect(html).toContain('Maintainability Index:');
123
+ });
124
+ });
125
+
126
+ describe('generateConsoleReport', () => {
127
+ it('should include total violations count', () => {
128
+ const useCase = makeSUT();
129
+ const findings = [
130
+ new Finding('test.rule1', 'critical', 'Critical', 'test1.ts', 1, 'backend'),
131
+ new Finding('test.rule2', 'high', 'High', 'test2.ts', 2, 'frontend'),
132
+ ];
133
+ const auditResult = createAuditResultWithFindings(findings);
134
+ const report = useCase.generateConsoleReport(auditResult, false);
135
+ expect(report).toContain('Total Violations: 2');
136
+ });
137
+
138
+ it('should include severity breakdown', () => {
139
+ const useCase = makeSUT();
140
+ const findings = [
141
+ new Finding('test.rule1', 'critical', 'Critical', 'test1.ts', 1, 'backend'),
142
+ new Finding('test.rule2', 'high', 'High', 'test2.ts', 2, 'frontend'),
143
+ new Finding('test.rule3', 'medium', 'Medium', 'test3.ts', 3, 'ios'),
144
+ new Finding('test.rule4', 'low', 'Low', 'test4.ts', 4, 'android'),
145
+ ];
146
+ const auditResult = createAuditResultWithFindings(findings);
147
+ const report = useCase.generateConsoleReport(auditResult, false);
148
+ expect(report).toContain('CRITICAL: 1');
149
+ expect(report).toMatch(/HIGH:\s+1/);
150
+ expect(report).toMatch(/MEDIUM:\s+1/);
151
+ expect(report).toMatch(/LOW:\s+1/);
152
+ });
153
+
154
+ it('should include platform breakdown when violations exist', () => {
155
+ const useCase = makeSUT();
156
+ const findings = [
157
+ new Finding('test.rule1', 'high', 'Violation', 'backend/test.ts', 1, 'backend'),
158
+ new Finding('test.rule2', 'medium', 'Violation', 'frontend/test.tsx', 2, 'frontend'),
159
+ ];
160
+ const auditResult = createAuditResultWithFindings(findings);
161
+ const report = useCase.generateConsoleReport(auditResult, false);
162
+ expect(report).toContain('BY PLATFORM');
163
+ });
164
+
165
+ it('should include top violated rules', () => {
166
+ const useCase = makeSUT();
167
+ const findings = [
168
+ new Finding('rule.a', 'high', 'Violation', 'test1.ts', 1, 'backend'),
169
+ new Finding('rule.a', 'high', 'Violation', 'test2.ts', 2, 'backend'),
170
+ new Finding('rule.b', 'medium', 'Violation', 'test3.ts', 3, 'frontend'),
171
+ ];
172
+ const auditResult = createAuditResultWithFindings(findings);
173
+ const report = useCase.generateConsoleReport(auditResult, false);
174
+ expect(report).toContain('TOP VIOLATED RULES');
175
+ });
176
+
177
+ it('should include top violated files', () => {
178
+ const useCase = makeSUT();
179
+ const findings = [
180
+ new Finding('rule.a', 'high', 'Violation', 'test.ts', 1, 'backend'),
181
+ new Finding('rule.b', 'medium', 'Violation', 'test.ts', 2, 'backend'),
182
+ ];
183
+ const auditResult = createAuditResultWithFindings(findings);
184
+ const report = useCase.generateConsoleReport(auditResult, false);
185
+ expect(report).toContain('TOP VIOLATED FILES');
186
+ });
187
+
188
+ it('should use outputFormatter signature when available', () => {
189
+ const mockOutputFormatter = {
190
+ generateSignature: jest.fn().mockReturnValue('Custom Signature'),
191
+ };
192
+ const useCase = makeSUT(mockOutputFormatter);
193
+ const auditResult = createAuditResultWithFindings([]);
194
+ const report = useCase.generateConsoleReport(auditResult, true);
195
+ expect(mockOutputFormatter.generateSignature).toHaveBeenCalled();
196
+ expect(report).toContain('Custom Signature');
197
+ });
198
+
199
+ it('should use default signature when outputFormatter not available', () => {
200
+ const useCase = makeSUT();
201
+ const auditResult = createAuditResultWithFindings([]);
202
+ const report = useCase.generateConsoleReport(auditResult, true);
203
+ expect(report).toContain('PUMUKI TEAM');
204
+ });
205
+ });
206
+ });
207
+