@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,281 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gen3d-asset-manifest",
4
+ "title": "Gen3DAssetManifest",
5
+ "type": "object",
6
+ "properties": {
7
+ "manifestVersion": {
8
+ "const": 1
9
+ },
10
+ "assetId": {
11
+ "type": "string"
12
+ },
13
+ "kind": {
14
+ "enum": [
15
+ "mesh",
16
+ "animation"
17
+ ]
18
+ },
19
+ "provider": {
20
+ "enum": [
21
+ "meshy",
22
+ "hunyuan_workflow",
23
+ "hunyuan_rest",
24
+ "rodin",
25
+ "visvise"
26
+ ]
27
+ },
28
+ "providerMode": {
29
+ "enum": [
30
+ "mock",
31
+ "real"
32
+ ]
33
+ },
34
+ "mode": {
35
+ "enum": [
36
+ "text",
37
+ "image",
38
+ "views",
39
+ "refine"
40
+ ]
41
+ },
42
+ "sourceJobId": {
43
+ "type": [
44
+ "string",
45
+ "null"
46
+ ]
47
+ },
48
+ "sourceInputAssetIds": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string"
52
+ }
53
+ },
54
+ "prompt": {
55
+ "type": [
56
+ "string",
57
+ "null"
58
+ ]
59
+ },
60
+ "files": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "object",
64
+ "properties": {
65
+ "fileId": {
66
+ "type": "string"
67
+ },
68
+ "role": {
69
+ "enum": [
70
+ "source_mesh",
71
+ "rigged_model",
72
+ "preview_image",
73
+ "texture",
74
+ "animation_clip",
75
+ "animated_model"
76
+ ]
77
+ },
78
+ "format": {
79
+ "enum": [
80
+ "glb",
81
+ "fbx",
82
+ "obj",
83
+ "mtl",
84
+ "usdz",
85
+ "stl",
86
+ "png",
87
+ "jpg",
88
+ "mp4"
89
+ ]
90
+ },
91
+ "storageKey": {
92
+ "type": "string"
93
+ },
94
+ "bytes": {
95
+ "type": "integer",
96
+ "minimum": 0
97
+ },
98
+ "sha256": {
99
+ "type": "string"
100
+ },
101
+ "localUrl": {
102
+ "type": [
103
+ "string",
104
+ "null"
105
+ ]
106
+ },
107
+ "hasSkeleton": {
108
+ "type": "boolean"
109
+ },
110
+ "skeletonProfile": {
111
+ "enum": [
112
+ "humanoid",
113
+ "unknown"
114
+ ]
115
+ },
116
+ "animationInputReady": {
117
+ "type": "boolean"
118
+ },
119
+ "motionType": {
120
+ "type": "integer",
121
+ "minimum": 9,
122
+ "maximum": 16,
123
+ "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."
124
+ }
125
+ },
126
+ "required": [
127
+ "fileId",
128
+ "role",
129
+ "format",
130
+ "storageKey",
131
+ "bytes",
132
+ "sha256",
133
+ "localUrl",
134
+ "hasSkeleton",
135
+ "skeletonProfile",
136
+ "animationInputReady"
137
+ ],
138
+ "additionalProperties": false
139
+ }
140
+ },
141
+ "readiness": {
142
+ "type": "object",
143
+ "properties": {
144
+ "hasSourceMesh": {
145
+ "type": "boolean"
146
+ },
147
+ "rigged": {
148
+ "type": "boolean"
149
+ },
150
+ "animated": {
151
+ "type": "boolean"
152
+ }
153
+ },
154
+ "required": [
155
+ "hasSourceMesh",
156
+ "rigged",
157
+ "animated"
158
+ ],
159
+ "additionalProperties": false
160
+ },
161
+ "quality": {
162
+ "type": "object",
163
+ "properties": {
164
+ "geometry": {
165
+ "type": [
166
+ "number",
167
+ "null"
168
+ ]
169
+ },
170
+ "topology": {
171
+ "type": [
172
+ "number",
173
+ "null"
174
+ ]
175
+ },
176
+ "texture": {
177
+ "type": [
178
+ "number",
179
+ "null"
180
+ ]
181
+ },
182
+ "pbr": {
183
+ "type": [
184
+ "number",
185
+ "null"
186
+ ]
187
+ },
188
+ "prompt_fidelity": {
189
+ "type": [
190
+ "number",
191
+ "null"
192
+ ]
193
+ },
194
+ "total": {
195
+ "type": [
196
+ "number",
197
+ "null"
198
+ ]
199
+ }
200
+ },
201
+ "required": [
202
+ "geometry",
203
+ "topology",
204
+ "texture",
205
+ "pbr",
206
+ "prompt_fidelity",
207
+ "total"
208
+ ],
209
+ "additionalProperties": false
210
+ },
211
+ "createdAt": {
212
+ "type": "string"
213
+ },
214
+ "updatedAt": {
215
+ "type": "string"
216
+ },
217
+ "meshyTaskRefs": {
218
+ "type": "object",
219
+ "description": "Meshy preview vs result task ids. Manual refine uses previewTaskId; rig uses resultTaskId.",
220
+ "properties": {
221
+ "previewTaskId": {
222
+ "type": [
223
+ "string",
224
+ "null"
225
+ ]
226
+ },
227
+ "resultTaskId": {
228
+ "type": [
229
+ "string",
230
+ "null"
231
+ ]
232
+ }
233
+ },
234
+ "required": [
235
+ "previewTaskId",
236
+ "resultTaskId"
237
+ ],
238
+ "additionalProperties": false
239
+ },
240
+ "visviseRefs": {
241
+ "type": "object",
242
+ "description": "VISVISE COS URLs from generate/rig. Downstream rig/motion must reuse these; do not re-host on ForgeaX COS first.",
243
+ "properties": {
244
+ "meshUrl": {
245
+ "type": [
246
+ "string",
247
+ "null"
248
+ ]
249
+ },
250
+ "rigUrl": {
251
+ "type": [
252
+ "string",
253
+ "null"
254
+ ]
255
+ }
256
+ },
257
+ "required": [
258
+ "meshUrl",
259
+ "rigUrl"
260
+ ],
261
+ "additionalProperties": false
262
+ }
263
+ },
264
+ "required": [
265
+ "manifestVersion",
266
+ "assetId",
267
+ "kind",
268
+ "provider",
269
+ "providerMode",
270
+ "mode",
271
+ "sourceJobId",
272
+ "sourceInputAssetIds",
273
+ "prompt",
274
+ "files",
275
+ "readiness",
276
+ "quality",
277
+ "createdAt",
278
+ "updatedAt"
279
+ ],
280
+ "additionalProperties": false
281
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:generate-meshy-text-mock 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
+ "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
+ "prompt": {
21
+ "type": "string",
22
+ "minLength": 1,
23
+ "description": "Text prompt for the mock Meshy text-to-3D result."
24
+ },
25
+ "promptCategory": {
26
+ "enum": ["character", "prop", "scene"],
27
+ "default": "prop"
28
+ },
29
+ "enablePbr": {
30
+ "type": "boolean",
31
+ "default": true
32
+ },
33
+ "targetPolycount": {
34
+ "type": "integer",
35
+ "minimum": 1000,
36
+ "maximum": 300000,
37
+ "default": 30000
38
+ }
39
+ },
40
+ "required": ["slug", "prompt"],
41
+ "additionalProperties": false
42
+ }
@@ -0,0 +1,301 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:generate-meshy-text-mock returns",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": {
7
+ "const": true
8
+ },
9
+ "quotaSafe": {
10
+ "const": true
11
+ },
12
+ "cacheKey": {
13
+ "type": "string"
14
+ },
15
+ "manifest": {
16
+ "type": "object",
17
+ "properties": {
18
+ "manifestVersion": {
19
+ "const": 1
20
+ },
21
+ "assetId": {
22
+ "type": "string"
23
+ },
24
+ "kind": {
25
+ "enum": [
26
+ "mesh",
27
+ "animation"
28
+ ]
29
+ },
30
+ "provider": {
31
+ "enum": [
32
+ "meshy",
33
+ "hunyuan_workflow",
34
+ "hunyuan_rest",
35
+ "rodin",
36
+ "visvise"
37
+ ]
38
+ },
39
+ "providerMode": {
40
+ "enum": [
41
+ "mock",
42
+ "real"
43
+ ]
44
+ },
45
+ "mode": {
46
+ "enum": [
47
+ "text",
48
+ "image",
49
+ "views",
50
+ "refine"
51
+ ]
52
+ },
53
+ "sourceJobId": {
54
+ "type": [
55
+ "string",
56
+ "null"
57
+ ]
58
+ },
59
+ "sourceInputAssetIds": {
60
+ "type": "array",
61
+ "items": {
62
+ "type": "string"
63
+ }
64
+ },
65
+ "prompt": {
66
+ "type": [
67
+ "string",
68
+ "null"
69
+ ]
70
+ },
71
+ "files": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "object",
75
+ "properties": {
76
+ "fileId": {
77
+ "type": "string"
78
+ },
79
+ "role": {
80
+ "enum": [
81
+ "source_mesh",
82
+ "rigged_model",
83
+ "preview_image",
84
+ "texture",
85
+ "animation_clip",
86
+ "animated_model"
87
+ ]
88
+ },
89
+ "format": {
90
+ "enum": [
91
+ "glb",
92
+ "fbx",
93
+ "obj",
94
+ "mtl",
95
+ "usdz",
96
+ "stl",
97
+ "png",
98
+ "jpg",
99
+ "mp4"
100
+ ]
101
+ },
102
+ "storageKey": {
103
+ "type": "string"
104
+ },
105
+ "bytes": {
106
+ "type": "integer",
107
+ "minimum": 0
108
+ },
109
+ "sha256": {
110
+ "type": "string"
111
+ },
112
+ "localUrl": {
113
+ "type": [
114
+ "string",
115
+ "null"
116
+ ]
117
+ },
118
+ "hasSkeleton": {
119
+ "type": "boolean"
120
+ },
121
+ "skeletonProfile": {
122
+ "enum": [
123
+ "humanoid",
124
+ "unknown"
125
+ ]
126
+ },
127
+ "animationInputReady": {
128
+ "type": "boolean"
129
+ },
130
+ "motionType": {
131
+ "type": "integer",
132
+ "minimum": 9,
133
+ "maximum": 16,
134
+ "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."
135
+ }
136
+ },
137
+ "required": [
138
+ "fileId",
139
+ "role",
140
+ "format",
141
+ "storageKey",
142
+ "bytes",
143
+ "sha256",
144
+ "localUrl",
145
+ "hasSkeleton",
146
+ "skeletonProfile",
147
+ "animationInputReady"
148
+ ],
149
+ "additionalProperties": false
150
+ }
151
+ },
152
+ "readiness": {
153
+ "type": "object",
154
+ "properties": {
155
+ "hasSourceMesh": {
156
+ "type": "boolean"
157
+ },
158
+ "rigged": {
159
+ "type": "boolean"
160
+ },
161
+ "animated": {
162
+ "type": "boolean"
163
+ }
164
+ },
165
+ "required": [
166
+ "hasSourceMesh",
167
+ "rigged",
168
+ "animated"
169
+ ],
170
+ "additionalProperties": false
171
+ },
172
+ "quality": {
173
+ "type": "object",
174
+ "properties": {
175
+ "geometry": {
176
+ "type": [
177
+ "number",
178
+ "null"
179
+ ]
180
+ },
181
+ "topology": {
182
+ "type": [
183
+ "number",
184
+ "null"
185
+ ]
186
+ },
187
+ "texture": {
188
+ "type": [
189
+ "number",
190
+ "null"
191
+ ]
192
+ },
193
+ "pbr": {
194
+ "type": [
195
+ "number",
196
+ "null"
197
+ ]
198
+ },
199
+ "prompt_fidelity": {
200
+ "type": [
201
+ "number",
202
+ "null"
203
+ ]
204
+ },
205
+ "total": {
206
+ "type": [
207
+ "number",
208
+ "null"
209
+ ]
210
+ }
211
+ },
212
+ "required": [
213
+ "geometry",
214
+ "topology",
215
+ "texture",
216
+ "pbr",
217
+ "prompt_fidelity",
218
+ "total"
219
+ ],
220
+ "additionalProperties": false
221
+ },
222
+ "createdAt": {
223
+ "type": "string"
224
+ },
225
+ "updatedAt": {
226
+ "type": "string"
227
+ },
228
+ "meshyTaskRefs": {
229
+ "type": "object",
230
+ "description": "Meshy preview vs result task ids. Manual refine uses previewTaskId; rig uses resultTaskId.",
231
+ "properties": {
232
+ "previewTaskId": {
233
+ "type": [
234
+ "string",
235
+ "null"
236
+ ]
237
+ },
238
+ "resultTaskId": {
239
+ "type": [
240
+ "string",
241
+ "null"
242
+ ]
243
+ }
244
+ },
245
+ "required": [
246
+ "previewTaskId",
247
+ "resultTaskId"
248
+ ],
249
+ "additionalProperties": false
250
+ },
251
+ "visviseRefs": {
252
+ "type": "object",
253
+ "description": "VISVISE COS URLs from generate/rig. Downstream rig/motion must reuse these; do not re-host on ForgeaX COS first.",
254
+ "properties": {
255
+ "meshUrl": {
256
+ "type": [
257
+ "string",
258
+ "null"
259
+ ]
260
+ },
261
+ "rigUrl": {
262
+ "type": [
263
+ "string",
264
+ "null"
265
+ ]
266
+ }
267
+ },
268
+ "required": [
269
+ "meshUrl",
270
+ "rigUrl"
271
+ ],
272
+ "additionalProperties": false
273
+ }
274
+ },
275
+ "required": [
276
+ "manifestVersion",
277
+ "assetId",
278
+ "kind",
279
+ "provider",
280
+ "providerMode",
281
+ "mode",
282
+ "sourceJobId",
283
+ "sourceInputAssetIds",
284
+ "prompt",
285
+ "files",
286
+ "readiness",
287
+ "quality",
288
+ "createdAt",
289
+ "updatedAt"
290
+ ],
291
+ "additionalProperties": false
292
+ }
293
+ },
294
+ "required": [
295
+ "ok",
296
+ "quotaSafe",
297
+ "cacheKey",
298
+ "manifest"
299
+ ],
300
+ "additionalProperties": false
301
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:get-credentials args",
4
+ "type": "object",
5
+ "properties": {},
6
+ "additionalProperties": false
7
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:get-credentials returns",
4
+ "type": "object",
5
+ "properties": {
6
+ "ok": { "const": true },
7
+ "realProvidersEnabled": {
8
+ "type": "boolean",
9
+ "description": "True when GEN3D_ENABLE_REAL_PROVIDERS resolves to \"1\" (process.env wins over the plugin .env)."
10
+ },
11
+ "litellmConfigured": {
12
+ "type": "boolean",
13
+ "description": "Read-only. True when Studio global .env has a 3D gateway key (priority FORGEAX_3D_GATEWAY_KEY > ANTHROPIC_API_KEY > LITELLM_PROXY_KEY)."
14
+ },
15
+ "litellmProxyKey": {
16
+ "type": ["string", "null"],
17
+ "description": "Read-only masked 3D gateway key from Studio Settings (first4...last4, or *** when <= 8 chars), or null when unset. Never plaintext. The plugin .env never holds this key."
18
+ },
19
+ "credentials": {
20
+ "type": "object",
21
+ "properties": {
22
+ "COS_SECRET_ID": {
23
+ "type": ["string", "null"],
24
+ "description": "Masked COS SecretId (first4...last4, or *** when <= 8 chars) or null when unset. Never plaintext."
25
+ },
26
+ "COS_SECRET_KEY": {
27
+ "type": ["string", "null"],
28
+ "description": "Masked COS SecretKey or null when unset. Never plaintext."
29
+ },
30
+ "COS_BUCKET": {
31
+ "type": ["string", "null"],
32
+ "description": "Plaintext COS bucket name (an address, not a secret) or null when unset."
33
+ },
34
+ "COS_REGION": {
35
+ "type": ["string", "null"],
36
+ "description": "Plaintext COS region (an address, not a secret) or null when unset."
37
+ }
38
+ },
39
+ "required": ["COS_SECRET_ID", "COS_SECRET_KEY", "COS_BUCKET", "COS_REGION"],
40
+ "additionalProperties": false
41
+ }
42
+ },
43
+ "required": ["ok", "realProvidersEnabled", "litellmConfigured", "litellmProxyKey", "credentials"],
44
+ "additionalProperties": false
45
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "gen3d:get-playable-profile args",
4
+ "type": "object",
5
+ "properties": {
6
+ "slug": { "type": "string" },
7
+ "assetPath": { "type": "string" }
8
+ },
9
+ "required": ["slug"],
10
+ "additionalProperties": false
11
+ }