Spaces:
Paused
Paused
Commit History
-
fix: clear stale default model when provider API key is missing
God/Home had openrouter/... as default model from backup but no OPENROUTER_API_KEY, causing all agent dispatches to fail with "No API key found for provider openrouter". Now detects when default model's provider has no API key and clears it, letting OpenClaw pick a working provider automatically. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>985bd7b
-
revert: restore token auth + dangerouslyDisableDeviceAuth=true
Password auth also fails — auto-pairing only grants operator.read. This is OpenClaw upstream bug (openclaw/openclaw#22226, #17187). The A2A bridge correctly implements the full WS protocol but cannot get operator.write scope through any auth method. Reverting to the working config. A2A dispatch falls back to direct LLM API calls via conversation-loop.py's call_llm_fallback(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>23598bb -
fix: use password auth instead of token auth to preserve scopes
OpenClaw 2026.3.12 security fix (GHSA-rqpp-rjj8-7wv8) clears all scopes on shared-token WebSocket connects when dangerouslyDisableDeviceAuth is true. Password auth + dangerouslyDisableDeviceAuth=false allows normal device auto-pairing with proper operator.write scopes for local connections. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>96fa819 -
fix: add localhost to allowedOrigins for A2A bridge WS connection
The A2A bridge connects via ws://127.0.0.1:7860 which OpenClaw validates against controlUi.allowedOrigins. Added localhost origins. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>250bde0 -
chore: remove JS scope patch — doesn't match OpenClaw 2026.3.13
The minified JS pattern changed in this version, making community patch from #17187 ineffective. A2A dispatch scope issue is an upstream OpenClaw bug. conversation-loop.py falls back to direct LLM API calls when A2A dispatch fails, keeping Adam/Eve communication working. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>0ea6bf4 -
fix: precise JS patch — only gateway-cli with !device context match
Previous patch was too broad — replaced scopes=[] in ALL JS files, breaking doctor-config-flow (TypeError: Cannot read 'groups'). Now: only patches gateway-cli-*.js files, and only when scopes=[] appears inside an if(!device) block (the exact bug pattern from #17187). Also reverted auth.mode=none back to auth.token. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>9f7b4f1 -
fix: use gateway.auth.mode=none to bypass scope issue for A2A
With auth.mode=none, OpenClaw doesn't require scopes for internal dispatch, solving the A2A operator.write issue (openclaw#22226 workaround). External auth is handled by token-redirect.cjs preload which intercepts all requests on port 7860 before they reach OpenClaw. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>38506a9 -
fix: disable dangerouslyDisableDeviceAuth to restore proper scope grants
dangerouslyDisableDeviceAuth=true forces device=null which clears ALL scopes, breaking A2A dispatch. Setting it to false allows normal device auto-pairing which grants operator.read+write scopes correctly. The JS scope patch from #17187 was applied but the scope check may have moved in OpenClaw 2026.3.13. Using proper auto-pairing instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>157e06d -
fix: broaden scope patch search across all dist/*.js files
The gateway-cli-*.js pattern didn't match — OpenClaw 2026.3.13 may have different file names. Search all JS files in dist/ recursively. Also added diagnostic logging to find which files contain the device/scopes pattern. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>aaf0dce -
fix: patch OpenClaw scope-clearing bug for A2A dispatch (#17187)
When dangerouslyDisableDeviceAuth=true, OpenClaw's gateway-cli JS sets device=null then clears ALL scopes to []. This breaks A2A gateway dispatch which requires operator.write. Patch the compiled JS files at startup to replace scopes=[] with full operator scopes, matching the community workaround from issue #17187. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2e04f91 -
fix: pre-create device identity with operator.write for A2A dispatch
OpenClaw auto-pairing only grants operator.read, but A2A gateway dispatch requires operator.write (known issue openclaw/openclaw#22226). Pre-create device-auth.json and paired.json with full operator scopes before OpenClaw starts, matching the format described in the issue. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>99bd034 -
fix: treat A2A dispatch 'failed' state as error, use LLM fallback
A2A gateway returns 200 with state="failed" and "missing scope: operator.write". This was being treated as a valid response, causing the error text to appear as agent dialogue. Now: failed state triggers LLM fallback (direct Zhipu API call with agent persona), so Adam/Eve can communicate even when A2A dispatch lacks proper scopes. Also cleaned up invalid device pre-creation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>f060852 -
fix: pre-create device with operator scopes for A2A dispatch
The A2A gateway dispatch requires operator.write scope but inboundAuth=none doesn't grant any scopes. Pre-creating a device file with the gateway token and operator.read/write scopes may allow authenticated A2A requests to dispatch. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>b41db96 -
fix: try routing.grantScopes for A2A operator.write
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2064383 -
fix: use inboundAuth=bearer for A2A (valid values: none, bearer)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>a3c0836 -
fix: try inboundAuth=token for A2A scope grants, revert invalid keys
anonymousScopes and acp.dispatch.grantScopes are not valid OpenClaw keys. Try inboundAuth=token instead of none — token auth may grant operator scope. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1945c59 -
fix: try auth.anonymousScopes and acp dispatch.grantScopes for operator.write
A2A dispatch fails with "missing scope: operator.write". Trying: 1. auth.anonymousScopes to grant operator scopes to unauthenticated requests 2. acp.dispatch.grantScopes for dispatch-level scope grants If these keys are invalid, OpenClaw will report them and we can iterate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>fa1cc66 -
fix: remove invalid a2a-gateway scopes config, fix OPENCLAW_DIR typo
- Remove scopes from a2a-gateway security (invalid property crashes OpenClaw) - Fix OPENCLAW_DIR → OPENCLAW_HOME (NameError on startup) - Add Authorization header to A2A requests (gateway token for operator scope) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>c92644d -
fix: revert defaultScope crash, try scopes in a2a-gateway security
gateway.auth.defaultScope is not a valid OpenClaw config key — caused RUNTIME_ERROR on all spaces. Moved scope config to a2a-gateway plugin security section instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>d17042a -
fix: A2A protocol — correct endpoint, method, payload, and auth scope
Three issues preventing Adam/Eve communication: 1. Wrong endpoint: /a2a/ → /a2a/jsonrpc (OpenClaw's actual route) 2. Wrong method: tasks/send → message/send (A2A protocol v0.3) 3. Wrong payload: missing messageId, parts use "kind" not "type" 4. Missing scope: gateway auth needs defaultScope with operator.write for A2A dispatch to work Also updated response parsing to handle both old (artifacts) and new (status.message.parts) A2A response formats. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>c3ded60 -
fix: always enable a2a-gateway plugin — Adam/Eve couldn't receive messages
Root cause: a2a-gateway plugin was only added to plugin_allow when A2A_PEERS env var was set. Adam/Eve spaces didn't have A2A_PEERS, so the gateway never loaded, port 18800 had nothing listening, and all A2A calls from conversation-loop returned 404. - Always include a2a-gateway in plugin_allow list - Always configure a2a-gateway server (port 18800) regardless of peers - Peers remain optional (for outbound connections) This is why the chatroom only showed God's messages — Adam/Eve never received or responded to any A2A requests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>7691726
-
fix: stop overriding OpenClaw provider config — pass all env vars through
sync_hf.py was hardcoding a provider registry and overwriting models.providers on every startup, blocking OpenClaw's native env var support. Users setting NVIDIA_API_KEY or other provider keys got no effect because the code didn't know about them. Now HuggingClaw acts as a transparent deployment layer: - Removed PROVIDER_REGISTRY and all per-provider if/else blocks - Removed redundant env var pass-through (os.environ.copy() already includes everything) - Only clean up stale providers from dataset backup (keys no longer in environment) - Let OpenClaw handle provider discovery from env vars natively Fixes #2 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>29370f7
-
refactor: separate orchestrator from frontend — RUN_ORCHESTRATOR env var
conversation-loop.py is now launched by RUN_ORCHESTRATOR=1 (not OFFICE_MODE). - Home Space: OFFICE_MODE=1 (frontend only, no orchestrator) - God Space: RUN_ORCHESTRATOR=1 (runs conversation-loop.py) This means Home no longer self-modifies — God Space pushes to Home from the outside, which should not trigger abuse detection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>6a122fb
-
feat: migrate all Claude Code invocations to ACP protocol via acpx
All Claude Code calls now go through ACP (Agent Client Protocol) using acpx as the backend, replacing direct CLI invocations. This includes conversation-loop.py, coding-agent extension, and infrastructure config. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9d3acbc
-
fix: use --user flag for pip install (non-root container)
Container runs as node user, not root. pip install without --user can't write to system site-packages. Also log pip result for debugging. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>5c981dd -
fix: install requests at runtime before launching conversation-loop
Dockerfile layer cache may not pick up the new dependency. Install requests via pip at runtime as a fallback to guarantee availability. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f532fc8 -
feat: run conversation-loop on Home Space cloud + CONFIG_ERROR fixes
- sync_hf.py: auto-launch conversation-loop.py on OFFICE_MODE=1 (Home Space) with 60s startup delay, auto-restart on crash, graceful shutdown - conversation-loop.py: add claude_code action for Claude Code CLI integration - conversation-loop.py: fix CONFIG_ERROR not clearing write dedup, cooldown, and state transitions (was only handling RUNTIME_ERROR/BUILD_ERROR) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>acab3db -
feat: integrate Claude Code as coding-agent backend (z.ai/Zhipu GLM)
Replace custom HF API tools with Claude Code CLI sub-agent. The extension now spawns `claude -p` with ANTHROPIC_BASE_URL=api.z.ai to autonomously clone, analyze, fix, and push code changes to HF Spaces. - Dockerfile: install @anthropic-ai/claude-code globally - index.ts: 3 tools (claude_code, hf_space_status, hf_restart_space) - sync_hf.py: add ZAI_API_KEY env var passthrough - plugin.json: add zaiApiKey config field, bump to v2.0.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d653b4e -
feat: add coding-agent OpenClaw extension with 8 HF Space tools
New extension at extensions/coding-agent/ that registers tools directly into OpenClaw's agent runtime, giving Adam & Eve real coding capabilities: Tools registered: - hf_read_file: Read files from Space/Dataset - hf_write_file: Write files with auto Python syntax validation - hf_delete_file: Delete files from repos - hf_list_files: List all files in a repo - hf_space_status: Check Space health/stage - hf_restart_space: Restart the target Space - hf_search_code: Grep-like regex search across code files - python_syntax_check: Validate Python syntax before committing Key features: - Python .py files are syntax-checked BEFORE writing (prevents the blind-write-then-wait-for-build-failure loop) - Configured via CODING_AGENT_TARGET_SPACE/DATASET env vars - Follows A2A gateway extension pattern (registerTool API) Also adds: - workspace-templates/ with IDENTITY.md and SOUL.md for coding agent behavior (deployed on first boot if workspace files are default) - Dockerfile updated to COPY ex…b44dfca -
fix: delete devices dir to force fresh auto-pair, skip error replies
- Delete ~/.openclaw/devices/ on startup to force fresh auto-pair with operator.write/read scopes (fixes A2A dispatch error) - Conversation loop now checks task state=failed and skips errors - Force rebuild (v3.9) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1e3d376 -
fix: patch paired device scopes for OpenClaw 2026.2.19+ compatibility
- Add operator.write and operator.read to paired devices on startup - Fixes 'missing scope: operator.write' A2A dispatch error - Known OpenClaw bug: auto-pair doesn't grant new scopes (issue #23006) - Force rebuild (v3.8) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d865e6e -
fix: clean up invalid auth.defaultScope from persisted config
- Remove auth.defaultScope and gateway.auth.scope on startup - These keys were synced to dataset backup and crash OpenClaw - Force rebuild (v3.7) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b17d83b -
fix: revert invalid OpenClaw config keys causing RUNTIME_ERROR
- Remove auth.defaultScope and gateway.auth.scope (unrecognized by OpenClaw) - Remove security.scope from A2A gateway config - These caused "Config invalid" crash on all Spaces - Force rebuild (v3.6) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9da0d8a -
fix: add operator scope to gateway auth and A2A security config
- Add scope: operator to gateway.auth to fix 'missing scope: operator.write' - Add scope: operator to A2A gateway security.scope - Add auth.defaultScope: operator for fallback - Force Docker rebuild (v3.5) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ff25d4f -
fix: reduce verbose logging to prevent HF Spaces log viewer crashes
- Suppress huggingface_hub progress bars and verbose download logs - Remove per-file upload listing (just show summary count) - Remove per-file dataset verification listing - Reduce file tree debug to count only - Filter OpenClaw process output: skip download/progress noise, forward key lines only - All output still goes to log file for debugging2f79e09
-
Upload scripts/sync_hf.py with huggingface_hub
Verified signature2778fda -
Upload scripts/sync_hf.py with huggingface_hub
Verified signaturef18a4b6 -
feat: add A2A gateway support (activated by A2A_PEERS env var)
- Add openclaw-a2a-gateway extension to Dockerfile - Add a2a-proxy.cjs for port routing (7860 proxy → 7861 OpenClaw, 18800 A2A) - Modify sync_hf.py: port 7861, A2A config only when A2A_PEERS is set - No impact when A2A_PEERS is not set (proxy transparently forwards)8ee58f9 -
Revert "feat: add pixel animation homepage with Express proxy layer"
This reverts commit 6cf74294015c25e76d77e66dfb929c3fb8ed5a2d.86b44f8
-
feat: add pixel animation homepage with Express proxy layer
- Add Star-Office-UI pixel animation as the default homepage (/) - Create Express proxy (proxy.cjs) on port 7860, OpenClaw moves to 7861 - Admin panel accessible via /admin with auto token injection - State bridge maps OpenClaw status to animation states - Frontend assets cloned from Star-Office-UI during Docker build - Add A2A gateway plugin support in Dockerfile and config - Prepare multi-agent infrastructure (peer polling, guest rendering) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>6cf7429
-
fix: switch Zhipu provider to Anthropic-compatible endpoint
The OpenAI-compatible endpoint (paas/v4) returns "insufficient balance" but the Anthropic-compatible endpoint (open.bigmodel.cn/api/anthropic) works. Updated api type to "anthropic-messages" and new API key set. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>3227ad9 -
fix: update Zhipu AI model IDs to current API lineup
Replace deprecated glm-4-flash/plus/long with actual available models: glm-4.5-air, glm-4.5, glm-4.6, glm-4.7, glm-5 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ae76fba -
fix: add required models array to zhipu provider config
df4b021 -
fix: rebuild providers from scratch on each startup
Prevents stale providers (e.g. openrouter with deleted key) from persisting via dataset backup. Also removes hardcoded model list from zhipu provider — let OpenClaw discover models dynamically. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>e3478dc -
feat: add Zhipu AI (z.ai) as a native LLM provider
- Read ZHIPU_API_KEY from environment - Configure Zhipu provider with GLM-4 models (flash/plus/long) - Auto-select glm-4-flash as default when Zhipu is the only provider - Pass ZHIPU_API_KEY through to OpenClaw process Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>306fbc6
-
fix: remove tao-shen/HuggingClaw-data refs to prevent unwanted linked spaces
tao-shen +1: Claude Opus 4.6HF scans README content to detect dataset references, causing duplicated Spaces to appear as "linked" to the original dataset. Replace all specific dataset repo names with generic examples and remove huggingface-dataset tag. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>750878a -
test: revert dataset derivation to observe linked spaces behavior
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>8c4d233 -
fix: restore OPENCLAW_DATASET_REPO priority over SPACE_ID derivation
Revert to original logic: user-specified OPENCLAW_DATASET_REPO takes priority. SPACE_ID auto-derivation is only used as fallback. This restores the linked-spaces association on the dataset page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>7728a08 -
fix: always derive dataset from SPACE_ID, ignore OPENCLAW_DATASET_REPO on HF
When running on HF Spaces (SPACE_ID is set), always use {SPACE_ID}-data as the dataset name. This prevents duplicated Spaces from inheriting the original's dataset via copied secrets. OPENCLAW_DATASET_REPO is only used for local Docker without SPACE_ID. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>419ff91 -
fix: revert to token auth with default "huggingclaw"
auth.mode=none crashes on non-loopback bind. Revert to token mode with GATEWAY_TOKEN env var (default: huggingclaw). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>5a096f1