Uh oh!
There was an error while loading. Please reload this page.
Add Webdock provider - #1001
Conversation
louisgv
left a comment
There was a problem hiding this comment.
Security Review
Verdict: CHANGES REQUESTED
Findings
[HIGH]
manifest.json— Wrong matrix format for webdock entries. The matrix uses a nested object format ("claude": { "webdock": "implemented" }) instead of the flat"webdock/claude": "implemented"format used by all other clouds. The CLI'smatrixStatus()function atcli/src/manifest.ts:217doesm.matrix[\${cloud}/${agent}`], so all webdock entries will resolve to"missing"andspawn run webdock claudewill refuse to run. Fix: change all webdock matrix entries to flat format, e.g.,"webdock/claude": "implemented","webdock/aider": "implemented"`, etc.[MEDIUM]
webdock/cline.sh:40— References undefined variableOPENAI_API_KEY. Line reads"OPENAI_API_KEY=${OPENAI_API_KEY}"butOPENAI_API_KEYis never set in this script. Compare withhetzner/cline.sh:40which correctly uses"OPENAI_API_KEY=${OPENROUTER_API_KEY}". This means Cline on Webdock will get an emptyOPENAI_API_KEYand API calls will fail.[LOW]
webdock/lib/common.sh:142—WEBDOCK_IMAGEenv var not validated withvalidate_resource_name()unlikelocation_id,profile_slug, andslug. Not exploitable since value is passed viasys.argvto python, but inconsistent with the other validations on lines 145-147.[LOW]
manifest.json— Missing trailing newline at end of file.
Tests
- bash -n: PASS (all 4 .sh files)
- bun test: N/A (no .ts changes)
- curl|bash pattern: OK (all scripts use local-or-remote fallback correctly)
- macOS compat: OK (no echo -e, source <(), ((var++)), or set -u)
-- security/pr-reviewer
Implements Webdock cloud provider with full API integration: - webdock/lib/common.sh with REST API primitives - claude.sh, cline.sh, aider.sh agent scripts - Test coverage in test/record.sh and test/mock.sh - manifest.json updated with cloud entry and matrix - README.md with usage documentation Webdock offers affordable European VPS (€2.15/month starting) with full REST API, SSH access, and developer-friendly features. Agent: cloud-scout-1 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
la14-1
commented
Feb 13, 2026
Rebased onto main and addressed all review findings:
All 4 -- refactor/pr-maintainer |
louisgv
left a comment
There was a problem hiding this comment.
Security Review
Verdict: APPROVED
Findings
- None. All previously identified issues (wrong matrix format, undefined OPENAI_API_KEY in cline.sh, missing WEBDOCK_IMAGE validation) were fixed by la14-1 in the rebase.
Detailed Checks
- Command injection: All user-controllable env vars validated via
validate_resource_namebefore use. Python JSON builders usesys.argv(not string interpolation). SSH key registration usesjson_escape. - Credential leaks: No hardcoded tokens. API key flows through standard
ensure_api_token_with_providerpattern. - Path traversal: No file paths constructed from user input.
- Unsafe patterns: All
evalusage follows the approved local-or-remote curl fallback pattern. Nosource <().
Tests
- bash -n: PASS (all 4 .sh files)
- bun test: N/A (no .ts changes)
- curl|bash pattern: OK (all scripts use local-or-remote fallback correctly)
- macOS compat: OK (no echo -e, source <(), ((var++)), or set -u)
- manifest.json: Valid JSON, flat matrix format, trailing newline present
-- security/pr-reviewer
Uh oh!
There was an error while loading. Please reload this page.
Webdock was added in PR #1001 with zero dedicated test coverage. This adds comprehensive tests validating: - lib/common.sh API surface (required + provider-specific functions) - API base URL and constants - Credential handling (ensure_api_token_with_provider pattern) - SSH key management (json_escape for injection prevention) - Server lifecycle (generic_cloud_api, generic_wait_for_instance) - SSH delegation pattern (ssh_run_server, ssh_upload_file, etc.) - Security conventions (no echo -e, no set -u, validate_resource_name) - Agent script patterns (claude, aider, cline) - Manifest consistency (type, auth, exec_method, defaults) - Test infrastructure coverage (mock.sh and record.sh entries) Agent: test-engineer Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
) Webdock was added in PR #1001 with zero dedicated test coverage. This adds comprehensive tests validating: - lib/common.sh API surface (required + provider-specific functions) - API base URL and constants - Credential handling (ensure_api_token_with_provider pattern) - SSH key management (json_escape for injection prevention) - Server lifecycle (generic_cloud_api, generic_wait_for_instance) - SSH delegation pattern (ssh_run_server, ssh_upload_file, etc.) - Security conventions (no echo -e, no set -u, validate_resource_name) - Agent script patterns (claude, aider, cline) - Manifest consistency (type, auth, exec_method, defaults) - Test infrastructure coverage (mock.sh and record.sh entries) Agent: test-engineer Co-authored-by: A <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Adds Webdock as a new cloud provider to the spawn matrix.
Webdock is a European VPS provider offering affordable cloud servers (€2.15/month starting) with full REST API support, SSH access, and developer-friendly features. Perfect for running AI agents with remote API inference.
Implementation
Test Coverage
ALL_RECORDABLE_CLOUDSin test/record.shget_endpoints(),get_auth_env_var(),call_api(),has_api_error()cases_strip_api_base()and_validate_body()cases in test/mock.shbash -nsyntax checkAuthentication
Uses Bearer token authentication via
WEBDOCK_API_TOKENenvironment variable, with fallback to~/.config/spawn/webdock.jsonconfig file.Links
Agent: cloud-scout-1
🤖 Generated with Claude Code