0xray 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/.gitignore.default +59 -0
  2. package/.mcp.json +35 -0
  3. package/.opencode/codex.codex +1 -1
  4. package/.opencode/commands/auto-format.md +3 -3
  5. package/.opencode/commands/auto-summary-capture.md +2 -2
  6. package/.opencode/commands/dependency-audit.md +3 -3
  7. package/.opencode/commands/enforcer-daily-scan.md +3 -3
  8. package/.opencode/commands/framework-compliance-audit.md +4 -4
  9. package/.opencode/commands/interactive-validator.md +2 -2
  10. package/.opencode/commands/job-summary-logger.md +2 -2
  11. package/.opencode/commands/mode-switch.md +1 -1
  12. package/.opencode/commands/model-health-check.md +2 -2
  13. package/.opencode/commands/performance-analysis.md +2 -2
  14. package/.opencode/commands/pre-commit-introspection.md +3 -3
  15. package/.opencode/commands/security-scan.md +3 -3
  16. package/.opencode/commands/sisyphus-validation.md +3 -3
  17. package/.opencode/commands/summary-logger.md +6 -6
  18. package/.opencode/enforcer-config.json +2 -2
  19. package/.opencode/hooks/post-commit +1 -1
  20. package/.opencode/init.sh +6 -0
  21. package/.plugin/plugin.json +11 -0
  22. package/AGENTS-consumer.md +46 -0
  23. package/AGENTS.md +2 -12
  24. package/LICENSE +1 -1
  25. package/README.md +6 -6
  26. package/SKILLS.md +140 -0
  27. package/dist/.gitignore.default +59 -0
  28. package/dist/AGENTS.md +2 -12
  29. package/dist/CHANGELOG.md +54 -0
  30. package/dist/LICENSE +1 -1
  31. package/dist/README.md +6 -6
  32. package/dist/SKILLS.md +140 -0
  33. package/dist/agents/index.js +3 -1
  34. package/dist/agents/registry.js +13 -0
  35. package/dist/analytics/consent-manager.js +0 -1
  36. package/dist/analytics/emerging-pattern-detector.js +0 -1
  37. package/dist/analytics/pattern-learning-engine.js +0 -1
  38. package/dist/analytics/pattern-performance-tracker.js +0 -1
  39. package/dist/analytics/predictive-analytics.js +0 -1
  40. package/dist/analytics/prompt-pattern-analyzer.js +0 -1
  41. package/dist/analytics/routing-performance-analyzer.js +0 -1
  42. package/dist/analytics/routing-refiner.js +1 -2
  43. package/dist/analytics/simple-pattern-analyzer.js +0 -1
  44. package/dist/architect/architectural-integrity.js +3 -3
  45. package/dist/benchmark/performance-benchmark.js +1 -2
  46. package/dist/cli/commands/antigravity-status.js +23 -23
  47. package/dist/cli/commands/archive-logs.js +0 -1
  48. package/dist/cli/commands/credible-init.js +1 -1
  49. package/dist/cli/commands/hermes-install.js +8 -0
  50. package/dist/cli/commands/mcp-install.js +1 -1
  51. package/dist/cli/commands/openclaw-install.js +9 -0
  52. package/dist/cli/commands/opencode-install.js +35 -0
  53. package/dist/cli/commands/plugin-commands.js +0 -1
  54. package/dist/cli/commands/skill-install.js +39 -2
  55. package/dist/cli/commands/status.js +16 -13
  56. package/dist/cli/commands/storyteller.js +1 -1
  57. package/dist/cli/index.js +14 -13
  58. package/dist/core/activity-logger.js +4 -5
  59. package/dist/core/adaptive-kernel.js +0 -1
  60. package/dist/core/agent-spawn-gate.js +1 -1
  61. package/dist/core/boot-orchestrator.js +14 -25
  62. package/dist/core/bridge.mjs +4 -5
  63. package/dist/core/codex-formatter.js +1 -3
  64. package/dist/core/codex-injector.js +3 -4
  65. package/dist/core/config-loader.js +36 -29
  66. package/dist/core/config-paths.js +30 -23
  67. package/dist/core/context-loader.js +0 -4
  68. package/dist/core/context-validator.js +0 -1
  69. package/dist/core/features-config.js +38 -2
  70. package/dist/core/index.js +2 -2
  71. package/dist/core/kernel-patterns.js +0 -1
  72. package/dist/core/logging-config.js +7 -7
  73. package/dist/core/model-router.js +23 -64
  74. package/dist/core/orchestrator.js +1 -1
  75. package/dist/core/system-prompt-generator.js +0 -1
  76. package/dist/core/xray-activation.js +3 -4
  77. package/dist/delegation/agent-delegator.js +2 -3
  78. package/dist/delegation/agent-expertise.js +0 -1
  79. package/dist/delegation/analytics/index.js +0 -1
  80. package/dist/delegation/analytics/learning-engine.js +0 -1
  81. package/dist/delegation/analytics/outcome-tracker.js +0 -1
  82. package/dist/delegation/analytics/routing-analytics.js +0 -1
  83. package/dist/delegation/ast-code-parser.js +0 -1
  84. package/dist/delegation/complexity-analyzer.js +0 -1
  85. package/dist/delegation/dependency-graph-builder.js +0 -1
  86. package/dist/delegation/index.js +0 -1
  87. package/dist/delegation/metrics-aggregator.js +0 -1
  88. package/dist/delegation/session-coordinator.js +0 -1
  89. package/dist/delegation/strategy-selector.js +0 -1
  90. package/dist/delegation/voting-coordinator.js +0 -1
  91. package/dist/delegation/voting-types.js +0 -1
  92. package/dist/delegation/weighted-voting-aggregator.js +0 -1
  93. package/dist/enforcement/core/index.js +0 -1
  94. package/dist/enforcement/core/rule-executor.js +0 -1
  95. package/dist/enforcement/core/rule-hierarchy.js +0 -1
  96. package/dist/enforcement/core/rule-registry.js +0 -1
  97. package/dist/enforcement/core/violation-fixer.js +0 -1
  98. package/dist/enforcement/enforcer-tools.js +2 -2
  99. package/dist/enforcement/index.js +0 -1
  100. package/dist/enforcement/loaders/agent-triage-loader.js +0 -1
  101. package/dist/enforcement/loaders/agents-md-validation-loader.js +0 -1
  102. package/dist/enforcement/loaders/base-loader.js +0 -1
  103. package/dist/enforcement/loaders/codex-loader.js +2 -3
  104. package/dist/enforcement/loaders/index.js +0 -1
  105. package/dist/enforcement/loaders/loader-orchestrator.js +0 -1
  106. package/dist/enforcement/loaders/processor-loader.js +0 -1
  107. package/dist/enforcement/types.js +0 -1
  108. package/dist/enforcement/validators/architecture-validators.js +0 -1
  109. package/dist/enforcement/validators/base-validator.js +0 -1
  110. package/dist/enforcement/validators/code-quality-validators.js +0 -1
  111. package/dist/enforcement/validators/index.js +0 -1
  112. package/dist/enforcement/validators/security-validators.js +0 -1
  113. package/dist/enforcement/validators/testing-validators.js +0 -1
  114. package/dist/enforcement/validators/validator-registry.js +0 -1
  115. package/dist/execution/opencode-cli-invoker.js +1 -1
  116. package/dist/governance/codex-policy.service.js +0 -1
  117. package/dist/governance/governance-service.js +1 -1
  118. package/dist/governance/llm-governance-provider.js +14 -1
  119. package/dist/index.js +3 -5
  120. package/dist/inference/inference-agent-invoker.js +67 -0
  121. package/dist/inference/inference-applier.js +178 -0
  122. package/dist/inference/inference-cycle.js +52 -828
  123. package/dist/inference/inference-proposal-generator.js +149 -0
  124. package/dist/infrastructure/iac-validator.js +465 -0
  125. package/dist/infrastructure/schemas/cloud-schemas.js +488 -0
  126. package/dist/integrations/base/ExampleIntegration.js +0 -1
  127. package/dist/integrations/base/Integration.js +0 -1
  128. package/dist/integrations/base/README.md +1 -1
  129. package/dist/integrations/base/index.js +0 -1
  130. package/dist/integrations/base/registry.js +0 -1
  131. package/dist/integrations/base/types.js +0 -1
  132. package/dist/integrations/enforcement-gate.js +5 -5
  133. package/dist/integrations/governance/governance-client.js +0 -1
  134. package/dist/integrations/governance/index.js +11 -19
  135. package/dist/integrations/governance/types.js +0 -1
  136. package/dist/integrations/grok/grok-cli.js +20 -6
  137. package/dist/integrations/grok/hooks/pre-tool-use.js +3 -3
  138. package/dist/integrations/grok/plugin/0xray/.mcp.json +16 -4
  139. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
  140. package/dist/integrations/hermes-agent/__init__.py +29 -14
  141. package/dist/integrations/hermes-agent/bridge.mjs +76 -4
  142. package/dist/integrations/hermes-agent/schemas.py +49 -0
  143. package/dist/integrations/hermes-agent/test_plugin.py +7 -7
  144. package/dist/integrations/hermes-agent/tools.py +107 -3
  145. package/dist/integrations/openclaw/README.md +6 -6
  146. package/dist/integrations/openclaw/api-server.js +0 -1
  147. package/dist/integrations/openclaw/client.js +0 -1
  148. package/dist/integrations/openclaw/config.js +1 -2
  149. package/dist/integrations/openclaw/hooks/{strray-hooks.js → xray-hooks.js} +0 -1
  150. package/dist/integrations/openclaw/index.js +2 -3
  151. package/dist/integrations/openclaw/types.js +3 -4
  152. package/dist/integrations/plugins/index.js +0 -1
  153. package/dist/integrations/plugins/plugin-integration.js +1 -2
  154. package/dist/integrations/plugins/plugin-registry.js +1 -2
  155. package/dist/mcps/agent-resolver.js +0 -1
  156. package/dist/mcps/architect-tools.server.js +121 -186
  157. package/dist/mcps/auto-format.server.js +57 -75
  158. package/dist/mcps/boot-orchestrator.server.js +68 -86
  159. package/dist/mcps/config/config-loader.js +46 -9
  160. package/dist/mcps/config/plugin-server-registry.js +0 -1
  161. package/dist/mcps/enforcer-tools.server.js +208 -274
  162. package/dist/mcps/estimation.server.js +65 -108
  163. package/dist/mcps/framework-compliance-audit.server.js +53 -82
  164. package/dist/mcps/framework-help.server.js +73 -90
  165. package/dist/mcps/governance.server.js +104 -152
  166. package/dist/mcps/knowledge-skills/api-design.server.js +35 -66
  167. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +35 -66
  168. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +125 -165
  169. package/dist/mcps/knowledge-skills/code-analyzer.server.js +211 -238
  170. package/dist/mcps/knowledge-skills/code-review.server.js +109 -143
  171. package/dist/mcps/knowledge-skills/content-creator.server.js +205 -227
  172. package/dist/mcps/knowledge-skills/database-design.server.js +117 -151
  173. package/dist/mcps/knowledge-skills/devops-deployment.server.js +125 -158
  174. package/dist/mcps/knowledge-skills/git-workflow.server.js +36 -68
  175. package/dist/mcps/knowledge-skills/growth-strategist.server.js +303 -325
  176. package/dist/mcps/knowledge-skills/log-monitor.server.js +141 -161
  177. package/dist/mcps/knowledge-skills/mobile-development.server.js +172 -202
  178. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +124 -160
  179. package/dist/mcps/knowledge-skills/performance-optimization.server.js +89 -139
  180. package/dist/mcps/knowledge-skills/project-analysis.server.js +132 -219
  181. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +117 -151
  182. package/dist/mcps/knowledge-skills/security-audit.server.js +17 -144
  183. package/dist/mcps/knowledge-skills/seo-consultant.server.js +22 -214
  184. package/dist/mcps/knowledge-skills/session-management.server.js +15 -91
  185. package/dist/mcps/knowledge-skills/skill-invocation.server.js +83 -359
  186. package/dist/mcps/knowledge-skills/strategist.server.js +12 -57
  187. package/dist/mcps/knowledge-skills/tech-writer.server.js +18 -193
  188. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +20 -192
  189. package/dist/mcps/knowledge-skills/testing-strategy.server.js +19 -157
  190. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +24 -297
  191. package/dist/mcps/lint.server.js +51 -92
  192. package/dist/mcps/model-health-check.server.js +34 -61
  193. package/dist/mcps/orchestrator/aside-context.js +207 -0
  194. package/dist/mcps/orchestrator/handlers/complexity-handler.js +5 -1
  195. package/dist/mcps/orchestrator/handlers/status-handler.js +8 -1
  196. package/dist/mcps/orchestrator/handlers/task-handler.js +5 -0
  197. package/dist/mcps/orchestrator/index.js +5 -0
  198. package/dist/mcps/orchestrator/server.js +65 -9
  199. package/dist/mcps/orchestrator.server.js +2 -1
  200. package/dist/mcps/performance-analysis.server.js +57 -88
  201. package/dist/mcps/processor-pipeline.server.js +70 -100
  202. package/dist/mcps/registry.json +1 -1
  203. package/dist/mcps/researcher.server.js +81 -154
  204. package/dist/mcps/security-scan.server.js +57 -71
  205. package/dist/mcps/shared/knowledge-skill-base.js +11 -4
  206. package/dist/mcps/state-manager.server.js +127 -155
  207. package/dist/metrics/agent-metrics.js +1 -1
  208. package/dist/monitoring/nudge-watchdog.js +0 -1
  209. package/dist/nucleus/default-plugins.js +13 -19
  210. package/dist/nucleus/index.js +0 -1
  211. package/dist/orchestrator/agent-spawn-governor.js +0 -1
  212. package/dist/orchestrator/enhanced-multi-agent-orchestrator.js +2 -2
  213. package/dist/orchestrator/intelligent-commit-batcher.js +2 -11
  214. package/dist/orchestrator/multi-agent-orchestration-coordinator.js +1 -2
  215. package/dist/orchestrator/orchestrator.js +8 -19
  216. package/dist/orchestrator/self-direction-activation.js +0 -1
  217. package/dist/orchestrator/universal-registry-bridge.js +1 -2
  218. package/dist/performance/performance-budget-enforcer.js +0 -1
  219. package/dist/performance/performance-regression-tester.js +0 -1
  220. package/dist/plugin/plugin-codex-context.js +87 -0
  221. package/dist/plugin/plugin-helpers.js +155 -0
  222. package/dist/plugin/plugin-logger.js +46 -0
  223. package/dist/plugin/plugin-modules.js +144 -0
  224. package/dist/plugin/plugin-quality-gate.js +88 -0
  225. package/dist/plugin/plugin-types.js +1 -0
  226. package/dist/plugin/xray-codex-injection.js +39 -558
  227. package/dist/postprocessor/PostProcessor.js +7 -13
  228. package/dist/postprocessor/analysis/CodeChangeAnalyzer.js +50 -0
  229. package/dist/postprocessor/config/ProcessorConfigLoader.js +16 -0
  230. package/dist/postprocessor/integration.js +194 -0
  231. package/dist/postprocessor/metamorphosis/SelfProposalEngine.js +472 -0
  232. package/dist/postprocessor/metamorphosis/index.js +1 -0
  233. package/dist/postprocessor/redeploy/RetryHandler.js +118 -0
  234. package/dist/postprocessor/services/RegressionAnalysisService.js +2 -3
  235. package/dist/postprocessor/triggers/APITrigger.js +0 -1
  236. package/dist/postprocessor/triggers/GitHookTrigger.js +4 -4
  237. package/dist/postprocessor/triggers/WebhookTrigger.js +0 -1
  238. package/dist/processors/implementations/agents-md-validation-processor.js +0 -1
  239. package/dist/processors/implementations/async-pattern-processor.js +0 -1
  240. package/dist/processors/implementations/console-log-guard-processor.js +0 -1
  241. package/dist/processors/implementations/coverage-analysis-processor.js +0 -1
  242. package/dist/processors/implementations/inference-improvement-processor.js +2 -10
  243. package/dist/processors/implementations/log-protection-processor.js +0 -1
  244. package/dist/processors/implementations/nudge-processor.js +0 -1
  245. package/dist/processors/implementations/performance-budget-processor.js +0 -1
  246. package/dist/processors/implementations/postprocessor-chain-validator.js +0 -1
  247. package/dist/processors/implementations/publish-preflight-processor.js +4 -13
  248. package/dist/processors/implementations/session-summary-processor.js +8 -16
  249. package/dist/processors/implementations/spawn-governance-processor.js +0 -1
  250. package/dist/processors/implementations/storytelling-trigger-processor.js +3 -29
  251. package/dist/processors/implementations/test-auto-creation-processor.js +0 -1
  252. package/dist/processors/implementations/typescript-compilation-processor.js +0 -1
  253. package/dist/processors/implementations/version-compliance-processor.js +0 -1
  254. package/dist/processors/processor-interfaces.js +0 -1
  255. package/dist/processors/processor-types.js +0 -1
  256. package/dist/public/about.html +6 -6
  257. package/dist/public/enterprise.html +1 -1
  258. package/dist/public/features.html +2 -2
  259. package/dist/public/index.html +4 -4
  260. package/dist/reporting/report-formatter.js +1 -1
  261. package/dist/scripts/activate-kernel-pipeline.js +2 -2
  262. package/dist/scripts/integration.js +0 -1
  263. package/dist/scripts/pre-command +1 -1
  264. package/dist/security/comprehensive-security-audit.js +0 -1
  265. package/dist/security/security-agent-coordinator.js +0 -1
  266. package/dist/security/security-auditor.js +0 -1
  267. package/dist/security/security-hardener.js +0 -1
  268. package/dist/security/security-hardening-system.js +0 -1
  269. package/dist/security/security-headers.js +0 -1
  270. package/dist/security/security-orchestration-layer.js +0 -1
  271. package/dist/services/inference-tuner.js +1 -2
  272. package/dist/session/session-cleanup-manager.js +0 -1
  273. package/dist/session/session-monitor.js +0 -1
  274. package/dist/session/session-state-manager.js +0 -1
  275. package/dist/skills/api-design/SKILL.md +1 -1
  276. package/dist/skills/architect-tools/SKILL.md +1 -1
  277. package/dist/skills/architecture-patterns/SKILL.md +1 -1
  278. package/dist/skills/auto-format/SKILL.md +1 -1
  279. package/dist/skills/boot-orchestrator/SKILL.md +1 -1
  280. package/dist/skills/bug-triage/SKILL.md +1 -1
  281. package/dist/skills/code-analyzer/SKILL.md +1 -1
  282. package/dist/skills/code-review/SKILL.md +1 -1
  283. package/dist/skills/enforcer/SKILL.md +1 -1
  284. package/dist/skills/framework-compliance-audit/SKILL.md +1 -1
  285. package/dist/skills/git-workflow/SKILL.md +1 -1
  286. package/dist/skills/hermes-agent/SKILL.md +2 -2
  287. package/dist/skills/inference-improve/SKILL.md +1 -1
  288. package/dist/skills/lint/SKILL.md +1 -1
  289. package/dist/skills/log-monitor/SKILL.md +1 -1
  290. package/dist/skills/model-health-check/SKILL.md +1 -1
  291. package/dist/skills/multimodal-looker/SKILL.md +1 -1
  292. package/dist/skills/orchestrator/SKILL.md +1 -1
  293. package/dist/skills/performance-analysis/SKILL.md +1 -1
  294. package/dist/skills/performance-optimization/SKILL.md +1 -1
  295. package/dist/skills/processor-pipeline/SKILL.md +1 -1
  296. package/dist/skills/project-analysis/SKILL.md +1 -1
  297. package/dist/skills/refactoring-strategies/SKILL.md +1 -1
  298. package/dist/skills/registry.json +1 -1
  299. package/dist/skills/researcher/SKILL.md +1 -1
  300. package/dist/skills/security-audit/SKILL.md +1 -1
  301. package/dist/skills/security-scan/SKILL.md +1 -1
  302. package/dist/skills/session-management/SKILL.md +1 -1
  303. package/dist/skills/state-manager/SKILL.md +1 -1
  304. package/dist/skills/storyteller/SKILL.md +1 -1
  305. package/dist/skills/testing-best-practices/SKILL.md +1 -1
  306. package/dist/skills/testing-strategy/SKILL.md +1 -1
  307. package/dist/skills/ui-ux-design/SKILL.md +1 -1
  308. package/dist/skills/xray-orchestrator/index.js +0 -1
  309. package/dist/state/index.js +0 -1
  310. package/dist/state/state-manager.js +1 -2
  311. package/dist/utils/codex-parser.js +0 -1
  312. package/dist/utils/import-resolver.js +1 -1
  313. package/dist/utils/language-detector.js +0 -1
  314. package/dist/utils/path-resolver.js +2 -2
  315. package/dist/utils/shutdown-handler.js +0 -1
  316. package/dist/validation/agent-config-validator.js +280 -0
  317. package/dist/validation/orchestration-flow-validator.js +606 -0
  318. package/package.json +10 -3
  319. package/scripts/hooks/pre-command +1 -1
  320. package/scripts/hooks/run-hook.js +2 -2
  321. package/scripts/node/auto-reflection-generator.mjs +30 -36
  322. package/scripts/node/govern-reflection.mjs +1 -1
  323. package/scripts/node/postinstall.cjs +37 -2
  324. package/scripts/node/release.mjs +2 -2
  325. package/scripts/node/setup-xai-oauth.mjs +244 -0
  326. package/scripts/node/setup.cjs +28 -0
  327. package/scripts/node/universal-version-manager.js +8 -8
  328. package/scripts/node/version-manager.mjs +1 -1
  329. package/src/integrations/grok/plugin/0xray/.mcp.json +16 -4
  330. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +2 -2
  331. package/src/mcps/agent-resolver.ts +0 -1
  332. package/src/mcps/architect-tools.server.ts +130 -212
  333. package/src/mcps/auto-format.server.ts +75 -104
  334. package/src/mcps/boot-orchestrator.server.ts +72 -97
  335. package/src/mcps/config/__tests__/config-loader.test.ts +33 -37
  336. package/src/mcps/config/config-loader.ts +57 -11
  337. package/src/mcps/config/plugin-server-registry.ts +0 -1
  338. package/src/mcps/enforcer-tools.server.ts +218 -295
  339. package/src/mcps/estimation.server.ts +64 -123
  340. package/src/mcps/framework-compliance-audit.server.ts +54 -96
  341. package/src/mcps/framework-help.server.ts +76 -97
  342. package/src/mcps/governance.server.ts +104 -164
  343. package/src/mcps/knowledge-skills/api-design.server.ts +35 -73
  344. package/src/mcps/knowledge-skills/architecture-patterns.server.ts +34 -73
  345. package/src/mcps/knowledge-skills/bug-triage-specialist.server.ts +149 -194
  346. package/src/mcps/knowledge-skills/code-analyzer.server.ts +223 -255
  347. package/src/mcps/knowledge-skills/code-review.server.ts +116 -158
  348. package/src/mcps/knowledge-skills/content-creator.server.ts +221 -248
  349. package/src/mcps/knowledge-skills/database-design.server.ts +120 -161
  350. package/src/mcps/knowledge-skills/devops-deployment.server.ts +128 -168
  351. package/src/mcps/knowledge-skills/git-workflow.server.ts +34 -78
  352. package/src/mcps/knowledge-skills/growth-strategist.server.ts +324 -362
  353. package/src/mcps/knowledge-skills/log-monitor.server.ts +70 -97
  354. package/src/mcps/knowledge-skills/mobile-development.server.ts +18 -58
  355. package/src/mcps/knowledge-skills/multimodal-looker.server.ts +15 -61
  356. package/src/mcps/knowledge-skills/performance-optimization.server.ts +14 -75
  357. package/src/mcps/knowledge-skills/project-analysis.server.ts +14 -121
  358. package/src/mcps/knowledge-skills/refactoring-strategies.server.ts +15 -61
  359. package/src/mcps/knowledge-skills/security-audit.server.ts +20 -158
  360. package/src/mcps/knowledge-skills/seo-consultant.server.ts +25 -228
  361. package/src/mcps/knowledge-skills/session-management.server.ts +19 -107
  362. package/src/mcps/knowledge-skills/skill-invocation.server.ts +89 -380
  363. package/src/mcps/knowledge-skills/strategist.server.ts +15 -65
  364. package/src/mcps/knowledge-skills/tech-writer.server.ts +21 -206
  365. package/src/mcps/knowledge-skills/testing-best-practices.server.ts +23 -205
  366. package/src/mcps/knowledge-skills/testing-strategy.server.ts +22 -166
  367. package/src/mcps/knowledge-skills/ui-ux-design.server.ts +27 -343
  368. package/src/mcps/lint.server.ts +53 -106
  369. package/src/mcps/model-health-check.server.ts +35 -71
  370. package/src/mcps/orchestrator/aside-context.ts +245 -0
  371. package/src/mcps/orchestrator/handlers/complexity-handler.ts +9 -3
  372. package/src/mcps/orchestrator/handlers/status-handler.ts +11 -1
  373. package/src/mcps/orchestrator/handlers/task-handler.ts +8 -1
  374. package/src/mcps/orchestrator/index.ts +29 -0
  375. package/src/mcps/orchestrator/server.ts +81 -25
  376. package/src/mcps/orchestrator/types.ts +37 -0
  377. package/src/mcps/orchestrator.server.ts +2 -1
  378. package/src/mcps/performance-analysis.server.ts +60 -103
  379. package/src/mcps/processor-pipeline.server.ts +72 -109
  380. package/src/mcps/registry.json +1 -1
  381. package/src/mcps/researcher.server.ts +88 -176
  382. package/src/mcps/security-scan.server.ts +58 -77
  383. package/src/mcps/shared/knowledge-skill-base.ts +12 -4
  384. package/src/mcps/state-manager.server.ts +132 -172
  385. package/src/opencode/codex.codex +1 -1
  386. package/src/opencode/commands/auto-format.md +3 -3
  387. package/src/opencode/commands/auto-summary-capture.md +2 -2
  388. package/src/opencode/commands/dependency-audit.md +3 -3
  389. package/src/opencode/commands/enforcer-daily-scan.md +3 -3
  390. package/src/opencode/commands/framework-compliance-audit.md +4 -4
  391. package/src/opencode/commands/interactive-validator.md +2 -2
  392. package/src/opencode/commands/job-summary-logger.md +2 -2
  393. package/src/opencode/commands/mode-switch.md +1 -1
  394. package/src/opencode/commands/model-health-check.md +2 -2
  395. package/src/opencode/commands/performance-analysis.md +2 -2
  396. package/src/opencode/commands/pre-commit-introspection.md +3 -3
  397. package/src/opencode/commands/security-scan.md +3 -3
  398. package/src/opencode/commands/sisyphus-validation.md +3 -3
  399. package/src/opencode/commands/summary-logger.md +6 -6
  400. package/src/opencode/enforcer-config.json +2 -2
  401. package/src/skills/api-design/SKILL.md +1 -1
  402. package/src/skills/architect-tools/SKILL.md +1 -1
  403. package/src/skills/architecture-patterns/SKILL.md +1 -1
  404. package/src/skills/auto-format/SKILL.md +1 -1
  405. package/src/skills/boot-orchestrator/SKILL.md +1 -1
  406. package/src/skills/bug-triage/SKILL.md +1 -1
  407. package/src/skills/code-analyzer/SKILL.md +1 -1
  408. package/src/skills/code-review/SKILL.md +1 -1
  409. package/src/skills/enforcer/SKILL.md +1 -1
  410. package/src/skills/framework-compliance-audit/SKILL.md +1 -1
  411. package/src/skills/git-workflow/SKILL.md +1 -1
  412. package/src/skills/hermes-agent/SKILL.md +2 -2
  413. package/src/skills/inference-improve/SKILL.md +1 -1
  414. package/src/skills/lint/SKILL.md +1 -1
  415. package/src/skills/log-monitor/SKILL.md +1 -1
  416. package/src/skills/model-health-check/SKILL.md +1 -1
  417. package/src/skills/multimodal-looker/SKILL.md +1 -1
  418. package/src/skills/orchestrator/SKILL.md +1 -1
  419. package/src/skills/performance-analysis/SKILL.md +1 -1
  420. package/src/skills/performance-optimization/SKILL.md +1 -1
  421. package/src/skills/processor-pipeline/SKILL.md +1 -1
  422. package/src/skills/project-analysis/SKILL.md +1 -1
  423. package/src/skills/refactoring-strategies/SKILL.md +1 -1
  424. package/src/skills/registry.json +1 -1
  425. package/src/skills/researcher/SKILL.md +1 -1
  426. package/src/skills/security-audit/SKILL.md +1 -1
  427. package/src/skills/security-scan/SKILL.md +1 -1
  428. package/src/skills/session-management/SKILL.md +1 -1
  429. package/src/skills/state-manager/SKILL.md +1 -1
  430. package/src/skills/storyteller/SKILL.md +1 -1
  431. package/src/skills/testing-best-practices/SKILL.md +1 -1
  432. package/src/skills/testing-strategy/SKILL.md +1 -1
  433. package/src/skills/ui-ux-design/SKILL.md +1 -1
  434. package/src/skills/xray-orchestrator/index.ts +0 -1
  435. package/xray/agents_template.md +46 -0
  436. package/xray/codex.json +598 -0
  437. package/dist/nucleus/orchestrator.js +0 -479
@@ -0,0 +1,472 @@
1
+ /**
2
+ * SelfProposalEngine — Phase 2.2
3
+ *
4
+ * Concrete MetamorphosisEngine that reads activity.log, parses structured
5
+ * log entries, detects semantic patterns, generates governance proposals
6
+ * (type: 'metamorphosis'), and submits them through the full 3-agent +
7
+ * Dynamo governance pipeline.
8
+ *
9
+ * Safety constraints:
10
+ * - Max proposals per hour (default 1, configurable)
11
+ * - Circuit breaker: after N consecutive failures, halt for cooldown (default 3/24h)
12
+ * - Only proposes changes to whitelisted targets
13
+ * - All proposals go through full governance with metamorphosisThreshold (default 0.7)
14
+ * - Detection thresholds are configurable (not hard-coded)
15
+ *
16
+ * Coupling note: currently triggered by PostProcessor.onPhase(). A future
17
+ * refactor should extract log-reading into a dedicated LogReader that can
18
+ * run on its own schedule or fs.watch, decoupling from PostProcessor lifecycle.
19
+ */
20
+ import { promises as fs, existsSync } from 'fs';
21
+ import { join } from 'path';
22
+ import { frameworkLogger } from '../../core/framework-logger.js';
23
+ import { handleGovernRequest } from '../../nucleus/govern-http.js';
24
+ const DEFAULT_CONFIG = {
25
+ maxProposalsPerHour: 1,
26
+ circuitBreakerThreshold: 3,
27
+ circuitBreakerCooldownHours: 24,
28
+ activityLogPath: 'logs/framework/activity.log',
29
+ whitelistedTargets: ['config/', 'features.json', 'src/processors/'],
30
+ maxLogLines: 100,
31
+ errorThreshold: 5,
32
+ warningThreshold: 10,
33
+ governanceRejectionThreshold: 3,
34
+ proposalConfidence: 0.7,
35
+ metamorphosisThreshold: 0.7,
36
+ projectRoot: process.cwd(),
37
+ };
38
+ const LOG_LINE_PATTERN = /^(\d{4}-\d{2}-\d{2}T[^ ]+)\s+(?:\[([^\]]*)\]\s+)?(?:\[([^\]]*)\]\s+)?\[([^\]]*)\]\s+(\S+)\s+-\s+(\w+)(?:\s+\|(.+))?$/;
39
+ function parseLogEntry(line) {
40
+ const match = line.match(LOG_LINE_PATTERN);
41
+ if (!match) {
42
+ // Fallback: try JSON parse for entangled log entries
43
+ try {
44
+ const json = JSON.parse(line);
45
+ if (json && typeof json === 'object' && json.action) {
46
+ return {
47
+ timestamp: json.timestamp ? new Date(json.timestamp).toISOString() : new Date().toISOString(),
48
+ component: json.component || 'unknown',
49
+ action: json.action,
50
+ status: (json.status || json.level || 'info').toLowerCase(),
51
+ details: json.details || json,
52
+ raw: line,
53
+ };
54
+ }
55
+ }
56
+ catch { }
57
+ return null;
58
+ }
59
+ const [, timestamp, , , component, action, status, detailsStr] = match;
60
+ let details;
61
+ if (detailsStr) {
62
+ try {
63
+ details = JSON.parse(detailsStr.trim());
64
+ }
65
+ catch {
66
+ details = { rawDetails: detailsStr.trim() };
67
+ }
68
+ }
69
+ const entry = {
70
+ timestamp: timestamp ?? new Date().toISOString(),
71
+ component: component || 'unknown',
72
+ action: action ?? 'unknown',
73
+ status: (status ?? 'info').toLowerCase(),
74
+ raw: line,
75
+ };
76
+ if (details !== undefined) {
77
+ entry.details = details;
78
+ }
79
+ return entry;
80
+ }
81
+ export class SelfProposalEngine {
82
+ name = 'self-proposal';
83
+ config;
84
+ proposalHistory = [];
85
+ consecutiveFailures = 0;
86
+ circuitBreakerUntil = 0;
87
+ constructor(config) {
88
+ this.config = { ...DEFAULT_CONFIG, ...config };
89
+ }
90
+ async onPhase(phase, context) {
91
+ if (phase !== 'monitoring-complete' && phase !== 'post-process-complete') {
92
+ return;
93
+ }
94
+ await frameworkLogger.log('self-proposal', 'phase-hook', 'info', {
95
+ phase,
96
+ message: 'Self-proposal engine triggered by phase',
97
+ });
98
+ if (this.isCircuitBreakerActive()) {
99
+ await frameworkLogger.log('self-proposal', 'circuit-breaker-active', 'warning', {
100
+ message: `Circuit breaker active until ${new Date(this.circuitBreakerUntil).toISOString()}`,
101
+ consecutiveFailures: this.consecutiveFailures,
102
+ });
103
+ return;
104
+ }
105
+ if (this.isRateLimited()) {
106
+ await frameworkLogger.log('self-proposal', 'rate-limited', 'info', {
107
+ message: 'Max proposals per hour reached',
108
+ });
109
+ return;
110
+ }
111
+ await this.evaluateAndPropose();
112
+ }
113
+ async onProposal(proposal) {
114
+ await frameworkLogger.log('self-proposal', 'external-proposal', 'info', {
115
+ proposalId: proposal.id,
116
+ type: proposal.type,
117
+ target: proposal.target,
118
+ impact: proposal.impact,
119
+ });
120
+ }
121
+ isCircuitBreakerActive() {
122
+ if (this.consecutiveFailures >= this.config.circuitBreakerThreshold) {
123
+ if (Date.now() < this.circuitBreakerUntil) {
124
+ return true;
125
+ }
126
+ this.consecutiveFailures = 0;
127
+ this.circuitBreakerUntil = 0;
128
+ }
129
+ return false;
130
+ }
131
+ isRateLimited() {
132
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
133
+ const recentProposals = this.proposalHistory.filter(a => a.timestamp > oneHourAgo);
134
+ return recentProposals.length >= this.config.maxProposalsPerHour;
135
+ }
136
+ getMetrics() {
137
+ const oneHourAgo = Date.now() - 60 * 60 * 1000;
138
+ const recentProposals = this.proposalHistory.filter(a => a.timestamp > oneHourAgo);
139
+ return {
140
+ totalProposals: this.proposalHistory.length,
141
+ recentProposals: recentProposals.length,
142
+ consecutiveFailures: this.consecutiveFailures,
143
+ circuitBreakerActive: this.isCircuitBreakerActive(),
144
+ circuitBreakerUntil: this.circuitBreakerUntil,
145
+ successRate: this.proposalHistory.length > 0
146
+ ? this.proposalHistory.filter(a => a.result === 'approved').length / this.proposalHistory.length
147
+ : 0,
148
+ };
149
+ }
150
+ async evaluateAndPropose() {
151
+ let logEntries = [];
152
+ try {
153
+ const logContent = await fs.readFile(this.config.activityLogPath, 'utf-8');
154
+ const lines = logContent.trim().split('\n');
155
+ logEntries = lines.slice(-this.config.maxLogLines).filter(line => line.trim().length > 0);
156
+ }
157
+ catch {
158
+ await frameworkLogger.log('self-proposal', 'log-read-error', 'warning', {
159
+ path: this.config.activityLogPath,
160
+ message: 'Activity log not found or unreadable — skipping self-proposal',
161
+ });
162
+ return;
163
+ }
164
+ const patterns = this.detectPatterns(logEntries);
165
+ if (patterns.length === 0) {
166
+ await frameworkLogger.log('self-proposal', 'no-patterns', 'info', {
167
+ message: 'No actionable patterns detected in activity log',
168
+ });
169
+ return;
170
+ }
171
+ for (const pattern of patterns) {
172
+ await this.submitProposal(pattern);
173
+ }
174
+ }
175
+ /**
176
+ * Detect actionable patterns from parsed activity log entries.
177
+ * Uses structured parsing instead of raw string matching to handle
178
+ * the actual xray log format:
179
+ * ISO_TIMESTAMP [jobId] [traceId.spanId] [component] action - STATUS | {details}
180
+ */
181
+ detectPatterns(entries) {
182
+ const parsed = entries.map(parseLogEntry).filter((e) => e !== null);
183
+ const proposals = [];
184
+ const errorEntries = parsed.filter(e => e.status === 'error');
185
+ const warningEntries = parsed.filter(e => e.status === 'warning');
186
+ const rejectedEntries = parsed.filter(e => e.component === 'governance' && (e.status === 'rejected' || e.details?.decision === 'reject'));
187
+ if (errorEntries.length >= this.config.errorThreshold) {
188
+ const components = [...new Set(errorEntries.map(e => e.component))];
189
+ proposals.push({
190
+ id: `meta-errors-${Date.now()}`,
191
+ type: 'modify',
192
+ target: 'config/error-handling',
193
+ description: `Elevated error rate: ${errorEntries.length} errors in last ${this.config.maxLogLines} entries. Components: ${components.join(', ')}. Propose adjusting error handling thresholds.`,
194
+ rationale: `High error count (${errorEntries.length}) across ${components.length} component(s) indicates a systemic issue. Affected components: ${components.join(', ')}. Governance review recommended for self-optimization.`,
195
+ impact: 'medium',
196
+ });
197
+ }
198
+ if (warningEntries.length >= this.config.warningThreshold) {
199
+ const components = [...new Set(warningEntries.map(e => e.component))];
200
+ proposals.push({
201
+ id: `meta-warnings-${Date.now()}`,
202
+ type: 'modify',
203
+ target: 'config/monitoring',
204
+ description: `Elevated warning rate: ${warningEntries.length} warnings in last ${this.config.maxLogLines} entries. Components: ${components.join(', ')}. Propose adjusting monitoring sensitivity.`,
205
+ rationale: `Frequent warnings (${warningEntries.length}) across ${components.length} component(s) may indicate configuration drift. Affected: ${components.join(', ')}.`,
206
+ impact: 'low',
207
+ });
208
+ }
209
+ if (rejectedEntries.length >= this.config.governanceRejectionThreshold) {
210
+ proposals.push({
211
+ id: `meta-governance-rejections-${Date.now()}`,
212
+ type: 'modify',
213
+ target: 'config/governance',
214
+ description: `Repeated governance rejections: ${rejectedEntries.length} in last ${this.config.maxLogLines} entries. Propose reviewing governance thresholds or submission patterns.`,
215
+ rationale: `${rejectedEntries.length} governance rejections suggest a pattern mismatch between proposals and governance criteria. Review recommended.`,
216
+ impact: 'medium',
217
+ });
218
+ }
219
+ return proposals.filter(p => this.config.whitelistedTargets.some(t => p.target.startsWith(t)));
220
+ }
221
+ /**
222
+ * Apply an approved self-evolution proposal by recording the change
223
+ * in a state file within the first matching whitelisted target directory.
224
+ * Returns true if the change was written and verified, false otherwise.
225
+ */
226
+ async applySelfProposal(pattern, score, decision) {
227
+ const matchedTarget = this.config.whitelistedTargets.find(t => pattern.target.startsWith(t));
228
+ if (!matchedTarget) {
229
+ await frameworkLogger.log('self-proposal', 'apply-no-matching-target', 'warning', {
230
+ proposalId: pattern.id,
231
+ target: pattern.target,
232
+ message: 'No whitelisted target matches this proposal — skipping apply',
233
+ });
234
+ return false;
235
+ }
236
+ const root = this.config.projectRoot;
237
+ const stateDir = join(root, matchedTarget);
238
+ const statePath = join(stateDir, 'self-evolution-state.json');
239
+ let applied = [];
240
+ try {
241
+ const content = await fs.readFile(statePath, 'utf-8');
242
+ const parsed = JSON.parse(content);
243
+ if (Array.isArray(parsed.applied))
244
+ applied = parsed.applied;
245
+ }
246
+ catch { }
247
+ applied.push({
248
+ proposalId: pattern.id,
249
+ target: pattern.target,
250
+ type: pattern.type,
251
+ description: pattern.description,
252
+ rationale: pattern.rationale,
253
+ impact: pattern.impact,
254
+ metamorphosisScore: score,
255
+ decision: decision,
256
+ appliedAt: new Date().toISOString(),
257
+ });
258
+ try {
259
+ await fs.mkdir(stateDir, { recursive: true });
260
+ // Backup existing state file before overwriting
261
+ const backupDir = join(root, '.xray', 'metamorphosis', 'backups');
262
+ let backupPath = null;
263
+ if (existsSync(statePath)) {
264
+ await fs.mkdir(backupDir, { recursive: true });
265
+ backupPath = join(backupDir, `self-evolution-state-${Date.now()}.json`);
266
+ await fs.copyFile(statePath, backupPath);
267
+ await frameworkLogger.log('self-proposal', 'backup-created', 'info', {
268
+ proposalId: pattern.id,
269
+ backupPath,
270
+ });
271
+ }
272
+ try {
273
+ await fs.writeFile(statePath, JSON.stringify({ applied }, null, 2), 'utf-8');
274
+ }
275
+ catch (writeError) {
276
+ // Restore from backup on write failure
277
+ if (backupPath && existsSync(backupPath)) {
278
+ await fs.copyFile(backupPath, statePath);
279
+ await frameworkLogger.log('self-proposal', 'restored-from-backup', 'warning', {
280
+ proposalId: pattern.id,
281
+ backupPath,
282
+ error: writeError instanceof Error ? writeError.message : String(writeError),
283
+ });
284
+ }
285
+ await frameworkLogger.log('self-proposal', 'apply-write-error', 'error', {
286
+ proposalId: pattern.id,
287
+ path: statePath,
288
+ error: writeError instanceof Error ? writeError.message : String(writeError),
289
+ });
290
+ return false;
291
+ }
292
+ }
293
+ catch (writeError) {
294
+ await frameworkLogger.log('self-proposal', 'apply-mkdir-error', 'error', {
295
+ proposalId: pattern.id,
296
+ error: writeError instanceof Error ? writeError.message : String(writeError),
297
+ });
298
+ return false;
299
+ }
300
+ try {
301
+ const verify = await fs.readFile(statePath, 'utf-8');
302
+ const parsed = JSON.parse(verify);
303
+ const found = Array.isArray(parsed.applied) && parsed.applied.some((a) => a.proposalId === pattern.id);
304
+ if (!found) {
305
+ await frameworkLogger.log('self-proposal', 'apply-verify-failed', 'error', {
306
+ proposalId: pattern.id,
307
+ message: 'Applied change not found in state file after write — verification failed',
308
+ });
309
+ }
310
+ return found;
311
+ }
312
+ catch (verifyError) {
313
+ await frameworkLogger.log('self-proposal', 'apply-verify-error', 'error', {
314
+ proposalId: pattern.id,
315
+ error: verifyError instanceof Error ? verifyError.message : String(verifyError),
316
+ });
317
+ return false;
318
+ }
319
+ }
320
+ async submitProposal(pattern) {
321
+ const governanceRequest = {
322
+ proposals: [{
323
+ id: pattern.id,
324
+ type: 'metamorphosis',
325
+ title: `Self-proposal: ${pattern.description.slice(0, 80)}`,
326
+ description: pattern.description,
327
+ evidence: [pattern.rationale],
328
+ source: 'metamorphosis',
329
+ confidence: this.config.proposalConfidence,
330
+ tags: ['0xray'],
331
+ }],
332
+ context: {
333
+ project: 'xray-self',
334
+ phase: 'self-evolution',
335
+ source: 'self-proposal-engine',
336
+ tags: ['0xray'],
337
+ },
338
+ options: {
339
+ requireExternalDynamo: true,
340
+ metamorphosisThreshold: this.config.metamorphosisThreshold,
341
+ },
342
+ };
343
+ await frameworkLogger.log('self-proposal', 'submitting', 'info', {
344
+ proposalId: pattern.id,
345
+ target: pattern.target,
346
+ impact: pattern.impact,
347
+ });
348
+ try {
349
+ const response = await handleGovernRequest(governanceRequest);
350
+ const result = response.results[0];
351
+ if (!result) {
352
+ await frameworkLogger.log('self-proposal', 'no-result', 'warning', {
353
+ proposalId: pattern.id,
354
+ message: 'Governance returned no results',
355
+ });
356
+ return;
357
+ }
358
+ const decision = result.finalDecision;
359
+ const attempt = {
360
+ timestamp: Date.now(),
361
+ result: decision === 'approve' ? 'approved' : decision === 'reject' ? 'rejected' : 'needs_revision',
362
+ };
363
+ if (result.metamorphosisScore !== undefined) {
364
+ attempt.metamorphosisScore = result.metamorphosisScore;
365
+ }
366
+ this.proposalHistory.push(attempt);
367
+ if (decision === 'approve' && (result.metamorphosisScore ?? 0) >= this.config.metamorphosisThreshold) {
368
+ this.consecutiveFailures = 0;
369
+ await frameworkLogger.log('self-proposal', 'approved', 'success', {
370
+ proposalId: pattern.id,
371
+ metamorphosisScore: result.metamorphosisScore,
372
+ finalDecision: decision,
373
+ averageConfidence: result.averageConfidence,
374
+ voteSummary: result.votes ? result.votes.map((v) => ({ server: v.server, decision: v.decision })) : undefined,
375
+ message: 'Self-evolution proposal approved by governance — applying change',
376
+ tags: ['0xray'],
377
+ });
378
+ const applied = await this.applySelfProposal(pattern, result.metamorphosisScore, decision);
379
+ if (applied) {
380
+ await frameworkLogger.log('self-proposal', 'applied', 'success', {
381
+ proposalId: pattern.id,
382
+ target: pattern.target,
383
+ metamorphosisScore: result.metamorphosisScore,
384
+ decision,
385
+ message: 'Self-evolution change applied and verified',
386
+ tags: ['0xray'],
387
+ });
388
+ await this.audit0xrayProposalTraceability(pattern.id, decision, result.metamorphosisScore);
389
+ }
390
+ else {
391
+ this.consecutiveFailures++;
392
+ if (this.consecutiveFailures >= this.config.circuitBreakerThreshold) {
393
+ this.circuitBreakerUntil = Date.now() + this.config.circuitBreakerCooldownHours * 60 * 60 * 1000;
394
+ }
395
+ await frameworkLogger.log('self-proposal', 'apply-failed', 'error', {
396
+ proposalId: pattern.id,
397
+ target: pattern.target,
398
+ consecutiveFailures: this.consecutiveFailures,
399
+ message: 'Self-evolution change apply failed — circuit breaker may activate',
400
+ });
401
+ }
402
+ }
403
+ else {
404
+ this.consecutiveFailures++;
405
+ if (this.consecutiveFailures >= this.config.circuitBreakerThreshold) {
406
+ this.circuitBreakerUntil = Date.now() + this.config.circuitBreakerCooldownHours * 60 * 60 * 1000;
407
+ }
408
+ await frameworkLogger.log('self-proposal', 'not-approved', 'warning', {
409
+ proposalId: pattern.id,
410
+ decision: decision,
411
+ metamorphosisScore: result.metamorphosisScore,
412
+ consecutiveFailures: this.consecutiveFailures,
413
+ circuitBreakerUntil: this.circuitBreakerUntil || 'not active',
414
+ });
415
+ }
416
+ }
417
+ catch (error) {
418
+ this.consecutiveFailures++;
419
+ await frameworkLogger.log('self-proposal', 'submission-error', 'error', {
420
+ proposalId: pattern.id,
421
+ error: error instanceof Error ? error.message : String(error),
422
+ });
423
+ }
424
+ }
425
+ /**
426
+ * Post-apply audit for Term 72 (Self-Evolution Traceability).
427
+ * For 0xray-tagged proposals (framework self-evolution), asserts that
428
+ * frameworkLogger entries exist with full provenance:
429
+ * - source proposal ID
430
+ * - governance vote results / finalDecision / averageConfidence
431
+ * - metamorphosisScore
432
+ * Logs the audit outcome via frameworkLogger.
433
+ */
434
+ async audit0xrayProposalTraceability(proposalId, decision, score) {
435
+ if (!proposalId) {
436
+ return;
437
+ }
438
+ try {
439
+ const logContent = await fs.readFile(this.config.activityLogPath, 'utf-8');
440
+ const lines = logContent.trim().split('\n').filter(l => l.trim().length > 0);
441
+ const recentLines = lines.slice(-this.config.maxLogLines);
442
+ // Look for entries tied to this proposalId that carry the required provenance.
443
+ // We expect 'approved' (with vote info) and 'applied' (with score/decision) for 0xray self-proposals.
444
+ const relevant = recentLines.filter(line => line.includes(proposalId) &&
445
+ (line.includes('approved') || line.includes('applied') || line.includes('submitting')));
446
+ const hasProposalId = relevant.length > 0;
447
+ const hasGovernanceVote = relevant.some(l => l.includes('finalDecision') || l.includes('averageConfidence') || l.includes('voteSummary'));
448
+ const hasMetamorphosisScore = relevant.some(l => l.includes('metamorphosisScore'));
449
+ const has0xrayTag = relevant.some(l => l.includes('0xray') || l.includes('"tags"') && l.includes('0xray'));
450
+ const auditPassed = hasProposalId && hasGovernanceVote && hasMetamorphosisScore && has0xrayTag;
451
+ await frameworkLogger.log('self-proposal', 'post-apply-audit', auditPassed ? 'success' : 'warning', {
452
+ proposalId,
453
+ decision,
454
+ metamorphosisScore: score,
455
+ hasProposalId,
456
+ hasGovernanceVote,
457
+ hasMetamorphosisScore,
458
+ has0xrayTag,
459
+ relevantEntryCount: relevant.length,
460
+ message: auditPassed
461
+ ? 'Term 72 traceability audit passed: frameworkLogger entries with full provenance (proposalId, governance votes, metamorphosisScore, 0xray tag) verified for self-evolution proposal.'
462
+ : 'Term 72 traceability audit warning: missing or incomplete frameworkLogger provenance for 0xray-tagged self-evolution proposal.',
463
+ });
464
+ }
465
+ catch (auditError) {
466
+ await frameworkLogger.log('self-proposal', 'post-apply-audit-error', 'error', {
467
+ proposalId,
468
+ error: auditError instanceof Error ? auditError.message : String(auditError),
469
+ });
470
+ }
471
+ }
472
+ }
@@ -0,0 +1 @@
1
+ export { SelfProposalEngine } from './SelfProposalEngine.js';
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Retry Handler for Redeploy Operations
3
+ */
4
+ import { frameworkLogger } from "../../core/framework-logger.js";
5
+ export class RetryHandler {
6
+ config;
7
+ constructor(config = {
8
+ maxRetries: 3,
9
+ baseDelay: 30000,
10
+ backoffStrategy: "exponential",
11
+ }) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * Execute an operation with retry logic
16
+ */
17
+ async executeWithRetry(operation, shouldRetry) {
18
+ let lastError = {};
19
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
20
+ try {
21
+ return await operation();
22
+ }
23
+ catch (error) {
24
+ const retryable = error;
25
+ lastError = retryable;
26
+ // Don't retry on the last attempt
27
+ if (attempt === this.config.maxRetries) {
28
+ break;
29
+ }
30
+ // Check if we should retry this error
31
+ if (shouldRetry && !shouldRetry(retryable, attempt)) {
32
+ break;
33
+ }
34
+ // Calculate delay and wait
35
+ const delay = this.calculateDelay(attempt);
36
+ await frameworkLogger.log("-retry-handler", "-operation-failed-attempt-attempt-1-retrying-in-de", "error", {
37
+ message: `⏳ Operation failed (attempt ${attempt + 1}), retrying in ${delay}ms...`,
38
+ });
39
+ await this.wait(delay);
40
+ }
41
+ }
42
+ throw lastError;
43
+ }
44
+ /**
45
+ * Calculate delay based on backoff strategy
46
+ */
47
+ calculateDelay(attempt) {
48
+ const { baseDelay, backoffStrategy } = this.config;
49
+ switch (backoffStrategy) {
50
+ case "exponential":
51
+ return baseDelay * Math.pow(2, attempt);
52
+ case "linear":
53
+ return baseDelay * (attempt + 1);
54
+ default:
55
+ return baseDelay;
56
+ }
57
+ }
58
+ /**
59
+ * Wait for the specified duration
60
+ */
61
+ async wait(duration) {
62
+ return new Promise((resolve) => setTimeout(resolve, duration));
63
+ }
64
+ /**
65
+ * Default retry conditions for deployment operations
66
+ */
67
+ static shouldRetryDeployment(error, attempt) {
68
+ // Don't retry certain types of errors
69
+ const nonRetryableErrors = [
70
+ "authentication_failed",
71
+ "authorization_failed",
72
+ "invalid_configuration",
73
+ "quota_exceeded",
74
+ ];
75
+ if (nonRetryableErrors.some((type) => error.type?.includes(type))) {
76
+ return false;
77
+ }
78
+ // Don't retry after too many attempts for transient errors
79
+ if (attempt >= 2 && error.type === "transient") {
80
+ return false;
81
+ }
82
+ // Retry network and timeout errors
83
+ if (error.code === "ECONNRESET" ||
84
+ error.code === "ETIMEDOUT" ||
85
+ error.code === "ENOTFOUND") {
86
+ return true;
87
+ }
88
+ // Retry 5xx HTTP errors
89
+ if (error.statusCode >= 500 && error.statusCode < 600) {
90
+ return true;
91
+ }
92
+ // Default: retry for most errors
93
+ return true;
94
+ }
95
+ /**
96
+ * Specialized retry handler for deployment operations
97
+ */
98
+ async executeDeploymentWithRetry(deploymentOperation) {
99
+ return this.executeWithRetry(deploymentOperation, RetryHandler.shouldRetryDeployment);
100
+ }
101
+ /**
102
+ * Specialized retry handler for API calls
103
+ */
104
+ async executeApiCallWithRetry(apiCall) {
105
+ return this.executeWithRetry(apiCall, (error, attempt) => {
106
+ // Retry on network errors and 5xx status codes
107
+ return (error.code === "ECONNRESET" ||
108
+ error.code === "ETIMEDOUT" ||
109
+ (error.statusCode >= 500 && error.statusCode < 600));
110
+ });
111
+ }
112
+ /**
113
+ * Get retry statistics
114
+ */
115
+ getStats() {
116
+ return { ...this.config };
117
+ }
118
+ }
@@ -5,14 +5,13 @@
5
5
  * AI code removal attempts, and other critical issues.
6
6
  * Triggers multi-agent conferences when analysis is required.
7
7
  *
8
- * @version 1.0.0
9
8
  * @since 2026-03-08
10
9
  */
11
10
  import { getKernel } from '../../core/kernel-patterns.js';
12
11
  import { createAgentDelegator } from '../../delegation/agent-delegator.js';
13
12
  import { frameworkLogger } from '../../core/framework-logger.js';
14
13
  import { XrayStateManager } from '../../state/state-manager.js';
15
- import { strRayConfigLoader } from '../../core/config-loader.js';
14
+ import { xrayConfigLoader } from '../../core/config-loader.js';
16
15
  /**
17
16
  * Main service for systematic regression analysis
18
17
  */
@@ -95,7 +94,7 @@ export class RegressionAnalysisService {
95
94
  };
96
95
  // Create agent delegator for this operation
97
96
  const stateManager = new XrayStateManager();
98
- const agentDelegator = createAgentDelegator(stateManager, strRayConfigLoader);
97
+ const agentDelegator = createAgentDelegator(stateManager, xrayConfigLoader);
99
98
  // Analyze delegation strategy
100
99
  const analysis = await agentDelegator.analyzeDelegation(delegationRequest);
101
100
  // Execute delegation
@@ -5,7 +5,6 @@
5
5
  * operations. Useful for CI/CD pipelines, manual test triggers,
6
6
  * and retry mechanisms.
7
7
  *
8
- * @version 2.0.0
9
8
  * @since 2026-03-08
10
9
  */
11
10
  import express from 'express';
@@ -397,8 +397,8 @@ fi
397
397
  (async () => {
398
398
  try {
399
399
  // Use dynamic import that works in both dev and consumer
400
- const basePath = process.env.STRRAY_BASE_PATH || '.';
401
- const distPath = process.env.STRRAY_DIST_PATH || 'dist';
400
+ const basePath = process.env.XRAY_BASE_PATH || '.';
401
+ const distPath = process.env.XRAY_DIST_PATH || 'dist';
402
402
  // First archive logs (compress and rotate) before cleanup
403
403
  const { archiveLogFiles } = await import(basePath + '/' + distPath + '/postprocessor/triggers/GitHookTrigger.js');
404
404
  const archiveResult = await archiveLogFiles({
@@ -484,8 +484,8 @@ fi
484
484
  node -e "
485
485
  (async () => {
486
486
  try {
487
- const basePath = process.env.STRRAY_BASE_PATH || '.';
488
- const distPath = process.env.STRRAY_DIST_PATH || 'dist';
487
+ const basePath = process.env.XRAY_BASE_PATH || '.';
488
+ const distPath = process.env.XRAY_DIST_PATH || 'dist';
489
489
  const { HookMetricsCollector } = await import(basePath + '/' + distPath + '/postprocessor/validation/HookMetricsCollector.js');
490
490
  const collector = new HookMetricsCollector();
491
491
  collector.recordMetrics('post-push', \${DURATION_MS}, \${EXIT_CODE});
@@ -5,7 +5,6 @@
5
5
  * services (GitHub, GitLab, Bitbucket, Stripe) and routes them
6
6
  * to the PostProcessor for execution.
7
7
  *
8
- * @version 2.0.0
9
8
  * @since 2026-03-08
10
9
  */
11
10
  import express from 'express';
@@ -8,7 +8,6 @@
8
8
  * @priority 90 (high - runs early)
9
9
  * @blocking true (blocks commit if AGENTS.md is invalid)
10
10
  *
11
- * @version 1.0.0
12
11
  * @framework 0xRay 1.3.5
13
12
  */
14
13
  import * as fs from "fs";
@@ -5,7 +5,6 @@
5
5
  * Detects anti-patterns in async code: callback patterns, long promise chains,
6
6
  * missing await inside async functions, and mixed callback/promise styles.
7
7
  *
8
- * @version 1.0.0
9
8
  * @since 2026-03-28
10
9
  */
11
10
  import { frameworkLogger } from "../../core/framework-logger.js";