sdd-agent-pack 1.3.5 → 1.3.6

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.
@@ -20,8 +20,13 @@ LLM Configuration:
20
20
  LLM_API_KEY — API key from your LLM provider
21
21
 
22
22
  Optional:
23
- LLM_MODEL — Model name (default: openrouter/anthropic/claude-sonnet-4-5-20250929)
24
- LLM_BASE_URL — Provider base URL
23
+ LLM_MODEL — Model name (default: openrouter/anthropic/claude-sonnet-4-5-20250929)
24
+ LLM_BASE_URL — Provider base URL
25
+ SANDBOX_VOLUMES — Mount host dirs into Docker sandbox (format: host:container[:mode])
26
+ Required when using --cloud (agent-server/sandbox mode) so
27
+ file changes persist on the host filesystem.
28
+ Example: SANDBOX_VOLUMES=$PWD:/workspace:rw
29
+ SANDBOX_USER_ID — Host user ID for sandbox file ownership (default: $(id -u))
25
30
 
26
31
  Examples:
27
32
  OpenRouter:
@@ -150,6 +155,22 @@ def run_epic(epic: dict, use_cloud: bool) -> bool:
150
155
  print(" See .sdd-agent-pack/templates/env.example for all options.")
151
156
  return False
152
157
 
158
+ # Ensure the sandbox can access the local project directory.
159
+ # In local (SDK) mode the Conversation(workspace=cwd) creates a
160
+ # LocalWorkspace that runs subprocesses directly on the host, so
161
+ # file changes persist automatically.
162
+ #
163
+ # When --cloud is used the agent runs in a remote Docker sandbox.
164
+ # In that case SANDBOX_VOLUMES mounts the host project into the
165
+ # container's /workspace so agent file changes survive.
166
+ if use_cloud:
167
+ sandbox_volumes = os.getenv(
168
+ "SANDBOX_VOLUMES",
169
+ f"{os.getcwd()}:/workspace:rw",
170
+ )
171
+ os.environ.setdefault("SANDBOX_VOLUMES", sandbox_volumes)
172
+ os.environ.setdefault("SANDBOX_USER_ID", str(os.getuid()))
173
+
153
174
  llm = LLM(
154
175
  model=model,
155
176
  api_key=api_key,
@@ -155,6 +155,14 @@ Instructions:
155
155
  8. Do NOT work on any other epic"
156
156
 
157
157
  echo "Starting OpenHands (headless)..."
158
+
159
+ # Mount the current directory into the Docker sandbox container so
160
+ # agent file changes persist on the host filesystem.
161
+ # SANDBOX_VOLUMES — mounts $PWD into the container's /workspace (rw)
162
+ # SANDBOX_USER_ID — ensures created files have host-user ownership
163
+ export SANDBOX_VOLUMES="$PWD:/workspace:rw"
164
+ export SANDBOX_USER_ID="${SANDBOX_USER_ID:-$(id -u)}"
165
+
158
166
  if $OPENHANDS_CMD --headless --override-with-envs -t "$prompt" 2>&1; then
159
167
  echo ""
160
168
  echo "✓ [$current/$total] Epic completed: $epic"
@@ -5,6 +5,8 @@
5
5
  #
6
6
  # Get your OpenRouter API key: https://openrouter.ai/keys
7
7
 
8
+ # ── LLM Configuration ──────────────────────────────────────────────
9
+
8
10
  # Your API key from the LLM provider
9
11
  LLM_API_KEY=sk-or-paste-your-api-key-here
10
12
 
@@ -14,3 +16,17 @@ LLM_MODEL=openrouter/free
14
16
 
15
17
  # OpenRouter API base URL
16
18
  LLM_BASE_URL=https://openrouter.ai/api/v1
19
+
20
+ # ── Sandbox / Workspace Persistence ────────────────────────────────
21
+ #
22
+ # The orchestrate.sh script uses openhands --headless, which spawns a
23
+ # Docker sandbox container. Without a volume mount the agent's file
24
+ # changes are lost when the container exits.
25
+ #
26
+ # Setting SANDBOX_VOLUMES mounts the host project directory into the
27
+ # sandbox container's /workspace so all file changes persist on the
28
+ # host filesystem. Both scripts set a sensible default automatically,
29
+ # but you can override it here:
30
+
31
+ # SANDBOX_VOLUMES="$PWD:/workspace:rw"
32
+ # SANDBOX_USER_ID="$(id -u)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-agent-pack",
3
- "version": "1.3.5",
3
+ "version": "1.3.6",
4
4
  "description": "Lightweight installer for SDD workflow assets into application repositories",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",