
Nexu E2e Test
Use when verifying OpenClaw gateway fixes end-to-end, testing skill loading after...
Install
npx skills add nexu-io/nexu --skill nexu-e2e-test -g -a claude-code -y- Repository
- nexu-io/nexu3.3k
- Category
- Testing
- Updated
- 6mo ago
- License
- MIT
- Context cost
- Mediumabout 1,617 tokens
- Runs scripts
- No, instructions only
What it does
Use when verifying OpenClaw gateway fixes end-to-end, testing skill loading after restart, or running integration tests against the local Nexu+OpenClaw stack. Triggers on "e2e test", "verify fix", "test gateway", "test skills loading".
Nexu E2E Testing, OpenClaw Gateway
Run end-to-end verification of the Nexu → OpenClaw gateway stack locally.
Known Constraints
The OpenClaw gateway has architectural constraints that block naive E2E approaches. Read this before attempting any gateway testing.
| Approach | Blocker | Status |
|---|---|---|
HTTP POST /v1/chat/completions | Endpoint exists (openai-http.ts) but uses agentCommand(), same embedded agent path as CLI, bypasses session store | Works for smoke tests (same as CLI) |
HTTP POST /v1/responses | Endpoint exists (openresponses-http.ts) but also uses agentCommand() | Works for smoke tests (same as CLI) |
WebSocket chat.send | Requires device pairing for operator.write scope, clearUnboundScopes() in message-handler.ts:483-488 clears all self-declared scopes without device identity | Dead end without device keys |
openclaw agent --session-id | Uses embedded agent path (sessionKey=unknown), bypasses session store cache | Works for smoke tests, NOT for session-store bugs |
| Direct module import from dist | Rollup bundles with hashed filenames, can't import individual modules | Dead end |
tsx from /tmp | Module resolution fails for imports outside project root | Dead end |
Vitest in-project .test.ts | Full module resolution, mocking, TypeScript support | Primary method |
Key insight: All HTTP and CLI approaches use the embedded agent path via agentCommand() (imported from commands/agent.js). Only messages arriving through connected channels (Slack/Discord) go through dispatchInboundMessage() → auto-reply pipeline → ensureSkillSnapshot(), which is the code path that uses the session store.


