nexu-e2e-test
Installation
SKILL.md
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.