0xray 4.0.33 → 4.0.34

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
4
4
  "description": "0xRay suit for Grok, Hermes, OpenClaw, OpenCode: mill+inspect, Codex, 7 MCP servers. Costume 45/42 is opt-in foundry, not the default wear.",
5
5
  "author": {
6
6
  "name": "0xRay AI",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",
package/dist/CHANGELOG.md CHANGED
@@ -42,6 +42,15 @@ The format is based on [Conventional Commits](https://www.conventionalcommits.or
42
42
  - Archive root `integrations/` costume SKILL dump → `docs/archive/integrations-costume/`. Live wear is `src/integrations`.
43
43
  - Archive root `commands/` stale copy → `docs/archive/commands-copy/`. Live wear is `src/opencode/commands`.
44
44
 
45
+ ## [4.0.34] - 2026-10-01
46
+
47
+ ### 🔄 Changes
48
+
49
+ ### 🐛 Bug Fixes
50
+ - fix: hold the lens on the worn build when the source is not packed (6f561ef6f)
51
+
52
+ ---
53
+
45
54
  ## [4.0.33] - 2026-10-01
46
55
 
47
56
  ### 🔄 Changes
@@ -4,7 +4,7 @@
4
4
  * The view keeps every field for the next look.
5
5
  * A held plane stays quiet. A leave is denied.
6
6
  */
7
- import { existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
7
+ import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, unlinkSync, writeFileSync } from 'node:fs';
8
8
  import { createRequire } from 'node:module';
9
9
  import { dirname, join, resolve } from 'node:path';
10
10
  import { fileURLToPath } from 'node:url';
@@ -649,7 +649,21 @@ function skillFor(id, root) {
649
649
  return existsSync(join(root, rel)) ? rel : '';
650
650
  }
651
651
 
652
+ function mappedFile(name) {
653
+ try {
654
+ const data = JSON.parse(readFileSync(planesFile(), 'utf8'));
655
+ const entry = data[name];
656
+ if (!entry || typeof entry !== 'object') return '';
657
+ if (typeof entry.file === 'string' && entry.file) return entry.file;
658
+ } catch {
659
+ return '';
660
+ }
661
+ return '';
662
+ }
663
+
652
664
  function moduleFile(name) {
665
+ const mapped = mappedFile(name);
666
+ if (mapped) return mapped;
653
667
  const platesDir = findPlatesDir(HERE);
654
668
  const root = sourceRoot(platesDir);
655
669
  const hit = sourceTexts(root).find((file) => file.rel.endsWith(`/${name}.ts`) || file.rel.endsWith(`/${name}.mjs`));
@@ -812,26 +826,39 @@ function fileHas(root, rel, mark) {
812
826
  }
813
827
 
814
828
 
815
- function examinePlane(plane, root) {
829
+ function factoryName(rel) {
830
+ return rel.startsWith('src/') || rel.startsWith('grok-bot/');
831
+ }
832
+
833
+ function wornHolds(plane, root) {
834
+ if (!plane.worn || !existsSync(join(root, plane.worn))) return false;
835
+ if (!plane.wornMark) return true;
836
+ return fileHas(root, plane.worn, plane.wornMark);
837
+ }
838
+
839
+ export function examinePlane(plane, root) {
816
840
  const files = Array.isArray(plane.files) ? plane.files : [];
817
841
  const checkable = files.length > 0 || plane.skills || plane.worn;
818
842
  if (!checkable) return drawing();
843
+ const held = wornHolds(plane, root);
844
+ if (plane.worn && !held) {
845
+ return drift(`the worn build is not ${files[0] || plane.worn}`);
846
+ }
819
847
  for (const rel of files) {
820
- if (!existsSync(join(root, rel))) return drift(`${rel} is not there`);
848
+ if (existsSync(join(root, rel))) continue;
849
+ if (held && factoryName(rel)) continue;
850
+ return drift(`${rel} is not there`);
821
851
  }
822
- if (plane.mark && !fileHas(root, files[0], plane.mark)) {
852
+ if (plane.mark && files[0] && existsSync(join(root, files[0])) && !fileHas(root, files[0], plane.mark)) {
823
853
  return drift(`${plane.mark} is not in ${files[0]}`);
824
854
  }
825
- if (plane.worn && !fileHas(root, plane.worn, plane.wornMark || plane.mark)) {
826
- return drift(`the worn build is not ${files[0] || plane.worn}`);
827
- }
828
- if (plane.skills && !existsSync(join(root, plane.skills))) {
855
+ if (plane.skills && !existsSync(join(root, plane.skills)) && !(held && factoryName(plane.skills))) {
829
856
  return drift(`${plane.skills} is not there`);
830
857
  }
831
- if (plane.entryIsMark && plane.entry && files[0] && !fileHas(root, files[0], plane.entry)) {
858
+ if (plane.entryIsMark && plane.entry && files[0] && existsSync(join(root, files[0])) && !fileHas(root, files[0], plane.entry)) {
832
859
  return drift(`${plane.entry} is not in ${files[0]}`);
833
860
  }
834
- if (plane.exitIsMark && plane.exit && files[0] && !fileHas(root, files[0], plane.exit)) {
861
+ if (plane.exitIsMark && plane.exit && files[0] && existsSync(join(root, files[0])) && !fileHas(root, files[0], plane.exit)) {
835
862
  return drift(`${plane.exit} is not in ${files[0]}`);
836
863
  }
837
864
  return holds();
@@ -943,7 +970,15 @@ export function maintainLens(root) {
943
970
  }
944
971
 
945
972
 
946
- const isMain = Boolean(process.argv[1]) && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
973
+ function sameInvoked(argvPath, modulePath) {
974
+ try {
975
+ return realpathSync(argvPath) === realpathSync(modulePath);
976
+ } catch {
977
+ return resolve(argvPath) === resolve(modulePath);
978
+ }
979
+ }
980
+
981
+ const isMain = Boolean(process.argv[1]) && sameInvoked(process.argv[1], fileURLToPath(import.meta.url));
947
982
  if (isMain) {
948
983
  const answered = gogglesAnswer(process.argv.slice(2));
949
984
  const pane = process.stdout.isTTY && Array.isArray(answered.cards) && answered.cards.length > 0;
@@ -15,6 +15,9 @@
15
15
  ],
16
16
  "skills": "SKILLS.md"
17
17
  },
18
+ "synthesis": {
19
+ "file": "src/nucleus/synthesis.ts"
20
+ },
18
21
  "routing": {
19
22
  "files": ["src/nucleus/thin-dispatch.ts"],
20
23
  "worn": "dist/nucleus/thin-dispatch.js",
@@ -24,5 +27,25 @@
24
27
  },
25
28
  "house": {
26
29
  "files": ["grok-bot/lib/seat-doctor.cjs"]
30
+ },
31
+ "boot": {
32
+ "files": ["src/core/boot-orchestrator.ts"],
33
+ "skills": "src/skills/boot-orchestrator/SKILL.md"
34
+ },
35
+ "governance": {
36
+ "files": ["src/governance/governance-service.ts"]
37
+ },
38
+ "memory-recall": {
39
+ "files": ["src/integrations/hooks/plates.cjs"]
40
+ },
41
+ "orchestration": {
42
+ "files": ["src/mcps/orchestrator/server.ts"]
43
+ },
44
+ "processor": {
45
+ "files": ["src/processors/processor-manager.ts"],
46
+ "skills": "src/skills/processor-pipeline/SKILL.md"
47
+ },
48
+ "reporting": {
49
+ "files": ["src/reporting/framework-reporting-system.ts"]
27
50
  }
28
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "4.0.33",
3
+ "version": "4.0.34",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",