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.
- package/AGENTS-consumer.md +1 -1
- package/AGENTS.md +1 -1
- package/README.md +1 -1
- package/SKILLS.md +1 -1
- package/dist/AGENTS.md +1 -1
- package/dist/CHANGELOG.md +9 -0
- package/dist/README.md +1 -1
- package/dist/SKILLS.md +1 -1
- package/package.json +2 -1
- package/scripts/mjs/verify-grok-synthesis-gate.mjs +121 -0
package/AGENTS-consumer.md
CHANGED
|
@@ -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.
|
|
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
package/README.md
CHANGED
package/SKILLS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**v3.5.
|
|
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
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
package/dist/SKILLS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**v3.5.
|
|
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.
|
|
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);
|