Files
pikasTech-HWLAB/internal/cloud/code-agent-trace-store.test.ts
T

97 lines
4.1 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "bun:test";
import { createCodeAgentTraceStore, createDurableCodeAgentTraceStore } from "./code-agent-trace-store.ts";
test("code agent trace store keeps assistant deltas outside event count", () => {
const traceStore = createCodeAgentTraceStore({ maxEvents: 6000 });
const traceId = "trc_trace-store-assistant-stream";
traceStore.append(traceId, { type: "request", status: "accepted", label: "request:accepted" });
for (let index = 0; index < 6200; index += 1) {
traceStore.appendAssistantDelta(traceId, {
itemId: "item_assistant_stream",
chunk: `chunk-${index} `,
waitingFor: "turn/completed"
});
}
const snapshot = traceStore.snapshot(traceId);
assert.equal(snapshot.eventCount, 1);
assert.equal(snapshot.events.length, 1);
assert.equal(snapshot.events[0].label, "request:accepted");
assert.equal(snapshot.assistantStreams.length, 1);
assert.equal(snapshot.assistantStreams[0].chunkCount, 6200);
assert.equal(snapshot.waitingFor, "turn/completed");
});
test("code agent trace store dedupes repeated AgentRun source events", () => {
const traceStore = createCodeAgentTraceStore({ maxEvents: 20 });
const traceId = "trc_trace-store-agentrun-dedupe";
const event = {
type: "backend",
status: "running",
label: "agentrun:backend:resource-bundle-materialized",
source: "agentrun",
sourceSeq: 42,
createdAt: "2026-06-01T00:00:00.000Z"
};
traceStore.append(traceId, event);
traceStore.append(traceId, event);
traceStore.append(traceId, { ...event, type: "assistant", label: "agentrun:assistant:message", message: "OK" });
const snapshot = traceStore.snapshot(traceId);
assert.equal(snapshot.eventCount, 2);
assert.deepEqual(snapshot.events.map((item) => item.label), ["agentrun:backend:resource-bundle-materialized", "agentrun:assistant:message"]);
});
test("durable code agent trace store projects appended events without counting assistant deltas", () => {
const writes = [];
const baseStore = createCodeAgentTraceStore({ maxEvents: 20 });
const traceStore = createDurableCodeAgentTraceStore({
traceStore: baseStore,
traceEventStore: {
writeAgentTraceEvent(params, requestMeta) {
writes.push({ params, requestMeta });
return { written: true };
}
}
});
const traceId = "trc_trace-store-durable-projection";
traceStore.append(traceId, { type: "request", status: "accepted", label: "request:accepted", sessionId: "ses_trace_store_durable" });
traceStore.appendAssistantDelta(traceId, { itemId: "assistant", chunk: "hello" });
const snapshot = traceStore.snapshot(traceId);
assert.equal(snapshot.eventCount, 1);
assert.equal(snapshot.assistantStreams.length, 1);
assert.equal(writes.length, 1);
assert.equal(writes[0].params.event.traceId, traceId);
assert.equal(writes[0].params.event.seq, 1);
assert.equal(writes[0].requestMeta.agentSessionId, "ses_trace_store_durable");
});
test("code agent trace store retains six thousand regular events", () => {
const traceStore = createCodeAgentTraceStore({ maxEvents: 6000 });
const traceId = "trc_trace-store-regular-events";
for (let index = 0; index < 6001; index += 1) {
traceStore.append(traceId, { type: "trace", status: "observed", label: `event:${index}` });
}
const snapshot = traceStore.snapshot(traceId);
assert.equal(snapshot.eventCount, 6000);
assert.equal(snapshot.events.length, 6000);
assert.equal(snapshot.events[0].label, "event:1");
assert.equal(snapshot.events.at(-1).label, "event:6000");
});
test("code agent trace store preserves upstream event timestamps", () => {
const traceStore = createCodeAgentTraceStore({ maxEvents: 10 });
const traceId = "trc_trace-store-upstream-time";
traceStore.append(traceId, {
type: "backend",
status: "running",
label: "agentrun:backend:turn/completed",
createdAt: "2026-06-01T16:35:40.939Z"
}, { now: "2026-06-01T16:35:56.171Z" });
const snapshot = traceStore.snapshot(traceId);
assert.equal(snapshot.events[0].createdAt, "2026-06-01T16:35:40.939Z");
assert.equal(snapshot.elapsedMs, 0);
});