0xray 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/.opencode/agents/api-design.yml +31 -0
  2. package/.opencode/agents/architect.yml +15 -0
  3. package/.opencode/agents/architecture-patterns.yml +14 -0
  4. package/.opencode/agents/auto-format.yml +14 -0
  5. package/.opencode/agents/backend-engineer.yml +12 -0
  6. package/.opencode/agents/boot-orchestrator.yml +14 -0
  7. package/.opencode/agents/bug-triage-specialist.yml +15 -0
  8. package/.opencode/agents/code-analyzer.yml +12 -0
  9. package/.opencode/agents/code-reviewer.yml +14 -0
  10. package/.opencode/agents/content-creator.yml +12 -0
  11. package/.opencode/agents/database-engineer.yml +12 -0
  12. package/.opencode/agents/devops-engineer.yml +12 -0
  13. package/.opencode/agents/framework-compliance-audit.yml +14 -0
  14. package/.opencode/agents/frontend-engineer.yml +12 -0
  15. package/.opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  16. package/.opencode/agents/git-workflow.yml +15 -0
  17. package/.opencode/agents/growth-strategist.yml +12 -0
  18. package/.opencode/agents/hermes-agent.yml +12 -0
  19. package/.opencode/agents/inference-improve.yml +12 -0
  20. package/.opencode/agents/lint.yml +14 -0
  21. package/.opencode/agents/log-monitor.yml +12 -0
  22. package/.opencode/agents/mobile-developer.yml +12 -0
  23. package/.opencode/agents/model-health-check.yml +12 -0
  24. package/.opencode/agents/multimodal-looker.yml +12 -0
  25. package/.opencode/agents/performance-analysis.yml +12 -0
  26. package/.opencode/agents/performance-engineer.yml +12 -0
  27. package/.opencode/agents/performance-optimization.yml +12 -0
  28. package/.opencode/agents/processor-pipeline.yml +14 -0
  29. package/.opencode/agents/project-analysis.yml +12 -0
  30. package/.opencode/agents/refactorer.yml +12 -0
  31. package/.opencode/agents/researcher.yml +12 -0
  32. package/.opencode/agents/security-auditor.yml +12 -0
  33. package/.opencode/agents/security-scan.yml +12 -0
  34. package/.opencode/agents/seo-consultant.yml +12 -0
  35. package/.opencode/agents/session-management.yml +12 -0
  36. package/.opencode/agents/state-manager.yml +12 -0
  37. package/.opencode/agents/storyteller.yml +12 -0
  38. package/.opencode/agents/strategist.yml +12 -0
  39. package/.opencode/agents/tech-writer.yml +12 -0
  40. package/.opencode/agents/testing-best-practices.yml +12 -0
  41. package/.opencode/agents/testing-lead.yml +12 -0
  42. package/.opencode/agents/ui-ux-design.yml +12 -0
  43. package/.opencode/codex.codex +8 -0
  44. package/.opencode/commands/auto-format.md +99 -0
  45. package/.opencode/commands/auto-summary-capture.md +90 -0
  46. package/.opencode/commands/dependency-audit.md +184 -0
  47. package/.opencode/commands/enforcer-daily-scan.md +137 -0
  48. package/.opencode/commands/framework-compliance-audit.md +205 -0
  49. package/.opencode/commands/interactive-validator.md +75 -0
  50. package/.opencode/commands/job-summary-logger.md +68 -0
  51. package/.opencode/commands/lint.md +11 -0
  52. package/.opencode/commands/mode-switch.md +95 -0
  53. package/.opencode/commands/model-health-check.md +186 -0
  54. package/.opencode/commands/performance-analysis.md +144 -0
  55. package/.opencode/commands/pre-commit-introspection.md +185 -0
  56. package/.opencode/commands/pre-commit-introspection.sh +133 -0
  57. package/.opencode/commands/security-scan.md +157 -0
  58. package/.opencode/commands/sisyphus-validation.md +128 -0
  59. package/.opencode/commands/summary-logger.md +83 -0
  60. package/.opencode/enforcer-config.json +285 -0
  61. package/.opencode/hooks/hook-metrics.json +380 -0
  62. package/.opencode/hooks/post-commit +114 -0
  63. package/.opencode/hooks/post-push +34 -0
  64. package/.opencode/init.sh +151 -0
  65. package/.opencode/skills/api-design/SKILL.md +37 -0
  66. package/.opencode/skills/architect-tools/SKILL.md +37 -0
  67. package/.opencode/skills/architecture-patterns/SKILL.md +37 -0
  68. package/.opencode/skills/auto-format/SKILL.md +37 -0
  69. package/.opencode/skills/backend-engineer/SKILL.md +49 -0
  70. package/.opencode/skills/boot-orchestrator/SKILL.md +37 -0
  71. package/.opencode/skills/bug-triage/SKILL.md +43 -0
  72. package/.opencode/skills/code-analyzer/SKILL.md +45 -0
  73. package/.opencode/skills/code-review/SKILL.md +52 -0
  74. package/.opencode/skills/content-creator/SKILL.md +38 -0
  75. package/.opencode/skills/database-engineer/SKILL.md +46 -0
  76. package/.opencode/skills/devops-engineer/SKILL.md +49 -0
  77. package/.opencode/skills/enforcer/SKILL.md +37 -0
  78. package/.opencode/skills/framework-compliance-audit/SKILL.md +37 -0
  79. package/.opencode/skills/frontend-engineer/SKILL.md +49 -0
  80. package/.opencode/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  81. package/.opencode/skills/git-workflow/SKILL.md +37 -0
  82. package/.opencode/skills/growth-strategist/SKILL.md +48 -0
  83. package/.opencode/skills/hermes-agent/SKILL.md +212 -0
  84. package/.opencode/skills/inference-improve/SKILL.md +97 -0
  85. package/.opencode/skills/lint/SKILL.md +37 -0
  86. package/.opencode/skills/log-monitor/SKILL.md +44 -0
  87. package/.opencode/skills/mobile-developer/SKILL.md +42 -0
  88. package/.opencode/skills/model-health-check/SKILL.md +37 -0
  89. package/.opencode/skills/multimodal-looker/SKILL.md +45 -0
  90. package/.opencode/skills/orchestrator/SKILL.md +37 -0
  91. package/.opencode/skills/performance-analysis/SKILL.md +37 -0
  92. package/.opencode/skills/performance-engineer/SKILL.md +41 -0
  93. package/.opencode/skills/performance-optimization/SKILL.md +37 -0
  94. package/.opencode/skills/processor-pipeline/SKILL.md +37 -0
  95. package/.opencode/skills/project-analysis/SKILL.md +42 -0
  96. package/.opencode/skills/refactoring-strategies/SKILL.md +37 -0
  97. package/.opencode/skills/registry.json +66 -0
  98. package/.opencode/skills/researcher/SKILL.md +37 -0
  99. package/.opencode/skills/security-audit/SKILL.md +47 -0
  100. package/.opencode/skills/security-scan/SKILL.md +37 -0
  101. package/.opencode/skills/seo-consultant/SKILL.md +43 -0
  102. package/.opencode/skills/session-management/SKILL.md +36 -0
  103. package/.opencode/skills/state-manager/SKILL.md +37 -0
  104. package/.opencode/skills/storyteller/SKILL.md +130 -0
  105. package/.opencode/skills/strategist/SKILL.md +32 -0
  106. package/.opencode/skills/tech-writer/SKILL.md +37 -0
  107. package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
  108. package/.opencode/skills/testing-strategy/SKILL.md +43 -0
  109. package/.opencode/skills/ui-ux-design/SKILL.md +603 -0
  110. package/.opencode/workflows/post-deployment-audit.yml +123 -0
  111. package/AGENTS.md +110 -0
  112. package/LICENSE +21 -0
  113. package/README.md +131 -0
  114. package/dist/AGENTS.md +110 -0
  115. package/dist/CHANGELOG.md +2182 -0
  116. package/dist/LICENSE +21 -0
  117. package/dist/README.md +131 -0
  118. package/dist/agents/architect.js +56 -0
  119. package/dist/agents/backend-engineer.js +81 -0
  120. package/dist/agents/bug-triage-specialist.js +74 -0
  121. package/dist/agents/code-analyzer.js +150 -0
  122. package/dist/agents/code-reviewer.js +69 -0
  123. package/dist/agents/content-creator.js +72 -0
  124. package/dist/agents/database-engineer.js +76 -0
  125. package/dist/agents/devops-engineer.js +84 -0
  126. package/dist/agents/frontend-engineer.js +78 -0
  127. package/dist/agents/frontend-ui-ux-engineer.js +64 -0
  128. package/dist/agents/growth-strategist.js +111 -0
  129. package/dist/agents/index.js +45 -0
  130. package/dist/agents/librarian-agents-updater.js +333 -0
  131. package/dist/agents/log-monitor.js +109 -0
  132. package/dist/agents/mobile-developer.js +102 -0
  133. package/dist/agents/multimodal-looker.js +93 -0
  134. package/dist/agents/performance-engineer.js +86 -0
  135. package/dist/agents/refactorer.js +80 -0
  136. package/dist/agents/registry.js +340 -0
  137. package/dist/agents/researcher.js +83 -0
  138. package/dist/agents/security-auditor.js +158 -0
  139. package/dist/agents/seo-consultant.js +53 -0
  140. package/dist/agents/strategist.js +47 -0
  141. package/dist/agents/tech-writer.js +84 -0
  142. package/dist/agents/testing-lead.js +95 -0
  143. package/dist/agents/types.js +1 -0
  144. package/dist/analytics/consent-manager.js +258 -0
  145. package/dist/analytics/emerging-pattern-detector.js +260 -0
  146. package/dist/analytics/pattern-learning-engine.js +278 -0
  147. package/dist/analytics/pattern-performance-tracker.js +336 -0
  148. package/dist/analytics/predictive-analytics.js +248 -0
  149. package/dist/analytics/prompt-pattern-analyzer.js +371 -0
  150. package/dist/analytics/routing-performance-analyzer.js +356 -0
  151. package/dist/analytics/routing-refiner.js +380 -0
  152. package/dist/analytics/simple-pattern-analyzer.js +297 -0
  153. package/dist/architect/architect-tools.js +437 -0
  154. package/dist/architect/architectural-integrity.js +78 -0
  155. package/dist/benchmark/performance-benchmark.js +372 -0
  156. package/dist/cli/commands/analytics-disable.js +72 -0
  157. package/dist/cli/commands/analytics-enable-action.js +82 -0
  158. package/dist/cli/commands/analytics-preview.js +106 -0
  159. package/dist/cli/commands/analytics-status.js +68 -0
  160. package/dist/cli/commands/antigravity-status.js +106 -0
  161. package/dist/cli/commands/archive-logs.js +161 -0
  162. package/dist/cli/commands/credible-init.js +82 -0
  163. package/dist/cli/commands/grok-install.js +16 -0
  164. package/dist/cli/commands/hermes-install.js +66 -0
  165. package/dist/cli/commands/mcp-install.js +253 -0
  166. package/dist/cli/commands/openclaw-install.js +44 -0
  167. package/dist/cli/commands/opencode-install.js +99 -0
  168. package/dist/cli/commands/plugin-commands.js +246 -0
  169. package/dist/cli/commands/publish-agent.js +184 -0
  170. package/dist/cli/commands/security-audit.js +219 -0
  171. package/dist/cli/commands/skill-install.js +481 -0
  172. package/dist/cli/commands/status.js +196 -0
  173. package/dist/cli/commands/storyteller.js +230 -0
  174. package/dist/cli/index.js +986 -0
  175. package/dist/cli/server.js +147 -0
  176. package/dist/config/default-agents.js +16 -0
  177. package/dist/core/activity-logger.js +260 -0
  178. package/dist/core/adaptive-kernel.js +192 -0
  179. package/dist/core/agent-spawn-gate.js +120 -0
  180. package/dist/core/boot-orchestrator.js +812 -0
  181. package/dist/core/bridge.mjs +945 -0
  182. package/dist/core/codex-formatter.js +220 -0
  183. package/dist/core/codex-injector.js +424 -0
  184. package/dist/core/config-loader.js +148 -0
  185. package/dist/core/config-paths.js +162 -0
  186. package/dist/core/context-loader.js +269 -0
  187. package/dist/core/context-validator.js +212 -0
  188. package/dist/core/features-config.js +457 -0
  189. package/dist/core/framework-logger.js +275 -0
  190. package/dist/core/index.js +6 -0
  191. package/dist/core/kernel-patterns.js +302 -0
  192. package/dist/core/logging-config.js +43 -0
  193. package/dist/core/model-router.js +175 -0
  194. package/dist/core/orchestrator.js +408 -0
  195. package/dist/core/system-prompt-generator.js +265 -0
  196. package/dist/core/trace-context.js +33 -0
  197. package/dist/core/xray-activation.js +134 -0
  198. package/dist/delegation/agent-delegator.js +769 -0
  199. package/dist/delegation/agent-expertise.js +156 -0
  200. package/dist/delegation/analytics/index.js +12 -0
  201. package/dist/delegation/analytics/learning-engine.js +277 -0
  202. package/dist/delegation/analytics/outcome-tracker.js +279 -0
  203. package/dist/delegation/analytics/routing-analytics.js +193 -0
  204. package/dist/delegation/ast-code-parser.js +878 -0
  205. package/dist/delegation/codebase-context-analyzer.js +1040 -0
  206. package/dist/delegation/complexity-analyzer.js +282 -0
  207. package/dist/delegation/complexity-core.js +219 -0
  208. package/dist/delegation/config/types.js +6 -0
  209. package/dist/delegation/dependency-graph-builder.js +409 -0
  210. package/dist/delegation/index.js +20 -0
  211. package/dist/delegation/metrics-aggregator.js +335 -0
  212. package/dist/delegation/session-coordinator.js +352 -0
  213. package/dist/delegation/strategy-selector.js +108 -0
  214. package/dist/delegation/voting-coordinator.js +375 -0
  215. package/dist/delegation/voting-types.js +10 -0
  216. package/dist/delegation/weighted-voting-aggregator.js +194 -0
  217. package/dist/enforcement/core/index.js +19 -0
  218. package/dist/enforcement/core/rule-executor.js +365 -0
  219. package/dist/enforcement/core/rule-hierarchy.js +259 -0
  220. package/dist/enforcement/core/rule-registry.js +240 -0
  221. package/dist/enforcement/core/violation-fixer.js +651 -0
  222. package/dist/enforcement/enforcer-tools.js +909 -0
  223. package/dist/enforcement/index.js +41 -0
  224. package/dist/enforcement/loaders/agent-triage-loader.js +222 -0
  225. package/dist/enforcement/loaders/agents-md-validation-loader.js +252 -0
  226. package/dist/enforcement/loaders/base-loader.js +86 -0
  227. package/dist/enforcement/loaders/codex-loader.js +396 -0
  228. package/dist/enforcement/loaders/index.js +40 -0
  229. package/dist/enforcement/loaders/loader-orchestrator.js +168 -0
  230. package/dist/enforcement/loaders/processor-loader.js +113 -0
  231. package/dist/enforcement/rule-enforcer.js +298 -0
  232. package/dist/enforcement/test-auto-healing.js +325 -0
  233. package/dist/enforcement/types.js +30 -0
  234. package/dist/enforcement/validators/architecture-validators.js +600 -0
  235. package/dist/enforcement/validators/base-validator.js +108 -0
  236. package/dist/enforcement/validators/code-quality-validators.js +336 -0
  237. package/dist/enforcement/validators/index.js +21 -0
  238. package/dist/enforcement/validators/security-validators.js +220 -0
  239. package/dist/enforcement/validators/testing-validators.js +253 -0
  240. package/dist/enforcement/validators/validator-registry.js +150 -0
  241. package/dist/execution/opencode-cli-invoker.js +173 -0
  242. package/dist/execution/proposal-applier.js +254 -0
  243. package/dist/governance/codex-policy.service.js +167 -0
  244. package/dist/governance/governance-core.js +152 -0
  245. package/dist/governance/governance-service.js +274 -0
  246. package/dist/governance/governance-types.js +6 -0
  247. package/dist/index.js +24 -0
  248. package/dist/inference/deploy-verifier.js +161 -0
  249. package/dist/inference/index.js +5 -0
  250. package/dist/inference/inference-accumulator.js +126 -0
  251. package/dist/inference/inference-cycle.js +1168 -0
  252. package/dist/inference/semantic-patterns.js +310 -0
  253. package/dist/inference/session-capture.js +308 -0
  254. package/dist/integrations/base/ExampleIntegration.js +181 -0
  255. package/dist/integrations/base/Integration.js +395 -0
  256. package/dist/integrations/base/README.md +446 -0
  257. package/dist/integrations/base/index.js +16 -0
  258. package/dist/integrations/base/registry.js +606 -0
  259. package/dist/integrations/base/types.js +118 -0
  260. package/dist/integrations/governance/governance-client.js +316 -0
  261. package/dist/integrations/governance/index.js +373 -0
  262. package/dist/integrations/governance/types.js +97 -0
  263. package/dist/integrations/grok/grok-cli.js +83 -0
  264. package/dist/integrations/grok/hooks/pre-tool-use.js +134 -0
  265. package/dist/integrations/grok/plugin/0xray/.mcp.json +15 -0
  266. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  267. package/dist/integrations/hermes-agent/__init__.py +718 -0
  268. package/dist/integrations/hermes-agent/after-install.md +71 -0
  269. package/dist/integrations/hermes-agent/bridge.mjs +861 -0
  270. package/dist/integrations/hermes-agent/conftest.py +14 -0
  271. package/dist/integrations/hermes-agent/plugin.yaml +12 -0
  272. package/dist/integrations/hermes-agent/schemas.py +100 -0
  273. package/dist/integrations/hermes-agent/test_plugin.py +1100 -0
  274. package/dist/integrations/hermes-agent/tools.py +253 -0
  275. package/dist/integrations/openclaw/README.md +134 -0
  276. package/dist/integrations/openclaw/api-server.js +389 -0
  277. package/dist/integrations/openclaw/client.js +492 -0
  278. package/dist/integrations/openclaw/config.js +374 -0
  279. package/dist/integrations/openclaw/hooks/strray-hooks.js +280 -0
  280. package/dist/integrations/openclaw/index.js +351 -0
  281. package/dist/integrations/openclaw/types.js +153 -0
  282. package/dist/integrations/plugins/index.js +10 -0
  283. package/dist/integrations/plugins/plugin-integration.js +606 -0
  284. package/dist/integrations/plugins/plugin-registry.js +580 -0
  285. package/dist/mcps/agent-resolver.js +106 -0
  286. package/dist/mcps/architect-tools.server.js +277 -0
  287. package/dist/mcps/auto-format.server.js +413 -0
  288. package/dist/mcps/boot-orchestrator.server.js +853 -0
  289. package/dist/mcps/config/config-loader.js +103 -0
  290. package/dist/mcps/config/config-validator.js +101 -0
  291. package/dist/mcps/config/index.js +30 -0
  292. package/dist/mcps/config/plugin-server-registry.js +223 -0
  293. package/dist/mcps/config/server-config-registry.js +348 -0
  294. package/dist/mcps/connection/connection-manager.js +79 -0
  295. package/dist/mcps/connection/connection-pool.js +164 -0
  296. package/dist/mcps/connection/mcp-connection.js +233 -0
  297. package/dist/mcps/connection/process-spawner.js +34 -0
  298. package/dist/mcps/enforcer-tools.server.js +778 -0
  299. package/dist/mcps/estimation.server.js +192 -0
  300. package/dist/mcps/framework-compliance-audit.server.js +500 -0
  301. package/dist/mcps/framework-help.server.js +400 -0
  302. package/dist/mcps/governance.server.js +464 -0
  303. package/dist/mcps/in-process-skill-registry.js +48 -0
  304. package/dist/mcps/knowledge-skills/api-design.server.js +123 -0
  305. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +113 -0
  306. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +474 -0
  307. package/dist/mcps/knowledge-skills/code-analyzer.server.js +605 -0
  308. package/dist/mcps/knowledge-skills/code-review.server.js +847 -0
  309. package/dist/mcps/knowledge-skills/content-creator.server.js +256 -0
  310. package/dist/mcps/knowledge-skills/database-design.server.js +822 -0
  311. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1180 -0
  312. package/dist/mcps/knowledge-skills/git-workflow.server.js +115 -0
  313. package/dist/mcps/knowledge-skills/growth-strategist.server.js +361 -0
  314. package/dist/mcps/knowledge-skills/log-monitor.server.js +451 -0
  315. package/dist/mcps/knowledge-skills/mobile-development.server.js +525 -0
  316. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1063 -0
  317. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1587 -0
  318. package/dist/mcps/knowledge-skills/project-analysis.server.js +811 -0
  319. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +796 -0
  320. package/dist/mcps/knowledge-skills/security-audit.server.js +846 -0
  321. package/dist/mcps/knowledge-skills/seo-consultant.server.js +937 -0
  322. package/dist/mcps/knowledge-skills/session-management.server.js +470 -0
  323. package/dist/mcps/knowledge-skills/skill-invocation.server.js +729 -0
  324. package/dist/mcps/knowledge-skills/strategist.server.js +217 -0
  325. package/dist/mcps/knowledge-skills/tech-writer.server.js +1191 -0
  326. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +866 -0
  327. package/dist/mcps/knowledge-skills/testing-strategy.server.js +827 -0
  328. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1538 -0
  329. package/dist/mcps/lint.server.js +381 -0
  330. package/dist/mcps/mcp-client.js +574 -0
  331. package/dist/mcps/model-health-check.server.js +228 -0
  332. package/dist/mcps/orchestrator/config/agent-capabilities.js +87 -0
  333. package/dist/mcps/orchestrator/execution/execution-planner.js +279 -0
  334. package/dist/mcps/orchestrator/handlers/complexity-handler.js +94 -0
  335. package/dist/mcps/orchestrator/handlers/status-handler.js +232 -0
  336. package/dist/mcps/orchestrator/handlers/task-handler.js +197 -0
  337. package/dist/mcps/orchestrator/server.js +305 -0
  338. package/dist/mcps/orchestrator/types.js +6 -0
  339. package/dist/mcps/orchestrator.server.js +19 -0
  340. package/dist/mcps/performance-analysis.server.js +519 -0
  341. package/dist/mcps/processor-pipeline.server.js +561 -0
  342. package/dist/mcps/protocol/protocol-constants.js +46 -0
  343. package/dist/mcps/registry.json +110 -0
  344. package/dist/mcps/researcher.server.js +504 -0
  345. package/dist/mcps/security-scan.server.js +531 -0
  346. package/dist/mcps/simulation/index.js +12 -0
  347. package/dist/mcps/simulation/server-simulations.js +219 -0
  348. package/dist/mcps/simulation/simulation-engine.js +96 -0
  349. package/dist/mcps/state-manager.server.js +637 -0
  350. package/dist/mcps/tools/index.js +14 -0
  351. package/dist/mcps/tools/tool-cache.js +112 -0
  352. package/dist/mcps/tools/tool-discovery.js +65 -0
  353. package/dist/mcps/tools/tool-executor.js +75 -0
  354. package/dist/mcps/tools/tool-registry.js +67 -0
  355. package/dist/mcps/types/index.js +15 -0
  356. package/dist/mcps/types/json-rpc.types.js +7 -0
  357. package/dist/mcps/types/mcp.types.js +7 -0
  358. package/dist/metrics/agent-metrics.js +574 -0
  359. package/dist/metrics/index.js +6 -0
  360. package/dist/monitoring/advanced-profiler.js +232 -0
  361. package/dist/monitoring/memory-monitor.js +315 -0
  362. package/dist/monitoring/nudge-watchdog.js +356 -0
  363. package/dist/monitoring/test-auto-generation-monitor.js +157 -0
  364. package/dist/orchestrator/agent-spawn-governor.js +559 -0
  365. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +399 -0
  366. package/dist/orchestrator/intelligent-commit-batcher.js +353 -0
  367. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +456 -0
  368. package/dist/orchestrator/orchestrator.js +657 -0
  369. package/dist/orchestrator/self-direction-activation.js +245 -0
  370. package/dist/orchestrator/universal-librarian-consultation.js +216 -0
  371. package/dist/orchestrator/universal-registry-bridge.js +247 -0
  372. package/dist/performance/performance-budget-enforcer.js +434 -0
  373. package/dist/performance/performance-regression-tester.js +342 -0
  374. package/dist/plugin/xray-codex-injection.js +857 -0
  375. package/dist/postprocessor/PostProcessor.js +1048 -0
  376. package/dist/postprocessor/analysis/FailureAnalysisEngine.js +245 -0
  377. package/dist/postprocessor/autofix/AutoFixEngine.js +254 -0
  378. package/dist/postprocessor/autofix/FixValidator.js +56 -0
  379. package/dist/postprocessor/config.js +65 -0
  380. package/dist/postprocessor/escalation/EscalationEngine.js +492 -0
  381. package/dist/postprocessor/monitoring/MonitoringEngine.js +125 -0
  382. package/dist/postprocessor/redeploy/RedeployCoordinator.js +342 -0
  383. package/dist/postprocessor/services/RegressionAnalysisService.js +131 -0
  384. package/dist/postprocessor/success/SuccessHandler.js +134 -0
  385. package/dist/postprocessor/triggers/APITrigger.js +115 -0
  386. package/dist/postprocessor/triggers/GitHookTrigger.js +551 -0
  387. package/dist/postprocessor/triggers/WebhookTrigger.js +211 -0
  388. package/dist/postprocessor/types.js +4 -0
  389. package/dist/processors/doc-write-guard.js +46 -0
  390. package/dist/processors/implementations/agents-md-validation-processor.js +286 -0
  391. package/dist/processors/implementations/async-pattern-processor.js +158 -0
  392. package/dist/processors/implementations/codex-compliance-processor.js +57 -0
  393. package/dist/processors/implementations/commit-batcher-processor.js +71 -0
  394. package/dist/processors/implementations/console-log-guard-processor.js +163 -0
  395. package/dist/processors/implementations/coverage-analysis-processor.js +138 -0
  396. package/dist/processors/implementations/error-boundary-processor.js +44 -0
  397. package/dist/processors/implementations/inference-improvement-processor.js +270 -0
  398. package/dist/processors/implementations/log-protection-processor.js +118 -0
  399. package/dist/processors/implementations/nudge-processor.js +130 -0
  400. package/dist/processors/implementations/performance-budget-processor.js +217 -0
  401. package/dist/processors/implementations/postprocessor-chain-validator.js +149 -0
  402. package/dist/processors/implementations/pre-validate-processor.js +18 -0
  403. package/dist/processors/implementations/publish-preflight-processor.js +249 -0
  404. package/dist/processors/implementations/refactoring-logging-processor-wrapper.js +33 -0
  405. package/dist/processors/implementations/refactoring-logging-processor.js +96 -0
  406. package/dist/processors/implementations/regression-testing-processor.js +59 -0
  407. package/dist/processors/implementations/session-capture-processor.js +37 -0
  408. package/dist/processors/implementations/session-summary-processor.js +130 -0
  409. package/dist/processors/implementations/spawn-governance-processor.js +219 -0
  410. package/dist/processors/implementations/state-validation-processor.js +15 -0
  411. package/dist/processors/implementations/storytelling-trigger-processor.js +589 -0
  412. package/dist/processors/implementations/test-auto-creation-processor.js +484 -0
  413. package/dist/processors/implementations/test-execution-processor.js +132 -0
  414. package/dist/processors/implementations/typescript-compilation-processor.js +87 -0
  415. package/dist/processors/implementations/version-compliance-processor.js +350 -0
  416. package/dist/processors/processor-interfaces.js +126 -0
  417. package/dist/processors/processor-manager.js +826 -0
  418. package/dist/processors/processor-types.js +12 -0
  419. package/dist/public/about.html +228 -0
  420. package/dist/public/enterprise.html +27 -0
  421. package/dist/public/features.html +102 -0
  422. package/dist/public/index.html +145 -0
  423. package/dist/reporting/framework-reporting-system.js +187 -0
  424. package/dist/reporting/log-parser.js +281 -0
  425. package/dist/reporting/metrics.js +202 -0
  426. package/dist/reporting/report-formatter.js +146 -0
  427. package/dist/reporting/types.js +1 -0
  428. package/dist/scripts/activate-kernel-pipeline.js +101 -0
  429. package/dist/scripts/integration.js +234 -0
  430. package/dist/scripts/pre-command +26 -0
  431. package/dist/scripts/pre-command.mjs +358 -0
  432. package/dist/security/comprehensive-security-audit.js +1005 -0
  433. package/dist/security/index.js +13 -0
  434. package/dist/security/prompt-security-validator.js +148 -0
  435. package/dist/security/security-agent-coordinator.js +204 -0
  436. package/dist/security/security-auditor.js +584 -0
  437. package/dist/security/security-hardener.js +170 -0
  438. package/dist/security/security-hardening-system.js +727 -0
  439. package/dist/security/security-headers.js +118 -0
  440. package/dist/security/security-orchestration-layer.js +496 -0
  441. package/dist/security/security-scanner.js +429 -0
  442. package/dist/services/inference-tuner.js +301 -0
  443. package/dist/session/index.js +3 -0
  444. package/dist/session/session-cleanup-manager.js +366 -0
  445. package/dist/session/session-monitor.js +503 -0
  446. package/dist/session/session-state-manager.js +522 -0
  447. package/dist/skills/api-design/SKILL.md +37 -0
  448. package/dist/skills/architect-tools/SKILL.md +37 -0
  449. package/dist/skills/architecture-patterns/SKILL.md +37 -0
  450. package/dist/skills/auto-format/SKILL.md +37 -0
  451. package/dist/skills/backend-engineer/SKILL.md +49 -0
  452. package/dist/skills/boot-orchestrator/SKILL.md +37 -0
  453. package/dist/skills/bug-triage/SKILL.md +43 -0
  454. package/dist/skills/code-analyzer/SKILL.md +45 -0
  455. package/dist/skills/code-review/SKILL.md +52 -0
  456. package/dist/skills/content-creator/SKILL.md +38 -0
  457. package/dist/skills/database-engineer/SKILL.md +46 -0
  458. package/dist/skills/devops-engineer/SKILL.md +49 -0
  459. package/dist/skills/enforcer/SKILL.md +37 -0
  460. package/dist/skills/framework-compliance-audit/SKILL.md +37 -0
  461. package/dist/skills/frontend-engineer/SKILL.md +49 -0
  462. package/dist/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  463. package/dist/skills/git-workflow/SKILL.md +37 -0
  464. package/dist/skills/growth-strategist/SKILL.md +48 -0
  465. package/dist/skills/hermes-agent/SKILL.md +212 -0
  466. package/dist/skills/inference-improve/SKILL.md +97 -0
  467. package/dist/skills/lint/SKILL.md +37 -0
  468. package/dist/skills/log-monitor/SKILL.md +44 -0
  469. package/dist/skills/mobile-developer/SKILL.md +42 -0
  470. package/dist/skills/model-health-check/SKILL.md +37 -0
  471. package/dist/skills/multimodal-looker/SKILL.md +45 -0
  472. package/dist/skills/orchestrator/SKILL.md +37 -0
  473. package/dist/skills/performance-analysis/SKILL.md +37 -0
  474. package/dist/skills/performance-engineer/SKILL.md +41 -0
  475. package/dist/skills/performance-optimization/SKILL.md +37 -0
  476. package/dist/skills/processor-pipeline/SKILL.md +37 -0
  477. package/dist/skills/project-analysis/SKILL.md +42 -0
  478. package/dist/skills/refactoring-strategies/SKILL.md +37 -0
  479. package/dist/skills/registry.json +66 -0
  480. package/dist/skills/researcher/SKILL.md +37 -0
  481. package/dist/skills/security-audit/SKILL.md +48 -0
  482. package/dist/skills/security-scan/SKILL.md +37 -0
  483. package/dist/skills/seo-consultant/SKILL.md +43 -0
  484. package/dist/skills/session-management/SKILL.md +36 -0
  485. package/dist/skills/state-manager/SKILL.md +37 -0
  486. package/dist/skills/storyteller/SKILL.md +130 -0
  487. package/dist/skills/strategist/SKILL.md +32 -0
  488. package/dist/skills/tech-writer/SKILL.md +37 -0
  489. package/dist/skills/testing-best-practices/SKILL.md +37 -0
  490. package/dist/skills/testing-strategy/SKILL.md +43 -0
  491. package/dist/skills/ui-ux-design/SKILL.md +603 -0
  492. package/dist/state/context-providers.js +1 -0
  493. package/dist/state/index.js +7 -0
  494. package/dist/state/state-manager.js +208 -0
  495. package/dist/state/state-types.js +1 -0
  496. package/dist/testing/memory-regression-suite.js +258 -0
  497. package/dist/utils/batch-operations.js +292 -0
  498. package/dist/utils/codex-parser.js +445 -0
  499. package/dist/utils/command-runner.js +96 -0
  500. package/dist/utils/import-resolver.js +189 -0
  501. package/dist/utils/language-detector.js +383 -0
  502. package/dist/utils/path-resolver.js +112 -0
  503. package/dist/utils/shutdown-handler.js +75 -0
  504. package/dist/utils/test-template-generator.js +178 -0
  505. package/dist/utils/token-manager.js +163 -0
  506. package/dist/validation/estimation-validator.js +241 -0
  507. package/dist/validation/report-content-validator.js +218 -0
  508. package/opencode.json +153 -0
  509. package/package.json +170 -0
  510. package/scripts/helpers/resolve-config-path.cjs +57 -0
  511. package/scripts/helpers/resolve-config-path.mjs +73 -0
  512. package/scripts/hooks/pre-command +26 -0
  513. package/scripts/hooks/pre-command.mjs +358 -0
  514. package/scripts/hooks/run-hook.js +570 -0
  515. package/scripts/mjs/test-consumer-readiness.mjs +273 -0
  516. package/scripts/mjs/test-mcp-functionality.mjs +507 -0
  517. package/scripts/mjs/validate-mcp-connectivity.cjs +75 -0
  518. package/scripts/mjs/validate-postinstall-config.mjs +308 -0
  519. package/scripts/node/auto-reflection-generator.mjs +496 -0
  520. package/scripts/node/basic-security-audit.cjs +338 -0
  521. package/scripts/node/ci-cd-auto-fix.cjs +263 -0
  522. package/scripts/node/ci-report-generator.mjs +227 -0
  523. package/scripts/node/enforce-agents-md.mjs +420 -0
  524. package/scripts/node/enforce-version-compliance.sh +22 -0
  525. package/scripts/node/enforce-version-compliance.ts +126 -0
  526. package/scripts/node/github-actions-monitor.cjs +23 -0
  527. package/scripts/node/govern-reflection.mjs +160 -0
  528. package/scripts/node/postinstall.cjs +78 -0
  529. package/scripts/node/pre-publish-guard.js +267 -0
  530. package/scripts/node/prepare-consumer.cjs +143 -0
  531. package/scripts/node/reflection-processor.cjs +213 -0
  532. package/scripts/node/reflection-validate.sh +194 -0
  533. package/scripts/node/release-tweet.mjs +39 -0
  534. package/scripts/node/release.js +159 -0
  535. package/scripts/node/release.mjs +213 -0
  536. package/scripts/node/setup-dev.cjs +83 -0
  537. package/scripts/node/setup.cjs +214 -0
  538. package/scripts/node/sync-versions.mjs +140 -0
  539. package/scripts/node/universal-version-manager.js +1025 -0
  540. package/scripts/node/validate-external-processes.js +265 -0
  541. package/scripts/node/validate-mcp-connectivity.js +258 -0
  542. package/scripts/node/version-manager.mjs +524 -0
  543. package/scripts/validate-stringray-comprehensive.js +636 -0
  544. package/src/integrations/grok/plugin/0xray/.mcp.json +15 -0
  545. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +30 -0
  546. package/src/mcps/agent-resolver.ts +168 -0
  547. package/src/mcps/architect-tools.server.ts +343 -0
  548. package/src/mcps/auto-format.server.ts +529 -0
  549. package/src/mcps/boot-orchestrator.server.ts +1082 -0
  550. package/src/mcps/config/__tests__/config-loader.test.ts +338 -0
  551. package/src/mcps/config/__tests__/config-validator.test.ts +646 -0
  552. package/src/mcps/config/__tests__/server-config-registry.test.ts +257 -0
  553. package/src/mcps/config/config-loader.ts +127 -0
  554. package/src/mcps/config/config-validator.ts +127 -0
  555. package/src/mcps/config/index.ts +32 -0
  556. package/src/mcps/config/plugin-server-registry.ts +335 -0
  557. package/src/mcps/config/server-config-registry.ts +395 -0
  558. package/src/mcps/connection/connection-manager.ts +91 -0
  559. package/src/mcps/connection/connection-pool.ts +216 -0
  560. package/src/mcps/connection/mcp-connection.ts +327 -0
  561. package/src/mcps/connection/process-spawner.ts +47 -0
  562. package/src/mcps/enforcer-tools.server.ts +1106 -0
  563. package/src/mcps/estimation.server.ts +229 -0
  564. package/src/mcps/framework-compliance-audit.server.ts +635 -0
  565. package/src/mcps/framework-help.server.ts +467 -0
  566. package/src/mcps/governance.server.ts +551 -0
  567. package/src/mcps/in-process-skill-registry.ts +79 -0
  568. package/src/mcps/knowledge-skills/api-design.server.test.ts +41 -0
  569. package/src/mcps/knowledge-skills/api-design.server.ts +160 -0
  570. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +152 -0
  571. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +624 -0
  572. package/src/mcps/knowledge-skills/code-analyzer.server.test.ts +129 -0
  573. package/src/mcps/knowledge-skills/code-analyzer.server.ts +591 -0
  574. package/src/mcps/knowledge-skills/code-review.server.ts +1132 -0
  575. package/src/mcps/knowledge-skills/content-creator.server.ts +300 -0
  576. package/src/mcps/knowledge-skills/database-design.server.ts +1200 -0
  577. package/src/mcps/knowledge-skills/devops-deployment.server.ts +1622 -0
  578. package/src/mcps/knowledge-skills/git-workflow.server.ts +152 -0
  579. package/src/mcps/knowledge-skills/growth-strategist.server.ts +413 -0
  580. package/src/mcps/knowledge-skills/log-monitor.server.ts +619 -0
  581. package/src/mcps/knowledge-skills/mobile-development.server.ts +672 -0
  582. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +1500 -0
  583. package/src/mcps/knowledge-skills/performance-optimization.server.ts +2065 -0
  584. package/src/mcps/knowledge-skills/project-analysis.server.ts +1111 -0
  585. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +1092 -0
  586. package/src/mcps/knowledge-skills/security-audit.server.test.ts +112 -0
  587. package/src/mcps/knowledge-skills/security-audit.server.ts +1193 -0
  588. package/src/mcps/knowledge-skills/seo-consultant.server.ts +1160 -0
  589. package/src/mcps/knowledge-skills/session-management.server.ts +576 -0
  590. package/src/mcps/knowledge-skills/skill-invocation.server.ts +941 -0
  591. package/src/mcps/knowledge-skills/strategist.server.ts +267 -0
  592. package/src/mcps/knowledge-skills/tech-writer.server.ts +1638 -0
  593. package/src/mcps/knowledge-skills/testing-best-practices.server.test.ts +136 -0
  594. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +1232 -0
  595. package/src/mcps/knowledge-skills/testing-strategy.server.test.ts +100 -0
  596. package/src/mcps/knowledge-skills/testing-strategy.server.ts +1172 -0
  597. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +2076 -0
  598. package/src/mcps/lint.server.ts +483 -0
  599. package/src/mcps/mcp-client.ts +706 -0
  600. package/src/mcps/model-health-check.server.ts +292 -0
  601. package/src/mcps/orchestrator/config/agent-capabilities.ts +108 -0
  602. package/src/mcps/orchestrator/execution/execution-planner.ts +353 -0
  603. package/src/mcps/orchestrator/handlers/complexity-handler.ts +125 -0
  604. package/src/mcps/orchestrator/handlers/status-handler.ts +295 -0
  605. package/src/mcps/orchestrator/handlers/task-handler.ts +268 -0
  606. package/src/mcps/orchestrator/server.ts +388 -0
  607. package/src/mcps/orchestrator/types.ts +81 -0
  608. package/src/mcps/orchestrator.server.ts +34 -0
  609. package/src/mcps/performance-analysis.server.ts +715 -0
  610. package/src/mcps/processor-pipeline.server.ts +778 -0
  611. package/src/mcps/protocol/protocol-constants.ts +51 -0
  612. package/src/mcps/registry.json +110 -0
  613. package/src/mcps/researcher.server.ts +595 -0
  614. package/src/mcps/security-scan.server.ts +651 -0
  615. package/src/mcps/simulation/__tests__/simulation-engine.test.ts +275 -0
  616. package/src/mcps/simulation/index.ts +23 -0
  617. package/src/mcps/simulation/server-simulations.ts +241 -0
  618. package/src/mcps/simulation/simulation-engine.ts +126 -0
  619. package/src/mcps/state-manager.server.ts +777 -0
  620. package/src/mcps/tools/__tests__/tool-cache.test.ts +205 -0
  621. package/src/mcps/tools/__tests__/tool-discovery.test.ts +189 -0
  622. package/src/mcps/tools/__tests__/tool-executor.test.ts +215 -0
  623. package/src/mcps/tools/__tests__/tool-registry.test.ts +230 -0
  624. package/src/mcps/tools/index.ts +15 -0
  625. package/src/mcps/tools/tool-cache.ts +145 -0
  626. package/src/mcps/tools/tool-discovery.ts +83 -0
  627. package/src/mcps/tools/tool-executor.ts +106 -0
  628. package/src/mcps/tools/tool-registry.ts +78 -0
  629. package/src/mcps/types/__tests__/types.test.ts +341 -0
  630. package/src/mcps/types/index.ts +17 -0
  631. package/src/mcps/types/json-rpc.types.ts +38 -0
  632. package/src/mcps/types/mcp.types.ts +115 -0
  633. package/src/opencode/agents/api-design.yml +31 -0
  634. package/src/opencode/agents/architect.yml +15 -0
  635. package/src/opencode/agents/architecture-patterns.yml +14 -0
  636. package/src/opencode/agents/auto-format.yml +14 -0
  637. package/src/opencode/agents/backend-engineer.yml +12 -0
  638. package/src/opencode/agents/boot-orchestrator.yml +14 -0
  639. package/src/opencode/agents/bug-triage-specialist.yml +15 -0
  640. package/src/opencode/agents/code-analyzer.yml +12 -0
  641. package/src/opencode/agents/code-reviewer.yml +14 -0
  642. package/src/opencode/agents/content-creator.yml +12 -0
  643. package/src/opencode/agents/database-engineer.yml +12 -0
  644. package/src/opencode/agents/devops-engineer.yml +12 -0
  645. package/src/opencode/agents/framework-compliance-audit.yml +14 -0
  646. package/src/opencode/agents/frontend-engineer.yml +12 -0
  647. package/src/opencode/agents/frontend-ui-ux-engineer.yml +12 -0
  648. package/src/opencode/agents/git-workflow.yml +15 -0
  649. package/src/opencode/agents/growth-strategist.yml +12 -0
  650. package/src/opencode/agents/hermes-agent.yml +12 -0
  651. package/src/opencode/agents/inference-improve.yml +12 -0
  652. package/src/opencode/agents/lint.yml +14 -0
  653. package/src/opencode/agents/log-monitor.yml +12 -0
  654. package/src/opencode/agents/mobile-developer.yml +12 -0
  655. package/src/opencode/agents/model-health-check.yml +12 -0
  656. package/src/opencode/agents/multimodal-looker.yml +12 -0
  657. package/src/opencode/agents/performance-analysis.yml +12 -0
  658. package/src/opencode/agents/performance-engineer.yml +12 -0
  659. package/src/opencode/agents/performance-optimization.yml +12 -0
  660. package/src/opencode/agents/processor-pipeline.yml +14 -0
  661. package/src/opencode/agents/project-analysis.yml +12 -0
  662. package/src/opencode/agents/refactorer.yml +12 -0
  663. package/src/opencode/agents/researcher.yml +12 -0
  664. package/src/opencode/agents/security-auditor.yml +12 -0
  665. package/src/opencode/agents/security-scan.yml +12 -0
  666. package/src/opencode/agents/seo-consultant.yml +12 -0
  667. package/src/opencode/agents/session-management.yml +12 -0
  668. package/src/opencode/agents/state-manager.yml +12 -0
  669. package/src/opencode/agents/storyteller.yml +12 -0
  670. package/src/opencode/agents/strategist.yml +12 -0
  671. package/src/opencode/agents/tech-writer.yml +12 -0
  672. package/src/opencode/agents/testing-best-practices.yml +12 -0
  673. package/src/opencode/agents/testing-lead.yml +12 -0
  674. package/src/opencode/agents/ui-ux-design.yml +12 -0
  675. package/src/opencode/codex.codex +8 -0
  676. package/src/opencode/commands/auto-format.md +99 -0
  677. package/src/opencode/commands/auto-summary-capture.md +90 -0
  678. package/src/opencode/commands/dependency-audit.md +184 -0
  679. package/src/opencode/commands/enforcer-daily-scan.md +137 -0
  680. package/src/opencode/commands/framework-compliance-audit.md +205 -0
  681. package/src/opencode/commands/interactive-validator.md +75 -0
  682. package/src/opencode/commands/job-summary-logger.md +68 -0
  683. package/src/opencode/commands/lint.md +11 -0
  684. package/src/opencode/commands/mode-switch.md +95 -0
  685. package/src/opencode/commands/model-health-check.md +186 -0
  686. package/src/opencode/commands/performance-analysis.md +144 -0
  687. package/src/opencode/commands/pre-commit-introspection.md +185 -0
  688. package/src/opencode/commands/pre-commit-introspection.sh +133 -0
  689. package/src/opencode/commands/security-scan.md +157 -0
  690. package/src/opencode/commands/sisyphus-validation.md +128 -0
  691. package/src/opencode/commands/summary-logger.md +83 -0
  692. package/src/opencode/enforcer-config.json +285 -0
  693. package/src/opencode/openclaw/config.json +25 -0
  694. package/src/opencode/workflows/post-deployment-audit.yml +123 -0
  695. package/src/skills/api-design/SKILL.md +37 -0
  696. package/src/skills/architect-tools/SKILL.md +37 -0
  697. package/src/skills/architecture-patterns/SKILL.md +37 -0
  698. package/src/skills/auto-format/SKILL.md +37 -0
  699. package/src/skills/backend-engineer/SKILL.md +49 -0
  700. package/src/skills/boot-orchestrator/SKILL.md +37 -0
  701. package/src/skills/bug-triage/SKILL.md +43 -0
  702. package/src/skills/code-analyzer/SKILL.md +45 -0
  703. package/src/skills/code-review/SKILL.md +52 -0
  704. package/src/skills/content-creator/SKILL.md +38 -0
  705. package/src/skills/database-engineer/SKILL.md +46 -0
  706. package/src/skills/devops-engineer/SKILL.md +49 -0
  707. package/src/skills/enforcer/SKILL.md +37 -0
  708. package/src/skills/framework-compliance-audit/SKILL.md +37 -0
  709. package/src/skills/frontend-engineer/SKILL.md +49 -0
  710. package/src/skills/frontend-ui-ux-engineer/SKILL.md +41 -0
  711. package/src/skills/git-workflow/SKILL.md +37 -0
  712. package/src/skills/growth-strategist/SKILL.md +48 -0
  713. package/src/skills/hermes-agent/SKILL.md +212 -0
  714. package/src/skills/inference-improve/SKILL.md +97 -0
  715. package/src/skills/lint/SKILL.md +37 -0
  716. package/src/skills/log-monitor/SKILL.md +44 -0
  717. package/src/skills/mobile-developer/SKILL.md +42 -0
  718. package/src/skills/model-health-check/SKILL.md +37 -0
  719. package/src/skills/multimodal-looker/SKILL.md +45 -0
  720. package/src/skills/orchestrator/SKILL.md +37 -0
  721. package/src/skills/performance-analysis/SKILL.md +37 -0
  722. package/src/skills/performance-engineer/SKILL.md +41 -0
  723. package/src/skills/performance-optimization/SKILL.md +37 -0
  724. package/src/skills/processor-pipeline/SKILL.md +37 -0
  725. package/src/skills/project-analysis/SKILL.md +42 -0
  726. package/src/skills/refactoring-strategies/SKILL.md +37 -0
  727. package/src/skills/registry.json +66 -0
  728. package/src/skills/researcher/SKILL.md +37 -0
  729. package/src/skills/security-audit/SKILL.md +48 -0
  730. package/src/skills/security-scan/SKILL.md +37 -0
  731. package/src/skills/seo-consultant/SKILL.md +43 -0
  732. package/src/skills/session-management/SKILL.md +36 -0
  733. package/src/skills/state-manager/SKILL.md +37 -0
  734. package/src/skills/storyteller/SKILL.md +130 -0
  735. package/src/skills/strategist/SKILL.md +32 -0
  736. package/src/skills/tech-writer/SKILL.md +37 -0
  737. package/src/skills/testing-best-practices/SKILL.md +37 -0
  738. package/src/skills/testing-strategy/SKILL.md +43 -0
  739. package/src/skills/ui-ux-design/SKILL.md +603 -0
@@ -0,0 +1,1132 @@
1
+ /**
2
+ * xray Code Review MCP Server
3
+ *
4
+ * Knowledge skill for automated code review, quality assessment,
5
+ * and best practices validation - provides comprehensive code quality analysis
6
+ */
7
+
8
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import {
11
+ CallToolRequestSchema,
12
+ ListToolsRequestSchema,
13
+ type CallToolResult,
14
+ } from "@modelcontextprotocol/sdk/types.js";
15
+ import * as fs from "fs";
16
+ import * as path from "path";
17
+ import { createGracefulShutdown } from "../../utils/shutdown-handler.js";
18
+
19
+ interface CodeReviewResult {
20
+ file: string;
21
+ issues: CodeIssue[];
22
+ metrics: CodeMetrics;
23
+ suggestions: string[];
24
+ overallScore: number; // 0-100
25
+ }
26
+
27
+ interface CodeIssue {
28
+ type: "error" | "warning" | "info";
29
+ category: "security" | "performance" | "maintainability" | "style" | "logic";
30
+ line: number;
31
+ column?: number;
32
+ message: string;
33
+ suggestion: string;
34
+ severity: "critical" | "high" | "medium" | "low";
35
+ file?: string; // Optional file reference for multi-file analysis
36
+ }
37
+
38
+ interface CodeMetrics {
39
+ cyclomaticComplexity: number;
40
+ linesOfCode: number;
41
+ commentRatio: number;
42
+ duplicateLines: number;
43
+ testCoverage?: number;
44
+ }
45
+
46
+ interface AnalyzeCodeQualityArgs {
47
+ filePath: string;
48
+ includeMetrics?: boolean;
49
+ focusAreas?: string[];
50
+ }
51
+
52
+ interface ReviewPullRequestArgs {
53
+ files: string[];
54
+ baseBranch?: string;
55
+ focusAreas?: string[];
56
+ }
57
+
58
+ interface CheckBestPracticesArgs {
59
+ filePath: string;
60
+ language?: string;
61
+ standards?: string[];
62
+ }
63
+
64
+ interface AnalyzeProposalArgs {
65
+ proposalTitle?: string;
66
+ proposalDescription?: string;
67
+ evidence?: string[];
68
+ proposalType?: string;
69
+ }
70
+
71
+ interface StandardsViolation {
72
+ rule: string;
73
+ description: string;
74
+ severity: "high" | "medium" | "low";
75
+ }
76
+
77
+ class StringRayCodeReviewServer {
78
+ private server: Server;
79
+
80
+ constructor() {
81
+ this.server = new Server(
82
+ {
83
+ name: "code-review", version: "1.22.67",
84
+ },
85
+ {
86
+ capabilities: {
87
+ tools: {},
88
+ },
89
+ },
90
+ );
91
+
92
+ this.setupToolHandlers();
93
+ // Server initialization - removed unnecessary startup logging
94
+ }
95
+
96
+ private setupToolHandlers() {
97
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
98
+ return {
99
+ tools: [
100
+ {
101
+ name: "analyze_code_quality",
102
+ description:
103
+ "Analyze code quality metrics, identify issues, and provide improvement suggestions",
104
+ inputSchema: {
105
+ type: "object",
106
+ properties: {
107
+ filePath: {
108
+ type: "string",
109
+ description: "Path to the file to analyze",
110
+ },
111
+ includeMetrics: {
112
+ type: "boolean",
113
+ description: "Include detailed code metrics in the analysis",
114
+ default: true,
115
+ },
116
+ focusAreas: {
117
+ type: "array",
118
+ items: {
119
+ type: "string",
120
+ enum: [
121
+ "security",
122
+ "performance",
123
+ "maintainability",
124
+ "style",
125
+ "logic",
126
+ ],
127
+ },
128
+ description: "Specific areas to focus the review on",
129
+ },
130
+ },
131
+ required: ["filePath"],
132
+ },
133
+ },
134
+ {
135
+ name: "review_pull_request",
136
+ description:
137
+ "Review a pull request by analyzing changed files and providing comprehensive feedback",
138
+ inputSchema: {
139
+ type: "object",
140
+ properties: {
141
+ files: {
142
+ type: "array",
143
+ items: { type: "string" },
144
+ description: "List of file paths to review",
145
+ },
146
+ baseBranch: {
147
+ type: "string",
148
+ description: "Base branch for comparison",
149
+ default: "main",
150
+ },
151
+ focusAreas: {
152
+ type: "array",
153
+ items: {
154
+ type: "string",
155
+ enum: [
156
+ "security",
157
+ "performance",
158
+ "maintainability",
159
+ "style",
160
+ "logic",
161
+ ],
162
+ },
163
+ description: "Specific areas to focus the review on",
164
+ },
165
+ },
166
+ required: ["files"],
167
+ },
168
+ },
169
+ {
170
+ name: "check_best_practices",
171
+ description:
172
+ "Check adherence to coding best practices and standards",
173
+ inputSchema: {
174
+ type: "object",
175
+ properties: {
176
+ filePath: {
177
+ type: "string",
178
+ description: "Path to the file to check",
179
+ },
180
+ language: {
181
+ type: "string",
182
+ description:
183
+ "Programming language (typescript, javascript, python, etc.)",
184
+ },
185
+ standards: {
186
+ type: "array",
187
+ items: { type: "string" },
188
+ description:
189
+ "Specific standards to check (airbnb, google, microsoft, etc.)",
190
+ },
191
+ },
192
+ required: ["filePath"],
193
+ },
194
+ },
195
+ {
196
+ name: "analyze_proposal",
197
+ description:
198
+ "Analyze an inference proposal (pattern/bug/refactor) from a code-review perspective and return a structured governance decision",
199
+ inputSchema: {
200
+ type: "object",
201
+ properties: {
202
+ proposalTitle: { type: "string" },
203
+ proposalDescription: { type: "string" },
204
+ evidence: { type: "array", items: { type: "string" } },
205
+ proposalType: { type: "string" },
206
+ },
207
+ required: ["proposalTitle", "proposalDescription"],
208
+ },
209
+ },
210
+ ],
211
+ };
212
+ });
213
+
214
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
215
+ const { name, arguments: args } = request.params;
216
+
217
+ switch (name) {
218
+ case "analyze_code_quality":
219
+ return await this.analyzeCodeQuality(args as unknown as AnalyzeCodeQualityArgs) as CallToolResult;
220
+ case "review_pull_request":
221
+ return await this.reviewPullRequest(args as unknown as ReviewPullRequestArgs) as CallToolResult;
222
+ case "check_best_practices":
223
+ return await this.checkBestPractices(args as unknown as CheckBestPracticesArgs) as CallToolResult;
224
+ case "analyze_proposal":
225
+ return await this.analyzeProposal(args as AnalyzeProposalArgs) as CallToolResult;
226
+ default:
227
+ throw new Error(`Unknown tool: ${name}`);
228
+ }
229
+ });
230
+ }
231
+
232
+ private async analyzeCodeQuality(args: AnalyzeCodeQualityArgs) {
233
+ const { filePath, includeMetrics = true, focusAreas } = args;
234
+
235
+ try {
236
+ if (!fs.existsSync(filePath)) {
237
+ throw new Error(`File not found: ${filePath}`);
238
+ }
239
+
240
+ const content = fs.readFileSync(filePath, "utf-8");
241
+ const extension = path.extname(filePath).toLowerCase();
242
+ const language = this.detectLanguage(extension);
243
+
244
+ const issues = this.analyzeCode(content, language, focusAreas);
245
+ const metrics = includeMetrics
246
+ ? this.calculateMetrics(content, language)
247
+ : null;
248
+ const suggestions = this.generateSuggestions(issues, metrics, language);
249
+ const overallScore = this.calculateOverallScore(issues, metrics);
250
+
251
+ const result: CodeReviewResult = {
252
+ file: filePath,
253
+ issues,
254
+ metrics: metrics!,
255
+ suggestions,
256
+ overallScore,
257
+ };
258
+
259
+ return {
260
+ content: [
261
+ {
262
+ type: "text",
263
+ text:
264
+ `Code Review Results for ${filePath}:\n\n` +
265
+ `Overall Score: ${overallScore}/100\n\n` +
266
+ `Issues Found: ${issues.length}\n` +
267
+ (metrics
268
+ ? `Lines of Code: ${metrics.linesOfCode}\n` +
269
+ `Cyclomatic Complexity: ${metrics.cyclomaticComplexity}\n` +
270
+ `Comment Ratio: ${(metrics.commentRatio * 100).toFixed(1)}%\n\n`
271
+ : "") +
272
+ `Key Issues:\n${issues
273
+ .slice(0, 10)
274
+ .map(
275
+ (issue) =>
276
+ `• ${issue.severity.toUpperCase()}: ${issue.message} (${issue.category})`,
277
+ )
278
+ .join("\n")}\n\n` +
279
+ `Suggestions:\n${suggestions
280
+ .slice(0, 5)
281
+ .map((s) => `• ${s}`)
282
+ .join("\n")}`,
283
+ },
284
+ ],
285
+ };
286
+ } catch (error) {
287
+ return {
288
+ content: [
289
+ {
290
+ type: "text",
291
+ text: `Error analyzing code quality: ${error instanceof Error ? error.message : String(error)}`,
292
+ },
293
+ ],
294
+ };
295
+ }
296
+ }
297
+
298
+ private async reviewPullRequest(args: ReviewPullRequestArgs) {
299
+ const { files, baseBranch = "main", focusAreas } = args;
300
+
301
+ try {
302
+ const results: CodeReviewResult[] = [];
303
+
304
+ for (const filePath of files) {
305
+ if (!fs.existsSync(filePath)) {
306
+ continue; // Skip files that don't exist
307
+ }
308
+
309
+ const content = fs.readFileSync(filePath, "utf-8");
310
+ const extension = path.extname(filePath).toLowerCase();
311
+ const language = this.detectLanguage(extension);
312
+
313
+ const issues = this.analyzeCode(content, language, focusAreas);
314
+ const metrics = this.calculateMetrics(content, language);
315
+ const suggestions = this.generateSuggestions(issues, metrics, language);
316
+ const overallScore = this.calculateOverallScore(issues, metrics);
317
+
318
+ results.push({
319
+ file: filePath,
320
+ issues,
321
+ metrics,
322
+ suggestions,
323
+ overallScore,
324
+ });
325
+ }
326
+
327
+ const totalIssues = results.reduce((sum, r) => sum + r.issues.length, 0);
328
+ const avgScore =
329
+ results.length > 0
330
+ ? Math.round(
331
+ results.reduce((sum, r) => sum + r.overallScore, 0) /
332
+ results.length,
333
+ )
334
+ : 0;
335
+
336
+ const criticalIssues = results.flatMap((r) =>
337
+ r.issues.filter((i) => i.severity === "critical"),
338
+ );
339
+
340
+ return {
341
+ content: [
342
+ {
343
+ type: "text",
344
+ text:
345
+ `Pull Request Review Summary:\n\n` +
346
+ `Files Reviewed: ${results.length}\n` +
347
+ `Total Issues: ${totalIssues}\n` +
348
+ `Average Quality Score: ${avgScore}/100\n` +
349
+ `Critical Issues: ${criticalIssues.length}\n\n` +
350
+ `Quality Scores by File:\n${results
351
+ .map(
352
+ (r) =>
353
+ `${r.file}: ${r.overallScore}/100 (${r.issues.length} issues)`,
354
+ )
355
+ .join("\n")}\n\n` +
356
+ (criticalIssues.length > 0
357
+ ? `🚨 Critical Issues:\n${criticalIssues
358
+ .map(
359
+ (issue) =>
360
+ `• ${issue.file}:${issue.line} - ${issue.message}`,
361
+ )
362
+ .join("\n")}\n\n`
363
+ : "") +
364
+ `Overall Assessment: ${this.assessOverallQuality(avgScore, totalIssues, criticalIssues.length)}`,
365
+ },
366
+ ],
367
+ };
368
+ } catch (error) {
369
+ return {
370
+ content: [
371
+ {
372
+ type: "text",
373
+ text: `Error reviewing pull request: ${error instanceof Error ? error.message : String(error)}`,
374
+ },
375
+ ],
376
+ };
377
+ }
378
+ }
379
+
380
+ private async checkBestPractices(args: CheckBestPracticesArgs) {
381
+ const { filePath, language: specifiedLanguage, standards = [] } = args;
382
+
383
+ try {
384
+ if (!fs.existsSync(filePath)) {
385
+ throw new Error(`File not found: ${filePath}`);
386
+ }
387
+
388
+ const content = fs.readFileSync(filePath, "utf-8");
389
+ const extension = path.extname(filePath).toLowerCase();
390
+ const detectedLanguage = this.detectLanguage(extension);
391
+ const language = specifiedLanguage || detectedLanguage;
392
+
393
+ const violations = this.checkStandardsCompliance(
394
+ content,
395
+ language,
396
+ standards,
397
+ );
398
+ const recommendations = this.generateStandardsRecommendations(
399
+ violations,
400
+ language,
401
+ standards,
402
+ );
403
+
404
+ return {
405
+ content: [
406
+ {
407
+ type: "text",
408
+ text:
409
+ `Best Practices Check for ${filePath}:\n\n` +
410
+ `Language: ${language}\n` +
411
+ `Standards Checked: ${standards.length > 0 ? standards.join(", ") : "General best practices"}\n\n` +
412
+ `Violations Found: ${violations.length}\n\n` +
413
+ `Key Violations:\n${violations
414
+ .slice(0, 10)
415
+ .map(
416
+ (v) =>
417
+ `• ${v.severity.toUpperCase()}: ${v.rule} - ${v.description}`,
418
+ )
419
+ .join("\n")}\n\n` +
420
+ `Recommendations:\n${recommendations
421
+ .slice(0, 5)
422
+ .map((r) => `• ${r}`)
423
+ .join("\n")}\n\n` +
424
+ `Compliance Score: ${this.calculateComplianceScore(violations)}/100`,
425
+ },
426
+ ],
427
+ };
428
+ } catch (error) {
429
+ return {
430
+ content: [
431
+ {
432
+ type: "text",
433
+ text: `Error checking best practices: ${error instanceof Error ? error.message : String(error)}`,
434
+ },
435
+ ],
436
+ };
437
+ }
438
+ }
439
+
440
+ private detectLanguage(extension: string): string {
441
+ const languageMap: Record<string, string> = {
442
+ ".ts": "typescript",
443
+ ".tsx": "typescript",
444
+ ".js": "javascript",
445
+ ".jsx": "javascript",
446
+ ".py": "python",
447
+ ".java": "java",
448
+ ".cpp": "cpp",
449
+ ".c": "c",
450
+ ".cs": "csharp",
451
+ ".php": "php",
452
+ ".rb": "ruby",
453
+ ".go": "go",
454
+ ".rs": "rust",
455
+ ".swift": "swift",
456
+ ".kt": "kotlin",
457
+ ".scala": "scala",
458
+ };
459
+
460
+ return languageMap[extension] || "unknown";
461
+ }
462
+
463
+ /**
464
+ * Governance-oriented proposal analysis from a code quality perspective.
465
+ */
466
+ async analyzeProposal(args: AnalyzeProposalArgs) {
467
+ const { proposalTitle = "", proposalDescription = "", evidence = [], proposalType = "" } = args;
468
+ const text = `${proposalTitle} ${proposalDescription} ${evidence.join(" ")}`.toLowerCase();
469
+
470
+ let decision: "approve" | "reject" | "abstain" = "approve";
471
+ let confidence = 0.82;
472
+ let reasoning = "The proposal appears reasonable from a code quality and maintainability perspective.";
473
+
474
+ if (text.includes("aml") || text.includes("kyc") || text.includes("anti-money")) {
475
+ decision = "approve";
476
+ confidence = 0.88;
477
+ reasoning = "AML/KYC compliance code requires rigorous review: transaction monitoring must handle edge cases, avoid false positives from legitimate patterns, and maintain audit trails for regulatory inspection.";
478
+ } else if (text.includes("psd2") || text.includes("strong customer authentication") || text.includes("payment initiation")) {
479
+ decision = "approve";
480
+ confidence = 0.90;
481
+ reasoning = "PSD2 SCA implementation must balance security with user experience. Code should use well-audited MFA libraries, avoid rolling custom authentication, and include comprehensive test coverage for all authentication flows.";
482
+ } else if (text.includes("gdpr") || text.includes("right to erasure") || text.includes("data protection")) {
483
+ decision = "approve";
484
+ confidence = 0.92;
485
+ reasoning = "GDPR erasure pipelines require careful code review: cascading deletes must be transactional, audit logs must be preserved, and the 30-day SLA demands observability and monitoring integration.";
486
+ } else if (text.includes("extract method")) {
487
+ decision = "approve";
488
+ confidence = 0.93;
489
+ reasoning = "Extract Method is a well-established refactoring pattern that improves readability and reduces cognitive load when applied consistently.";
490
+ } else if (text.includes("test coverage")) {
491
+ decision = "approve";
492
+ confidence = 0.90;
493
+ reasoning = "Expanding automated test coverage generally improves long-term code health and reduces regression risk.";
494
+ } else if (text.includes("increase timeout") && text.includes("flaky")) {
495
+ decision = "reject";
496
+ confidence = 0.72;
497
+ reasoning = "Repeatedly increasing timeouts to mask flaky tests is an anti-pattern that hides underlying race conditions or timing issues.";
498
+ }
499
+
500
+ if (proposalType === "fix" && text.includes("timeout")) {
501
+ confidence = Math.max(0.68, confidence - 0.08);
502
+ }
503
+
504
+ return {
505
+ content: [
506
+ {
507
+ type: "text",
508
+ text: `DECISION: ${decision}\nCONFIDENCE: ${confidence.toFixed(2)}\nREASONING: ${reasoning}`,
509
+ },
510
+ ],
511
+ };
512
+ }
513
+
514
+ private analyzeCode(
515
+ content: string,
516
+ language: string,
517
+ focusAreas?: string[],
518
+ ): CodeIssue[] {
519
+ const issues: CodeIssue[] = [];
520
+ const lines = content.split("\n");
521
+
522
+ // Security analysis
523
+ if (!focusAreas || focusAreas.includes("security")) {
524
+ issues.push(...this.analyzeSecurity(content, lines, language));
525
+ }
526
+
527
+ // Performance analysis
528
+ if (!focusAreas || focusAreas.includes("performance")) {
529
+ issues.push(...this.analyzePerformance(content, lines, language));
530
+ }
531
+
532
+ // Maintainability analysis
533
+ if (!focusAreas || focusAreas.includes("maintainability")) {
534
+ issues.push(...this.analyzeMaintainability(content, lines, language));
535
+ }
536
+
537
+ // Style analysis
538
+ if (!focusAreas || focusAreas.includes("style")) {
539
+ issues.push(...this.analyzeStyle(content, lines, language));
540
+ }
541
+
542
+ // Logic analysis
543
+ if (!focusAreas || focusAreas.includes("logic")) {
544
+ issues.push(...this.analyzeLogic(content, lines, language));
545
+ }
546
+
547
+ return issues;
548
+ }
549
+
550
+ private analyzeSecurity(
551
+ content: string,
552
+ lines: string[],
553
+ language: string,
554
+ ): CodeIssue[] {
555
+ const issues: CodeIssue[] = [];
556
+
557
+ lines.forEach((line, index) => {
558
+ const lineNum = index + 1;
559
+
560
+ // SQL injection patterns
561
+ if (
562
+ line.includes("query(") &&
563
+ (line.includes("${") || line.includes("+"))
564
+ ) {
565
+ issues.push({
566
+ type: "error",
567
+ category: "security",
568
+ line: lineNum,
569
+ message: "Potential SQL injection vulnerability",
570
+ suggestion: "Use parameterized queries or prepared statements",
571
+ severity: "critical",
572
+ });
573
+ }
574
+
575
+ // XSS patterns
576
+ if (line.includes("innerHTML") || line.includes("outerHTML")) {
577
+ issues.push({
578
+ type: "error",
579
+ category: "security",
580
+ line: lineNum,
581
+ message: "Direct HTML manipulation detected",
582
+ suggestion: "Use textContent or sanitize HTML input",
583
+ severity: "high",
584
+ });
585
+ }
586
+
587
+ // Hardcoded secrets
588
+ if (/(password|secret|key|token)\s*=\s*['"][^'"]*['"]/i.test(line)) {
589
+ issues.push({
590
+ type: "error",
591
+ category: "security",
592
+ line: lineNum,
593
+ message: "Hardcoded secret detected",
594
+ suggestion: "Move secrets to environment variables or secure vault",
595
+ severity: "critical",
596
+ });
597
+ }
598
+
599
+ // eval() usage
600
+ if (line.includes("eval(")) {
601
+ issues.push({
602
+ type: "error",
603
+ category: "security",
604
+ line: lineNum,
605
+ message: "Use of eval() detected",
606
+ suggestion: "Avoid eval() for security reasons",
607
+ severity: "high",
608
+ });
609
+ }
610
+ });
611
+
612
+ return issues;
613
+ }
614
+
615
+ private analyzePerformance(
616
+ content: string,
617
+ lines: string[],
618
+ language: string,
619
+ ): CodeIssue[] {
620
+ const issues: CodeIssue[] = [];
621
+
622
+ lines.forEach((line, index) => {
623
+ const lineNum = index + 1;
624
+
625
+ // Inefficient loops
626
+ if (
627
+ line.includes("for") &&
628
+ line.includes(".length") &&
629
+ !line.includes("let ")
630
+ ) {
631
+ issues.push({
632
+ type: "warning",
633
+ category: "performance",
634
+ line: lineNum,
635
+ message: "Array length accessed in loop condition",
636
+ suggestion: "Cache array length outside the loop",
637
+ severity: "medium",
638
+ });
639
+ }
640
+
641
+ // Memory leaks (event listeners)
642
+ if (
643
+ line.includes("addEventListener") &&
644
+ !content.includes("removeEventListener")
645
+ ) {
646
+ issues.push({
647
+ type: "warning",
648
+ category: "performance",
649
+ line: lineNum,
650
+ message: "Event listener added without cleanup",
651
+ suggestion:
652
+ "Ensure event listeners are removed when no longer needed",
653
+ severity: "medium",
654
+ });
655
+ }
656
+
657
+ // Inefficient string concatenation
658
+ if (
659
+ language === "javascript" &&
660
+ line.includes("+") &&
661
+ line.includes("=")
662
+ ) {
663
+ issues.push({
664
+ type: "warning",
665
+ category: "performance",
666
+ line: lineNum,
667
+ message: "String concatenation in loop may be inefficient",
668
+ suggestion: "Consider using array.join() or template literals",
669
+ severity: "low",
670
+ });
671
+ }
672
+ });
673
+
674
+ return issues;
675
+ }
676
+
677
+ private analyzeMaintainability(
678
+ content: string,
679
+ lines: string[],
680
+ language: string,
681
+ ): CodeIssue[] {
682
+ const issues: CodeIssue[] = [];
683
+
684
+ // Function length check
685
+ const functions = content.match(
686
+ /(?:function|const|let)\s+\w+\s*[=(]\s*(?:\([^)]*\)\s*=>|function\s*\([^)]*\))/g,
687
+ );
688
+ if (functions) {
689
+ functions.forEach((func) => {
690
+ const funcStart = content.indexOf(func);
691
+ const funcBody = content.substring(
692
+ funcStart,
693
+ content.indexOf("}", funcStart) + 1,
694
+ );
695
+ const funcLines = funcBody.split("\n").length;
696
+
697
+ if (funcLines > 50) {
698
+ issues.push({
699
+ type: "warning",
700
+ category: "maintainability",
701
+ line:
702
+ lines.findIndex((l) => l.includes(func.split(" ")[1] || func)) +
703
+ 1,
704
+ message: `Function too long (${funcLines} lines)`,
705
+ suggestion: "Break down into smaller, focused functions",
706
+ severity: "medium",
707
+ });
708
+ }
709
+ });
710
+ }
711
+
712
+ // Deep nesting check
713
+ let maxNesting = 0;
714
+ let currentNesting = 0;
715
+
716
+ lines.forEach((line, index) => {
717
+ const openBraces = (line.match(/{/g) || []).length;
718
+ const closeBraces = (line.match(/}/g) || []).length;
719
+
720
+ currentNesting += openBraces - closeBraces;
721
+ maxNesting = Math.max(maxNesting, currentNesting);
722
+
723
+ if (currentNesting > 4) {
724
+ issues.push({
725
+ type: "warning",
726
+ category: "maintainability",
727
+ line: index + 1,
728
+ message: "Excessive nesting depth",
729
+ suggestion: "Extract nested logic into separate functions",
730
+ severity: "medium",
731
+ });
732
+ }
733
+ });
734
+
735
+ return issues;
736
+ }
737
+
738
+ private analyzeStyle(
739
+ content: string,
740
+ lines: string[],
741
+ language: string,
742
+ ): CodeIssue[] {
743
+ const issues: CodeIssue[] = [];
744
+
745
+ lines.forEach((line, index) => {
746
+ const lineNum = index + 1;
747
+
748
+ // Line length check
749
+ if (line.length > 120) {
750
+ issues.push({
751
+ type: "info",
752
+ category: "style",
753
+ line: lineNum,
754
+ message: "Line too long (>120 characters)",
755
+ suggestion: "Break long lines for better readability",
756
+ severity: "low",
757
+ });
758
+ }
759
+
760
+ // Magic numbers
761
+ if (
762
+ /\b\d{2,}\b/.test(line) &&
763
+ !line.includes("//") &&
764
+ !line.includes("/*")
765
+ ) {
766
+ const numbers = line.match(/\b\d{2,}\b/g);
767
+ if (numbers && numbers.some((n) => parseInt(n) > 1)) {
768
+ issues.push({
769
+ type: "info",
770
+ category: "style",
771
+ line: lineNum,
772
+ message: "Magic number detected",
773
+ suggestion: "Replace magic numbers with named constants",
774
+ severity: "low",
775
+ });
776
+ }
777
+ }
778
+ });
779
+
780
+ return issues;
781
+ }
782
+
783
+ private analyzeLogic(
784
+ content: string,
785
+ lines: string[],
786
+ language: string,
787
+ ): CodeIssue[] {
788
+ const issues: CodeIssue[] = [];
789
+
790
+ // Check for console.log in production code
791
+ lines.forEach((line, index) => {
792
+ if (line.includes("console.log") && !line.includes("//")) {
793
+ issues.push({
794
+ type: "warning",
795
+ category: "logic",
796
+ line: index + 1,
797
+ message: "console.log statement found",
798
+ suggestion:
799
+ "Remove console.log statements or replace with proper logging",
800
+ severity: "low",
801
+ });
802
+ }
803
+ });
804
+
805
+ // Check for TODO comments
806
+ lines.forEach((line, index) => {
807
+ if (line.includes("TODO") || line.includes("FIXME")) {
808
+ issues.push({
809
+ type: "info",
810
+ category: "logic",
811
+ line: index + 1,
812
+ message: "TODO/FIXME comment found",
813
+ suggestion: "Address TODO items or create proper issues",
814
+ severity: "low",
815
+ });
816
+ }
817
+ });
818
+
819
+ return issues;
820
+ }
821
+
822
+ private calculateMetrics(content: string, language: string): CodeMetrics {
823
+ const lines = content.split("\n");
824
+ const codeLines = lines.filter((line) => {
825
+ const trimmed = line.trim();
826
+ return (
827
+ trimmed &&
828
+ !trimmed.startsWith("//") &&
829
+ !trimmed.startsWith("/*") &&
830
+ !trimmed.startsWith("*")
831
+ );
832
+ });
833
+
834
+ const commentLines = lines.filter(
835
+ (line) =>
836
+ line.trim().startsWith("//") ||
837
+ line.trim().startsWith("/*") ||
838
+ line.trim().startsWith("*"),
839
+ );
840
+
841
+ // Simple cyclomatic complexity calculation
842
+ const complexityKeywords = [
843
+ "if",
844
+ "else",
845
+ "for",
846
+ "while",
847
+ "case",
848
+ "catch",
849
+ "&&",
850
+ "||",
851
+ ];
852
+ let complexity = 1; // Base complexity
853
+ complexityKeywords.forEach((keyword) => {
854
+ const matches = (content.match(new RegExp(`\\b${keyword}\\b`, "g")) || [])
855
+ .length;
856
+ complexity += matches;
857
+ });
858
+
859
+ return {
860
+ cyclomaticComplexity: complexity,
861
+ linesOfCode: codeLines.length,
862
+ commentRatio: commentLines.length / lines.length,
863
+ duplicateLines: this.calculateDuplicateLines(lines),
864
+ };
865
+ }
866
+
867
+ private calculateDuplicateLines(lines: string[]): number {
868
+ const lineCount: Map<string, number> = new Map();
869
+
870
+ lines.forEach((line) => {
871
+ const trimmed = line.trim();
872
+ if (trimmed) {
873
+ lineCount.set(trimmed, (lineCount.get(trimmed) || 0) + 1);
874
+ }
875
+ });
876
+
877
+ let duplicates = 0;
878
+ lineCount.forEach((count) => {
879
+ if (count > 1) {
880
+ duplicates += count;
881
+ }
882
+ });
883
+
884
+ return duplicates;
885
+ }
886
+
887
+ private generateSuggestions(
888
+ issues: CodeIssue[],
889
+ metrics: CodeMetrics | null,
890
+ language: string,
891
+ ): string[] {
892
+ const suggestions: string[] = [];
893
+
894
+ if (issues.length === 0) {
895
+ suggestions.push(
896
+ "Code quality is excellent! Consider adding more comprehensive tests.",
897
+ );
898
+ }
899
+
900
+ // Group issues by category and severity
901
+ const criticalIssues = issues.filter((i) => i.severity === "critical");
902
+ const highIssues = issues.filter((i) => i.severity === "high");
903
+
904
+ if (criticalIssues.length > 0) {
905
+ suggestions.push(
906
+ "Address all critical security and error issues before committing.",
907
+ );
908
+ }
909
+
910
+ if (highIssues.length > 0) {
911
+ suggestions.push(
912
+ "Review and fix high-priority issues to improve code reliability.",
913
+ );
914
+ }
915
+
916
+ if (metrics) {
917
+ if (metrics.cyclomaticComplexity > 20) {
918
+ suggestions.push(
919
+ "Consider breaking down complex functions to reduce cyclomatic complexity.",
920
+ );
921
+ }
922
+
923
+ if (metrics.commentRatio < 0.1) {
924
+ suggestions.push(
925
+ "Add more comments to improve code documentation and maintainability.",
926
+ );
927
+ }
928
+
929
+ if (metrics.linesOfCode > 500) {
930
+ suggestions.push(
931
+ "Large files detected. Consider splitting into smaller, focused modules.",
932
+ );
933
+ }
934
+ }
935
+
936
+ // Language-specific suggestions
937
+ switch (language) {
938
+ case "typescript":
939
+ suggestions.push(
940
+ "Ensure proper TypeScript type annotations and avoid 'any' types.",
941
+ );
942
+ break;
943
+ case "javascript":
944
+ suggestions.push(
945
+ "Consider migrating to TypeScript for better type safety.",
946
+ );
947
+ break;
948
+ case "python":
949
+ suggestions.push("Follow PEP 8 style guidelines and add type hints.");
950
+ break;
951
+ }
952
+
953
+ return suggestions;
954
+ }
955
+
956
+ private calculateOverallScore(
957
+ issues: CodeIssue[],
958
+ metrics: CodeMetrics | null,
959
+ ): number {
960
+ let score = 100;
961
+
962
+ // Deduct points for issues
963
+ issues.forEach((issue) => {
964
+ switch (issue.severity) {
965
+ case "critical":
966
+ score -= 10;
967
+ break;
968
+ case "high":
969
+ score -= 5;
970
+ break;
971
+ case "medium":
972
+ score -= 2;
973
+ break;
974
+ case "low":
975
+ score -= 1;
976
+ break;
977
+ }
978
+ });
979
+
980
+ // Deduct points for poor metrics
981
+ if (metrics) {
982
+ if (metrics.cyclomaticComplexity > 20) score -= 10;
983
+ if (metrics.commentRatio < 0.05) score -= 5;
984
+ if (metrics.duplicateLines > 50) score -= 5;
985
+ }
986
+
987
+ return Math.max(0, Math.min(100, score));
988
+ }
989
+
990
+ private assessOverallQuality(
991
+ avgScore: number,
992
+ totalIssues: number,
993
+ criticalIssues: number,
994
+ ): string {
995
+ if (avgScore >= 90 && criticalIssues === 0) {
996
+ return "✅ EXCELLENT: Code quality is outstanding. Ready for production.";
997
+ } else if (avgScore >= 75 && criticalIssues === 0) {
998
+ return "👍 GOOD: Code quality is acceptable. Minor improvements recommended.";
999
+ } else if (avgScore >= 60) {
1000
+ return "⚠️ NEEDS ATTENTION: Address critical issues and major improvements needed.";
1001
+ } else {
1002
+ return "🚨 CRITICAL: Major quality issues detected. Do not merge without fixes.";
1003
+ }
1004
+ }
1005
+
1006
+ private checkStandardsCompliance(
1007
+ content: string,
1008
+ language: string,
1009
+ standards: string[],
1010
+ ): StandardsViolation[] {
1011
+ const violations: StandardsViolation[] = [];
1012
+
1013
+ // TypeScript specific checks
1014
+ if (language === "typescript") {
1015
+ if (content.includes(": any")) {
1016
+ violations.push({
1017
+ rule: "no-any",
1018
+ description: "Avoid using 'any' type",
1019
+ severity: "medium",
1020
+ });
1021
+ }
1022
+
1023
+ if (!content.includes("interface") && !content.includes("type")) {
1024
+ violations.push({
1025
+ rule: "use-types",
1026
+ description:
1027
+ "Consider using interfaces or types for better type safety",
1028
+ severity: "low",
1029
+ });
1030
+ }
1031
+ }
1032
+
1033
+ // JavaScript specific checks
1034
+ if (language === "javascript") {
1035
+ if (content.includes("var ")) {
1036
+ violations.push({
1037
+ rule: "no-var",
1038
+ description: "Use 'const' or 'let' instead of 'var'",
1039
+ severity: "medium",
1040
+ });
1041
+ }
1042
+ }
1043
+
1044
+ // Python specific checks
1045
+ if (language === "python") {
1046
+ if (content.includes("print(") && !content.includes("#")) {
1047
+ violations.push({
1048
+ rule: "no-print",
1049
+ description: "Avoid using print() in production code",
1050
+ severity: "low",
1051
+ });
1052
+ }
1053
+ }
1054
+
1055
+ return violations;
1056
+ }
1057
+
1058
+ private generateStandardsRecommendations(
1059
+ violations: StandardsViolation[],
1060
+ language: string,
1061
+ standards: string[],
1062
+ ): string[] {
1063
+ const recommendations: string[] = [];
1064
+
1065
+ if (violations.length === 0) {
1066
+ recommendations.push(`Code follows ${language} best practices.`);
1067
+ return recommendations;
1068
+ }
1069
+
1070
+ violations.forEach((violation) => {
1071
+ recommendations.push(`Fix ${violation.rule}: ${violation.description}`);
1072
+ });
1073
+
1074
+ // Language-specific recommendations
1075
+ switch (language) {
1076
+ case "typescript":
1077
+ recommendations.push(
1078
+ "Enable strict TypeScript settings for better type checking.",
1079
+ );
1080
+ break;
1081
+ case "javascript":
1082
+ recommendations.push(
1083
+ "Consider using ESLint with a comprehensive ruleset.",
1084
+ );
1085
+ break;
1086
+ case "python":
1087
+ recommendations.push(
1088
+ "Use black for code formatting and flake8 for linting.",
1089
+ );
1090
+ break;
1091
+ }
1092
+
1093
+ return recommendations;
1094
+ }
1095
+
1096
+ private calculateComplianceScore(violations: StandardsViolation[]): number {
1097
+ const baseScore = 100;
1098
+ const deductions = violations.reduce((total, violation) => {
1099
+ switch (violation.severity) {
1100
+ case "high":
1101
+ return total + 10;
1102
+ case "medium":
1103
+ return total + 5;
1104
+ case "low":
1105
+ return total + 2;
1106
+ default:
1107
+ return total + 1;
1108
+ }
1109
+ }, 0);
1110
+
1111
+ return Math.max(0, baseScore - deductions);
1112
+ }
1113
+
1114
+ async run(): Promise<void> {
1115
+ const transport = new StdioServerTransport();
1116
+ await this.server.connect(transport);
1117
+
1118
+ // Use centralized shutdown handler
1119
+ createGracefulShutdown({
1120
+ serverName: "code-review.server",
1121
+ server: this.server,
1122
+ });
1123
+ }
1124
+ }
1125
+
1126
+ // Run the server if this file is executed directly
1127
+ if (import.meta.url === `file://${process.argv[1]}`) {
1128
+ const server = new StringRayCodeReviewServer();
1129
+ server.run().catch(() => {});
1130
+ }
1131
+
1132
+ export { StringRayCodeReviewServer };