Install any skill in seconds. Free to start, no credit card required.
Get Started Free →nexu-io/nexu-e2e-test
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".
Passed 20 of 22 test cases with the skill, and 6 of 22 without it.
and 23 more in the full report
15 fixed6 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 14 test cases the skill fixed. Same model, same prompt, with and without the skill.
Which internal source file in OpenClaw contains the unit tests for skill refresh watcher and snapshot logic?
| Checked | Without skill | With skill |
|---|---|---|
| Identifies the test path src/agents/skills/refresh.test.ts. | Missed | Passed |
The instructions your model reads when the skill loads.
Run end-to-end verification of the Nexu → OpenClaw gateway stack locally.
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.
Write .test.ts files inside the OpenClaw worktree and run with vitest. This is the only reliable way to test internal functions like ensureSkillsWatcher, getSkillsSnapshotVersion, ensureSkillSnapshot.
cd <OPENCLAW_WORKTREE>
OPENCLAW_TEST_FAST=1 npx vitest run src/agents/skills/refresh.test.ts
Key patterns:
chokidar with vi.mock("chokidar", ...)await import("./refresh.js") for dynamic imports after mocking/tmp/test-<name>-${Date.now()})OPENCLAW_TEST_FAST=1 skips filesystem scanning in session-updatesopenclaw agent CLI or HTTP Smoke TestsFor "do skills load after restart" verification. Does NOT test session-store caching logic (all use embedded agent path).
test cases passed, vs 6 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.