Files
paseo/REPORT-daemon-e2e-audit.md
Mohamed Boudra 3459354e45 Add daemon E2E test coverage audit report
Created REPORT-daemon-e2e-audit.md with comprehensive analysis:
- Current test coverage: 5 passing tests (Codex provider)
- DaemonClient API coverage: 11/16 methods tested
- Message protocol coverage: 6/15 inbound, 5/17 outbound
- Prioritized recommendations for additional tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 17:33:23 +07:00

7.4 KiB

Daemon E2E Test Coverage Audit

Date: 2025-12-25 Test File: packages/server/src/server/daemon.e2e.test.ts

Test Run Summary

5 passed, 2 skipped in 40.8s

All active tests pass. The 2 skipped tests are Claude permission flow tests (documented issue with Claude SDK behavior in daemon context).


Current Test Coverage

Test: creates agent and receives response

  • Provider: Codex
  • Coverage:
    • createAgent() → creates agent, returns AgentSnapshotPayload
    • sendMessage() → sends text message to agent
    • waitForAgentIdle() → waits for agent to complete
    • Verifies agent_state message with status: "idle"
    • Verifies agent_stream events: turn_started, turn_completed, timeline (assistant_message)

Test: permission flow: Codex > approves permission and executes command

  • Provider: Codex
  • Coverage:
    • waitForPermission() → receives permission_requested event
    • respondToPermission() → sends allow response
    • Verifies permission_resolved event with behavior: "allow"
    • Verifies timeline has tool_call with status: "granted"
    • Verifies file system side-effect (file created)

Test: permission flow: Codex > denies permission and prevents execution

  • Provider: Codex
  • Coverage:
    • waitForPermission() → receives permission_requested event
    • respondToPermission() → sends deny response with message
    • Verifies permission_resolved event with behavior: "deny"
    • Verifies timeline has tool_call with status: "denied"
    • Verifies file system side-effect (file NOT created)

Test: persistence flow > persists and resumes Codex agent

  • Provider: Codex
  • Coverage:
    • Agent creation and messaging
    • deleteAgent() → deletes active agent
    • Verifies agent_deleted event
    • resumeAgent(handle) → resumes from persistence handle
    • Verifies resumed agent can receive messages
    • Verifies conversation context preserved

Test: multi-agent orchestration > parent agent creates child via agent-control MCP

  • Provider: Codex (parent and child)
  • Coverage:
    • Parent agent uses agent-control MCP to call create_agent
    • Verifies tool call in timeline: tool: "create_agent", server: "agent-control"
    • Verifies both parent and child visible in agent_state messages
    • Verifies child agent ID extracted from tool output

Skipped: permission flow: Claude > approves/denies permission

  • Reason: Claude SDK doesn't request permissions in daemon context
  • Note: Direct claude-agent.test.ts permission tests pass; issue is daemon-specific

DaemonClient API Coverage

Method Tested Notes
connect() Used in beforeEach via createDaemonTestContext()
close() Used in afterEach via cleanup()
createAgent() All tests
deleteAgent() Persistence test
listAgents() Not explicitly tested
listPersistedAgents() Not tested (Codex doesn't implement it)
resumeAgent() Persistence test
sendMessage() All tests
cancelAgent() Not tested
setAgentMode() Not tested
respondToPermission() Permission tests
waitForAgentIdle() All tests
waitForPermission() Permission tests
on() (event subscription) Not tested directly
getMessageQueue() Used for assertions
clearMessageQueue() Used to isolate test phases

Message Protocol Coverage

Inbound Messages (Client → Daemon)

Message Type Tested
create_agent_request
delete_agent_request
send_agent_message
agent_permission_response
resume_agent_request
cancel_agent_request
set_agent_mode
list_persisted_agents_request
refresh_agent_request
initialize_agent_request
git_diff_request
file_explorer_request
git_repo_info_request
clear_agent_attention
list_provider_models_request

Outbound Messages (Daemon → Client)

Message Type Tested
agent_state
agent_stream (partial - timeline, turn events, permissions)
session_state (received but not explicitly verified)
agent_deleted
agent_permission_request
agent_permission_resolved
list_persisted_agents_response
status
activity_log
assistant_chunk
audio_output (realtime mode)
transcription_result (realtime mode)
artifact
conversation_loaded
git_diff_response
file_explorer_response
git_repo_info_response
list_provider_models_response

Agent Provider Coverage

Provider Basic Flow Permissions Persistence Multi-agent
Codex
Claude ⏸️ (skipped)

Coverage Gaps & Recommendations

Priority 1: High Value / Low Effort

  1. cancelAgent() test

    • Cancel an agent mid-execution
    • Verify agent stops and reaches idle/error state
    • Currently untested DaemonClient method
  2. setAgentMode() test

    • Create agent in one mode, switch to another
    • Verify mode change reflected in agent state
    • Currently untested DaemonClient method
  3. listAgents() test

    • Connect client, call listAgents()
    • Verify session_state returns current agents
    • Currently the method exists but is never called in tests

Priority 2: Provider Parity

  1. Claude basic flow test

    • Currently no passing Claude tests
    • Add simple "creates agent and receives response" for Claude
    • Investigate why Claude permissions behave differently in daemon
  2. Claude persistence test

    • Resume Claude agent from persistence handle
    • Verify conversation context preserved

Priority 3: Edge Cases

  1. Error handling test

    • Agent encounters error during execution
    • Verify error state, lastError field populated
    • Verify recovery (can send new message after error)
  2. Connection handling test

    • Reconnect after disconnect
    • Multiple simultaneous clients
    • Rate limiting/timeout behavior
  3. Message ordering test

    • Send multiple messages rapidly
    • Verify ordering preserved
    • Verify no race conditions

Priority 4: Feature Coverage (Lower Priority)

  1. Image attachment test

    • sendMessage() with images option
    • Requires multimodal agent support
  2. Git integration tests

    • git_diff_request/response
    • git_repo_info_request/response
    • Requires git repository setup
  3. File explorer tests

    • file_explorer_request/response
    • Navigate filesystem via daemon

Summary

Current coverage: Core happy-path scenarios for Codex agents (create, message, permission, persistence, multi-agent).

Gaps:

  • No Claude provider tests pass (permissions issue)
  • Several DaemonClient methods untested (cancelAgent, setAgentMode, listAgents)
  • No error/edge case testing
  • No tests for auxiliary features (git, file explorer, models)

Recommendation: Focus on Priority 1 & 2 items before expanding to edge cases. The Claude permission investigation should be a separate task as it involves SDK behavior analysis.