{
  "timestamp": "2026-07-11T20:50:16.440Z",
  "passed": 25,
  "failed": 37,
  "skipped": 37,
  "results": [
    {
      "name": "GET /health returns 200 with status ok",
      "status": "pass",
      "ms": 12
    },
    {
      "name": "GET /status returns server info",
      "status": "fail",
      "ms": 78,
      "error": "false == true"
    },
    {
      "name": "GET /nonexistent returns 404",
      "status": "pass",
      "ms": 16
    },
    {
      "name": "GET /agents returns array with expected agents",
      "status": "fail",
      "ms": 7,
      "error": "hello agent missing — found: assistant, coder, planner, qwen, studio-assistant, cc-fable, cc-haiku, cc-opus, cc-sonnet, gpt-5"
    },
    {
      "name": "GET /agents/:name returns agent details for hello",
      "status": "fail",
      "ms": 5,
      "error": "Expected 200, got 404: {\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"hello\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\\n  /home/ixi/.veil/agents/hello\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\"}}\n\n404 !== 200\n"
    },
    {
      "name": "GET /agents/:name returns 404 for unknown agent",
      "status": "pass",
      "ms": 3
    },
    {
      "name": "GET /agents/coder has task mode enabled",
      "status": "pass",
      "ms": 94
    },
    {
      "name": "GET /agents/hello has chat mode enabled",
      "status": "fail",
      "ms": 5,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /agents/:name/sessions returns sessions scoped to agent",
      "status": "pass",
      "ms": 7
    },
    {
      "name": "GET /agents/:name/tasks returns tasks scoped to agent",
      "status": "fail",
      "ms": 4,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /agents/:name/skills returns skills listing",
      "status": "fail",
      "ms": 2,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /agents/:name/skills returns 404 for unknown agent",
      "status": "pass",
      "ms": 2
    },
    {
      "name": "POST /agents/hello/chat returns a response",
      "status": "fail",
      "ms": 18,
      "error": "Expected 200, got 404: {\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"hello\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\\n  /home/ixi/.veil/agents/hello\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Chat response contains non-empty text",
      "status": "fail",
      "ms": 6,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"hello\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\\n  /home/ixi/.veil/agents/hello\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Chat with hello agent returns sessionId",
      "status": "fail",
      "ms": 6,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Chat with unknown agent returns 404",
      "status": "pass",
      "ms": 4
    },
    {
      "name": "Chat with empty message returns 400",
      "status": "pass",
      "ms": 6
    },
    {
      "name": "Chat returns tokenUsage object",
      "status": "fail",
      "ms": 3,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Multi-turn chat: second message continues same session",
      "status": "fail",
      "ms": 4,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"hello\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\\n  /home/ixi/.veil/agents/hello\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/hello\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Multi-turn chat: session messages are stored and retrievable",
      "status": "fail",
      "ms": 4,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Multi-turn chat: using closed session returns 400",
      "status": "fail",
      "ms": 25,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Sessions list endpoint works",
      "status": "pass",
      "ms": 9
    },
    {
      "name": "Writer agent: generates a short poem on demand",
      "status": "fail",
      "ms": 5,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"writer\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\\n  /home/ixi/.veil/agents/writer\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Writer agent: writes a short story opening",
      "status": "fail",
      "ms": 4,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"writer\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\\n  /home/ixi/.veil/agents/writer\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Writer agent: summarizes a text",
      "status": "fail",
      "ms": 3,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"writer\\\" not found. Looked in:\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\\n  /home/ixi/.veil/agents/writer\\n  /home/ixi/khacloud/drive/Plugins/VeilCli/.veil/agents/writer\"}}\n\n404 !== 200\n"
    },
    {
      "name": "Task create returns 202 with taskId",
      "status": "fail",
      "ms": 4,
      "error": "Expected 202, got 404: {\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"No route: POST /agents/hello/task\"}}\n\n404 !== 202\n"
    },
    {
      "name": "GET /tasks/:id returns 404 for unknown task",
      "status": "fail",
      "ms": 3,
      "error": "Expected values to be strictly equal:\n+ actual - expected\n\n+ 'NOT_FOUND'\n- 'TASK_NOT_FOUND'"
    },
    {
      "name": "GET /tasks returns list",
      "status": "fail",
      "ms": 2,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Task create with unknown agent returns 404",
      "status": "fail",
      "ms": 4,
      "error": "Expected values to be strictly equal:\n+ actual - expected\n\n+ 'NOT_FOUND'\n- 'AGENT_NOT_FOUND'"
    },
    {
      "name": "Task cancellation works",
      "status": "fail",
      "ms": 3,
      "error": "Expected values to be strictly equal:\n\n404 !== 202\n"
    },
    {
      "name": "Task list filtering by agent works",
      "status": "fail",
      "ms": 309,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Task list filtering by status works",
      "status": "fail",
      "ms": 2,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /sessions/:id returns correct session data",
      "status": "fail",
      "ms": 2,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "DELETE /sessions/:id closes the session",
      "status": "fail",
      "ms": 7,
      "error": "Cannot read properties of undefined (reading 'status')"
    },
    {
      "name": "GET /sessions/:id returns 404 for unknown session",
      "status": "pass",
      "ms": 2
    },
    {
      "name": "Assistant chat: uses read_file to answer a question",
      "status": "pass",
      "ms": 3912
    },
    {
      "name": "Assistant chat: uses list_dir to explore a directory",
      "status": "pass",
      "ms": 7296
    },
    {
      "name": "Assistant chat: uses bash to run a simple command",
      "status": "pass",
      "ms": 2719
    },
    {
      "name": "Assistant chat: uses grep to search across files",
      "status": "fail",
      "ms": 300717,
      "error": "fetch failed"
    },
    {
      "name": "POST /agents/:name/chat with missing message body returns 400",
      "status": "pass",
      "ms": 11
    },
    {
      "name": "POST /agents/:name/chat with non-string message returns 400",
      "status": "pass",
      "ms": 9
    },
    {
      "name": "POST /agents/analyst/task returns 400 for agent without chat mode",
      "status": "fail",
      "ms": 7,
      "error": "Expected values to be strictly equal:\n\n404 !== 400\n"
    },
    {
      "name": "POST /agents/hello/task with missing input returns 400",
      "status": "fail",
      "ms": 3,
      "error": "Expected values to be strictly equal:\n\n404 !== 400\n"
    },
    {
      "name": "Session messages include correct roles",
      "status": "fail",
      "ms": 8,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /tasks with limit parameter respected",
      "status": "fail",
      "ms": 6,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "Cancel a pending task immediately",
      "status": "fail",
      "ms": 4,
      "error": "{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"No route: POST /agents/hello/task\"}}\n\n404 !== 202\n"
    },
    {
      "name": "Task with tokenBudget field is accepted",
      "status": "fail",
      "ms": 5,
      "error": "Expected 202, got 404\n\n404 !== 202\n"
    },
    {
      "name": "GET /tasks/:id/context returns null for pending task",
      "status": "fail",
      "ms": 11,
      "error": "Expected values to be strictly equal:\n\n404 !== 200\n"
    },
    {
      "name": "GET /agents/:name/memory lists memory files",
      "status": "pass",
      "ms": 5
    },
    {
      "name": "PUT /agents/:name/memory/:file writes a memory file",
      "status": "pass",
      "ms": 4
    },
    {
      "name": "GET /agents/:name/memory/:file reads back written content",
      "status": "pass",
      "ms": 7
    },
    {
      "name": "GET /agents/:name/memory/:file returns 404 for missing file",
      "status": "pass",
      "ms": 5
    },
    {
      "name": "PUT /agents/:name/memory/:file rejects path traversal filenames",
      "status": "pass",
      "ms": 3
    },
    {
      "name": "DELETE /agents/:name/memory/:file removes the file",
      "status": "pass",
      "ms": 10
    },
    {
      "name": "Cleanup: remove test memory files",
      "status": "pass",
      "ms": 10
    },
    {
      "name": "GET /settings returns current settings with redacted api_key",
      "status": "pass",
      "ms": 5
    },
    {
      "name": "PUT /settings with invalid body returns 400 VALIDATION_ERROR",
      "status": "pass",
      "ms": 127
    },
    {
      "name": "GET /settings returns valid JSON structure",
      "status": "pass",
      "ms": 3
    },
    {
      "name": "Session creation persists compact_auto_threshold and compact_count from agent config",
      "status": "fail",
      "ms": 7,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"tester\\\" not found\"}}\n\n404 !== 201\n"
    },
    {
      "name": "Session without autoThreshold has null compact_auto_threshold",
      "status": "fail",
      "ms": 4,
      "error": "{\"error\":{\"code\":\"AGENT_NOT_FOUND\",\"message\":\"Agent \\\"hello\\\" not found\"}}\n\n404 !== 201\n"
    },
    {
      "name": "POST /sessions/:id/compact on fresh session returns alreadyUpToDate",
      "status": "fail",
      "ms": 5,
      "error": "Expected values to be strictly equal:\n\n404 !== 201\n"
    },
    {
      "name": "POST /sessions/:id/compact returns 400 on closed session",
      "status": "fail",
      "ms": 16,
      "error": "Expected values to be strictly equal:\n\n404 !== 201\n"
    }
  ]
}