0xray 3.5.4 → 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 (266) 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 +32 -6
  39. package/.xray/features.schema.json +87 -0
  40. package/AGENTS-consumer.md +16 -6
  41. package/AGENTS.md +21 -3
  42. package/README.md +13 -10
  43. package/SKILLS.md +1 -1
  44. package/dist/AGENTS.md +21 -3
  45. package/dist/CHANGELOG.md +98 -0
  46. package/dist/README.md +13 -10
  47. package/dist/SKILLS.md +1 -1
  48. package/dist/cli/commands/hermes-install.js +6 -1
  49. package/dist/cli/commands/openclaw-install.js +14 -0
  50. package/dist/cli/index.js +0 -0
  51. package/dist/core/features-config.d.ts +30 -2
  52. package/dist/governance/governance-service.d.ts +1 -0
  53. package/dist/governance/governance-service.js +81 -6
  54. package/dist/infrastructure/schemas/cloud-schemas.d.ts +1 -1
  55. package/dist/integrations/enforcement-gate.js +15 -5
  56. package/dist/integrations/grok/grok-cli.d.ts +3 -0
  57. package/dist/integrations/grok/grok-cli.js +92 -13
  58. package/dist/integrations/grok/hooks/grok-hook-utils.js +99 -9
  59. package/dist/integrations/grok/hooks/post-tool-use.js +68 -25
  60. package/dist/integrations/grok/hooks/pre-tool-use.js +17 -14
  61. package/dist/integrations/grok/hooks/session-start.js +114 -4
  62. package/dist/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
  63. package/dist/integrations/hermes-agent/__init__.py +11 -1
  64. package/dist/integrations/hermes-agent/__pycache__/__init__.cpython-313.pyc +0 -0
  65. package/dist/integrations/hermes-agent/__pycache__/schemas.cpython-313.pyc +0 -0
  66. package/dist/integrations/hermes-agent/__pycache__/tools.cpython-313.pyc +0 -0
  67. package/dist/integrations/hermes-agent/bridge.mjs +92 -11
  68. package/dist/integrations/hooks/confer-hook-runtime.mjs +49 -0
  69. package/dist/integrations/hooks/delegation-gate-runtime.mjs +32 -3
  70. package/dist/integrations/hooks/pipeline-hook-runtime.mjs +211 -0
  71. package/dist/integrations/hooks/plan-hook-runtime.mjs +68 -0
  72. package/dist/integrations/hooks/station-hook-runtime.cjs +421 -0
  73. package/dist/integrations/hooks/station-hook-runtime.mjs +24 -0
  74. package/dist/integrations/hooks/station-memory-ingest.mjs +45 -0
  75. package/dist/integrations/hooks/station-memory-match.mjs +47 -0
  76. package/dist/integrations/hooks/user-aside-hook-runtime.mjs +49 -0
  77. package/dist/integrations/openclaw/client.d.ts +5 -1
  78. package/dist/integrations/openclaw/client.js +17 -9
  79. package/dist/integrations/openclaw/config.js +0 -1
  80. package/dist/integrations/openclaw/hooks/pre-tool-gate-runtime.mjs +102 -0
  81. package/dist/integrations/openclaw/index.js +17 -0
  82. package/dist/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
  83. package/dist/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
  84. package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +10 -0
  85. package/dist/integrations/openclaw/pre-tool-gate.d.ts +19 -0
  86. package/dist/integrations/openclaw/pre-tool-gate.js +39 -0
  87. package/dist/mcps/architect-tools.server.js +6 -1
  88. package/dist/mcps/orchestrator/handlers/complexity-handler.d.ts +7 -0
  89. package/dist/mcps/orchestrator/handlers/complexity-handler.js +107 -8
  90. package/dist/mcps/orchestrator/handlers/task-handler.d.ts +6 -0
  91. package/dist/mcps/orchestrator/handlers/task-handler.js +75 -0
  92. package/dist/mcps/orchestrator/server.js +54 -5
  93. package/dist/memory-routing/index.d.ts +1 -1
  94. package/dist/memory-routing/index.js +1 -1
  95. package/dist/memory-routing/provider-loader.d.ts +4 -0
  96. package/dist/memory-routing/provider-loader.js +74 -4
  97. package/dist/memory-routing/provider-registry.js +3 -2
  98. package/dist/nucleus/aside-worktree.d.ts +41 -0
  99. package/dist/nucleus/aside-worktree.js +164 -0
  100. package/dist/nucleus/autonomy-kernel.d.ts +2 -2
  101. package/dist/nucleus/autonomy-kernel.js +17 -6
  102. package/dist/nucleus/confer.d.ts +57 -0
  103. package/dist/nucleus/confer.js +322 -0
  104. package/dist/nucleus/delegation-gate.d.ts +18 -8
  105. package/dist/nucleus/delegation-gate.js +234 -20
  106. package/dist/nucleus/lead-dev-plan-persistence.d.ts +27 -3
  107. package/dist/nucleus/lead-dev-plan-persistence.js +201 -19
  108. package/dist/nucleus/spawn-plan-resolution.d.ts +20 -0
  109. package/dist/nucleus/spawn-plan-resolution.js +42 -0
  110. package/dist/nucleus/suit-temperament.d.ts +40 -0
  111. package/dist/nucleus/suit-temperament.js +157 -0
  112. package/dist/nucleus/synthesis-consult-receipt.js +18 -2
  113. package/dist/nucleus/synthesis-context.js +1 -1
  114. package/dist/nucleus/user-aside.d.ts +70 -0
  115. package/dist/nucleus/user-aside.js +393 -0
  116. package/dist/plugin/xray-codex-injection.js +14 -3
  117. package/dist/postprocessor/PostProcessor.d.ts +1 -0
  118. package/dist/postprocessor/PostProcessor.js +11 -0
  119. package/dist/postprocessor/triggers/GitHookTrigger.js +11 -5
  120. package/dist/processors/implementations/session-summary-processor.d.ts +1 -1
  121. package/dist/processors/implementations/session-summary-processor.js +9 -6
  122. package/opencode.json +88 -0
  123. package/package.json +25 -6
  124. package/scripts/hooks/install-hooks.cjs +21 -6
  125. package/scripts/hooks/run-hook.js +237 -88
  126. package/scripts/mjs/run-repertoire-mcp.mjs +39 -0
  127. package/scripts/mjs/verify-confer-core.mjs +103 -0
  128. package/scripts/mjs/verify-delegation-gate-core.mjs +76 -3
  129. package/scripts/mjs/verify-four-floor-compact.mjs +524 -0
  130. package/scripts/mjs/verify-hermes-session-start.mjs +137 -0
  131. package/scripts/mjs/verify-pipeline-facets.mjs +215 -0
  132. package/scripts/mjs/verify-pre-push-diff-core.mjs +87 -0
  133. package/scripts/mjs/verify-temperament-live.mjs +261 -0
  134. package/scripts/mjs/verify-user-aside-core.mjs +137 -0
  135. package/scripts/node/bridge-mcp-wiring.cjs +287 -29
  136. package/scripts/node/install-bridges.cjs +198 -44
  137. package/scripts/node/load-reflection-config.mjs +2 -2
  138. package/scripts/node/postinstall.cjs +50 -27
  139. package/scripts/node/release-gate.mjs +8 -4
  140. package/scripts/node/release.mjs +2 -2
  141. package/scripts/node/validate-release-docs.mjs +20 -33
  142. package/scripts/node/version-manager.mjs +25 -10
  143. package/src/integrations/grok/plugin/0xray/hooks/hooks.json +31 -24
  144. package/src/integrations/openclaw/README.md +134 -0
  145. package/src/integrations/openclaw/plugin/xray-pre-tool/index.js +75 -0
  146. package/src/integrations/openclaw/plugin/xray-pre-tool/openclaw.plugin.json +10 -0
  147. package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +10 -0
  148. package/src/mcps/architect-tools.server.ts +6 -1
  149. package/src/mcps/orchestrator/handlers/complexity-handler.ts +180 -21
  150. package/src/mcps/orchestrator/handlers/task-handler.ts +99 -0
  151. package/src/mcps/orchestrator/server.ts +56 -5
  152. package/vendor/@0xray/repertoire/AGENTS.md +163 -0
  153. package/vendor/@0xray/repertoire/LICENSE +21 -0
  154. package/vendor/@0xray/repertoire/README.md +120 -0
  155. package/vendor/@0xray/repertoire/data/curated_signals.json +208 -0
  156. package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts +78 -0
  157. package/vendor/@0xray/repertoire/dist/RepertoireService.d.ts.map +1 -0
  158. package/vendor/@0xray/repertoire/dist/RepertoireService.js +153 -0
  159. package/vendor/@0xray/repertoire/dist/RepertoireService.js.map +1 -0
  160. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts +39 -0
  161. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.d.ts.map +1 -0
  162. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js +60 -0
  163. package/vendor/@0xray/repertoire/dist/governance/ontological-trap-enforcer.js.map +1 -0
  164. package/vendor/@0xray/repertoire/dist/index.d.ts +14 -0
  165. package/vendor/@0xray/repertoire/dist/index.d.ts.map +1 -0
  166. package/vendor/@0xray/repertoire/dist/index.js +14 -0
  167. package/vendor/@0xray/repertoire/dist/index.js.map +1 -0
  168. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts +26 -0
  169. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.d.ts.map +1 -0
  170. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js +109 -0
  171. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-ingester.js.map +1 -0
  172. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts +18 -0
  173. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.d.ts.map +1 -0
  174. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js +94 -0
  175. package/vendor/@0xray/repertoire/dist/ingestion/groover-log-parser.js.map +1 -0
  176. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts +7 -0
  177. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.d.ts.map +1 -0
  178. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js +18 -0
  179. package/vendor/@0xray/repertoire/dist/ingestion/orchestrator-feedback-ingester.js.map +1 -0
  180. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts +31 -0
  181. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.d.ts.map +1 -0
  182. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js +83 -0
  183. package/vendor/@0xray/repertoire/dist/ingestion/xray-session-ingester.js.map +1 -0
  184. package/vendor/@0xray/repertoire/dist/mcp/server.d.ts +6 -0
  185. package/vendor/@0xray/repertoire/dist/mcp/server.d.ts.map +1 -0
  186. package/vendor/@0xray/repertoire/dist/mcp/server.js +173 -0
  187. package/vendor/@0xray/repertoire/dist/mcp/server.js.map +1 -0
  188. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts +27 -0
  189. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.d.ts.map +1 -0
  190. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js +107 -0
  191. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/RepertoireOrchestratorBridge.js.map +1 -0
  192. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts +11 -0
  193. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.d.ts.map +1 -0
  194. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js +32 -0
  195. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/capability-enhancer.js.map +1 -0
  196. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts +9 -0
  197. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.d.ts.map +1 -0
  198. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js +72 -0
  199. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/confidence-gate.js.map +1 -0
  200. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts +5 -0
  201. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.d.ts.map +1 -0
  202. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js +18 -0
  203. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-agent-affinity.js.map +1 -0
  204. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts +31 -0
  205. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.d.ts.map +1 -0
  206. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js +218 -0
  207. package/vendor/@0xray/repertoire/dist/orchestrator-bridge/signal-injector.js.map +1 -0
  208. package/vendor/@0xray/repertoire/dist/paths.d.ts +24 -0
  209. package/vendor/@0xray/repertoire/dist/paths.d.ts.map +1 -0
  210. package/vendor/@0xray/repertoire/dist/paths.js +74 -0
  211. package/vendor/@0xray/repertoire/dist/paths.js.map +1 -0
  212. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts +141 -0
  213. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.d.ts.map +1 -0
  214. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js +210 -0
  215. package/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js.map +1 -0
  216. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts +48 -0
  217. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.d.ts.map +1 -0
  218. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js +221 -0
  219. package/vendor/@0xray/repertoire/dist/registry/CuratedSignalsManager.js.map +1 -0
  220. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts +11 -0
  221. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.d.ts.map +1 -0
  222. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js +43 -0
  223. package/vendor/@0xray/repertoire/dist/registry/InferenceStateManager.js.map +1 -0
  224. package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts +15 -0
  225. package/vendor/@0xray/repertoire/dist/registry/signal-prune.d.ts.map +1 -0
  226. package/vendor/@0xray/repertoire/dist/registry/signal-prune.js +35 -0
  227. package/vendor/@0xray/repertoire/dist/registry/signal-prune.js.map +1 -0
  228. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts +3 -0
  229. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.d.ts.map +1 -0
  230. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js +24 -0
  231. package/vendor/@0xray/repertoire/dist/synthesis/concrete-sections.js.map +1 -0
  232. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts +24 -0
  233. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.d.ts.map +1 -0
  234. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js +148 -0
  235. package/vendor/@0xray/repertoire/dist/synthesis/meta-inference-engine.js.map +1 -0
  236. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts +4 -0
  237. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.d.ts.map +1 -0
  238. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js +44 -0
  239. package/vendor/@0xray/repertoire/dist/synthesis/primitive-confidence-aggregator.js.map +1 -0
  240. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts +22 -0
  241. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.d.ts.map +1 -0
  242. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js +66 -0
  243. package/vendor/@0xray/repertoire/dist/synthesis/synthesis-prompt-builder.js.map +1 -0
  244. package/vendor/@0xray/repertoire/dist/types.d.ts +210 -0
  245. package/vendor/@0xray/repertoire/dist/types.d.ts.map +1 -0
  246. package/vendor/@0xray/repertoire/dist/types.js +2 -0
  247. package/vendor/@0xray/repertoire/dist/types.js.map +1 -0
  248. package/vendor/@0xray/repertoire/docs/MEMORY-ROUTING-PROVIDER.md +54 -0
  249. package/vendor/@0xray/repertoire/hermes-mcp.example.json +20 -0
  250. package/vendor/@0xray/repertoire/mcp-config.example.json +11 -0
  251. package/vendor/@0xray/repertoire/package.json +124 -0
  252. package/vendor/@0xray/repertoire/schemas/curated-signal.schema.json +68 -0
  253. package/vendor/@0xray/repertoire/schemas/inference-log.schema.json +82 -0
  254. package/vendor/@0xray/repertoire/scripts/confirm-suit-all.mjs +253 -0
  255. package/vendor/@0xray/repertoire/scripts/confirm-suit-harness.mjs +220 -0
  256. package/vendor/@0xray/repertoire/scripts/run-live-synthesis-checkpoint.mjs +215 -0
  257. package/vendor/@0xray/repertoire/scripts/suit-bridge-shared.mjs +139 -0
  258. package/vendor/@0xray/repertoire/scripts/verify-grok-suit.mjs +304 -0
  259. package/vendor/@0xray/repertoire/scripts/verify-hermes-suit.mjs +163 -0
  260. package/vendor/@0xray/repertoire/scripts/verify-openclaw-suit.mjs +125 -0
  261. package/vendor/@0xray/repertoire/scripts/verify-opencode-suit.mjs +127 -0
  262. package/vendor/@0xray/repertoire/scripts/verify-synthesis-dogfood.mjs +207 -0
  263. package/vendor/@0xray/repertoire/skills/repertoire-trap-handling/SKILL.md +206 -0
  264. package/xray/codex.json +12 -3
  265. package/xray/features.json +32 -6
  266. package/xray/features.schema.json +87 -0
@@ -47,9 +47,108 @@ export class TaskHandler {
47
47
  sessionId?: string;
48
48
  executionMode?: string;
49
49
  timeout?: number;
50
+ confer?: boolean;
51
+ conferFixture?: boolean;
52
+ collocatedText?: string;
53
+ userAsideId?: string;
54
+ setActiveAside?: boolean;
55
+ clearActiveAside?: boolean;
50
56
  },
51
57
  deps: TaskHandlerDeps
52
58
  ): Promise<{ content: Array<{ type: string; text: string }> }> {
59
+ if (args.clearActiveAside === true) {
60
+ const projectRoot = process.cwd();
61
+ const { clearActiveAside, getActiveAsideId } = await import(
62
+ '../../../nucleus/user-aside.js',
63
+ );
64
+ const prior = getActiveAsideId(projectRoot, args.sessionId ?? null);
65
+ clearActiveAside(projectRoot);
66
+ return {
67
+ content: [
68
+ {
69
+ type: 'text',
70
+ text: prior
71
+ ? `✅ Cleared active aside \`${prior}\` — spawns resume main lead-dev plan.`
72
+ : 'ℹ️ No active aside was set.',
73
+ },
74
+ ],
75
+ };
76
+ }
77
+
78
+ if (args.userAsideId?.trim()) {
79
+ const projectRoot = process.cwd();
80
+ const {
81
+ setActiveAsideId,
82
+ loadUserAside,
83
+ formatUserAsideSummary,
84
+ isUserAsidesEnabled,
85
+ UserAsideValidationError,
86
+ } = await import('../../../nucleus/user-aside.js');
87
+ const { clearPendingDelegations } = await import(
88
+ '../../../nucleus/pending-delegations.js',
89
+ );
90
+ if (!isUserAsidesEnabled(projectRoot)) {
91
+ return {
92
+ content: [{ type: 'text', text: '❌ User asides disabled in features.json' }],
93
+ };
94
+ }
95
+ const asideId = args.userAsideId.trim();
96
+ const aside = loadUserAside(asideId, projectRoot);
97
+ if (!aside) {
98
+ return {
99
+ content: [
100
+ {
101
+ type: 'text',
102
+ text: `❌ User aside \`${asideId}\` not found — run analyze-complexity with userAsideId first.`,
103
+ },
104
+ ],
105
+ };
106
+ }
107
+ if (args.setActiveAside !== false) {
108
+ try {
109
+ clearPendingDelegations(projectRoot);
110
+ setActiveAsideId(asideId, projectRoot, args.sessionId ?? null);
111
+ } catch (err) {
112
+ const message = err instanceof UserAsideValidationError ? err.message : String(err);
113
+ return { content: [{ type: 'text', text: `❌ ${message}` }] };
114
+ }
115
+ }
116
+ return {
117
+ content: [
118
+ {
119
+ type: 'text',
120
+ text:
121
+ `✅ Active aside: \`${asideId}\`\n\n${formatUserAsideSummary(aside)}`,
122
+ },
123
+ ],
124
+ };
125
+ }
126
+
127
+ if (args.confer === true) {
128
+ const { runConferQuorum, formatConferQuorumReport, isConferEnabled } = await import(
129
+ '../../../nucleus/confer.js',
130
+ );
131
+ const sid = args.sessionId ?? `confer_${Date.now()}`;
132
+ if (!isConferEnabled()) {
133
+ return {
134
+ content: [{ type: 'text', text: '❌ Confer disabled in features.json' }],
135
+ };
136
+ }
137
+ const conferOpts: {
138
+ dueReason?: string | null;
139
+ fixture?: boolean;
140
+ collocatedText?: string;
141
+ } = {
142
+ dueReason: args.description,
143
+ fixture: args.conferFixture === true,
144
+ };
145
+ if (args.collocatedText) conferOpts.collocatedText = args.collocatedText;
146
+ const result = await runConferQuorum(process.cwd(), sid, conferOpts);
147
+ return {
148
+ content: [{ type: 'text', text: formatConferQuorumReport(result) }],
149
+ };
150
+ }
151
+
53
152
  const { description, tasks = [], sessionId = `session_${Date.now()}`, executionMode = 'optimized', timeout = 300000 } = args;
54
153
 
55
154
  await frameworkLogger.log(
@@ -133,14 +133,39 @@ export class OrchestratorServer {
133
133
  default: 'optimized',
134
134
  },
135
135
  timeout: { type: 'number', default: 300000 },
136
+ confer: {
137
+ type: 'boolean',
138
+ description:
139
+ 'Run mandatory 3-agent confer quorum (researcher, architect-tools, code-review) instead of task execution',
140
+ },
141
+ conferFixture: {
142
+ type: 'boolean',
143
+ description: 'Use fixture confer receipts (CI/verify)',
144
+ },
145
+ collocatedText: {
146
+ type: 'string',
147
+ description: 'Collocated synthesis context for confer prompts',
148
+ },
149
+ userAsideId: {
150
+ type: 'string',
151
+ description: 'Activate an existing user aside for spawn routing',
152
+ },
153
+ setActiveAside: {
154
+ type: 'boolean',
155
+ description: 'Set userAsideId as the active aside (default true)',
156
+ },
157
+ clearActiveAside: {
158
+ type: 'boolean',
159
+ description: 'Clear active aside — resume main lead-dev plan spawns',
160
+ },
136
161
  },
137
- required: ['description', 'tasks'],
162
+ required: ['description'],
138
163
  },
139
164
  },
140
165
  {
141
166
  name: 'analyze-complexity',
142
167
  description:
143
- 'Analyze task complexity and recommend orchestration strategy. When lead_dev_mode is on (features.json), includes phased plan + todos + subagent routes. During synthesis checkpoint, returns collocated context and mandatory-consult realignment plan — pass sessionId from the active session.',
168
+ 'Analyze task complexity and recommend orchestration strategy. When lead_dev_mode is on (features.json), includes phased plan + todos + subagent routes. Pass userAsideId to intake a parallel user aside ({asideId}.a.* namespaced todos, worktree-like). During synthesis checkpoint, returns collocated context and mandatory-consult realignment plan — pass sessionId from the active session.',
144
169
  inputSchema: {
145
170
  type: 'object',
146
171
  properties: {
@@ -149,6 +174,27 @@ export class OrchestratorServer {
149
174
  description:
150
175
  'Active session id (required to clear synthesis checkpoint; inferred from checkpoint state when omitted)',
151
176
  },
177
+ userAsideId: {
178
+ type: 'string',
179
+ description:
180
+ 'User aside id — persists .xray/state/asides/{id}.json with {asideId}.a.* todos (parallel track)',
181
+ },
182
+ userAsideTitle: {
183
+ type: 'string',
184
+ description: 'Display title for the user aside (defaults to userAsideId)',
185
+ },
186
+ worktree: {
187
+ type: 'string',
188
+ description: 'Optional worktree path for aside isolation',
189
+ },
190
+ branch: {
191
+ type: 'string',
192
+ description: 'Optional git branch for the aside',
193
+ },
194
+ setActiveAside: {
195
+ type: 'boolean',
196
+ description: 'Activate aside for spawn routing (default true when userAsideId set)',
197
+ },
152
198
  tasks: {
153
199
  type: 'array',
154
200
  items: {
@@ -391,7 +437,12 @@ export class OrchestratorServer {
391
437
  ...complexityArgs,
392
438
  ...(sessionId ? { sessionId } : {}),
393
439
  ...(synthesisDue
394
- ? { synthesisCheckpoint: true, synthesisDueReason: dueReason }
440
+ ? {
441
+ synthesisCheckpoint: true,
442
+ synthesisDueReason: dueReason,
443
+ collocatedText: collocated?.collatedText ?? null,
444
+ conferFixture: process.env.XRAY_CONFER_FIXTURE === '1',
445
+ }
395
446
  : {}),
396
447
  },
397
448
  aside.asideId,
@@ -402,13 +453,13 @@ export class OrchestratorServer {
402
453
  content = appendSynthesisContextToResponse(content, collocated.collatedText);
403
454
  }
404
455
 
405
- if (synthesisDue && result.ok) {
456
+ if (synthesisDue && result.ok && !result.content[0]?.text?.includes('Confer quorum')) {
406
457
  content = content.map((block, index) =>
407
458
  index === 0
408
459
  ? {
409
460
  ...block,
410
461
  text:
411
- `${block.text}\n\n**Synthesis checkpoint remains active** until mandatory consult todos (s.1–s.3) are completed via Task spawns.`,
462
+ `${block.text}\n\n**Confer** runs automatically at synthesis checkpoint (researcher → architect-tools → code-review). Checkpoint clears when all consult todos complete.`,
412
463
  }
413
464
  : block,
414
465
  );
@@ -0,0 +1,163 @@
1
+ # 0xRay AI Agents
2
+
3
+ Quick reference for the 0xRay AI orchestration framework (shipped to your project on `npm install 0xray`).
4
+
5
+ **v3.4.5** — 7 MCP servers · 45 skills · 68 codex terms · 4 platform bridges
6
+
7
+ ## Postinstall (automatic)
8
+
9
+ `npm install 0xray` runs `install-bridges.cjs` and:
10
+
11
+ - Copies this file → **`AGENTS.md`** in your project root
12
+ - Ships root **`SKILLS.md`** and syncs **45 skills** to platform skill directories
13
+ - Seeds **`.gitignore`** (from template, if absent)
14
+ - Deploys **`.xray/`** (`codex.json`, `features.json`, `config.json`)
15
+ - Writes **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
16
+ - Installs bridges: **OpenCode**, **Grok**, **Hermes**, **OpenClaw**
17
+
18
+ Optional extras: `npx 0xray setup`
19
+
20
+ ## Available MCP Servers
21
+
22
+ All seven servers use `npx -y 0xray mcp <cmd>` — configured in your project `.mcp.json`:
23
+
24
+ | Server | Role |
25
+ |--------|------|
26
+ | `xray-governance` | Proposal governance, codex snapshot, quality gates |
27
+ | `xray-skills` | Skill invocation, 45 knowledge skills |
28
+ | `xray-orchestrator` | thinDispatch routing, AsideContext, confidence gate |
29
+ | `xray-enforcer` | Codex compliance enforcement, rule validation |
30
+ | `xray-researcher` | Codebase exploration, memory-routing enrichment |
31
+ | `xray-code-review` | Proposal quality, code review deliberation |
32
+ | `xray-architect-tools` | System design, architecture decisions |
33
+
34
+ Governance deliberation uses **code-review**, **security-audit** (via enforcer/skills), and **researcher** within this 7-server surface.
35
+
36
+ ## CLI Commands
37
+
38
+ | Command | Description |
39
+ |---------|-------------|
40
+ | `npx 0xray setup` | Symlinks, hook extras, Hermes skill sync |
41
+ | `npx 0xray status` | Verify installation |
42
+ | `npx 0xray opencode install` | OpenCode bridge (also runs on postinstall) |
43
+ | `npx 0xray grok install` | Grok plugin + 7 MCPs servers + skill sync |
44
+ | `npx 0xray hermes install` | Hermes plugin bridge |
45
+ | `npx 0xray openclaw install` | OpenClaw config + skills |
46
+ | `npx 0xray skill:install` | Install starter skills |
47
+ | `npx 0xray validate` | Validate codex compliance |
48
+ | `npx 0xray codex check` | Check codex rules |
49
+ | `npx 0xray health` | Framework health check |
50
+ | `npx 0xray mcp <server>` | Start an MCP server (stdio) |
51
+
52
+ ## Governance
53
+
54
+ xray operates under the three-subsystem model: **Inference** + **External Governance** (Dynamo Solar SSOT) + **Autonomous Engine** (thinDispatch 7-flow in MCP orchestrator). All actions are validated against the Universal Development Codex before execution.
55
+
56
+ **Codex**: `.xray/codex.json` — **68 terms** across all agent interactions.
57
+
58
+ ## thinDispatch Routing
59
+
60
+ - Simple (≤15): Single agent
61
+ - Moderate (≤25): Single agent with tools
62
+ - Complex (≤50): Multi-agent coordination
63
+ - Enterprise (>50): Orchestrator-led team
64
+
65
+ ## AsideContext (v3.2+)
66
+
67
+ Bounded orchestrator subcontexts via `xray-orchestrator` MCP — `spawnAside` / `closeAside` on multi-step tasks. Repertoire memory routing (when enabled) flows through `inheritedContext.memoryRouting`.
68
+
69
+ ## Memory Routing + Repertoire (optional, v3.3+)
70
+
71
+ Configure in `.xray/features.json`:
72
+
73
+ ```json
74
+ "memory_routing": {
75
+ "enabled": true,
76
+ "provider": "repertoire",
77
+ "module_path": "../repertoire/dist/provider/memory-routing-provider.js",
78
+ "config": {
79
+ "signalsPath": "../repertoire/data/curated_signals.json"
80
+ }
81
+ }
82
+ ```
83
+
84
+ Without Repertoire: `{ "enabled": false, "provider": "null" }`.
85
+
86
+ **External MCP** (Hermes/Grok): add Repertoire alongside 0xRay servers:
87
+
88
+ ```json
89
+ "repertoire": {
90
+ "command": "npx",
91
+ "args": ["-y", "@0xray/repertoire", "mcp"]
92
+ }
93
+ ```
94
+
95
+ Tools: `repertoire__get_task_confidence`, `repertoire__get_high_confidence_signals`, `repertoire__search_primitives`, `repertoire__ingest_feedback`.
96
+
97
+ ## Codex OS (always on — not optional)
98
+
99
+ The Universal Development Codex (`.xray/codex.json`, **69 terms**) is enforced by **PreToolUse** (blocks) and this section (brain). MCP enforcer is audit — not the gate.
100
+
101
+ | Term | Rule | Enforcement |
102
+ |------|------|-------------|
103
+ | 11 | No `any`, `@ts-ignore`, `@ts-expect-error` | PreToolUse deny on edits |
104
+ | 29 | Security by design — no `eval()` | PreToolUse deny |
105
+ | 59 | Complex work → orchestrator intake | PreToolUse deny `spawn_subagent` without plan |
106
+ | 67–68 | Best subagents + lead dev ownership | `analyze-complexity` + orchestrator skill |
107
+ | **69** | **No new MCP/skill/handler surface** | PreToolUse deny new `*.server.ts`, `SKILL.md` |
108
+
109
+ `features.json` → `multi_agent_orchestration.no_new_surface` (default **true**). Rewire existing hooks/MCPs/skills — do not add parallel APIs.
110
+
111
+ ## Default operating mode: lead dev (rewired — no new MCP)
112
+
113
+ When the suit is worn, **lead dev mode** is ON via existing config + hooks:
114
+
115
+ | Layer | Existing piece | Rewire |
116
+ |-------|----------------|--------|
117
+ | Config | `features.json` → `multi_agent_orchestration.lead_dev_mode` | Extended, not new block |
118
+ | SessionStart + UserPromptSubmit | Grok hooks → `session-start.js` | Writes `.xray/state/session-boot.json` + `logs/framework/activity.log` |
119
+ | **OS gate** | **PreToolUse hook** | Codex patterns, surface area, spawn gate — `{"decision":"deny"}` + activity.log |
120
+ | Intake + plan | `xray-orchestrator` → **`analyze-complexity`** | Persists `.xray/state/lead-dev-plan.json` |
121
+ | Test triage | PreToolUse hook | Per-suite hint on full `npm test` |
122
+ | Playbook | **`orchestrator`** skill | Codex 59, 67–69 rules |
123
+
124
+ **First substantive task:** `analyze-complexity` with `tasks` array — **required before** `spawn_subagent`. You are the **lead developer**. Users speak in goals, not keywords.
125
+
126
+ | # | Rule |
127
+ |---|------|
128
+ | 1 | Phased plan + detailed todos; assign best subagent; monitor output |
129
+ | 2 | Take the helm — loop test fix until complete; no permission pings |
130
+ | 3 | Per-suite test triage after major changes; full suite last |
131
+ | 4 | Lead stays main thread; subagents execute; update todos continuously |
132
+ | 5 | Read all console and test output; triage fix rerun |
133
+ | 6 | Never defer errors as "pre-existing" — add todo and resolve |
134
+ | 7 | Resolve all errors before phase completion |
135
+
136
+ **Major work:** invoke `researcher` + `architect-tools` + `code-review` before planning/refactors — automatically.
137
+
138
+ ## Skills
139
+
140
+ Full catalog in root **`SKILLS.md`** (shipped on postinstall). **`orchestrator`** skill documents lead-dev mode. Invoke via `@orchestrator` or `xray-skills` MCP (`invoke-skill`, `list-skills`).
141
+
142
+ ## File Organization
143
+
144
+ | File Type | Save To |
145
+ |-----------|---------|
146
+ | Reflections | `docs/reflections/` |
147
+ | Logs | `logs/` |
148
+ | Scripts | `scripts/` or `scripts/bash/` |
149
+ | Test Files | `src/__tests__/` |
150
+ | Source Code | `src/` |
151
+ | Config | `config/` or `.xray/` |
152
+
153
+ ## Documentation
154
+
155
+ | Topic | URL |
156
+ |-------|-----|
157
+ | Getting started | https://0xrayai.github.io/xray/docs/guides/getting-started |
158
+ | Platform integrations | https://0xrayai.github.io/xray/docs/guides/integrations |
159
+ | Features since 3.1 | https://0xrayai.github.io/xray/docs/guides/features-since-3.1 |
160
+ | AsideContext | https://0xrayai.github.io/xray/docs/guides/aside-context |
161
+ | Memory routing | https://0xrayai.github.io/xray/docs/guides/memory-routing |
162
+ | Repertoire | https://0xrayai.github.io/xray/docs/guides/repertoire |
163
+ | Autonomy command | https://0xrayai.github.io/xray/docs/guides/autonomy-command |
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 0xRay Framework Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,120 @@
1
+ # @0xray/repertoire
2
+
3
+ Factory memory organ for [0xRay](https://github.com/0xRayAI/xray): seed primitives, in-process memory routing, extra MCP (not an 8th `xray-*` server).
4
+
5
+ **v0.2.0** · 0xRay **4.0** wear. Runtime does **not** depend on `0xray` (optional peer for suit-verify scripts).
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @0xray/repertoire
11
+ ```
12
+
13
+ Does not install `0xray`. After 0xray wear, refresh Grok hooks:
14
+
15
+ ```bash
16
+ npx 0xray grok install --force
17
+ ```
18
+
19
+ Restart Grok MCP sessions — hooks do not hot-reload.
20
+
21
+ ## Suit + autonomy (Grok Build)
22
+
23
+ ```bash
24
+ npm run confirm:suit # post-reboot: Layer 1 + 2a + 2b checklist
25
+ ```
26
+
27
+ **Suit verify from any consumer** (project must have `.xray/` + `0xray` installed):
28
+
29
+ ```bash
30
+ npx repertoire-verify-suit # 30-check harness from any consumer project root
31
+ ```
32
+
33
+ Includes 3.5.0 delegation gate + PostToolUse assertions (steps 11–13). Full harness: clone this repo and `npm run confirm:suit`. Quick check: `npx 0xray health`.
34
+
35
+ Default operating model: **`autonomy-command`** — lead dev, phased todos, subagent dispatch, per-suite test triage. See [AGENTS.md](AGENTS.md) and [xray autonomy guide](https://0xrayai.github.io/xray/docs/guides/autonomy-command).
36
+
37
+ ## MCP server (Hermes, Grok, OpenCode)
38
+
39
+ ```json
40
+ "repertoire": {
41
+ "command": "npx",
42
+ "args": ["-y", "@0xray/repertoire", "mcp"]
43
+ }
44
+ ```
45
+
46
+ Bundled `data/curated_signals.json` is used by default. Override with env:
47
+
48
+ | Env | Default |
49
+ |-----|---------|
50
+ | `CURATED_SIGNALS_PATH` | `<package>/data/curated_signals.json` |
51
+ | `REPERTOIRE_DATA_DIR` | `<package>/data` |
52
+ | `REPERTOIRE_LOG_DIR` | `<package>/logs/groover-inference` |
53
+
54
+ ### Tools
55
+
56
+ | Tool | Purpose |
57
+ |------|---------|
58
+ | `repertoire__get_task_confidence` | Trap detection, complexity boost, `recommendedAgent` |
59
+ | `repertoire__search_primitives` | Text search against curated signals |
60
+ | `repertoire__get_high_confidence_signals` | Validated signals above threshold |
61
+ | `repertoire__ingest_feedback` | Record orchestrator outcomes |
62
+
63
+ ## 0xRay memory routing (in-process)
64
+
65
+ In `.xray/features.json` or `xray/features.json`:
66
+
67
+ ```json
68
+ "memory_routing": {
69
+ "enabled": true,
70
+ "provider": "repertoire",
71
+ "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js"
72
+ }
73
+ ```
74
+
75
+ `config` is optional when using the bundled registry. For a project-local registry:
76
+
77
+ ```json
78
+ "config": {
79
+ "signalsPath": ".xray/curated_signals.json",
80
+ "logDir": "logs/groover-inference"
81
+ }
82
+ ```
83
+
84
+ Paths in `config` resolve relative to the consumer project root.
85
+
86
+ ## Programmatic import
87
+
88
+ ```ts
89
+ import { createMemoryRoutingProvider } from '@0xray/repertoire/provider/memory-routing-provider';
90
+
91
+ const provider = createMemoryRoutingProvider();
92
+ provider.getTaskConfidence?.({
93
+ id: 'task-1',
94
+ description: 'TYPE: ontological-trap attestation-as-map',
95
+ type: 'governance',
96
+ });
97
+ ```
98
+
99
+ ## Field actuation add-ons (optional)
100
+
101
+ Repertoire has **no Moltbook dependency**. It ingests **enriched JSONL** from any producer (`matched_primitives` + `match_confidence`) and closes the memory loop via consult, feedback, and post-tick ingest.
102
+
103
+ Each project activates its own public field surface if it wants one:
104
+
105
+ | Layer | Required? | Example |
106
+ |-------|-----------|---------|
107
+ | Repertoire + 0xRay memory routing | Core suit | `npm install @0xray/repertoire`, `features.json` |
108
+ | Engage pipeline (`consult → govern → log`) | Per producer | `groover/deploy/engage-core.ts` |
109
+ | Moltbook (or other social API) | **Add-on** | Groover's `deploy/moltbook-*.ts` + `MOLTBOOK_API_KEY` |
110
+
111
+ Jelly, ZigZag, or a custom cron worker can wire the same loop without Moltbook — point `logDir` at your JSONL and set `REPERTOIRE_ROOT`.
112
+
113
+ ## Sibling-repo development
114
+
115
+ ```bash
116
+ git clone https://github.com/0xRayAI/repertoire
117
+ cd repertoire && npm install && npm run build && npm test
118
+ ```
119
+
120
+ See [AGENTS.md](./AGENTS.md) for stack integration details.