@forgeax-extension/character-3d 0.1.2

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.
Files changed (110) hide show
  1. package/SOURCE_PROVENANCE.md +8 -0
  2. package/dist/assets/index-CIx3aXo1.js +4336 -0
  3. package/dist/assets/index-CIx3aXo1.js.map +1 -0
  4. package/dist/assets/index-CmhOHLEB.css +1 -0
  5. package/dist/hdr/README.md +28 -0
  6. package/dist/hdr/presets.json +8 -0
  7. package/dist/index.html +13 -0
  8. package/forgeax-extension.json +428 -0
  9. package/marketplace-card.json +56 -0
  10. package/package.json +59 -0
  11. package/packages/external-asset-meta/package.json +24 -0
  12. package/packages/external-asset-meta/src/cook.test.ts +211 -0
  13. package/packages/external-asset-meta/src/cook.ts +188 -0
  14. package/packages/external-asset-meta/src/draco3dgltf.d.ts +11 -0
  15. package/packages/external-asset-meta/src/index.ts +18 -0
  16. package/packages/external-asset-meta/src/normalize.test.ts +36 -0
  17. package/packages/external-asset-meta/src/normalize.ts +101 -0
  18. package/packages/external-asset-meta/src/types.ts +82 -0
  19. package/schemas/adopt-playable-character.args.json +26 -0
  20. package/schemas/adopt-playable-character.returns.json +31 -0
  21. package/schemas/apply-motion.args.json +47 -0
  22. package/schemas/apply-motion.returns.json +23 -0
  23. package/schemas/auto-rig.args.json +35 -0
  24. package/schemas/auto-rig.returns.json +23 -0
  25. package/schemas/delete-asset.args.json +18 -0
  26. package/schemas/delete-asset.returns.json +18 -0
  27. package/schemas/engine-import-status.args.json +18 -0
  28. package/schemas/engine-import-status.returns.json +50 -0
  29. package/schemas/export-playable-character.args.json +21 -0
  30. package/schemas/export-playable-character.returns.json +47 -0
  31. package/schemas/gen3d-asset-manifest.json +281 -0
  32. package/schemas/generate-meshy-text-mock.args.json +42 -0
  33. package/schemas/generate-meshy-text-mock.returns.json +301 -0
  34. package/schemas/get-credentials.args.json +7 -0
  35. package/schemas/get-credentials.returns.json +45 -0
  36. package/schemas/get-playable-profile.args.json +11 -0
  37. package/schemas/get-playable-profile.returns.json +188 -0
  38. package/schemas/image-to-3d.args.json +47 -0
  39. package/schemas/image-to-3d.returns.json +306 -0
  40. package/schemas/import-to-engine.args.json +18 -0
  41. package/schemas/import-to-engine.returns.json +35 -0
  42. package/schemas/list-assets.args.json +22 -0
  43. package/schemas/list-assets.returns.json +296 -0
  44. package/schemas/list-motions.args.json +29 -0
  45. package/schemas/list-motions.returns.json +41 -0
  46. package/schemas/pose-standardization.args.json +28 -0
  47. package/schemas/pose-standardization.returns.json +29 -0
  48. package/schemas/provider-status.args.json +7 -0
  49. package/schemas/provider-status.returns.json +70 -0
  50. package/schemas/refine-mesh.args.json +33 -0
  51. package/schemas/refine-mesh.returns.json +306 -0
  52. package/schemas/rename-asset.args.json +22 -0
  53. package/schemas/rename-asset.returns.json +14 -0
  54. package/schemas/retopo-lowpoly.args.json +34 -0
  55. package/schemas/retopo-lowpoly.returns.json +24 -0
  56. package/schemas/score-quality.args.json +36 -0
  57. package/schemas/score-quality.returns.json +12 -0
  58. package/schemas/set-credentials.args.json +32 -0
  59. package/schemas/set-credentials.returns.json +45 -0
  60. package/schemas/set-playable-motion-mapping.args.json +25 -0
  61. package/schemas/set-playable-motion-mapping.returns.json +33 -0
  62. package/schemas/set-playable-profile.args.json +32 -0
  63. package/schemas/set-playable-profile.returns.json +67 -0
  64. package/schemas/text-to-3d.args.json +51 -0
  65. package/schemas/text-to-3d.returns.json +306 -0
  66. package/schemas/upload-image.args.json +19 -0
  67. package/schemas/upload-image.returns.json +21 -0
  68. package/schemas/upload-video.args.json +14 -0
  69. package/schemas/upload-video.returns.json +14 -0
  70. package/schemas/views-to-3d.args.json +58 -0
  71. package/schemas/views-to-3d.returns.json +306 -0
  72. package/server/adopt-playable-character.ts +291 -0
  73. package/server/asset-storage.ts +136 -0
  74. package/server/asset-upload.ts +123 -0
  75. package/server/audit.ts +58 -0
  76. package/server/cache.ts +75 -0
  77. package/server/cos-uploader.ts +141 -0
  78. package/server/credentials-store.ts +186 -0
  79. package/server/engine-import.ts +238 -0
  80. package/server/env.ts +287 -0
  81. package/server/export-playable-character.ts +364 -0
  82. package/server/generate.ts +89 -0
  83. package/server/merge-playable-character.ts +259 -0
  84. package/server/motion-catalog.ts +137 -0
  85. package/server/per-game-store.ts +1016 -0
  86. package/server/providers/gateway-client.ts +171 -0
  87. package/server/providers/gateway-data.ts +182 -0
  88. package/server/providers/gateway-models.ts +49 -0
  89. package/server/providers/hunyuan-rest.ts +317 -0
  90. package/server/providers/hunyuan-workflow.ts +225 -0
  91. package/server/providers/meshy-direct-client.ts +223 -0
  92. package/server/providers/meshy.ts +548 -0
  93. package/server/providers/rodin-gateway.ts +193 -0
  94. package/server/providers/rodin.ts +253 -0
  95. package/server/providers/visvise.ts +329 -0
  96. package/server/rate-guard.ts +29 -0
  97. package/server/tool-handlers.ts +2193 -0
  98. package/shared/catalog.ts +307 -0
  99. package/shared/manifest.ts +378 -0
  100. package/shared/meshy-actions.ts +690 -0
  101. package/shared/playable-preview-url.test.ts +14 -0
  102. package/shared/playable-preview-url.ts +13 -0
  103. package/shared/playable-profile.test.ts +127 -0
  104. package/shared/playable-profile.ts +171 -0
  105. package/shared/provider-params.test.ts +172 -0
  106. package/shared/provider-params.ts +389 -0
  107. package/shared/quality/heuristics.test.ts +84 -0
  108. package/shared/quality/heuristics.ts +100 -0
  109. package/shared/rodin-image.test.ts +51 -0
  110. package/shared/rodin-image.ts +125 -0
@@ -0,0 +1,188 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:get-playable-profile returns",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": { "const": true },
7
+ "presets": {
8
+ "type": "array",
9
+ "items": {
10
+ "type": "object",
11
+ "properties": {
12
+ "profileId": { "type": "string" },
13
+ "displayName": { "type": "string" },
14
+ "slots": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "properties": {
19
+ "slotId": { "type": "string" },
20
+ "displayName": { "type": "string" },
21
+ "required": { "type": "boolean" },
22
+ "playbackMode": { "enum": ["loop", "once", "freeze_frame"] },
23
+ "speed": { "type": "number", "exclusiveMinimum": 0 },
24
+ "matchKeywords": { "type": "array", "items": { "type": "string" } },
25
+ "rootMotion": { "enum": ["preserve", "remove_xz", "remove_xyz"] }
26
+ },
27
+ "required": ["slotId", "displayName", "required", "playbackMode", "speed", "matchKeywords", "rootMotion"],
28
+ "additionalProperties": false
29
+ }
30
+ }
31
+ },
32
+ "required": ["profileId", "displayName", "slots"],
33
+ "additionalProperties": false
34
+ }
35
+ },
36
+ "gameProfile": {
37
+ "type": ["object", "null"],
38
+ "properties": {
39
+ "schemaVersion": { "const": 1 },
40
+ "profileId": { "type": "string" },
41
+ "profileVersion": { "type": "integer", "minimum": 1 },
42
+ "displayName": { "type": "string" },
43
+ "slots": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "object",
47
+ "properties": {
48
+ "slotId": { "type": "string" },
49
+ "displayName": { "type": "string" },
50
+ "required": { "type": "boolean" },
51
+ "playbackMode": { "enum": ["loop", "once", "freeze_frame"] },
52
+ "speed": { "type": "number", "exclusiveMinimum": 0 },
53
+ "matchKeywords": { "type": "array", "items": { "type": "string" } },
54
+ "rootMotion": { "enum": ["preserve", "remove_xz", "remove_xyz"] }
55
+ },
56
+ "required": ["slotId", "displayName", "required", "playbackMode", "speed", "matchKeywords", "rootMotion"],
57
+ "additionalProperties": false
58
+ }
59
+ },
60
+ "updatedAt": { "type": "string" }
61
+ },
62
+ "required": ["schemaVersion", "profileId", "profileVersion", "displayName", "slots", "updatedAt"],
63
+ "additionalProperties": false
64
+ },
65
+ "effectiveSlots": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "object",
69
+ "properties": {
70
+ "slotId": { "type": "string" },
71
+ "displayName": { "type": "string" },
72
+ "required": { "type": "boolean" },
73
+ "playbackMode": { "enum": ["loop", "once", "freeze_frame"] },
74
+ "speed": { "type": "number", "exclusiveMinimum": 0 },
75
+ "matchKeywords": { "type": "array", "items": { "type": "string" } },
76
+ "rootMotion": { "enum": ["preserve", "remove_xz", "remove_xyz"] }
77
+ },
78
+ "required": ["slotId", "displayName", "required", "playbackMode", "speed", "matchKeywords", "rootMotion"],
79
+ "additionalProperties": false
80
+ }
81
+ },
82
+ "override": {
83
+ "type": ["object", "null"],
84
+ "properties": {
85
+ "schemaVersion": { "const": 1 },
86
+ "slots": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "properties": {
91
+ "slotId": { "type": "string" },
92
+ "displayName": { "type": "string" },
93
+ "required": { "type": "boolean" },
94
+ "playbackMode": { "enum": ["loop", "once", "freeze_frame"] },
95
+ "speed": { "type": "number", "exclusiveMinimum": 0 },
96
+ "matchKeywords": { "type": "array", "items": { "type": "string" } },
97
+ "rootMotion": { "enum": ["preserve", "remove_xz", "remove_xyz"] }
98
+ },
99
+ "required": ["slotId", "displayName", "required", "playbackMode", "speed", "matchKeywords", "rootMotion"],
100
+ "additionalProperties": false
101
+ }
102
+ },
103
+ "basedOnProfileId": { "type": "string" },
104
+ "basedOnProfileVersion": { "type": "integer", "minimum": 1 },
105
+ "updatedAt": { "type": "string" }
106
+ },
107
+ "required": ["schemaVersion", "slots", "basedOnProfileId", "basedOnProfileVersion", "updatedAt"],
108
+ "additionalProperties": false
109
+ },
110
+ "mapping": {
111
+ "type": ["object", "null"],
112
+ "properties": {
113
+ "schemaVersion": { "const": 1 },
114
+ "mappings": {
115
+ "type": "array",
116
+ "items": {
117
+ "type": "object",
118
+ "properties": {
119
+ "slotId": { "type": "string" },
120
+ "motionRefKey": { "type": ["string", "null"] },
121
+ "autoMatched": { "type": "boolean" }
122
+ },
123
+ "required": ["slotId", "motionRefKey", "autoMatched"],
124
+ "additionalProperties": false
125
+ }
126
+ },
127
+ "confirmed": { "type": "boolean" },
128
+ "updatedAt": { "type": "string" }
129
+ },
130
+ "required": ["schemaVersion", "mappings", "confirmed", "updatedAt"],
131
+ "additionalProperties": false
132
+ },
133
+ "delivery": {
134
+ "type": ["object", "null"],
135
+ "properties": {
136
+ "modelPath": { "type": "string" },
137
+ "playablePath": { "type": "string" },
138
+ "profileId": { "type": "string" },
139
+ "profileVersion": { "type": "integer", "minimum": 1 },
140
+ "clipSlotIds": {
141
+ "type": "array",
142
+ "items": { "type": "string" }
143
+ },
144
+ "slotGuidRegistry": {
145
+ "type": "object",
146
+ "additionalProperties": { "type": "string" }
147
+ },
148
+ "mappingFingerprint": { "type": "string" },
149
+ "exportedAt": { "type": "string" },
150
+ "localUrl": { "type": "string" }
151
+ },
152
+ "required": ["modelPath", "playablePath", "profileId", "profileVersion", "slotGuidRegistry", "mappingFingerprint", "exportedAt", "localUrl"],
153
+ "additionalProperties": false
154
+ },
155
+ "oneClickReady": {
156
+ "type": "boolean"
157
+ },
158
+ "migrationNeeded": {
159
+ "type": "boolean"
160
+ },
161
+ "adoptCandidate": {
162
+ "type": ["object", "null"],
163
+ "properties": {
164
+ "modelPath": { "type": "string" },
165
+ "metaPath": { "type": "string" },
166
+ "playablePath": { "type": "string" },
167
+ "localUrl": { "type": "string" },
168
+ "clips": {
169
+ "type": "array",
170
+ "items": {
171
+ "type": "object",
172
+ "properties": {
173
+ "name": { "type": "string" },
174
+ "guid": { "type": "string" },
175
+ "sourceIndex": { "type": "integer", "minimum": 0 }
176
+ },
177
+ "required": ["name", "guid", "sourceIndex"],
178
+ "additionalProperties": false
179
+ }
180
+ }
181
+ },
182
+ "required": ["modelPath", "metaPath", "playablePath", "localUrl", "clips"],
183
+ "additionalProperties": false
184
+ }
185
+ },
186
+ "required": ["ok", "presets", "gameProfile", "effectiveSlots", "override", "mapping", "delivery", "oneClickReady", "migrationNeeded", "adoptCandidate"],
187
+ "additionalProperties": false
188
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:image-to-3d args",
4
+ "type": "object",
5
+ "properties": {
6
+ "slug": {
7
+ "type": "string",
8
+ "description": "Active game slug. Assets are stored per game under .forgeax/games/<slug>/assets/3d/. The workbench UI fills this automatically for manual use; an AI/agent caller MUST pass the active game's slug (e.g. 'mini-gta'). Required."
9
+ },
10
+ "assetSlot": {
11
+ "type": "string",
12
+ "enum": ["characters", "meshes"],
13
+ "default": "meshes",
14
+ "description": "3D asset slot (subdir under assets/3d/)."
15
+ },
16
+ "assetName": {
17
+ "type": "string",
18
+ "description": "Desired base file name (without extension). Sanitized + de-duplicated by the store."
19
+ },
20
+ "imageUrl": {
21
+ "type": "string",
22
+ "minLength": 1,
23
+ "description": "Source image: a public http(s) URL, a studio-local turnaround URL, a chat-upload filename (e.g. 0cb8531d-….png), /api/sessions/<sid>/uploads/<file>, or the absolute path from [Attached image: /abs/path]. The handler finds session uploads on disk and re-hosts them before a real provider runs. Do not send base64. Do not ask the user to re-attach when a filename is already in the conversation."
24
+ },
25
+ "provider": {
26
+ "type": "string",
27
+ "enum": ["hunyuan_workflow", "meshy", "rodin", "visvise"],
28
+ "default": "hunyuan_workflow",
29
+ "description": "Generation provider. Defaults to hunyuan_workflow. Rodin uses LiteLLM rodin-3d with image_url. VISVISE uses visvise-3d / mid / low. Meshy stays in the enum but is hidden in the UI."
30
+ },
31
+ "enablePbr": { "type": "boolean", "default": true },
32
+ "enableFbxUrl": { "type": "boolean", "default": false },
33
+ "targetPolycount": {
34
+ "type": "integer",
35
+ "minimum": 1000,
36
+ "maximum": 300000,
37
+ "default": 30000
38
+ },
39
+ "providerParams": {
40
+ "type": "object",
41
+ "additionalProperties": true,
42
+ "description": "Provider-specific native params (validated server-side against shared/provider-params.ts; unverified/inapplicable fields are dropped). Rodin keys: mesh_mode, subdivisionlevel, material, TAPose, hd_texture, addons, use_original_alpha — same bag as the sidebar; server appends --flags to prompt. No quality_override. See docs/PROVIDER_PARAMS.md."
43
+ }
44
+ },
45
+ "required": ["slug", "imageUrl"],
46
+ "additionalProperties": false
47
+ }
@@ -0,0 +1,306 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:image-to-3d returns",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": {
7
+ "const": true
8
+ },
9
+ "cacheKey": {
10
+ "type": "string"
11
+ },
12
+ "cacheHit": {
13
+ "type": "boolean"
14
+ },
15
+ "usedMock": {
16
+ "type": "boolean",
17
+ "description": "True when the real provider was not configured and a deterministic mock was used (quota-safe fallback)."
18
+ },
19
+ "manifest": {
20
+ "type": "object",
21
+ "properties": {
22
+ "manifestVersion": {
23
+ "const": 1
24
+ },
25
+ "assetId": {
26
+ "type": "string"
27
+ },
28
+ "kind": {
29
+ "enum": [
30
+ "mesh",
31
+ "animation"
32
+ ]
33
+ },
34
+ "provider": {
35
+ "enum": [
36
+ "meshy",
37
+ "hunyuan_workflow",
38
+ "hunyuan_rest",
39
+ "rodin",
40
+ "visvise"
41
+ ]
42
+ },
43
+ "providerMode": {
44
+ "enum": [
45
+ "mock",
46
+ "real"
47
+ ]
48
+ },
49
+ "mode": {
50
+ "enum": [
51
+ "text",
52
+ "image",
53
+ "views",
54
+ "refine"
55
+ ]
56
+ },
57
+ "sourceJobId": {
58
+ "type": [
59
+ "string",
60
+ "null"
61
+ ]
62
+ },
63
+ "sourceInputAssetIds": {
64
+ "type": "array",
65
+ "items": {
66
+ "type": "string"
67
+ }
68
+ },
69
+ "prompt": {
70
+ "type": [
71
+ "string",
72
+ "null"
73
+ ]
74
+ },
75
+ "files": {
76
+ "type": "array",
77
+ "items": {
78
+ "type": "object",
79
+ "properties": {
80
+ "fileId": {
81
+ "type": "string"
82
+ },
83
+ "role": {
84
+ "enum": [
85
+ "source_mesh",
86
+ "rigged_model",
87
+ "preview_image",
88
+ "texture",
89
+ "animation_clip",
90
+ "animated_model"
91
+ ]
92
+ },
93
+ "format": {
94
+ "enum": [
95
+ "glb",
96
+ "fbx",
97
+ "obj",
98
+ "mtl",
99
+ "usdz",
100
+ "stl",
101
+ "png",
102
+ "jpg",
103
+ "mp4"
104
+ ]
105
+ },
106
+ "storageKey": {
107
+ "type": "string"
108
+ },
109
+ "bytes": {
110
+ "type": "integer",
111
+ "minimum": 0
112
+ },
113
+ "sha256": {
114
+ "type": "string"
115
+ },
116
+ "localUrl": {
117
+ "type": [
118
+ "string",
119
+ "null"
120
+ ]
121
+ },
122
+ "hasSkeleton": {
123
+ "type": "boolean"
124
+ },
125
+ "skeletonProfile": {
126
+ "enum": [
127
+ "humanoid",
128
+ "unknown"
129
+ ]
130
+ },
131
+ "animationInputReady": {
132
+ "type": "boolean"
133
+ },
134
+ "motionType": {
135
+ "type": "integer",
136
+ "minimum": 9,
137
+ "maximum": 16,
138
+ "description": "Present only on role=animated_model files: the motion_retarget v1 motion this clip is (9 跨步 / 10 摔倒 / 11 跳跃 / 12 踢腿 / 13 挥击 / 14 步行 / 15 跑步 / 16 跳舞). Structural so multiple motions coexist per asset. Absent for non-animated roles."
139
+ }
140
+ },
141
+ "required": [
142
+ "fileId",
143
+ "role",
144
+ "format",
145
+ "storageKey",
146
+ "bytes",
147
+ "sha256",
148
+ "localUrl",
149
+ "hasSkeleton",
150
+ "skeletonProfile",
151
+ "animationInputReady"
152
+ ],
153
+ "additionalProperties": false
154
+ }
155
+ },
156
+ "readiness": {
157
+ "type": "object",
158
+ "properties": {
159
+ "hasSourceMesh": {
160
+ "type": "boolean"
161
+ },
162
+ "rigged": {
163
+ "type": "boolean"
164
+ },
165
+ "animated": {
166
+ "type": "boolean"
167
+ }
168
+ },
169
+ "required": [
170
+ "hasSourceMesh",
171
+ "rigged",
172
+ "animated"
173
+ ],
174
+ "additionalProperties": false
175
+ },
176
+ "quality": {
177
+ "type": "object",
178
+ "properties": {
179
+ "geometry": {
180
+ "type": [
181
+ "number",
182
+ "null"
183
+ ]
184
+ },
185
+ "topology": {
186
+ "type": [
187
+ "number",
188
+ "null"
189
+ ]
190
+ },
191
+ "texture": {
192
+ "type": [
193
+ "number",
194
+ "null"
195
+ ]
196
+ },
197
+ "pbr": {
198
+ "type": [
199
+ "number",
200
+ "null"
201
+ ]
202
+ },
203
+ "prompt_fidelity": {
204
+ "type": [
205
+ "number",
206
+ "null"
207
+ ]
208
+ },
209
+ "total": {
210
+ "type": [
211
+ "number",
212
+ "null"
213
+ ]
214
+ }
215
+ },
216
+ "required": [
217
+ "geometry",
218
+ "topology",
219
+ "texture",
220
+ "pbr",
221
+ "prompt_fidelity",
222
+ "total"
223
+ ],
224
+ "additionalProperties": false
225
+ },
226
+ "createdAt": {
227
+ "type": "string"
228
+ },
229
+ "updatedAt": {
230
+ "type": "string"
231
+ },
232
+ "meshyTaskRefs": {
233
+ "type": "object",
234
+ "description": "Meshy preview vs result task ids. Manual refine uses previewTaskId; rig uses resultTaskId.",
235
+ "properties": {
236
+ "previewTaskId": {
237
+ "type": [
238
+ "string",
239
+ "null"
240
+ ]
241
+ },
242
+ "resultTaskId": {
243
+ "type": [
244
+ "string",
245
+ "null"
246
+ ]
247
+ }
248
+ },
249
+ "required": [
250
+ "previewTaskId",
251
+ "resultTaskId"
252
+ ],
253
+ "additionalProperties": false
254
+ },
255
+ "visviseRefs": {
256
+ "type": "object",
257
+ "description": "VISVISE COS URLs from generate/rig. Downstream rig/motion must reuse these; do not re-host on ForgeaX COS first.",
258
+ "properties": {
259
+ "meshUrl": {
260
+ "type": [
261
+ "string",
262
+ "null"
263
+ ]
264
+ },
265
+ "rigUrl": {
266
+ "type": [
267
+ "string",
268
+ "null"
269
+ ]
270
+ }
271
+ },
272
+ "required": [
273
+ "meshUrl",
274
+ "rigUrl"
275
+ ],
276
+ "additionalProperties": false
277
+ }
278
+ },
279
+ "required": [
280
+ "manifestVersion",
281
+ "assetId",
282
+ "kind",
283
+ "provider",
284
+ "providerMode",
285
+ "mode",
286
+ "sourceJobId",
287
+ "sourceInputAssetIds",
288
+ "prompt",
289
+ "files",
290
+ "readiness",
291
+ "quality",
292
+ "createdAt",
293
+ "updatedAt"
294
+ ],
295
+ "additionalProperties": false
296
+ }
297
+ },
298
+ "required": [
299
+ "ok",
300
+ "cacheKey",
301
+ "cacheHit",
302
+ "usedMock",
303
+ "manifest"
304
+ ],
305
+ "additionalProperties": false
306
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:import-to-engine args",
4
+ "type": "object",
5
+ "properties": {
6
+ "slug": {
7
+ "type": "string"
8
+ },
9
+ "assetPath": {
10
+ "type": "string"
11
+ }
12
+ },
13
+ "required": [
14
+ "slug",
15
+ "assetPath"
16
+ ],
17
+ "additionalProperties": false
18
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:import-to-engine returns",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": {
7
+ "type": "boolean"
8
+ },
9
+ "firstImport": {
10
+ "type": "boolean"
11
+ },
12
+ "normalizedDraco": {
13
+ "type": "boolean"
14
+ },
15
+ "reusedGuidCount": {
16
+ "type": "integer"
17
+ },
18
+ "engineMetaPath": {
19
+ "type": "string"
20
+ },
21
+ "assetPath": {
22
+ "type": "string"
23
+ },
24
+ "message": {
25
+ "type": "string"
26
+ },
27
+ "code": {
28
+ "type": "string"
29
+ },
30
+ "retryable": {
31
+ "type": "boolean"
32
+ }
33
+ },
34
+ "additionalProperties": true
35
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:list-assets args",
4
+ "type": "object",
5
+ "properties": {
6
+ "slug": {
7
+ "type": "string",
8
+ "description": "Active game slug. The workbench UI fills this automatically for manual use; an AI/agent caller MUST pass the active game's slug (e.g. 'mini-gta'). Required."
9
+ },
10
+ "assetSlot": {
11
+ "type": "string",
12
+ "enum": ["characters", "meshes"],
13
+ "description": "Optional slot filter (subdir under assets/3d/). Omit to list all slots."
14
+ },
15
+ "provider": {
16
+ "enum": ["all", "meshy", "hunyuan_workflow", "hunyuan_rest", "rodin", "visvise"],
17
+ "default": "all"
18
+ }
19
+ },
20
+ "required": ["slug"],
21
+ "additionalProperties": false
22
+ }