0xray 4.0.9 → 4.0.10

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
  "$schema": "./features.schema.json",
3
- "version": "4.0.9",
3
+ "version": "4.0.10",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",
@@ -20,6 +20,7 @@ Before other work, Read `.xray/state/STATION.md`. Compaction and host change are
20
20
 
21
21
  - Copies this file → **`AGENTS.md`** in your project root
22
22
  - Fastens mill plant (`mill` + `inspect`) then overlays **your** `src/skills` (same name wins). `npx @0xray/foundry inspect` runs the mill checks (chat is not a receipt). Does **not** dump 45/42 costume unless `foundry.json` `"costume": true`. Does **not** write root **`SKILLS.md`**
23
+ - Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) is first-class with mill plant. Extra shops: `foundry.json` `"shopPlant"`. Not costume.
23
24
  - Seeds **`.gitignore`** (from template, if absent)
24
25
  - Deploys **`.xray/`** (`codex.json`, `features.json`, `config.json`) then overlays **your** mill SSOT (`xray/codex.json`, `xray/features.json`, `src/skills`, `src/opencode/agents`; remap with `foundry.json`)
25
26
  - Writes **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
package/AGENTS.md CHANGED
@@ -20,7 +20,7 @@ xray provides intelligent multi-agent orchestration with automatic delegation an
20
20
  - **External Governance** — Dynamo Solar SSOT, 69-term Codex
21
21
  - **Autonomous Engine** — thinDispatch 7-flow, AsideContext, confidence gate
22
22
 
23
- Agents are declared in `src/opencode/agents/*.yml` — the YML SSOT. Skills live in `src/skills/*/SKILL.md` — see [SKILLS.md](SKILLS.md). Consumer projects receive slimmed copies via postinstall (`AGENTS-consumer.md` → `AGENTS.md`, skills synced to platform dirs).
23
+ Agents are declared in `src/opencode/agents/*.yml` — the YML SSOT. Skills live in `src/skills/*/SKILL.md` — see [SKILLS.md](SKILLS.md) for the exo catalog. Consumer default plant is **mill + inspect**, not a 45-skill sync (`AGENTS-consumer.md` → `AGENTS.md`). Factory hangar shops coexist via shop plant. See [llms.txt](llms.txt).
24
24
 
25
25
  ## Consumer MCP surface (7 servers)
26
26
 
@@ -42,14 +42,16 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
42
42
 
43
43
  `postinstall.cjs` → `installAllBridges()`:
44
44
 
45
- 1. `AGENTS-consumer.md` → `AGENTS.md`
46
- 2. `SKILLS.md` + 45 skills → platform skill directories
45
+ 1. `AGENTS-consumer.md` → `AGENTS.md` (does **not** write consumer-root `SKILLS.md`)
46
+ 2. Fasten mill plant (`mill` + `inspect`). Not a 45-skill costume dump unless `foundry.json` `"costume": true`
47
47
  3. `.gitignore.default` → `.gitignore` (if absent)
48
- 4. `.xray/` config (`codex.json`, `features.json`, `config.json`)
48
+ 4. `.xray/` config (`codex.json`, `features.json`, `config.json`) then overlay their plant
49
49
  5. `.mcp.json` (7 servers)
50
50
  6. Four bridges: OpenCode, Grok, Hermes, OpenClaw
51
51
  7. Optional git hooks
52
52
 
53
+ **Shop plant:** `shop-extract`, `shop-witness`, `shop-pin` (groover-hangar) are first-class with mill plant. Extra shops: `foundry.json` `shopPlant`. Not `"costume": true`. `npx @0xray/foundry inspect --skip-live` is the receipt.
54
+
53
55
  ## Memory routing + Repertoire (v3.3+)
54
56
 
55
57
  `xray/features.json` → `memory_routing` (schema: `features.schema.json`):
@@ -141,7 +143,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
141
143
  | Source | `src/` |
142
144
  | Config | `.xray/` or `config/` |
143
145
 
144
- **Root essentials only:** `README.md`, `CHANGELOG.md`, `package.json`, `AGENTS.md`, `SKILLS.md`, `tsconfig.json`.
146
+ **Root essentials only:** `README.md`, `CHANGELOG.md`, `package.json`, `AGENTS.md`, `SKILLS.md`, `llms.txt`, `tsconfig.json`.
145
147
 
146
148
  ## Available agents (42 YML surfaces)
147
149
 
@@ -207,6 +209,8 @@ Full skill mapping: [SKILLS.md](SKILLS.md).
207
209
 
208
210
  | Topic | Path |
209
211
  |-------|------|
212
+ | Agent map (`llms.txt`) | `llms.txt` |
213
+ | Foundry / mill plant | `docs-site/docs/architecture/v4-foundry.md` |
210
214
  | Features since 3.1 | `docs-site/docs/guides/features-since-3.1.md` |
211
215
  | features.json | `docs-site/docs/guides/features-json.md` |
212
216
  | Platform integrations | `docs-site/docs/guides/integrations.md` |
@@ -218,4 +222,4 @@ Full skill mapping: [SKILLS.md](SKILLS.md).
218
222
 
219
223
  ## Release artifacts
220
224
 
221
- `npm run release:patch` updates: `package.json`, `CHANGELOG.md`, `README.md`, `AGENTS.md`, `AGENTS-consumer.md`, `SKILLS.md`, Docusaurus guides.
225
+ `npm run release:patch` updates: `package.json`, `CHANGELOG.md`, `README.md`, `AGENTS.md`, `AGENTS-consumer.md`, `SKILLS.md`, `llms.txt`, Docusaurus guides.
package/README.md CHANGED
@@ -25,9 +25,10 @@ Consumer `npm install 0xray` auto-wires four platform bridges and seven MCP serv
25
25
  ## Quick Start
26
26
 
27
27
  ```bash
28
- npm install 0xray # postinstall: 4 bridges + 7 MCPs + AGENTS.md + SKILLS.md + .mcp.json
28
+ npm install 0xray # postinstall: mill+inspect plant + 4 bridges + 7 MCPs + AGENTS.md + .mcp.json
29
29
  npx 0xray status # verify install
30
30
  npx 0xray setup # optional: symlinks, hook extras
31
+ npx @0xray/foundry inspect --skip-live # mill receipt (chat is not a receipt)
31
32
  ```
32
33
 
33
34
  Manual per-platform install (idempotent, same result as postinstall):
@@ -50,6 +51,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
50
51
 
51
52
  | Version | Highlights |
52
53
  |---------|------------|
54
+ | **Unreleased** | Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). Not `"costume": true`. Root `llms.txt`. Pack→tmp fasten proof. |
53
55
  | **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
54
56
  | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
55
57
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
@@ -100,13 +102,16 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
100
102
 
101
103
  On `npm install 0xray` in a consumer project, postinstall automatically:
102
104
 
103
- 1. Copies **`AGENTS-consumer.md` → `AGENTS.md`** and ships root **`SKILLS.md`**
104
- 2. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
105
- 3. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`)
106
- 4. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
107
- 5. Installs **4 bridges**: OpenCode (agents + `opencode.json`), Grok (plugin + global skills), Hermes (`~/.hermes/plugins/xray-hermes`), OpenClaw (config + skills)
108
- 6. Syncs **45 framework skills** to platform skill dirs
109
- 7. Installs git pre-commit hook (non-blocking if not a git repo)
105
+ 1. Copies **`AGENTS-consumer.md` → `AGENTS.md`**. Does **not** write consumer-root **`SKILLS.md`**.
106
+ 2. Fastens **mill plant** (`mill` + `inspect`). Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
107
+ 3. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
108
+ 4. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`) then overlays **their** plant
109
+ 5. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
110
+ 6. Installs **4 bridges**: OpenCode, Grok, Hermes, OpenClaw (PPE + wiring; mill plant, not costume)
111
+ 7. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) may coexist when worn. Extra shops: `foundry.json` `shopPlant`. Not costume.
112
+ 8. Installs git pre-commit hook (non-blocking if not a git repo)
113
+
114
+ See [llms.txt](llms.txt) for the agent map. Catalog of 45 skills lives in [SKILLS.md](SKILLS.md) — that is the exo catalog, not default consumer wear.
110
115
 
111
116
  ## Seven MCP Servers (consumer)
112
117
 
@@ -198,9 +203,11 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
198
203
  |-------|-----------------|
199
204
  | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
200
205
  | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
206
+ | Pack → tmp proof | `npm run pack:tmp-proof` — tgz install + `foundry mint --skip-live` + hangar shops + inspect (no costume dump). Playwright n/a (CLI). |
201
207
 
202
208
  ```bash
203
209
  npm test
210
+ npm run pack:tmp-proof # pack → tmp fasten + hangar inspect
204
211
  npm run release:gate # full release gate (before upload)
205
212
  npm run release:npm # gate + prepare + npm publish --access public
206
213
  ```
package/SKILLS.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # 0xray Skills
2
2
 
3
- **4.0** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **4.0** — a suit that survives the context window
4
4
 
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.
5
+ **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Agent map: [llms.txt](llms.txt).
6
6
 
7
- Consumer `npm install 0xray` syncs all 45 skills to Grok, Hermes, and OpenClaw skill dirs. Framework repo also ships this file to consumers (3.1.1+).
7
+ xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume / self-plant catalog**. 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`) or when you plant them. This file is the exo catalog — mill does **not** write it to the consumer root.
8
8
 
9
9
  ---
10
10
 
package/dist/AGENTS.md CHANGED
@@ -20,7 +20,7 @@ xray provides intelligent multi-agent orchestration with automatic delegation an
20
20
  - **External Governance** — Dynamo Solar SSOT, 69-term Codex
21
21
  - **Autonomous Engine** — thinDispatch 7-flow, AsideContext, confidence gate
22
22
 
23
- Agents are declared in `src/opencode/agents/*.yml` — the YML SSOT. Skills live in `src/skills/*/SKILL.md` — see [SKILLS.md](SKILLS.md). Consumer projects receive slimmed copies via postinstall (`AGENTS-consumer.md` → `AGENTS.md`, skills synced to platform dirs).
23
+ Agents are declared in `src/opencode/agents/*.yml` — the YML SSOT. Skills live in `src/skills/*/SKILL.md` — see [SKILLS.md](SKILLS.md) for the exo catalog. Consumer default plant is **mill + inspect**, not a 45-skill sync (`AGENTS-consumer.md` → `AGENTS.md`). Factory hangar shops coexist via shop plant. See [llms.txt](llms.txt).
24
24
 
25
25
  ## Consumer MCP surface (7 servers)
26
26
 
@@ -42,14 +42,16 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
42
42
 
43
43
  `postinstall.cjs` → `installAllBridges()`:
44
44
 
45
- 1. `AGENTS-consumer.md` → `AGENTS.md`
46
- 2. `SKILLS.md` + 45 skills → platform skill directories
45
+ 1. `AGENTS-consumer.md` → `AGENTS.md` (does **not** write consumer-root `SKILLS.md`)
46
+ 2. Fasten mill plant (`mill` + `inspect`). Not a 45-skill costume dump unless `foundry.json` `"costume": true`
47
47
  3. `.gitignore.default` → `.gitignore` (if absent)
48
- 4. `.xray/` config (`codex.json`, `features.json`, `config.json`)
48
+ 4. `.xray/` config (`codex.json`, `features.json`, `config.json`) then overlay their plant
49
49
  5. `.mcp.json` (7 servers)
50
50
  6. Four bridges: OpenCode, Grok, Hermes, OpenClaw
51
51
  7. Optional git hooks
52
52
 
53
+ **Shop plant:** `shop-extract`, `shop-witness`, `shop-pin` (groover-hangar) are first-class with mill plant. Extra shops: `foundry.json` `shopPlant`. Not `"costume": true`. `npx @0xray/foundry inspect --skip-live` is the receipt.
54
+
53
55
  ## Memory routing + Repertoire (v3.3+)
54
56
 
55
57
  `xray/features.json` → `memory_routing` (schema: `features.schema.json`):
@@ -141,7 +143,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
141
143
  | Source | `src/` |
142
144
  | Config | `.xray/` or `config/` |
143
145
 
144
- **Root essentials only:** `README.md`, `CHANGELOG.md`, `package.json`, `AGENTS.md`, `SKILLS.md`, `tsconfig.json`.
146
+ **Root essentials only:** `README.md`, `CHANGELOG.md`, `package.json`, `AGENTS.md`, `SKILLS.md`, `llms.txt`, `tsconfig.json`.
145
147
 
146
148
  ## Available agents (42 YML surfaces)
147
149
 
@@ -207,6 +209,8 @@ Full skill mapping: [SKILLS.md](SKILLS.md).
207
209
 
208
210
  | Topic | Path |
209
211
  |-------|------|
212
+ | Agent map (`llms.txt`) | `llms.txt` |
213
+ | Foundry / mill plant | `docs-site/docs/architecture/v4-foundry.md` |
210
214
  | Features since 3.1 | `docs-site/docs/guides/features-since-3.1.md` |
211
215
  | features.json | `docs-site/docs/guides/features-json.md` |
212
216
  | Platform integrations | `docs-site/docs/guides/integrations.md` |
@@ -218,4 +222,4 @@ Full skill mapping: [SKILLS.md](SKILLS.md).
218
222
 
219
223
  ## Release artifacts
220
224
 
221
- `npm run release:patch` updates: `package.json`, `CHANGELOG.md`, `README.md`, `AGENTS.md`, `AGENTS-consumer.md`, `SKILLS.md`, Docusaurus guides.
225
+ `npm run release:patch` updates: `package.json`, `CHANGELOG.md`, `README.md`, `AGENTS.md`, `AGENTS-consumer.md`, `SKILLS.md`, `llms.txt`, Docusaurus guides.
package/dist/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ The format is based on [Conventional Commits](https://www.conventionalcommits.or
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### ✨ Features
10
+ - Mill inspect treats factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) as first-class with mill plant. `foundry.json` `shopPlant` names more shops. Not `"costume": true`. Nested mill stays **0.1.9**.
11
+ - Exo agent map: root `llms.txt` (mill+inspect plant, 7 MCPs, hangar/`shopPlant` coexistence, Codex 69, no costume dump). README / AGENTS / SKILLS / Docusaurus no longer claim default 45-skill sync.
12
+ - Pack → tmp suit proof: `npm run pack:tmp-proof` (and consumer smoke) installs the packed tgz, runs `foundry mint --skip-live`, plants factory hangar shops, and inspects without costume dump. Playwright n/a (mill CLI).
13
+
14
+ ### 🐛 Bug Fixes
15
+ - **Consumer install of packed `0xray`** — stop shipping `@0xray/repertoire` as `file:./vendor/@0xray/repertoire`. npm `--install-links`, pnpm, and yarn resolve that path from the **consumer** root (`ENOENT .../vendor/@0xray/repertoire/package.json`), not from `node_modules/0xray`. The organ stays in the tarball at `vendor/@0xray/repertoire/`; postinstall wears it into `node_modules/@0xray/repertoire`. Fresh `npm install 0xray` / `npm install 0xray-*.tgz` no longer needs a consumer-root `vendor/` tree. Mill plant (`mill`+`inspect`) unchanged.
16
+
9
17
  ### 🔧 Maintenance
10
18
  - Foundry mill: one bumper (`reconcile-version.mjs`); `version-manager.mjs` is `--artifacts-only` (JSON + CHANGELOG). Bump and `--tag` are refused.
11
19
  - Docs mill verifies era kernel headers (`4.0`) and skill counts; it does not rewrite markdown prose.
@@ -34,6 +42,14 @@ The format is based on [Conventional Commits](https://www.conventionalcommits.or
34
42
 
35
43
  ---
36
44
 
45
+ ## [4.0.10] - 2026-09-12
46
+
47
+ ### 🔄 Changes
48
+
49
+ - Version bump
50
+
51
+ ---
52
+
37
53
  ## [4.0.9] - 2026-09-11
38
54
 
39
55
  Postinstall does **not** mill npm global prefix or npx cache as a consumer. `resolveConsumerTargetDir` treats `_npx` and a prefix without `package.json` as an install prefix: mill `INIT_CWD` if it is a real project, else mill the 0xray package (dogfood skip). Isolated HOME still skips machine `~/.grok`. Mill plant stays `mill` + `inspect`. Not 45/42 costume. Nested mill stays **0.1.9**. Not 5.0.0.
package/dist/README.md CHANGED
@@ -25,9 +25,10 @@ Consumer `npm install 0xray` auto-wires four platform bridges and seven MCP serv
25
25
  ## Quick Start
26
26
 
27
27
  ```bash
28
- npm install 0xray # postinstall: 4 bridges + 7 MCPs + AGENTS.md + SKILLS.md + .mcp.json
28
+ npm install 0xray # postinstall: mill+inspect plant + 4 bridges + 7 MCPs + AGENTS.md + .mcp.json
29
29
  npx 0xray status # verify install
30
30
  npx 0xray setup # optional: symlinks, hook extras
31
+ npx @0xray/foundry inspect --skip-live # mill receipt (chat is not a receipt)
31
32
  ```
32
33
 
33
34
  Manual per-platform install (idempotent, same result as postinstall):
@@ -50,6 +51,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
50
51
 
51
52
  | Version | Highlights |
52
53
  |---------|------------|
54
+ | **Unreleased** | Shop plant first-class (`shop-extract`, `shop-witness`, `shop-pin` + `foundry.json` `shopPlant`). Not `"costume": true`. Root `llms.txt`. Pack→tmp fasten proof. |
53
55
  | **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
54
56
  | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
55
57
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
@@ -100,13 +102,16 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
100
102
 
101
103
  On `npm install 0xray` in a consumer project, postinstall automatically:
102
104
 
103
- 1. Copies **`AGENTS-consumer.md` → `AGENTS.md`** and ships root **`SKILLS.md`**
104
- 2. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
105
- 3. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`)
106
- 4. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
107
- 5. Installs **4 bridges**: OpenCode (agents + `opencode.json`), Grok (plugin + global skills), Hermes (`~/.hermes/plugins/xray-hermes`), OpenClaw (config + skills)
108
- 6. Syncs **45 framework skills** to platform skill dirs
109
- 7. Installs git pre-commit hook (non-blocking if not a git repo)
105
+ 1. Copies **`AGENTS-consumer.md` → `AGENTS.md`**. Does **not** write consumer-root **`SKILLS.md`**.
106
+ 2. Fastens **mill plant** (`mill` + `inspect`). Not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump.
107
+ 3. Seeds **`.gitignore`** from `.gitignore.default` (if absent)
108
+ 4. Deploys **`.xray/`** config (`codex.json`, `features.json`, `config.json`) then overlays **their** plant
109
+ 5. Writes project **`.mcp.json`** with 7 MCPs servers (`npx -y 0xray mcp …`)
110
+ 6. Installs **4 bridges**: OpenCode, Grok, Hermes, OpenClaw (PPE + wiring; mill plant, not costume)
111
+ 7. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin` from groover-hangar) may coexist when worn. Extra shops: `foundry.json` `shopPlant`. Not costume.
112
+ 8. Installs git pre-commit hook (non-blocking if not a git repo)
113
+
114
+ See [llms.txt](llms.txt) for the agent map. Catalog of 45 skills lives in [SKILLS.md](SKILLS.md) — that is the exo catalog, not default consumer wear.
110
115
 
111
116
  ## Seven MCP Servers (consumer)
112
117
 
@@ -198,9 +203,11 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
198
203
  |-------|-----------------|
199
204
  | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
200
205
  | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
206
+ | Pack → tmp proof | `npm run pack:tmp-proof` — tgz install + `foundry mint --skip-live` + hangar shops + inspect (no costume dump). Playwright n/a (CLI). |
201
207
 
202
208
  ```bash
203
209
  npm test
210
+ npm run pack:tmp-proof # pack → tmp fasten + hangar inspect
204
211
  npm run release:gate # full release gate (before upload)
205
212
  npm run release:npm # gate + prepare + npm publish --access public
206
213
  ```
package/dist/SKILLS.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # 0xray Skills
2
2
 
3
- **4.0** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **4.0** — a suit that survives the context window
4
4
 
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.
5
+ **45 skills** in this exo catalog. Default consumer plant is **`mill` + `inspect`**, not this dump. `npm install 0xray` does **not** sync 45 skills unless `foundry.json` `"costume": true`. Factory shop plant (`shop-extract`, `shop-witness`, `shop-pin`) coexists with mill plant when a hangar wears those shops. Extra shops: `foundry.json` `shopPlant`. Agent map: [llms.txt](llms.txt).
6
6
 
7
- Consumer `npm install 0xray` syncs all 45 skills to Grok, Hermes, and OpenClaw skill dirs. Framework repo also ships this file to consumers (3.1.1+).
7
+ xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) as the **costume / self-plant catalog**. 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`) or when you plant them. This file is the exo catalog — mill does **not** write it to the consumer root.
8
8
 
9
9
  ---
10
10
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.9",
3
+ "version": "4.0.10",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",
@@ -22,6 +22,7 @@ function resolveUnavailableReason(provider) {
22
22
  const REPERTOIRE_CANDIDATE_PATHS = [
23
23
  'node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js',
24
24
  'vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js',
25
+ 'node_modules/0xray/vendor/@0xray/repertoire/dist/provider/memory-routing-provider.js',
25
26
  '../repertoire/dist/provider/memory-routing-provider.js',
26
27
  '../../repertoire/dist/provider/memory-routing-provider.js',
27
28
  '../../../repertoire/dist/provider/memory-routing-provider.js',
@@ -73,6 +74,9 @@ function leftoverRepertoireModulePath(cwd) {
73
74
  const vendor = join(cwd, 'vendor', '@0xray', 'repertoire', 'dist', 'provider', 'memory-routing-provider.js');
74
75
  if (existsSync(vendor))
75
76
  return vendor;
77
+ const packedVendor = join(cwd, 'node_modules', '0xray', 'vendor', '@0xray', 'repertoire', 'dist', 'provider', 'memory-routing-provider.js');
78
+ if (existsSync(packedVendor))
79
+ return packedVendor;
76
80
  const sibling = resolve(cwd, '../repertoire/dist/provider/memory-routing-provider.js');
77
81
  if (existsSync(sibling))
78
82
  return sibling;
package/llms.txt ADDED
@@ -0,0 +1,59 @@
1
+ # 0xray
2
+
3
+ > Exo for coding agents. A suit that survives the context window. Not a catalog of 45 skills.
4
+
5
+ **4.0** — mill+inspect plant, 7 MCPs, Codex 69. Constitution always on.
6
+
7
+ Default consumer wear is **mill plant** (`mill` + `inspect`), not a 45-skill / 42-agent costume dump. `foundry.json` `"costume": true` is the opt-in dump. Do not use costume to land hangar shops.
8
+
9
+ ## Wear (what a stranger gets)
10
+
11
+ - `npm install 0xray` — postinstall fastens mill+inspect, writes 7 MCP `.mcp.json`, four host bridges (OpenCode, Grok, Hermes, OpenClaw), overlays their plant. Does **not** write consumer-root `SKILLS.md`.
12
+ - `npx @0xray/foundry mint --skip-live` — re-fasten mill plant, then inspect.
13
+ - `npx @0xray/foundry inspect --skip-live` — plant-vs-worn, receipt, CI. Chat is not a receipt.
14
+
15
+ ## Shop plant (hangar coexistence)
16
+
17
+ Factory shop plant is first-class with mill plant: `shop-extract`, `shop-witness`, `shop-pin` (groover-hangar). Worn shops are **not** a costume dump.
18
+
19
+ - Extra shop names: `foundry.json` `"shopPlant"` (string[] / plant dir / `{ skills, dir }`).
20
+ - Field is `shopPlant`, not `hangarPlant` (mill plant copy cannot say hangar).
21
+ - Undeclared leftovers (including undeclared `shop-*`, leftover `enforcer`) still fail plant-vs-worn.
22
+
23
+ ## Seven MCP servers
24
+
25
+ Registered in `.mcp.json` as `npx -y 0xray mcp <cmd>`:
26
+
27
+ | Server | Role |
28
+ |--------|------|
29
+ | `xray-governance` | Proposal governance, Codex snapshot |
30
+ | `xray-skills` | Skill invoke (catalog exists; default plant is still mill+inspect) |
31
+ | `xray-orchestrator` | thinDispatch, AsideContext, confidence gate |
32
+ | `xray-enforcer` | Codex compliance |
33
+ | `xray-researcher` | Codebase exploration |
34
+ | `xray-code-review` | Proposal quality |
35
+ | `xray-architect-tools` | System design |
36
+
37
+ Not an 8th `xray-*` server. Repertoire is a vendored organ (`npx @0xray/repertoire mcp`), enable-when-resolves.
38
+
39
+ ## Codex 69 (always on)
40
+
41
+ `.xray/codex.json` — 69 terms. PPE (`evaluatePreToolGate`) denies Codex 11 / 29 / 69. No new MCP / skill / handler surface. No `any`. No `eval`. Temperament scales ceremony (guided vs frontier), not whether governance exists.
42
+
43
+ ## Agent map (exo, not dump)
44
+
45
+ - **Mill** — fasten their plant; factory discipline. Nested mill `@0xray/foundry` 0.1.9.
46
+ - **Inspect** — diffs, plant-vs-worn, mill receipt, CI, live tarball GET.
47
+ - **Hangar** — plants factory shops on the four floors. Coexists with mill plant via shop plant allowlist.
48
+ - **42 YML / 45 SKILL.md** — exo catalog in this repo. Not default consumer wear.
49
+
50
+ ## Docs
51
+
52
+ - [README.md](README.md) — exo landing
53
+ - [AGENTS.md](AGENTS.md) — framework card
54
+ - [AGENTS-consumer.md](AGENTS-consumer.md) — consumer card (copied to `AGENTS.md` on install)
55
+ - [SKILLS.md](SKILLS.md) — catalog (costume / self-plant, not default sync)
56
+ - [Foundry](docs-site/docs/architecture/v4-foundry.md) — mill vs exo, shopPlant
57
+ - [Features since 3.1](docs-site/docs/guides/features-since-3.1.md)
58
+
59
+ Playwright / UI: n/a. This mill is CLI.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "4.0.9",
3
+ "version": "4.0.10",
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",
@@ -120,6 +120,7 @@
120
120
  "release:dry": "node scripts/foundry/release.mjs patch --dry-run",
121
121
  "version:reconcile": "node scripts/foundry/reconcile-version.mjs",
122
122
  "consumer:smoke": "node scripts/node/consumer-install-smoke.mjs",
123
+ "pack:tmp-proof": "node scripts/node/pack-tmp-suit-proof.mjs",
123
124
  "release:gate": "node scripts/foundry/release-gate.mjs",
124
125
  "release:docs-check": "node scripts/foundry/validate-release-docs.mjs",
125
126
  "pre-publish-guard": "node scripts/node/pre-publish-guard.js",
@@ -189,6 +190,7 @@
189
190
  ".opencode/enforcer-config.json",
190
191
  "opencode.json",
191
192
  "README.md",
193
+ "llms.txt",
192
194
  ".mcp.json",
193
195
  "AGENTS.md",
194
196
  "AGENTS-consumer.md",
@@ -207,7 +209,6 @@
207
209
  "vendor/@0xray/repertoire/"
208
210
  ],
209
211
  "dependencies": {
210
- "@0xray/repertoire": "file:./vendor/@0xray/repertoire",
211
212
  "@modelcontextprotocol/sdk": "^1.0.4",
212
213
  "commander": "^11.1.0",
213
214
  "express": "^5.2.1",
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ Shop plant is first-class with mill plant. `shop-extract`, `shop-witness`, `shop-pin` (and `foundry.json` `shopPlant`) are not a costume dump. `"costume": true` still required for 45/42. No mill version bump.
6
+
3
7
  ## [0.1.9] - 2026-09-09
4
8
 
5
9
  Inventory writes `dna` (keccak256 of canonical JSON without `mintedAt`). Inspect receipt echoes `dna` + pack `0xray-suit` for Groover GRVR. Mill does not mint on chain. Not an 8th MCP. Not 5.0.
@@ -55,6 +55,8 @@ After mill plant is fastened, overlay their plant (defaults; remap in `foundry.j
55
55
 
56
56
  **Default mill plant:** `mill` + `inspect` (inspect AI work). Fastens a suit, not an empty one. Not 45/42 costume. `foundry.json` `"costume": true` copies that dump. Factory Repertoire still enable-when-resolves. PPE stays worn.
57
57
 
58
+ **Shop plant:** `shop-extract`, `shop-witness`, `shop-pin` are first-class with mill plant. Inspect does not treat those worn names as a costume dump. `foundry.json` `"shopPlant"` names more shops (array), a plant dir (string), or `{ "skills": [...], "dir": "..." }`. This is not `"costume": true` and does not copy 45/42.
59
+
58
60
  **4.0.9 mill target (0xray postinstall, not this mill package):** `install-bridges.cjs` does not mill npm global prefix or npx `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. Nested mill stays **0.1.9**.
59
61
 
60
62
  ## Publish this mill
@@ -80,12 +80,14 @@ function checkPlantVsWorn(root, millRoot) {
80
80
  skills: mint.listConsumerSkillNames(root, params.skills),
81
81
  agents: mint.listConsumerAgentFiles(root, params.agents),
82
82
  };
83
+ const shopPlant = mint.loadShopPlant(root);
83
84
  try {
84
85
  mint.assertNoCostumeDump(root, millPlant, tree);
85
86
  return {
86
87
  id: "plant-vs-worn",
87
88
  ok: true,
88
89
  millPlant: millPlant.skills,
90
+ shopPlant,
89
91
  tree: tree.skills,
90
92
  worn: mint.wornSkillNames(root),
91
93
  };
@@ -96,6 +98,7 @@ function checkPlantVsWorn(root, millRoot) {
96
98
  detail: err instanceof Error ? err.message : String(err),
97
99
  extraSkills: err.extraSkills || [],
98
100
  extraAgents: err.extraAgents || [],
101
+ shopPlant,
99
102
  };
100
103
  }
101
104
  }
@@ -21,6 +21,9 @@ const DEFAULT_PARAMS = {
21
21
  agentsCard: "xray/AGENTS.md",
22
22
  };
23
23
 
24
+ /** Factory shop plant. First-class with mill plant. Not 45/42 costume. */
25
+ const FACTORY_SHOP_SKILLS = ["shop-extract", "shop-witness", "shop-pin"];
26
+
24
27
  function deepMerge(src, dest) {
25
28
  if (typeof src !== "object" || src === null) return dest !== undefined ? dest : src;
26
29
  if (Array.isArray(src)) return Array.isArray(dest) ? dest : src;
@@ -298,13 +301,59 @@ function wornAgentFiles(targetDir) {
298
301
  return listAgentFilesAt(path.join(targetDir, ".opencode", "agents"));
299
302
  }
300
303
 
304
+ function normalizeNameList(value) {
305
+ if (!Array.isArray(value)) return [];
306
+ const names = [];
307
+ for (const item of value) {
308
+ if (typeof item !== "string") continue;
309
+ const name = item.trim();
310
+ if (name) names.push(name);
311
+ }
312
+ return names;
313
+ }
314
+
315
+ function shopPlantFromDir(targetDir, rel) {
316
+ const resolved = resolveInside(targetDir, rel);
317
+ if (!resolved || !isDirectory(resolved)) return [];
318
+ const nested = path.join(resolved, "skills");
319
+ return listSkillNamesAt(isDirectory(nested) ? nested : resolved);
320
+ }
321
+
322
+ function declaredShopPlant(targetDir) {
323
+ const raw = loadFoundryExtra(targetDir).shopPlant;
324
+ const names = [];
325
+ if (Array.isArray(raw)) {
326
+ names.push(...normalizeNameList(raw));
327
+ } else if (typeof raw === "string" && raw.trim()) {
328
+ names.push(...shopPlantFromDir(targetDir, raw.trim()));
329
+ } else if (raw && typeof raw === "object") {
330
+ names.push(...normalizeNameList(raw.skills));
331
+ if (typeof raw.dir === "string" && raw.dir.trim()) {
332
+ names.push(...shopPlantFromDir(targetDir, raw.dir.trim()));
333
+ }
334
+ }
335
+ return names;
336
+ }
337
+
338
+ /** Factory shop names plus foundry.json shopPlant. Not costume. */
339
+ function loadShopPlant(targetDir) {
340
+ return [...new Set([...FACTORY_SHOP_SKILLS, ...declaredShopPlant(targetDir)])];
341
+ }
342
+
301
343
  function previousTreeAllowlist(targetDir) {
302
344
  const file = path.join(targetDir, ".xray", "foundry-inventory.json");
303
345
  if (!fs.existsSync(file)) return { skills: [], agents: [] };
304
346
  try {
305
347
  const inventory = JSON.parse(fs.readFileSync(file, "utf8"));
348
+ const shopFromInv = inventory?.shopPlant;
349
+ const shopSkills = Array.isArray(shopFromInv)
350
+ ? normalizeNameList(shopFromInv)
351
+ : normalizeNameList(shopFromInv?.skills);
306
352
  return {
307
- skills: Array.isArray(inventory?.tree?.skills) ? inventory.tree.skills : [],
353
+ skills: [
354
+ ...(Array.isArray(inventory?.tree?.skills) ? inventory.tree.skills : []),
355
+ ...shopSkills,
356
+ ],
308
357
  agents: Array.isArray(inventory?.tree?.agents) ? inventory.tree.agents : [],
309
358
  };
310
359
  } catch {
@@ -312,13 +361,15 @@ function previousTreeAllowlist(targetDir) {
312
361
  }
313
362
  }
314
363
 
315
- /** Extra worn names that are neither mill plant, their plant, nor a prior overlay. */
364
+ /** Extra worn names that are neither mill plant, their plant, shop plant, nor a prior overlay. */
316
365
  function costumeDumpExtras(targetDir, millPlant, tree) {
317
366
  const prior = previousTreeAllowlist(targetDir);
367
+ const shopPlant = loadShopPlant(targetDir);
318
368
  const allowedSkills = new Set([
319
369
  ...(Array.isArray(millPlant?.skills) ? millPlant.skills : []),
320
370
  ...(Array.isArray(tree?.skills) ? tree.skills : []),
321
371
  ...prior.skills,
372
+ ...shopPlant,
322
373
  ]);
323
374
  const allowedAgents = new Set([
324
375
  ...(Array.isArray(millPlant?.agents) ? millPlant.agents : []),
@@ -427,6 +478,9 @@ function mintConsumerFromSsot(packageRoot, targetDir, log, tree) {
427
478
  skills: Array.isArray(tree?.millPlantSkills) ? tree.millPlantSkills : [],
428
479
  agents: Array.isArray(tree?.millPlantAgents) ? tree.millPlantAgents : [],
429
480
  },
481
+ shopPlant: {
482
+ skills: Array.isArray(tree?.shopPlantSkills) ? tree.shopPlantSkills : loadShopPlant(targetDir),
483
+ },
430
484
  costume,
431
485
  facets: {
432
486
  constitution,
@@ -465,6 +519,7 @@ function mintConsumerSuit(millPackageRoot, targetDir, log) {
465
519
  const tree = overlayConsumerTree(targetDir, log, params);
466
520
  tree.millPlantSkills = millPlant.skills;
467
521
  tree.millPlantAgents = millPlant.agents;
522
+ tree.shopPlantSkills = loadShopPlant(targetDir);
468
523
  tree.codex = overlayJsonFacet(
469
524
  resolveInside(targetDir, params.codex),
470
525
  path.join(targetDir, ".xray", "codex.json"),
@@ -491,9 +546,12 @@ function mintConsumerSuit(millPackageRoot, targetDir, log) {
491
546
 
492
547
  module.exports = {
493
548
  DEFAULT_PARAMS,
549
+ FACTORY_SHOP_SKILLS,
494
550
  deepMerge,
495
551
  loadFoundryParams,
496
552
  loadFoundryExtra,
553
+ loadShopPlant,
554
+ declaredShopPlant,
497
555
  wantsCostume,
498
556
  millPlantDir,
499
557
  listSkillNamesAt,
@@ -12,7 +12,7 @@ Mill **does** these checks (`npx @0xray/foundry inspect`). Mint fails on a costu
12
12
  ## What mill inspects
13
13
 
14
14
  1. **Diff.** `git status` / `git diff --stat` of the milled cwd. Ignore the agent's summary if the diff disagrees.
15
- 2. **Plant vs worn.** `src/skills`, `src/opencode/agents` vs `.opencode/skills`, `.opencode/agents`. Same name: plant wins. Costume dump (worn names they did not plant and mill did not fasten) fails mint unless `foundry.json` has `"costume": true`.
15
+ 2. **Plant vs worn.** `src/skills`, `src/opencode/agents` vs `.opencode/skills`, `.opencode/agents`. Same name: plant wins. Shop plant (`shop-extract`, `shop-witness`, `shop-pin`, plus `foundry.json` `shopPlant`) is first-class with mill plant. Costume dump (worn names they did not plant, mill did not fasten, and shop plant did not name) fails mint unless `foundry.json` has `"costume": true`.
16
16
  3. **Mill receipt.** `.xray/foundry-inventory.json` — mill name/version, `suit` (`fastened` / `overlay` / `costume`), `millPlant.skills` must include `mill` and `inspect`.
17
17
  4. **CI.** GitHub mill CI report (`.opencode/logs/ci-cd-monitor-report.json`), not a green check in chat. No token is a skip, not a pass invented.
18
18
  5. **Live PUT.** HTTP 200 on the npm `.tgz`. Metadata without a tarball is not shipped.