@forgeax/game 0.3.6 → 0.3.8
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 +16 -130
- package/assets/extensions/asset3d/cli.mjs +2090 -0
- package/assets/extensions/asset3d/extension.json +7 -0
- package/assets/extensions/asset3d/skills/art-3d-asset-library/SKILL.md +28 -0
- package/assets/licenses/fflate.txt +21 -0
- package/assets/skills/forgeax-game/SKILL.md +4 -7
- package/dist/main.js +582 -2460
- package/docs/asset3d.md +43 -193
- package/docs/plugin-integration-standard.md +196 -0
- package/package.json +3 -9
- package/assets/asset3d/adapter/SKILL.md +0 -56
- package/assets/asset3d/provider/asset3d-search-provider-a274238712c1dced99e4aa3148a0d15904ce2a90-darwin-arm64.tar.gz +0 -0
- package/assets/asset3d/provider/asset3d-search-provider-a274238712c1dced99e4aa3148a0d15904ce2a90-linux-x64.tar.gz +0 -0
- package/assets/asset3d/schemas/receipt-1.0.0.json +0 -29
- package/assets/asset3d/schemas/result-1.0.0.json +0 -361
- package/assets/asset3d/vibegame-art-3d-asset-library-2.0.0.tgz +0 -0
- package/assets/asset3d/vibegame-art-3d-asset-library-2.0.0.tgz.sha256 +0 -1
- package/docs/release-0.3.0.md +0 -100
- package/docs/release-0.3.1.md +0 -107
- package/docs/release-0.3.2.md +0 -90
- package/docs/release-0.3.3.md +0 -73
- package/docs/release-0.3.4.md +0 -66
- package/docs/release-0.3.5.md +0 -32
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "forgeax.asset3d-search-result/1.0.0",
|
|
4
|
-
"title": "ForgeaX Asset3D Search Result",
|
|
5
|
-
"type": "object",
|
|
6
|
-
"additionalProperties": false,
|
|
7
|
-
"required": [
|
|
8
|
-
"schemaVersion",
|
|
9
|
-
"total",
|
|
10
|
-
"succeeded",
|
|
11
|
-
"failed",
|
|
12
|
-
"results"
|
|
13
|
-
],
|
|
14
|
-
"properties": {
|
|
15
|
-
"schemaVersion": {
|
|
16
|
-
"const": "forgeax.asset3d-search-result/1.0.0"
|
|
17
|
-
},
|
|
18
|
-
"total": {
|
|
19
|
-
"type": "integer",
|
|
20
|
-
"minimum": 1,
|
|
21
|
-
"maximum": 16
|
|
22
|
-
},
|
|
23
|
-
"succeeded": {
|
|
24
|
-
"type": "integer",
|
|
25
|
-
"minimum": 0,
|
|
26
|
-
"maximum": 16
|
|
27
|
-
},
|
|
28
|
-
"failed": {
|
|
29
|
-
"type": "integer",
|
|
30
|
-
"minimum": 0,
|
|
31
|
-
"maximum": 16
|
|
32
|
-
},
|
|
33
|
-
"results": {
|
|
34
|
-
"type": "array",
|
|
35
|
-
"minItems": 1,
|
|
36
|
-
"maxItems": 16,
|
|
37
|
-
"items": {
|
|
38
|
-
"oneOf": [
|
|
39
|
-
{
|
|
40
|
-
"$ref": "#/$defs/success"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"$ref": "#/$defs/packSuccess"
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"$ref": "#/$defs/error"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"receipt": {
|
|
52
|
-
"$ref": "receipt-1.0.0.json"
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
"allOf": [
|
|
56
|
-
{
|
|
57
|
-
"if": {
|
|
58
|
-
"properties": {
|
|
59
|
-
"succeeded": {
|
|
60
|
-
"minimum": 1
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
"then": {
|
|
65
|
-
"required": [
|
|
66
|
-
"receipt"
|
|
67
|
-
]
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
"$defs": {
|
|
72
|
-
"queryIndex": {
|
|
73
|
-
"type": "integer",
|
|
74
|
-
"minimum": 0,
|
|
75
|
-
"maximum": 15
|
|
76
|
-
},
|
|
77
|
-
"safeId": {
|
|
78
|
-
"type": "string",
|
|
79
|
-
"minLength": 1,
|
|
80
|
-
"maxLength": 128,
|
|
81
|
-
"pattern": "^[A-Za-z0-9._-]+$",
|
|
82
|
-
"not": {
|
|
83
|
-
"enum": [
|
|
84
|
-
".",
|
|
85
|
-
".."
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"sha256": {
|
|
90
|
-
"type": "string",
|
|
91
|
-
"pattern": "^[0-9a-f]{64}$"
|
|
92
|
-
},
|
|
93
|
-
"relativePath": {
|
|
94
|
-
"type": "string",
|
|
95
|
-
"minLength": 1,
|
|
96
|
-
"maxLength": 512,
|
|
97
|
-
"pattern": "^(?!/)(?!.*\\\\)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\u0000]+$"
|
|
98
|
-
},
|
|
99
|
-
"manifestEntry": {
|
|
100
|
-
"type": "object",
|
|
101
|
-
"additionalProperties": false,
|
|
102
|
-
"required": [
|
|
103
|
-
"path",
|
|
104
|
-
"role",
|
|
105
|
-
"bytes",
|
|
106
|
-
"sha256"
|
|
107
|
-
],
|
|
108
|
-
"properties": {
|
|
109
|
-
"path": {
|
|
110
|
-
"$ref": "#/$defs/relativePath"
|
|
111
|
-
},
|
|
112
|
-
"role": {
|
|
113
|
-
"enum": [
|
|
114
|
-
"primary-model",
|
|
115
|
-
"animation",
|
|
116
|
-
"auxiliary-model",
|
|
117
|
-
"texture",
|
|
118
|
-
"metadata"
|
|
119
|
-
]
|
|
120
|
-
},
|
|
121
|
-
"bytes": {
|
|
122
|
-
"type": "integer",
|
|
123
|
-
"minimum": 1,
|
|
124
|
-
"maximum": 134217728
|
|
125
|
-
},
|
|
126
|
-
"sha256": {
|
|
127
|
-
"$ref": "#/$defs/sha256"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
"success": {
|
|
132
|
-
"type": "object",
|
|
133
|
-
"additionalProperties": false,
|
|
134
|
-
"required": [
|
|
135
|
-
"status",
|
|
136
|
-
"queryIndex",
|
|
137
|
-
"query",
|
|
138
|
-
"provider",
|
|
139
|
-
"providerAssetId",
|
|
140
|
-
"assetName",
|
|
141
|
-
"deliveredFormat",
|
|
142
|
-
"sha256",
|
|
143
|
-
"bytes",
|
|
144
|
-
"primaryModel",
|
|
145
|
-
"manifest",
|
|
146
|
-
"originSetDigest"
|
|
147
|
-
],
|
|
148
|
-
"properties": {
|
|
149
|
-
"status": {
|
|
150
|
-
"const": "ok"
|
|
151
|
-
},
|
|
152
|
-
"queryIndex": {
|
|
153
|
-
"$ref": "#/$defs/queryIndex"
|
|
154
|
-
},
|
|
155
|
-
"query": {
|
|
156
|
-
"type": "string",
|
|
157
|
-
"minLength": 1,
|
|
158
|
-
"maxLength": 200
|
|
159
|
-
},
|
|
160
|
-
"provider": {
|
|
161
|
-
"const": "ea-3d"
|
|
162
|
-
},
|
|
163
|
-
"providerAssetId": {
|
|
164
|
-
"$ref": "#/$defs/safeId"
|
|
165
|
-
},
|
|
166
|
-
"assetName": {
|
|
167
|
-
"type": "string",
|
|
168
|
-
"minLength": 1,
|
|
169
|
-
"maxLength": 128
|
|
170
|
-
},
|
|
171
|
-
"deliveredFormat": {
|
|
172
|
-
"const": "glb"
|
|
173
|
-
},
|
|
174
|
-
"sha256": {
|
|
175
|
-
"$ref": "#/$defs/sha256"
|
|
176
|
-
},
|
|
177
|
-
"bytes": {
|
|
178
|
-
"type": "integer",
|
|
179
|
-
"minimum": 1,
|
|
180
|
-
"maximum": 268435456
|
|
181
|
-
},
|
|
182
|
-
"primaryModel": {
|
|
183
|
-
"$ref": "#/$defs/relativePath"
|
|
184
|
-
},
|
|
185
|
-
"manifest": {
|
|
186
|
-
"type": "array",
|
|
187
|
-
"minItems": 1,
|
|
188
|
-
"maxItems": 1024,
|
|
189
|
-
"items": {
|
|
190
|
-
"$ref": "#/$defs/manifestEntry"
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
"originSetDigest": {
|
|
194
|
-
"$ref": "#/$defs/sha256"
|
|
195
|
-
},
|
|
196
|
-
"downloaded_to": {
|
|
197
|
-
"type": "string",
|
|
198
|
-
"minLength": 1,
|
|
199
|
-
"maxLength": 512,
|
|
200
|
-
"pattern": "^(?!/)(?!.*\\\\)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\u0000]+$"
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
"error": {
|
|
205
|
-
"type": "object",
|
|
206
|
-
"additionalProperties": false,
|
|
207
|
-
"required": [
|
|
208
|
-
"status",
|
|
209
|
-
"queryIndex",
|
|
210
|
-
"query",
|
|
211
|
-
"code",
|
|
212
|
-
"retryable",
|
|
213
|
-
"message"
|
|
214
|
-
],
|
|
215
|
-
"properties": {
|
|
216
|
-
"status": {
|
|
217
|
-
"const": "error"
|
|
218
|
-
},
|
|
219
|
-
"queryIndex": {
|
|
220
|
-
"$ref": "#/$defs/queryIndex"
|
|
221
|
-
},
|
|
222
|
-
"query": {
|
|
223
|
-
"type": "string",
|
|
224
|
-
"minLength": 1,
|
|
225
|
-
"maxLength": 200
|
|
226
|
-
},
|
|
227
|
-
"code": {
|
|
228
|
-
"enum": [
|
|
229
|
-
"asset_not_found",
|
|
230
|
-
"asset_identity_missing",
|
|
231
|
-
"search_timeout",
|
|
232
|
-
"search_upstream_error",
|
|
233
|
-
"download_timeout",
|
|
234
|
-
"download_origin_rejected",
|
|
235
|
-
"download_too_large",
|
|
236
|
-
"archive_rejected",
|
|
237
|
-
"conversion_failed",
|
|
238
|
-
"digest_failed",
|
|
239
|
-
"batch_timeout",
|
|
240
|
-
"internal_error"
|
|
241
|
-
]
|
|
242
|
-
},
|
|
243
|
-
"retryable": {
|
|
244
|
-
"type": "boolean"
|
|
245
|
-
},
|
|
246
|
-
"message": {
|
|
247
|
-
"type": "string",
|
|
248
|
-
"minLength": 1,
|
|
249
|
-
"maxLength": 256,
|
|
250
|
-
"pattern": "^[^\\u0000-\\u001f\\u007f]+$"
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
"packManifestEntry": {
|
|
255
|
-
"type": "object",
|
|
256
|
-
"additionalProperties": false,
|
|
257
|
-
"required": [
|
|
258
|
-
"path",
|
|
259
|
-
"role",
|
|
260
|
-
"bytes",
|
|
261
|
-
"sha256"
|
|
262
|
-
],
|
|
263
|
-
"properties": {
|
|
264
|
-
"path": {
|
|
265
|
-
"$ref": "#/$defs/relativePath"
|
|
266
|
-
},
|
|
267
|
-
"role": {
|
|
268
|
-
"enum": [
|
|
269
|
-
"primary-pack",
|
|
270
|
-
"auxiliary-pack",
|
|
271
|
-
"animation",
|
|
272
|
-
"auxiliary-model",
|
|
273
|
-
"texture",
|
|
274
|
-
"metadata"
|
|
275
|
-
]
|
|
276
|
-
},
|
|
277
|
-
"bytes": {
|
|
278
|
-
"type": "integer",
|
|
279
|
-
"minimum": 1,
|
|
280
|
-
"maximum": 134217728
|
|
281
|
-
},
|
|
282
|
-
"sha256": {
|
|
283
|
-
"$ref": "#/$defs/sha256"
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
"packSuccess": {
|
|
288
|
-
"type": "object",
|
|
289
|
-
"additionalProperties": false,
|
|
290
|
-
"required": [
|
|
291
|
-
"status",
|
|
292
|
-
"queryIndex",
|
|
293
|
-
"query",
|
|
294
|
-
"provider",
|
|
295
|
-
"providerAssetId",
|
|
296
|
-
"assetName",
|
|
297
|
-
"deliveredFormat",
|
|
298
|
-
"sha256",
|
|
299
|
-
"bytes",
|
|
300
|
-
"primaryPack",
|
|
301
|
-
"manifest",
|
|
302
|
-
"originSetDigest"
|
|
303
|
-
],
|
|
304
|
-
"properties": {
|
|
305
|
-
"status": {
|
|
306
|
-
"const": "ok"
|
|
307
|
-
},
|
|
308
|
-
"queryIndex": {
|
|
309
|
-
"$ref": "#/$defs/queryIndex"
|
|
310
|
-
},
|
|
311
|
-
"query": {
|
|
312
|
-
"type": "string",
|
|
313
|
-
"minLength": 1,
|
|
314
|
-
"maxLength": 200
|
|
315
|
-
},
|
|
316
|
-
"provider": {
|
|
317
|
-
"const": "ea-3d"
|
|
318
|
-
},
|
|
319
|
-
"providerAssetId": {
|
|
320
|
-
"$ref": "#/$defs/safeId"
|
|
321
|
-
},
|
|
322
|
-
"assetName": {
|
|
323
|
-
"type": "string",
|
|
324
|
-
"minLength": 1,
|
|
325
|
-
"maxLength": 128
|
|
326
|
-
},
|
|
327
|
-
"deliveredFormat": {
|
|
328
|
-
"const": "pack"
|
|
329
|
-
},
|
|
330
|
-
"sha256": {
|
|
331
|
-
"$ref": "#/$defs/sha256"
|
|
332
|
-
},
|
|
333
|
-
"bytes": {
|
|
334
|
-
"type": "integer",
|
|
335
|
-
"minimum": 1,
|
|
336
|
-
"maximum": 268435456
|
|
337
|
-
},
|
|
338
|
-
"manifest": {
|
|
339
|
-
"type": "array",
|
|
340
|
-
"minItems": 1,
|
|
341
|
-
"maxItems": 1024,
|
|
342
|
-
"items": {
|
|
343
|
-
"$ref": "#/$defs/packManifestEntry"
|
|
344
|
-
}
|
|
345
|
-
},
|
|
346
|
-
"originSetDigest": {
|
|
347
|
-
"$ref": "#/$defs/sha256"
|
|
348
|
-
},
|
|
349
|
-
"downloaded_to": {
|
|
350
|
-
"type": "string",
|
|
351
|
-
"minLength": 1,
|
|
352
|
-
"maxLength": 512,
|
|
353
|
-
"pattern": "^(?!/)(?!.*\\\\)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*//)[^\\u0000]+$"
|
|
354
|
-
},
|
|
355
|
-
"primaryPack": {
|
|
356
|
-
"$ref": "#/$defs/relativePath"
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4937fe00e2b919319c70c82db53ebe359b275ed662c026153ecb97f7601262b4 vibegame-art-3d-asset-library-2.0.0.tgz
|
package/docs/release-0.3.0.md
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
# `@forgeax/game` 0.3.0 release guide
|
|
2
|
-
|
|
3
|
-
## User-visible contract
|
|
4
|
-
|
|
5
|
-
Version `0.3.0` makes the public onboarding flow exactly two commands:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npx -y @forgeax/game install --ide codex,cursor,claude
|
|
9
|
-
cd /path/to/a-genuinely-empty-directory
|
|
10
|
-
npx -y @forgeax/game init
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Restart or reload an Agent host when the install command asks. `init` creates the
|
|
14
|
-
Engine-owned standalone game in the current directory through the exact
|
|
15
|
-
`@forgeax/engine-sdk@0.1.7` carrier, then installs the same Game Plugin Skill/routing
|
|
16
|
-
contract for every selected host. Users do not run `forgeax new` separately.
|
|
17
|
-
|
|
18
|
-
Standalone author source is `<game-root>/src`. `.forgeax/games/<slug>` belongs to the
|
|
19
|
-
Studio-hosted project model and is not created by this package.
|
|
20
|
-
|
|
21
|
-
## Agent authoring and Preview
|
|
22
|
-
|
|
23
|
-
After `init`, ask the Agent to create a game and open Preview. A valid completion must
|
|
24
|
-
include all of the following:
|
|
25
|
-
|
|
26
|
-
- concrete `forge.json` id/name and a non-template package name;
|
|
27
|
-
- one coherent README with controls and no Empty package-output residue;
|
|
28
|
-
- a behavior test that imports and exercises a named game-specific state transition or
|
|
29
|
-
rule; renaming an Empty template test is insufficient;
|
|
30
|
-
- UI mounted under Engine Host `uiRoot` or `#game-ui`; direct `document.body` mutation
|
|
31
|
-
is rejected because the released standalone Host provides `#game-ui`;
|
|
32
|
-
- a successful `forgeax_run_current_game` response containing
|
|
33
|
-
`preview.status: ready`, the exact root, Engine release, build digest, Preview
|
|
34
|
-
instance ID, and the returned loopback URL.
|
|
35
|
-
|
|
36
|
-
An MCP error, a bare HTTP 200, a PID, an old build, or a localhost URL discovered by
|
|
37
|
-
shell probing is not Preview evidence. When another game owns the Preview port, stop
|
|
38
|
-
that exact verified game first:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
forgeax-game preview stop --target-dir /path/to/the-running-game
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
The internal 3D catalog is disabled by default and is not contacted by `install` or
|
|
45
|
-
ordinary `init`. A user opts one initialized project in with:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npx -y @forgeax/game asset3d enable
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The current `http://21.214.216.8:5180` catalog is network-gated and its body-free
|
|
52
|
-
access probe requires no API Key. In particular, `ANTHROPIC_API_KEY` is unrelated and
|
|
53
|
-
must not be supplied. If the service changes to `401`/`403` without publishing a
|
|
54
|
-
supported authentication contract, enablement fails closed. If
|
|
55
|
-
`asset3d-search/search_asset` is absent, the Agent must report
|
|
56
|
-
`BLOCKED(asset-library-tools-missing)`. Procedural meshes and `forgeax_generate_3d`
|
|
57
|
-
are not evidence that the reusable asset library is available.
|
|
58
|
-
|
|
59
|
-
## Upgrade and compatibility
|
|
60
|
-
|
|
61
|
-
- Node.js `>=22.13.0` is required.
|
|
62
|
-
- Existing exact Engine games can rerun `forgeax-game init` to refresh project Skill,
|
|
63
|
-
routing, and authoring baseline without recreating gameplay source.
|
|
64
|
-
- `install` and `init` are idempotent for already-current owned state.
|
|
65
|
-
- Unknown non-empty directories fail before carrier execution or workspace mutation.
|
|
66
|
-
- Engine-owned `forgeax-engine-*` Skills remain supplied by the selected Engine game;
|
|
67
|
-
this release changes only the Game Plugin-owned `forgeax-game` Skill and rule.
|
|
68
|
-
|
|
69
|
-
## Release verification
|
|
70
|
-
|
|
71
|
-
Before publishing, maintainers must run:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
bun run typecheck
|
|
75
|
-
bun test test/*.test.ts
|
|
76
|
-
bun run build
|
|
77
|
-
npm pack --json
|
|
78
|
-
bun scripts/check-package-artifact.ts /absolute/path/to/forgeax-game-0.3.0.tgz
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Then use the TGZ from a fresh consumer to verify:
|
|
82
|
-
|
|
83
|
-
1. blank-directory `init`;
|
|
84
|
-
2. identical Skill/rule projection for configured hosts;
|
|
85
|
-
3. changed gameplay with stale template identity/tests fails closed;
|
|
86
|
-
4. Engine build diagnostics before the terminal JSON frame are accepted;
|
|
87
|
-
5. duplicate JSON or post-frame diagnostics fail closed;
|
|
88
|
-
6. Preview failure is returned with MCP `isError: true`;
|
|
89
|
-
7. a different game's occupied port is never reported as the new game's Preview;
|
|
90
|
-
8. after stopping the old verified Preview, the new game returns its own exact
|
|
91
|
-
root/build/instance identity and loopback URL.
|
|
92
|
-
|
|
93
|
-
Publishing and npm dist-tag changes remain separate maintainer actions after the MR
|
|
94
|
-
and required checks are approved.
|
|
95
|
-
|
|
96
|
-
> [!CAUTION]
|
|
97
|
-
> Do not publish the npm dist-tag until every advertised host target has a Provider
|
|
98
|
-
> release artifact at the exact URL pinned by the package and its SHA-256 has been
|
|
99
|
-
> verified. The current source pins only `darwin-arm64`; other targets intentionally
|
|
100
|
-
> fail with `asset3d_provider_target_unreleased`.
|
package/docs/release-0.3.1.md
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# `@forgeax/game` 0.3.1 release guide
|
|
2
|
-
|
|
3
|
-
Version `0.3.1` keeps the two-command ForgeaX onboarding contract from `0.3.0` and
|
|
4
|
-
replaces the Asset3D default route with the documented AW `HybridSearch` contract.
|
|
5
|
-
Asset3D remains optional and disabled until a user explicitly enables it.
|
|
6
|
-
|
|
7
|
-
## User contract
|
|
8
|
-
|
|
9
|
-
The ordinary setup flow is unchanged:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx -y @forgeax/game install --ide codex,cursor,claude
|
|
13
|
-
cd /path/to/a-genuinely-empty-directory
|
|
14
|
-
npx -y @forgeax/game init
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Inside an initialized project, enable AW Asset3D separately:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npx -y @forgeax/game asset3d enable --base-url <aw-gateway-or-service-url>
|
|
21
|
-
npx -y @forgeax/game asset3d doctor --json
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
`--base-url` can be replaced by `FORGEAX_ASSET_LIBRARY_BASE_URL`. The first
|
|
25
|
-
interactive enable asks for the AW Sandbox Key with hidden input. CI or another
|
|
26
|
-
non-interactive host must inject `FORGEAX_ASSET3D_AW_SANDBOX_KEY` from its own secret
|
|
27
|
-
store.
|
|
28
|
-
|
|
29
|
-
> [!IMPORTANT]
|
|
30
|
-
> Do not place the key on the command line, in `.forgeax/mcp.json`, in a repository
|
|
31
|
-
> `.env`, or in a release artifact. `ANTHROPIC_API_KEY` is unrelated and is never
|
|
32
|
-
> accepted as an Asset3D credential.
|
|
33
|
-
|
|
34
|
-
## What changed
|
|
35
|
-
|
|
36
|
-
| Area | `0.3.0` | `0.3.1` |
|
|
37
|
-
|:--|:--|:--|
|
|
38
|
-
| Search adapter | Explicit internal directory catalog | AW `HybridSearch` through the packaged Provider |
|
|
39
|
-
| Authentication | Network gate, reported `authentication=none` | Required `X-Sandbox-Key`, validated before success |
|
|
40
|
-
| Service address | Compiled catalog origin | Explicit `--base-url` or environment configuration |
|
|
41
|
-
| Credential storage | None | User-level versioned JSON, directory `0700`, file `0600` |
|
|
42
|
-
| Project MCP config | Catalog origin and download origins | AW service URL, credential-file path, exact download origins |
|
|
43
|
-
| Failure behavior | Failed when an unknown auth contract appeared | Invalid key/network/address fails closed; new credential is rolled back |
|
|
44
|
-
| Provider delivery | Private external release URL | Digest-pinned archive embedded in the npm package |
|
|
45
|
-
|
|
46
|
-
The Provider accepts either an AW gateway root or the complete
|
|
47
|
-
`trpc.oasismetric.omcontentserver.http` service root and appends `HybridSearch`
|
|
48
|
-
exactly once. Its request includes `depot_name`, `asset_type=1`, text content type,
|
|
49
|
-
the query, `similarity_score`, and page size. Short-lived signed `res_url` values stay
|
|
50
|
-
inside the Provider; the access check exposes only their canonical origins for the
|
|
51
|
-
download sandbox.
|
|
52
|
-
|
|
53
|
-
## Security and artifact gates
|
|
54
|
-
|
|
55
|
-
Before publishing, the exact npm tarball and Provider archive must pass all of these
|
|
56
|
-
checks:
|
|
57
|
-
|
|
58
|
-
- [ ] TypeScript typecheck, full Game Plugin test suite, and build.
|
|
59
|
-
- [ ] Provider AW/catalog/security tests and Python compile check.
|
|
60
|
-
- [ ] Two independently built Provider archives are byte-identical.
|
|
61
|
-
- [ ] Provider verifier provisions the archive under its exact SHA-256 cache key.
|
|
62
|
-
- [ ] Real AW access check succeeds without printing the key or a signed URL.
|
|
63
|
-
- [ ] Real search/download and Engine import/readback succeed in a fresh project.
|
|
64
|
-
- [ ] Package artifact gate accepts only the declared files and immutable digests.
|
|
65
|
-
- [ ] Secret scan covers source diff, npm tarball, its embedded workflow TGZ and
|
|
66
|
-
Provider archive, manifests, and file names.
|
|
67
|
-
- [ ] Registry-downloaded npm tarball is byte-identical to the audited candidate.
|
|
68
|
-
|
|
69
|
-
> [!WARNING]
|
|
70
|
-
> A successful search or download is not Preview acceptance. Release evidence must
|
|
71
|
-
> report Provider access, download, Engine import/readback, and visible Play as
|
|
72
|
-
> separate gates. AW responses do not establish license or commercial-use clearance;
|
|
73
|
-
> those remain asset-release requirements.
|
|
74
|
-
|
|
75
|
-
## Provider inclusion
|
|
76
|
-
|
|
77
|
-
The pinned Darwin arm64 Provider identity for this release is:
|
|
78
|
-
|
|
79
|
-
```text
|
|
80
|
-
provider commit: c181c48fbffc933a7ce9a0836f7878ca5e6d77e1
|
|
81
|
-
archive sha256: c8d2afd7ba68ae4b3540c927a2ff7133a82ea90975d09cab1d10b003fbbdeed3
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
The exact archive is embedded beneath `assets/asset3d/provider/` in the npm tarball.
|
|
85
|
-
`asset3d enable` verifies this SHA-256 before provisioning and does not fetch Provider
|
|
86
|
-
code from GitHub, Gongfeng, or another repository. This makes cache-empty enablement
|
|
87
|
-
depend only on npm installation, local Python 3.11/3.12, the explicitly configured AW
|
|
88
|
-
service, and a valid user-supplied AW key.
|
|
89
|
-
|
|
90
|
-
The repository intentionally does not track the generated 17.2 MB Provider binary.
|
|
91
|
-
Release packaging injects the already audited archive through
|
|
92
|
-
`FORGEAX_ASSET3D_PROVIDER_BUNDLE`; the package artifact gate rejects any tarball that
|
|
93
|
-
omits it or contains different bytes.
|
|
94
|
-
|
|
95
|
-
## Maintainer commands
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
bun run typecheck
|
|
99
|
-
bun test test/*.test.ts
|
|
100
|
-
FORGEAX_ASSET3D_PROVIDER_BUNDLE=<audited-provider-archive> bun run build
|
|
101
|
-
FORGEAX_ASSET3D_PROVIDER_BUNDLE=<audited-provider-archive> \
|
|
102
|
-
npm pack --ignore-scripts --json --pack-destination <audited-directory>
|
|
103
|
-
bun scripts/check-package-artifact.ts <audited-directory>/forgeax-game-0.3.1.tgz
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Publishing, npm registry readback, and any merge request are separate irreversible or
|
|
107
|
-
remote-state steps. Record the exact Git heads and artifact digests at each boundary.
|
package/docs/release-0.3.2.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# `@forgeax/game` 0.3.2 release guide
|
|
2
|
-
|
|
3
|
-
Version `0.3.2` keeps Asset3D opt-in while making the documented AW production
|
|
4
|
-
service the default selected by `asset3d enable`. Test and pre-release environments
|
|
5
|
-
remain explicit overrides.
|
|
6
|
-
|
|
7
|
-
## User contract
|
|
8
|
-
|
|
9
|
-
The ordinary setup flow is unchanged:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npx -y @forgeax/game install --ide codex,cursor,claude
|
|
13
|
-
cd /path/to/a-genuinely-empty-directory
|
|
14
|
-
npx -y @forgeax/game init
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Inside an initialized project, enable production Asset3D without passing an address:
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
npx -y @forgeax/game asset3d enable
|
|
21
|
-
npx -y @forgeax/game asset3d doctor --json
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
> [!IMPORTANT]
|
|
25
|
-
> Asset3D remains disabled until the user runs `asset3d enable`. A no-argument enable
|
|
26
|
-
> selects production; it does not make `install` or `init` contact AW.
|
|
27
|
-
|
|
28
|
-
To select a non-production environment, pass its gateway or complete service URL:
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
npx -y @forgeax/game asset3d enable \
|
|
32
|
-
--base-url <test-gateway-or-service-url>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Environment selection
|
|
36
|
-
|
|
37
|
-
| Priority | Input | Selected environment |
|
|
38
|
-
|--:|:--|:--|
|
|
39
|
-
| 1 | `--base-url` | Explicit caller-selected service, normally test or pre-release |
|
|
40
|
-
| 2 | `FORGEAX_ASSET_LIBRARY_BASE_URL` | Automation or deployment override |
|
|
41
|
-
| 3 | No override | Documented AW production service |
|
|
42
|
-
|
|
43
|
-
The built-in production root is:
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
http://lb-pl74wsqg-5wi8ujmy1fq2746r.clb.usw-tencentclb.com:8008/trpc.oasismetric.omcontentserver.http
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Every selection is normalized so `HybridSearch` is appended exactly once. The
|
|
50
|
-
selected endpoint is validated by the packaged Provider before project configuration
|
|
51
|
-
is published.
|
|
52
|
-
|
|
53
|
-
## Authentication and safety
|
|
54
|
-
|
|
55
|
-
The first enable reads an AW Sandbox Key with hidden terminal input. Automation may
|
|
56
|
-
inject `FORGEAX_ASSET3D_AW_SANDBOX_KEY` from a secret store. The plugin never accepts
|
|
57
|
-
`ANTHROPIC_API_KEY` or another model credential as an Asset3D key.
|
|
58
|
-
|
|
59
|
-
The key remains in the private user credential file. Project MCP configuration
|
|
60
|
-
contains only the selected service URL and the credential-file path. Failed access
|
|
61
|
-
validation or installation rolls back a newly written credential and leaves the
|
|
62
|
-
project disabled.
|
|
63
|
-
|
|
64
|
-
## Release gates
|
|
65
|
-
|
|
66
|
-
- [ ] Default resolution selects the exact documented production root.
|
|
67
|
-
- [ ] Explicit CLI URL overrides the environment and production default.
|
|
68
|
-
- [ ] Environment URL overrides the production default when CLI input is absent.
|
|
69
|
-
- [ ] Real production access check succeeds with a valid AW Sandbox Key.
|
|
70
|
-
- [ ] Real production `search_asset` downloads a valid GLB.
|
|
71
|
-
- [ ] Game Plugin transaction validates and commits the asset through Engine.
|
|
72
|
-
- [ ] `doctor` reports the production Provider live in a fresh installed project.
|
|
73
|
-
- [ ] Exact npm tarball and embedded Provider pass the package and secret gates.
|
|
74
|
-
- [ ] Registry-downloaded tarball matches the audited candidate.
|
|
75
|
-
|
|
76
|
-
> [!WARNING]
|
|
77
|
-
> Provider access and Engine import do not prove visible Play acceptance. If a game
|
|
78
|
-
> consumes the imported asset, verify that game separately in its owned Preview and
|
|
79
|
-
> report the Play result as a distinct gate.
|
|
80
|
-
|
|
81
|
-
## Maintainer commands
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
bun run typecheck
|
|
85
|
-
bun test test/*.test.ts
|
|
86
|
-
FORGEAX_ASSET3D_PROVIDER_BUNDLE=<audited-provider-archive> bun run build
|
|
87
|
-
FORGEAX_ASSET3D_PROVIDER_BUNDLE=<audited-provider-archive> \
|
|
88
|
-
npm pack --ignore-scripts --json --pack-destination <audited-directory>
|
|
89
|
-
bun scripts/check-package-artifact.ts <audited-directory>/forgeax-game-0.3.2.tgz
|
|
90
|
-
```
|