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
@@ -10,30 +10,30 @@ import { join } from "path";
10
10
  import { getConfigDir } from "../../core/config-paths.js";
11
11
  function getSkillsFromSkills(cwd) {
12
12
  const skills = [];
13
- const skillsPath = join(getConfigDir(cwd), "skills");
14
- if (!existsSync(skillsPath)) {
15
- return skills;
16
- }
17
- const dirs = readdirSync(skillsPath).filter((f) => {
18
- const skillPath = join(skillsPath, f, "SKILL.md");
19
- return existsSync(skillPath);
20
- });
21
- for (const dir of dirs) {
22
- const skillPath = join(skillsPath, dir, "SKILL.md");
23
- const content = readFileSync(skillPath, "utf-8");
24
- const sourceMatch = content.match(/^source:\s*(.+)/m);
25
- const sourceNameMatch = content.match(/^source_name:\s*(.+)/m);
26
- const licenseMatch = content.match(/License:\s*(.+)/m);
27
- const rawName = dir.includes("--") ? dir.split("--").slice(1).join("--") : dir;
28
- const communitySource = sourceNameMatch ? sourceNameMatch[1].trim() : null;
29
- skills.push({
30
- name: rawName,
31
- source: sourceMatch && sourceMatch[1] ? sourceMatch[1].trim() : "custom",
32
- communitySource,
33
- license: licenseMatch ? licenseMatch[1].trim() : "unknown",
34
- category: extractCategory(content),
35
- path: skillPath,
13
+ for (const skillsPath of [join(getConfigDir(cwd), "skills"), join(cwd, ".opencode", "skills")]) {
14
+ if (!existsSync(skillsPath))
15
+ continue;
16
+ const dirs = readdirSync(skillsPath).filter((f) => {
17
+ const skillPath = join(skillsPath, f, "SKILL.md");
18
+ return existsSync(skillPath);
36
19
  });
20
+ for (const dir of dirs) {
21
+ const skillPath = join(skillsPath, dir, "SKILL.md");
22
+ const content = readFileSync(skillPath, "utf-8");
23
+ const sourceMatch = content.match(/^source:\s*(.+)/m);
24
+ const sourceNameMatch = content.match(/^source_name:\s*(.+)/m);
25
+ const licenseMatch = content.match(/License:\s*(.+)/m);
26
+ const rawName = dir.includes("--") ? dir.split("--").slice(1).join("--") : dir;
27
+ const communitySource = sourceNameMatch ? sourceNameMatch[1].trim() : null;
28
+ skills.push({
29
+ name: rawName,
30
+ source: sourceMatch && sourceMatch[1] ? sourceMatch[1].trim() : "custom",
31
+ communitySource,
32
+ license: licenseMatch ? licenseMatch[1].trim() : "unknown",
33
+ category: extractCategory(content),
34
+ path: skillPath,
35
+ });
36
+ }
37
37
  }
38
38
  return skills;
39
39
  }
@@ -5,7 +5,6 @@
5
5
  * Archives log files without requiring framework boot.
6
6
  * Used by git hooks to prevent log truncation.
7
7
  *
8
- * @version 1.0.0
9
8
  */
10
9
  import * as fs from "fs";
11
10
  import * as path from "path";
@@ -60,7 +60,7 @@ function showNotImplemented() {
60
60
  console.log("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
61
61
  console.log("");
62
62
  console.log("💡 To be notified when this feature is available:");
63
- console.log(" Track the evolution spec at docs/roadmap/STRINGRAY_EVOLUTION_SPEC.md");
63
+ console.log(" Track the evolution spec at docs/roadmap/XRAY_EVOLUTION_SPEC.md");
64
64
  console.log("");
65
65
  console.log("🔜 Roadmap: Phase 3 (Polishing & Release)");
66
66
  console.log("");
@@ -2,6 +2,7 @@ import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { frameworkLogger } from '../../core/framework-logger.js';
5
+ import { syncBuiltinSkills } from './skill-install.js';
5
6
  const __dirname = path.dirname(new URL(import.meta.url).pathname);
6
7
  export function registerHermesCommands(hermesCmd) {
7
8
  hermesCmd
@@ -49,6 +50,13 @@ async function installForHermes(options = {}) {
49
50
  }
50
51
  frameworkLogger.log('hermes-integration', 'plugin-copied', 'info', { destination: targetPluginDir });
51
52
  console.log(`\x1b[32m✓ Copied Hermes plugin to ${targetPluginDir}\x1b[0m`);
53
+ // Sync builtin skills to Hermes plugin skills dir
54
+ const hermesSkillsDir = path.join(targetPluginDir, 'skills');
55
+ const skillsCopied = syncBuiltinSkills(hermesSkillsDir);
56
+ if (skillsCopied > 0) {
57
+ console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to Hermes plugin\x1b[0m`);
58
+ }
59
+ frameworkLogger.log('hermes-integration', 'skills-synced', 'info', { count: skillsCopied });
52
60
  // Write after-install instructions
53
61
  const afterInstallPath = path.join(targetPluginDir, 'after-install.md');
54
62
  if (fs.existsSync(afterInstallPath)) {
@@ -3,7 +3,7 @@ import { join, dirname } from "path";
3
3
  import { execSync } from "child_process";
4
4
  import { getConfigDir } from "../../core/config-paths.js";
5
5
  function getMCPConfigPath() {
6
- return join(process.cwd(), ".opencode", "xray", "mcp-registry.json");
6
+ return join(process.cwd(), ".xray", "mcp-registry.json");
7
7
  }
8
8
  function getBundledMCPRegistry() {
9
9
  const paths = [
@@ -1,6 +1,8 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
+ import { homedir } from 'os';
3
4
  import { frameworkLogger } from '../../core/framework-logger.js';
5
+ import { syncBuiltinSkills } from './skill-install.js';
4
6
  import { OpenClawConfigLoader } from '../../integrations/openclaw/config.js';
5
7
  export function registerOpenClawCommands(openclawCmd) {
6
8
  openclawCmd
@@ -29,6 +31,13 @@ async function installForOpenClaw(options = {}) {
29
31
  loader.createSampleConfig();
30
32
  const relative = path.relative(process.cwd(), configPath);
31
33
  console.log(`\x1b[32m✓ Created OpenClaw config at ${relative}\x1b[0m`);
34
+ // Sync builtin skills to ~/.openclaw/skills/
35
+ const openclawSkillsDir = path.join(homedir(), '.openclaw', 'skills');
36
+ const skillsCopied = syncBuiltinSkills(openclawSkillsDir);
37
+ if (skillsCopied > 0) {
38
+ console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to ~/.openclaw/skills/\x1b[0m`);
39
+ }
40
+ frameworkLogger.log('openclaw-integration', 'skills-synced', 'info', { count: skillsCopied });
32
41
  console.log('\n✅ 0xRay OpenClaw integration configured!');
33
42
  console.log('Edit the config file to set your gateway URL, auth token, and device ID.');
34
43
  console.log('');
@@ -1,6 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import { frameworkLogger } from '../../core/framework-logger.js';
4
+ import { syncBuiltinSkills } from './skill-install.js';
4
5
  const __dirname = path.dirname(new URL(import.meta.url).pathname);
5
6
  export function registerOpencodeCommands(opencodeCmd) {
6
7
  opencodeCmd
@@ -80,6 +81,20 @@ async function installForOpencode(options = {}) {
80
81
  return;
81
82
  }
82
83
  try {
84
+ // Auto-create package.json if missing (OpenCode requires it)
85
+ const consumerPkgPath = path.join(process.cwd(), 'package.json');
86
+ if (!fs.existsSync(consumerPkgPath)) {
87
+ const pkg = {
88
+ name: path.basename(process.cwd()),
89
+ version: '1.0.0',
90
+ private: true,
91
+ dependencies: {
92
+ '0xray': '*',
93
+ },
94
+ };
95
+ fs.writeFileSync(consumerPkgPath, JSON.stringify(pkg, null, 2) + '\n');
96
+ console.log(`\x1b[32m✓ Created package.json with 0xray dependency\x1b[0m`);
97
+ }
83
98
  if (fs.existsSync(opencodeDest) && !options.force) {
84
99
  console.log('[Opencode] .opencode/ directory already exists.');
85
100
  console.log('Use --force to reinstall.');
@@ -87,6 +102,26 @@ async function installForOpencode(options = {}) {
87
102
  }
88
103
  copyDir(opencodeSource, opencodeDest);
89
104
  frameworkLogger.log('opencode-integration', 'opencode-copied', 'info', { destination: opencodeDest });
105
+ // Copy plugin from dist/ to .opencode/plugin/
106
+ const pluginSource = path.join(__dirname, '..', '..', '..', 'dist', 'plugin', 'xray-codex-injection.js');
107
+ const pluginDest = path.join(opencodeDest, 'plugin', 'xray-codex-injection.js');
108
+ if (fs.existsSync(pluginSource)) {
109
+ const pluginDestDir = path.dirname(pluginDest);
110
+ if (!fs.existsSync(pluginDestDir))
111
+ fs.mkdirSync(pluginDestDir, { recursive: true });
112
+ fs.copyFileSync(pluginSource, pluginDest);
113
+ console.log(`\x1b[32m✓ Copied plugin to .opencode/plugin/\x1b[0m`);
114
+ }
115
+ else {
116
+ console.log('ℹ️ Plugin source not found (build may be needed)');
117
+ }
118
+ // Sync builtin skills to .opencode/skills/
119
+ const opencodeSkillsDir = path.join(opencodeDest, 'skills');
120
+ const skillsCopied = syncBuiltinSkills(opencodeSkillsDir);
121
+ if (skillsCopied > 0) {
122
+ console.log(`\x1b[32m✓ Synced ${skillsCopied} builtin skills to .opencode/skills/\x1b[0m`);
123
+ }
124
+ frameworkLogger.log('opencode-integration', 'skills-synced', 'info', { count: skillsCopied });
90
125
  console.log(`\x1b[32m✓ Copied OpenCode config to .opencode/\x1b[0m`);
91
126
  console.log('\n✅ 0xRay OpenCode plugin installed!');
92
127
  console.log('Restart OpenCode or run `opencode` to load the plugin.');
@@ -9,7 +9,6 @@
9
9
  * - plugin status
10
10
  * - plugin uninstall
11
11
  *
12
- * @version 1.1.0
13
12
  */
14
13
  import * as fs from "fs";
15
14
  import * as path from "path";
@@ -1,8 +1,9 @@
1
- import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, cpSync, rmSync, statSync, unlinkSync } from "fs";
1
+ import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, cpSync, rmSync, statSync, unlinkSync, copyFileSync } from "fs";
2
2
  import { join, basename, dirname } from "path";
3
+ import { fileURLToPath } from "url";
3
4
  import { execSync } from "child_process";
4
5
  function getLocalRegistryPath() {
5
- return join(process.cwd(), ".opencode", "xray", "skill-registry.json");
6
+ return join(process.cwd(), ".xray", "skill-registry.json");
6
7
  }
7
8
  function getBundledRegistry() {
8
9
  const paths = [
@@ -479,3 +480,39 @@ export async function skillRegistryCommand(action, args) {
479
480
  console.log(` Unknown action: ${action}`);
480
481
  console.log(" Usage: npx 0xray skill:registry [list|add|remove]");
481
482
  }
483
+ // ── Cross-platform builtin skill sync ────────────────────────────────
484
+ // Each platform's install command calls this to copy framework skills.
485
+ export function syncBuiltinSkills(targetSkillsDir, packageRoot) {
486
+ const root = packageRoot ?? join(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
487
+ const candidateDirs = [
488
+ join(root, "dist", "skills"),
489
+ join(root, "src", "skills"),
490
+ ];
491
+ const sourceDir = candidateDirs.find(existsSync);
492
+ if (!sourceDir)
493
+ return 0;
494
+ let copied = 0;
495
+ try {
496
+ if (!existsSync(targetSkillsDir))
497
+ mkdirSync(targetSkillsDir, { recursive: true });
498
+ for (const entry of readdirSync(sourceDir, { withFileTypes: true })) {
499
+ if (!entry.isDirectory())
500
+ continue;
501
+ const skillMd = join(sourceDir, entry.name, "SKILL.md");
502
+ if (!existsSync(skillMd))
503
+ continue;
504
+ const destMd = join(targetSkillsDir, entry.name, "SKILL.md");
505
+ const destDir = dirname(destMd);
506
+ if (!existsSync(destDir))
507
+ mkdirSync(destDir, { recursive: true });
508
+ if (existsSync(destMd) && statSync(skillMd).mtime <= statSync(destMd).mtime)
509
+ continue;
510
+ copyFileSync(skillMd, destMd);
511
+ copied++;
512
+ }
513
+ }
514
+ catch {
515
+ // best-effort
516
+ }
517
+ return copied;
518
+ }
@@ -13,6 +13,7 @@
13
13
  import { readdirSync, existsSync, readFileSync } from "fs";
14
14
  import { join } from "path";
15
15
  import { getConfigDir } from "../../core/config-paths.js";
16
+ import { featuresConfigLoader } from "../../core/features-config.js";
16
17
  function getSkillsList(cwd) {
17
18
  const skills = [];
18
19
  const configDir = getConfigDir(cwd);
@@ -26,6 +27,11 @@ function getSkillsList(cwd) {
26
27
  const skillDirs = readdirSync(skillsPath).filter((f) => existsSync(join(skillsPath, f, "SKILL.md")));
27
28
  skills.push(...skillDirs);
28
29
  }
30
+ const opencodeSkillsPath = join(cwd, ".opencode", "skills");
31
+ if (existsSync(opencodeSkillsPath)) {
32
+ const skillDirs = readdirSync(opencodeSkillsPath).filter((f) => existsSync(join(opencodeSkillsPath, f, "SKILL.md")));
33
+ skills.push(...skillDirs);
34
+ }
29
35
  const uniqueSkills = [...new Set(skills)];
30
36
  return { count: uniqueSkills.length, names: uniqueSkills.sort() };
31
37
  }
@@ -51,21 +57,18 @@ function getAgentsList(cwd) {
51
57
  }
52
58
  catch { /* ignore */ }
53
59
  }
54
- const featuresPath = join(configDir, "xray", "features.json");
55
- if (existsSync(featuresPath)) {
56
- try {
57
- const features = JSON.parse(readFileSync(featuresPath, "utf-8"));
58
- if (features.agent_management?.disabled_agents) {
59
- const disabled = features.agent_management.disabled_agents;
60
- agentsFromSkills.forEach((agent) => {
61
- if (!disabled.includes(agent) && !configuredAgents.includes(agent)) {
62
- configuredAgents.push(agent);
63
- }
64
- });
65
- }
60
+ try {
61
+ const features = featuresConfigLoader.loadConfig();
62
+ if (features.agent_management?.disabled_agents) {
63
+ const disabled = features.agent_management.disabled_agents;
64
+ agentsFromSkills.forEach((agent) => {
65
+ if (!disabled.includes(agent) && !configuredAgents.includes(agent)) {
66
+ configuredAgents.push(agent);
67
+ }
68
+ });
66
69
  }
67
- catch { /* ignore */ }
68
70
  }
71
+ catch { /* ignore */ }
69
72
  if (configuredAgents.length === 0) {
70
73
  configuredAgents.push(...agentsFromSkills);
71
74
  }
@@ -16,8 +16,8 @@ import { execSync } from "child_process";
16
16
  const STORY_TYPES = ["reflection", "saga", "journey", "narrative"];
17
17
  function loadConfig(cwd) {
18
18
  const candidates = [
19
- join(cwd, ".opencode", "strray", "features.json"),
20
19
  join(cwd, ".xray", "features.json"),
20
+ join(cwd, ".opencode", "xray", "features.json"),
21
21
  ];
22
22
  for (const path of candidates) {
23
23
  if (existsSync(path)) {
package/dist/cli/index.js CHANGED
@@ -381,15 +381,10 @@ program
381
381
  // Dynamic import to avoid loading analytics module unless needed
382
382
  const { SimplePatternAnalyzer } = await import("../analytics/simple-pattern-analyzer.js");
383
383
  // Get default limit from features.json
384
- const fs = await import("fs");
385
- const path = await import("path");
386
384
  let defaultLimit = 500;
387
385
  try {
388
- const featuresPath = path.join(process.cwd(), ".opencode", "plugins", "features.json"); // plain xray primary (min compat .xray/ handled in getConfigDir per Scope Rule)
389
- if (fs.existsSync(featuresPath)) {
390
- const features = JSON.parse(fs.readFileSync(featuresPath, "utf-8"));
391
- defaultLimit = features.analytics?.default_limit || 500;
392
- }
386
+ const { featuresConfigLoader } = await import("../core/features-config.js");
387
+ defaultLimit = featuresConfigLoader.loadConfig().analytics?.default_limit ?? 500;
393
388
  }
394
389
  catch { /* use default */ }
395
390
  const analyzer = new SimplePatternAnalyzer();
@@ -453,14 +448,14 @@ program
453
448
  // Check configuration - check for opencode.json or .xray/ (min compat .xray/ fallback for prior 0xRay consumer runtime per Scope Rule; plain xray primary)
454
449
  const cwd = process.cwd();
455
450
  const opencodeConfigPath = path.join(cwd, "opencode.json");
456
- const strrayDir = getConfigDir(cwd);
451
+ const xrayDir = getConfigDir(cwd);
457
452
  const opencodeExists = fs.existsSync(opencodeConfigPath);
458
- const configDirExists = fs.existsSync(strrayDir);
453
+ const configDirExists = fs.existsSync(xrayDir);
459
454
  if (opencodeExists) {
460
455
  console.log("✅ opencode configuration found");
461
456
  }
462
457
  else if (configDirExists) {
463
- console.log(`✅ Configuration directory found: ${strrayDir}`);
458
+ console.log(`✅ Configuration directory found: ${xrayDir}`);
464
459
  }
465
460
  else {
466
461
  console.log("ℹ️ No opencode.json or config directory found (run: npx xray fix to create)");
@@ -865,15 +860,20 @@ program
865
860
  program
866
861
  .command('mcp')
867
862
  .description('Run an MCP server subprocess (used by Grok/OpenCode .mcp.json)')
868
- .argument('<server>', 'Server name: governance or skills')
863
+ .argument('<server>', 'Server name: governance, skills, researcher, code-review, architect-tools, enforcer, orchestrator')
869
864
  .action(async (server) => {
870
865
  const serverMap = {
871
866
  governance: 'dist/mcps/governance.server.js',
872
867
  skills: 'dist/mcps/knowledge-skills/skill-invocation.server.js',
868
+ researcher: 'dist/mcps/researcher.server.js',
869
+ 'code-review': 'dist/mcps/knowledge-skills/code-review.server.js',
870
+ 'architect-tools': 'dist/mcps/architect-tools.server.js',
871
+ enforcer: 'dist/mcps/enforcer-tools.server.js',
872
+ orchestrator: 'dist/mcps/orchestrator.server.js',
873
873
  };
874
874
  const relPath = serverMap[server];
875
875
  if (!relPath) {
876
- console.error(`Unknown MCP server: ${server}. Use: governance, skills`);
876
+ console.error(`Unknown MCP server: ${server}. Use: governance, skills, researcher, code-review, architect-tools, enforcer, orchestrator`);
877
877
  process.exit(1);
878
878
  }
879
879
  const serverPath = resolve(join(packageRoot, relPath));
@@ -883,7 +883,8 @@ program
883
883
  }
884
884
  const env = { ...process.env };
885
885
  if (server === 'governance') {
886
- env.STRRAY_FORCE_MCP_GOVERNANCE = 'true';
886
+ env.XRAY_FORCE_MCP_GOVERNANCE = 'true';
887
+ env.XRAY_FORCE_MCP_GOVERNANCE = 'true';
887
888
  }
888
889
  const child = spawn(process.execPath, [serverPath], { stdio: 'inherit', env });
889
890
  child.on('exit', (code) => process.exit(code ?? 0));
@@ -9,11 +9,10 @@
9
9
  * - Test results
10
10
  *
11
11
  * Enable/Disable via:
12
- * STRRAY_ACTIVITY_LOGGING=true (enable)
13
- * STRRAY_ACTIVITY_LOGGING=false (disable, default)
12
+ * XRAY_ACTIVITY_LOGGING=true (enable)
13
+ * XRAY_ACTIVITY_LOGGING=false (disable, default)
14
14
  *
15
15
  * @module core/activity-logger
16
- * @version 1.0.0
17
16
  */
18
17
  import * as fs from "fs";
19
18
  import * as path from "path";
@@ -21,7 +20,7 @@ import * as zlib from "zlib";
21
20
  import { frameworkLogger } from "./framework-logger.js";
22
21
  const MAX_LOG_SIZE_BYTES = 5 * 1024 * 1024; // 5MB before rotation
23
22
  // Global state
24
- let activityLoggerEnabled = process.env.STRRAY_ACTIVITY_LOGGING !== "false";
23
+ let activityLoggerEnabled = process.env.XRAY_ACTIVITY_LOGGING !== "false";
25
24
  let activityLogPath;
26
25
  let sessionId;
27
26
  let sessionStartTime;
@@ -184,7 +183,7 @@ export function logActivity(category, level, action, message, details, options)
184
183
  // Write to report JSON
185
184
  writeToReportFile(record);
186
185
  // Console output for debug mode
187
- if (process.env.STRRAY_ACTIVITY_CONSOLE === "true") {
186
+ if (process.env.XRAY_ACTIVITY_CONSOLE === "true") {
188
187
  frameworkLogger.log("activity-logger", "console-output", "info", { message: `[${record.timestamp}] [${record.category}] ${level.toUpperCase()}: ${message}`, details: details || "" });
189
188
  }
190
189
  }
@@ -4,7 +4,6 @@
4
4
  * Composes with existing Kernel to add self-modifying pattern learning capabilities.
5
5
  * Enables continuous pattern improvement based on performance data.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-03-05
9
8
  */
10
9
  import { getKernel } from "../core/kernel-patterns.js";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Agent Spawn Gate — Singleton (provider-agnostic)
3
3
  *
4
- * CENTRALIZED CONTROL for all agent process spawning across StringRay
4
+ * CENTRALIZED CONTROL for all agent process spawning across 0xRay
5
5
  * (OpenCode, Hermes, or any other MCP-compatible host).
6
6
  *
7
7
  * Purpose:
@@ -1,15 +1,13 @@
1
1
  /**
2
- * Boot Orchestrator (min documented consumer runtime compat shim from prior 0xRay releases; primary Xray* paths + XRAY_||STRRAY_ env + .xray fallbacks only; 1-line per Scope Rule).
2
+ * Boot Orchestrator (min documented consumer runtime compat shim from prior 0xRay releases; primary Xray paths + .xray fallbacks only; 1-line per Scope Rule).
3
3
  */
4
4
  import { XrayContextLoader } from "./context-loader.js";
5
5
  import { XrayStateManager } from "../state/state-manager.js";
6
6
  import { ProcessorManager } from "../processors/processor-manager.js";
7
7
  import { pathResolver } from "../utils/path-resolver.js";
8
- import * as fs from "fs";
9
8
  import * as path from "path";
10
- const { existsSync, readFileSync } = fs;
11
9
  // Path configuration - can be overridden by environment or use path resolver
12
- const AGENTS_BASE_PATH = process.env.XRAY_AGENTS_PATH || process.env.STRRAY_AGENTS_PATH || "../agents";
10
+ const AGENTS_BASE_PATH = process.env.XRAY_AGENTS_PATH || process.env.XRAY_AGENTS_PATH || "../agents";
13
11
  import { createAgentDelegator, createSessionCoordinator, } from "../delegation/index.js";
14
12
  import { createSessionCleanupManager } from "../session/session-cleanup-manager.js";
15
13
  import { createSessionMonitor } from "../session/session-monitor.js";
@@ -20,7 +18,7 @@ import { frameworkLogger } from "../core/framework-logger.js";
20
18
  import { featuresConfigLoader } from "../core/features-config.js";
21
19
  import { memoryMonitor } from "../monitoring/memory-monitor.js";
22
20
  import { advancedProfiler } from "../monitoring/advanced-profiler.js";
23
- import { strRayConfigLoader } from "./config-loader.js";
21
+ import { xrayConfigLoader } from "./config-loader.js";
24
22
  import { PluginRegistry } from "../integrations/plugins/index.js";
25
23
  import { PluginServerConfigRegistry } from "../mcps/config/index.js";
26
24
  import { initializeGovernanceIntegration } from "../integrations/governance/index.js";
@@ -47,7 +45,7 @@ function setupGracefulShutdown() {
47
45
  }
48
46
  catch (error) {
49
47
  // Suppress error output in CLI mode to avoid breaking interface
50
- if (process.env.STRRAY_CLI_MODE !== "true" &&
48
+ if (process.env.XRAY_CLI_MODE !== "true" &&
51
49
  process.env.OPENCODE_CLI !== "true") {
52
50
  frameworkLogger.log("boot-orchestrator", "shutdown-error", "error", { error, message: "Error during graceful shutdown" });
53
51
  }
@@ -69,7 +67,7 @@ function setupGracefulShutdown() {
69
67
  // Handle uncaught exceptions that might cause JSON parsing errors
70
68
  process.on("uncaughtException", (error) => {
71
69
  // Suppress error output in CLI mode to avoid breaking interface
72
- if (process.env.STRRAY_CLI_MODE !== "true" &&
70
+ if (process.env.XRAY_CLI_MODE !== "true" &&
73
71
  process.env.OPENCODE_CLI !== "true") {
74
72
  frameworkLogger.log("boot-orchestrator", "uncaught-exception", "error", { error, message: "Uncaught Exception" });
75
73
  }
@@ -79,7 +77,7 @@ function setupGracefulShutdown() {
79
77
  });
80
78
  process.on("unhandledRejection", (reason, promise) => {
81
79
  // Suppress error output in CLI mode to avoid breaking interface
82
- if (process.env.STRRAY_CLI_MODE !== "true" &&
80
+ if (process.env.XRAY_CLI_MODE !== "true" &&
83
81
  process.env.OPENCODE_CLI !== "true") {
84
82
  frameworkLogger.log("boot-orchestrator", "unhandled-rejection", "error", { promise, reason, message: "Unhandled Rejection" });
85
83
  }
@@ -115,7 +113,7 @@ export class BootOrchestrator {
115
113
  */
116
114
  async initializeDelegationSystem() {
117
115
  try {
118
- const agentDelegator = createAgentDelegator(this.stateManager, strRayConfigLoader);
116
+ const agentDelegator = createAgentDelegator(this.stateManager, xrayConfigLoader);
119
117
  this.stateManager.set("delegation:agent_delegator", agentDelegator);
120
118
  const sessionCoordinator = createSessionCoordinator(this.stateManager);
121
119
  this.stateManager.set("delegation:session_coordinator", sessionCoordinator);
@@ -130,19 +128,10 @@ export class BootOrchestrator {
130
128
  }
131
129
  loadProcessorsConfig() {
132
130
  try {
133
- const configPaths = [
134
- path.join(process.cwd(), ".xray", "features.json"),
135
- path.join(process.cwd(), ".opencode", "xray", "features.json"),
136
- ];
137
- for (const configPath of configPaths) {
138
- if (existsSync(configPath)) {
139
- const config = JSON.parse(readFileSync(configPath, "utf-8"));
140
- return config.processors || null;
141
- }
142
- }
131
+ return featuresConfigLoader.loadConfig().processors ?? null;
143
132
  }
144
133
  catch {
145
- // ignore - use defaults
134
+ // use defaults
146
135
  }
147
136
  return null;
148
137
  }
@@ -189,7 +178,7 @@ export class BootOrchestrator {
189
178
  });
190
179
  return false;
191
180
  }
192
- const orchestratorInstance = orchestratorModule.strRayOrchestrator;
181
+ const orchestratorInstance = orchestratorModule.xrayOrchestrator;
193
182
  if (!orchestratorInstance) {
194
183
  frameworkLogger.log("boot-orchestrator", "orchestrator-not-found", "error", { message: "Orchestrator instance not found in module" });
195
184
  return false;
@@ -596,7 +585,7 @@ export class BootOrchestrator {
596
585
  };
597
586
  try {
598
587
  frameworkLogger.log("boot-orchestrator", "loading xray configuration", "info", { jobId });
599
- // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + XRAY_||STRRAY_ env + .xray fallbacks)
588
+ // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
600
589
  await this.loadXrayConfiguration(jobId);
601
590
  frameworkLogger.log("boot-orchestrator", "xray configuration loaded", "success", { jobId });
602
591
  // Phase 1: Initialize core systems
@@ -727,12 +716,12 @@ export class BootOrchestrator {
727
716
  this.stateManager.set("boot:errors", result.errors);
728
717
  return result;
729
718
  }
730
- // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + XRAY_||STRRAY_ env + .xray fallbacks)
719
+ // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
731
720
  async loadXrayConfiguration(jobId) {
732
721
  try {
733
- // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + XRAY_||STRRAY_ env + .xray fallbacks)
722
+ // Consumer runtime compat shim from prior 0xRay releases (1-line min per Scope Rule; primary xray paths + .xray fallbacks)
734
723
  const xrayConfig = {
735
- version: "1.22.67",
724
+ version: "3.1.0",
736
725
  codex_enabled: true,
737
726
  codex_version: "v1.7.5",
738
727
  codex_terms: [
@@ -33,7 +33,6 @@
33
33
  * node bridge.mjs --http --port 18431 --cwd /path
34
34
  * curl -X POST http://localhost:18431 -d '{"command":"get-codex-prompt"}'
35
35
  *
36
- * @version 1.0.0
37
36
  * @since 2026-03-28
38
37
  */
39
38
 
@@ -69,7 +68,7 @@ let frameworkLoadAttempted = false;
69
68
  // ============================================================================
70
69
 
71
70
  function findProjectRoot() {
72
- const envHome = process.env.STRRAY_HOME;
71
+ const envHome = process.env.XRAY_HOME;
73
72
  if (envHome && existsSync(join(envHome, "package.json"))) return envHome;
74
73
 
75
74
  const candidates = [
@@ -219,7 +218,7 @@ async function handleHealth(input) {
219
218
  */
220
219
  /** Codex candidate paths — single source of truth for both loadCodexFromFs and handleGetConfig */
221
220
  function getCodexCandidates(projectRoot) {
222
- const envDir = process.env.STRRAY_CONFIG_DIR;
221
+ const envDir = process.env.XRAY_CONFIG_DIR;
223
222
  const candidates = [];
224
223
  if (envDir) candidates.push(join(projectRoot, envDir, "codex.json"));
225
224
  candidates.push(join(projectRoot, ".xray", "codex.json"));
@@ -747,8 +746,8 @@ function startHttpServer(port, projectRoot) {
747
746
 
748
747
  return new Promise((resolve, reject) => {
749
748
  const server = createServer(async (req, res) => {
750
- // CORS headers (wildcard — restrict via STRRAY_HTTP_CORS_ORIGIN env var in production)
751
- const corsOrigin = process.env.STRRAY_HTTP_CORS_ORIGIN || "*";
749
+ // CORS headers (wildcard — restrict via XRAY_HTTP_CORS_ORIGIN env var in production)
750
+ const corsOrigin = process.env.XRAY_HTTP_CORS_ORIGIN || "*";
752
751
  res.setHeader("Content-Type", "application/json");
753
752
  res.setHeader("Access-Control-Allow-Origin", corsOrigin);
754
753
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
@@ -13,7 +13,6 @@
13
13
  * const prompt = formatCodexPrompt({ projectRoot: '/path' });
14
14
  * // Append to system prompt
15
15
  *
16
- * @version 1.0.0
17
16
  * @since 2026-03-28
18
17
  */
19
18
  import { readFileSync, existsSync } from "fs";
@@ -84,13 +83,12 @@ export const BUILTIN_CODEX = {
84
83
  */
85
84
  export function findCodexPath(projectRoot) {
86
85
  const root = projectRoot || process.cwd();
87
- const envDir = process.env.STRRAY_CONFIG_DIR;
86
+ const envDir = process.env.XRAY_CONFIG_DIR;
88
87
  const candidates = [];
89
88
  if (envDir) {
90
89
  candidates.push(resolve(root, envDir, "codex.json"));
91
90
  }
92
91
  candidates.push(join(root, ".xray", "codex.json"));
93
- candidates.push(join(root, ".opencode", "xray", "codex.json"));
94
92
  // Additional fallback locations (for standalone usage)
95
93
  candidates.push(join(root, "codex.json"));
96
94
  candidates.push(join(root, "src", "codex.json"));
@@ -4,7 +4,6 @@
4
4
  * Injects Universal Development Codex v1.2.0 context into agent operations.
5
5
  * Follows production-tested pattern from rules-injector.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-01-06
9
8
  */
10
9
  import * as fs from "fs";
@@ -38,7 +37,7 @@ async function initializeImports() {
38
37
  const codexCache = new Map();
39
38
  /**
40
39
  * Codex file locations resolved through the standard priority chain.
41
- * Uses config-paths.ts resolver so STRRAY_CONFIG_DIR and .xray/ work.
40
+ * Uses config-paths.ts resolver so XRAY_CONFIG_DIR and .xray/ work.
42
41
  */
43
42
  function getCodexFileLocations(projectRoot) {
44
43
  const root = projectRoot || process.cwd();
@@ -170,7 +169,7 @@ export function createXrayCodexInjectorHook() {
170
169
  });
171
170
  // Skip codex enforcement during testing
172
171
  if (process.env.NODE_ENV === "test" ||
173
- process.env.STRRAY_TEST_MODE === "true") {
172
+ process.env.XRAY_TEST_MODE === "true") {
174
173
  await frameworkLogger.log("codex-injector", "skipping enforcement in test mode", "info", { jobId });
175
174
  return;
176
175
  }
@@ -263,7 +262,7 @@ export function createXrayCodexInjectorHook() {
263
262
  frameworkLogger.log("codex-injector", "tool.execute.after hook triggered", "info", { jobId, tool: input.tool, sessionId });
264
263
  // Skip codex enforcement during testing
265
264
  if (process.env.NODE_ENV === "test" ||
266
- process.env.STRRAY_TEST_MODE === "true") {
265
+ process.env.XRAY_TEST_MODE === "true") {
267
266
  frameworkLogger.log("codex-injector", "skipping injection in test mode", "info", { jobId });
268
267
  return output;
269
268
  }