0xray 3.4.5 → 3.4.6
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 +7 -0
- package/dist/README.md +1 -1
- package/dist/SKILLS.md +1 -1
- package/package.json +1 -1
- package/scripts/node/install-bridges.cjs +61 -3
package/AGENTS-consumer.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Quick reference for the 0xRay AI orchestration framework (shipped to your project on `npm install 0xray`).
|
|
4
4
|
|
|
5
|
-
**v3.4.
|
|
5
|
+
**v3.4.6** — 7 MCP servers · 45 skills · 68 codex terms · 4 platform bridges
|
|
6
6
|
|
|
7
7
|
## Postinstall (automatic)
|
|
8
8
|
|
package/AGENTS.md
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# xray — MCP-Centric AI Governance OS
|
|
2
2
|
|
|
3
|
-
**v3.4.
|
|
3
|
+
**v3.4.6** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
|
|
4
4
|
|
|
5
5
|
xray is the pure v2 three-subsystem AI orchestration framework — **MCP-centric**, governed by Dynamo, and autonomous via thinDispatch. Consumer `npm install 0xray` auto-wires all four platform bridges and seven MCP servers with zero manual config.
|
|
6
6
|
|
package/SKILLS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**v3.4.
|
|
3
|
+
**v3.4.6** — **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,13 @@ 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.4.6] - 2026-06-18
|
|
8
|
+
|
|
9
|
+
### 🐛 Bug Fixes
|
|
10
|
+
- **Postinstall config merge** — `deployXrayConfig` deep-merges existing consumer `features.json`, `codex.json`, and `config.json` instead of overwriting on mtime; consumer opt-ins (e.g. `memory_routing`) are preserved and `features.version` bumps to the installed package
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
7
14
|
## [3.4.5] - 2026-06-18
|
|
8
15
|
|
|
9
16
|
### ✨ Features
|
package/dist/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# xray — MCP-Centric AI Governance OS
|
|
2
2
|
|
|
3
|
-
**v3.4.
|
|
3
|
+
**v3.4.6** — 42 agents · 45 skills · 7 MCP servers · 68 codex terms · 3,226 tests
|
|
4
4
|
|
|
5
5
|
xray is the pure v2 three-subsystem AI orchestration framework — **MCP-centric**, governed by Dynamo, and autonomous via thinDispatch. Consumer `npm install 0xray` auto-wires all four platform bridges and seven MCP servers with zero manual config.
|
|
6
6
|
|
package/dist/SKILLS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**v3.4.
|
|
3
|
+
**v3.4.6** — **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
|
@@ -403,6 +403,64 @@ function installOpenclawBridge(targetDir, packageRoot, log) {
|
|
|
403
403
|
|
|
404
404
|
const XRAY_CONFIG_FILES = ["codex.json", "features.json", "features.schema.json", "config.json"];
|
|
405
405
|
|
|
406
|
+
/** Consumer JSON configs merge on upgrade — consumer values win; shipped fills new keys. */
|
|
407
|
+
const MERGE_CONFIG_FILES = new Set(["features.json", "config.json", "codex.json"]);
|
|
408
|
+
|
|
409
|
+
function readPackageVersion(packageRoot) {
|
|
410
|
+
try {
|
|
411
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"));
|
|
412
|
+
return pkg.version || null;
|
|
413
|
+
} catch {
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
function writeJsonFile(filePath, data) {
|
|
419
|
+
fs.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\n`);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function deployXrayConfigFile(file, src, dst, packageRoot) {
|
|
423
|
+
if (!fs.existsSync(dst)) {
|
|
424
|
+
fs.copyFileSync(src, dst);
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
if (file === "features.schema.json") {
|
|
429
|
+
if (fs.statSync(src).mtime > fs.statSync(dst).mtime) {
|
|
430
|
+
fs.copyFileSync(src, dst);
|
|
431
|
+
return true;
|
|
432
|
+
}
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
if (MERGE_CONFIG_FILES.has(file)) {
|
|
437
|
+
try {
|
|
438
|
+
const shipped = JSON.parse(fs.readFileSync(src, "utf8"));
|
|
439
|
+
const consumer = JSON.parse(fs.readFileSync(dst, "utf8"));
|
|
440
|
+
const merged = deepMerge(shipped, consumer);
|
|
441
|
+
if (file === "features.json") {
|
|
442
|
+
const pkgVersion = readPackageVersion(packageRoot);
|
|
443
|
+
if (pkgVersion) merged.version = pkgVersion;
|
|
444
|
+
else if (shipped.version) merged.version = shipped.version;
|
|
445
|
+
}
|
|
446
|
+
writeJsonFile(dst, merged);
|
|
447
|
+
return true;
|
|
448
|
+
} catch {
|
|
449
|
+
if (fs.statSync(src).mtime > fs.statSync(dst).mtime) {
|
|
450
|
+
fs.copyFileSync(src, dst);
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (fs.statSync(src).mtime > fs.statSync(dst).mtime) {
|
|
458
|
+
fs.copyFileSync(src, dst);
|
|
459
|
+
return true;
|
|
460
|
+
}
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
|
|
406
464
|
function resolveXrayConfigSource(packageRoot, file) {
|
|
407
465
|
// Shipped SSOT: xray/ template wins over dev .xray/ runtime copy (P0.2)
|
|
408
466
|
const xrayDir = path.join(packageRoot, "xray", file);
|
|
@@ -423,9 +481,7 @@ function deployXrayConfig(targetDir, packageRoot, log) {
|
|
|
423
481
|
const src = resolveXrayConfigSource(packageRoot, file);
|
|
424
482
|
const dst = path.join(xrayTargetDir, file);
|
|
425
483
|
if (!src) continue;
|
|
426
|
-
|
|
427
|
-
if (shouldCopy) {
|
|
428
|
-
fs.copyFileSync(src, dst);
|
|
484
|
+
if (deployXrayConfigFile(file, src, dst, packageRoot)) {
|
|
429
485
|
copied++;
|
|
430
486
|
}
|
|
431
487
|
}
|
|
@@ -479,6 +535,8 @@ module.exports = {
|
|
|
479
535
|
syncBuiltinSkills,
|
|
480
536
|
isConsumerInstall,
|
|
481
537
|
deployXrayConfig,
|
|
538
|
+
deployXrayConfigFile,
|
|
482
539
|
resolveXrayConfigSource,
|
|
483
540
|
XRAY_CONFIG_FILES,
|
|
541
|
+
MERGE_CONFIG_FILES,
|
|
484
542
|
};
|