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 { SelfTestCase } from "../harness.js"; import type { JsonRecord } from "../../common/types.js"; const selfTest: SelfTestCase = async () => { const store = new MemoryAgentRunStore(); const server = await startManagerServer({ port: 0, host: "127.0.0.1", sourceCommit: "self-test", store }); try { const client = new ManagerClient(server.baseUrl); const health = await client.get("/health/readiness") as { database?: { adapter?: string; reachable?: boolean; migrationReady?: boolean; failureKind?: string | null }; secretRefs?: { valuesPrinted?: boolean } }; assert.equal(health.database?.adapter, "memory-self-test"); assert.equal(health.database?.reachable, true); assert.equal(health.database?.migrationReady, true); assert.equal(health.database?.failureKind, null); assert.equal(health.secretRefs?.valuesPrinted, false); await assertLongResultUsesTerminalAssistant(client, store); return { name: "manager-memory", tests: ["manager-memory-lifecycle", "manager-result-long-trace"] }; } finally { await new Promise((resolve) => server.server.close(() => resolve())); } }; async function assertLongResultUsesTerminalAssistant(client: ManagerClient, store: MemoryAgentRunStore): Promise { const run = store.createRun({ tenantId: "unidesk", projectId: "pikasTech/agentrun", workspaceRef: { kind: "host-path", path: "/tmp/agentrun-selftest" }, providerId: "G14", backendProfile: "codex", executionPolicy: { sandbox: "workspace-write", approval: "never", timeoutMs: 1000, network: "none", secretScope: { allowCredentialEcho: false, providerCredentials: [] }, }, traceSink: null, }); const command = store.createCommand(run.id, { type: "turn", payload: { prompt: "exercise long result" }, idempotencyKey: "manager-result-long-trace" }); store.appendEvent(run.id, "assistant_message", { commandId: command.id, text: "early assistant", source: "completed-agent-message" }); for (let index = 0; index < 520; index += 1) { store.appendEvent(run.id, "command_output", { commandId: command.id, stream: "stdout", text: `noise-${index}` }); } const finalAssistant = store.appendEvent(run.id, "assistant_message", { commandId: command.id, text: "final terminal assistant", source: "agent-message-delta-progress", outputTruncated: false }); store.finishCommand(command.id, { terminalStatus: "completed", failureKind: null, failureMessage: null, threadId: "thread_long_result", turnId: "turn_long_result" }); const result = await client.get(`/api/v1/runs/${encodeURIComponent(run.id)}/commands/${encodeURIComponent(command.id)}/result`) as JsonRecord; assert.equal(result.reply, "final terminal assistant"); assert.equal(result.finalAssistantSeq, finalAssistant.seq); assert.equal(result.finalAssistantSource, "agent-message-delta-progress"); assert.equal(result.lastSeq, finalAssistant.seq + 1); assert.equal(result.eventCount, finalAssistant.seq + 1); assert.equal(result.eventsCapped, false); const finalResponse = result.finalResponse as JsonRecord; assert.equal(finalResponse.text, "final terminal assistant"); assert.equal(finalResponse.seq, finalAssistant.seq); } export default selfTest;