0xray 4.0.14 → 4.0.15
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/.grok-plugin/plugin.json +1 -1
- package/.opencode/skills/orchestrator/SKILL.md +19 -1
- package/.xray/features.json +2 -2
- package/AGENTS-consumer.md +10 -5
- package/AGENTS.md +10 -7
- package/README.md +8 -7
- package/SKILLS.md +3 -2
- package/dist/AGENTS.md +10 -7
- package/dist/CHANGELOG.md +48 -0
- package/dist/README.md +8 -7
- package/dist/SKILLS.md +3 -2
- package/dist/cli/commands/hermes-install.js +2 -1
- package/dist/cli/commands/openclaw-install.js +2 -1
- package/dist/cli/commands/opencode-install.js +2 -1
- package/dist/cli/index.js +2 -1
- package/dist/integrations/cursor/hooks/cursor-hook-utils.js +9 -0
- package/dist/integrations/grok/grok-cli.js +2 -1
- package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/dist/reporting/log-parser.js +2 -2
- package/dist/skills/orchestrator/SKILL.md +19 -1
- package/llms.txt +8 -7
- package/package.json +2 -1
- package/scripts/foundry/CHANGELOG.md +33 -1
- package/scripts/foundry/README.md +12 -5
- package/scripts/foundry/assert-packed-dist-cli.mjs +6 -0
- package/scripts/foundry/blip-kapow.cjs +2 -0
- package/scripts/foundry/blip-looker.cjs +2 -0
- package/scripts/foundry/blip-render.cjs +2 -1237
- package/scripts/foundry/blip-rippel-organs.cjs +2 -0
- package/scripts/foundry/blip-rippel.cjs +2 -1963
- package/scripts/foundry/blip-scene.cjs +2 -0
- package/scripts/foundry/blip-stroke.cjs +2 -0
- package/scripts/foundry/blip-vibe.cjs +2 -0
- package/scripts/foundry/blip.mjs +23 -97
- package/scripts/foundry/cli.mjs +2 -2
- package/scripts/foundry/inspect.mjs +62 -19
- package/scripts/foundry/mill-plant.cjs +598 -0
- package/scripts/foundry/mint-suit.cjs +189 -99
- package/scripts/foundry/package.json +12 -1
- package/scripts/foundry/plant/agents/blip-inspect.yml +1 -1
- package/scripts/foundry/plant/agents/blip-looker.yml +5 -0
- package/scripts/foundry/plant/agents/blip-vibe.yml +5 -0
- package/scripts/foundry/plant/agents/blip.yml +1 -1
- package/scripts/foundry/plant/agents/inspect.yml +1 -1
- package/scripts/foundry/plant/agents/mill.yml +1 -1
- package/scripts/foundry/plant/agents/sound-inspect.yml +1 -1
- package/scripts/foundry/plant/agents/sound-mixer.yml +5 -0
- package/scripts/foundry/plant/agents/sound.yml +1 -1
- package/scripts/foundry/plant/motions/MOTION-REGISTRY.md +15 -9
- package/scripts/foundry/plant/motions/registry.json +5 -4
- package/scripts/foundry/plant/skills/blip/SKILL.md +4 -4
- package/scripts/foundry/plant/skills/blip-inspect/SKILL.md +2 -2
- package/scripts/foundry/plant/skills/blip-looker/SKILL.md +30 -0
- package/scripts/foundry/plant/skills/blip-vibe/SKILL.md +30 -0
- package/scripts/foundry/plant/skills/inspect/SKILL.md +2 -2
- package/scripts/foundry/plant/skills/sound/SKILL.md +3 -1
- package/scripts/foundry/plant/skills/sound-inspect/SKILL.md +1 -1
- package/scripts/foundry/plant/skills/sound-mixer/SKILL.md +28 -0
- package/scripts/foundry/sound-bed.cjs +2 -454
- package/scripts/foundry/sound-mixer.cjs +2 -0
- package/scripts/foundry/sound-rippel.cjs +2 -1434
- package/scripts/foundry/sound-taste.cjs +2 -0
- package/scripts/foundry/sound-voice.cjs +2 -0
- package/scripts/foundry/sound.mjs +23 -81
- package/scripts/node/install-bridges.cjs +39 -4
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/src/skills/orchestrator/SKILL.md +19 -1
- package/xray/features.json +2 -2
|
@@ -1,93 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* npx @0xray/foundry sound render
|
|
5
|
-
* npx @0xray/foundry sound inspect
|
|
3
|
+
* Shim: sound mill lives in @0xray/blip.
|
|
4
|
+
* npx @0xray/foundry sound render|inspect|mix [...]
|
|
6
5
|
*/
|
|
7
|
-
|
|
6
|
+
import { spawnSync } from "node:child_process";
|
|
8
7
|
import { createRequire } from "node:module";
|
|
9
8
|
import path from "node:path";
|
|
10
|
-
import {
|
|
11
|
-
import { resolveMillRoot } from "./mill-root.mjs";
|
|
12
|
-
|
|
13
|
-
const require = createRequire(import.meta.url);
|
|
14
|
-
const bed = require("./sound-bed.cjs");
|
|
9
|
+
import { pathToFileURL } from "node:url";
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
"Usage: npx @0xray/foundry sound <render|inspect> [...args]\n" +
|
|
18
|
-
"\n" +
|
|
19
|
-
"Sound plant, not mill. FOUNDRY_ROOT overrides cwd.\n" +
|
|
20
|
-
"render: brief → checksum seed → genre → wav → metrics receipt.\n" +
|
|
21
|
-
"inspect: last .xray/sound-bed-receipt.json PASS/FAIL (missing is FAIL).\n";
|
|
22
|
-
|
|
23
|
-
function argValue(argv, name, fallback) {
|
|
24
|
-
const i = argv.indexOf(name);
|
|
25
|
-
if (i < 0 || i + 1 >= argv.length) return fallback;
|
|
26
|
-
return argv[i + 1];
|
|
27
|
-
}
|
|
11
|
+
export { inspectBed } from "@0xray/blip/sound";
|
|
28
12
|
|
|
29
|
-
|
|
30
|
-
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function inspectBed(root) {
|
|
34
|
-
const receipt = bed.readReceipt(root);
|
|
35
|
-
if (!receipt) {
|
|
36
|
-
return {
|
|
37
|
-
ok: false,
|
|
38
|
-
status: "FAIL",
|
|
39
|
-
failClosed: true,
|
|
40
|
-
detail: "missing .xray/sound-bed-receipt.json",
|
|
41
|
-
receipt: null,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const status = receipt.status === "PASS" ? "PASS" : "FAIL";
|
|
45
|
-
return {
|
|
46
|
-
ok: status === "PASS",
|
|
47
|
-
status,
|
|
48
|
-
failClosed: true,
|
|
49
|
-
plant: "sound",
|
|
50
|
-
receipt,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function main() {
|
|
55
|
-
const argv = process.argv.slice(2);
|
|
56
|
-
const cmd = argv[0];
|
|
57
|
-
const rest = argv.slice(1);
|
|
58
|
-
const root = resolveMillRoot();
|
|
59
|
-
|
|
60
|
-
if (!cmd || cmd === "--help" || cmd === "-h" || cmd === "help") {
|
|
61
|
-
process.stdout.write(HELP);
|
|
62
|
-
process.exit(cmd ? 0 : 1);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (cmd === "inspect") {
|
|
66
|
-
const report = inspectBed(root);
|
|
67
|
-
writeJson(report);
|
|
68
|
-
process.exit(report.ok ? 0 : 1);
|
|
69
|
-
}
|
|
13
|
+
const require = createRequire(import.meta.url);
|
|
70
14
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
});
|
|
79
|
-
writeJson(result.receipt);
|
|
80
|
-
process.exit(result.receipt.status === "PASS" ? 0 : 1);
|
|
15
|
+
function runCli(args) {
|
|
16
|
+
let cli;
|
|
17
|
+
try {
|
|
18
|
+
cli = require.resolve("@0xray/blip/cli");
|
|
19
|
+
} catch {
|
|
20
|
+
process.stderr.write("Install @0xray/blip — the sound mill moved off the OS foundry.\n");
|
|
21
|
+
process.exit(1);
|
|
81
22
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
23
|
+
const result = spawnSync(process.execPath, [cli, "sound", ...args], {
|
|
24
|
+
stdio: "inherit",
|
|
25
|
+
cwd: process.env.FOUNDRY_ROOT || process.cwd(),
|
|
26
|
+
env: process.env,
|
|
27
|
+
});
|
|
28
|
+
process.exit(result.status === null ? 1 : result.status);
|
|
85
29
|
}
|
|
86
30
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
process.argv
|
|
91
|
-
if (isMain) {
|
|
92
|
-
main();
|
|
31
|
+
const invoked =
|
|
32
|
+
process.argv[1] && pathToFileURL(path.resolve(process.argv[1])).href === import.meta.url;
|
|
33
|
+
if (invoked) {
|
|
34
|
+
runCli(process.argv.slice(2));
|
|
93
35
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* install-bridges.cjs — Unified 4-platform bridge installer for consumer postinstall.
|
|
4
|
-
* Mirrors npx 0xray {opencode,grok,hermes,openclaw} install in one synchronous pass
|
|
4
|
+
* Mirrors npx 0xray {opencode,grok,hermes,openclaw} install in one synchronous pass
|
|
5
|
+
* plus Cursor project hooks (fifth wear — not a fifth chat TUI).
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
8
|
const fs = require("fs");
|
|
@@ -709,6 +710,35 @@ function deployXrayConfig(targetDir, packageRoot, log) {
|
|
|
709
710
|
return copied;
|
|
710
711
|
}
|
|
711
712
|
|
|
713
|
+
function resolveCursorHooksTemplate(packageRoot) {
|
|
714
|
+
const src = path.join(packageRoot, "src", "integrations", "cursor", "hooks", "hooks.json");
|
|
715
|
+
if (fs.existsSync(src)) return src;
|
|
716
|
+
const dist = path.join(packageRoot, "dist", "integrations", "cursor", "hooks", "hooks.json");
|
|
717
|
+
if (fs.existsSync(dist)) return dist;
|
|
718
|
+
return null;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Fifth wear: project `.cursor/hooks.json` so Cursor Cloud heats Station and gates tools.
|
|
723
|
+
* Leave an existing file alone (this exo already wears src/ via invoke-probe).
|
|
724
|
+
*/
|
|
725
|
+
function installCursorBridge(targetDir, packageRoot, log) {
|
|
726
|
+
const dest = path.join(targetDir, ".cursor", "hooks.json");
|
|
727
|
+
if (fs.existsSync(dest)) {
|
|
728
|
+
log("cursor-bridge", ".cursor/hooks.json exists — leave", "info");
|
|
729
|
+
return dest;
|
|
730
|
+
}
|
|
731
|
+
const template = resolveCursorHooksTemplate(packageRoot);
|
|
732
|
+
if (!template) {
|
|
733
|
+
log("cursor-bridge", "skipped", "warn", { reason: "cursor hooks template missing" });
|
|
734
|
+
return null;
|
|
735
|
+
}
|
|
736
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
737
|
+
fs.copyFileSync(template, dest);
|
|
738
|
+
log("cursor-bridge", "hooks.json fastened", "info", { path: ".cursor/hooks.json" });
|
|
739
|
+
return dest;
|
|
740
|
+
}
|
|
741
|
+
|
|
712
742
|
function installGitHooks(packageRoot, log) {
|
|
713
743
|
const installHooks = path.join(packageRoot, "scripts", "hooks", "install-hooks.cjs");
|
|
714
744
|
if (!fs.existsSync(installHooks)) return;
|
|
@@ -730,6 +760,8 @@ function installFrameworkDogfoodWear(packageRoot, log) {
|
|
|
730
760
|
applyResolvedMemoryRouting(featuresPath, packageRoot);
|
|
731
761
|
}
|
|
732
762
|
|
|
763
|
+
installCursorBridge(packageRoot, packageRoot, log);
|
|
764
|
+
|
|
733
765
|
const sourceDir = findGrokPluginSource(packageRoot);
|
|
734
766
|
const pluginDest = path.join(packageRoot, ".grok", "plugins", "0xray");
|
|
735
767
|
if (!sourceDir) {
|
|
@@ -744,7 +776,7 @@ function installFrameworkDogfoodWear(packageRoot, log) {
|
|
|
744
776
|
}
|
|
745
777
|
|
|
746
778
|
/**
|
|
747
|
-
* Install
|
|
779
|
+
* Install 4 chat bridges plus Cursor project hooks for a consumer project.
|
|
748
780
|
* @param {{ targetDir: string, packageRoot: string, log?: Function }} opts
|
|
749
781
|
*/
|
|
750
782
|
function installAllBridges(opts) {
|
|
@@ -764,7 +796,7 @@ function installAllBridges(opts) {
|
|
|
764
796
|
return;
|
|
765
797
|
}
|
|
766
798
|
|
|
767
|
-
log("install-bridges", "starting 4-platform
|
|
799
|
+
log("install-bridges", "starting 4-platform + cursor wear", "info");
|
|
768
800
|
|
|
769
801
|
deployXrayConfig(targetDir, packageRoot, log);
|
|
770
802
|
deployProjectMcpJson(targetDir, log);
|
|
@@ -773,9 +805,10 @@ function installAllBridges(opts) {
|
|
|
773
805
|
installGrokBridge(targetDir, packageRoot, log);
|
|
774
806
|
installHermesBridge(targetDir, packageRoot, log);
|
|
775
807
|
installOpenclawBridge(targetDir, packageRoot, log);
|
|
808
|
+
installCursorBridge(targetDir, packageRoot, log);
|
|
776
809
|
installGitHooks(packageRoot, log);
|
|
777
810
|
|
|
778
|
-
log("install-bridges", "4-platform
|
|
811
|
+
log("install-bridges", "4-platform + cursor wear complete", "success");
|
|
779
812
|
}
|
|
780
813
|
|
|
781
814
|
module.exports = {
|
|
@@ -798,4 +831,6 @@ module.exports = {
|
|
|
798
831
|
isIsolatedHome,
|
|
799
832
|
installFrameworkDogfoodWear,
|
|
800
833
|
wearVendoredRepertoire,
|
|
834
|
+
installCursorBridge,
|
|
835
|
+
resolveCursorHooksTemplate,
|
|
801
836
|
};
|
|
@@ -58,4 +58,22 @@ When `multi_agent_orchestration.lead_dev_mode` is true in `features.json` (defau
|
|
|
58
58
|
- **SessionStart** → `session-start.js` boots lead_dev_mode
|
|
59
59
|
- **PreToolUse** → hints `per_suite_triage_required` on full `npm test`
|
|
60
60
|
|
|
61
|
-
Config: `features.json` → `multi_agent_orchestration.lead_dev_mode`
|
|
61
|
+
Config: `features.json` → `multi_agent_orchestration.lead_dev_mode`
|
|
62
|
+
|
|
63
|
+
## Lead cadence (syncopation)
|
|
64
|
+
|
|
65
|
+
The seven rules are the engine. The cadence is the time signature. Disk SSOT: `grok-bot/ops/LEAD-CADENCE.md`.
|
|
66
|
+
|
|
67
|
+
- **Peer test:** another instance with only worn 0xRay continues the ticket. No command stream.
|
|
68
|
+
- **Wear first:** Read `.xray/state/STATION.md`. Same cloud. Same critic (resume only). Dummy Reads Station.
|
|
69
|
+
- **Dummy tests `SKILLS.md`:** a suited dummy proves the worn catalog. Same-sess bodies keep context and hold a Station card.
|
|
70
|
+
- **Ship track:** always branch + worktree/aside + PR. Docs as you go. Builds. Rollback = close the PR.
|
|
71
|
+
- **Publish:** spawn the OTP browser, watch success, poll `npm view` until the new version is live. Do not move on early. Railway same law.
|
|
72
|
+
- **Live tick, not pacer:** `/loop` runs work now. Keep workstreams moving. Do not idle-wait 12 minutes.
|
|
73
|
+
- **Board clock:** PR events + resume the same critic. Not two idle pacers. Merge after PASS+CI (gate A). Publish only after mill-gate D + `foundry gate`.
|
|
74
|
+
- **Dispatch:** ticket + PR URLs + “Wear, then review.” The critic Reads `SEATS.md` Reviewer. Do not paste a command novel. When a law is spoken twice, encode it this wake.
|
|
75
|
+
- **Close:** loop until Station is done. Compact: Station survives the cut. Repertoire keeps names.
|
|
76
|
+
- **Board:** critic Strict comments; forge implements; lead stays main thread.
|
|
77
|
+
- **Codex 69:** rewire this skill and existing ops. Do not add a new `SKILL.md` to hold the cadence.
|
|
78
|
+
- **Ship matrix:** `LEAD-CADENCE.md` Decision matrix — A PR+CI · B pack · C `release:docs-check` · D `foundry release --i-mean-it`. Green CI is not ship. Spend / credentials stay Ask-first.
|
|
79
|
+
- **Metamorphosis:** LLM → OP-PROC is in-context worn seats (same critic, same dummy, resume only). Not more bots.
|
package/xray/features.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./features.schema.json",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.15",
|
|
4
4
|
"description": "0xRay Framework - Unified Feature Configuration",
|
|
5
5
|
"suit_temperament": {
|
|
6
6
|
"profile": "auto",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
"provider": "repertoire",
|
|
163
163
|
"module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
|
|
164
164
|
"config": {
|
|
165
|
-
"signalsPath": "
|
|
165
|
+
"signalsPath": ".xray/state/repertoire/curated_signals.json",
|
|
166
166
|
"statePath": ".xray/state/repertoire/inference-state.json",
|
|
167
167
|
"feedbackDir": ".xray/state/repertoire/feedback"
|
|
168
168
|
}
|