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,1097 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * =============================================================================
4
+ * MCP Server: Autonomous AST Intelligence + Git Flow Automation
5
+ * =============================================================================
6
+ * Purpose: Automate complete Git Flow + AST Rules execution via Cursor AI
7
+ * Author: Pumuki Team®
8
+ * Version: 3.0.0
9
+ * License: MIT
10
+ * =============================================================================
11
+ *
12
+ * Exposes:
13
+ * - Resources: evidence://status, gitflow://state, context://active
14
+ * - Tools: check_evidence_status, auto_complete_gitflow, validate_and_fix,
15
+ * sync_branches, cleanup_stale_branches, auto_execute_ai_start
16
+ */
17
+
18
+ const fs = require('fs');
19
+ const path = require('path');
20
+ const { execSync } = require('child_process');
21
+
22
+ // Removed global requires for performance (Lazy Loading)
23
+ // const AutonomousOrchestrator = require('../../application/services/AutonomousOrchestrator');
24
+ // const ContextDetectionEngine = require('../../application/services/ContextDetectionEngine');
25
+ // const MacOSNotificationAdapter = require('../adapters/MacOSNotificationAdapter');
26
+ // const { ConfigurationError } = require('../../domain/errors');
27
+
28
+ const MCP_VERSION = '2024-11-05';
29
+
30
+ // Configuration
31
+ const CompositionRoot = require('../../application/CompositionRoot');
32
+
33
+ const REPO_ROOT = process.env.REPO_ROOT || process.cwd();
34
+ const compositionRoot = CompositionRoot.createForProduction(REPO_ROOT);
35
+
36
+ const EVIDENCE_FILE = path.join(REPO_ROOT, '.AI_EVIDENCE.json');
37
+ const GITFLOW_STATE_FILE = path.join(REPO_ROOT, '.git', 'gitflow-state.json');
38
+ const MAX_EVIDENCE_AGE = 180; // 3 minutes in seconds
39
+
40
+ // Detect library installation path dynamically
41
+ function getLibraryInstallPath() {
42
+ const scriptPath = __filename; // Current file path
43
+ const repoRoot = REPO_ROOT;
44
+
45
+ // Try to find library path relative to repo root
46
+ if (scriptPath.includes('node_modules/@pumuki/ast-intelligence-hooks')) {
47
+ return 'node_modules/@pumuki/ast-intelligence-hooks';
48
+ }
49
+ if (scriptPath.includes('scripts/hooks-system')) {
50
+ return 'scripts/hooks-system';
51
+ }
52
+ // If script is in repo root, try to detect from package.json
53
+ try {
54
+ const packageJson = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8'));
55
+ const libPath = packageJson.devDependencies?.['@pumuki/ast-intelligence-hooks'] ||
56
+ packageJson.dependencies?.['@pumuki/ast-intelligence-hooks'];
57
+ if (libPath && libPath.startsWith('file:')) {
58
+ // Local file path, extract relative path
59
+ const relativePath = libPath.replace('file:', '').replace(/^\.\.\//, '');
60
+ if (fs.existsSync(path.join(repoRoot, relativePath))) {
61
+ return relativePath;
62
+ }
63
+ }
64
+ } catch (e) {
65
+ if (process.env.DEBUG) {
66
+ console.error('[MCP] getLibraryInstallPath failed:', toErrorMessage(e));
67
+ }
68
+ // Ignore errors
69
+ }
70
+ return null; // Not found, will use generic exclusions
71
+ }
72
+
73
+ function formatDuration(seconds) {
74
+ if (!Number.isFinite(seconds) || seconds < 0) return 'unknown';
75
+ const s = Math.floor(seconds);
76
+ const days = Math.floor(s / 86400);
77
+ const hours = Math.floor((s % 86400) / 3600);
78
+ const minutes = Math.floor((s % 3600) / 60);
79
+ const secs = s % 60;
80
+ const parts = [];
81
+ if (days) parts.push(`${days}d`);
82
+ if (hours) parts.push(`${hours}h`);
83
+ if (minutes) parts.push(`${minutes}m`);
84
+ parts.push(`${secs}s`);
85
+ return parts.join(' ');
86
+ }
87
+
88
+ function formatLocalDateTime(isoOrMs) {
89
+ const d = new Date(isoOrMs);
90
+ if (Number.isNaN(d.getTime())) return 'unknown';
91
+ return d.toLocaleString();
92
+ }
93
+
94
+ function getCurrentGitBranch(repoRoot) {
95
+ try {
96
+ const out = execSync('git rev-parse --abbrev-ref HEAD', {
97
+ cwd: repoRoot,
98
+ encoding: 'utf8',
99
+ stdio: ['ignore', 'pipe', 'ignore']
100
+ });
101
+ const branch = String(out || '').trim();
102
+ return branch || 'unknown';
103
+ } catch (error) {
104
+ return 'unknown';
105
+ }
106
+ }
107
+
108
+ function getBranchStateSafe(gitQuery, repoRoot, branch) {
109
+ if (gitQuery && typeof gitQuery.getBranchState === 'function') {
110
+ try {
111
+ return gitQuery.getBranchState(branch);
112
+ } catch (error) {
113
+ // Fall through to CLI-based state
114
+ }
115
+ }
116
+
117
+ try {
118
+ const upstream = `origin/${branch}`;
119
+ const out = execSync(`git rev-list --left-right --count ${upstream}...${branch}`, {
120
+ cwd: repoRoot,
121
+ encoding: 'utf8',
122
+ stdio: ['ignore', 'pipe', 'ignore']
123
+ }).trim();
124
+ const [behindRaw, aheadRaw] = out.split(/\s+/);
125
+ const behind = Number(behindRaw) || 0;
126
+ const ahead = Number(aheadRaw) || 0;
127
+ return { ahead, behind };
128
+ } catch (error) {
129
+ return { ahead: 0, behind: 0 };
130
+ }
131
+ }
132
+
133
+ function resolveUpdateEvidenceScript() {
134
+ const scriptDir = __dirname;
135
+ const candidates = [
136
+ path.join(REPO_ROOT, 'scripts/hooks-system/bin/update-evidence.sh'),
137
+ path.join(process.cwd(), 'scripts/hooks-system/bin/update-evidence.sh'),
138
+ path.join(REPO_ROOT, 'node_modules/@pumuki/ast-intelligence-hooks/bin/update-evidence.sh'),
139
+ path.join(process.cwd(), 'node_modules/@pumuki/ast-intelligence-hooks/bin/update-evidence.sh'),
140
+ path.join(REPO_ROOT, 'bin/update-evidence.sh'),
141
+ path.join(process.cwd(), 'bin/update-evidence.sh'),
142
+ path.join(scriptDir, '../../bin/update-evidence.sh'),
143
+ path.join(scriptDir, '../../../bin/update-evidence.sh')
144
+ ];
145
+
146
+ for (const candidate of candidates) {
147
+ if (fs.existsSync(candidate)) {
148
+ return candidate;
149
+ }
150
+ }
151
+
152
+ return null;
153
+ }
154
+
155
+ // Lazy Loading Services
156
+ function getContextEngine() {
157
+ return compositionRoot.getContextDetectionEngine();
158
+ }
159
+
160
+ function getOrchestrator() {
161
+ return compositionRoot.getOrchestrator();
162
+ }
163
+
164
+ function getNotificationAdapter() {
165
+ return compositionRoot.getNotificationService();
166
+ }
167
+
168
+ // Polling state
169
+ let lastContext = null;
170
+
171
+ let lastEvidenceNotification = 0;
172
+ let lastGitFlowNotification = 0;
173
+ let lastAutoCommitTime = 0;
174
+ let lastEvidenceAutoFix = 0;
175
+ const NOTIFICATION_COOLDOWN = 120000;
176
+ const EVIDENCE_AUTOFIX_COOLDOWN = Number(process.env.EVIDENCE_AUTOFIX_COOLDOWN_MS || 300000);
177
+ const AUTO_COMMIT_INTERVAL = 300000;
178
+ const AUTO_COMMIT_ENABLED = process.env.AUTO_COMMIT_ENABLED === 'true';
179
+ const AUTO_PUSH_ENABLED = process.env.AUTO_PUSH_ENABLED !== 'false';
180
+ const AUTO_PR_ENABLED = process.env.AUTO_PR_ENABLED === 'true';
181
+
182
+ /**
183
+ * Helper: Send macOS notification via centralized adapter
184
+ */
185
+ function sendNotification(title, message, sound = 'Hero') {
186
+ compositionRoot.getNotificationService().notify({
187
+ type: 'mcp_automation',
188
+ level: 'info',
189
+ title,
190
+ message,
191
+ sound
192
+ });
193
+ }
194
+
195
+ /**
196
+ * Check evidence status
197
+ */
198
+ function checkEvidence() {
199
+ const monitor = compositionRoot.getEvidenceMonitor();
200
+ const isStale = monitor.isStale();
201
+ const gitFlow = compositionRoot.getGitFlowService();
202
+ const currentBranch = gitFlow.getCurrentBranch();
203
+
204
+ if (isStale) {
205
+ sendNotification('⚠️ Evidence Stale', `Evidence is stale. Run ai-start to refresh.`, 'Basso');
206
+ }
207
+
208
+ return {
209
+ status: isStale ? 'stale' : 'fresh',
210
+ message: isStale ? `Evidence is STALE` : `Evidence is fresh`,
211
+ action: isStale ? `Run: ai-start ${currentBranch}` : 'OK',
212
+ isStale
213
+ };
214
+ }
215
+
216
+ /**
217
+ * Auto-complete Git Flow cycle
218
+ */
219
+ async function autoCompleteGitFlow(params) {
220
+ const gitFlowService = compositionRoot.getGitFlowService();
221
+ const results = [];
222
+ const currentBranch = gitFlowService.getCurrentBranch();
223
+ const baseBranch = process.env.AST_BASE_BRANCH || 'develop';
224
+
225
+ try {
226
+ if (!currentBranch.match(/^(feature|fix|hotfix)\//)) {
227
+ return {
228
+ success: false,
229
+ message: `Not on a feature/fix branch (current: ${currentBranch})`,
230
+ action: 'Create a feature branch first.'
231
+ };
232
+ }
233
+
234
+ results.push(`Current branch: ${currentBranch}`);
235
+
236
+ if (!gitFlowService.isClean()) {
237
+ results.push('⚠️ Uncommitted changes detected, committing...');
238
+ const gitCommand = compositionRoot.getGitCommandAdapter();
239
+ gitCommand.addAll();
240
+ const message = params.commitMessage || `chore: auto-commit changes on ${currentBranch}`;
241
+ gitCommand.commit(message);
242
+ results.push(`✅ Changes committed: ${message}`);
243
+ } else {
244
+ results.push('✅ No uncommitted changes');
245
+ }
246
+
247
+ results.push('Pushing to origin...');
248
+ const gitCommand = compositionRoot.getGitCommandAdapter();
249
+ gitCommand.push('origin', currentBranch, { setUpstream: true });
250
+ results.push('✅ Pushed to origin');
251
+
252
+ if (gitFlowService.isGitHubAvailable()) {
253
+ results.push('Creating pull request...');
254
+ const prTitle = params.prTitle || `Merge ${currentBranch} into ${baseBranch}`;
255
+ const prBody = params.prBody || 'Automated PR created by Pumuki Team® Git Flow Automation';
256
+
257
+ const prUrl = gitFlowService.createPullRequest(currentBranch, baseBranch, prTitle, prBody);
258
+ if (prUrl) {
259
+ results.push(`✅ PR created: ${prUrl}`);
260
+
261
+ if (params.autoMerge) {
262
+ results.push('Auto-merging PR...');
263
+ const github = compositionRoot.getGitHubAdapter();
264
+ github.mergePullRequest(prUrl);
265
+ results.push(`✅ PR merged and branch deleted`);
266
+
267
+ gitCommand.checkout(baseBranch);
268
+ gitCommand.pull('origin', baseBranch);
269
+ results.push(`✅ Switched to ${baseBranch} and pulled latest`);
270
+ }
271
+ } else {
272
+ results.push(`⚠️ PR creation failed (check logs)`);
273
+ }
274
+ } else {
275
+ results.push('⚠️ GitHub CLI not available, PR must be created manually');
276
+ }
277
+
278
+ return {
279
+ success: true,
280
+ message: 'Git Flow cycle completed',
281
+ currentBranch: gitFlowService.getCurrentBranch(),
282
+ results
283
+ };
284
+
285
+ } catch (err) {
286
+ return {
287
+ success: false,
288
+ message: `Error: ${err.message}`,
289
+ results
290
+ };
291
+ }
292
+ }
293
+
294
+ /**
295
+ * Sync branches (develop ↔ main)
296
+ */
297
+ function syncBranches(params) {
298
+ const gitFlowService = compositionRoot.getGitFlowService();
299
+ const result = gitFlowService.syncBranches();
300
+
301
+ return {
302
+ success: result.success,
303
+ message: result.message,
304
+ results: result.success ? ['✅ Branches synchronized'] : [`❌ ${result.message}`]
305
+ };
306
+ }
307
+
308
+ /**
309
+ * Cleanup stale branches (local + remote)
310
+ */
311
+ function cleanupStaleBranches(params) {
312
+ const gitFlowService = compositionRoot.getGitFlowService();
313
+ const baseBranch = process.env.AST_BASE_BRANCH || 'develop';
314
+ const gitQuery = compositionRoot.getGitQueryAdapter();
315
+ const gitCommand = compositionRoot.getGitCommandAdapter();
316
+ const github = compositionRoot.getGitHubAdapter();
317
+
318
+ const results = [];
319
+
320
+ try {
321
+ const mergedBranches = gitQuery.getMergedBranches(baseBranch)
322
+ .filter(b => b !== baseBranch && b !== 'main' && b !== 'master');
323
+
324
+ if (mergedBranches.length === 0) {
325
+ return {
326
+ success: true,
327
+ message: 'No stale branches to clean',
328
+ results: ['✅ Repository is clean']
329
+ };
330
+ }
331
+
332
+ results.push(`Found ${mergedBranches.length} merged branches`);
333
+
334
+ for (const branch of mergedBranches) {
335
+ results.push(`Deleting local: ${branch}`);
336
+ gitCommand.deleteBranch(branch, { force: true });
337
+ }
338
+ results.push(`✅ Deleted ${mergedBranches.length} local branches`);
339
+
340
+ if (gitFlowService.isGitHubAvailable()) {
341
+ for (const branch of mergedBranches) {
342
+ // Remote check and deletion logic delegated to adapters or manual implementation if missing
343
+ results.push(`Remote cleanup for ${branch} skipped (implement in adapter if needed)`);
344
+ }
345
+ results.push(`✅ Remote cleanup task finished`);
346
+ }
347
+
348
+ return {
349
+ success: true,
350
+ message: `Cleaned ${mergedBranches.length} stale branches`,
351
+ branches: mergedBranches,
352
+ results
353
+ };
354
+ } catch (err) {
355
+ return {
356
+ success: false,
357
+ message: `Cleanup failed: ${err.message}`,
358
+ results
359
+ };
360
+ }
361
+ }
362
+
363
+ /**
364
+ * Validate and fix common issues
365
+ */
366
+ /**
367
+ * Auto-execute ai-start when code files detected
368
+ */
369
+ async function autoExecuteAIStart(params) {
370
+ const useCase = compositionRoot.getAutoExecuteAIStartUseCase();
371
+
372
+ try {
373
+ const result = await useCase.execute({
374
+ force: params.forceAnalysis || false
375
+ });
376
+
377
+ if (result.action === 'auto-executed') {
378
+ sendNotification(
379
+ '✅ AI Start Executed',
380
+ `Platform: ${result.platforms.join(', ').toUpperCase()}`,
381
+ 'Glass'
382
+ );
383
+ }
384
+
385
+ return {
386
+ success: true,
387
+ ...result
388
+ };
389
+
390
+ } catch (error) {
391
+ return {
392
+ success: false,
393
+ action: 'error',
394
+ message: `Failed to execute AI Start: ${error.message}`
395
+ };
396
+ }
397
+ }
398
+
399
+
400
+ /**
401
+ * Check if changes are coherent with the branch name scope
402
+ * Returns { isCoherent, expectedScope, detectedScope, reason }
403
+ */
404
+ function checkBranchChangesCoherence(branchName, uncommittedChanges) {
405
+ if (!uncommittedChanges || uncommittedChanges.trim().length === 0) {
406
+ return { isCoherent: true, expectedScope: null, detectedScope: null, reason: 'No changes to validate' };
407
+ }
408
+
409
+ const branchScopeMap = {
410
+ 'ast-violations': ['violations', 'rules', 'ast-intelligence', 'ast-backend', 'ast-frontend'],
411
+ 'hooks-clean-architecture': ['hooks-system', 'domain/ports', 'infrastructure/adapters', 'application/services'],
412
+ 'notifications': ['notification', 'notify', 'alert'],
413
+ 'git-flow': ['gitflow', 'branch-policy'],
414
+ 'evidence': ['evidence', '.AI_EVIDENCE', 'update-evidence'],
415
+ 'documentation': ['docs/', 'README', 'ROADMAP'],
416
+ 'testing': ['test', 'spec', '__tests__'],
417
+ 'auth': ['auth/', 'login', 'session'],
418
+ 'orders': ['orders/', 'order'],
419
+ 'products': ['products/', 'product'],
420
+ 'stores': ['stores/', 'store']
421
+ };
422
+
423
+ const featureName = branchName.replace('feature/', '').replace(/[-_]phase\d+$/i, '').replace(/[-_]v\d+$/i, '');
424
+
425
+ let expectedScope = null;
426
+ let expectedKeywords = [];
427
+
428
+ for (const [scope, keywords] of Object.entries(branchScopeMap)) {
429
+ if (featureName.includes(scope) || scope.includes(featureName)) {
430
+ expectedScope = scope;
431
+ expectedKeywords = keywords;
432
+ break;
433
+ }
434
+ }
435
+
436
+ if (!expectedScope) {
437
+ return { isCoherent: true, expectedScope: 'unknown', detectedScope: 'unknown', reason: 'Branch scope not in known list - allowing' };
438
+ }
439
+
440
+ const changedFiles = uncommittedChanges.split('\n').filter(line => line.trim().length > 0);
441
+
442
+ const toolingPrefixes = ['bin/', 'infrastructure/', 'scripts/'];
443
+ const isToolingPath = (filePath) => toolingPrefixes.some(prefix => filePath.startsWith(prefix));
444
+ const onlyToolingChanges = changedFiles
445
+ .map(line => line.substring(3).trim())
446
+ .filter(filePath => filePath && !filePath.includes('.AI_EVIDENCE') && !filePath.includes('.gitignore'))
447
+ .every(filePath => isToolingPath(filePath));
448
+ if (onlyToolingChanges) {
449
+ return { isCoherent: true, expectedScope, detectedScope: 'tooling', reason: 'Only tooling/infra files changed' };
450
+ }
451
+
452
+ const fileScopes = new Map();
453
+
454
+ for (const line of changedFiles) {
455
+ const filePath = line.substring(3).trim();
456
+
457
+ if (filePath.includes('.AI_EVIDENCE') || filePath.includes('.gitignore')) {
458
+ continue;
459
+ }
460
+
461
+ if (isToolingPath(filePath)) {
462
+ continue;
463
+ }
464
+
465
+ for (const [scope, keywords] of Object.entries(branchScopeMap)) {
466
+ for (const keyword of keywords) {
467
+ if (filePath.toLowerCase().includes(keyword.toLowerCase())) {
468
+ fileScopes.set(scope, (fileScopes.get(scope) || 0) + 1);
469
+ break;
470
+ }
471
+ }
472
+ }
473
+ }
474
+
475
+ if (fileScopes.size === 0) {
476
+ return { isCoherent: true, expectedScope, detectedScope: 'config-only', reason: 'Only config/meta files changed' };
477
+ }
478
+
479
+ const dominantScope = [...fileScopes.entries()].sort((a, b) => b[1] - a[1])[0][0];
480
+
481
+ const matchesExpected = expectedKeywords.some(keyword => {
482
+ return changedFiles
483
+ .map(line => line.slice(3).trim())
484
+ .filter(filePath => filePath && !filePath.includes('.AI_EVIDENCE') && !filePath.includes('.gitignore'))
485
+ .filter(filePath => !isToolingPath(filePath))
486
+ .some(filePath => filePath.toLowerCase().includes(keyword.toLowerCase()));
487
+ });
488
+
489
+ if (!matchesExpected && dominantScope !== expectedScope) {
490
+ return {
491
+ isCoherent: false,
492
+ expectedScope,
493
+ detectedScope: dominantScope,
494
+ reason: `Changes are for '${dominantScope}' but branch is for '${expectedScope}'`
495
+ };
496
+ }
497
+
498
+ return { isCoherent: true, expectedScope, detectedScope: dominantScope, reason: 'Changes match branch scope' };
499
+ }
500
+
501
+ /**
502
+ * AI Gate Check - MANDATORY at start of every AI response
503
+ * Returns BLOCKED or ALLOWED status with auto-fixes applied
504
+ */
505
+ async function aiGateCheck() {
506
+ const gitFlowService = compositionRoot.getGitFlowService();
507
+ const gitQuery = compositionRoot.getGitQueryAdapter();
508
+ const currentBranch = getCurrentGitBranch(REPO_ROOT);
509
+ const isProtectedBranch = ['main', 'master', 'develop'].includes(currentBranch);
510
+
511
+ const uncommittedChanges = gitQuery.getUncommittedChanges();
512
+ const hasUncommittedChanges = uncommittedChanges && uncommittedChanges.length > 0;
513
+
514
+ const violations = [];
515
+ const warnings = [];
516
+ const autoFixes = [];
517
+
518
+ // 1. Evidence Freshness Check (Auto-fix included)
519
+ const evidenceMonitor = compositionRoot.getEvidenceMonitor();
520
+ if (evidenceMonitor.isStale()) {
521
+ try {
522
+ await evidenceMonitor.refresh();
523
+ autoFixes.push('✅ Evidence was stale - AUTO-FIXED');
524
+ } catch (err) {
525
+ violations.push(`❌ EVIDENCE_STALE: Auto-fix failed: ${err.message}`);
526
+ }
527
+ }
528
+
529
+ // 2. Git Flow Integrity
530
+ if (!gitFlowService.isGitHubAvailable()) {
531
+ warnings.push('⚠️ GitHub CLI not available - some automations may be limited');
532
+ }
533
+
534
+ if (isProtectedBranch) {
535
+ if (hasUncommittedChanges) {
536
+ violations.push(`❌ ON_PROTECTED_BRANCH: You are on '${currentBranch}' with uncommitted changes.`);
537
+ violations.push(` Required: create a feature branch first.`);
538
+ } else {
539
+ warnings.push(`⚠️ ON_PROTECTED_BRANCH: You are on '${currentBranch}'. Create a feature branch before making changes.`);
540
+ }
541
+ }
542
+
543
+ // 3. Block Commit Use Case Integration
544
+ const blockCommitUseCase = compositionRoot.getBlockCommitUseCase();
545
+ const astAdapter = compositionRoot.getAstAdapter();
546
+
547
+ try {
548
+ const auditResult = await astAdapter.analyzeStagedFiles();
549
+ const decision = await blockCommitUseCase.execute(auditResult, {
550
+ useStagedOnly: true
551
+ });
552
+
553
+ if (decision.shouldBlock) {
554
+ violations.push(`❌ AST_VIOLATIONS: ${decision.reason}`);
555
+ }
556
+ } catch (err) {
557
+ if (process.env.DEBUG) console.error('[MCP] AST Check failed:', err.message);
558
+ }
559
+
560
+ const isBlocked = violations.length > 0;
561
+
562
+ return {
563
+ status: isBlocked ? 'BLOCKED' : 'ALLOWED',
564
+ timestamp: new Date().toISOString(),
565
+ branch: currentBranch,
566
+ violations,
567
+ warnings,
568
+ autoFixes,
569
+ summary: isBlocked
570
+ ? `🚫 BLOCKED: ${violations.length} violation(s). Fix before proceeding.`
571
+ : `🚦 ALLOWED: Gate passed.${warnings.length > 0 ? ` ${warnings.length} warning(s).` : ''}`,
572
+ instructions: isBlocked
573
+ ? 'DO NOT proceed with user task. Announce violations and fix them first.'
574
+ : 'You may proceed with user task.'
575
+ };
576
+ }
577
+
578
+ /**
579
+ * Validate and fix common issues
580
+ */
581
+ async function validateAndFix(params) {
582
+ const results = [];
583
+ const issues = [];
584
+ const gitFlowService = compositionRoot.getGitFlowService();
585
+ const gitQuery = compositionRoot.getGitQueryAdapter();
586
+ const gitCommand = compositionRoot.getGitCommandAdapter();
587
+ const evidenceMonitor = compositionRoot.getEvidenceMonitor();
588
+
589
+ try {
590
+ if (evidenceMonitor.isStale()) {
591
+ issues.push('Evidence is stale');
592
+ results.push('🔧 Fixing: Updating AI evidence...');
593
+ await evidenceMonitor.refresh();
594
+ results.push('✅ Evidence updated');
595
+ } else {
596
+ results.push('✅ Evidence is fresh');
597
+ }
598
+
599
+ if (!gitFlowService.isClean()) {
600
+ issues.push('Uncommitted changes');
601
+ results.push('⚠️ Uncommitted changes detected (user should commit manually)');
602
+ } else {
603
+ results.push('✅ No uncommitted changes');
604
+ }
605
+
606
+ const currentBranch = getCurrentGitBranch(REPO_ROOT);
607
+ const branchState = getBranchStateSafe(gitQuery, REPO_ROOT, currentBranch);
608
+
609
+ if (branchState.behind > 0) {
610
+ issues.push(`Behind origin by ${branchState.behind} commits`);
611
+ results.push(`🔧 Fixing: Pulling changes from origin...`);
612
+ gitCommand.pull('origin', currentBranch);
613
+ results.push('✅ Pulled latest changes');
614
+ } else if (branchState.ahead > 0) {
615
+ results.push(`⚠️ Local is ${branchState.ahead} commits ahead (push recommended)`);
616
+ } else {
617
+ results.push('✅ Branch is in sync with origin');
618
+ }
619
+
620
+ return {
621
+ success: issues.length === 0,
622
+ message: issues.length === 0 ? 'All validations passed' : `Fixed ${issues.length} issues`,
623
+ issuesFound: issues,
624
+ results: results
625
+ };
626
+ } catch (err) {
627
+ return {
628
+ success: false,
629
+ message: `Validation failed: ${err.message}`,
630
+ results: results
631
+ };
632
+ }
633
+ }
634
+
635
+ /**
636
+ * MCP Protocol Handler
637
+ */
638
+ const protocolHandler = compositionRoot.getMcpProtocolHandler(process.stdin, process.stdout);
639
+
640
+ async function handleMcpMessage(message) {
641
+ try {
642
+ const request = JSON.parse(message);
643
+
644
+ if ((typeof request.id === 'undefined' || request.id === null) && request.method?.startsWith('notifications/')) {
645
+ return null;
646
+ }
647
+
648
+ if (request.method === 'initialize') {
649
+ return {
650
+ jsonrpc: '2.0',
651
+ id: request.id,
652
+ result: {
653
+ protocolVersion: MCP_VERSION,
654
+ capabilities: {
655
+ resources: {
656
+ subscribe: false,
657
+ listChanged: false
658
+ },
659
+ tools: {
660
+ listChanged: false
661
+ }
662
+ },
663
+ serverInfo: {
664
+ name: 'ast-intelligence-automation',
665
+ version: '3.0.0',
666
+ description: 'Autonomous AST Intelligence + Git Flow Automation'
667
+ }
668
+ }
669
+ };
670
+ }
671
+
672
+ if (request.method === 'resources/list') {
673
+ return {
674
+ jsonrpc: '2.0',
675
+ id: request.id,
676
+ result: {
677
+ resources: [
678
+ {
679
+ uri: 'ai://gate',
680
+ name: '🚦 AI Gate Check (MANDATORY)',
681
+ description: 'MUST READ AT START OF EVERY RESPONSE. Returns BLOCKED or ALLOWED status. If BLOCKED, AI must fix issues before proceeding.',
682
+ mimeType: 'application/json'
683
+ },
684
+ {
685
+ uri: 'evidence://status',
686
+ name: 'Evidence Status',
687
+ description: 'Current status of .AI_EVIDENCE.json (fresh or stale)',
688
+ mimeType: 'application/json'
689
+ },
690
+ {
691
+ uri: 'gitflow://state',
692
+ name: 'Git Flow State',
693
+ description: 'Current Git Flow cycle step and status',
694
+ mimeType: 'application/json'
695
+ },
696
+ {
697
+ uri: 'context://active',
698
+ name: 'Active Context Analysis',
699
+ description: 'Multi-platform context detection with confidence scoring',
700
+ mimeType: 'application/json'
701
+ }
702
+ ]
703
+ }
704
+ };
705
+ }
706
+
707
+ if (request.method === 'resources/read') {
708
+ const uri = request.params?.uri;
709
+
710
+ if (uri === 'ai://gate') {
711
+ try {
712
+ const gateResult = await aiGateCheck();
713
+ return {
714
+ jsonrpc: '2.0',
715
+ id: request.id,
716
+ result: {
717
+ contents: [{
718
+ uri: 'ai://gate',
719
+ mimeType: 'application/json',
720
+ text: JSON.stringify(gateResult, null, 2)
721
+ }]
722
+ }
723
+ };
724
+ } catch (error) {
725
+ return {
726
+ jsonrpc: '2.0',
727
+ id: request.id,
728
+ error: {
729
+ code: -32603,
730
+ message: `Failed to read AI Gate: ${error.message}`
731
+ }
732
+ };
733
+ }
734
+ }
735
+
736
+ if (uri === 'evidence://status') {
737
+ const status = checkEvidence();
738
+ return {
739
+ jsonrpc: '2.0',
740
+ id: request.id,
741
+ result: {
742
+ contents: [{
743
+ uri: 'evidence://status',
744
+ mimeType: 'application/json',
745
+ text: JSON.stringify(status, null, 2)
746
+ }]
747
+ }
748
+ };
749
+ }
750
+
751
+ if (uri === 'gitflow://state') {
752
+ const gitFlow = compositionRoot.getGitFlowService();
753
+ const gitQuery = compositionRoot.getGitQueryAdapter();
754
+ const currentBranch = getCurrentGitBranch(REPO_ROOT);
755
+ const branchState = getBranchStateSafe(gitQuery, REPO_ROOT, currentBranch);
756
+
757
+ const state = {
758
+ branch: currentBranch,
759
+ isClean: gitFlow.isClean(),
760
+ ahead: branchState.ahead,
761
+ behind: branchState.behind,
762
+ timestamp: new Date().toISOString()
763
+ };
764
+
765
+ return {
766
+ jsonrpc: '2.0',
767
+ id: request.id,
768
+ result: {
769
+ contents: [{
770
+ uri: 'gitflow://state',
771
+ mimeType: 'application/json',
772
+ text: JSON.stringify(state, null, 2)
773
+ }]
774
+ }
775
+ };
776
+ }
777
+
778
+ if (uri === 'context://active') {
779
+ const orchestrator = compositionRoot.getOrchestrator();
780
+ try {
781
+ const decision = await orchestrator.analyzeContext();
782
+ return {
783
+ jsonrpc: '2.0',
784
+ id: request.id,
785
+ result: {
786
+ contents: [{
787
+ uri: 'context://active',
788
+ mimeType: 'application/json',
789
+ text: JSON.stringify(decision, null, 2)
790
+ }]
791
+ }
792
+ };
793
+ } catch (error) {
794
+ return {
795
+ jsonrpc: '2.0',
796
+ id: request.id,
797
+ result: {
798
+ contents: [{
799
+ uri: 'context://active',
800
+ mimeType: 'application/json',
801
+ text: JSON.stringify({
802
+ confidence: 0,
803
+ platforms: [],
804
+ context: null,
805
+ error: error && error.message ? error.message : String(error)
806
+ }, null, 2)
807
+ }]
808
+ }
809
+ };
810
+ }
811
+ }
812
+ }
813
+
814
+ if (request.method === 'tools/list') {
815
+ return {
816
+ jsonrpc: '2.0',
817
+ id: request.id,
818
+ result: {
819
+ tools: [
820
+ {
821
+ name: 'check_evidence_status',
822
+ description: 'Check if .AI_EVIDENCE.json is fresh or stale',
823
+ inputSchema: { type: 'object', properties: {} }
824
+ },
825
+ {
826
+ name: 'auto_complete_gitflow',
827
+ description: 'Automatically complete Git Flow cycle: commit → push → PR → merge → cleanup',
828
+ inputSchema: {
829
+ type: 'object',
830
+ properties: {
831
+ commitMessage: { type: 'string' },
832
+ prTitle: { type: 'string' },
833
+ prBody: { type: 'string' },
834
+ autoMerge: { type: 'boolean' }
835
+ }
836
+ }
837
+ },
838
+ {
839
+ name: 'sync_branches',
840
+ description: 'Synchronize branches with remote',
841
+ inputSchema: { type: 'object', properties: {} }
842
+ },
843
+ {
844
+ name: 'cleanup_stale_branches',
845
+ description: 'Delete merged local and remote branches',
846
+ inputSchema: { type: 'object', properties: {} }
847
+ },
848
+ {
849
+ name: 'auto_execute_ai_start',
850
+ description: 'Analyze context and run ai-start if needed',
851
+ inputSchema: {
852
+ type: 'object',
853
+ properties: {
854
+ forceAnalysis: { type: 'boolean' }
855
+ }
856
+ }
857
+ },
858
+ {
859
+ name: 'validate_and_fix',
860
+ description: 'Validate and fix common issues',
861
+ inputSchema: { type: 'object', properties: {} }
862
+ },
863
+ {
864
+ name: 'ai_gate_check',
865
+ description: '🚦 MANDATORY gate check',
866
+ inputSchema: { type: 'object', properties: {} }
867
+ }
868
+ ]
869
+ }
870
+ };
871
+ }
872
+
873
+ if (request.method === 'tools/call') {
874
+ const toolName = request.params?.name;
875
+ const toolParams = request.params?.arguments || {};
876
+
877
+ let result;
878
+ switch (toolName) {
879
+ case 'check_evidence_status':
880
+ result = checkEvidence();
881
+ break;
882
+ case 'auto_complete_gitflow':
883
+ result = await autoCompleteGitFlow(toolParams);
884
+ break;
885
+ case 'sync_branches':
886
+ result = syncBranches(toolParams);
887
+ break;
888
+ case 'cleanup_stale_branches':
889
+ result = cleanupStaleBranches(toolParams);
890
+ break;
891
+ case 'auto_execute_ai_start':
892
+ result = await autoExecuteAIStart(toolParams);
893
+ break;
894
+ case 'validate_and_fix':
895
+ result = await validateAndFix(toolParams);
896
+ break;
897
+ case 'ai_gate_check':
898
+ result = await aiGateCheck();
899
+ break;
900
+ default:
901
+ return {
902
+ jsonrpc: '2.0',
903
+ id: request.id,
904
+ error: { code: -32602, message: `Unknown tool: ${toolName}` }
905
+ };
906
+ }
907
+
908
+ return {
909
+ jsonrpc: '2.0',
910
+ id: request.id,
911
+ result: {
912
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }]
913
+ }
914
+ };
915
+ }
916
+
917
+ return {
918
+ jsonrpc: '2.0',
919
+ id: request.id,
920
+ error: { code: -32601, message: `Method not found: ${request.method}` }
921
+ };
922
+
923
+ } catch (error) {
924
+ return {
925
+ jsonrpc: '2.0',
926
+ id: null,
927
+ error: { code: -32700, message: `Parse error: ${error.message}` }
928
+ };
929
+ }
930
+ }
931
+
932
+ // Start protocol handler
933
+ protocolHandler.start(handleMcpMessage);
934
+
935
+ /**
936
+ * Polling loop for background notifications and automations
937
+ */
938
+ setInterval(async () => {
939
+ try {
940
+ const now = Date.now();
941
+ const gitFlowService = compositionRoot.getGitFlowService();
942
+ const gitQuery = compositionRoot.getGitQueryAdapter();
943
+ const evidenceMonitor = compositionRoot.getEvidenceMonitor();
944
+ const orchestrator = compositionRoot.getOrchestrator();
945
+
946
+ const currentBranch = gitFlowService.getCurrentBranch();
947
+ const baseBranch = process.env.AST_BASE_BRANCH || 'develop';
948
+ const isProtectedBranch = ['main', 'master', baseBranch].includes(currentBranch);
949
+
950
+ const uncommittedChanges = gitQuery.getUncommittedChanges();
951
+ const hasUncommittedChanges = uncommittedChanges && uncommittedChanges.length > 0;
952
+
953
+ // 1. Protected Branch Guard
954
+ if (isProtectedBranch && hasUncommittedChanges) {
955
+ if (now - lastGitFlowNotification > NOTIFICATION_COOLDOWN) {
956
+ const state = gitQuery.getBranchState(currentBranch);
957
+ sendNotification(
958
+ '⚠️ Git Flow Violation',
959
+ `branch=${currentBranch} changes detected on protected branch. Create a feature branch.`,
960
+ 'Basso'
961
+ );
962
+ lastGitFlowNotification = now;
963
+ }
964
+ }
965
+
966
+ // 2. Evidence Freshness Guard
967
+ if (evidenceMonitor.isStale() && (now - lastEvidenceNotification > NOTIFICATION_COOLDOWN)) {
968
+ try {
969
+ await evidenceMonitor.refresh();
970
+ sendNotification('🔄 Evidence Auto-Updated', 'AI Evidence has been refreshed automatically', 'Purr');
971
+ } catch (err) {
972
+ sendNotification('⚠️ Evidence Stale', `Failed to auto-refresh evidence: ${err.message}`, 'Basso');
973
+ }
974
+ lastEvidenceNotification = now;
975
+ }
976
+
977
+ // 3. Autonomous Orchestration
978
+ if (orchestrator.shouldReanalyze()) {
979
+ const decision = await orchestrator.analyzeContext();
980
+ if (decision.action === 'auto-execute' && decision.platforms.length > 0) {
981
+ try {
982
+ await evidenceMonitor.refresh();
983
+ sendNotification('✅ AI Start Executed', `Platforms: ${decision.platforms.map(p => p.platform.toUpperCase()).join(', ')}`, 'Glass');
984
+ } catch (e) {
985
+ sendNotification('❌ AI Start Error', `Failed to execute: ${e.message}`, 'Basso');
986
+ }
987
+ }
988
+ }
989
+
990
+ } catch (error) {
991
+ if (process.env.DEBUG) console.error('[MCP] Polling loop error:', error);
992
+ }
993
+ }, 30000);
994
+
995
+ // AUTO-COMMIT: Only for project code changes (no node_modules, no library)
996
+ setInterval(async () => {
997
+ if (!AUTO_COMMIT_ENABLED) {
998
+ return;
999
+ }
1000
+
1001
+ const now = Date.now();
1002
+ if (now - lastAutoCommitTime < AUTO_COMMIT_INTERVAL) return;
1003
+
1004
+ try {
1005
+ const gitFlowService = compositionRoot.getGitFlowService();
1006
+ const gitQuery = compositionRoot.getGitQueryAdapter();
1007
+ const gitCommand = compositionRoot.getGitCommandAdapter();
1008
+
1009
+ const currentBranch = gitFlowService.getCurrentBranch();
1010
+ const isFeatureBranch = currentBranch.match(/^(feature|fix|hotfix)\//);
1011
+
1012
+ if (!isFeatureBranch) {
1013
+ return;
1014
+ }
1015
+
1016
+ if (gitFlowService.isClean()) {
1017
+ return;
1018
+ }
1019
+
1020
+ // Get uncommitted changes
1021
+ const uncommittedChanges = gitQuery.getUncommittedChanges();
1022
+
1023
+ // Detect library installation path
1024
+ const libraryPath = getLibraryInstallPath();
1025
+
1026
+ // Filter changes: project code only
1027
+ const filesToCommit = uncommittedChanges.filter(file => {
1028
+ // Exclude noise
1029
+ if (file.startsWith('node_modules/') ||
1030
+ file.includes('package-lock.json') ||
1031
+ file.startsWith('.git/') ||
1032
+ file.startsWith('.cursor/') ||
1033
+ file.startsWith('.ast-intelligence/') ||
1034
+ file.startsWith('.vscode/') ||
1035
+ file.startsWith('.idea/')) {
1036
+ return false;
1037
+ }
1038
+
1039
+ // Exclude library itself
1040
+ if (libraryPath && file.startsWith(libraryPath + '/')) {
1041
+ return false;
1042
+ }
1043
+
1044
+ // Code/Doc files only
1045
+ const codeExtensions = ['.ts', '.tsx', '.js', '.jsx', '.swift', '.kt', '.py', '.java', '.go', '.rs', '.md', '.json', '.yaml', '.yml'];
1046
+ return codeExtensions.some(ext => file.endsWith(ext));
1047
+ });
1048
+
1049
+ if (filesToCommit.length === 0) {
1050
+ return;
1051
+ }
1052
+
1053
+ // Stage files
1054
+ filesToCommit.forEach(file => {
1055
+ gitCommand.add(file);
1056
+ });
1057
+
1058
+ const branchType = currentBranch.split('/')[0];
1059
+ const branchName = currentBranch.split('/').slice(1).join('/');
1060
+ const commitMessage = `${branchType}(auto): ${branchName} - ${filesToCommit.length} files`;
1061
+
1062
+ // Commit
1063
+ gitCommand.commit(commitMessage);
1064
+
1065
+ sendNotification('✅ Auto-Commit', `${filesToCommit.length} files in ${currentBranch}`, 'Purr');
1066
+ lastAutoCommitTime = now;
1067
+
1068
+ if (AUTO_PUSH_ENABLED) {
1069
+ if (gitFlowService.isGitHubAvailable()) {
1070
+ try {
1071
+ gitCommand.push('origin', currentBranch);
1072
+ sendNotification('✅ Auto-Push', `Pushed to origin/${currentBranch}`, 'Glass');
1073
+
1074
+ if (AUTO_PR_ENABLED) {
1075
+ const baseBranch = process.env.AST_BASE_BRANCH || 'develop';
1076
+ const branchState = gitQuery.getBranchState(currentBranch);
1077
+
1078
+ if (branchState.ahead >= 3) {
1079
+ const prTitle = `Auto-PR: ${branchName}`;
1080
+ const prUrl = gitFlowService.createPullRequest(currentBranch, baseBranch, prTitle, 'Automated PR by Pumuki Git Flow');
1081
+ if (prUrl) {
1082
+ sendNotification('✅ Auto-PR Created', prTitle, 'Hero');
1083
+ }
1084
+ }
1085
+ }
1086
+ } catch (e) {
1087
+ if (!e.message.includes('No remote')) {
1088
+ sendNotification('⚠️ Auto-Push Failed', 'Push manual required', 'Basso');
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ } catch (error) {
1095
+ if (process.env.DEBUG) console.error('[MCP] Auto-commit error:', error);
1096
+ }
1097
+ }, AUTO_COMMIT_INTERVAL);