@dcl-regenesislabs/opendcl 0.1.5-23161709858.commit-828c176 → 0.1.5-23569259243.commit-df8937b

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/dist/index.js CHANGED
@@ -27,6 +27,11 @@ if (!existsSync(settingsPath)) {
27
27
  }
28
28
  // Build args: start with user's CLI args
29
29
  const args = process.argv.slice(2);
30
+ // Detect --headless flag (remove from args before passing to pi-coding-agent)
31
+ const headless = args.includes("--headless");
32
+ if (headless) {
33
+ args.splice(args.indexOf("--headless"), 1);
34
+ }
30
35
  // Inject DCL system prompt (strip YAML frontmatter, resolve context/ paths to absolute)
31
36
  if (!args.includes("--system-prompt")) {
32
37
  const raw = readFileSync(join(packageDir, "prompts/system.md"), "utf-8");
@@ -37,31 +42,42 @@ if (!args.includes("--system-prompt")) {
37
42
  .trim();
38
43
  args.push("--system-prompt", systemPrompt);
39
44
  }
40
- // Load our extensions
45
+ // Load extensions
41
46
  const extDir = join(packageDir, "extensions");
42
- const extensions = [
43
- "dcl-context.ts",
44
- "dcl-preview.ts",
45
- "dcl-init.ts",
46
- "dcl-deploy.ts",
47
- "dcl-setup.ts",
48
- "dcl-validate.ts",
49
- "dcl-header.ts",
50
- "dcl-update-check.ts",
51
- "dcl-status.ts",
52
- "dcl-tasks.ts",
53
- "dcl-asset-path.ts",
54
- "dcl-screenshot.ts",
55
- ];
47
+ // Headless mode: only load extensions needed for non-interactive agent operation
48
+ // (e.g., inside a sandboxed web service). Skips UI, preview, screenshot, and
49
+ // interactive extensions that require a terminal or spawned processes.
50
+ const extensions = headless
51
+ ? [
52
+ "dcl-context.ts",
53
+ "dcl-validate.ts",
54
+ "dcl-asset-path.ts",
55
+ ]
56
+ : [
57
+ "dcl-context.ts",
58
+ "dcl-preview.ts",
59
+ "dcl-init.ts",
60
+ "dcl-deploy.ts",
61
+ "dcl-setup.ts",
62
+ "dcl-validate.ts",
63
+ "dcl-header.ts",
64
+ "dcl-update-check.ts",
65
+ "dcl-status.ts",
66
+ "dcl-tasks.ts",
67
+ "dcl-asset-path.ts",
68
+ "dcl-screenshot.ts",
69
+ ];
56
70
  // Conditionally load dcl-setup-ollama (hidden by default, enable with ENABLE_OLLAMA_SETUP=true)
57
- if (process.env.ENABLE_OLLAMA_SETUP === "true") {
71
+ if (!headless && process.env.ENABLE_OLLAMA_SETUP === "true") {
58
72
  extensions.push("dcl-setup-ollama.ts");
59
73
  }
60
74
  for (const ext of extensions) {
61
75
  args.push("-e", join(extDir, ext));
62
76
  }
63
- args.push("-e", join(extDir, "plan-mode/index.ts"));
64
- args.push("-e", join(extDir, "permissions/index.ts"));
77
+ if (!headless) {
78
+ args.push("-e", join(extDir, "plan-mode/index.ts"));
79
+ args.push("-e", join(extDir, "permissions/index.ts"));
80
+ }
65
81
  // Load all skill directories
66
82
  args.push("--skill", join(packageDir, "skills"));
67
83
  // Load prompt templates (review, explain — NOT system.md since that's the system prompt)
@@ -72,37 +88,40 @@ args.push("--prompt-template", join(packageDir, "prompts/explain.md"));
72
88
  if (!isDev()) {
73
89
  process.env.PI_SKIP_VERSION_CHECK = "1";
74
90
  }
75
- // Suppress pi's generic "No models available" warning our dcl-setup-ollama
76
- // extension shows a more helpful message that mentions /setup-ollama.
77
- const _showWarning = InteractiveMode.prototype.showWarning;
78
- InteractiveMode.prototype.showWarning = function (msg) {
79
- if (msg.startsWith("No models available"))
80
- return;
81
- _showWarning.call(this, msg);
82
- };
83
- // Suppress pi's "What's New" changelog notification on startup — it shows pi's
84
- // own version/changes, which confuses OpenDCL users.
85
- InteractiveMode.prototype.getChangelogForDisplay = function () {
86
- return undefined;
87
- };
88
- // Override pi's built-in /changelog command — it shows pi's CHANGELOG.md,
89
- // not OpenDCL's. The command is hardcoded in handleEditorSubmit before extension
90
- // commands, so monkey-patching is the only way to intercept it.
91
- const opendclVersion = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf-8")).version;
92
- InteractiveMode.prototype.handleChangelogCommand = function () {
93
- this.showStatus(`OpenDCL v${opendclVersion} https://github.com/dcl-regenesislabs/opendcl/releases/tag/${opendclVersion}`);
94
- };
95
- // Compact tool output override built-in write/read renderers to reduce terminal noise.
96
- // When a built-in tool has no custom renderCall/renderResult, pi shows verbose output.
97
- // By returning compact renderers from getRegisteredToolDefinition, the ToolExecutionComponent
98
- // uses them instead (see shouldUseBuiltInRenderer() in tool-execution.js).
99
- const _getToolDef = InteractiveMode.prototype.getRegisteredToolDefinition;
100
- InteractiveMode.prototype.getRegisteredToolDefinition = function (toolName) {
101
- const original = _getToolDef.call(this, toolName);
102
- if (original)
103
- return original;
104
- return getCompactToolDefinition(toolName);
105
- };
91
+ // InteractiveMode patches only needed for terminal UI, skip in headless mode
92
+ if (!headless) {
93
+ // Suppress pi's generic "No models available" warning — our dcl-setup-ollama
94
+ // extension shows a more helpful message that mentions /setup-ollama.
95
+ const _showWarning = InteractiveMode.prototype.showWarning;
96
+ InteractiveMode.prototype.showWarning = function (msg) {
97
+ if (msg.startsWith("No models available"))
98
+ return;
99
+ _showWarning.call(this, msg);
100
+ };
101
+ // Suppress pi's "What's New" changelog notification on startup — it shows pi's
102
+ // own version/changes, which confuses OpenDCL users.
103
+ InteractiveMode.prototype.getChangelogForDisplay = function () {
104
+ return undefined;
105
+ };
106
+ // Override pi's built-in /changelog command it shows pi's CHANGELOG.md,
107
+ // not OpenDCL's. The command is hardcoded in handleEditorSubmit before extension
108
+ // commands, so monkey-patching is the only way to intercept it.
109
+ const opendclVersion = JSON.parse(readFileSync(join(packageDir, "package.json"), "utf-8")).version;
110
+ InteractiveMode.prototype.handleChangelogCommand = function () {
111
+ this.showStatus(`OpenDCL v${opendclVersion}https://github.com/dcl-regenesislabs/opendcl/releases/tag/${opendclVersion}`);
112
+ };
113
+ // Compact tool output — override built-in write/read renderers to reduce terminal noise.
114
+ // When a built-in tool has no custom renderCall/renderResult, pi shows verbose output.
115
+ // By returning compact renderers from getRegisteredToolDefinition, the ToolExecutionComponent
116
+ // uses them instead (see shouldUseBuiltInRenderer() in tool-execution.js).
117
+ const _getToolDef = InteractiveMode.prototype.getRegisteredToolDefinition;
118
+ InteractiveMode.prototype.getRegisteredToolDefinition = function (toolName) {
119
+ const original = _getToolDef.call(this, toolName);
120
+ if (original)
121
+ return original;
122
+ return getCompactToolDefinition(toolName);
123
+ };
124
+ }
106
125
  main(args).catch((err) => {
107
126
  console.error("OpenDCL fatal error:", err);
108
127
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,15 +13,28 @@ import { join } from "node:path";
13
13
  import { fileExists, findSceneRoot } from "./scene-utils.js";
14
14
 
15
15
  const WORLDS_CONTENT_SERVER = "https://worlds-content-server.decentraland.org";
16
+ const BEVY_BASE = "https://decentraland.zone/bevy-web";
16
17
 
17
- async function hasWorldConfiguration(sceneRoot: string): Promise<boolean> {
18
+ interface SceneDeployInfo {
19
+ /** World name (e.g. "boedo.dcl.eth") — presence means it's a World deploy */
20
+ worldName?: string;
21
+ /** Base parcel (e.g. "30,30") for Genesis City */
22
+ baseParcel?: string;
23
+ }
24
+
25
+ async function getSceneDeployInfo(sceneRoot: string): Promise<SceneDeployInfo> {
18
26
  try {
19
27
  let content = await readFile(join(sceneRoot, "scene.json"), "utf-8");
20
28
  if (content.charCodeAt(0) === 0xfeff) content = content.slice(1);
21
29
  const sceneJson = JSON.parse(content);
22
- return Boolean(sceneJson.worldConfiguration?.name);
30
+ const worldName = sceneJson.worldConfiguration?.name;
31
+ if (worldName) {
32
+ return { worldName };
33
+ }
34
+ const baseParcel = sceneJson.scene?.base;
35
+ return { baseParcel };
23
36
  } catch {
24
- return false;
37
+ return {};
25
38
  }
26
39
  }
27
40
 
@@ -39,13 +52,14 @@ async function deployScene(
39
52
  return { message: "node_modules not found. Run 'npm install' first.", isError: true };
40
53
  }
41
54
 
42
- const isWorldDeploy = await hasWorldConfiguration(sceneRoot);
55
+ const deployInfo = await getSceneDeployInfo(sceneRoot);
56
+ const isWorld = Boolean(deployInfo.worldName);
43
57
  const deployArgs = ["@dcl/sdk-commands", "deploy"];
44
- if (isWorldDeploy) {
58
+ if (isWorld) {
45
59
  deployArgs.push("--target-content", WORLDS_CONTENT_SERVER);
46
60
  }
47
61
 
48
- const targetLabel = isWorldDeploy ? "World" : "Genesis City";
62
+ const targetLabel = isWorld ? "World" : "Genesis City";
49
63
 
50
64
  try {
51
65
  const result = await pi.exec("npx", deployArgs, {
@@ -54,7 +68,14 @@ async function deployScene(
54
68
  });
55
69
 
56
70
  if (result.code === 0) {
57
- return { message: `Scene deployed to ${targetLabel} successfully!` };
71
+ let visitUrl: string | undefined;
72
+ if (deployInfo.worldName) {
73
+ visitUrl = `${BEVY_BASE}?realm=${deployInfo.worldName}`;
74
+ } else if (deployInfo.baseParcel) {
75
+ visitUrl = `${BEVY_BASE}?position=${deployInfo.baseParcel}`;
76
+ }
77
+ const urlLine = visitUrl ? `\nVisit: ${visitUrl}` : "";
78
+ return { message: `Scene deployed to ${targetLabel} successfully!${urlLine}` };
58
79
  } else {
59
80
  return { message: `Deploy failed (exit code ${result.code}): ${result.stderr || result.stdout}`, isError: true };
60
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl-regenesislabs/opendcl",
3
- "version": "0.1.5-23161709858.commit-828c176",
3
+ "version": "0.1.5-23569259243.commit-df8937b",
4
4
  "description": "AI coding assistant for Decentraland SDK7 scene development",
5
5
  "type": "module",
6
6
  "bin": {
@@ -67,5 +67,5 @@
67
67
  "prompts/",
68
68
  "context/"
69
69
  ],
70
- "commit": "828c176b27aa3da4e6eeebd001e2434c1df161fe"
70
+ "commit": "df8937b560bcf480c9efe51eaa38234a19e55081"
71
71
  }
@@ -65,14 +65,12 @@ This will prompt the user to sign the deployment with their wallet. Validations
65
65
 
66
66
  ## 3. Access the World
67
67
 
68
- Once deployed, the World is accessible at:
68
+ After a successful deploy, the `/deploy` command outputs a visit URL automatically. The World is also accessible at:
69
69
 
70
70
  ```
71
- decentraland://?realm=NAME.dcl.eth
71
+ https://decentraland.zone/bevy-web?realm=NAME.dcl.eth
72
72
  ```
73
73
 
74
- Replace `NAME` with the Decentraland NAME or ENS domain used for deployment.
75
-
76
74
  From inside Decentraland, use the chatbox command:
77
75
  ```
78
76
  /goto NAME.dcl.eth