



















@@ -1962,4 +1962,97 @@ example
19621962expect(lastPoint?.cumulativeTokens).toBe(165);
19631963expect(lastPoint?.cumulativeCost).toBeCloseTo(0.055, 8);
19641964});
1965+1966+it("returns empty points for zero, negative, and non-finite maxPoints", async () => {
1967+const root = await makeSessionCostRoot("timeseries-invalid-max-points");
1968+const sessionsDir = path.join(root, "agents", "main", "sessions");
1969+await fs.mkdir(sessionsDir, { recursive: true });
1970+const sessionFile = path.join(sessionsDir, "sess-invalid-max-points.jsonl");
1971+const entries = [
1972+{
1973+type: "message",
1974+timestamp: new Date(Date.UTC(2026, 1, 12, 10, 1, 0)).toISOString(),
1975+message: {
1976+role: "assistant",
1977+provider: "openai",
1978+model: "gpt-5.4",
1979+usage: {
1980+input: 1,
1981+output: 2,
1982+cacheRead: 0,
1983+cacheWrite: 0,
1984+totalTokens: 3,
1985+cost: { total: 0.001 },
1986+},
1987+},
1988+},
1989+{
1990+type: "message",
1991+timestamp: new Date(Date.UTC(2026, 1, 12, 10, 2, 0)).toISOString(),
1992+message: {
1993+role: "assistant",
1994+provider: "openai",
1995+model: "gpt-5.4",
1996+usage: {
1997+input: 2,
1998+output: 4,
1999+cacheRead: 0,
2000+cacheWrite: 0,
2001+totalTokens: 6,
2002+cost: { total: 0.002 },
2003+},
2004+},
2005+},
2006+];
2007+await fs.writeFile(
2008+sessionFile,
2009+entries.map((entry) => JSON.stringify(entry)).join("\n"),
2010+"utf-8",
2011+);
2012+2013+await expect(loadSessionUsageTimeSeries({ sessionFile, maxPoints: 0 })).resolves.toEqual({
2014+sessionId: undefined,
2015+points: [],
2016+});
2017+await expect(loadSessionUsageTimeSeries({ sessionFile, maxPoints: -1 })).resolves.toEqual({
2018+sessionId: undefined,
2019+points: [],
2020+});
2021+await expect(
2022+loadSessionUsageTimeSeries({ sessionFile, maxPoints: Number.NaN }),
2023+).resolves.toEqual({ sessionId: undefined, points: [] });
2024+await expect(
2025+loadSessionUsageTimeSeries({ sessionFile, maxPoints: Number.POSITIVE_INFINITY }),
2026+).resolves.toEqual({ sessionId: undefined, points: [] });
2027+});
2028+2029+it("returns empty logs for zero, negative, and non-finite limits", async () => {
2030+const root = await makeSessionCostRoot("session-logs-invalid-limit");
2031+const sessionsDir = path.join(root, "agents", "main", "sessions");
2032+await fs.mkdir(sessionsDir, { recursive: true });
2033+const sessionFile = path.join(sessionsDir, "sess-invalid-limit.jsonl");
2034+await fs.writeFile(
2035+sessionFile,
2036+[
2037+JSON.stringify({
2038+type: "message",
2039+timestamp: new Date(Date.UTC(2026, 1, 12, 10, 0, 0)).toISOString(),
2040+message: { role: "user", content: "hello" },
2041+}),
2042+JSON.stringify({
2043+type: "message",
2044+timestamp: new Date(Date.UTC(2026, 1, 12, 10, 1, 0)).toISOString(),
2045+message: { role: "user", content: "world" },
2046+}),
2047+].join("\n"),
2048+"utf-8",
2049+);
2050+2051+await expect(loadSessionLogs({ sessionFile, limit: 0 })).resolves.toEqual([]);
2052+await expect(loadSessionLogs({ sessionFile, limit: -1 })).resolves.toEqual([]);
2053+await expect(loadSessionLogs({ sessionFile, limit: Number.NaN })).resolves.toEqual([]);
2054+await expect(
2055+loadSessionLogs({ sessionFile, limit: Number.POSITIVE_INFINITY }),
2056+).resolves.toEqual([]);
2057+});
19652058});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。