0xray 4.0.8 → 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.
- package/.xray/features.json +1 -1
- package/AGENTS-consumer.md +1 -0
- package/AGENTS.md +10 -6
- package/README.md +17 -9
- package/SKILLS.md +3 -3
- package/dist/AGENTS.md +10 -6
- package/dist/CHANGELOG.md +24 -0
- package/dist/README.md +17 -9
- package/dist/SKILLS.md +3 -3
- package/dist/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/dist/memory-routing/provider-loader.js +4 -0
- package/llms.txt +59 -0
- package/package.json +3 -2
- package/scripts/foundry/CHANGELOG.md +4 -0
- package/scripts/foundry/README.md +4 -0
- package/scripts/foundry/inspect.mjs +3 -0
- package/scripts/foundry/mint-suit.cjs +60 -2
- package/scripts/foundry/plant/skills/inspect/SKILL.md +1 -1
- package/scripts/foundry/validate-release-docs.mjs +69 -2
- package/scripts/foundry/version-manager.mjs +4 -0
- package/scripts/node/bridge-mcp-wiring.cjs +23 -0
- package/scripts/node/consumer-install-smoke.mjs +82 -14
- package/scripts/node/install-bridges.cjs +33 -7
- package/scripts/node/pack-tmp-suit-proof.mjs +242 -0
- package/scripts/node/postinstall.cjs +4 -1
- package/scripts/node/setup.cjs +4 -1
- package/scripts/node/wear-vendored-repertoire.cjs +120 -0
- package/src/integrations/openclaw/plugin/xray-pre-tool/package.json +1 -1
- package/xray/features.json +1 -1
package/.xray/features.json
CHANGED
package/AGENTS-consumer.md
CHANGED
|
@@ -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
|
|
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. `
|
|
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 +
|
|
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,8 @@ 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. |
|
|
55
|
+
| **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
|
|
53
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) |
|
|
54
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. |
|
|
55
58
|
| **3.3.1** | Orchestrator confidence gate wired into execution planning. |
|
|
@@ -60,7 +63,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
|
|
|
60
63
|
|
|
61
64
|
### Consolidations
|
|
62
65
|
|
|
63
|
-
- **One consumer install path** — `postinstall.cjs` → `installAllBridges()` replaces scattered per-platform setup.
|
|
66
|
+
- **One consumer install path** — `postinstall.cjs` → `installAllBridges()` replaces scattered per-platform setup. **4.0.9:** does not mill npm global prefix or `_npx`.
|
|
64
67
|
- **7-server MCP surface** — `.mcp.json` SSOT; Grok plugin and all bridges share `XRAY_MCP_SERVERS`.
|
|
65
68
|
- **Dev vs consumer AGENTS** — `AGENTS.md` (framework) vs `AGENTS-consumer.md` (copied to consumer projects on install).
|
|
66
69
|
- **Release pipeline** — `npm run release:patch|minor|major` → reconcile → gate → artifacts → tag → publish.
|
|
@@ -99,13 +102,16 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
|
|
|
99
102
|
|
|
100
103
|
On `npm install 0xray` in a consumer project, postinstall automatically:
|
|
101
104
|
|
|
102
|
-
1. Copies **`AGENTS-consumer.md` → `AGENTS.md
|
|
103
|
-
2.
|
|
104
|
-
3.
|
|
105
|
-
4.
|
|
106
|
-
5.
|
|
107
|
-
6.
|
|
108
|
-
7.
|
|
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.
|
|
109
115
|
|
|
110
116
|
## Seven MCP Servers (consumer)
|
|
111
117
|
|
|
@@ -197,9 +203,11 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
|
|
|
197
203
|
|-------|-----------------|
|
|
198
204
|
| Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
|
|
199
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). |
|
|
200
207
|
|
|
201
208
|
```bash
|
|
202
209
|
npm test
|
|
210
|
+
npm run pack:tmp-proof # pack → tmp fasten + hangar inspect
|
|
203
211
|
npm run release:gate # full release gate (before upload)
|
|
204
212
|
npm run release:npm # gate + prepare + npm publish --access public
|
|
205
213
|
```
|
package/SKILLS.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**4.0** —
|
|
3
|
+
**4.0** — a suit that survives the context window
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
|
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. `
|
|
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,22 @@ 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
|
+
|
|
53
|
+
## [4.0.9] - 2026-09-11
|
|
54
|
+
|
|
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.
|
|
56
|
+
|
|
57
|
+
- fix(foundry): do not mill npm global prefix or npx cache as a consumer (b08b19612)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
37
61
|
## [4.0.8] - 2026-09-11
|
|
38
62
|
|
|
39
63
|
### 🔄 Changes
|
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 +
|
|
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,8 @@ 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. |
|
|
55
|
+
| **4.0.9** | Mill target: postinstall does not mill npm global prefix or `_npx` as a consumer. Isolated HOME skips machine `~/.grok`. |
|
|
53
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) |
|
|
54
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. |
|
|
55
58
|
| **3.3.1** | Orchestrator confidence gate wired into execution planning. |
|
|
@@ -60,7 +63,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
|
|
|
60
63
|
|
|
61
64
|
### Consolidations
|
|
62
65
|
|
|
63
|
-
- **One consumer install path** — `postinstall.cjs` → `installAllBridges()` replaces scattered per-platform setup.
|
|
66
|
+
- **One consumer install path** — `postinstall.cjs` → `installAllBridges()` replaces scattered per-platform setup. **4.0.9:** does not mill npm global prefix or `_npx`.
|
|
64
67
|
- **7-server MCP surface** — `.mcp.json` SSOT; Grok plugin and all bridges share `XRAY_MCP_SERVERS`.
|
|
65
68
|
- **Dev vs consumer AGENTS** — `AGENTS.md` (framework) vs `AGENTS-consumer.md` (copied to consumer projects on install).
|
|
66
69
|
- **Release pipeline** — `npm run release:patch|minor|major` → reconcile → gate → artifacts → tag → publish.
|
|
@@ -99,13 +102,16 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
|
|
|
99
102
|
|
|
100
103
|
On `npm install 0xray` in a consumer project, postinstall automatically:
|
|
101
104
|
|
|
102
|
-
1. Copies **`AGENTS-consumer.md` → `AGENTS.md
|
|
103
|
-
2.
|
|
104
|
-
3.
|
|
105
|
-
4.
|
|
106
|
-
5.
|
|
107
|
-
6.
|
|
108
|
-
7.
|
|
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.
|
|
109
115
|
|
|
110
116
|
## Seven MCP Servers (consumer)
|
|
111
117
|
|
|
@@ -197,9 +203,11 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
|
|
|
197
203
|
|-------|-----------------|
|
|
198
204
|
| Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
|
|
199
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). |
|
|
200
207
|
|
|
201
208
|
```bash
|
|
202
209
|
npm test
|
|
210
|
+
npm run pack:tmp-proof # pack → tmp fasten + hangar inspect
|
|
203
211
|
npm run release:gate # full release gate (before upload)
|
|
204
212
|
npm run release:npm # gate + prepare + npm publish --access public
|
|
205
213
|
```
|
package/dist/SKILLS.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# 0xray Skills
|
|
2
2
|
|
|
3
|
-
**4.0** —
|
|
3
|
+
**4.0** — a suit that survives the context window
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -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.
|
|
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,10 @@ 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
|
+
|
|
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**.
|
|
61
|
+
|
|
58
62
|
## Publish this mill
|
|
59
63
|
|
|
60
64
|
From **this directory**, not the 0xray repo root:
|
|
@@ -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:
|
|
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
|
|
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.
|