

























@@ -88,7 +88,7 @@ describe("trajectory runtime", () => {
8888expect(JSON.stringify(parsed.data)).not.toContain("sk-other-secret-token");
8989});
909091-it("truncates events that exceed the runtime event byte limit", () => {
91+it("bounds large runtime event fields before serialization", () => {
9292const writes: string[] = [];
9393const recorder = createTrajectoryRuntimeRecorder({
9494sessionId: "session-1",
@@ -108,15 +108,53 @@ describe("trajectory runtime", () => {
108108109109expect(writes).toHaveLength(1);
110110const parsed = JSON.parse(writes[0]);
111-expect(parsed.data).toMatchObject({
111+expect(parsed.data.prompt).toMatchObject({
112112truncated: true,
113-reason: "trajectory-event-size-limit",
113+reason: "trajectory-field-size-limit",
114114});
115115expect(Buffer.byteLength(writes[0], "utf8")).toBeLessThanOrEqual(
116116TRAJECTORY_RUNTIME_EVENT_MAX_BYTES + 1,
117117);
118118});
119119120+it("stops runtime capture at the file budget and records a truncation event", async () => {
121+const writes: string[] = [];
122+const recorder = createTrajectoryRuntimeRecorder({
123+sessionId: "session-1",
124+sessionFile: "/tmp/session.jsonl",
125+maxRuntimeFileBytes: 900,
126+writer: {
127+filePath: "/tmp/session.trajectory.jsonl",
128+write: (line) => {
129+writes.push(line);
130+},
131+flush: async () => undefined,
132+},
133+});
134+135+recorder?.recordEvent("context.compiled", {
136+prompt: "x".repeat(180),
137+});
138+recorder?.recordEvent("prompt.submitted", {
139+prompt: "y".repeat(180),
140+});
141+recorder?.recordEvent("model.completed", {
142+get prompt() {
143+throw new Error("stopped recorder should not read dropped payloads");
144+},
145+});
146+await recorder?.flush();
147+148+const parsed = writes.map((line) => JSON.parse(line));
149+expect(parsed.map((event) => event.type)).toContain("trace.truncated");
150+const truncated = parsed.find((event) => event.type === "trace.truncated");
151+expect(truncated?.data).toMatchObject({
152+reason: "trajectory-runtime-file-size-limit",
153+limitBytes: 900,
154+});
155+expect(truncated?.data.droppedEvents).toBeGreaterThan(0);
156+});
157+120158it("writes a session-adjacent pointer when using an override directory", () => {
121159const tmpDir = makeTempDir();
122160const sessionFile = path.join(tmpDir, "session.jsonl");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。