

























@@ -86,7 +86,7 @@ describe("gateway session utils", () => {
8686test("session lists apply a bounded default and expose truncation metadata", async () => {
8787const cfg = createModelDefaultsConfig({ primary: "openai/gpt-5.4" });
8888const store = Object.fromEntries(
89-Array.from({ length: 105 }, (_value, index) => [
89+Array.from({ length: 101 }, (_value, index) => [
9090`session-${index}`,
9191{
9292sessionId: `session-${index}`,
@@ -104,7 +104,7 @@ describe("gateway session utils", () => {
104104105105expect(listed.sessions).toHaveLength(100);
106106expect(listed.count).toBe(100);
107-expect(listed.totalCount).toBe(105);
107+expect(listed.totalCount).toBe(101);
108108expect(listed.limitApplied).toBe(100);
109109expect(listed.hasMore).toBe(true);
110110expect(listed.sessions[0]?.key).toBe("session-0");
@@ -1257,6 +1257,10 @@ describe("listSessionsFromStore selected model display", () => {
12571257store[`agent:main:${sessionId}`] = {
12581258 sessionId,
12591259updatedAt: now - i,
1260+totalTokens: 1,
1261+totalTokensFresh: true,
1262+contextTokens: 1,
1263+estimatedCostUsd: 0,
12601264} as SessionEntry;
12611265fs.writeFileSync(
12621266path.join(tmpDir, `${sessionId}.jsonl`),
@@ -1307,37 +1311,39 @@ describe("listSessionsFromStore selected model display", () => {
13071311}
13081312});
130913131310-test("caps transcript title and last-message hydration for bulk list responses", () => {
1314+test("caps transcript title and last-message hydration for bulk list responses", async () => {
13111315const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-sessions-list-cap-"));
13121316try {
13131317const storePath = path.join(tmpDir, "sessions.json");
13141318const store: Record<string, SessionEntry> = {};
13151319const now = Date.now();
1316-for (let i = 0; i < 105; i += 1) {
1320+for (let i = 0; i < 101; i += 1) {
13171321const sessionId = `sess-${i}`;
13181322store[`agent:main:${sessionId}`] = {
13191323 sessionId,
13201324updatedAt: now - i,
13211325} as SessionEntry;
1322-fs.writeFileSync(
1323-path.join(tmpDir, `${sessionId}.jsonl`),
1324-[
1325-JSON.stringify({ type: "session", version: 1, id: sessionId }),
1326-JSON.stringify({ message: { role: "user", content: `title ${i}` } }),
1327-JSON.stringify({ message: { role: "assistant", content: `last ${i}` } }),
1328-].join("\n"),
1329-"utf-8",
1330-);
1326+if (i === 0 || i === 99 || i === 100) {
1327+fs.writeFileSync(
1328+path.join(tmpDir, `${sessionId}.jsonl`),
1329+[
1330+JSON.stringify({ type: "session", version: 1, id: sessionId }),
1331+JSON.stringify({ message: { role: "user", content: `title ${i}` } }),
1332+JSON.stringify({ message: { role: "assistant", content: `last ${i}` } }),
1333+].join("\n"),
1334+"utf-8",
1335+);
1336+}
13311337}
133213381333-const result = listSessionsFromStore({
1339+const result = await listSessionsFromStoreAsync({
13341340cfg: createModelDefaultsConfig({ primary: "openai/gpt-5.4" }),
13351341 storePath,
13361342 store,
1337-opts: { includeDerivedTitles: true, includeLastMessage: true, limit: 105 },
1343+opts: { includeDerivedTitles: true, includeLastMessage: true, limit: 101 },
13381344});
133913451340-expect(result.sessions).toHaveLength(105);
1346+expect(result.sessions).toHaveLength(101);
13411347expect(result.sessions[0]?.derivedTitle).toBe("title 0");
13421348expect(result.sessions[0]?.lastMessagePreview).toBe("last 0");
13431349expect(result.sessions[99]?.derivedTitle).toBe("title 99");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。