0xray 3.1.1 → 3.3.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 (309) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/commands/auto-format.md +3 -3
  3. package/.opencode/commands/auto-summary-capture.md +2 -2
  4. package/.opencode/commands/enforcer-daily-scan.md +3 -3
  5. package/.opencode/commands/framework-compliance-audit.md +4 -4
  6. package/.opencode/commands/interactive-validator.md +2 -2
  7. package/.opencode/commands/job-summary-logger.md +2 -2
  8. package/.opencode/commands/mode-switch.md +1 -1
  9. package/.opencode/commands/model-health-check.md +2 -2
  10. package/.opencode/commands/performance-analysis.md +2 -2
  11. package/.opencode/commands/pre-commit-introspection.md +3 -3
  12. package/.opencode/commands/security-scan.md +3 -3
  13. package/.opencode/commands/sisyphus-validation.md +3 -3
  14. package/.opencode/commands/summary-logger.md +2 -2
  15. package/AGENTS.md +3 -13
  16. package/README.md +3 -3
  17. package/dist/AGENTS.md +3 -13
  18. package/dist/CHANGELOG.md +55 -0
  19. package/dist/README.md +3 -3
  20. package/dist/analytics/consent-manager.js +0 -1
  21. package/dist/analytics/emerging-pattern-detector.js +0 -1
  22. package/dist/analytics/pattern-learning-engine.js +0 -1
  23. package/dist/analytics/pattern-performance-tracker.js +0 -1
  24. package/dist/analytics/predictive-analytics.js +0 -1
  25. package/dist/analytics/prompt-pattern-analyzer.js +0 -1
  26. package/dist/analytics/routing-performance-analyzer.js +0 -1
  27. package/dist/analytics/routing-refiner.js +0 -1
  28. package/dist/analytics/simple-pattern-analyzer.js +0 -1
  29. package/dist/cli/commands/archive-logs.js +0 -1
  30. package/dist/cli/commands/opencode-install.js +13 -0
  31. package/dist/cli/commands/plugin-commands.js +0 -1
  32. package/dist/cli/commands/status.js +11 -13
  33. package/dist/cli/index.js +2 -7
  34. package/dist/core/activity-logger.js +0 -1
  35. package/dist/core/adaptive-kernel.js +0 -1
  36. package/dist/core/boot-orchestrator.js +2 -12
  37. package/dist/core/bridge.mjs +0 -1
  38. package/dist/core/codex-formatter.js +0 -1
  39. package/dist/core/codex-injector.js +0 -1
  40. package/dist/core/config-loader.js +36 -28
  41. package/dist/core/context-loader.js +0 -1
  42. package/dist/core/context-validator.js +0 -1
  43. package/dist/core/features-config.js +40 -1
  44. package/dist/core/kernel-patterns.js +0 -1
  45. package/dist/core/model-router.js +23 -64
  46. package/dist/core/system-prompt-generator.js +0 -1
  47. package/dist/delegation/agent-delegator.js +0 -1
  48. package/dist/delegation/agent-expertise.js +0 -1
  49. package/dist/delegation/analytics/index.js +0 -1
  50. package/dist/delegation/analytics/learning-engine.js +0 -1
  51. package/dist/delegation/analytics/outcome-tracker.js +0 -1
  52. package/dist/delegation/analytics/routing-analytics.js +0 -1
  53. package/dist/delegation/ast-code-parser.js +0 -1
  54. package/dist/delegation/complexity-analyzer.js +0 -1
  55. package/dist/delegation/dependency-graph-builder.js +0 -1
  56. package/dist/delegation/index.js +0 -1
  57. package/dist/delegation/metrics-aggregator.js +0 -1
  58. package/dist/delegation/session-coordinator.js +0 -1
  59. package/dist/delegation/strategy-selector.js +0 -1
  60. package/dist/delegation/voting-coordinator.js +0 -1
  61. package/dist/delegation/voting-types.js +0 -1
  62. package/dist/delegation/weighted-voting-aggregator.js +0 -1
  63. package/dist/enforcement/core/index.js +0 -1
  64. package/dist/enforcement/core/rule-executor.js +0 -1
  65. package/dist/enforcement/core/rule-hierarchy.js +0 -1
  66. package/dist/enforcement/core/rule-registry.js +0 -1
  67. package/dist/enforcement/core/violation-fixer.js +0 -1
  68. package/dist/enforcement/index.js +0 -1
  69. package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
  70. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
  71. package/dist/enforcement/loaders/base-loader.js +0 -1
  72. package/dist/enforcement/loaders/codex-loader.js +0 -1
  73. package/dist/enforcement/loaders/index.js +0 -1
  74. package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
  75. package/dist/enforcement/loaders/processor-loader.js +0 -1
  76. package/dist/enforcement/types.js +0 -1
  77. package/dist/enforcement/validators/architecture-validators.js +0 -1
  78. package/dist/enforcement/validators/base-validator.js +0 -1
  79. package/dist/enforcement/validators/code-quality-validators.js +0 -1
  80. package/dist/enforcement/validators/index.js +0 -1
  81. package/dist/enforcement/validators/security-validators.js +0 -1
  82. package/dist/enforcement/validators/testing-validators.js +0 -1
  83. package/dist/enforcement/validators/validator-registry.js +0 -1
  84. package/dist/governance/codex-policy.service.js +0 -1
  85. package/dist/inference/inference-agent-invoker.js +67 -0
  86. package/dist/inference/inference-applier.js +178 -0
  87. package/dist/inference/inference-cycle.js +51 -827
  88. package/dist/inference/inference-proposal-generator.js +149 -0
  89. package/dist/infrastructure/iac-validator.js +465 -0
  90. package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
  91. package/dist/integrations/base/ExampleIntegration.js +0 -1
  92. package/dist/integrations/base/Integration.js +0 -1
  93. package/dist/integrations/base/index.js +0 -1
  94. package/dist/integrations/base/registry.js +0 -1
  95. package/dist/integrations/base/types.js +0 -1
  96. package/dist/integrations/enforcement-gate.js +3 -3
  97. package/dist/integrations/governance/governance-client.js +0 -1
  98. package/dist/integrations/governance/index.js +11 -19
  99. package/dist/integrations/governance/types.js +0 -1
  100. package/dist/integrations/hermes-agent/__init__.py +4 -0
  101. package/dist/integrations/hermes-agent/bridge.mjs +37 -0
  102. package/dist/integrations/openclaw/api-server.js +0 -1
  103. package/dist/integrations/openclaw/client.js +0 -1
  104. package/dist/integrations/openclaw/config.js +0 -1
  105. package/dist/integrations/openclaw/hooks/xray-hooks.js +0 -1
  106. package/dist/integrations/openclaw/index.js +0 -1
  107. package/dist/integrations/openclaw/types.js +0 -1
  108. package/dist/integrations/plugins/index.js +0 -1
  109. package/dist/integrations/plugins/plugin-integration.js +0 -1
  110. package/dist/integrations/plugins/plugin-registry.js +0 -1
  111. package/dist/mcps/agent-resolver.js +0 -1
  112. package/dist/mcps/architect-tools.server.js +119 -185
  113. package/dist/mcps/auto-format.server.js +56 -74
  114. package/dist/mcps/boot-orchestrator.server.js +67 -85
  115. package/dist/mcps/config/config-loader.js +6 -0
  116. package/dist/mcps/config/plugin-server-registry.js +0 -1
  117. package/dist/mcps/enforcer-tools.server.js +207 -273
  118. package/dist/mcps/estimation.server.js +63 -107
  119. package/dist/mcps/framework-compliance-audit.server.js +52 -81
  120. package/dist/mcps/framework-help.server.js +71 -89
  121. package/dist/mcps/governance.server.js +97 -149
  122. package/dist/mcps/knowledge-skills/api-design.server.js +33 -65
  123. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +33 -65
  124. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +123 -163
  125. package/dist/mcps/knowledge-skills/code-analyzer.server.js +210 -237
  126. package/dist/mcps/knowledge-skills/code-review.server.js +108 -142
  127. package/dist/mcps/knowledge-skills/content-creator.server.js +203 -225
  128. package/dist/mcps/knowledge-skills/database-design.server.js +116 -150
  129. package/dist/mcps/knowledge-skills/devops-deployment.server.js +123 -157
  130. package/dist/mcps/knowledge-skills/git-workflow.server.js +34 -67
  131. package/dist/mcps/knowledge-skills/growth-strategist.server.js +301 -323
  132. package/dist/mcps/knowledge-skills/log-monitor.server.js +139 -159
  133. package/dist/mcps/knowledge-skills/mobile-development.server.js +170 -200
  134. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +122 -158
  135. package/dist/mcps/knowledge-skills/performance-optimization.server.js +88 -138
  136. package/dist/mcps/knowledge-skills/project-analysis.server.js +131 -218
  137. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +115 -150
  138. package/dist/mcps/knowledge-skills/security-audit.server.js +16 -143
  139. package/dist/mcps/knowledge-skills/seo-consultant.server.js +20 -213
  140. package/dist/mcps/knowledge-skills/session-management.server.js +13 -90
  141. package/dist/mcps/knowledge-skills/skill-invocation.server.js +43 -421
  142. package/dist/mcps/knowledge-skills/strategist.server.js +10 -55
  143. package/dist/mcps/knowledge-skills/tech-writer.server.js +16 -191
  144. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +18 -191
  145. package/dist/mcps/knowledge-skills/testing-strategy.server.js +18 -156
  146. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +22 -296
  147. package/dist/mcps/lint.server.js +50 -91
  148. package/dist/mcps/model-health-check.server.js +32 -60
  149. package/dist/mcps/orchestrator/aside-context.js +207 -0
  150. package/dist/mcps/orchestrator/config/agent-capabilities.js +30 -11
  151. package/dist/mcps/orchestrator/config/memory-routing-bridge.js +70 -0
  152. package/dist/mcps/orchestrator/execution/execution-planner.js +25 -7
  153. package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
  154. package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
  155. package/dist/mcps/orchestrator/handlers/task-handler.js +59 -1
  156. package/dist/mcps/orchestrator/index.js +5 -0
  157. package/dist/mcps/orchestrator/server.js +63 -8
  158. package/dist/mcps/performance-analysis.server.js +56 -87
  159. package/dist/mcps/processor-pipeline.server.js +68 -99
  160. package/dist/mcps/researcher.server.js +80 -153
  161. package/dist/mcps/security-scan.server.js +56 -70
  162. package/dist/mcps/shared/knowledge-skill-base.js +11 -4
  163. package/dist/mcps/state-manager.server.js +124 -152
  164. package/dist/memory-routing/index.js +4 -0
  165. package/dist/memory-routing/null-provider.js +51 -0
  166. package/dist/memory-routing/provider-loader.js +91 -0
  167. package/dist/memory-routing/provider-registry.js +40 -0
  168. package/dist/memory-routing/types.js +7 -0
  169. package/dist/memory-routing/validate-config.js +32 -0
  170. package/dist/monitoring/nudge-watchdog.js +0 -1
  171. package/dist/nucleus/default-plugins.js +13 -19
  172. package/dist/nucleus/index.js +0 -1
  173. package/dist/nucleus/thin-dispatch.js +29 -1
  174. package/dist/orchestrator/agent-spawn-governor.js +0 -1
  175. package/dist/orchestrator/intelligent-commit-batcher.js +2 -10
  176. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +0 -1
  177. package/dist/orchestrator/orchestrator.js +8 -18
  178. package/dist/orchestrator/self-direction-activation.js +0 -1
  179. package/dist/orchestrator/universal-registry-bridge.js +0 -1
  180. package/dist/performance/performance-budget-enforcer.js +0 -1
  181. package/dist/performance/performance-regression-tester.js +0 -1
  182. package/dist/plugin/plugin-codex-context.js +87 -0
  183. package/dist/plugin/plugin-helpers.js +155 -0
  184. package/dist/plugin/plugin-logger.js +46 -0
  185. package/dist/plugin/plugin-modules.js +144 -0
  186. package/dist/plugin/plugin-quality-gate.js +88 -0
  187. package/dist/plugin/plugin-types.js +1 -0
  188. package/dist/plugin/xray-codex-injection.js +338 -0
  189. package/dist/postprocessor/PostProcessor.js +3 -9
  190. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  191. package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
  192. package/dist/postprocessor/integration.js +194 -0
  193. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
  194. package/dist/postprocessor/metamorphosis/index.js +1 -0
  195. package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
  196. package/dist/postprocessor/services/RegressionAnalysisService.js +0 -1
  197. package/dist/postprocessor/triggers/APITrigger.js +0 -1
  198. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
  199. package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
  200. package/dist/processors/implementations/async-pattern-processor.js +0 -1
  201. package/dist/processors/implementations/console-log-guard-processor.js +0 -1
  202. package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
  203. package/dist/processors/implementations/inference-improvement-processor.js +2 -9
  204. package/dist/processors/implementations/log-protection-processor.js +0 -1
  205. package/dist/processors/implementations/nudge-processor.js +0 -1
  206. package/dist/processors/implementations/performance-budget-processor.js +0 -1
  207. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
  208. package/dist/processors/implementations/publish-preflight-processor.js +4 -12
  209. package/dist/processors/implementations/session-summary-processor.js +8 -16
  210. package/dist/processors/implementations/spawn-governance-processor.js +0 -1
  211. package/dist/processors/implementations/storytelling-trigger-processor.js +3 -28
  212. package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
  213. package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
  214. package/dist/processors/implementations/version-compliance-processor.js +0 -1
  215. package/dist/processors/processor-interfaces.js +0 -1
  216. package/dist/processors/processor-types.js +0 -1
  217. package/dist/scripts/integration.js +0 -1
  218. package/dist/security/comprehensive-security-audit.js +0 -1
  219. package/dist/security/security-agent-coordinator.js +0 -1
  220. package/dist/security/security-auditor.js +0 -1
  221. package/dist/security/security-hardener.js +0 -1
  222. package/dist/security/security-hardening-system.js +0 -1
  223. package/dist/security/security-headers.js +0 -1
  224. package/dist/security/security-orchestration-layer.js +0 -1
  225. package/dist/services/inference-tuner.js +0 -1
  226. package/dist/session/session-cleanup-manager.js +0 -1
  227. package/dist/session/session-monitor.js +0 -1
  228. package/dist/session/session-state-manager.js +0 -1
  229. package/dist/skills/xray-orchestrator/index.js +0 -1
  230. package/dist/utils/codex-parser.js +0 -1
  231. package/dist/utils/language-detector.js +0 -1
  232. package/dist/utils/shutdown-handler.js +0 -1
  233. package/dist/validation/agent-config-validator.js +280 -0
  234. package/dist/validation/orchestration-flow-validator.js +606 -0
  235. package/package.json +1 -1
  236. package/scripts/node/release.mjs +2 -2
  237. package/scripts/node/setup.cjs +28 -0
  238. package/scripts/node/universal-version-manager.js +1 -1
  239. package/src/mcps/agent-resolver.ts +0 -1
  240. package/src/mcps/architect-tools.server.ts +129 -211
  241. package/src/mcps/auto-format.server.ts +74 -103
  242. package/src/mcps/boot-orchestrator.server.ts +71 -96
  243. package/src/mcps/config/__tests__/config-loader.test.ts +6 -6
  244. package/src/mcps/config/config-loader.ts +7 -0
  245. package/src/mcps/config/plugin-server-registry.ts +0 -1
  246. package/src/mcps/enforcer-tools.server.ts +217 -294
  247. package/src/mcps/estimation.server.ts +62 -122
  248. package/src/mcps/framework-compliance-audit.server.ts +53 -95
  249. package/src/mcps/framework-help.server.ts +74 -96
  250. package/src/mcps/governance.server.ts +97 -162
  251. package/src/mcps/knowledge-skills/api-design.server.ts +33 -72
  252. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +33 -72
  253. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +148 -193
  254. package/src/mcps/knowledge-skills/code-analyzer.server.ts +222 -254
  255. package/src/mcps/knowledge-skills/code-review.server.ts +115 -157
  256. package/src/mcps/knowledge-skills/content-creator.server.ts +219 -246
  257. package/src/mcps/knowledge-skills/database-design.server.ts +119 -160
  258. package/src/mcps/knowledge-skills/devops-deployment.server.ts +126 -167
  259. package/src/mcps/knowledge-skills/git-workflow.server.ts +32 -77
  260. package/src/mcps/knowledge-skills/growth-strategist.server.ts +322 -360
  261. package/src/mcps/knowledge-skills/log-monitor.server.ts +68 -95
  262. package/src/mcps/knowledge-skills/mobile-development.server.ts +16 -56
  263. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +13 -59
  264. package/src/mcps/knowledge-skills/performance-optimization.server.ts +13 -74
  265. package/src/mcps/knowledge-skills/project-analysis.server.ts +13 -120
  266. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +13 -60
  267. package/src/mcps/knowledge-skills/security-audit.server.ts +19 -157
  268. package/src/mcps/knowledge-skills/seo-consultant.server.ts +23 -227
  269. package/src/mcps/knowledge-skills/session-management.server.ts +17 -106
  270. package/src/mcps/knowledge-skills/skill-invocation.server.ts +45 -446
  271. package/src/mcps/knowledge-skills/strategist.server.ts +13 -63
  272. package/src/mcps/knowledge-skills/tech-writer.server.ts +19 -204
  273. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +21 -204
  274. package/src/mcps/knowledge-skills/testing-strategy.server.ts +21 -165
  275. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +25 -342
  276. package/src/mcps/lint.server.ts +52 -105
  277. package/src/mcps/model-health-check.server.ts +34 -70
  278. package/src/mcps/orchestrator/aside-context.ts +245 -0
  279. package/src/mcps/orchestrator/config/agent-capabilities.ts +49 -14
  280. package/src/mcps/orchestrator/config/memory-routing-bridge.ts +80 -0
  281. package/src/mcps/orchestrator/execution/execution-planner.ts +36 -9
  282. package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
  283. package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
  284. package/src/mcps/orchestrator/handlers/task-handler.ts +78 -2
  285. package/src/mcps/orchestrator/index.ts +29 -0
  286. package/src/mcps/orchestrator/server.ts +79 -24
  287. package/src/mcps/orchestrator/types.ts +50 -0
  288. package/src/mcps/performance-analysis.server.ts +59 -102
  289. package/src/mcps/processor-pipeline.server.ts +70 -108
  290. package/src/mcps/researcher.server.ts +87 -175
  291. package/src/mcps/security-scan.server.ts +57 -76
  292. package/src/mcps/shared/knowledge-skill-base.ts +12 -4
  293. package/src/mcps/state-manager.server.ts +129 -169
  294. package/src/opencode/codex.codex +1 -1
  295. package/src/opencode/commands/auto-format.md +3 -3
  296. package/src/opencode/commands/auto-summary-capture.md +2 -2
  297. package/src/opencode/commands/enforcer-daily-scan.md +3 -3
  298. package/src/opencode/commands/framework-compliance-audit.md +4 -4
  299. package/src/opencode/commands/interactive-validator.md +2 -2
  300. package/src/opencode/commands/job-summary-logger.md +2 -2
  301. package/src/opencode/commands/mode-switch.md +1 -1
  302. package/src/opencode/commands/model-health-check.md +2 -2
  303. package/src/opencode/commands/performance-analysis.md +2 -2
  304. package/src/opencode/commands/pre-commit-introspection.md +3 -3
  305. package/src/opencode/commands/security-scan.md +3 -3
  306. package/src/opencode/commands/sisyphus-validation.md +3 -3
  307. package/src/opencode/commands/summary-logger.md +2 -2
  308. package/src/skills/xray-orchestrator/index.ts +0 -1
  309. package/dist/nucleus/orchestrator.js +0 -479
@@ -9,6 +9,8 @@
9
9
  import { frameworkLogger } from "../core/framework-logger.js";
10
10
  import { getLevelFromScore, getAgentForTier, levelToTier, } from "../delegation/complexity-core.js";
11
11
  import { ComplexityAnalyzer } from "../delegation/complexity-analyzer.js";
12
+ import { getMemoryRoutingProviderSync, initializeMemoryRouting, } from "../memory-routing/index.js";
13
+ initializeMemoryRouting();
12
14
  export const NUCLEUS_THIN_DISPATCH_VERSION = "0.1.0";
13
15
  /**
14
16
  * Score the complexity of an operation given its description and context.
@@ -52,6 +54,32 @@ export function routeToAgent(scoreOrLevel, level) {
52
54
  */
53
55
  export function scoreAndRoute(operation, context, thresholds) {
54
56
  const score = scoreComplexity(operation, context, thresholds);
55
- const agent = routeToAgent(score);
57
+ let agent = routeToAgent(score);
58
+ const provider = getMemoryRoutingProviderSync();
59
+ let memoryRouting;
60
+ if (provider.id !== "null") {
61
+ const resolved = provider.resolveThinDispatch(agent, operation, score.score);
62
+ agent = resolved.agent;
63
+ memoryRouting = {
64
+ providerId: resolved.context.providerId,
65
+ adjustedScore: resolved.adjustedScore,
66
+ signals: resolved.context.matchedSignals,
67
+ };
68
+ const adjustedLevel = getLevelFromScore(resolved.adjustedScore, thresholds);
69
+ frameworkLogger.log("nucleus-thin-dispatch", "memory-routing", "info", {
70
+ providerId: resolved.context.providerId,
71
+ baseAgent: routeToAgent(score),
72
+ resolvedAgent: agent,
73
+ baseScore: score.score,
74
+ adjustedScore: resolved.adjustedScore,
75
+ level: adjustedLevel,
76
+ signals: resolved.context.matchedSignals,
77
+ });
78
+ return {
79
+ score: { ...score, score: resolved.adjustedScore, level: adjustedLevel },
80
+ agent,
81
+ memoryRouting,
82
+ };
83
+ }
56
84
  return { score, agent };
57
85
  }
@@ -4,7 +4,6 @@
4
4
  * Critical governance component that prevents infinite agent spawning
5
5
  * and enforces spawn limits across the multi-agent orchestration system.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-01-23
9
8
  */
10
9
  import { frameworkLogger } from "../core/framework-logger.js";
@@ -4,9 +4,8 @@
4
4
  *
5
5
  * Configuration is read from .xray/features.json -> commit_cycle
6
6
  */
7
- import * as fs from "fs";
8
- import * as path from "path";
9
7
  import { frameworkLogger } from "../core/framework-logger.js";
8
+ import { featuresConfigLoader } from "../core/features-config.js";
10
9
  import { runCommandSafe } from "../utils/command-runner.js";
11
10
  export class IntelligentCommitBatcher {
12
11
  pendingChanges = [];
@@ -35,14 +34,7 @@ export class IntelligentCommitBatcher {
35
34
  }
36
35
  loadFeaturesConfig() {
37
36
  try {
38
- const configPaths = [
39
- path.join(process.cwd(), ".xray", "features.json"),
40
- ];
41
- for (const configPath of configPaths) {
42
- if (fs.existsSync(configPath)) {
43
- return JSON.parse(fs.readFileSync(configPath, "utf-8"));
44
- }
45
- }
37
+ return featuresConfigLoader.loadConfig();
46
38
  }
47
39
  catch (e) {
48
40
  frameworkLogger.log("intelligent-commit-batcher", "config-load-failed", "warning", { error: e instanceof Error ? e.message : String(e) });
@@ -4,7 +4,6 @@
4
4
  * Central coordinator for multi-agent orchestration that integrates all orchestration components
5
5
  * for comprehensive E2E workflow management and coordination.
6
6
  *
7
- * @version 1.1.0
8
7
  * @since 2026-01-23
9
8
  */
10
9
  import { KernelOrchestrator } from "../core/orchestrator.js";
@@ -4,17 +4,16 @@
4
4
  * Coordinates multi-step tasks and delegates to specialized subagents.
5
5
  * Implements Sisyphus integration for relentless execution.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-01-07
9
8
  */
10
9
  import { enhancedMultiAgentOrchestrator } from "./enhanced-multi-agent-orchestrator.js";
10
+ import { featuresConfigLoader } from "../core/features-config.js";
11
11
  import { frameworkLogger } from "../core/framework-logger.js";
12
12
  import { routingOutcomeTracker } from "../delegation/analytics/outcome-tracker.js";
13
13
  import { patternPerformanceTracker } from "../analytics/pattern-performance-tracker.js";
14
14
  import { VotingCoordinator } from "../delegation/voting-coordinator.js";
15
15
  import { getAgentExpertiseLevel } from "../delegation/agent-expertise.js";
16
16
  import { XrayStateManager } from "../state/state-manager.js";
17
- import fs from "fs";
18
17
  export class XrayOrchestrator {
19
18
  config;
20
19
  activeTasks = new Map();
@@ -35,22 +34,13 @@ export class XrayOrchestrator {
35
34
  */
36
35
  loadOrchestratorConfig() {
37
36
  try {
38
- const configPaths = [
39
- ".xray/features.json",
40
- ".xray/features.json",
41
- ];
42
- for (const configPath of configPaths) {
43
- if (fs.existsSync(configPath)) {
44
- const content = fs.readFileSync(configPath, "utf-8");
45
- const features = JSON.parse(content);
46
- if (features.multi_agent_orchestration) {
47
- const ma = features.multi_agent_orchestration;
48
- return {
49
- maxConcurrentTasks: ma.max_concurrent_agents,
50
- conflictResolutionStrategy: this.mapConflictResolution(ma.conflict_resolution),
51
- };
52
- }
53
- }
37
+ const features = featuresConfigLoader.loadConfig();
38
+ if (features.multi_agent_orchestration) {
39
+ const ma = features.multi_agent_orchestration;
40
+ return {
41
+ maxConcurrentTasks: ma.max_concurrent_agents,
42
+ conflictResolutionStrategy: this.mapConflictResolution(ma.conflict_resolution),
43
+ };
54
44
  }
55
45
  }
56
46
  catch (e) {
@@ -5,7 +5,6 @@
5
5
  * Activates the framework's dormant self-evolution systems for continuous improvement.
6
6
  * This version works without advanced-features dependencies for initial deployment.
7
7
  *
8
- * @version 2.0.0
9
8
  * @since 2026-01-24
10
9
  */
11
10
  // Framework core imports
@@ -4,7 +4,6 @@
4
4
  * Connects 0xRay to external agent registries.
5
5
  * Enables dynamic agent configuration loading from external sources.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-02-14
9
8
  */
10
9
  import { readFile } from "fs/promises";
@@ -9,7 +9,6 @@
9
9
  * - First Contentful Paint <2s
10
10
  * - Time to Interactive <5s
11
11
  *
12
- * @version 1.0.0
13
12
  * @since 2026-01-08
14
13
  */
15
14
  import { EventEmitter } from "events";
@@ -4,7 +4,6 @@
4
4
  * Automated testing system that detects performance regressions and
5
5
  * enforces performance budget compliance in CI/CD pipelines.
6
6
  *
7
- * @version 1.0.0
8
7
  * @since 2026-01-08
9
8
  */
10
9
  import { performance } from "perf_hooks";
@@ -0,0 +1,87 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { resolveCodexPath } from "./plugin-modules.js";
4
+ import { PluginLogger } from "./plugin-logger.js";
5
+ let cachedCodexContexts = null;
6
+ async function getCodexFileLocations(directory) {
7
+ const root = directory || process.cwd();
8
+ const resolved = await resolveCodexPath(root);
9
+ resolved.push(path.join(root, ".opencode", "codex.codex"), path.join(root, ".xray", "agents_template.md"), path.join(root, "AGENTS.md"));
10
+ return resolved;
11
+ }
12
+ function readFileContent(filePath) {
13
+ try {
14
+ return fs.readFileSync(filePath, "utf-8");
15
+ }
16
+ catch (error) {
17
+ const logger = new PluginLogger(process.cwd());
18
+ logger.error(`Failed to read file ${filePath}`, error);
19
+ return null;
20
+ }
21
+ }
22
+ export function extractCodexMetadata(content) {
23
+ if (content.trim().startsWith("{")) {
24
+ try {
25
+ const parsed = JSON.parse(content);
26
+ const version = parsed.version || "1.6.0";
27
+ const terms = parsed.terms || {};
28
+ const termCount = Object.keys(terms).length;
29
+ return { version, termCount };
30
+ }
31
+ catch {
32
+ // Not valid JSON, try markdown format
33
+ }
34
+ }
35
+ const versionMatch = content.match(/\*\*Version\*\*:\s*(\d+\.\d+\.\d+)/);
36
+ const version = versionMatch?.[1] ?? "1.6.0";
37
+ const termMatches = content.match(/####\s*\d+\.\s/g);
38
+ const termCount = termMatches ? termMatches.length : 0;
39
+ return { version, termCount };
40
+ }
41
+ export function createCodexContextEntry(filePath, content) {
42
+ const metadata = extractCodexMetadata(content);
43
+ return {
44
+ id: `xray-codex-${path.basename(filePath)}`,
45
+ source: filePath,
46
+ content,
47
+ priority: "critical",
48
+ metadata: {
49
+ version: metadata.version,
50
+ termCount: metadata.termCount,
51
+ loadedAt: new Date().toISOString(),
52
+ },
53
+ };
54
+ }
55
+ export async function loadCodexContext(directory) {
56
+ if (cachedCodexContexts) {
57
+ return cachedCodexContexts;
58
+ }
59
+ const codexContexts = [];
60
+ const locations = await getCodexFileLocations(directory);
61
+ for (const fileLocation of locations) {
62
+ const fullPath = path.isAbsolute(fileLocation) ? fileLocation : path.join(directory, fileLocation);
63
+ const content = readFileContent(fullPath);
64
+ if (content && content.trim().length > 0) {
65
+ const entry = createCodexContextEntry(fullPath, content);
66
+ if (entry.metadata.termCount > 0) {
67
+ codexContexts.push(entry);
68
+ }
69
+ }
70
+ }
71
+ cachedCodexContexts = codexContexts;
72
+ if (codexContexts.length === 0) {
73
+ const { getOrCreateLogger } = await import("./plugin-logger.js");
74
+ void getOrCreateLogger(directory).then((l) => l.error(`No valid codex files found. Checked: ${locations.join(", ")}`));
75
+ }
76
+ return codexContexts;
77
+ }
78
+ export function formatCodexContext(contexts) {
79
+ if (contexts.length === 0) {
80
+ return "";
81
+ }
82
+ const parts = [];
83
+ for (const context of contexts) {
84
+ parts.push(`# 0xRay Codex Context v${context.metadata.version}`, `Source: ${context.source}`, `Terms Loaded: ${context.metadata.termCount}`, `Loaded At: ${context.metadata.loadedAt}`, "", context.content, "", "---", "");
85
+ }
86
+ return parts.join("\n");
87
+ }
@@ -0,0 +1,155 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { spawn } from "child_process";
4
+ export function spawnPromise(command, args, cwd) {
5
+ return new Promise((resolve, reject) => {
6
+ const child = spawn(command, args, {
7
+ cwd,
8
+ stdio: ["ignore", "inherit", "pipe"],
9
+ });
10
+ let stderr = "";
11
+ if (child.stderr) {
12
+ child.stderr.on("data", (data) => {
13
+ stderr += data.toString();
14
+ });
15
+ }
16
+ child.on("close", (code) => {
17
+ if (code === 0) {
18
+ resolve({ stdout: "", stderr });
19
+ }
20
+ else {
21
+ reject(new Error(`Process exited with code ${code}: ${stderr}`));
22
+ }
23
+ });
24
+ child.on("error", (error) => {
25
+ reject(error);
26
+ });
27
+ });
28
+ }
29
+ export function getFrameworkVersion() {
30
+ try {
31
+ const packageJsonPath = path.join(process.cwd(), "package.json");
32
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
33
+ return packageJson.version || "1.4.6";
34
+ }
35
+ catch {
36
+ return "1.4.6";
37
+ }
38
+ }
39
+ export function getFrameworkIdentity() {
40
+ const version = getFrameworkVersion();
41
+ return `0xRay Framework v${version} - AI Orchestration
42
+
43
+ 🔧 Core: architect, code-reviewer, refactorer, testing-lead, strategist
44
+ 📚 Codex: 5 Essential Terms (99.6% Error Prevention Target)
45
+ 🎯 Goal: Progressive, production-ready development workflow
46
+
47
+ 📖 Documentation: config dir (codex, config, agents docs) — resolved via config-paths
48
+ `;
49
+ }
50
+ export const TOOL_AGENT_MAP = {
51
+ write: { agent: "code-reviewer", skill: "write" },
52
+ edit: { agent: "code-reviewer", skill: "edit" },
53
+ multiedit: { agent: "code-reviewer", skill: "multiedit" },
54
+ bash: { agent: "testing-lead", skill: "execution" },
55
+ search: { agent: "researcher", skill: "search" },
56
+ read: { agent: "researcher", skill: "read" },
57
+ glob: { agent: "researcher", skill: "glob" },
58
+ grep: { agent: "researcher", skill: "search" },
59
+ ls: { agent: "researcher", skill: "list" },
60
+ };
61
+ export function classifyTaskType(tool, args) {
62
+ const cmd = String(args?.command ?? "").toLowerCase().trim();
63
+ if (tool === "bash" && cmd) {
64
+ if (/(npm|yarn|pnpm)\s+test|jest|vitest|mocha|pytest/.test(cmd))
65
+ return "testing";
66
+ if (/(npm|yarn|pnpm)\s+run|npx|cargo|go run|make\s/.test(cmd))
67
+ return "build";
68
+ if (/audit|security|snyk|owasp|bandit/.test(cmd))
69
+ return "security";
70
+ if (/eslint|prettier|black|ruff|lint|format/.test(cmd))
71
+ return "lint";
72
+ if (/git\s/.test(cmd))
73
+ return "git";
74
+ if (/(npm|yarn|pnpm)\s+install|pip install|cargo add/.test(cmd))
75
+ return "install";
76
+ if (/grep|rg |find |ls |cat |head |tail /.test(cmd))
77
+ return "search";
78
+ }
79
+ if (tool === "write")
80
+ return "write";
81
+ if (tool === "edit" || tool === "multiedit")
82
+ return "edit";
83
+ if (tool === "read")
84
+ return "read";
85
+ if (tool === "search" || tool === "grep" || tool === "glob")
86
+ return "search";
87
+ return "unknown";
88
+ }
89
+ export function isWriteEditOperation(tool) {
90
+ return tool === "write" || tool === "edit" || tool === "multiedit";
91
+ }
92
+ export function isPublishOperation(tool) {
93
+ return tool === "publish" || tool === "release" || tool === "npm-publish" || tool === "xray-release";
94
+ }
95
+ export function resolveAgentName(input) {
96
+ const globalAgent = globalThis.currentAgent;
97
+ if (globalAgent?.agentType)
98
+ return globalAgent.agentType;
99
+ if (globalAgent?.type)
100
+ return globalAgent.type;
101
+ if (input?.agentType)
102
+ return input.agentType;
103
+ return "architect";
104
+ }
105
+ export function registerAllProcessors(pm) {
106
+ pm.registerProcessor({ name: "preValidate", type: "pre", priority: 10, enabled: true });
107
+ pm.registerProcessor({ name: "codexCompliance", type: "pre", priority: 20, enabled: true });
108
+ pm.registerProcessor({ name: "versionCompliance", type: "pre", priority: 25, enabled: true });
109
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 5, enabled: true });
110
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
111
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
112
+ }
113
+ export function registerAfterPostProcessors(pm) {
114
+ pm.registerProcessor({ name: "testAutoCreation", type: "post", priority: 50, enabled: true });
115
+ pm.registerProcessor({ name: "testExecution", type: "post", priority: 10, enabled: true });
116
+ pm.registerProcessor({ name: "coverageAnalysis", type: "post", priority: 20, enabled: true });
117
+ }
118
+ export function logPreProcessorResults(results, logger) {
119
+ logger.log(`📊 Pre-processor result: ${results.success ? "SUCCESS" : "FAILED"} (${results.results.length} processors)`);
120
+ if (!results.success) {
121
+ const failures = results.results.filter((r) => !r.success);
122
+ for (const f of failures) {
123
+ logger.error(`❌ Pre-processor ${f.processorName} failed: ${f.error}`);
124
+ }
125
+ }
126
+ else {
127
+ for (const r of results.results) {
128
+ logger.log(`✅ Pre-processor ${r.processorName}: ${r.success ? "OK" : "FAILED"}`);
129
+ }
130
+ }
131
+ }
132
+ export function logPostProcessorResults(results, logger) {
133
+ const allSuccess = results.every((r) => r.success);
134
+ logger.log(`📊 Post-processor result: ${allSuccess ? "SUCCESS" : "FAILED"} (${results.length} processors)`);
135
+ for (const r of results) {
136
+ if (r.success) {
137
+ logger.log(`✅ Post-processor ${r.processorName}: OK`);
138
+ }
139
+ else {
140
+ logger.error(`❌ Post-processor ${r.processorName} failed: ${r.error}`);
141
+ }
142
+ }
143
+ }
144
+ export function logTestAutoCreationResult(results, logger) {
145
+ const testAutoResult = results.find((r) => r.processorName === "testAutoCreation");
146
+ if (testAutoResult) {
147
+ const data = testAutoResult.data;
148
+ if (testAutoResult.success && data?.testCreated && data?.testFile) {
149
+ logger.log(`✅ TEST AUTO-CREATION: Created ${data.testFile}`);
150
+ }
151
+ else if (!testAutoResult.success) {
152
+ logger.log(`ℹ️ TEST AUTO-CREATION: ${testAutoResult.error ?? "skipped - no new files"}`);
153
+ }
154
+ }
155
+ }
@@ -0,0 +1,46 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ export class PluginLogger {
4
+ logPath;
5
+ constructor(directory) {
6
+ const logsDir = path.join(directory, ".opencode", "logs");
7
+ if (!fs.existsSync(logsDir)) {
8
+ fs.mkdirSync(logsDir, { recursive: true });
9
+ }
10
+ const today = new Date().toISOString().split("T")[0];
11
+ this.logPath = path.join(logsDir, `xray-plugin-${today}.log`);
12
+ }
13
+ async logAsync(message) {
14
+ try {
15
+ const timestamp = new Date().toISOString();
16
+ const logEntry = `[${timestamp}] ${message}\n`;
17
+ await fs.promises.appendFile(this.logPath, logEntry, "utf-8");
18
+ }
19
+ catch {
20
+ // Silent fail - logging failure should not break plugin
21
+ }
22
+ }
23
+ log(message) {
24
+ void this.logAsync(message);
25
+ }
26
+ error(message, error) {
27
+ const errorDetail = error instanceof Error ? `: ${error.message}` : "";
28
+ this.log(`ERROR: ${message}${errorDetail}`);
29
+ }
30
+ }
31
+ let loggerInstance = null;
32
+ let loggerInitPromise = null;
33
+ export async function getOrCreateLogger(directory) {
34
+ if (loggerInstance) {
35
+ return loggerInstance;
36
+ }
37
+ if (loggerInitPromise) {
38
+ return loggerInitPromise;
39
+ }
40
+ loggerInitPromise = (async () => {
41
+ const logger = new PluginLogger(directory);
42
+ loggerInstance = logger;
43
+ return logger;
44
+ })();
45
+ return loggerInitPromise;
46
+ }
@@ -0,0 +1,144 @@
1
+ import * as path from "path";
2
+ import { getOrCreateLogger } from "./plugin-logger.js";
3
+ let _resolveCodexPath = null;
4
+ let _resolveStateDir = null;
5
+ let _frameworkLogger = null;
6
+ let _systemPromptGenerator = null;
7
+ let _ProcessorManager = null;
8
+ let _XrayStateManager = null;
9
+ let _featuresConfigLoader = null;
10
+ let _detectTaskType = null;
11
+ export function getProcessorManager() { return _ProcessorManager; }
12
+ export function getXrayStateManager() { return _XrayStateManager; }
13
+ export function getFeaturesConfigLoader() { return _featuresConfigLoader; }
14
+ export function getDetectTaskType() { return _detectTaskType; }
15
+ export function getSystemPromptGenerator() { return _systemPromptGenerator; }
16
+ async function loadFrameworkLogger() {
17
+ if (_frameworkLogger)
18
+ return _frameworkLogger;
19
+ const candidates = [
20
+ "../core/framework-logger.js",
21
+ "../../node_modules/0xray/dist/core/framework-logger.js",
22
+ ];
23
+ for (const p of candidates) {
24
+ try {
25
+ const mod = await import(p);
26
+ _frameworkLogger = mod.frameworkLogger;
27
+ return _frameworkLogger;
28
+ }
29
+ catch (_) {
30
+ // try next candidate
31
+ }
32
+ }
33
+ _frameworkLogger = {
34
+ log: (_module, _event, _status, _data) => { },
35
+ };
36
+ return _frameworkLogger;
37
+ }
38
+ async function loadConfigPaths() {
39
+ if (_resolveCodexPath && _resolveStateDir)
40
+ return;
41
+ const candidates = [
42
+ "../core/config-paths.js",
43
+ "../../node_modules/0xray/dist/core/config-paths.js",
44
+ ];
45
+ for (const p of candidates) {
46
+ try {
47
+ const mod = await import(p);
48
+ _resolveCodexPath = mod.resolveCodexPath;
49
+ _resolveStateDir = mod.resolveStateDir;
50
+ return;
51
+ }
52
+ catch (_) {
53
+ // try next candidate
54
+ }
55
+ }
56
+ const logger = await loadFrameworkLogger();
57
+ logger.log("xray-codex-plugin", "config-paths-load-failed", "warning", { warning: "Failed to load config-paths module from any location" });
58
+ }
59
+ export async function resolveCodexPath(root) {
60
+ await loadConfigPaths();
61
+ if (!_resolveCodexPath)
62
+ throw new Error("resolveCodexPath not available after loading");
63
+ return _resolveCodexPath(root);
64
+ }
65
+ export async function resolveStateDir(root) {
66
+ await loadConfigPaths();
67
+ if (!_resolveStateDir)
68
+ throw new Error("resolveStateDir not available after loading");
69
+ return _resolveStateDir(root);
70
+ }
71
+ export async function importSystemPromptGenerator() {
72
+ if (_systemPromptGenerator)
73
+ return;
74
+ const candidates = [
75
+ "../core/system-prompt-generator.js",
76
+ "../../node_modules/0xray/dist/core/system-prompt-generator.js",
77
+ ];
78
+ for (const p of candidates) {
79
+ try {
80
+ const module = await import(p);
81
+ _systemPromptGenerator = module.generateLeanSystemPrompt;
82
+ return;
83
+ }
84
+ catch (_) {
85
+ // try next candidate
86
+ }
87
+ }
88
+ const logger = await loadFrameworkLogger();
89
+ logger.log("xray-codex-plugin", "system-prompt-generator-load-failed", "warning", { warning: "Failed to load lean system prompt generator, using fallback" });
90
+ }
91
+ export function validateModulePath(resolvedPath, allowedPrefix) {
92
+ const normalized = path.resolve(resolvedPath);
93
+ const allowed = path.resolve(allowedPrefix);
94
+ if (!normalized.startsWith(allowed)) {
95
+ throw new Error(`Module path validation failed: ${normalized} is outside allowed path ${allowed}`);
96
+ }
97
+ }
98
+ export async function loadXrayComponents() {
99
+ if (_ProcessorManager && _XrayStateManager && _featuresConfigLoader)
100
+ return;
101
+ const logger = await getOrCreateLogger(process.cwd());
102
+ try {
103
+ const root = process.cwd();
104
+ const distPrefix = path.join(root, 'dist');
105
+ validateModulePath(`${root}/dist/processors/processor-manager.js`, distPrefix);
106
+ validateModulePath(`${root}/dist/state/state-manager.js`, distPrefix);
107
+ validateModulePath(`${root}/dist/core/features-config.js`, distPrefix);
108
+ const procModule = await import(`${root}/dist/processors/processor-manager.js`);
109
+ const stateModule = await import(`${root}/dist/state/state-manager.js`);
110
+ const featuresModule = await import(`${root}/dist/core/features-config.js`);
111
+ _ProcessorManager = procModule.ProcessorManager;
112
+ _XrayStateManager = stateModule.XrayStateManager;
113
+ _featuresConfigLoader = featuresModule.featuresConfigLoader;
114
+ _detectTaskType = featuresModule.detectTaskType;
115
+ logger.log(`✅ Loaded from cwd/dist/`);
116
+ return;
117
+ }
118
+ catch (e) {
119
+ const message = e instanceof Error ? e.message : String(e);
120
+ logger.log(`❌ Failed to load from cwd/dist/: ${message}`);
121
+ }
122
+ const pluginPaths = ["0xray"];
123
+ for (const pluginPath of pluginPaths) {
124
+ try {
125
+ const nodeModulesPrefix = path.join(process.cwd(), 'node_modules');
126
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`, nodeModulesPrefix);
127
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`, nodeModulesPrefix);
128
+ validateModulePath(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`, nodeModulesPrefix);
129
+ const pm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/processors/processor-manager.js`);
130
+ const sm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/state/state-manager.js`);
131
+ const fm = await import(`${process.cwd()}/node_modules/${pluginPath}/dist/core/features-config.js`);
132
+ _ProcessorManager = pm.ProcessorManager;
133
+ _XrayStateManager = sm.XrayStateManager;
134
+ _featuresConfigLoader = fm.featuresConfigLoader;
135
+ _detectTaskType = fm.detectTaskType;
136
+ logger.log(`✅ Loaded from node_modules/${pluginPath}/dist/`);
137
+ return;
138
+ }
139
+ catch (e) {
140
+ const message = e instanceof Error ? e.message : String(e);
141
+ logger.log(`❌ Failed to load from node_modules/${pluginPath}/dist/: ${message}`);
142
+ }
143
+ }
144
+ }