Files
pikasTech-agentrun/src/selftest/cases/10-manager-memory.ts
T
2026-06-09 21:41:20 +08:00

62 lines
3.4 KiB
TypeScript

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<void>((resolve) => server.server.close(() => resolve()));
}
};
async function assertLongResultUsesTerminalAssistant(client: ManagerClient, store: MemoryAgentRunStore): Promise<void> {
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;