0xray 3.1.0 → 3.2.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 (437) hide show
  1. package/.gitignore.default +59 -0
  2. package/.mcp.json +35 -0
  3. package/.opencode/codex.codex +1 -1
  4. package/.opencode/commands/auto-format.md +3 -3
  5. package/.opencode/commands/auto-summary-capture.md +2 -2
  6. package/.opencode/commands/dependency-audit.md +3 -3
  7. package/.opencode/commands/enforcer-daily-scan.md +3 -3
  8. package/.opencode/commands/framework-compliance-audit.md +4 -4
  9. package/.opencode/commands/interactive-validator.md +2 -2
  10. package/.opencode/commands/job-summary-logger.md +2 -2
  11. package/.opencode/commands/mode-switch.md +1 -1
  12. package/.opencode/commands/model-health-check.md +2 -2
  13. package/.opencode/commands/performance-analysis.md +2 -2
  14. package/.opencode/commands/pre-commit-introspection.md +3 -3
  15. package/.opencode/commands/security-scan.md +3 -3
  16. package/.opencode/commands/sisyphus-validation.md +3 -3
  17. package/.opencode/commands/summary-logger.md +6 -6
  18. package/.opencode/enforcer-config.json +2 -2
  19. package/.opencode/hooks/post-commit +1 -1
  20. package/.opencode/init.sh +6 -0
  21. package/.plugin/plugin.json +11 -0
  22. package/AGENTS-consumer.md +46 -0
  23. package/AGENTS.md +2 -12
  24. package/LICENSE +1 -1
  25. package/README.md +6 -6
  26. package/SKILLS.md +140 -0
  27. package/dist/.gitignore.default +59 -0
  28. package/dist/AGENTS.md +2 -12
  29. package/dist/CHANGELOG.md +54 -0
  30. package/dist/LICENSE +1 -1
  31. package/dist/README.md +6 -6
  32. package/dist/SKILLS.md +140 -0
  33. package/dist/agents/index.js +3 -1
  34. package/dist/agents/registry.js +13 -0
  35. package/dist/analytics/consent-manager.js +0 -1
  36. package/dist/analytics/emerging-pattern-detector.js +0 -1
  37. package/dist/analytics/pattern-learning-engine.js +0 -1
  38. package/dist/analytics/pattern-performance-tracker.js +0 -1
  39. package/dist/analytics/predictive-analytics.js +0 -1
  40. package/dist/analytics/prompt-pattern-analyzer.js +0 -1
  41. package/dist/analytics/routing-performance-analyzer.js +0 -1
  42. package/dist/analytics/routing-refiner.js +1 -2
  43. package/dist/analytics/simple-pattern-analyzer.js +0 -1
  44. package/dist/architect/architectural-integrity.js +3 -3
  45. package/dist/benchmark/performance-benchmark.js +1 -2
  46. package/dist/cli/commands/antigravity-status.js +23 -23
  47. package/dist/cli/commands/archive-logs.js +0 -1
  48. package/dist/cli/commands/credible-init.js +1 -1
  49. package/dist/cli/commands/hermes-install.js +8 -0
  50. package/dist/cli/commands/mcp-install.js +1 -1
  51. package/dist/cli/commands/openclaw-install.js +9 -0
  52. package/dist/cli/commands/opencode-install.js +35 -0
  53. package/dist/cli/commands/plugin-commands.js +0 -1
  54. package/dist/cli/commands/skill-install.js +39 -2
  55. package/dist/cli/commands/status.js +16 -13
  56. package/dist/cli/commands/storyteller.js +1 -1
  57. package/dist/cli/index.js +14 -13
  58. package/dist/core/activity-logger.js +4 -5
  59. package/dist/core/adaptive-kernel.js +0 -1
  60. package/dist/core/agent-spawn-gate.js +1 -1
  61. package/dist/core/boot-orchestrator.js +14 -25
  62. package/dist/core/bridge.mjs +4 -5
  63. package/dist/core/codex-formatter.js +1 -3
  64. package/dist/core/codex-injector.js +3 -4
  65. package/dist/core/config-loader.js +36 -29
  66. package/dist/core/config-paths.js +30 -23
  67. package/dist/core/context-loader.js +0 -4
  68. package/dist/core/context-validator.js +0 -1
  69. package/dist/core/features-config.js +38 -2
  70. package/dist/core/index.js +2 -2
  71. package/dist/core/kernel-patterns.js +0 -1
  72. package/dist/core/logging-config.js +7 -7
  73. package/dist/core/model-router.js +23 -64
  74. package/dist/core/orchestrator.js +1 -1
  75. package/dist/core/system-prompt-generator.js +0 -1
  76. package/dist/core/xray-activation.js +3 -4
  77. package/dist/delegation/agent-delegator.js +2 -3
  78. package/dist/delegation/agent-expertise.js +0 -1
  79. package/dist/delegation/analytics/index.js +0 -1
  80. package/dist/delegation/analytics/learning-engine.js +0 -1
  81. package/dist/delegation/analytics/outcome-tracker.js +0 -1
  82. package/dist/delegation/analytics/routing-analytics.js +0 -1
  83. package/dist/delegation/ast-code-parser.js +0 -1
  84. package/dist/delegation/complexity-analyzer.js +0 -1
  85. package/dist/delegation/dependency-graph-builder.js +0 -1
  86. package/dist/delegation/index.js +0 -1
  87. package/dist/delegation/metrics-aggregator.js +0 -1
  88. package/dist/delegation/session-coordinator.js +0 -1
  89. package/dist/delegation/strategy-selector.js +0 -1
  90. package/dist/delegation/voting-coordinator.js +0 -1
  91. package/dist/delegation/voting-types.js +0 -1
  92. package/dist/delegation/weighted-voting-aggregator.js +0 -1
  93. package/dist/enforcement/core/index.js +0 -1
  94. package/dist/enforcement/core/rule-executor.js +0 -1
  95. package/dist/enforcement/core/rule-hierarchy.js +0 -1
  96. package/dist/enforcement/core/rule-registry.js +0 -1
  97. package/dist/enforcement/core/violation-fixer.js +0 -1
  98. package/dist/enforcement/enforcer-tools.js +2 -2
  99. package/dist/enforcement/index.js +0 -1
  100. package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
  101. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
  102. package/dist/enforcement/loaders/base-loader.js +0 -1
  103. package/dist/enforcement/loaders/codex-loader.js +2 -3
  104. package/dist/enforcement/loaders/index.js +0 -1
  105. package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
  106. package/dist/enforcement/loaders/processor-loader.js +0 -1
  107. package/dist/enforcement/types.js +0 -1
  108. package/dist/enforcement/validators/architecture-validators.js +0 -1
  109. package/dist/enforcement/validators/base-validator.js +0 -1
  110. package/dist/enforcement/validators/code-quality-validators.js +0 -1
  111. package/dist/enforcement/validators/index.js +0 -1
  112. package/dist/enforcement/validators/security-validators.js +0 -1
  113. package/dist/enforcement/validators/testing-validators.js +0 -1
  114. package/dist/enforcement/validators/validator-registry.js +0 -1
  115. package/dist/execution/opencode-cli-invoker.js +1 -1
  116. package/dist/governance/codex-policy.service.js +0 -1
  117. package/dist/governance/governance-service.js +1 -1
  118. package/dist/governance/llm-governance-provider.js +14 -1
  119. package/dist/index.js +3 -5
  120. package/dist/inference/inference-agent-invoker.js +67 -0
  121. package/dist/inference/inference-applier.js +178 -0
  122. package/dist/inference/inference-cycle.js +52 -828
  123. package/dist/inference/inference-proposal-generator.js +149 -0
  124. package/dist/infrastructure/iac-validator.js +465 -0
  125. package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
  126. package/dist/integrations/base/ExampleIntegration.js +0 -1
  127. package/dist/integrations/base/Integration.js +0 -1
  128. package/dist/integrations/base/README.md +1 -1
  129. package/dist/integrations/base/index.js +0 -1
  130. package/dist/integrations/base/registry.js +0 -1
  131. package/dist/integrations/base/types.js +0 -1
  132. package/dist/integrations/enforcement-gate.js +5 -5
  133. package/dist/integrations/governance/governance-client.js +0 -1
  134. package/dist/integrations/governance/index.js +11 -19
  135. package/dist/integrations/governance/types.js +0 -1
  136. package/dist/integrations/grok/grok-cli.js +20 -6
  137. package/dist/integrations/grok/hooks/pre-tool-use.js +3 -3
  138. package/dist/integrations/grok/plugin/0xray/.mcp.json +16 -4
  139. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
  140. package/dist/integrations/hermes-agent/__init__.py +29 -14
  141. package/dist/integrations/hermes-agent/bridge.mjs +76 -4
  142. package/dist/integrations/hermes-agent/schemas.py +49 -0
  143. package/dist/integrations/hermes-agent/test_plugin.py +7 -7
  144. package/dist/integrations/hermes-agent/tools.py +107 -3
  145. package/dist/integrations/openclaw/README.md +6 -6
  146. package/dist/integrations/openclaw/api-server.js +0 -1
  147. package/dist/integrations/openclaw/client.js +0 -1
  148. package/dist/integrations/openclaw/config.js +1 -2
  149. package/dist/integrations/openclaw/hooks/{strray-hooks.js → xray-hooks.js} +0 -1
  150. package/dist/integrations/openclaw/index.js +2 -3
  151. package/dist/integrations/openclaw/types.js +3 -4
  152. package/dist/integrations/plugins/index.js +0 -1
  153. package/dist/integrations/plugins/plugin-integration.js +1 -2
  154. package/dist/integrations/plugins/plugin-registry.js +1 -2
  155. package/dist/mcps/agent-resolver.js +0 -1
  156. package/dist/mcps/architect-tools.server.js +121 -186
  157. package/dist/mcps/auto-format.server.js +57 -75
  158. package/dist/mcps/boot-orchestrator.server.js +68 -86
  159. package/dist/mcps/config/config-loader.js +46 -9
  160. package/dist/mcps/config/plugin-server-registry.js +0 -1
  161. package/dist/mcps/enforcer-tools.server.js +208 -274
  162. package/dist/mcps/estimation.server.js +65 -108
  163. package/dist/mcps/framework-compliance-audit.server.js +53 -82
  164. package/dist/mcps/framework-help.server.js +73 -90
  165. package/dist/mcps/governance.server.js +104 -152
  166. package/dist/mcps/knowledge-skills/api-design.server.js +35 -66
  167. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -66
  168. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +125 -165
  169. package/dist/mcps/knowledge-skills/code-analyzer.server.js +211 -238
  170. package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
  171. package/dist/mcps/knowledge-skills/content-creator.server.js +205 -227
  172. package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
  173. package/dist/mcps/knowledge-skills/devops-deployment.server.js +125 -158
  174. package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
  175. package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -325
  176. package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -161
  177. package/dist/mcps/knowledge-skills/mobile-development.server.js +172 -202
  178. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +124 -160
  179. package/dist/mcps/knowledge-skills/performance-optimization.server.js +89 -139
  180. package/dist/mcps/knowledge-skills/project-analysis.server.js +132 -219
  181. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +117 -151
  182. package/dist/mcps/knowledge-skills/security-audit.server.js +17 -144
  183. package/dist/mcps/knowledge-skills/seo-consultant.server.js +22 -214
  184. package/dist/mcps/knowledge-skills/session-management.server.js +15 -91
  185. package/dist/mcps/knowledge-skills/skill-invocation.server.js +83 -359
  186. package/dist/mcps/knowledge-skills/strategist.server.js +12 -57
  187. package/dist/mcps/knowledge-skills/tech-writer.server.js +18 -193
  188. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +20 -192
  189. package/dist/mcps/knowledge-skills/testing-strategy.server.js +19 -157
  190. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +24 -297
  191. package/dist/mcps/lint.server.js +51 -92
  192. package/dist/mcps/model-health-check.server.js +34 -61
  193. package/dist/mcps/orchestrator/aside-context.js +207 -0
  194. package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
  195. package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
  196. package/dist/mcps/orchestrator/handlers/task-handler.js +5 -0
  197. package/dist/mcps/orchestrator/index.js +5 -0
  198. package/dist/mcps/orchestrator/server.js +65 -9
  199. package/dist/mcps/orchestrator.server.js +2 -1
  200. package/dist/mcps/performance-analysis.server.js +57 -88
  201. package/dist/mcps/processor-pipeline.server.js +70 -100
  202. package/dist/mcps/registry.json +1 -1
  203. package/dist/mcps/researcher.server.js +81 -154
  204. package/dist/mcps/security-scan.server.js +57 -71
  205. package/dist/mcps/shared/knowledge-skill-base.js +11 -4
  206. package/dist/mcps/state-manager.server.js +127 -155
  207. package/dist/metrics/agent-metrics.js +1 -1
  208. package/dist/monitoring/nudge-watchdog.js +0 -1
  209. package/dist/nucleus/default-plugins.js +13 -19
  210. package/dist/nucleus/index.js +0 -1
  211. package/dist/orchestrator/agent-spawn-governor.js +0 -1
  212. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +2 -2
  213. package/dist/orchestrator/intelligent-commit-batcher.js +2 -11
  214. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +1 -2
  215. package/dist/orchestrator/orchestrator.js +8 -19
  216. package/dist/orchestrator/self-direction-activation.js +0 -1
  217. package/dist/orchestrator/universal-registry-bridge.js +1 -2
  218. package/dist/performance/performance-budget-enforcer.js +0 -1
  219. package/dist/performance/performance-regression-tester.js +0 -1
  220. package/dist/plugin/plugin-codex-context.js +87 -0
  221. package/dist/plugin/plugin-helpers.js +155 -0
  222. package/dist/plugin/plugin-logger.js +46 -0
  223. package/dist/plugin/plugin-modules.js +144 -0
  224. package/dist/plugin/plugin-quality-gate.js +88 -0
  225. package/dist/plugin/plugin-types.js +1 -0
  226. package/dist/plugin/xray-codex-injection.js +39 -558
  227. package/dist/postprocessor/PostProcessor.js +7 -13
  228. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  229. package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
  230. package/dist/postprocessor/integration.js +194 -0
  231. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
  232. package/dist/postprocessor/metamorphosis/index.js +1 -0
  233. package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
  234. package/dist/postprocessor/services/RegressionAnalysisService.js +2 -3
  235. package/dist/postprocessor/triggers/APITrigger.js +0 -1
  236. package/dist/postprocessor/triggers/GitHookTrigger.js +4 -4
  237. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
  238. package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
  239. package/dist/processors/implementations/async-pattern-processor.js +0 -1
  240. package/dist/processors/implementations/console-log-guard-processor.js +0 -1
  241. package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
  242. package/dist/processors/implementations/inference-improvement-processor.js +2 -10
  243. package/dist/processors/implementations/log-protection-processor.js +0 -1
  244. package/dist/processors/implementations/nudge-processor.js +0 -1
  245. package/dist/processors/implementations/performance-budget-processor.js +0 -1
  246. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
  247. package/dist/processors/implementations/publish-preflight-processor.js +4 -13
  248. package/dist/processors/implementations/session-summary-processor.js +8 -16
  249. package/dist/processors/implementations/spawn-governance-processor.js +0 -1
  250. package/dist/processors/implementations/storytelling-trigger-processor.js +3 -29
  251. package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
  252. package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
  253. package/dist/processors/implementations/version-compliance-processor.js +0 -1
  254. package/dist/processors/processor-interfaces.js +0 -1
  255. package/dist/processors/processor-types.js +0 -1
  256. package/dist/public/about.html +6 -6
  257. package/dist/public/enterprise.html +1 -1
  258. package/dist/public/features.html +2 -2
  259. package/dist/public/index.html +4 -4
  260. package/dist/reporting/report-formatter.js +1 -1
  261. package/dist/scripts/activate-kernel-pipeline.js +2 -2
  262. package/dist/scripts/integration.js +0 -1
  263. package/dist/scripts/pre-command +1 -1
  264. package/dist/security/comprehensive-security-audit.js +0 -1
  265. package/dist/security/security-agent-coordinator.js +0 -1
  266. package/dist/security/security-auditor.js +0 -1
  267. package/dist/security/security-hardener.js +0 -1
  268. package/dist/security/security-hardening-system.js +0 -1
  269. package/dist/security/security-headers.js +0 -1
  270. package/dist/security/security-orchestration-layer.js +0 -1
  271. package/dist/services/inference-tuner.js +1 -2
  272. package/dist/session/session-cleanup-manager.js +0 -1
  273. package/dist/session/session-monitor.js +0 -1
  274. package/dist/session/session-state-manager.js +0 -1
  275. package/dist/skills/api-design/SKILL.md +1 -1
  276. package/dist/skills/architect-tools/SKILL.md +1 -1
  277. package/dist/skills/architecture-patterns/SKILL.md +1 -1
  278. package/dist/skills/auto-format/SKILL.md +1 -1
  279. package/dist/skills/boot-orchestrator/SKILL.md +1 -1
  280. package/dist/skills/bug-triage/SKILL.md +1 -1
  281. package/dist/skills/code-analyzer/SKILL.md +1 -1
  282. package/dist/skills/code-review/SKILL.md +1 -1
  283. package/dist/skills/enforcer/SKILL.md +1 -1
  284. package/dist/skills/framework-compliance-audit/SKILL.md +1 -1
  285. package/dist/skills/git-workflow/SKILL.md +1 -1
  286. package/dist/skills/hermes-agent/SKILL.md +2 -2
  287. package/dist/skills/inference-improve/SKILL.md +1 -1
  288. package/dist/skills/lint/SKILL.md +1 -1
  289. package/dist/skills/log-monitor/SKILL.md +1 -1
  290. package/dist/skills/model-health-check/SKILL.md +1 -1
  291. package/dist/skills/multimodal-looker/SKILL.md +1 -1
  292. package/dist/skills/orchestrator/SKILL.md +1 -1
  293. package/dist/skills/performance-analysis/SKILL.md +1 -1
  294. package/dist/skills/performance-optimization/SKILL.md +1 -1
  295. package/dist/skills/processor-pipeline/SKILL.md +1 -1
  296. package/dist/skills/project-analysis/SKILL.md +1 -1
  297. package/dist/skills/refactoring-strategies/SKILL.md +1 -1
  298. package/dist/skills/registry.json +1 -1
  299. package/dist/skills/researcher/SKILL.md +1 -1
  300. package/dist/skills/security-audit/SKILL.md +1 -1
  301. package/dist/skills/security-scan/SKILL.md +1 -1
  302. package/dist/skills/session-management/SKILL.md +1 -1
  303. package/dist/skills/state-manager/SKILL.md +1 -1
  304. package/dist/skills/storyteller/SKILL.md +1 -1
  305. package/dist/skills/testing-best-practices/SKILL.md +1 -1
  306. package/dist/skills/testing-strategy/SKILL.md +1 -1
  307. package/dist/skills/ui-ux-design/SKILL.md +1 -1
  308. package/dist/skills/xray-orchestrator/index.js +0 -1
  309. package/dist/state/index.js +0 -1
  310. package/dist/state/state-manager.js +1 -2
  311. package/dist/utils/codex-parser.js +0 -1
  312. package/dist/utils/import-resolver.js +1 -1
  313. package/dist/utils/language-detector.js +0 -1
  314. package/dist/utils/path-resolver.js +2 -2
  315. package/dist/utils/shutdown-handler.js +0 -1
  316. package/dist/validation/agent-config-validator.js +280 -0
  317. package/dist/validation/orchestration-flow-validator.js +606 -0
  318. package/package.json +10 -3
  319. package/scripts/hooks/pre-command +1 -1
  320. package/scripts/hooks/run-hook.js +2 -2
  321. package/scripts/node/auto-reflection-generator.mjs +30 -36
  322. package/scripts/node/govern-reflection.mjs +1 -1
  323. package/scripts/node/postinstall.cjs +37 -2
  324. package/scripts/node/release.mjs +2 -2
  325. package/scripts/node/setup-xai-oauth.mjs +244 -0
  326. package/scripts/node/setup.cjs +28 -0
  327. package/scripts/node/universal-version-manager.js +8 -8
  328. package/scripts/node/version-manager.mjs +1 -1
  329. package/src/integrations/grok/plugin/0xray/.mcp.json +16 -4
  330. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
  331. package/src/mcps/agent-resolver.ts +0 -1
  332. package/src/mcps/architect-tools.server.ts +130 -212
  333. package/src/mcps/auto-format.server.ts +75 -104
  334. package/src/mcps/boot-orchestrator.server.ts +72 -97
  335. package/src/mcps/config/__tests__/config-loader.test.ts +33 -37
  336. package/src/mcps/config/config-loader.ts +57 -11
  337. package/src/mcps/config/plugin-server-registry.ts +0 -1
  338. package/src/mcps/enforcer-tools.server.ts +218 -295
  339. package/src/mcps/estimation.server.ts +64 -123
  340. package/src/mcps/framework-compliance-audit.server.ts +54 -96
  341. package/src/mcps/framework-help.server.ts +76 -97
  342. package/src/mcps/governance.server.ts +104 -164
  343. package/src/mcps/knowledge-skills/api-design.server.ts +35 -73
  344. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +34 -73
  345. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +149 -194
  346. package/src/mcps/knowledge-skills/code-analyzer.server.ts +223 -255
  347. package/src/mcps/knowledge-skills/code-review.server.ts +116 -158
  348. package/src/mcps/knowledge-skills/content-creator.server.ts +221 -248
  349. package/src/mcps/knowledge-skills/database-design.server.ts +120 -161
  350. package/src/mcps/knowledge-skills/devops-deployment.server.ts +128 -168
  351. package/src/mcps/knowledge-skills/git-workflow.server.ts +34 -78
  352. package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -362
  353. package/src/mcps/knowledge-skills/log-monitor.server.ts +70 -97
  354. package/src/mcps/knowledge-skills/mobile-development.server.ts +18 -58
  355. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +15 -61
  356. package/src/mcps/knowledge-skills/performance-optimization.server.ts +14 -75
  357. package/src/mcps/knowledge-skills/project-analysis.server.ts +14 -121
  358. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +15 -61
  359. package/src/mcps/knowledge-skills/security-audit.server.ts +20 -158
  360. package/src/mcps/knowledge-skills/seo-consultant.server.ts +25 -228
  361. package/src/mcps/knowledge-skills/session-management.server.ts +19 -107
  362. package/src/mcps/knowledge-skills/skill-invocation.server.ts +89 -380
  363. package/src/mcps/knowledge-skills/strategist.server.ts +15 -65
  364. package/src/mcps/knowledge-skills/tech-writer.server.ts +21 -206
  365. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +23 -205
  366. package/src/mcps/knowledge-skills/testing-strategy.server.ts +22 -166
  367. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +27 -343
  368. package/src/mcps/lint.server.ts +53 -106
  369. package/src/mcps/model-health-check.server.ts +35 -71
  370. package/src/mcps/orchestrator/aside-context.ts +245 -0
  371. package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
  372. package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
  373. package/src/mcps/orchestrator/handlers/task-handler.ts +8 -1
  374. package/src/mcps/orchestrator/index.ts +29 -0
  375. package/src/mcps/orchestrator/server.ts +81 -25
  376. package/src/mcps/orchestrator/types.ts +37 -0
  377. package/src/mcps/orchestrator.server.ts +2 -1
  378. package/src/mcps/performance-analysis.server.ts +60 -103
  379. package/src/mcps/processor-pipeline.server.ts +72 -109
  380. package/src/mcps/registry.json +1 -1
  381. package/src/mcps/researcher.server.ts +88 -176
  382. package/src/mcps/security-scan.server.ts +58 -77
  383. package/src/mcps/shared/knowledge-skill-base.ts +12 -4
  384. package/src/mcps/state-manager.server.ts +132 -172
  385. package/src/opencode/codex.codex +1 -1
  386. package/src/opencode/commands/auto-format.md +3 -3
  387. package/src/opencode/commands/auto-summary-capture.md +2 -2
  388. package/src/opencode/commands/dependency-audit.md +3 -3
  389. package/src/opencode/commands/enforcer-daily-scan.md +3 -3
  390. package/src/opencode/commands/framework-compliance-audit.md +4 -4
  391. package/src/opencode/commands/interactive-validator.md +2 -2
  392. package/src/opencode/commands/job-summary-logger.md +2 -2
  393. package/src/opencode/commands/mode-switch.md +1 -1
  394. package/src/opencode/commands/model-health-check.md +2 -2
  395. package/src/opencode/commands/performance-analysis.md +2 -2
  396. package/src/opencode/commands/pre-commit-introspection.md +3 -3
  397. package/src/opencode/commands/security-scan.md +3 -3
  398. package/src/opencode/commands/sisyphus-validation.md +3 -3
  399. package/src/opencode/commands/summary-logger.md +6 -6
  400. package/src/opencode/enforcer-config.json +2 -2
  401. package/src/skills/api-design/SKILL.md +1 -1
  402. package/src/skills/architect-tools/SKILL.md +1 -1
  403. package/src/skills/architecture-patterns/SKILL.md +1 -1
  404. package/src/skills/auto-format/SKILL.md +1 -1
  405. package/src/skills/boot-orchestrator/SKILL.md +1 -1
  406. package/src/skills/bug-triage/SKILL.md +1 -1
  407. package/src/skills/code-analyzer/SKILL.md +1 -1
  408. package/src/skills/code-review/SKILL.md +1 -1
  409. package/src/skills/enforcer/SKILL.md +1 -1
  410. package/src/skills/framework-compliance-audit/SKILL.md +1 -1
  411. package/src/skills/git-workflow/SKILL.md +1 -1
  412. package/src/skills/hermes-agent/SKILL.md +2 -2
  413. package/src/skills/inference-improve/SKILL.md +1 -1
  414. package/src/skills/lint/SKILL.md +1 -1
  415. package/src/skills/log-monitor/SKILL.md +1 -1
  416. package/src/skills/model-health-check/SKILL.md +1 -1
  417. package/src/skills/multimodal-looker/SKILL.md +1 -1
  418. package/src/skills/orchestrator/SKILL.md +1 -1
  419. package/src/skills/performance-analysis/SKILL.md +1 -1
  420. package/src/skills/performance-optimization/SKILL.md +1 -1
  421. package/src/skills/processor-pipeline/SKILL.md +1 -1
  422. package/src/skills/project-analysis/SKILL.md +1 -1
  423. package/src/skills/refactoring-strategies/SKILL.md +1 -1
  424. package/src/skills/registry.json +1 -1
  425. package/src/skills/researcher/SKILL.md +1 -1
  426. package/src/skills/security-audit/SKILL.md +1 -1
  427. package/src/skills/security-scan/SKILL.md +1 -1
  428. package/src/skills/session-management/SKILL.md +1 -1
  429. package/src/skills/state-manager/SKILL.md +1 -1
  430. package/src/skills/storyteller/SKILL.md +1 -1
  431. package/src/skills/testing-best-practices/SKILL.md +1 -1
  432. package/src/skills/testing-strategy/SKILL.md +1 -1
  433. package/src/skills/ui-ux-design/SKILL.md +1 -1
  434. package/src/skills/xray-orchestrator/index.ts +0 -1
  435. package/xray/agents_template.md +46 -0
  436. package/xray/codex.json +598 -0
  437. package/dist/nucleus/orchestrator.js +0 -479
@@ -0,0 +1,87 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { resolveCodexPath } from "./plugin-modules.js";
4
+ import { PluginLogger } from "./plugin-logger.js";
5
+ let cachedCodexContexts = null;
6
+ async function getCodexFileLocations(directory) {
7
+ const root = directory || process.cwd();
8
+ const resolved = await resolveCodexPath(root);
9
+ resolved.push(path.join(root, ".opencode", "codex.codex"), path.join(root, ".xray", "agents_template.md"), path.join(root, "AGENTS.md"));
10
+ return resolved;
11
+ }
12
+ function readFileContent(filePath) {
13
+ try {
14
+ return fs.readFileSync(filePath, "utf-8");
15
+ }
16
+ catch (error) {
17
+ const logger = new PluginLogger(process.cwd());
18
+ logger.error(`Failed to read file ${filePath}`, error);
19
+ return null;
20
+ }
21
+ }
22
+ export function extractCodexMetadata(content) {
23
+ if (content.trim().startsWith("{")) {
24
+ try {
25
+ const parsed = JSON.parse(content);
26
+ const version = parsed.version || "1.6.0";
27
+ const terms = parsed.terms || {};
28
+ const termCount = Object.keys(terms).length;
29
+ return { version, termCount };
30
+ }
31
+ catch {
32
+ // Not valid JSON, try markdown format
33
+ }
34
+ }
35
+ const versionMatch = content.match(/\*\*Version\*\*:\s*(\d+\.\d+\.\d+)/);
36
+ const version = versionMatch?.[1] ?? "1.6.0";
37
+ const termMatches = content.match(/####\s*\d+\.\s/g);
38
+ const termCount = termMatches ? termMatches.length : 0;
39
+ return { version, termCount };
40
+ }
41
+ export function createCodexContextEntry(filePath, content) {
42
+ const metadata = extractCodexMetadata(content);
43
+ return {
44
+ id: `xray-codex-${path.basename(filePath)}`,
45
+ source: filePath,
46
+ content,
47
+ priority: "critical",
48
+ metadata: {
49
+ version: metadata.version,
50
+ termCount: metadata.termCount,
51
+ loadedAt: new Date().toISOString(),
52
+ },
53
+ };
54
+ }
55
+ export async function loadCodexContext(directory) {
56
+ if (cachedCodexContexts) {
57
+ return cachedCodexContexts;
58
+ }
59
+ const codexContexts = [];
60
+ const locations = await getCodexFileLocations(directory);
61
+ for (const fileLocation of locations) {
62
+ const fullPath = path.isAbsolute(fileLocation) ? fileLocation : path.join(directory, fileLocation);
63
+ const content = readFileContent(fullPath);
64
+ if (content && content.trim().length > 0) {
65
+ const entry = createCodexContextEntry(fullPath, content);
66
+ if (entry.metadata.termCount > 0) {
67
+ codexContexts.push(entry);
68
+ }
69
+ }
70
+ }
71
+ cachedCodexContexts = codexContexts;
72
+ if (codexContexts.length === 0) {
73
+ const { getOrCreateLogger } = await import("./plugin-logger.js");
74
+ void getOrCreateLogger(directory).then((l) => l.error(`No valid codex files found. Checked: ${locations.join(", ")}`));
75
+ }
76
+ return codexContexts;
77
+ }
78
+ export function formatCodexContext(contexts) {
79
+ if (contexts.length === 0) {
80
+ return "";
81
+ }
82
+ const parts = [];
83
+ for (const context of contexts) {
84
+ parts.push(`# 0xRay Codex Context v${context.metadata.version}`, `Source: ${context.source}`, `Terms Loaded: ${context.metadata.termCount}`, `Loaded At: ${context.metadata.loadedAt}`, "", context.content, "", "---", "");
85
+ }
86
+ return parts.join("\n");
87
+ }
@@ -0,0 +1,155 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { spawn } from "child_process";
4
+ export function spawnPromise(command, args, cwd) {
5
+ return new Promise((resolve, reject) => {
6
+ const child = spawn(command, args, {
7
+ cwd,
8
+ stdio: ["ignore", "inherit", "pipe"],
9
+ });
10
+ let stderr = "";
11
+ if (child.stderr) {
12
+ child.stderr.on("data", (data) => {
13
+ stderr += data.toString();
14
+ });
15
+ }
16
+ child.on("close", (code) => {
17
+ if (code === 0) {
18
+ resolve({ stdout: "", stderr });
19
+ }
20
+ else {
21
+ reject(new Error(`Process exited with code ${code}: ${stderr}`));
22
+ }
23
+ });
24
+ child.on("error", (error) => {
25
+ reject(error);
26
+ });
27
+ });
28
+ }
29
+ export function getFrameworkVersion() {
30
+ try {
31
+ const packageJsonPath = path.join(process.cwd(), "package.json");
32
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
33
+ return packageJson.version || "1.4.6";
34
+ }
35
+ catch {
36
+ return "1.4.6";
37
+ }
38
+ }
39
+ export function getFrameworkIdentity() {
40
+ const version = getFrameworkVersion();
41
+ return `0xRay Framework v${version} - AI Orchestration
42
+
43
+ 🔧 Core: architect, code-reviewer, refactorer, testing-lead, strategist
44
+ 📚 Codex: 5 Essential Terms (99.6% Error Prevention Target)
45
+ 🎯 Goal: Progressive, production-ready development workflow
46
+
47
+ 📖 Documentation: config dir (codex, config, agents docs) — resolved via config-paths
48
+ `;
49
+ }
50
+ export const TOOL_AGENT_MAP = {
51
+ write: { agent: "code-reviewer", skill: "write" },
52
+ edit: { agent: "code-reviewer", skill: "edit" },
53
+ multiedit: { agent: "code-reviewer", skill: "multiedit" },
54
+ bash: { agent: "testing-lead", skill: "execution" },
55
+ search: { agent: "researcher", skill: "search" },
56
+ read: { agent: "researcher", skill: "read" },
57
+ glob: { agent: "researcher", skill: "glob" },
58
+ grep: { agent: "researcher", skill: "search" },
59
+ ls: { agent: "researcher", skill: "list" },
60
+ };
61
+ export function classifyTaskType(tool, args) {
62
+ const cmd = String(args?.command ?? "").toLowerCase().trim();
63
+ if (tool === "bash" && cmd) {
64
+ if (/(npm|yarn|pnpm)\s+test|jest|vitest|mocha|pytest/.test(cmd))
65
+ return "testing";
66
+ if (/(npm|yarn|pnpm)\s+run|npx|cargo|go run|make\s/.test(cmd))
67
+ return "build";
68
+ if (/audit|security|snyk|owasp|bandit/.test(cmd))
69
+ return "security";
70
+ if (/eslint|prettier|black|ruff|lint|format/.test(cmd))
71
+ return "lint";
72
+ if (/git\s/.test(cmd))
73
+ return "git";
74
+ if (/(npm|yarn|pnpm)\s+install|pip install|cargo add/.test(cmd))
75
+ return "install";
76
+ if (/grep|rg |find |ls |cat |head |tail /.test(cmd))
77
+ return "search";
78
+ }
79
+ if (tool === "write")
80
+ return "write";
81
+ if (tool === "edit" || tool === "multiedit")
82
+ return "edit";
83
+ if (tool === "read")
84
+ return "read";
85
+ if (tool === "search" || tool === "grep" || tool === "glob")
86
+ return "search";
87
+ return "unknown";
88
+ }
89
+ export function isWriteEditOperation(tool) {
90
+ return tool === "write" || tool === "edit" || tool === "multiedit";
91
+ }
92
+ export function isPublishOperation(tool) {
93
+ return tool === "publish" || tool === "release" || tool === "npm-publish" || tool === "xray-release";
94
+ }
95
+ export function resolveAgentName(input) {
96
+ const globalAgent = globalThis.currentAgent;
97
+ if (globalAgent?.agentType)
98
+ return globalAgent.agentType;
99
+ if (globalAgent?.type)
100
+ return globalAgent.type;
101
+ if (input?.agentType)
102
+ return input.agentType;
103
+ return "architect";
104
+ }
105
+ export function registerAllProcessors(pm) {
106
+ pm.registerProcessor({ name: "preValidate", type: "pre", priority: 10, enabled: true });
107
+ pm.registerProcessor({ name: "codexCompliance", type: "pre", priority: 20, enabled: true });
108
+ pm.registerProcessor({ name: "versionCompliance", type: "pre", priority: 25, enabled: true });
109
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 5, enabled: true });
110
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
111
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
112
+ }
113
+ export function registerAfterPostProcessors(pm) {
114
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 50, enabled: true });
115
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
116
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
117
+ }
118
+ export function logPreProcessorResults(results, logger) {
119
+ logger.log(`📊 Pre-processor result: ${results.success ? "SUCCESS" : "FAILED"} (${results.results.length} processors)`);
120
+ if (!results.success) {
121
+ const failures = results.results.filter((r) => !r.success);
122
+ for (const f of failures) {
123
+ logger.error(`❌ Pre-processor ${f.processorName} failed: ${f.error}`);
124
+ }
125
+ }
126
+ else {
127
+ for (const r of results.results) {
128
+ logger.log(`✅ Pre-processor ${r.processorName}: ${r.success ? "OK" : "FAILED"}`);
129
+ }
130
+ }
131
+ }
132
+ export function logPostProcessorResults(results, logger) {
133
+ const allSuccess = results.every((r) => r.success);
134
+ logger.log(`📊 Post-processor result: ${allSuccess ? "SUCCESS" : "FAILED"} (${results.length} processors)`);
135
+ for (const r of results) {
136
+ if (r.success) {
137
+ logger.log(`✅ Post-processor ${r.processorName}: OK`);
138
+ }
139
+ else {
140
+ logger.error(`❌ Post-processor ${r.processorName} failed: ${r.error}`);
141
+ }
142
+ }
143
+ }
144
+ export function logTestAutoCreationResult(results, logger) {
145
+ const testAutoResult = results.find((r) => r.processorName === "testAutoCreation");
146
+ if (testAutoResult) {
147
+ const data = testAutoResult.data;
148
+ if (testAutoResult.success && data?.testCreated && data?.testFile) {
149
+ logger.log(`✅ TEST AUTO-CREATION: Created ${data.testFile}`);
150
+ }
151
+ else if (!testAutoResult.success) {
152
+ logger.log(`ℹ️ TEST AUTO-CREATION: ${testAutoResult.error ?? "skipped - no new files"}`);
153
+ }
154
+ }
155
+ }
@@ -0,0 +1,46 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ export class PluginLogger {
4
+ logPath;
5
+ constructor(directory) {
6
+ const logsDir = path.join(directory, ".opencode", "logs");
7
+ if (!fs.existsSync(logsDir)) {
8
+ fs.mkdirSync(logsDir, { recursive: true });
9
+ }
10
+ const today = new Date().toISOString().split("T")[0];
11
+ this.logPath = path.join(logsDir, `xray-plugin-${today}.log`);
12
+ }
13
+ async logAsync(message) {
14
+ try {
15
+ const timestamp = new Date().toISOString();
16
+ const logEntry = `[${timestamp}] ${message}\n`;
17
+ await fs.promises.appendFile(this.logPath, logEntry, "utf-8");
18
+ }
19
+ catch {
20
+ // Silent fail - logging failure should not break plugin
21
+ }
22
+ }
23
+ log(message) {
24
+ void this.logAsync(message);
25
+ }
26
+ error(message, error) {
27
+ const errorDetail = error instanceof Error ? `: ${error.message}` : "";
28
+ this.log(`ERROR: ${message}${errorDetail}`);
29
+ }
30
+ }
31
+ let loggerInstance = null;
32
+ let loggerInitPromise = null;
33
+ export async function getOrCreateLogger(directory) {
34
+ if (loggerInstance) {
35
+ return loggerInstance;
36
+ }
37
+ if (loggerInitPromise) {
38
+ return loggerInitPromise;
39
+ }
40
+ loggerInitPromise = (async () => {
41
+ const logger = new PluginLogger(directory);
42
+ loggerInstance = logger;
43
+ return logger;
44
+ })();
45
+ return loggerInitPromise;
46
+ }
@@ -0,0 +1,144 @@
1
+ import * as path from "path";
2
+ import { getOrCreateLogger } from "./plugin-logger.js";
3
+ let _resolveCodexPath = null;
4
+ let _resolveStateDir = null;
5
+ let _frameworkLogger = null;
6
+ let _systemPromptGenerator = null;
7
+ let _ProcessorManager = null;
8
+ let _XrayStateManager = null;
9
+ let _featuresConfigLoader = null;
10
+ let _detectTaskType = null;
11
+ export function getProcessorManager() { return _ProcessorManager; }
12
+ export function getXrayStateManager() { return _XrayStateManager; }
13
+ export function getFeaturesConfigLoader() { return _featuresConfigLoader; }
14
+ export function getDetectTaskType() { return _detectTaskType; }
15
+ export function getSystemPromptGenerator() { return _systemPromptGenerator; }
16
+ async function loadFrameworkLogger() {
17
+ if (_frameworkLogger)
18
+ return _frameworkLogger;
19
+ const candidates = [
20
+ "../core/framework-logger.js",
21
+ "../../node_modules/0xray/dist/core/framework-logger.js",
22
+ ];
23
+ for (const p of candidates) {
24
+ try {
25
+ const mod = await import(p);
26
+ _frameworkLogger = mod.frameworkLogger;
27
+ return _frameworkLogger;
28
+ }
29
+ catch (_) {
30
+ // try next candidate
31
+ }
32
+ }
33
+ _frameworkLogger = {
34
+ log: (_module, _event, _status, _data) => { },
35
+ };
36
+ return _frameworkLogger;
37
+ }
38
+ async function loadConfigPaths() {
39
+ if (_resolveCodexPath && _resolveStateDir)
40
+ return;
41
+ const candidates = [
42
+ "../core/config-paths.js",
43
+ "../../node_modules/0xray/dist/core/config-paths.js",
44
+ ];
45
+ for (const p of candidates) {
46
+ try {
47
+ const mod = await import(p);
48
+ _resolveCodexPath = mod.resolveCodexPath;
49
+ _resolveStateDir = mod.resolveStateDir;
50
+ return;
51
+ }
52
+ catch (_) {
53
+ // try next candidate
54
+ }
55
+ }
56
+ const logger = await loadFrameworkLogger();
57
+ logger.log("xray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
58
+ }
59
+ export async function resolveCodexPath(root) {
60
+ await loadConfigPaths();
61
+ if (!_resolveCodexPath)
62
+ throw new Error("resolveCodexPath not available after loading");
63
+ return _resolveCodexPath(root);
64
+ }
65
+ export async function resolveStateDir(root) {
66
+ await loadConfigPaths();
67
+ if (!_resolveStateDir)
68
+ throw new Error("resolveStateDir not available after loading");
69
+ return _resolveStateDir(root);
70
+ }
71
+ export async function importSystemPromptGenerator() {
72
+ if (_systemPromptGenerator)
73
+ return;
74
+ const candidates = [
75
+ "../core/system-prompt-generator.js",
76
+ "../../node_modules/0xray/dist/core/system-prompt-generator.js",
77
+ ];
78
+ for (const p of candidates) {
79
+ try {
80
+ const module = await import(p);
81
+ _systemPromptGenerator = module.generateLeanSystemPrompt;
82
+ return;
83
+ }
84
+ catch (_) {
85
+ // try next candidate
86
+ }
87
+ }
88
+ const logger = await loadFrameworkLogger();
89
+ logger.log("xray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
90
+ }
91
+ export function validateModulePath(resolvedPath, allowedPrefix) {
92
+ const normalized = path.resolve(resolvedPath);
93
+ const allowed = path.resolve(allowedPrefix);
94
+ if (!normalized.startsWith(allowed)) {
95
+ throw new Error(`Module path validation failed: ${normalized} is outside allowed path ${allowed}`);
96
+ }
97
+ }
98
+ export async function loadXrayComponents() {
99
+ if (_ProcessorManager && _XrayStateManager && _featuresConfigLoader)
100
+ return;
101
+ const logger = await getOrCreateLogger(process.cwd());
102
+ try {
103
+ const root = process.cwd();
104
+ const distPrefix = path.join(root, 'dist');
105
+ validateModulePath(`${root}/dist/processors/processor-manager.js`, distPrefix);
106
+ validateModulePath(`${root}/dist/state/state-manager.js`, distPrefix);
107
+ validateModulePath(`${root}/dist/core/features-config.js`, distPrefix);
108
+ const procModule = await import(`${root}/dist/processors/processor-manager.js`);
109
+ const stateModule = await import(`${root}/dist/state/state-manager.js`);
110
+ const featuresModule = await import(`${root}/dist/core/features-config.js`);
111
+ _ProcessorManager = procModule.ProcessorManager;
112
+ _XrayStateManager = stateModule.XrayStateManager;
113
+ _featuresConfigLoader = featuresModule.featuresConfigLoader;
114
+ _detectTaskType = featuresModule.detectTaskType;
115
+ logger.log(`✅ Loaded from cwd/dist/`);
116
+ return;
117
+ }
118
+ catch (e) {
119
+ const message = e instanceof Error ? e.message : String(e);
120
+ logger.log(`❌ Failed to load from cwd/dist/: ${message}`);
121
+ }
122
+ const pluginPaths = ["0xray"];
123
+ for (const pluginPath of pluginPaths) {
124
+ try {
125
+ const nodeModulesPrefix = path.join(process.cwd(), 'node_modules');
126
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`, nodeModulesPrefix);
127
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`, nodeModulesPrefix);
128
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`, nodeModulesPrefix);
129
+ const pm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`);
130
+ const sm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`);
131
+ const fm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`);
132
+ _ProcessorManager = pm.ProcessorManager;
133
+ _XrayStateManager = sm.XrayStateManager;
134
+ _featuresConfigLoader = fm.featuresConfigLoader;
135
+ _detectTaskType = fm.detectTaskType;
136
+ logger.log(`✅ Loaded from node_modules/${pluginPath}/dist/`);
137
+ return;
138
+ }
139
+ catch (e) {
140
+ const message = e instanceof Error ? e.message : String(e);
141
+ logger.log(`❌ Failed to load from node_modules/${pluginPath}/dist/: ${message}`);
142
+ }
143
+ }
144
+ }
@@ -0,0 +1,88 @@
1
+ import * as fs from "fs";
2
+ export async function runEnforcerQualityGate(input, logger) {
3
+ const violations = [];
4
+ const { tool, args } = input;
5
+ try {
6
+ const { RuleEnforcer } = await import("../enforcement/rule-enforcer.js");
7
+ const ruleEnforcer = new RuleEnforcer();
8
+ const context = {
9
+ operation: tool === "write" ? "write" : tool === "edit" ? "edit" : "read",
10
+ };
11
+ if (args?.filePath) {
12
+ context.files = [args.filePath];
13
+ }
14
+ if (args?.content) {
15
+ context.newCode = args.content;
16
+ }
17
+ const report = await ruleEnforcer.validateOperation(tool, context);
18
+ const blockingViolations = [];
19
+ const allViolations = [];
20
+ if (report.errors && report.errors.length > 0) {
21
+ for (const error of report.errors) {
22
+ allViolations.push(error);
23
+ blockingViolations.push(error);
24
+ }
25
+ }
26
+ if (report.results) {
27
+ for (const result of report.results) {
28
+ if (!result.passed) {
29
+ const isBlocking = result.severity === "error" || result.severity === "blocking" || result.severity === "high";
30
+ allViolations.push(result.message);
31
+ if (isBlocking) {
32
+ blockingViolations.push(result.message);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ if (allViolations.length > 0) {
38
+ logger.log(`⚠️ ENFORCER: ${allViolations.length} rule violation(s) detected`);
39
+ for (const v of allViolations.slice(0, 5)) {
40
+ logger.log(` - ${v}`);
41
+ }
42
+ if (allViolations.length > 5) {
43
+ logger.log(` ... and ${allViolations.length - 5} more`);
44
+ }
45
+ }
46
+ const passed = blockingViolations.length === 0;
47
+ violations.push(...blockingViolations);
48
+ if (!passed) {
49
+ logger.error(`🚫 Quality Gate FAILED with ${blockingViolations.length} blocking violation(s)`);
50
+ }
51
+ else {
52
+ logger.log(`✅ Quality Gate PASSED (${allViolations.length} warning(s))`);
53
+ }
54
+ return { passed, violations };
55
+ }
56
+ catch (error) {
57
+ logger.log(`Warning: RuleEnforcer unavailable, using fallback checks: ${error instanceof Error ? error.message : String(error)}`);
58
+ if (tool === "write" && args?.filePath) {
59
+ const filePath = args.filePath;
60
+ if (filePath.endsWith(".ts") &&
61
+ !filePath.includes(".test.") &&
62
+ !filePath.includes(".spec.")) {
63
+ const testPath = filePath.replace(".ts", ".test.ts");
64
+ const specPath = filePath.replace(".ts", ".spec.ts");
65
+ if (!fs.existsSync(testPath) && !fs.existsSync(specPath)) {
66
+ violations.push(`tests-required: No test file found for ${filePath}`);
67
+ }
68
+ }
69
+ }
70
+ if (args?.content) {
71
+ const errorPatterns = [/console\.log\s*\(/g, /TODO\s*:/gi, /FIXME\s*:/gi];
72
+ for (const pattern of errorPatterns) {
73
+ if (pattern.test(args.content)) {
74
+ violations.push(`resolve-all-errors: Found error pattern in code`);
75
+ break;
76
+ }
77
+ }
78
+ }
79
+ const passed = violations.length === 0;
80
+ if (!passed) {
81
+ logger.error(`🚫 Fallback Quality Gate FAILED with ${violations.length} violation(s)`);
82
+ }
83
+ else {
84
+ logger.log(`✅ Fallback Quality Gate PASSED`);
85
+ }
86
+ return { passed, violations };
87
+ }
88
+ }
@@ -0,0 +1 @@
1
+ export {};