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
@@ -107,47 +107,41 @@ function getChangedFiles(count = 20) {
107
107
  }
108
108
 
109
109
  function loadConfig() {
110
- // Primary: .opencode/xray/ YML SSOT. Min legacy fallbacks for .opencode/strray/ + .strray/ (transitional consumer compat; documented per Term 61)
111
- const configPath = join(process.cwd(), ".opencode", "xray", "features.json");
112
- const fallbackPath = join(process.cwd(), ".opencode", "strray", "features.json");
113
- const legacyPath = join(process.cwd(), ".strray", "features.json");
114
-
115
- for (const p of [configPath, fallbackPath, legacyPath]) {
116
- if (existsSync(p)) {
117
- try {
118
- const content = readFileSync(p, "utf-8");
119
- const parsed = JSON.parse(content);
120
- if (parsed.auto_reflection) {
121
- return parsed.auto_reflection;
122
- }
123
- if (parsed.storytelling?.reflection_triggers) {
124
- // Legacy support - convert from storytelling config
125
- const triggers = parsed.storytelling.reflection_triggers;
126
- return {
127
- mode: "minimal",
128
- triggers: {
129
- commit_threshold: {
130
- enabled: triggers.commit_count?.enabled ?? true,
131
- threshold: triggers.commit_count?.threshold ?? 10,
132
- },
133
- time_threshold: {
134
- enabled: true,
135
- days: 7,
136
- },
110
+ const configPath = join(process.cwd(), ".xray", "features.json");
111
+
112
+ if (existsSync(configPath)) {
113
+ try {
114
+ const content = readFileSync(configPath, "utf-8");
115
+ const parsed = JSON.parse(content);
116
+ if (parsed.auto_reflection) {
117
+ return parsed.auto_reflection;
118
+ }
119
+ if (parsed.storytelling?.reflection_triggers) {
120
+ const triggers = parsed.storytelling.reflection_triggers;
121
+ return {
122
+ mode: "minimal",
123
+ triggers: {
124
+ commit_threshold: {
125
+ enabled: triggers.commit_count?.enabled ?? true,
126
+ threshold: triggers.commit_count?.threshold ?? 10,
137
127
  },
138
- thresholds: {
139
- full: { commit_threshold: 10, days_threshold: 5 },
140
- minimal: { commit_threshold: 25, days_threshold: 14 },
141
- off: { commit_threshold: 999, days_threshold: 365 },
128
+ time_threshold: {
129
+ enabled: true,
130
+ days: 7,
142
131
  },
143
- };
144
- }
145
- } catch {
146
- // ignore
132
+ },
133
+ thresholds: {
134
+ full: { commit_threshold: 10, days_threshold: 5 },
135
+ minimal: { commit_threshold: 25, days_threshold: 14 },
136
+ off: { commit_threshold: 999, days_threshold: 365 },
137
+ },
138
+ };
147
139
  }
140
+ } catch {
141
+ // ignore
148
142
  }
149
143
  }
150
-
144
+
151
145
  // Default config
152
146
  return {
153
147
  mode: "minimal",
@@ -147,7 +147,7 @@ async function main() {
147
147
  console.log(` Duration: ${(result.duration / 1000).toFixed(1)}s`);
148
148
  console.log("═══════════════════════════════════════\n");
149
149
 
150
- // v2 path under logs/ (fwLogger discipline) + .opencode/xray/
150
+ // v2 path under logs/ (fwLogger discipline) + .xray/
151
151
  const outputPath = path.join(process.cwd(), "logs", "framework", "governance-result.json");
152
152
  fs.mkdirSync(path.dirname(outputPath), { recursive: true });
153
153
  fs.writeFileSync(outputPath, JSON.stringify(result, null, 2));
@@ -34,6 +34,41 @@ if (fs.existsSync(agentsConsumer) && resolvedPackage !== resolvedTarget) {
34
34
  fs.copyFileSync(agentsConsumer, agentsDest);
35
35
  }
36
36
 
37
+ // Copy .gitignore.default → .gitignore (never overwrite existing)
38
+ const gitignoreSource = path.join(packageRoot, ".gitignore.default");
39
+ const gitignoreDest = path.join(targetDir, ".gitignore");
40
+ if (!fs.existsSync(gitignoreDest) && resolvedPackage !== resolvedTarget) {
41
+ fs.copyFileSync(gitignoreSource, gitignoreDest);
42
+ structuredLog('postinstall', 'Created .gitignore from template', 'info');
43
+ }
44
+
45
+ // Sync core skills from dist/ → .opencode/skills/
46
+ const skillsSource = path.join(packageRoot, 'dist', 'skills');
47
+ const skillsDest = path.join(targetDir, '.opencode', 'skills');
48
+ if (fs.existsSync(skillsSource) && resolvedPackage !== resolvedTarget) {
49
+ try {
50
+ if (!fs.existsSync(skillsDest)) fs.mkdirSync(skillsDest, { recursive: true });
51
+ const skillDirs = fs.readdirSync(skillsSource, { withFileTypes: true });
52
+ let copied = 0, skipped = 0;
53
+ for (const entry of skillDirs) {
54
+ if (!entry.isDirectory()) continue;
55
+ const skillMd = path.join(skillsSource, entry.name, 'SKILL.md');
56
+ if (!fs.existsSync(skillMd)) continue;
57
+ const destMd = path.join(skillsDest, entry.name, 'SKILL.md');
58
+ const destDir = path.dirname(destMd);
59
+ if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true });
60
+ if (fs.existsSync(destMd)) {
61
+ if (fs.statSync(skillMd).mtime <= fs.statSync(destMd).mtime) continue;
62
+ }
63
+ fs.copyFileSync(skillMd, destMd);
64
+ copied++;
65
+ }
66
+ if (copied > 0) structuredLog('postinstall', `Skills: ${copied} installed to .opencode/skills/`, 'info');
67
+ } catch (e) {
68
+ structuredLog('postinstall', `Skills sync skipped: ${e.message}`, 'warn');
69
+ }
70
+ }
71
+
37
72
  // Register MCP servers with Grok CLI (if available) using absolute paths to installed dist
38
73
  // Full v2 surface: governance + skills + orchestrator + enforcer (additive, preserves prior behavior)
39
74
  if (resolvedPackage !== resolvedTarget) {
@@ -41,12 +76,12 @@ if (resolvedPackage !== resolvedTarget) {
41
76
  execSync('which grok', { stdio: 'ignore' });
42
77
  const govServer = path.join(packageRoot, 'dist/mcps/governance.server.js');
43
78
  const skillsServer = path.join(packageRoot, 'dist/mcps/knowledge-skills/skill-invocation.server.js');
44
- const orchServer = path.join(packageRoot, 'dist/mcps/orchestrator/server.js');
79
+ const orchServer = path.join(packageRoot, 'dist/mcps/orchestrator.server.js');
45
80
  const enforcerServer = path.join(packageRoot, 'dist/mcps/enforcer-tools.server.js');
46
81
  const xrayRoot = targetDir;
47
82
 
48
83
  execSync(
49
- `grok mcp add xray-governance --command node --args "${govServer}" --env "STRRAY_FORCE_MCP_GOVERNANCE=true" --env "XRAY_ROOT=${xrayRoot}"`,
84
+ `grok mcp add xray-governance --command node --args "${govServer}" --env "XRAY_FORCE_MCP_GOVERNANCE=true" --env "XRAY_ROOT=${xrayRoot}"`,
50
85
  { stdio: 'pipe' }
51
86
  );
52
87
  structuredLog('postinstall', 'Registered xray-governance with Grok CLI', 'info');
@@ -98,7 +98,7 @@ async function main() {
98
98
  // This removes the brittle "must be exactly one ahead" problem.
99
99
  let publishedVersion;
100
100
  try {
101
- publishedVersion = execSync('npm view xray version', { encoding: 'utf-8' }).trim();
101
+ publishedVersion = execSync('npm view 0xray version', { encoding: 'utf-8' }).trim();
102
102
  console.log(`📌 Latest published on npm: ${publishedVersion}`);
103
103
  } catch {
104
104
  publishedVersion = '0.0.0';
@@ -154,7 +154,7 @@ async function main() {
154
154
 
155
155
  // Step 5: Push
156
156
  console.log('\n📦 Step 5: Pushing to origin...');
157
- runCommand('git push origin master', 'Failed to push to origin');
157
+ runCommand('git push origin main', 'Failed to push to origin');
158
158
  runCommand(`git push origin v${newVersion}`, 'Failed to push tag');
159
159
 
160
160
  // Step 6: Publish to npm
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * xAI OAuth PKCE setup — saves verifier to temp file so it survives aborts.
4
+ *
5
+ * Usage:
6
+ * node setup-xai-oauth.mjs # prints URL, waits for callback
7
+ * node setup-xai-oauth.mjs <code> # exchange previously gotten code
8
+ * node setup-xai-oauth.mjs daemon # non-blocking: prints URL & exits,
9
+ * # child server handles callback + deploy
10
+ */
11
+
12
+ import { randomBytes, createHash } from "node:crypto";
13
+ import { writeFileSync, readFileSync, unlinkSync, existsSync, mkdirSync } from "node:fs";
14
+ import { join } from "node:path";
15
+ import { homedir, tmpdir } from "node:os";
16
+ import { fork } from "node:child_process";
17
+ import http from "node:http";
18
+
19
+ const PORT = 56121;
20
+ const HERMES_AUTH_PATH = join(homedir(), ".hermes", "auth.json");
21
+ const VERIFIER_PATH = join(tmpdir(), "xray-xai-oauth-verifier.txt");
22
+ const XAI_AUTH_URL = "https://auth.x.ai/oauth2/authorize";
23
+ const XAI_TOKEN_URL = "https://auth.x.ai/oauth2/token";
24
+ const XAI_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
25
+ const REDIRECT_URI = `http://127.0.0.1:${PORT}/callback`;
26
+
27
+ function generateVerifier() {
28
+ return randomBytes(32).toString("base64")
29
+ .replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
30
+ }
31
+
32
+ function challenge(verifier) {
33
+ return createHash("sha256").update(verifier).digest()
34
+ .toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
35
+ }
36
+
37
+ function printUrl(verifier) {
38
+ const codeChallenge = challenge(verifier);
39
+ const state = randomBytes(16).toString("hex");
40
+ const nonce = randomBytes(16).toString("hex");
41
+
42
+ const params = new URLSearchParams({
43
+ response_type: "code",
44
+ client_id: XAI_CLIENT_ID,
45
+ redirect_uri: REDIRECT_URI,
46
+ scope: "openid profile email offline_access grok-cli:access api:access",
47
+ code_challenge: codeChallenge,
48
+ code_challenge_method: "S256",
49
+ state, nonce,
50
+ plan: "generic",
51
+ referrer: "hermes-agent",
52
+ }).toString();
53
+
54
+ console.log("\n========================================");
55
+ console.log(" xAI OAuth Setup");
56
+ console.log("========================================");
57
+ console.log("\nOpen this URL in your browser:\n");
58
+ console.log(` ${XAI_AUTH_URL}?${params}\n`);
59
+ console.log("Authorize → callback handled → token saved → Railway deployed.");
60
+ console.log("You can close the browser tab when it says ✅ Authorized.\n");
61
+ }
62
+
63
+ async function startServer(verifier) {
64
+ return new Promise((resolve, reject) => {
65
+ const server = http.createServer((req, res) => {
66
+ const url = new URL(req.url, `http://127.0.0.1:${PORT}`);
67
+
68
+ if (url.pathname === "/callback" && url.searchParams.has("code")) {
69
+ const code = url.searchParams.get("code");
70
+ res.writeHead(200, { "Content-Type": "text/html" });
71
+ res.end(wrapHtml("<h1>✅ Authorized!</h1><p>Token saved. Railway deploying. You can close this window.</p>"));
72
+ try { unlinkSync(VERIFIER_PATH); } catch {}
73
+ // Give response a moment to send, then close
74
+ setTimeout(() => { server.close(); resolve(code); }, 100);
75
+ return;
76
+ }
77
+
78
+ if (url.pathname === "/callback") {
79
+ res.writeHead(400);
80
+ res.end("Missing code parameter");
81
+ return;
82
+ }
83
+
84
+ res.writeHead(404, { "Content-Type": "text/html" });
85
+ res.end(wrapHtml("<h1>404</h1><p>This server only handles xAI OAuth callbacks.</p>"));
86
+ });
87
+
88
+ server.listen(PORT, "127.0.0.1", () => {
89
+ // Persist verifier so it survives script abort
90
+ writeFileSync(VERIFIER_PATH, verifier, "utf-8");
91
+ });
92
+
93
+ server.on("error", (err) => {
94
+ if (err.code === "EADDRINUSE") {
95
+ console.error(`Port ${PORT} is already in use.`);
96
+ }
97
+ reject(err);
98
+ });
99
+ });
100
+ }
101
+
102
+ function wrapHtml(body) {
103
+ return `<html><head><style>body{font-family:sans-serif;display:flex;justify-content:center;align-items:center;height:100vh;background:#0f172a;color:#e2e8f0;text-align:center}</style></head><body>${body}</body></html>`;
104
+ }
105
+
106
+ async function exchangeCode(code, verifier) {
107
+ const body = new URLSearchParams({
108
+ grant_type: "authorization_code",
109
+ code,
110
+ redirect_uri: REDIRECT_URI,
111
+ code_verifier: verifier,
112
+ client_id: XAI_CLIENT_ID,
113
+ });
114
+
115
+ const response = await fetch(XAI_TOKEN_URL, {
116
+ method: "POST",
117
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
118
+ body: body.toString(),
119
+ });
120
+
121
+ if (!response.ok) {
122
+ const text = await response.text();
123
+ throw new Error(`Token exchange failed (${response.status}): ${text}`);
124
+ }
125
+
126
+ return response.json();
127
+ }
128
+
129
+ function saveToken(tokens) {
130
+ const authData = {
131
+ "xai-oauth": {
132
+ access_token: tokens.access_token,
133
+ refresh_token: tokens.refresh_token,
134
+ expires_at: Math.floor(Date.now() / 1000) + (tokens.expires_in || 86400),
135
+ token_type: tokens.token_type || "Bearer",
136
+ scope: tokens.scope || "openid profile email offline_access grok-cli:access api:access",
137
+ },
138
+ };
139
+
140
+ mkdirSync(join(homedir(), ".hermes"), { recursive: true });
141
+ writeFileSync(HERMES_AUTH_PATH, JSON.stringify(authData, null, 2));
142
+
143
+ console.log(`\n✅ Token saved to ${HERMES_AUTH_PATH}`);
144
+ console.log(` Expires: ${new Date(Date.now() + (tokens.expires_in || 86400) * 1000).toISOString()}\n`);
145
+ return authData;
146
+ }
147
+
148
+ async function deployToRailway() {
149
+ const { execSync } = await import("node:child_process");
150
+ const authContent = readFileSync(HERMES_AUTH_PATH, "utf-8");
151
+ const base64 = Buffer.from(authContent).toString("base64");
152
+
153
+ console.log("Setting Railway env var XRAY_HERMES_AUTH...");
154
+
155
+ // Use Railway API to set the variable
156
+ const projectId = execSync("railway project --json 2>/dev/null || echo ''", { encoding: "utf-8" }).trim();
157
+ console.log("Project info:", projectId || "(no project info)");
158
+
159
+ // We need to set the var via Railway env edit API or similar
160
+ // For now, fall back to railway run with the var
161
+ try {
162
+ execSync(`railway env edit --json -v XRAY_HERMES_AUTH="${base64}" 2>/dev/null`, {
163
+ stdio: "inherit",
164
+ timeout: 15000,
165
+ });
166
+ } catch {
167
+ // env edit might not support --json; try railway up instead
168
+ console.log("Attempting deploy with implicit env...");
169
+ }
170
+
171
+ console.log("Deploying to Railway...");
172
+ try {
173
+ execSync("railway up --service governance", { stdio: "inherit", timeout: 120000 });
174
+ console.log("\n✅ Deployed to Railway!");
175
+ } catch (err) {
176
+ console.error("\n⚠️ Deploy failed:", err.message);
177
+ console.log("Token was saved locally. Deploy manually: railway up --service governance");
178
+ }
179
+ }
180
+
181
+ // ── Daemon mode (non-blocking) ──────────────────────────────
182
+ async function daemonMain() {
183
+ const verifier = generateVerifier();
184
+ printUrl(verifier);
185
+
186
+ try {
187
+ const code = await startServer(verifier);
188
+ try { unlinkSync(VERIFIER_PATH); } catch {}
189
+
190
+ console.log("Exchanging code for tokens...");
191
+ const tokens = await exchangeCode(code, verifier);
192
+ saveToken(tokens);
193
+ await deployToRailway();
194
+ } catch (err) {
195
+ console.error("\n❌ Failed:", err.message);
196
+ try { unlinkSync(VERIFIER_PATH); } catch {}
197
+ process.exit(1);
198
+ }
199
+ }
200
+
201
+ // ── Interactive mode (blocking for code exchange) ────────────
202
+ async function interactiveMain() {
203
+ const existingCode = process.argv[2];
204
+
205
+ let verifier;
206
+ if (existingCode) {
207
+ verifier = readFileSync(VERIFIER_PATH, "utf-8").trim();
208
+ console.log("Using saved verifier from", VERIFIER_PATH);
209
+ } else {
210
+ verifier = generateVerifier();
211
+ }
212
+
213
+ try {
214
+ const code = existingCode || await startServer(verifier);
215
+ try { unlinkSync(VERIFIER_PATH); } catch {}
216
+
217
+ console.log("Exchanging code for tokens...");
218
+ const tokens = await exchangeCode(code, verifier);
219
+ saveToken(tokens);
220
+ } catch (err) {
221
+ console.error("\n❌ Setup failed:", err.message);
222
+ process.exit(1);
223
+ }
224
+ }
225
+
226
+ // ── Entry ────────────────────────────────────────────────────
227
+ const isDaemon = process.argv[2] === "daemon";
228
+
229
+ if (isDaemon) {
230
+ // Fork a child process that runs the daemon so the parent can exit immediately
231
+ const child = fork(process.argv[1], ["_daemon"], {
232
+ stdio: ["ignore", "pipe", "pipe", "ipc"],
233
+ detached: true,
234
+ });
235
+ child.stdout.on("data", (d) => process.stdout.write(d));
236
+ child.stderr.on("data", (d) => process.stderr.write(d));
237
+ child.unref();
238
+ // Give child a moment to start and print the URL
239
+ setTimeout(() => process.exit(0), 500);
240
+ } else if (process.argv[2] === "_daemon") {
241
+ daemonMain();
242
+ } else {
243
+ interactiveMain();
244
+ }
@@ -13,6 +13,9 @@ if (__dirname.includes("node_modules/xray")) {
13
13
  targetDir = process.env.PWD || process.cwd();
14
14
  }
15
15
 
16
+ const resolvedPackage = path.resolve(packageRoot);
17
+ const resolvedTarget = path.resolve(targetDir);
18
+
16
19
  console.log("🔧 xray Setup: Full configuration...\n");
17
20
 
18
21
  const hasHermes = fs.existsSync(path.join(targetDir, ".hermes")) &&
@@ -211,4 +214,29 @@ if (fs.existsSync(hermesSkillSource)) {
211
214
  } catch (e) { console.warn(`⚠️ Hermes skill: ${e.message}`); }
212
215
  }
213
216
 
217
+ // 8. Deploy .xray/ config files (codex.json, features.json, config.json) for consumer installs
218
+ const xraySourceDir = path.join(packageRoot, ".xray");
219
+ const xrayTargetDir = path.join(targetDir, ".xray");
220
+ const CONFIG_FILES = ["codex.json", "features.json", "config.json"];
221
+
222
+ if (fs.existsSync(xraySourceDir) && resolvedPackage !== resolvedTarget) {
223
+ try {
224
+ if (!fs.existsSync(xrayTargetDir)) fs.mkdirSync(xrayTargetDir, { recursive: true });
225
+ let copied = 0;
226
+ for (const file of CONFIG_FILES) {
227
+ const src = path.join(xraySourceDir, file);
228
+ const dst = path.join(xrayTargetDir, file);
229
+ if (!fs.existsSync(src)) continue;
230
+ const shouldCopy = !fs.existsSync(dst) ||
231
+ fs.statSync(src).mtime > fs.statSync(dst).mtime;
232
+ if (shouldCopy) {
233
+ fs.copyFileSync(src, dst);
234
+ copied++;
235
+ }
236
+ }
237
+ if (copied > 0) console.log(`✅ .xray/: ${copied} config files deployed`);
238
+ else console.log("ℹ️ .xray/: up to date");
239
+ } catch (e) { console.warn(`⚠️ .xray/ deploy: ${e.message}`); }
240
+ }
241
+
214
242
  console.log("\n✅ xray setup complete.\n");
@@ -136,9 +136,9 @@ const CALCULATED_COUNTS = calculateCounts();
136
136
  const OFFICIAL_VERSIONS = {
137
137
  // Framework version
138
138
  framework: {
139
- version: "3.1.0",
139
+ version: "3.1.1",
140
140
  displayName: "xray: Self-Healing AI Governance OS",
141
- lastUpdated: "2026-06-15",
141
+ lastUpdated: "2026-06-17",
142
142
  // Counts (auto-calculated, but can be overridden)
143
143
  ...CALCULATED_COUNTS,
144
144
  },
@@ -327,29 +327,29 @@ const UPDATE_PATTERNS = [
327
327
  },
328
328
 
329
329
  // === BADGE AND COUNT PATTERNS ===
330
- // Test count in docs badge (e.g., tests-2527-brightgreen)
330
+ // Test count in docs badge (e.g., tests-2500-brightgreen)
331
331
  {
332
332
  pattern: /tests-[0-9]+(?=-brightgreen)/g,
333
333
  replacement: `tests-${OFFICIAL_VERSIONS.framework.tests}`,
334
334
  },
335
- // Test count in npm badge (e.g., tests-2527%20passed-brightgreen)
335
+ // Test count in npm badge (e.g., tests-2500%20passed-brightgreen)
336
336
  {
337
337
  pattern: /tests-[0-9,]+%20passed/g,
338
338
  replacement: `tests-${OFFICIAL_VERSIONS.framework.tests}%20passed`,
339
339
  },
340
- // Test count in prose (e.g., "2,2527 Tests" or "2527 Tests" but NOT in badge URLs)
340
+ // Test count in prose (e.g., "2,2500 Tests" or "2500 Tests" but NOT in badge URLs)
341
341
  {
342
342
  pattern: /(\*\s*✅\s*)([0-9]{1,3},?[0-9]{3})(\s*Tests)/g,
343
343
  replacement: (match, p1, p2, p3) => {
344
344
  return `${p1}${OFFICIAL_VERSIONS.framework.tests}${p3}`;
345
345
  },
346
346
  },
347
- // Test count in feature bullets (e.g., "✅ 2527 Tests")
347
+ // Test count in feature bullets (e.g., "✅ 2500 Tests")
348
348
  {
349
349
  pattern: /[0-9]+ Tests/g,
350
350
  replacement: `${OFFICIAL_VERSIONS.framework.tests} Tests`,
351
351
  },
352
- // Test count in config tree (e.g., "2527 tests")
352
+ // Test count in config tree (e.g., "2500 tests")
353
353
  {
354
354
  pattern: /[0-9]+ tests/g,
355
355
  replacement: `${OFFICIAL_VERSIONS.framework.tests} tests`,
@@ -384,7 +384,7 @@ const UPDATE_PATTERNS = [
384
384
  pattern: /xray AI v[0-9]+\.[0-9]+\.[0-9]+/g,
385
385
  replacement: `xray AI v${OFFICIAL_VERSIONS.framework.version}`,
386
386
  },
387
- // Footer bare version (e.g., "**Version**: 1.22.67")
387
+ // Footer bare version (e.g., "**Version**: 3.1.0")
388
388
  {
389
389
  pattern: /\*\*Version\*\*:\s*[0-9]+\.[0-9]+\.[0-9]+/g,
390
390
  replacement: `**Version**: ${OFFICIAL_VERSIONS.framework.version}`,
@@ -308,7 +308,7 @@ function updateAgentsMd(counts) {
308
308
 
309
309
  // Legacy header count update (min compat for old consumer AGENTS.md files only; xray v2 YML SSOT primary)
310
310
  agentsMd = agentsMd.replace(
311
- /0xRay\s*2\.0\s*-\s*\d+\s+Agents|StringRay\s*-\s*\d+\s+Agents/,
311
+ /0xRay\s*2\.0\s*-\s*\d+\s+Agents|0xRay\s*-\s*\d+\s+Agents/,
312
312
  `xray v2 - ${counts.agents} Agents`
313
313
  );
314
314
 
@@ -1,23 +1,35 @@
1
1
  {
2
2
  "mcpServers": {
3
- "0xray-governance": {
3
+ "xray-governance": {
4
4
  "command": "npx",
5
5
  "args": ["-y", "0xray", "mcp", "governance"],
6
6
  "env": {
7
7
  "XRAY_FORCE_MCP_GOVERNANCE": "true"
8
8
  }
9
9
  },
10
- "0xray-skills": {
10
+ "xray-skills": {
11
11
  "command": "npx",
12
12
  "args": ["-y", "0xray", "mcp", "skills"]
13
13
  },
14
- "0xray-orchestrator": {
14
+ "xray-orchestrator": {
15
15
  "command": "npx",
16
16
  "args": ["-y", "0xray", "mcp", "orchestrator"]
17
17
  },
18
- "0xray-enforcer": {
18
+ "xray-enforcer": {
19
19
  "command": "npx",
20
20
  "args": ["-y", "0xray", "mcp", "enforcer"]
21
+ },
22
+ "xray-researcher": {
23
+ "command": "npx",
24
+ "args": ["-y", "0xray", "mcp", "researcher"]
25
+ },
26
+ "xray-code-review": {
27
+ "command": "npx",
28
+ "args": ["-y", "0xray", "mcp", "code-review"]
29
+ },
30
+ "xray-architect-tools": {
31
+ "command": "npx",
32
+ "args": ["-y", "0xray", "mcp", "architect-tools"]
21
33
  }
22
34
  }
23
35
  }
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node",
10
10
  "args": [
11
- "${STRRAY_AI_PATH:-node_modules/0xray}/dist/integrations/grok/hooks/pre-tool-use.js"
11
+ "${XRAY_AI_PATH:-node_modules/0xray}/dist/integrations/grok/hooks/pre-tool-use.js"
12
12
  ],
13
13
  "timeout": 30000
14
14
  }
@@ -21,7 +21,7 @@
21
21
  {
22
22
  "type": "command",
23
23
  "command": "echo",
24
- "args": ["[0xRay] Grok session started with StringRay governance enabled"]
24
+ "args": ["[0xRay] Grok session started with 0xRay governance enabled"]
25
25
  }
26
26
  ]
27
27
  }
@@ -4,7 +4,6 @@
4
4
  * Resolves agent configurations from the 0xRay registry.
5
5
  * Used by the integration layer to programmatically access agent configs.
6
6
  *
7
- * @version 1.1.0
8
7
  * @since 2026-02-14
9
8
  */
10
9