0xray 3.5.5 → 4.0.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 (229) hide show
  1. package/.mcp.json +51 -7
  2. package/.opencode/skills/api-design/SKILL.md +1 -1
  3. package/.opencode/skills/architect-tools/SKILL.md +1 -1
  4. package/.opencode/skills/architecture-patterns/SKILL.md +1 -1
  5. package/.opencode/skills/auto-format/SKILL.md +1 -1
  6. package/.opencode/skills/boot-orchestrator/SKILL.md +2 -6
  7. package/.opencode/skills/bug-triage/SKILL.md +1 -1
  8. package/.opencode/skills/code-analyzer/SKILL.md +1 -1
  9. package/.opencode/skills/code-review/SKILL.md +1 -1
  10. package/.opencode/skills/enforcer/SKILL.md +1 -1
  11. package/.opencode/skills/framework-compliance-audit/SKILL.md +1 -1
  12. package/.opencode/skills/git-workflow/SKILL.md +1 -1
  13. package/.opencode/skills/hermes-agent/SKILL.md +36 -36
  14. package/.opencode/skills/inference-improve/SKILL.md +1 -1
  15. package/.opencode/skills/lint/SKILL.md +1 -1
  16. package/.opencode/skills/log-monitor/SKILL.md +1 -1
  17. package/.opencode/skills/model-health-check/SKILL.md +1 -1
  18. package/.opencode/skills/multimodal-looker/SKILL.md +1 -1
  19. package/.opencode/skills/orchestrator/SKILL.md +38 -14
  20. package/.opencode/skills/performance-analysis/SKILL.md +1 -1
  21. package/.opencode/skills/performance-optimization/SKILL.md +1 -1
  22. package/.opencode/skills/processor-pipeline/SKILL.md +1 -1
  23. package/.opencode/skills/project-analysis/SKILL.md +1 -1
  24. package/.opencode/skills/refactoring-strategies/SKILL.md +1 -1
  25. package/.opencode/skills/registry.json +65 -0
  26. package/.opencode/skills/researcher/SKILL.md +18 -5
  27. package/.opencode/skills/security-audit/SKILL.md +1 -1
  28. package/.opencode/skills/security-scan/SKILL.md +1 -1
  29. package/.opencode/skills/session-management/SKILL.md +1 -1
  30. package/.opencode/skills/state-manager/SKILL.md +1 -1
  31. package/.opencode/skills/storyteller/SKILL.md +1 -1
  32. package/.opencode/skills/strategist/SKILL.md +12 -0
  33. package/.opencode/skills/testing-best-practices/SKILL.md +37 -0
  34. package/.opencode/skills/testing-strategy/SKILL.md +14 -3
  35. package/.opencode/skills/ui-ux-design/SKILL.md +1 -1
  36. package/.opencode/skills/xray-orchestrator/index.ts +267 -0
  37. package/.xray/codex.json +12 -3
  38. package/.xray/features.json +27 -5
  39. package/.xray/features.schema.json +31 -0
  40. package/AGENTS-consumer.md +16 -6
  41. package/AGENTS.md +11 -3
  42. package/README.md +13 -10
  43. package/SKILLS.md +1 -1
  44. package/dist/AGENTS.md +11 -3
  45. package/dist/CHANGELOG.md +65 -11
  46. package/dist/README.md +13 -10
  47. package/dist/SKILLS.md +1 -1
  48. package/dist/cli/commands/hermes-install.js +3 -0
  49. package/dist/cli/commands/openclaw-install.js +14 -0
  50. package/dist/core/features-config.d.ts +15 -2
  51. package/dist/infrastructure/schemas/cloud-schemas.d.ts +1 -1
  52. package/dist/integrations/grok/grok-cli.d.ts +3 -0
  53. package/dist/integrations/grok/grok-cli.js +92 -4
  54. package/dist/integrations/grok/hooks/grok-hook-utils.js +53 -7
  55. package/dist/integrations/grok/hooks/post-tool-use.js +68 -46
  56. package/dist/integrations/grok/hooks/pre-tool-use.js +14 -31
  57. package/dist/integrations/grok/hooks/session-start.js +86 -4
  58. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
  59. package/dist/integrations/hermes-agent/bridge.mjs +19 -1
  60. package/dist/integrations/hooks/delegation-gate-runtime.mjs +32 -3
  61. package/dist/integrations/hooks/pipeline-hook-runtime.mjs +1 -1
  62. package/dist/integrations/hooks/station-hook-runtime.cjs +421 -0
  63. package/dist/integrations/hooks/station-hook-runtime.mjs +24 -0
  64. package/dist/integrations/hooks/station-memory-ingest.mjs +45 -0
  65. package/dist/integrations/hooks/station-memory-match.mjs +47 -0
  66. package/dist/integrations/openclaw/client.d.ts +5 -1
  67. package/dist/integrations/openclaw/client.js +17 -9
  68. package/dist/integrations/openclaw/config.js +0 -1
  69. package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +102 -0
  70. package/dist/integrations/openclaw/index.js +17 -0
  71. package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
  72. package/dist/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
  73. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +10 -0
  74. package/dist/integrations/openclaw/pre-tool-gate.d.ts +19 -0
  75. package/dist/integrations/openclaw/pre-tool-gate.js +39 -0
  76. package/dist/mcps/orchestrator/handlers/complexity-handler.js +2 -2
  77. package/dist/memory-routing/index.d.ts +1 -1
  78. package/dist/memory-routing/index.js +1 -1
  79. package/dist/memory-routing/provider-loader.d.ts +4 -0
  80. package/dist/memory-routing/provider-loader.js +44 -2
  81. package/dist/memory-routing/provider-registry.js +3 -2
  82. package/dist/nucleus/autonomy-kernel.d.ts +2 -2
  83. package/dist/nucleus/autonomy-kernel.js +17 -6
  84. package/dist/nucleus/confer.js +17 -3
  85. package/dist/nucleus/delegation-gate.d.ts +14 -8
  86. package/dist/nucleus/delegation-gate.js +151 -16
  87. package/dist/nucleus/suit-temperament.d.ts +40 -0
  88. package/dist/nucleus/suit-temperament.js +157 -0
  89. package/dist/nucleus/user-aside.js +1 -1
  90. package/dist/plugin/xray-codex-injection.js +14 -3
  91. package/dist/postprocessor/triggers/GitHookTrigger.js +11 -5
  92. package/opencode.json +88 -0
  93. package/package.json +14 -4
  94. package/scripts/hooks/install-hooks.cjs +18 -3
  95. package/scripts/hooks/run-hook.js +67 -3
  96. package/scripts/mjs/run-repertoire-mcp.mjs +39 -0
  97. package/scripts/mjs/verify-confer-core.mjs +1 -1
  98. package/scripts/mjs/verify-delegation-gate-core.mjs +29 -2
  99. package/scripts/mjs/verify-four-floor-compact.mjs +524 -0
  100. package/scripts/mjs/verify-pipeline-facets.mjs +215 -0
  101. package/scripts/mjs/verify-temperament-live.mjs +261 -0
  102. package/scripts/node/bridge-mcp-wiring.cjs +277 -29
  103. package/scripts/node/install-bridges.cjs +195 -33
  104. package/scripts/node/postinstall.cjs +50 -27
  105. package/scripts/node/release-gate.mjs +1 -1
  106. package/scripts/node/release.mjs +2 -2
  107. package/scripts/node/validate-release-docs.mjs +20 -33
  108. package/scripts/node/version-manager.mjs +25 -10
  109. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
  110. package/src/integrations/openclaw/README.md +134 -0
  111. package/src/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
  112. package/src/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
  113. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +10 -0
  114. package/src/mcps/orchestrator/handlers/complexity-handler.ts +2 -1
  115. package/vendor/@0xray/repertoire/AGENTS.md +163 -0
  116. package/vendor/@0xray/repertoire/LICENSE +21 -0
  117. package/vendor/@0xray/repertoire/README.md +120 -0
  118. package/vendor/@0xray/repertoire/data/curated_signals.json +208 -0
  119. package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts +78 -0
  120. package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts.map +1 -0
  121. package/vendor/@0xray/repertoire/dist/RepertoireService.js +153 -0
  122. package/vendor/@0xray/repertoire/dist/RepertoireService.js.map +1 -0
  123. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts +39 -0
  124. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts.map +1 -0
  125. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js +60 -0
  126. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js.map +1 -0
  127. package/vendor/@0xray/repertoire/dist/index.d.ts +14 -0
  128. package/vendor/@0xray/repertoire/dist/index.d.ts.map +1 -0
  129. package/vendor/@0xray/repertoire/dist/index.js +14 -0
  130. package/vendor/@0xray/repertoire/dist/index.js.map +1 -0
  131. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts +26 -0
  132. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts.map +1 -0
  133. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js +109 -0
  134. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js.map +1 -0
  135. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts +18 -0
  136. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts.map +1 -0
  137. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js +94 -0
  138. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js.map +1 -0
  139. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts +7 -0
  140. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts.map +1 -0
  141. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js +18 -0
  142. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js.map +1 -0
  143. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts +31 -0
  144. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts.map +1 -0
  145. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js +83 -0
  146. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js.map +1 -0
  147. package/vendor/@0xray/repertoire/dist/mcp/server.d.ts +6 -0
  148. package/vendor/@0xray/repertoire/dist/mcp/server.d.ts.map +1 -0
  149. package/vendor/@0xray/repertoire/dist/mcp/server.js +173 -0
  150. package/vendor/@0xray/repertoire/dist/mcp/server.js.map +1 -0
  151. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts +27 -0
  152. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts.map +1 -0
  153. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js +107 -0
  154. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js.map +1 -0
  155. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts +11 -0
  156. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts.map +1 -0
  157. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js +32 -0
  158. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js.map +1 -0
  159. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts +9 -0
  160. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts.map +1 -0
  161. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js +72 -0
  162. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js.map +1 -0
  163. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts +5 -0
  164. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts.map +1 -0
  165. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js +18 -0
  166. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js.map +1 -0
  167. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts +31 -0
  168. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts.map +1 -0
  169. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js +218 -0
  170. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js.map +1 -0
  171. package/vendor/@0xray/repertoire/dist/paths.d.ts +24 -0
  172. package/vendor/@0xray/repertoire/dist/paths.d.ts.map +1 -0
  173. package/vendor/@0xray/repertoire/dist/paths.js +74 -0
  174. package/vendor/@0xray/repertoire/dist/paths.js.map +1 -0
  175. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts +141 -0
  176. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts.map +1 -0
  177. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js +210 -0
  178. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js.map +1 -0
  179. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts +48 -0
  180. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts.map +1 -0
  181. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js +221 -0
  182. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js.map +1 -0
  183. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts +11 -0
  184. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts.map +1 -0
  185. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js +43 -0
  186. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js.map +1 -0
  187. package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts +15 -0
  188. package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts.map +1 -0
  189. package/vendor/@0xray/repertoire/dist/registry/signal-prune.js +35 -0
  190. package/vendor/@0xray/repertoire/dist/registry/signal-prune.js.map +1 -0
  191. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts +3 -0
  192. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts.map +1 -0
  193. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js +24 -0
  194. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js.map +1 -0
  195. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts +24 -0
  196. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts.map +1 -0
  197. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js +148 -0
  198. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js.map +1 -0
  199. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts +4 -0
  200. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts.map +1 -0
  201. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js +44 -0
  202. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js.map +1 -0
  203. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts +22 -0
  204. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts.map +1 -0
  205. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js +66 -0
  206. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js.map +1 -0
  207. package/vendor/@0xray/repertoire/dist/types.d.ts +210 -0
  208. package/vendor/@0xray/repertoire/dist/types.d.ts.map +1 -0
  209. package/vendor/@0xray/repertoire/dist/types.js +2 -0
  210. package/vendor/@0xray/repertoire/dist/types.js.map +1 -0
  211. package/vendor/@0xray/repertoire/docs/MEMORY-ROUTING-PROVIDER.md +54 -0
  212. package/vendor/@0xray/repertoire/hermes-mcp.example.json +20 -0
  213. package/vendor/@0xray/repertoire/mcp-config.example.json +11 -0
  214. package/vendor/@0xray/repertoire/package.json +124 -0
  215. package/vendor/@0xray/repertoire/schemas/curated-signal.schema.json +68 -0
  216. package/vendor/@0xray/repertoire/schemas/inference-log.schema.json +82 -0
  217. package/vendor/@0xray/repertoire/scripts/confirm-suit-all.mjs +253 -0
  218. package/vendor/@0xray/repertoire/scripts/confirm-suit-harness.mjs +220 -0
  219. package/vendor/@0xray/repertoire/scripts/run-live-synthesis-checkpoint.mjs +215 -0
  220. package/vendor/@0xray/repertoire/scripts/suit-bridge-shared.mjs +139 -0
  221. package/vendor/@0xray/repertoire/scripts/verify-grok-suit.mjs +304 -0
  222. package/vendor/@0xray/repertoire/scripts/verify-hermes-suit.mjs +163 -0
  223. package/vendor/@0xray/repertoire/scripts/verify-openclaw-suit.mjs +125 -0
  224. package/vendor/@0xray/repertoire/scripts/verify-opencode-suit.mjs +127 -0
  225. package/vendor/@0xray/repertoire/scripts/verify-synthesis-dogfood.mjs +207 -0
  226. package/vendor/@0xray/repertoire/skills/repertoire-trap-handling/SKILL.md +206 -0
  227. package/xray/codex.json +12 -3
  228. package/xray/features.json +27 -5
  229. package/xray/features.schema.json +31 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "3.5.5",
3
+ "version": "4.0.0",
4
4
  "description": "Multi-agent orchestration and Codex governance for OpenCode, Hermes, Grok Build, and OpenClaw",
5
5
  "readme": "README.md",
6
6
  "license": "MIT",
@@ -64,7 +64,7 @@
64
64
  "version:bump": "node scripts/node/version-manager.mjs",
65
65
  "version": "node scripts/node/version-manager.mjs",
66
66
  "prebuild": "rm -rf dist tsconfig.tsbuildinfo tsconfig.*.tsbuildinfo",
67
- "build": "tsc && chmod +x dist/cli/index.js && mkdir -p dist/public dist/scripts && cp -r public/* dist/public/ && cp scripts/hooks/pre-command dist/scripts/ && cp scripts/hooks/pre-command.mjs dist/scripts/ && cp README.md AGENTS.md SKILLS.md CHANGELOG.md LICENSE .gitignore.default dist/ && find src -name '*.mjs' ! -path '*/__tests__/*' | while read f; do tgt=\"dist/${f#src/}\"; mkdir -p \"$(dirname $tgt)\"; cp \"$f\" \"$tgt\"; done && for dir in skills integrations mcps; do find src/$dir -type f ! -name '*.ts' ! -path '*/.pytest_cache/*' | while read f; do tgt=\"dist/${f#src/}\"; mkdir -p \"$(dirname $tgt)\"; cp \"$f\" \"$tgt\"; done; done && mkdir -p dist/plugin && (find dist/plugin -name '*codex-injection*.js' -exec cp {} dist/plugin/xray-codex-injection.js \\; 2>/dev/null || true) && cp -r src/opencode/ .opencode/ && mkdir -p .xray && for f in codex.json features.json features.schema.json config.json; do cp xray/$f .xray/$f 2>/dev/null || true; done",
67
+ "build": "tsc && chmod +x dist/cli/index.js && mkdir -p dist/public dist/scripts && cp -r public/* dist/public/ && cp scripts/hooks/pre-command dist/scripts/ && cp scripts/hooks/pre-command.mjs dist/scripts/ && cp README.md AGENTS.md SKILLS.md CHANGELOG.md LICENSE .gitignore.default dist/ && find src -name '*.mjs' ! -path '*/__tests__/*' | while read f; do tgt=\"dist/${f#src/}\"; mkdir -p \"$(dirname $tgt)\"; cp \"$f\" \"$tgt\"; done && for dir in skills integrations mcps; do find src/$dir -type f ! -name '*.ts' ! -path '*/.pytest_cache/*' | while read f; do tgt=\"dist/${f#src/}\"; mkdir -p \"$(dirname $tgt)\"; cp \"$f\" \"$tgt\"; done; done && mkdir -p dist/plugin && (find dist/plugin -name '*codex-injection*.js' -exec cp {} dist/plugin/xray-codex-injection.js \\; 2>/dev/null || true) && cp -r src/opencode/ .opencode/ && mkdir -p .opencode/skills && cp -R src/skills/. .opencode/skills/ && mkdir -p .xray && for f in codex.json features.json features.schema.json config.json; do cp xray/$f .xray/$f 2>/dev/null || true; done",
68
68
  "build:all": "npm run build",
69
69
  "ci-install": "npm ci",
70
70
  "clean": "rm -rf dist tsconfig.tsbuildinfo tsconfig.*.tsbuildinfo",
@@ -138,7 +138,10 @@
138
138
  "verify:find-project-root": "node scripts/mjs/verify-find-project-root-core.mjs",
139
139
  "verify:consumer-gitignore": "node scripts/mjs/verify-consumer-gitignore-core.mjs",
140
140
  "verify:pre-commit-diff": "node scripts/mjs/verify-pre-commit-diff-core.mjs",
141
- "verify:pre-push-diff": "node scripts/mjs/verify-pre-push-diff-core.mjs"
141
+ "verify:pre-push-diff": "node scripts/mjs/verify-pre-push-diff-core.mjs",
142
+ "verify:temperament-live": "node scripts/mjs/verify-temperament-live.mjs",
143
+ "verify:four-floor-compact": "node scripts/mjs/verify-four-floor-compact.mjs",
144
+ "verify:four-floor-compact:live": "XRAY_LIVE_SUCCESSOR=1 node scripts/mjs/verify-four-floor-compact.mjs"
142
145
  },
143
146
  "files": [
144
147
  "dist/",
@@ -158,6 +161,10 @@
158
161
  "scripts/mjs/verify-pre-push-diff-core.mjs",
159
162
  "scripts/mjs/verify-confer-core.mjs",
160
163
  "scripts/mjs/verify-user-aside-core.mjs",
164
+ "scripts/mjs/verify-pipeline-facets.mjs",
165
+ "scripts/mjs/verify-temperament-live.mjs",
166
+ "scripts/mjs/verify-four-floor-compact.mjs",
167
+ "scripts/mjs/run-repertoire-mcp.mjs",
161
168
  "scripts/mjs/verify-delegation-gate-core.mjs",
162
169
  "scripts/mjs/delegation-gate-fixture.mjs",
163
170
  "src/opencode/",
@@ -167,6 +174,7 @@
167
174
  "src/opencode/openclaw/",
168
175
  "src/opencode/workflows/",
169
176
  "src/integrations/grok/plugin/0xray/",
177
+ "src/integrations/openclaw/plugin/",
170
178
  "src/skills/",
171
179
  "src/mcps/",
172
180
  ".plugin/",
@@ -194,9 +202,11 @@
194
202
  ".xray/features.schema.json",
195
203
  ".xray/config.json",
196
204
  ".gitignore.default",
197
- "LICENSE"
205
+ "LICENSE",
206
+ "vendor/@0xray/repertoire/"
198
207
  ],
199
208
  "dependencies": {
209
+ "@0xray/repertoire": "file:./vendor/@0xray/repertoire",
200
210
  "@modelcontextprotocol/sdk": "^1.0.4",
201
211
  "commander": "^11.1.0",
202
212
  "express": "^5.2.1",
@@ -30,19 +30,34 @@ if (!fs.existsSync(gitHooksDir)) {
30
30
  }
31
31
 
32
32
  const isConsumer = packageRoot.includes("node_modules");
33
+
34
+ function firstExistingRelative(root, rels) {
35
+ return rels.find((rel) => fs.existsSync(path.join(root, rel))) || rels[0];
36
+ }
37
+
33
38
  const runHookRelativePath = isConsumer
34
- ? "node_modules/0xray/scripts/hooks/run-hook.js"
39
+ ? firstExistingRelative(targetDir, [
40
+ "node_modules/0xray/scripts/hooks/run-hook.js",
41
+ "node_modules/0xray/dist/scripts/hooks/run-hook.js",
42
+ ])
35
43
  : "scripts/hooks/run-hook.js";
36
44
  const loadReflectionRelativePath = isConsumer
37
- ? "node_modules/0xray/scripts/node/load-reflection-config.mjs"
45
+ ? firstExistingRelative(targetDir, [
46
+ "node_modules/0xray/scripts/node/load-reflection-config.mjs",
47
+ "node_modules/0xray/dist/scripts/node/load-reflection-config.mjs",
48
+ ])
38
49
  : "scripts/node/load-reflection-config.mjs";
39
50
  const autoReflectionRelativePath = isConsumer
40
- ? "node_modules/0xray/scripts/node/auto-reflection-generator.mjs"
51
+ ? firstExistingRelative(targetDir, [
52
+ "node_modules/0xray/scripts/node/auto-reflection-generator.mjs",
53
+ "node_modules/0xray/dist/scripts/node/auto-reflection-generator.mjs",
54
+ ])
41
55
  : "scripts/node/auto-reflection-generator.mjs";
42
56
 
43
57
  function hookRunnerExists(projectRoot) {
44
58
  return (
45
59
  fs.existsSync(path.join(projectRoot, "node_modules/0xray/scripts/hooks/run-hook.js")) ||
60
+ fs.existsSync(path.join(projectRoot, "node_modules/0xray/dist/scripts/hooks/run-hook.js")) ||
46
61
  fs.existsSync(path.join(projectRoot, "scripts/hooks/run-hook.js"))
47
62
  );
48
63
  }
@@ -22,7 +22,7 @@
22
22
  import { existsSync, readFileSync, writeFileSync, mkdirSync, appendFileSync } from "fs";
23
23
  import { join, dirname, resolve } from "path";
24
24
  import { execSync, exec, execFileSync } from "child_process";
25
- import { fileURLToPath } from "url";
25
+ import { fileURLToPath, pathToFileURL } from "url";
26
26
 
27
27
  // ── Parse arguments ──────────────────────────────────────────
28
28
 
@@ -372,9 +372,9 @@ async function runLogMaintenance() {
372
372
 
373
373
  try {
374
374
  const distDirs = [
375
- join(projectRoot, "dist"),
376
375
  join(projectRoot, "node_modules", "0xray", "dist"),
377
376
  join(projectRoot, "node_modules", "xray", "dist"),
377
+ join(projectRoot, "dist"),
378
378
  ];
379
379
 
380
380
  for (const distDir of distDirs) {
@@ -382,7 +382,9 @@ async function runLogMaintenance() {
382
382
  if (!existsSync(triggerPath)) continue;
383
383
 
384
384
  try {
385
- const { archiveLogFiles, cleanupLogFiles } = await import(triggerPath);
385
+ const { archiveLogFiles, cleanupLogFiles } = await import(
386
+ pathToFileURL(triggerPath).href
387
+ );
386
388
 
387
389
  // Archive logs
388
390
  try {
@@ -541,6 +543,67 @@ async function handlePreCommit() {
541
543
  process.exit(0);
542
544
  }
543
545
 
546
+ function loadFeaturesJson() {
547
+ const featuresPath = join(projectRoot, ".xray", "features.json");
548
+ if (!existsSync(featuresPath)) return {};
549
+ try {
550
+ return JSON.parse(readFileSync(featuresPath, "utf-8"));
551
+ } catch {
552
+ return {};
553
+ }
554
+ }
555
+
556
+ function resolveXrayDistModule(relPath) {
557
+ const candidates = [
558
+ join(projectRoot, "node_modules", "0xray", "dist", relPath),
559
+ join(projectRoot, "node_modules", "xray", "dist", relPath),
560
+ join(projectRoot, "dist", relPath),
561
+ ];
562
+ return candidates.find((p) => existsSync(p)) || null;
563
+ }
564
+
565
+ async function runSessionInferenceCapture() {
566
+ const features = loadFeaturesJson();
567
+ const cfg = features.inference_session_capture ?? {};
568
+ if (cfg.enabled !== true) {
569
+ log("Session inference capture disabled");
570
+ return;
571
+ }
572
+
573
+ const modulePath = resolveXrayDistModule("inference/session-capture.js");
574
+ if (!modulePath) {
575
+ log("Session capture module missing (node_modules/0xray/dist or dist)");
576
+ return;
577
+ }
578
+
579
+ const minCommits = typeof cfg.min_commits === "number" && cfg.min_commits > 0
580
+ ? cfg.min_commits
581
+ : 3;
582
+ const lookback = typeof cfg.lookback_commits === "number" && cfg.lookback_commits > 0
583
+ ? cfg.lookback_commits
584
+ : 20;
585
+
586
+ try {
587
+ const mod = await import(pathToFileURL(modulePath).href);
588
+ const inference = mod.captureSessionInference(`HEAD~${lookback}`, "HEAD");
589
+ if (!inference) {
590
+ log("Session capture: no commits in span");
591
+ return;
592
+ }
593
+ if ((inference.metrics?.commits ?? 0) < minCommits) {
594
+ log(
595
+ `Session capture: ${inference.metrics?.commits ?? 0} commits < min ${minCommits}`,
596
+ );
597
+ return;
598
+ }
599
+ const outDir = join(projectRoot, "docs", "inference");
600
+ const saved = mod.saveSessionInference(inference, outDir);
601
+ log(`Session capture saved ${saved}`);
602
+ } catch (err) {
603
+ logError(`Session capture failed: ${err.message}`);
604
+ }
605
+ }
606
+
544
607
  async function handlePostCommit() {
545
608
  const commitSha = process.env.COMMIT_SHA || "unknown";
546
609
  const branch = process.env.BRANCH || "unknown";
@@ -549,6 +612,7 @@ async function handlePostCommit() {
549
612
 
550
613
  // Run log maintenance
551
614
  await runLogMaintenance();
615
+ await runSessionInferenceCapture();
552
616
 
553
617
  // Record metrics
554
618
  recordMetrics(0, 0);
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CWD-proof Repertoire MCP launcher for the 0xray framework checkout.
4
+ * Grok/OpenCode spawn this in-repo path so they never have to resolve `../repertoire`.
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ import { existsSync } from 'node:fs';
8
+ import { dirname, join } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+
11
+ const xrayRoot = join(dirname(fileURLToPath(import.meta.url)), '../..');
12
+ const candidates = [
13
+ join(xrayRoot, 'node_modules', '@0xray', 'repertoire', 'dist', 'mcp', 'server.js'),
14
+ join(xrayRoot, 'vendor', '@0xray', 'repertoire', 'dist', 'mcp', 'server.js'),
15
+ join(xrayRoot, '..', 'repertoire', 'dist', 'mcp', 'server.js'),
16
+ ];
17
+ const server = candidates.find((p) => existsSync(p));
18
+ if (!server) {
19
+ process.stderr.write(
20
+ 'repertoire MCP missing — build ../repertoire or install @0xray/repertoire\n',
21
+ );
22
+ process.exit(1);
23
+ }
24
+
25
+ const child = spawn(process.execPath, [server], {
26
+ stdio: 'inherit',
27
+ env: process.env,
28
+ });
29
+ child.on('error', (err) => {
30
+ process.stderr.write(`repertoire MCP spawn failed: ${err.message}\n`);
31
+ process.exit(1);
32
+ });
33
+ child.on('exit', (code, signal) => {
34
+ if (signal) {
35
+ process.kill(process.pid, signal);
36
+ return;
37
+ }
38
+ process.exit(code ?? 1);
39
+ });
@@ -48,7 +48,7 @@ try {
48
48
  if (!isSynthesisCheckpointDue(tmp, sessionId)) fail('step 1: synthesis due');
49
49
  else pass('step 1: synthesis checkpoint due');
50
50
 
51
- const plan = buildSynthesisCheckpointPlan('gate threshold (1/1)');
51
+ const plan = buildSynthesisCheckpointPlan('gate threshold (1/1)', tmp);
52
52
  if (!plan) fail('step 2: synthesis plan');
53
53
  else {
54
54
  savePersistedLeadDevPlan(
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Shared 4/4 delegation gate fixture against nucleus SSOT (any host adapter).
3
+ * Shared 6/6 delegation gate fixture against nucleus SSOT (any host adapter).
4
4
  * Usage: node scripts/mjs/verify-delegation-gate-core.mjs [--host=grok|hermes|opencode]
5
5
  */
6
6
  import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
@@ -22,6 +22,9 @@ const host = hostArg?.split('=')[1] || 'generic';
22
22
  const { evaluatePreToolGate, loadDelegationGateFeatures } = await import(
23
23
  join(packageRoot, 'dist/integrations/hooks/delegation-gate-runtime.mjs')
24
24
  );
25
+ const { archiveStaleLeadDevPlan } = await import(
26
+ join(packageRoot, 'dist/nucleus/lead-dev-plan-persistence.js')
27
+ );
25
28
 
26
29
  const WRITE_TOOL =
27
30
  host === 'hermes' ? 'write_file' : host === 'opencode' ? 'write' : 'search_replace';
@@ -130,6 +133,30 @@ try {
130
133
  } else {
131
134
  fail('spawn plan stale', JSON.stringify(denyStale));
132
135
  }
136
+
137
+ const archived = archiveStaleLeadDevPlan(staleTmp);
138
+ const denyAfterArchive = evaluatePreToolGate(
139
+ SPAWN_TOOL,
140
+ { prompt: 'plan todo 1.1 consult', subagent_type: 'researcher' },
141
+ {
142
+ projectRoot: staleTmp,
143
+ sessionId: FIXTURE_SESSION_ID,
144
+ features: loadDelegationGateFeatures(staleTmp),
145
+ host,
146
+ },
147
+ );
148
+ if (
149
+ archived.archived &&
150
+ !denyAfterArchive.allow &&
151
+ denyAfterArchive.gate === 'spawn-plan-stale'
152
+ ) {
153
+ pass('denies spawn after stale plan archival (marker)');
154
+ } else {
155
+ fail(
156
+ 'spawn plan stale after archive',
157
+ JSON.stringify({ archived, denyAfterArchive }),
158
+ );
159
+ }
133
160
  rmSync(staleTmp, { recursive: true, force: true });
134
161
  } finally {
135
162
  rmSync(tmp, { recursive: true, force: true });
@@ -139,7 +166,7 @@ const label = host === 'generic' ? 'core' : host;
139
166
  console.log(
140
167
  '\n' +
141
168
  (failed === 0
142
- ? `🎉 Delegation gate verify passed (5/5) [${label}].`
169
+ ? `🎉 Delegation gate verify passed (6/6) [${label}].`
143
170
  : `⚠️ ${failed} gate check(s) failed [${label}].`),
144
171
  );
145
172
  process.exit(failed === 0 ? 0 : 1);