import assert from "node:assert/strict"; import { startManagerServer } from "../../mgr/server.js"; import { MemoryAgentRunStore } from "../../mgr/store.js"; import { ManagerClient } from "../../mgr/client.js"; import type { QueueCommanderSnapshot, QueueReadCursorRecord, QueueStats, QueueTaskListResult, QueueTaskRecord } from "../../common/types.js"; import type { SelfTestCase } from "../harness.js"; const selfTest: SelfTestCase = async (context) => { const server = await startManagerServer({ port: 0, host: "127.0.0.1", sourceCommit: "self-test", store: new MemoryAgentRunStore() }); try { const client = new ManagerClient(server.baseUrl); const input = { tenantId: "unidesk", projectId: "pikasTech/unidesk", queue: "dev", lane: "main", title: "Q1 queue task", priority: 10, backendProfile: "codex", providerId: "G14", workspaceRef: { kind: "host-path", path: context.workspace }, executionPolicy: null, resourceBundleRef: null, payload: { prompt: "hello" }, references: [{ kind: "issue", url: "https://github.com/pikasTech/agentrun/issues/39" }], metadata: { source: "self-test" }, idempotencyKey: "queue-q1-self-test", }; const created = await client.post("/api/v1/queue/tasks", input) as QueueTaskRecord; assert.equal(created.state, "pending"); assert.equal(created.sessionPath, null); assert.equal(created.latestAttempt, null); const duplicate = await client.post("/api/v1/queue/tasks", input) as QueueTaskRecord; assert.equal(duplicate.id, created.id); const listed = await client.get("/api/v1/queue/tasks?queue=dev&limit=10") as QueueTaskListResult; assert.equal(listed.count, 1); assert.equal(listed.items[0]?.id, created.id); const shown = await client.get(`/api/v1/queue/tasks/${created.id}`) as QueueTaskRecord; assert.equal(shown.title, "Q1 queue task"); assert.equal(shown.sessionPath, null); const stats = await client.get("/api/v1/queue/stats?queue=dev") as QueueStats; assert.equal(stats.total, 1); assert.equal(stats.byState.pending, 1); const read = await client.post(`/api/v1/queue/tasks/${created.id}/read`, { readerId: "self-test" }) as QueueReadCursorRecord; assert.equal(read.taskId, created.id); assert.equal(read.readerId, "self-test"); const cancelled = await client.post(`/api/v1/queue/tasks/${created.id}/cancel`, { reason: "self-test complete" }) as QueueTaskRecord; assert.equal(cancelled.state, "cancelled"); assert.equal(cancelled.cancelReason, "self-test complete"); const commander = await client.get("/api/v1/queue/commander?queue=dev") as QueueCommanderSnapshot; assert.equal(commander.stats.byState.cancelled, 1); assert.equal(commander.items[0]?.id, created.id); return { name: "queue-q1", tests: ["queue-q1-rest-memory"] }; } finally { await new Promise((resolve) => server.server.close(() => resolve())); } }; export default selfTest;