0xray 3.5.2 → 3.5.3

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.
@@ -4,7 +4,7 @@
4
4
 
5
5
  Quick reference for the 0xRay AI orchestration framework (shipped to your project on `npm install 0xray`).
6
6
 
7
- **v3.5.2** — 7 MCP servers · 45 skills · 68 codex terms · 4 platform bridges
7
+ **v3.5.3** — 7 MCP servers · 45 skills · 68 codex terms · 4 platform bridges
8
8
 
9
9
  ## Postinstall (automatic)
10
10
 
package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # xray Agents
2
2
 
3
- Quick reference for the xray AI orchestration framework (**v3.5.2**).
3
+ Quick reference for the xray AI orchestration framework (**v3.5.3**).
4
4
 
5
5
  **42 agents** · **45 skills** · **7 consumer MCP servers** · **68 codex terms** · **3,226 tests**
6
6
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # xray — MCP-Centric AI Governance OS
2
2
 
3
- **v3.5.2** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
3
+ **v3.5.3** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
4
4
 
5
5
  ## Your AI Power Suit
6
6
 
package/SKILLS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 0xray Skills
2
2
 
3
- **v3.5.2** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **v3.5.3** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
4
4
 
5
5
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) across the full software lifecycle. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`), agent `@mentions`, or platform skill directories after postinstall.
6
6
 
package/dist/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # xray Agents
2
2
 
3
- Quick reference for the xray AI orchestration framework (**v3.5.2**).
3
+ Quick reference for the xray AI orchestration framework (**v3.5.3**).
4
4
 
5
5
  **42 agents** · **45 skills** · **7 consumer MCP servers** · **68 codex terms** · **3,226 tests**
6
6
 
package/dist/CHANGELOG.md CHANGED
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://www.conventionalcommits.org/).
6
6
 
7
+ ## [3.5.3] - 2026-06-19
8
+
9
+ ### 🔄 Changes
10
+
11
+ ### 🔎 Other Changes
12
+ - fix(release): ship verify-grok-synthesis-gate.mjs in npm tarball (c2d32627e)
13
+
14
+ ---
15
+
7
16
  ## [3.5.2] - 2026-06-19
8
17
 
9
18
  ### 🐛 Bug Fixes
package/dist/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # xray — MCP-Centric AI Governance OS
2
2
 
3
- **v3.5.2** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
3
+ **v3.5.3** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
4
4
 
5
5
  ## Your AI Power Suit
6
6
 
package/dist/SKILLS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 0xray Skills
2
2
 
3
- **v3.5.2** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **v3.5.3** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
4
4
 
5
5
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) across the full software lifecycle. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`), agent `@mentions`, or platform skill directories after postinstall.
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "3.5.2",
3
+ "version": "3.5.3",
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",
@@ -147,6 +147,7 @@
147
147
  "scripts/mjs/validate-postinstall-config.mjs",
148
148
  "scripts/mjs/verify-orchestrator-behavior.mjs",
149
149
  "scripts/mjs/verify-grok-delegation-gate.mjs",
150
+ "scripts/mjs/verify-grok-synthesis-gate.mjs",
150
151
  "scripts/mjs/verify-hermes-delegation-gate.mjs",
151
152
  "scripts/mjs/verify-delegation-gate-core.mjs",
152
153
  "scripts/mjs/delegation-gate-fixture.mjs",
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Hook fixture verify — PreToolUse synthesis gate via live Grok hook path.
4
+ * Run: node scripts/mjs/verify-grok-synthesis-gate.mjs
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import { mkdtempSync, rmSync } from 'node:fs';
8
+ import { tmpdir } from 'node:os';
9
+ import { join, dirname } from 'node:path';
10
+ import { fileURLToPath } from 'node:url';
11
+ import {
12
+ SYNTHESIS_FIXTURE_SESSION_ID,
13
+ seedSynthesisDueFixture,
14
+ } from './delegation-gate-fixture.mjs';
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const packageRoot = join(__dirname, '../..');
18
+ const preToolHook = join(packageRoot, 'dist/integrations/grok/hooks/pre-tool-use.js');
19
+
20
+ let failed = 0;
21
+ function pass(n) {
22
+ console.log(`✅ ${n}`);
23
+ }
24
+ function fail(n, d = '') {
25
+ failed++;
26
+ console.error(`❌ ${n}${d ? ` — ${d}` : ''}`);
27
+ }
28
+
29
+ function runHook(fixture, env = {}) {
30
+ const payload = JSON.stringify(fixture);
31
+ const out = execSync(`printf '%s' '${payload.replace(/'/g, "'\\''")}' | node "${preToolHook}"`, {
32
+ encoding: 'utf8',
33
+ env: { ...process.env, ...env },
34
+ });
35
+ return JSON.parse(out.trim());
36
+ }
37
+
38
+ const tmp = mkdtempSync(join(tmpdir(), 'xray-synth-grok-'));
39
+ seedSynthesisDueFixture(tmp);
40
+
41
+ const baseEnv = {
42
+ GROK_WORKSPACE_ROOT: tmp,
43
+ GROK_SESSION_ID: SYNTHESIS_FIXTURE_SESSION_ID,
44
+ };
45
+
46
+ try {
47
+ const denyWrite = runHook(
48
+ {
49
+ toolName: 'search_replace',
50
+ workspaceRoot: tmp,
51
+ sessionId: SYNTHESIS_FIXTURE_SESSION_ID,
52
+ toolInput: { path: 'src/a.ts', new_string: 'x' },
53
+ },
54
+ baseEnv,
55
+ );
56
+ if (denyWrite.decision === 'deny' && denyWrite.gate === 'synthesis-checkpoint') {
57
+ pass('PreToolUse denies write when synthesis due');
58
+ } else {
59
+ fail('synthesis write deny', JSON.stringify(denyWrite));
60
+ }
61
+
62
+ const allowRead = runHook(
63
+ {
64
+ toolName: 'read_file',
65
+ workspaceRoot: tmp,
66
+ sessionId: SYNTHESIS_FIXTURE_SESSION_ID,
67
+ toolInput: { path: 'src/a.ts' },
68
+ },
69
+ baseEnv,
70
+ );
71
+ if (allowRead.decision === 'allow') pass('PreToolUse allows read when synthesis due');
72
+ else fail('synthesis read allow', JSON.stringify(allowRead));
73
+
74
+ const allowConsult = runHook(
75
+ {
76
+ toolName: 'CallMcpTool',
77
+ workspaceRoot: tmp,
78
+ sessionId: SYNTHESIS_FIXTURE_SESSION_ID,
79
+ toolInput: {
80
+ server: 'xray-orchestrator',
81
+ toolName: 'analyze-complexity',
82
+ arguments: { tasks: [{ description: 'synthesis reflect', type: 'plan' }] },
83
+ },
84
+ },
85
+ baseEnv,
86
+ );
87
+ if (allowConsult.decision === 'allow') {
88
+ pass('PreToolUse allows analyze-complexity consult when synthesis due');
89
+ } else {
90
+ fail('synthesis consult allow', JSON.stringify(allowConsult));
91
+ }
92
+
93
+ const denyGovern = runHook(
94
+ {
95
+ toolName: 'CallMcpTool',
96
+ workspaceRoot: tmp,
97
+ sessionId: SYNTHESIS_FIXTURE_SESSION_ID,
98
+ toolInput: {
99
+ server: 'xray-orchestrator',
100
+ toolName: 'govern-and-apply',
101
+ arguments: { proposal: 'test' },
102
+ },
103
+ },
104
+ baseEnv,
105
+ );
106
+ if (denyGovern.decision === 'deny' && denyGovern.gate === 'synthesis-checkpoint') {
107
+ pass('PreToolUse denies govern-and-apply when synthesis due');
108
+ } else {
109
+ fail('synthesis govern deny', JSON.stringify(denyGovern));
110
+ }
111
+ } finally {
112
+ rmSync(tmp, { recursive: true, force: true });
113
+ }
114
+
115
+ console.log(
116
+ '\n' +
117
+ (failed === 0
118
+ ? '🎉 Grok synthesis gate verify passed (4/4).'
119
+ : `⚠️ ${failed} synthesis gate check(s) failed.`),
120
+ );
121
+ process.exit(failed === 0 ? 0 : 1);