@forgeax/game 0.2.4 → 0.3.1
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/README.md +199 -201
- package/assets/asset3d/provider/asset3d-search-provider-c181c48fbffc933a7ce9a0836f7878ca5e6d77e1-darwin-arm64.tar.gz +0 -0
- package/assets/asset3d/schemas/receipt-1.0.0.json +29 -0
- package/assets/asset3d/schemas/result-1.0.0.json +242 -0
- package/assets/asset3d/vibegame-art-3d-asset-library-2.0.0.tgz +0 -0
- package/assets/skills/forgeax-game/SKILL.md +80 -90
- package/dist/main.js +5333 -2115
- package/docs/asset3d.md +177 -0
- package/docs/release-0.3.0.md +100 -0
- package/docs/release-0.3.1.md +107 -0
- package/package.json +18 -7
- package/assets/skills/forgeax-game/references/engine-authoring-traps.md +0 -81
- package/assets/skills/forgeax-game/references/engine-project.md +0 -35
- package/assets/skills/forgeax-game/references/engine-skills.md +0 -24
- package/assets/skills/forgeax-game/references/validation.md +0 -26
package/README.md
CHANGED
|
@@ -1,252 +1,250 @@
|
|
|
1
1
|
# `@forgeax/game`
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@forgeax/game)
|
|
4
|
-
[](https://modelcontextprotocol.io/)
|
|
4
|
+
[](./package.json)
|
|
5
|
+
[](https://modelcontextprotocol.io/)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- `forgeax-game` with no arguments runs the stdio MCP server.
|
|
11
|
-
- `forgeax-game <command>` performs one-time setup and project operations.
|
|
12
|
-
|
|
13
|
-
The package has one exact runtime dependency, `@forgeax/game-runtime@0.3.33`, and
|
|
14
|
-
externalizes it from the Game bundle.
|
|
7
|
+
Two-command MCP/CLI onboarding for ForgeaX Engine games. The Game Plugin delegates
|
|
8
|
+
creation, build, and Preview to the exact Engine SDK instead of carrying a second
|
|
9
|
+
runtime.
|
|
15
10
|
|
|
16
11
|
> [!IMPORTANT]
|
|
17
|
-
> The
|
|
18
|
-
>
|
|
19
|
-
>
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
> The published package carries `forgeax-game` and scoped `game` binary aliases and resolves the exact
|
|
13
|
+
> `@forgeax/engine-sdk@0.1.7` and `pnpm@11.7.0` dependencies. It has no
|
|
14
|
+
> `@forgeax/game-runtime` dependency and no static Preview fallback.
|
|
15
|
+
|
|
16
|
+
## Supported flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart LR
|
|
20
|
+
INSTALL["npx -y @forgeax/game install --ide codex,cursor,claude"] --> HOSTS["Agent MCP entries"]
|
|
21
|
+
INIT["npx -y @forgeax/game init"] --> GAME["Engine game in current directory"]
|
|
22
|
+
CARRIER["Exact npm SDK carrier"] --> GAME
|
|
23
|
+
PLUGIN["@forgeax/game"] --> INSTALL
|
|
24
|
+
PLUGIN --> INIT
|
|
25
|
+
GAME --> BUILD["Exact Engine CLI build --json"]
|
|
26
|
+
BUILD --> PREVIEW["Exact Engine CLI preview --json"]
|
|
27
|
+
PREVIEW --> PROOF["Release-aware readiness proof"]
|
|
28
|
+
```
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
`install` verifies the unbound package identity before changing any Agent config.
|
|
31
|
+
`init` creates the default empty game in a genuinely blank current directory through
|
|
32
|
+
the exact Engine carrier, then binds routing and host skills. The connector never asks
|
|
33
|
+
users to download an SDK, unpack a carrier, run a third Engine command, or set a
|
|
34
|
+
mutable SDK path/environment override.
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
## Two-command onboarding
|
|
26
37
|
|
|
27
|
-
|
|
38
|
+
Requirements: Node.js `>=22.13.0` and a genuinely blank target directory for `init`.
|
|
39
|
+
The exact package and Engine carrier are resolved by npm and the Game Plugin.
|
|
28
40
|
|
|
29
41
|
```bash
|
|
30
42
|
npx -y @forgeax/game install --ide codex,cursor,claude
|
|
43
|
+
cd ./empty-game-directory
|
|
44
|
+
npx -y @forgeax/game init
|
|
31
45
|
```
|
|
32
46
|
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
The first command writes only the `forgeax` MCP member in the canonical Codex,
|
|
48
|
+
Cursor, and Claude Code user configs. It preserves unrelated bytes and values,
|
|
49
|
+
reports `CURRENT` on an idempotent rerun, and says which host must restart or reload.
|
|
50
|
+
The second command must run from the intended blank directory. It creates the Engine
|
|
51
|
+
game there, binds the exact release identity, and reports the canonical root and
|
|
52
|
+
host-skill result. Existing exact games are read back and bound without recreation;
|
|
53
|
+
unknown non-empty directories fail closed.
|
|
54
|
+
|
|
55
|
+
> [!NOTE]
|
|
56
|
+
> Asset3D is optional and **disabled by default**. The two commands above never contact
|
|
57
|
+
> the internal asset catalog, provision the bundled platform Provider, or add
|
|
58
|
+
> `asset3d-search` to the project. Enable it only in an already initialized project:
|
|
59
|
+
>
|
|
60
|
+
> ```bash
|
|
61
|
+
> npx -y @forgeax/game asset3d enable --base-url <aw-gateway-or-service-url>
|
|
62
|
+
> ```
|
|
63
|
+
>
|
|
64
|
+
> The first enable prompts for the AW Sandbox Key with hidden input, validates it
|
|
65
|
+
> through the packaged Provider, and stores it outside the project in a private
|
|
66
|
+
> user credential file.
|
|
67
|
+
|
|
68
|
+
## Agent completion contract
|
|
69
|
+
|
|
70
|
+
`init` records `.forgeax/game-authoring-baseline.json` before gameplay authoring. An
|
|
71
|
+
untouched Empty template remains runnable, but once gameplay or assets change the
|
|
72
|
+
connector refuses Preview until the Agent has replaced the template identity, kept a
|
|
73
|
+
single game README heading, removed the Empty package output name, updated gameplay
|
|
74
|
+
tests, and documented controls. A valid behavior test imports a named game-specific
|
|
75
|
+
state transition or rule and exercises it with an assertion; merely renaming an Empty
|
|
76
|
+
template test does not qualify. Standalone source remains in `<game-root>/src`; the
|
|
77
|
+
Studio-hosted `.forgeax/games/<slug>` layout is never created by this package.
|
|
78
|
+
|
|
79
|
+
Every supported host receives the same packaged `forgeax-game` Skill and routing rule.
|
|
80
|
+
They require UI to mount under the Engine Host `uiRoot` or `#game-ui`. The released
|
|
81
|
+
standalone Host provides `#game-ui`; direct `document.body` mutation is rejected.
|
|
82
|
+
An explicit request for an existing/library 3D asset requires the separately installed
|
|
83
|
+
project-local `asset3d-search/search_asset` tool. When it is absent, Agents must report
|
|
84
|
+
`BLOCKED(asset-library-tools-missing)` instead of relabeling procedural geometry or
|
|
85
|
+
generation as an asset-library result.
|
|
86
|
+
|
|
87
|
+
## MCP transports
|
|
88
|
+
|
|
89
|
+
Local Agent clients should use the default stdio transport installed by
|
|
90
|
+
`forgeax-game install`. For a shared local daemon, bind only to loopback:
|
|
35
91
|
|
|
36
92
|
```bash
|
|
37
|
-
|
|
93
|
+
forgeax-game mcp --transport http --host 127.0.0.1 --port 18940 --root "$PWD"
|
|
38
94
|
```
|
|
39
95
|
|
|
40
|
-
|
|
96
|
+
The Streamable HTTP endpoint is `http://127.0.0.1:18940/mcp`. A non-loopback
|
|
97
|
+
listener requires `FORGEAX_REMOTE_MCP_TOKEN`; `--require-auth` also enforces bearer
|
|
98
|
+
authentication on loopback. HTTP mode adds bounded game-file tools under the fixed
|
|
99
|
+
root and never accepts a caller-provided `target_dir`.
|
|
41
100
|
|
|
42
|
-
|
|
43
|
-
|
|
101
|
+
## MCP surface
|
|
102
|
+
|
|
103
|
+
| Surface | Kind | Contract |
|
|
104
|
+
|:--|:--|:--|
|
|
105
|
+
| `forgeax://status` | Resource | Read-only game, Engine release, DevKit, and Preview identity |
|
|
106
|
+
| `forgeax_status_lite` | Tool | Resource fallback for clients without MCP resource support |
|
|
107
|
+
| `forgeax_run_current_game` | Tool | Exact Engine build followed by start/reuse of Engine-owned Preview |
|
|
108
|
+
| `forgeax_generate_image` | Tool | Existing image-generation helper; outside the G0 Preview cutover |
|
|
109
|
+
| `forgeax_generate_3d` | Tool | Generation fallback used only for misses after the Asset3D search lifecycle |
|
|
110
|
+
| `forgeax_game_list_files` | HTTP tool | List non-hidden files below the selected game |
|
|
111
|
+
| `forgeax_game_read_file` | HTTP tool | Read one UTF-8 game file and return its SHA-256 |
|
|
112
|
+
| `forgeax_game_read_logs` | HTTP tool | Read a bounded Preview log tail for remote diagnosis |
|
|
113
|
+
| `forgeax_game_write_file` | HTTP tool | Atomically create or hash-guard replacement of a text file |
|
|
114
|
+
|
|
115
|
+
The build plus Preview-readiness deadline is 150 seconds. Preview readiness starts
|
|
116
|
+
with one bounded `CommandEnvelope@1.0.0`. Engines that expose
|
|
117
|
+
`GET /.forgeax/preview-health` are bearer-authenticated and must echo the canonical
|
|
118
|
+
root, exact release, build digest, and instance ID. Released Engine 0.1.7 emits the
|
|
119
|
+
documented minimal Preview envelope instead; the connector binds its already verified
|
|
120
|
+
release and fresh instance ID, then reads the served `forgeax-dist.json` and requires
|
|
121
|
+
its SHA-256 to equal the build it just produced.
|
|
122
|
+
|
|
123
|
+
Any build or Preview failure is an MCP `isError` result. Agents must not probe or
|
|
124
|
+
reuse an existing localhost port after a failed call: HTTP 200 is not ownership
|
|
125
|
+
evidence. Only a successful result containing `preview.status: ready`, `preview_url`,
|
|
126
|
+
`preview.root`, `preview.build_digest`, and `preview.instance_id` authorizes a Preview
|
|
127
|
+
claim. If another game owns the Engine port, stop that game explicitly or report the
|
|
128
|
+
blocker; never substitute its URL.
|
|
129
|
+
|
|
130
|
+
## Preview ownership
|
|
131
|
+
|
|
132
|
+
Per game, connector-owned state lives at:
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
<project>/.forgeax/run/engine-preview/<sha256(canonical-game-root)>/
|
|
136
|
+
├── lock
|
|
137
|
+
├── state.json
|
|
138
|
+
├── stdout.log
|
|
139
|
+
└── stderr.log
|
|
44
140
|
```
|
|
45
141
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
142
|
+
The directory is `0700`; files are `0600`; logs rotate at 8 MiB and keep two prior
|
|
143
|
+
files. Reuse requires the build/Engine/instance identity, unchanged process-start
|
|
144
|
+
identity, and either authenticated health or the exact served dist digest after MCP
|
|
145
|
+
restart. PID alone never authorizes a signal.
|
|
50
146
|
|
|
51
147
|
```bash
|
|
52
|
-
|
|
148
|
+
forgeax-game preview stop --target-dir ./my-game
|
|
149
|
+
forgeax-game preview stop --target-dir ./my-game --json
|
|
53
150
|
```
|
|
54
151
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
with the `.bak.latest` suffix.
|
|
152
|
+
Stop and cancellation signal only the verified owning Preview process, with a bounded
|
|
153
|
+
TERM/KILL cleanup. Dead state is removed under the lock; a matching orphan is adopted;
|
|
154
|
+
a live unverifiable PID fails closed as `preview_ownership_unverified`.
|
|
59
155
|
|
|
60
|
-
|
|
156
|
+
## Asset3D installation and transaction
|
|
61
157
|
|
|
62
|
-
|
|
158
|
+
Asset3D is an opt-in, project-local MCP integration for AW HybridSearch. Run it only
|
|
159
|
+
after `init`, while connected to the internal network, using the gateway or service
|
|
160
|
+
URL supplied by the asset-platform administrator:
|
|
63
161
|
|
|
64
162
|
```bash
|
|
65
|
-
|
|
66
|
-
|
|
163
|
+
npx -y @forgeax/game asset3d enable --base-url <aw-gateway-or-service-url>
|
|
164
|
+
forgeax-game asset3d doctor --json
|
|
67
165
|
```
|
|
68
166
|
|
|
69
|
-
`
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
167
|
+
`--base-url` accepts either the gateway root or the full
|
|
168
|
+
`trpc.oasismetric.omcontentserver.http` service root. It can instead be supplied by
|
|
169
|
+
`FORGEAX_ASSET_LIBRARY_BASE_URL`. On first use, `enable` reads the key with hidden TTY
|
|
170
|
+
input. Non-interactive automation must inject `FORGEAX_ASSET3D_AW_SANDBOX_KEY` from
|
|
171
|
+
its secret store. The key is validated by the Provider against `HybridSearch` before
|
|
172
|
+
the command reports success.
|
|
173
|
+
|
|
174
|
+
The validated key is stored in
|
|
175
|
+
`~/.forgeax/credentials/asset3d-aw.json` as an owned, non-symlink `0600` file. Project
|
|
176
|
+
`.forgeax/mcp.json` contains only the AW service URL and the credential-file path; it
|
|
177
|
+
never contains the key or a signed asset URL. The Provider access check returns only
|
|
178
|
+
the exact download origins required by the sandbox. Failed validation or installation
|
|
179
|
+
rolls back a newly written credential.
|
|
180
|
+
|
|
181
|
+
The npm package carries the digest-pinned Darwin arm64 Provider archive as an inert
|
|
182
|
+
asset. `enable` reuses the exact verified Provider from
|
|
183
|
+
`~/.forgeax/providers/asset3d-search/<sha256>/`, or provisions that packaged archive
|
|
184
|
+
when the cache is absent. It never downloads Provider code from GitHub or another
|
|
185
|
+
repository. Only after Provider verification and its MCP handshake succeed does it merge the `forgeax` and
|
|
186
|
+
`asset3d-search` entries into `.forgeax/mcp.json` and project the approved Asset3D
|
|
187
|
+
workflow into the Agent hosts selected during `install`.
|
|
73
188
|
|
|
74
189
|
> [!IMPORTANT]
|
|
75
|
-
>
|
|
76
|
-
> `
|
|
77
|
-
>
|
|
190
|
+
> Asset3D uses the AW-specific `X-Sandbox-Key` contract. It never reads
|
|
191
|
+
> `ANTHROPIC_API_KEY` or another model-provider key. Do not pass keys as command-line
|
|
192
|
+
> arguments, commit the user credential file, or copy a key into project MCP config.
|
|
78
193
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
For a project that was initialized previously, use `update` instead of running the
|
|
82
|
-
same `init` again:
|
|
194
|
+
The transaction commands are normally driven by the installed Agent workflow:
|
|
83
195
|
|
|
84
196
|
```bash
|
|
85
|
-
cd /path/to/existing-forgeax-project
|
|
86
|
-
npx -y @forgeax/game update
|
|
87
|
-
```
|
|
88
197
|
|
|
89
|
-
|
|
198
|
+
forgeax-game asset3d begin --query "weathered oak tree" --json
|
|
199
|
+
# Call the configured asset3d-search/search_asset MCP tool with the returned output_dir.
|
|
200
|
+
# Pass its complete TextContent JSON to commit on stdin:
|
|
201
|
+
forgeax-game asset3d commit --execution <uuid> --provider-result-stdin --json < result.json
|
|
90
202
|
|
|
91
|
-
|
|
92
|
-
|
|
203
|
+
forgeax-game asset3d doctor --json
|
|
204
|
+
forgeax-game asset3d uninstall
|
|
93
205
|
```
|
|
94
206
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
run `/mcp status` to confirm `forgeax` is connected.
|
|
207
|
+
<details>
|
|
208
|
+
<summary>Maintainer-only local bundle installation</summary>
|
|
98
209
|
|
|
99
|
-
|
|
210
|
+
The low-level command remains available for producing and validating platform bundle
|
|
211
|
+
artifacts. It is not the user onboarding path.
|
|
100
212
|
|
|
101
213
|
```bash
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|:--|:--|
|
|
109
|
-
| `install [--ide a,b] [--local]` | Verify the MCP launch command, then merge client configuration |
|
|
110
|
-
| `init [--game <slug>] [--ide ...]` | Create a project/game, install routing rules, and materialize the bundled Engine SDK |
|
|
111
|
-
| `use <slug>` | Activate an existing game through the server |
|
|
112
|
-
| `doctor` | Check Node, project binding, service tiers, and client configuration |
|
|
113
|
-
| `devkit install` | Install the game-development Skill and host rules; use `forgeax-install` only when available |
|
|
114
|
-
| `agents update` | Insert or refresh only the managed ForgeaX block in `AGENTS.md` |
|
|
115
|
-
| `update [--ide ...]` | Verify the published launch command, refresh installed client entries, and update project routing rules |
|
|
116
|
-
|
|
117
|
-
`init` can create the minimal `.forgeax/` instance and game in an ordinary empty
|
|
118
|
-
directory. It also installs `.forgeax/engine-sdk/`, containing declarations, API
|
|
119
|
-
metadata, both canonical templates (`game-default` and `game-empty`), authoring
|
|
120
|
-
skills, and the Engine implementation source generated from the same Engine pin as the
|
|
121
|
-
selected Runtime package. `use`, `devkit install`, and `agents update` operate on the nearest
|
|
122
|
-
project root. Runtime extraction and startup are automatic; a running server is not
|
|
123
|
-
an `init` prerequisite.
|
|
124
|
-
|
|
125
|
-
## MCP surface
|
|
126
|
-
|
|
127
|
-
The server intentionally exposes only high-frequency development-loop operations.
|
|
128
|
-
Installation and project mutation stay in the CLI so models do not reconsider
|
|
129
|
-
one-time actions on every turn.
|
|
130
|
-
|
|
131
|
-
| Entry | Kind | Use |
|
|
132
|
-
|:--|:-:|:--|
|
|
133
|
-
| `forgeax://status` | Resource | Preferred read-only project, service, and next-action status |
|
|
134
|
-
| `forgeax_status_lite` | Tool | Status fallback for clients without MCP resource support |
|
|
135
|
-
| `forgeax_run_current_game` | Tool | Build or reuse the active game's static preview, return its URL and health identity, and identify the runtime log file |
|
|
136
|
-
| `forgeax_generate_image` | Tool | Text-to-image, or image-to-image with a local `image`; saves a PNG/JPG into the active game's `assets/` and returns its path |
|
|
137
|
-
| `forgeax_generate_3d` | Tool | Text-to-3D (`prompt`) or image-to-3D (public https `image` URL); runs the async job to completion and saves a `.glb` into `assets/` |
|
|
138
|
-
|
|
139
|
-
When this plugin cold-starts the managed Runtime, runtime output is written to:
|
|
140
|
-
|
|
141
|
-
```text
|
|
142
|
-
<project>/.forgeax/logs/runtime/runtime.log
|
|
214
|
+
forgeax-game asset3d install \
|
|
215
|
+
--provider-bundle ./asset3d-search-provider-<commit>-<os>-<arch>.tar.gz \
|
|
216
|
+
--sha256 <archive-sha256> \
|
|
217
|
+
--download-origin https://<approved-download-host>:443 \
|
|
218
|
+
--aw-base-url <aw-gateway-or-service-url> \
|
|
219
|
+
--aw-credential-file /absolute/path/to/private-credential.json
|
|
143
220
|
```
|
|
144
221
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
The run result reports the Runtime version, instance identity, selected ports, and
|
|
148
|
-
whether the log belongs to the current plugin-owned process; status reports the
|
|
149
|
-
cached Runtime installation state.
|
|
150
|
-
|
|
151
|
-
Runtime artifacts are cached per platform and version under `~/.forgeax/runtimes/`.
|
|
152
|
-
The selected `@forgeax/game-runtime-<platform>-<arch>` package carries the archive,
|
|
153
|
-
so first run verifies and extracts npm-installed bytes without another download.
|
|
154
|
-
The cache uses a checksum-verified ready
|
|
155
|
-
marker and keeps the previous version until a new version has started successfully.
|
|
156
|
-
`forgeax_run_current_game` reports `runtime.version`, `engine_sdk.commit`, and a
|
|
157
|
-
combined `engine.identity`; those must match before preview acceptance.
|
|
158
|
-
|
|
159
|
-
The game SDK is available at `.forgeax/engine-sdk/`. Use its declaration files and
|
|
160
|
-
`templates/game-default` or `templates/game-empty` before writing imports. If an API
|
|
161
|
-
is absent, inspect `source/<package>/src/` instead of guessing.
|
|
162
|
-
|
|
163
|
-
### Asset generation (LiteLLM)
|
|
164
|
-
|
|
165
|
-
`forgeax_generate_image` and `forgeax_generate_3d` produce art and 3D assets through a
|
|
166
|
-
LiteLLM gateway and save them into the active game's `assets/` directory, returning the
|
|
167
|
-
project-relative path to reference from game code. Configure via environment:
|
|
168
|
-
|
|
169
|
-
| Variable | Required | Default |
|
|
170
|
-
|:--|:-:|:--|
|
|
171
|
-
| `FORGEAX_LITELLM_API_KEY` | yes | — (secret; never commit it) |
|
|
172
|
-
| `FORGEAX_LITELLM_BASE_URL` | no | the shared ForgeaX gateway |
|
|
173
|
-
| `FORGEAX_GEN_IMAGE_MODEL` | no | `gemini-3-pro-image` |
|
|
174
|
-
| `FORGEAX_GEN_3D_TEXT_MODEL` | no | `tripo-3d-text` |
|
|
175
|
-
| `FORGEAX_GEN_3D_IMAGE_MODEL` | no | `tripo-3d-image` |
|
|
176
|
-
| `FORGEAX_COS_BUCKET` / `FORGEAX_COS_REGION` | for local image-to-3D | — |
|
|
177
|
-
| `FORGEAX_COS_SECRET_ID` / `FORGEAX_COS_SECRET_KEY` | for local image-to-3D | — (secret; never commit) |
|
|
178
|
-
|
|
179
|
-
- **Text-to-image / image-to-image**: `forgeax_generate_image({ prompt, image? })`. A
|
|
180
|
-
local `image` path switches to editing that image with the prompt.
|
|
181
|
-
- **Text-to-3D**: `forgeax_generate_3d({ prompt })` — submits, polls to completion
|
|
182
|
-
(~1–2 min), and downloads the `.glb`.
|
|
183
|
-
- **Image-to-3D**: `forgeax_generate_3d({ image })`. `image` is a **public https URL**,
|
|
184
|
-
or a **local file path** when COS is configured — the file is uploaded to the COS
|
|
185
|
-
bucket and passed to the backend as a short-lived presigned URL (the private bucket
|
|
186
|
-
stays private; the URL expires within the hour). This makes the "generate a concept
|
|
187
|
-
image, then turn it into a mesh" flow work end to end. Without COS, only a public URL
|
|
188
|
-
is accepted, because the 3D endpoint rejects local paths and inline base64.
|
|
189
|
-
|
|
190
|
-
## Supported clients
|
|
191
|
-
|
|
192
|
-
| Client ID | Config path | Scope |
|
|
193
|
-
|:--|:--|:-:|
|
|
194
|
-
| `codex` | `~/.codex/config.toml` | User |
|
|
195
|
-
| `claude` | `~/.claude.json` | User |
|
|
196
|
-
| `cursor` | `~/.cursor/mcp.json` | User |
|
|
197
|
-
| `trae` | `<project>/.trae/mcp.json` | Project |
|
|
198
|
-
| `codebuddy` / `workbuddy` | `~/.codebuddy/.mcp.json` | User |
|
|
199
|
-
| `windsurf` | `~/.codeium/windsurf/mcp_config.json` | User |
|
|
200
|
-
| `vscode` | `<project>/.vscode/mcp.json` | Project |
|
|
201
|
-
| `zcode` | `~/.zcode/cli/config.json` | User |
|
|
202
|
-
| `opencode` | `~/.config/opencode/opencode.json` | User |
|
|
203
|
-
|
|
204
|
-
> [!NOTE]
|
|
205
|
-
> `workbuddy` is an accepted installer alias. Both names target CodeBuddy's current
|
|
206
|
-
> MCP file, so selecting both does not create duplicate entries.
|
|
207
|
-
>
|
|
208
|
-
> The OpenCode entry follows its stable configuration schema (`mcp.<name>`,
|
|
209
|
-
> `type: "local"`, and an argv-style `command`). It is process-verified with
|
|
210
|
-
> OpenCode 1.17.9: `opencode mcp list` starts this package and reports
|
|
211
|
-
> `forgeax connected`. If a future client release changes the schema, `doctor`
|
|
212
|
-
> will still report whether the configured entry matches what this package writes.
|
|
213
|
-
>
|
|
214
|
-
> ZCode uses its native `mcp.servers.<name>` user configuration rather than the
|
|
215
|
-
> `.agents/mcp.json` fallback. Project Skills are installed under `.zcode/skills`;
|
|
216
|
-
> start a new ZCode session and run `/mcp status` after installation.
|
|
222
|
+
`--catalog-base-url` remains an explicit compatibility-only adapter for the retired
|
|
223
|
+
directory service; normal users should not select it.
|
|
217
224
|
|
|
218
|
-
|
|
225
|
+
</details>
|
|
219
226
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
227
|
+
Provider output is checked at a 1 MiB stdin boundary. The transaction ignores
|
|
228
|
+
`downloaded_to`, accepts only declared relative manifest paths contained by its
|
|
229
|
+
private quarantine, and publishes the whole asset directory under
|
|
230
|
+
`assets/3d/ea-3d/<providerAssetId>`. It invokes only the exact released Engine CLI
|
|
231
|
+
with `asset add ... --reimport-policy semantic-only --json`, then requires
|
|
232
|
+
verify/list/inspect readback before committing provenance. Same-digest content is
|
|
233
|
+
reused only after live file and catalog checks; changed content requires `--refresh`
|
|
234
|
+
and rolls back the entire prior directory on failure.
|
|
225
235
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
checkout is optional compatibility support, not a user prerequisite. Inside a ForgeaX
|
|
229
|
-
project, `install`, `init`, and `update` refresh it automatically. It can also be
|
|
230
|
-
installed explicitly:
|
|
236
|
+
See [docs/asset3d.md](docs/asset3d.md) for the platform, origin, ownership, recovery,
|
|
237
|
+
and evidence boundaries.
|
|
231
238
|
|
|
232
|
-
|
|
233
|
-
npx -y @forgeax/game devkit install
|
|
234
|
-
```
|
|
239
|
+
## Scope boundary
|
|
235
240
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
## Develop
|
|
243
|
-
|
|
244
|
-
```bash
|
|
245
|
-
bun run typecheck
|
|
246
|
-
bun test
|
|
247
|
-
bun run build
|
|
248
|
-
node dist/main.js help
|
|
249
|
-
```
|
|
241
|
+
> [!WARNING]
|
|
242
|
+
> G0/A0 packed and controlled-fixture evidence is supporting evidence only. It does
|
|
243
|
+
> not prove Studio, Editor, RuntimeInstance, host permission parity, visible Play, or
|
|
244
|
+
> real EA/provider access. Those remain separate downstream integration and terminal
|
|
245
|
+
> acceptance gates.
|
|
250
246
|
|
|
251
|
-
|
|
252
|
-
|
|
247
|
+
See [docs/runtime.md](docs/runtime.md) for the exact artifact and lifecycle contract.
|
|
248
|
+
For the current Asset3D authentication update and maintainer publish checklist, see
|
|
249
|
+
[docs/release-0.3.1.md](docs/release-0.3.1.md). The original two-command onboarding
|
|
250
|
+
contract remains documented in [docs/release-0.3.0.md](docs/release-0.3.0.md).
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "forgeax.asset3d-search-receipt/1.0.0",
|
|
4
|
+
"title": "ForgeaX Asset3D Search Receipt",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"provider",
|
|
10
|
+
"providerCommit",
|
|
11
|
+
"originSetDigest"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"schemaVersion": {
|
|
15
|
+
"const": "forgeax.asset3d-search-receipt/1.0.0"
|
|
16
|
+
},
|
|
17
|
+
"provider": {
|
|
18
|
+
"const": "ea-3d"
|
|
19
|
+
},
|
|
20
|
+
"providerCommit": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^[0-9a-f]{40}$"
|
|
23
|
+
},
|
|
24
|
+
"originSetDigest": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|