@dcl-regenesislabs/opendcl 0.1.4-22336933467.commit-433e85a → 0.1.4-22555336781.commit-12e2bc1
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/context/asset-packs-catalog.md +5 -3
- package/context/audio-catalog.md +5 -3
- package/context/open-source-3d-assets.md +9 -0
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/extensions/dcl-asset-path.ts +60 -0
- package/package.json +2 -2
- package/skills/add-3d-models/SKILL.md +2 -2
- package/skills/audio-video/SKILL.md +1 -1
- package/skills/create-scene/SKILL.md +3 -3
- package/skills/player-avatar/SKILL.md +1 -1
|
@@ -6,10 +6,12 @@ Premium 3D models from the official Decentraland Creator Hub. All models are fre
|
|
|
6
6
|
|
|
7
7
|
**How to use**:
|
|
8
8
|
1. Find a model below that matches your scene
|
|
9
|
-
2. Download it
|
|
10
|
-
|
|
9
|
+
2. Download it — the output path **must** start with `models/`:
|
|
10
|
+
`curl -o models/<filename>.glb "<URL>"`
|
|
11
|
+
3. Reference it: `GltfContainer.create(entity, { src: 'models/<filename>.glb' })`
|
|
11
12
|
|
|
12
|
-
> **Important**:
|
|
13
|
+
> **Important**: Always download into `models/`. Never write to the scene root.
|
|
14
|
+
> Correct: `curl -o models/Sofa_Black.glb "..."` | Wrong: `curl -o Sofa_Black.glb "..."`
|
|
13
15
|
|
|
14
16
|
---
|
|
15
17
|
|
package/context/audio-catalog.md
CHANGED
|
@@ -6,10 +6,12 @@ Free audio files from the official Decentraland Creator Hub asset packs. All sou
|
|
|
6
6
|
|
|
7
7
|
**How to use**:
|
|
8
8
|
1. Find a sound below that matches your scene
|
|
9
|
-
2. Download it
|
|
10
|
-
|
|
9
|
+
2. Download it — the output path **must** start with `sounds/`:
|
|
10
|
+
`curl -o sounds/<filename>.mp3 "<URL>"`
|
|
11
|
+
3. Reference it: `AudioSource.create(entity, { audioClipUrl: 'sounds/<filename>.mp3', playing: true, loop: false })`
|
|
11
12
|
|
|
12
|
-
> **Important**:
|
|
13
|
+
> **Important**: Always download into `sounds/`. Never write to the scene root.
|
|
14
|
+
> Correct: `curl -o sounds/click.mp3 "..."` | Wrong: `curl -o click.mp3 "..."`
|
|
13
15
|
|
|
14
16
|
---
|
|
15
17
|
|
|
@@ -9,6 +9,15 @@ Free CC0-licensed GLB 3D models curated from the [Open Source 3D Assets](https:/
|
|
|
9
9
|
- **Creator**: Polygonal Mind
|
|
10
10
|
- **License**: CC0 (Public Domain)
|
|
11
11
|
|
|
12
|
+
**How to use**:
|
|
13
|
+
1. Find a model below that matches your scene
|
|
14
|
+
2. Download it — the output path **must** start with `models/`:
|
|
15
|
+
`curl -o models/<filename>.glb "<URL>"`
|
|
16
|
+
3. Reference it: `GltfContainer.create(entity, { src: 'models/<filename>.glb' })`
|
|
17
|
+
|
|
18
|
+
> **Important**: Always download into `models/`. Never write to the scene root.
|
|
19
|
+
> Correct: `curl -o models/Tree_01.glb "..."` | Wrong: `curl -o Tree_01.glb "..."`
|
|
20
|
+
|
|
12
21
|
Base URL for all downloads:
|
|
13
22
|
```
|
|
14
23
|
https://raw.githubusercontent.com/ToxSam/cc0-models-Polygonal-Mind/main/projects/
|
package/dist/index.js
CHANGED
|
@@ -27,10 +27,14 @@ if (!existsSync(settingsPath)) {
|
|
|
27
27
|
}
|
|
28
28
|
// Build args: start with user's CLI args
|
|
29
29
|
const args = process.argv.slice(2);
|
|
30
|
-
// Inject DCL system prompt (
|
|
30
|
+
// Inject DCL system prompt (strip YAML frontmatter, resolve context/ paths to absolute)
|
|
31
31
|
if (!args.includes("--system-prompt")) {
|
|
32
32
|
const raw = readFileSync(join(packageDir, "prompts/system.md"), "utf-8");
|
|
33
|
-
const
|
|
33
|
+
const contextDir = join(packageDir, "context");
|
|
34
|
+
const systemPrompt = raw
|
|
35
|
+
.replace(/^---\n[\s\S]*?\n---\n/, "")
|
|
36
|
+
.replace(/context\/([\w-]+\.md)/g, (_, filename) => join(contextDir, filename))
|
|
37
|
+
.trim();
|
|
34
38
|
args.push("--system-prompt", systemPrompt);
|
|
35
39
|
}
|
|
36
40
|
// Load our extensions
|
|
@@ -47,6 +51,7 @@ const extensions = [
|
|
|
47
51
|
"dcl-update-check.ts",
|
|
48
52
|
"dcl-status.ts",
|
|
49
53
|
"dcl-tasks.ts",
|
|
54
|
+
"dcl-asset-path.ts",
|
|
50
55
|
];
|
|
51
56
|
for (const ext of extensions) {
|
|
52
57
|
args.push("-e", join(extDir, ext));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAEzC,uFAAuF;AACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC;AAC7C,CAAC;AAED,wEAAwE;AACxE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACrD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,yCAAyC;AACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset Path Guard Extension
|
|
3
|
+
*
|
|
4
|
+
* Blocks curl downloads that place asset files in the wrong directory.
|
|
5
|
+
* Models (.glb/.gltf) must go into models/, audio (.mp3/.ogg/.wav) into sounds/.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ExtensionFactory } from "@mariozechner/pi-coding-agent";
|
|
9
|
+
|
|
10
|
+
interface AssetViolation {
|
|
11
|
+
file: string;
|
|
12
|
+
expected: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const ASSET_RULES: { pattern: RegExp; dir: string }[] = [
|
|
16
|
+
{ pattern: /\.gl(?:b|tf)$/i, dir: "models/" },
|
|
17
|
+
{ pattern: /\.(?:mp3|ogg|wav)$/i, dir: "sounds/" },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Check a curl command for asset files downloaded to the wrong directory.
|
|
22
|
+
* Returns null if the command is fine, or a violation object if it should be blocked.
|
|
23
|
+
*/
|
|
24
|
+
export function checkCurlOutput(command: string): AssetViolation | null {
|
|
25
|
+
const outputMatches = command.matchAll(/-o\s+["']?([^\s"']+)/g);
|
|
26
|
+
for (const match of outputMatches) {
|
|
27
|
+
const outputPath = match[1];
|
|
28
|
+
for (const rule of ASSET_RULES) {
|
|
29
|
+
if (rule.pattern.test(outputPath) && !outputPath.includes(rule.dir)) {
|
|
30
|
+
const relativePath = outputPath.replace(/^\.\//, "");
|
|
31
|
+
return {
|
|
32
|
+
file: relativePath,
|
|
33
|
+
expected: rule.dir + relativePath,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const extension: ExtensionFactory = (pi) => {
|
|
42
|
+
pi.on("tool_call", async (event) => {
|
|
43
|
+
if (event.toolName !== "bash") return;
|
|
44
|
+
|
|
45
|
+
const command = (event.input as { command?: string }).command ?? "";
|
|
46
|
+
const violation = checkCurlOutput(command);
|
|
47
|
+
if (!violation) return;
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
block: true,
|
|
51
|
+
reason: [
|
|
52
|
+
"Asset files must be downloaded into the correct directory.",
|
|
53
|
+
`Use: curl -o ${violation.expected} instead of curl -o ${violation.file}`,
|
|
54
|
+
"Models (.glb/.gltf) → models/ Audio (.mp3/.ogg/.wav) → sounds/",
|
|
55
|
+
].join("\n"),
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export default extension;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl-regenesislabs/opendcl",
|
|
3
|
-
"version": "0.1.4-
|
|
3
|
+
"version": "0.1.4-22555336781.commit-12e2bc1",
|
|
4
4
|
"description": "AI coding assistant for Decentraland SDK7 scene development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"prompts/",
|
|
67
67
|
"context/"
|
|
68
68
|
],
|
|
69
|
-
"commit": "
|
|
69
|
+
"commit": "12e2bc1a70db6216feafebf6564faa40515c72c0"
|
|
70
70
|
}
|
|
@@ -97,7 +97,7 @@ Always check both asset catalogs before suggesting the user create or find their
|
|
|
97
97
|
|
|
98
98
|
### Creator Hub Asset Packs (2,700+ models)
|
|
99
99
|
|
|
100
|
-
Read `context/asset-packs-catalog.md` for official Decentraland models across 12 themed packs (Cyberpunk, Fantasy, Gallery, Sci-fi, Western, Pirates, etc.) with furniture, structures, decorations, nature, and more.
|
|
100
|
+
Read `{baseDir}/../../context/asset-packs-catalog.md` for official Decentraland models across 12 themed packs (Cyberpunk, Fantasy, Gallery, Sci-fi, Western, Pirates, etc.) with furniture, structures, decorations, nature, and more.
|
|
101
101
|
|
|
102
102
|
To use a Creator Hub model:
|
|
103
103
|
```bash
|
|
@@ -112,7 +112,7 @@ GltfContainer.create(entity, { src: 'models/arcade_machine.glb' })
|
|
|
112
112
|
|
|
113
113
|
### Open Source CC0 Models (991 models)
|
|
114
114
|
|
|
115
|
-
Read `context/open-source-3d-assets.md` for free CC0-licensed models from Polygonal Mind, organized by 18 themed collections (MomusPark, Medieval Fair, Cyberpunk, Sci-fi, etc.) with direct GitHub download URLs.
|
|
115
|
+
Read `{baseDir}/../../context/open-source-3d-assets.md` for free CC0-licensed models from Polygonal Mind, organized by 18 themed collections (MomusPark, Medieval Fair, Cyberpunk, Sci-fi, etc.) with direct GitHub download URLs.
|
|
116
116
|
|
|
117
117
|
```bash
|
|
118
118
|
curl -o models/tree.glb "https://raw.githubusercontent.com/ToxSam/cc0-models-Polygonal-Mind/main/projects/MomusPark/Tree_01_Art.glb"
|
|
@@ -204,7 +204,7 @@ To make audio non-spatial (same volume everywhere), there's no built-in flag —
|
|
|
204
204
|
|
|
205
205
|
Always check the audio catalog before creating placeholder sound file references. It contains 50 free sounds from the Creator Hub asset packs.
|
|
206
206
|
|
|
207
|
-
Read `context/audio-catalog.md` for music tracks (ambient, dance, medieval, sci-fi, etc.), ambient sounds (birds, city, factory, etc.), interaction sounds (buttons, doors, levers, chests), sound effects (explosions, sirens, bells), and game mechanic sounds (win/lose, heal, respawn, damage).
|
|
207
|
+
Read `{baseDir}/../../context/audio-catalog.md` for music tracks (ambient, dance, medieval, sci-fi, etc.), ambient sounds (birds, city, factory, etc.), interaction sounds (buttons, doors, levers, chests), sound effects (explosions, sirens, bells), and game mechanic sounds (win/lose, heal, respawn, damage).
|
|
208
208
|
|
|
209
209
|
To use a catalog sound:
|
|
210
210
|
```bash
|
|
@@ -24,9 +24,9 @@ Never manually create scene.json, package.json, or tsconfig.json — the SDK tem
|
|
|
24
24
|
|
|
25
25
|
Before writing scene code, check both asset catalogs for free models that match the user's theme:
|
|
26
26
|
|
|
27
|
-
1. Read `context/asset-packs-catalog.md` (2,700+ Creator Hub models — furniture, structures, decorations, nature, etc.)
|
|
28
|
-
2. Read `context/open-source-3d-assets.md` (991 CC0 models — cyberpunk, medieval, nature, sci-fi, etc.)
|
|
29
|
-
3. Read `context/audio-catalog.md` (50 free sounds — music, ambient, SFX, game mechanics, etc.)
|
|
27
|
+
1. Read `{baseDir}/../../context/asset-packs-catalog.md` (2,700+ Creator Hub models — furniture, structures, decorations, nature, etc.)
|
|
28
|
+
2. Read `{baseDir}/../../context/open-source-3d-assets.md` (991 CC0 models — cyberpunk, medieval, nature, sci-fi, etc.)
|
|
29
|
+
3. Read `{baseDir}/../../context/audio-catalog.md` (50 free sounds — music, ambient, SFX, game mechanics, etc.)
|
|
30
30
|
4. Suggest matching models and sounds to the user
|
|
31
31
|
5. Download selected models into the scene's `models/` directory:
|
|
32
32
|
```bash
|
|
@@ -279,4 +279,4 @@ Beyond the commonly used anchor points, the full list includes:
|
|
|
279
279
|
- **Never use `Transform.getMutable(engine.PlayerEntity)` to move the player** — it does not work. Always use `movePlayerTo` from `~system/RestrictedActions`
|
|
280
280
|
- `Transform.get(engine.PlayerEntity)` is valid for **reading** position only
|
|
281
281
|
|
|
282
|
-
For component field details, see `context/components-reference.md`.
|
|
282
|
+
For component field details, see `{baseDir}/../../context/components-reference.md`.
|