@downcity/agent 1.1.166 → 1.1.168
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +2 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +1 -0
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +2 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +2 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
- package/bin/executor/types/SessionMessages.d.ts +2 -0
- package/bin/executor/types/SessionMessages.d.ts.map +1 -1
- package/bin/session/browse/Browse.d.ts +8 -0
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +58 -6
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/index.d.ts +2 -2
- package/bin/session/index.d.ts.map +1 -1
- package/bin/session/index.js +2 -2
- package/bin/session/index.js.map +1 -1
- package/bin/session/services/SessionViewService.d.ts.map +1 -1
- package/bin/session/services/SessionViewService.js +8 -4
- package/bin/session/services/SessionViewService.js.map +1 -1
- package/bin/session/storage/Paths.d.ts +8 -0
- package/bin/session/storage/Paths.d.ts.map +1 -1
- package/bin/session/storage/Paths.js +10 -0
- package/bin/session/storage/Paths.js.map +1 -1
- package/bin/types/agent/SessionTypes.d.ts +26 -2
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/package.json +3 -3
- package/scripts/session-history-archive.test.mjs +188 -0
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +1 -0
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +3 -2
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +2 -1
- package/src/executor/types/SessionMessages.ts +2 -0
- package/src/session/browse/Browse.ts +72 -6
- package/src/session/index.ts +2 -0
- package/src/session/services/SessionViewService.ts +16 -3
- package/src/session/storage/Paths.ts +19 -0
- package/src/types/agent/SessionTypes.ts +26 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - 需要写入持久化状态的地方仍委托给 SessionStateService。
|
|
8
8
|
*/
|
|
9
9
|
import { nanoid } from "nanoid";
|
|
10
|
-
import { buildSessionHistoryPage, buildSessionInfo, ensureSessionTitle, readSessionMetadata, } from "../../session/index.js";
|
|
10
|
+
import { buildSessionHistoryPage, buildSessionInfo, getSdkAgentSessionArchiveFilePath, ensureSessionTitle, loadSessionArchiveMessagesFromPath, readSessionMetadata, } from "../../session/index.js";
|
|
11
11
|
import { buildSessionSystemBlocks } from "../../session/SessionSystemBuilder.js";
|
|
12
12
|
/**
|
|
13
13
|
* 本地 Session 查询与派生视图服务。
|
|
@@ -77,7 +77,8 @@ export class SessionViewService {
|
|
|
77
77
|
* 读取当前 session 历史分页。
|
|
78
78
|
*/
|
|
79
79
|
async history(input) {
|
|
80
|
-
const
|
|
80
|
+
const archive_id = String(input?.archive_id || "").trim();
|
|
81
|
+
const [metadata, current_messages] = await Promise.all([
|
|
81
82
|
readSessionMetadata({
|
|
82
83
|
projectRoot: this.project_root,
|
|
83
84
|
agentId: this.agent_id,
|
|
@@ -85,13 +86,16 @@ export class SessionViewService {
|
|
|
85
86
|
}),
|
|
86
87
|
this.history_store.list(),
|
|
87
88
|
]);
|
|
89
|
+
const page_messages = archive_id
|
|
90
|
+
? await loadSessionArchiveMessagesFromPath(getSdkAgentSessionArchiveFilePath(this.project_root, this.agent_id, this.session_id, archive_id))
|
|
91
|
+
: current_messages;
|
|
88
92
|
const session = await this.build_info({
|
|
89
93
|
metadata,
|
|
90
|
-
messages,
|
|
94
|
+
messages: current_messages,
|
|
91
95
|
});
|
|
92
96
|
return buildSessionHistoryPage({
|
|
93
97
|
session,
|
|
94
|
-
messages,
|
|
98
|
+
messages: page_messages,
|
|
95
99
|
input,
|
|
96
100
|
});
|
|
97
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionViewService.js","sourceRoot":"","sources":["../../../src/session/services/SessionViewService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAiF7E;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACZ,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,UAAU,CAAS;IACnB,aAAa,CAA2B;IACxC,aAAa,CAAsB;IACnC,YAAY,CAAsD;IAClE,6BAA6B,CAAuE;IACpG,gCAAgC,CAA0E;IAC1G,wBAAwB,CAAkE;IAC1F,sBAAsB,CAAyB;IAC/C,mBAAmB,CAA6D;IAEjG,YAAY,OAA4C;QACtD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,6BAA6B,GAAG,OAAO,CAAC,6BAA6B,CAAC;QAC3E,IAAI,CAAC,gCAAgC;YACnC,OAAO,CAAC,gCAAgC,CAAC;QAC3C,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;QACjE,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,mBAAmB,CAAC;gBAClB,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,SAAS,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC;YACF,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;SAC1B,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC;YAC3B,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAUxB;QACC,MAAM,mBAAmB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;YAC9C,CAAC,CAAC,KAAK,CAAC,QAAQ;YAChB,CAAC,CAAC,MAAM,kBAAkB,CAAC;gBACvB,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC;QACP,OAAO,gBAAgB,CAAC;YACtB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAAgC;QAEhC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"SessionViewService.js","sourceRoot":"","sources":["../../../src/session/services/SessionViewService.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,14 @@ export declare function getSdkAgentSessionMetaPath(projectRoot: string, agentId:
|
|
|
65
65
|
* 单个 session 的 archive 目录路径。
|
|
66
66
|
*/
|
|
67
67
|
export declare function getSdkAgentSessionArchiveDirPath(projectRoot: string, agentId: string, sessionId: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* 单个 session 的 compact archive JSON 文件路径。
|
|
70
|
+
*
|
|
71
|
+
* 关键点(中文)
|
|
72
|
+
* - `archiveId` 来自 compact summary metadata,不由调用方拼接扩展名。
|
|
73
|
+
* - 这里统一 encode,避免 archiveId 中的特殊字符影响文件路径。
|
|
74
|
+
*/
|
|
75
|
+
export declare function getSdkAgentSessionArchiveFilePath(projectRoot: string, agentId: string, sessionId: string, archiveId: string): string;
|
|
68
76
|
/**
|
|
69
77
|
* 单个 session 的 inflight assistant 路径。
|
|
70
78
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../../../src/session/storage/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CACpD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR"}
|
|
1
|
+
{"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../../../src/session/storage/Paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CACpD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR"}
|
|
@@ -94,6 +94,16 @@ export function getSdkAgentSessionMetaPath(projectRoot, agentId, sessionId) {
|
|
|
94
94
|
export function getSdkAgentSessionArchiveDirPath(projectRoot, agentId, sessionId) {
|
|
95
95
|
return path.join(getSdkAgentSessionMessagesDirPath(projectRoot, agentId, sessionId), "archive");
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* 单个 session 的 compact archive JSON 文件路径。
|
|
99
|
+
*
|
|
100
|
+
* 关键点(中文)
|
|
101
|
+
* - `archiveId` 来自 compact summary metadata,不由调用方拼接扩展名。
|
|
102
|
+
* - 这里统一 encode,避免 archiveId 中的特殊字符影响文件路径。
|
|
103
|
+
*/
|
|
104
|
+
export function getSdkAgentSessionArchiveFilePath(projectRoot, agentId, sessionId, archiveId) {
|
|
105
|
+
return path.join(getSdkAgentSessionArchiveDirPath(projectRoot, agentId, sessionId), `${encodeURIComponent(String(archiveId || "").trim())}.json`);
|
|
106
|
+
}
|
|
97
107
|
/**
|
|
98
108
|
* 单个 session 的 inflight assistant 路径。
|
|
99
109
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paths.js","sourceRoot":"","sources":["../../../src/session/storage/Paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Paths.js","sourceRoot":"","sources":["../../../src/session/storage/Paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -250,6 +250,14 @@ export interface AgentSessionHistoryInput {
|
|
|
250
250
|
limit?: number;
|
|
251
251
|
/** 分页游标。 */
|
|
252
252
|
cursor?: string;
|
|
253
|
+
/**
|
|
254
|
+
* 要读取的 compact archive 层 ID。
|
|
255
|
+
*
|
|
256
|
+
* 说明(中文)
|
|
257
|
+
* - 省略时读取当前 `messages.jsonl`。
|
|
258
|
+
* - 传入时读取 `messages/archive/<archive_id>.json` 中保存的上一层历史。
|
|
259
|
+
*/
|
|
260
|
+
archive_id?: string;
|
|
253
261
|
/**
|
|
254
262
|
* 返回顺序。
|
|
255
263
|
*
|
|
@@ -292,9 +300,25 @@ export interface AgentSessionHistoryPage {
|
|
|
292
300
|
*/
|
|
293
301
|
total: number;
|
|
294
302
|
/** 下一页游标。 */
|
|
295
|
-
|
|
303
|
+
next_cursor?: string;
|
|
296
304
|
/** 是否仍有更多数据。 */
|
|
297
|
-
|
|
305
|
+
has_more: boolean;
|
|
306
|
+
/**
|
|
307
|
+
* 当前读取的 compact archive 层 ID。
|
|
308
|
+
*
|
|
309
|
+
* 说明(中文)
|
|
310
|
+
* - 省略表示当前页来自主历史 `messages.jsonl`。
|
|
311
|
+
* - 有值表示当前页来自指定 compact archive。
|
|
312
|
+
*/
|
|
313
|
+
archive_id?: string;
|
|
314
|
+
/**
|
|
315
|
+
* 当前层更早一次 compact 对应的 archive ID。
|
|
316
|
+
*
|
|
317
|
+
* 关键点(中文)
|
|
318
|
+
* - compact summary 不会出现在 `items` 中。
|
|
319
|
+
* - 若当前层包含 compact summary,则这里暴露其 archive ID,供调用方继续 `session.history({ archive_id })`。
|
|
320
|
+
*/
|
|
321
|
+
previous_archive_id?: string;
|
|
298
322
|
}
|
|
299
323
|
/**
|
|
300
324
|
* Session fork 输入。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionTypes.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionTypes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SessionTypes.d.ts","sourceRoot":"","sources":["../../../src/types/agent/SessionTypes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@downcity/agent",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.168",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Downcity Agent 运行时 — 单 Agent 执行壳与本机 RPC 能力",
|
|
6
6
|
"main": "./bin/index.js",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@ai-sdk/openai-compatible": "^2.0.48",
|
|
20
|
-
"@downcity/shell": "^0.1.
|
|
21
|
-
"@downcity/type": "0.1.
|
|
20
|
+
"@downcity/shell": "^0.1.42",
|
|
21
|
+
"@downcity/type": "0.1.75",
|
|
22
22
|
"ai": "^6.0.193",
|
|
23
23
|
"commander": "^15.0.0",
|
|
24
24
|
"dotenv": "^17.4.2",
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 验证 session.history 的 compact archive 分层读取语义。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - compact summary 是模型上下文消息,但不应作为用户可见 history item 返回。
|
|
6
|
+
* - 调用方通过 previous_archive_id 再传入 archive_id,读取上一层被覆盖历史。
|
|
7
|
+
* - history 分页字段使用 snake_case,保持 SDK 对外数据命名一致。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import test from "node:test";
|
|
11
|
+
import assert from "node:assert/strict";
|
|
12
|
+
import os from "node:os";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import fs from "node:fs/promises";
|
|
15
|
+
|
|
16
|
+
import { Agent } from "../bin/index.js";
|
|
17
|
+
|
|
18
|
+
function user_message(session_id, index) {
|
|
19
|
+
return {
|
|
20
|
+
id: `u:${index}`,
|
|
21
|
+
role: "user",
|
|
22
|
+
metadata: {
|
|
23
|
+
v: 1,
|
|
24
|
+
ts: index,
|
|
25
|
+
sessionId: session_id,
|
|
26
|
+
source: "ingress",
|
|
27
|
+
},
|
|
28
|
+
parts: [{ type: "text", text: `user ${index}` }],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function assistant_message(session_id, index) {
|
|
33
|
+
return {
|
|
34
|
+
id: `a:${index}`,
|
|
35
|
+
role: "assistant",
|
|
36
|
+
metadata: {
|
|
37
|
+
v: 1,
|
|
38
|
+
ts: index,
|
|
39
|
+
sessionId: session_id,
|
|
40
|
+
source: "egress",
|
|
41
|
+
},
|
|
42
|
+
parts: [{ type: "text", text: `assistant ${index}` }],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function compact_summary(session_id, archive_id, text) {
|
|
47
|
+
return {
|
|
48
|
+
id: `summary:${archive_id}`,
|
|
49
|
+
role: "assistant",
|
|
50
|
+
metadata: {
|
|
51
|
+
v: 1,
|
|
52
|
+
ts: 1000,
|
|
53
|
+
sessionId: session_id,
|
|
54
|
+
source: "compact",
|
|
55
|
+
kind: "summary",
|
|
56
|
+
archiveId: archive_id,
|
|
57
|
+
sourceRange: {
|
|
58
|
+
fromId: "start",
|
|
59
|
+
toId: "end",
|
|
60
|
+
count: 2,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
parts: [{ type: "text", text }],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function write_jsonl(file_path, messages) {
|
|
68
|
+
await fs.mkdir(path.dirname(file_path), { recursive: true });
|
|
69
|
+
await fs.writeFile(
|
|
70
|
+
file_path,
|
|
71
|
+
messages.map((message) => JSON.stringify(message)).join("\n") + "\n",
|
|
72
|
+
"utf8",
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function write_archive(file_path, session_id, messages) {
|
|
77
|
+
await fs.mkdir(path.dirname(file_path), { recursive: true });
|
|
78
|
+
await fs.writeFile(
|
|
79
|
+
file_path,
|
|
80
|
+
JSON.stringify(
|
|
81
|
+
{
|
|
82
|
+
v: 1,
|
|
83
|
+
sessionId: session_id,
|
|
84
|
+
archivedAt: Date.now(),
|
|
85
|
+
messages,
|
|
86
|
+
},
|
|
87
|
+
null,
|
|
88
|
+
2,
|
|
89
|
+
),
|
|
90
|
+
"utf8",
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
test("session.history hides compact summary and reads archive layers by archive_id", async () => {
|
|
95
|
+
const agent_path = await fs.mkdtemp(
|
|
96
|
+
path.join(os.tmpdir(), "downcity-agent-history-archive-"),
|
|
97
|
+
);
|
|
98
|
+
const agent = new Agent({
|
|
99
|
+
id: "history_archive_agent",
|
|
100
|
+
path: agent_path,
|
|
101
|
+
});
|
|
102
|
+
const session = await agent.session_collection().create_session({
|
|
103
|
+
sessionId: "history_archive_session",
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const messages_dir = path.join(
|
|
107
|
+
agent_path,
|
|
108
|
+
".downcity",
|
|
109
|
+
"agents",
|
|
110
|
+
encodeURIComponent("history_archive_agent"),
|
|
111
|
+
"sessions",
|
|
112
|
+
encodeURIComponent(session.id),
|
|
113
|
+
"messages",
|
|
114
|
+
);
|
|
115
|
+
const messages_path = path.join(messages_dir, "messages.jsonl");
|
|
116
|
+
const archive_dir = path.join(messages_dir, "archive");
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
await write_jsonl(messages_path, [
|
|
120
|
+
compact_summary(session.id, "compact-B", "summary B"),
|
|
121
|
+
user_message(session.id, 31),
|
|
122
|
+
assistant_message(session.id, 32),
|
|
123
|
+
]);
|
|
124
|
+
await write_archive(path.join(archive_dir, "compact-B.json"), session.id, [
|
|
125
|
+
compact_summary(session.id, "compact-A", "summary A"),
|
|
126
|
+
user_message(session.id, 16),
|
|
127
|
+
assistant_message(session.id, 17),
|
|
128
|
+
]);
|
|
129
|
+
await write_archive(path.join(archive_dir, "compact-A.json"), session.id, [
|
|
130
|
+
user_message(session.id, 1),
|
|
131
|
+
assistant_message(session.id, 2),
|
|
132
|
+
]);
|
|
133
|
+
|
|
134
|
+
const current_page = await session.history({
|
|
135
|
+
limit: 1,
|
|
136
|
+
});
|
|
137
|
+
assert.equal(current_page.total, 2);
|
|
138
|
+
assert.equal(current_page.has_more, true);
|
|
139
|
+
assert.equal(current_page.next_cursor, "1");
|
|
140
|
+
assert.equal(current_page.archive_id, undefined);
|
|
141
|
+
assert.equal(current_page.previous_archive_id, "compact-B");
|
|
142
|
+
assert.deepEqual(
|
|
143
|
+
current_page.items.map((message) => message.id),
|
|
144
|
+
["u:31"],
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
const next_current_page = await session.history({
|
|
148
|
+
cursor: current_page.next_cursor,
|
|
149
|
+
});
|
|
150
|
+
assert.equal(next_current_page.has_more, false);
|
|
151
|
+
assert.deepEqual(
|
|
152
|
+
next_current_page.items.map((message) => message.id),
|
|
153
|
+
["a:32"],
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
const previous_page = await session.history({
|
|
157
|
+
archive_id: current_page.previous_archive_id,
|
|
158
|
+
});
|
|
159
|
+
assert.equal(previous_page.archive_id, "compact-B");
|
|
160
|
+
assert.equal(previous_page.previous_archive_id, "compact-A");
|
|
161
|
+
assert.equal(previous_page.total, 2);
|
|
162
|
+
assert.deepEqual(
|
|
163
|
+
previous_page.items.map((message) => message.id),
|
|
164
|
+
["u:16", "a:17"],
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
const oldest_page = await session.history({
|
|
168
|
+
archive_id: previous_page.previous_archive_id,
|
|
169
|
+
});
|
|
170
|
+
assert.equal(oldest_page.archive_id, "compact-A");
|
|
171
|
+
assert.equal(oldest_page.previous_archive_id, undefined);
|
|
172
|
+
assert.deepEqual(
|
|
173
|
+
oldest_page.items.map((message) => message.id),
|
|
174
|
+
["u:1", "a:2"],
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
const timeline_page = await session.history({
|
|
178
|
+
view: "timeline",
|
|
179
|
+
archive_id: "compact-B",
|
|
180
|
+
});
|
|
181
|
+
assert.deepEqual(
|
|
182
|
+
timeline_page.items.map((event) => event.text),
|
|
183
|
+
["user 16", "assistant 17"],
|
|
184
|
+
);
|
|
185
|
+
} finally {
|
|
186
|
+
await agent.dispose();
|
|
187
|
+
}
|
|
188
|
+
});
|
|
@@ -191,6 +191,7 @@ export class HttpRemoteAgentTransport implements RemoteAgentTransport {
|
|
|
191
191
|
const query = new URLSearchParams();
|
|
192
192
|
if (input?.limit !== undefined) query.set("limit", String(input.limit));
|
|
193
193
|
if (input?.cursor) query.set("cursor", input.cursor);
|
|
194
|
+
if (input?.archive_id) query.set("archive_id", input.archive_id);
|
|
194
195
|
if (input?.order) query.set("order", input.order);
|
|
195
196
|
if (input?.view) query.set("view", input.view);
|
|
196
197
|
const payload = await read_http_json<{
|
|
@@ -39,6 +39,7 @@ type SessionCompactDeps = {
|
|
|
39
39
|
loadAll: () => Promise<SessionMessageV1[]>;
|
|
40
40
|
createSummaryMessage: (params: {
|
|
41
41
|
text: string;
|
|
42
|
+
archiveId?: string;
|
|
42
43
|
sourceRange?: SessionMetadataV1["sourceRange"];
|
|
43
44
|
}) => SessionMessageV1;
|
|
44
45
|
getArchiveDirPath: () => string;
|
|
@@ -141,13 +142,13 @@ export async function compactSessionMessagesIfNeeded(
|
|
|
141
142
|
|
|
142
143
|
const fromId = String(older[0]?.id || "");
|
|
143
144
|
const toId = String(older[older.length - 1]?.id || "");
|
|
145
|
+
const archiveId = `compact-${Date.now()}-${generateId()}`;
|
|
144
146
|
const summaryMsg = deps.createSummaryMessage({
|
|
145
147
|
text: summary,
|
|
148
|
+
archiveId,
|
|
146
149
|
sourceRange: fromId && toId ? { fromId, toId, count: older.length } : undefined,
|
|
147
150
|
});
|
|
148
151
|
|
|
149
|
-
const archiveId = `compact-${Date.now()}-${generateId()}`;
|
|
150
|
-
|
|
151
152
|
// phase 2:写入(短锁,且避免覆盖新追加)
|
|
152
153
|
// - 以“当前最新 session messages”为准重算 currentOlder / currentKept,避免覆盖并发新消息。
|
|
153
154
|
await deps.withWriteLock(async () => {
|
|
@@ -445,7 +445,7 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
445
445
|
sessionId: this.sessionId,
|
|
446
446
|
withWriteLock: (fn) => this.withWriteLock(fn),
|
|
447
447
|
loadAll: () => this.list(),
|
|
448
|
-
createSummaryMessage: ({ text, sourceRange }) => ({
|
|
448
|
+
createSummaryMessage: ({ text, archiveId, sourceRange }) => ({
|
|
449
449
|
id: `a:${this.sessionId}:${generateId()}`,
|
|
450
450
|
role: "assistant",
|
|
451
451
|
metadata: {
|
|
@@ -454,6 +454,7 @@ export class JsonlSessionHistoryStore implements SessionHistoryStore {
|
|
|
454
454
|
sessionId: this.sessionId,
|
|
455
455
|
source: "compact",
|
|
456
456
|
kind: "summary",
|
|
457
|
+
...(archiveId ? { archiveId } : {}),
|
|
457
458
|
...(sourceRange ? { sourceRange } : {}),
|
|
458
459
|
},
|
|
459
460
|
parts: [{ type: "text", text: String(text ?? "") }],
|
|
@@ -64,6 +64,8 @@ export type SessionMetadataV1 = {
|
|
|
64
64
|
kind?: SessionMessageKind;
|
|
65
65
|
/** 当前消息来自入站、出站还是 compact。 */
|
|
66
66
|
source?: SessionMessageSource;
|
|
67
|
+
/** compact 摘要对应的 archive 文件 ID,用于用户历史按层读取更早消息。 */
|
|
68
|
+
archiveId?: string;
|
|
67
69
|
/** compact 摘要所覆盖的原始消息范围。 */
|
|
68
70
|
sourceRange?: SessionMessageSourceRangeV1;
|
|
69
71
|
/**
|
|
@@ -83,6 +83,13 @@ type SessionBrowseBaseInput = {
|
|
|
83
83
|
executing?: boolean;
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
+
type SessionArchiveFileV1 = {
|
|
87
|
+
v?: unknown;
|
|
88
|
+
sessionId?: unknown;
|
|
89
|
+
archivedAt?: unknown;
|
|
90
|
+
messages?: unknown;
|
|
91
|
+
};
|
|
92
|
+
|
|
86
93
|
function decodeMaybe(input: string): string {
|
|
87
94
|
try {
|
|
88
95
|
return decodeURIComponent(input);
|
|
@@ -122,6 +129,11 @@ function encodeCursor(offset: number): string | undefined {
|
|
|
122
129
|
return String(Math.floor(offset));
|
|
123
130
|
}
|
|
124
131
|
|
|
132
|
+
function normalizeArchiveId(input: unknown): string | undefined {
|
|
133
|
+
const value = String(input || "").trim();
|
|
134
|
+
return value || undefined;
|
|
135
|
+
}
|
|
136
|
+
|
|
125
137
|
function stringifyForDisplay(input: unknown, maxChars = 2400): string {
|
|
126
138
|
if (input === undefined) return "";
|
|
127
139
|
if (input === null) return "null";
|
|
@@ -359,6 +371,53 @@ export async function loadSessionMessagesFromPath(
|
|
|
359
371
|
return messages;
|
|
360
372
|
}
|
|
361
373
|
|
|
374
|
+
/**
|
|
375
|
+
* 读取 compact archive 文件中的消息。
|
|
376
|
+
*
|
|
377
|
+
* 关键点(中文)
|
|
378
|
+
* - archive 是 compact 时被覆盖的“上一层历史”,不是当前运行态事实源。
|
|
379
|
+
* - 这里不读取 inflight,因为 archive 层永远是已完成的历史快照。
|
|
380
|
+
*/
|
|
381
|
+
export async function loadSessionArchiveMessagesFromPath(
|
|
382
|
+
filePath: string,
|
|
383
|
+
): Promise<SessionMessageV1[]> {
|
|
384
|
+
try {
|
|
385
|
+
const raw = (await fs.readJson(filePath)) as SessionArchiveFileV1 | null;
|
|
386
|
+
const items = Array.isArray(raw?.messages) ? raw.messages : [];
|
|
387
|
+
return items.filter((item): item is SessionMessageV1 => {
|
|
388
|
+
if (!item || typeof item !== "object") return false;
|
|
389
|
+
const candidate = item as Partial<SessionMessageV1>;
|
|
390
|
+
return (
|
|
391
|
+
(candidate.role === "user" || candidate.role === "assistant") &&
|
|
392
|
+
Array.isArray(candidate.parts)
|
|
393
|
+
);
|
|
394
|
+
});
|
|
395
|
+
} catch {
|
|
396
|
+
return [];
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
function isCompactSummaryMessage(message: SessionMessageV1): boolean {
|
|
401
|
+
const metadata = (message.metadata || null) as SessionMetadataV1 | null;
|
|
402
|
+
return metadata?.source === "compact" || metadata?.kind === "summary";
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
function resolvePreviousArchiveId(messages: SessionMessageV1[]): string | undefined {
|
|
406
|
+
for (const message of messages) {
|
|
407
|
+
if (!isCompactSummaryMessage(message)) continue;
|
|
408
|
+
const metadata = (message.metadata || null) as SessionMetadataV1 | null;
|
|
409
|
+
const archiveId = normalizeArchiveId(metadata?.archiveId);
|
|
410
|
+
if (archiveId) return archiveId;
|
|
411
|
+
}
|
|
412
|
+
return undefined;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
function filterUserVisibleHistoryMessages(
|
|
416
|
+
messages: SessionMessageV1[],
|
|
417
|
+
): SessionMessageV1[] {
|
|
418
|
+
return messages.filter((message) => !isCompactSummaryMessage(message));
|
|
419
|
+
}
|
|
420
|
+
|
|
362
421
|
/**
|
|
363
422
|
* 基于 metadata + messages 构建 SDK session 详情。
|
|
364
423
|
*/
|
|
@@ -409,9 +468,12 @@ export function buildSessionHistoryPage(params: {
|
|
|
409
468
|
const order = params.input?.order || "asc";
|
|
410
469
|
const limit = normalizeLimit(params.input?.limit, 50, 500);
|
|
411
470
|
const cursor = normalizeCursor(params.input?.cursor);
|
|
471
|
+
const archive_id = normalizeArchiveId(params.input?.archive_id);
|
|
472
|
+
const previous_archive_id = resolvePreviousArchiveId(params.messages);
|
|
473
|
+
const visibleMessages = filterUserVisibleHistoryMessages(params.messages);
|
|
412
474
|
|
|
413
475
|
if (view === "timeline") {
|
|
414
|
-
const allEvents =
|
|
476
|
+
const allEvents = visibleMessages.flatMap((message) => toSessionTimelineEvents(message));
|
|
415
477
|
const orderedEvents = order === "desc" ? [...allEvents].reverse() : allEvents;
|
|
416
478
|
const pageItems = orderedEvents.slice(cursor, cursor + limit);
|
|
417
479
|
const nextOffset = cursor + pageItems.length;
|
|
@@ -421,14 +483,16 @@ export function buildSessionHistoryPage(params: {
|
|
|
421
483
|
items: pageItems,
|
|
422
484
|
total: orderedEvents.length,
|
|
423
485
|
...(nextOffset < orderedEvents.length
|
|
424
|
-
? {
|
|
486
|
+
? { next_cursor: encodeCursor(nextOffset) }
|
|
425
487
|
: {}),
|
|
426
|
-
|
|
488
|
+
has_more: nextOffset < orderedEvents.length,
|
|
489
|
+
...(archive_id ? { archive_id } : {}),
|
|
490
|
+
...(previous_archive_id ? { previous_archive_id } : {}),
|
|
427
491
|
};
|
|
428
492
|
}
|
|
429
493
|
|
|
430
494
|
const orderedMessages =
|
|
431
|
-
order === "desc" ? [...
|
|
495
|
+
order === "desc" ? [...visibleMessages].reverse() : [...visibleMessages];
|
|
432
496
|
const pageItems = orderedMessages.slice(cursor, cursor + limit);
|
|
433
497
|
const nextOffset = cursor + pageItems.length;
|
|
434
498
|
return {
|
|
@@ -437,9 +501,11 @@ export function buildSessionHistoryPage(params: {
|
|
|
437
501
|
items: pageItems,
|
|
438
502
|
total: orderedMessages.length,
|
|
439
503
|
...(nextOffset < orderedMessages.length
|
|
440
|
-
? {
|
|
504
|
+
? { next_cursor: encodeCursor(nextOffset) }
|
|
441
505
|
: {}),
|
|
442
|
-
|
|
506
|
+
has_more: nextOffset < orderedMessages.length,
|
|
507
|
+
...(archive_id ? { archive_id } : {}),
|
|
508
|
+
...(previous_archive_id ? { previous_archive_id } : {}),
|
|
443
509
|
};
|
|
444
510
|
}
|
|
445
511
|
|
package/src/session/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export {
|
|
|
16
16
|
getSdkAgentArchivedSessionMetaPath,
|
|
17
17
|
getSdkAgentArchivedSessionsDirPath,
|
|
18
18
|
getSdkAgentSessionArchiveDirPath,
|
|
19
|
+
getSdkAgentSessionArchiveFilePath,
|
|
19
20
|
getSdkAgentSessionDirPath,
|
|
20
21
|
getSdkAgentSessionInflightPath,
|
|
21
22
|
getSdkAgentSessionMessagesDirPath,
|
|
@@ -49,6 +50,7 @@ export {
|
|
|
49
50
|
buildSessionInfo,
|
|
50
51
|
listArchivedAgentSessionSummaryPage,
|
|
51
52
|
listAgentSessionSummaryPage,
|
|
53
|
+
loadSessionArchiveMessagesFromPath,
|
|
52
54
|
loadSessionMessagesFromPath,
|
|
53
55
|
resolveSessionMessagePreview,
|
|
54
56
|
toSessionTimelineEvents,
|
|
@@ -11,7 +11,9 @@ import { nanoid } from "nanoid";
|
|
|
11
11
|
import {
|
|
12
12
|
buildSessionHistoryPage,
|
|
13
13
|
buildSessionInfo,
|
|
14
|
+
getSdkAgentSessionArchiveFilePath,
|
|
14
15
|
ensureSessionTitle,
|
|
16
|
+
loadSessionArchiveMessagesFromPath,
|
|
15
17
|
readSessionMetadata,
|
|
16
18
|
} from "@/session/index.js";
|
|
17
19
|
import { buildSessionSystemBlocks } from "@/session/SessionSystemBuilder.js";
|
|
@@ -179,7 +181,8 @@ export class SessionViewService<TSession extends Pick<AgentSession, "set">> {
|
|
|
179
181
|
async history(
|
|
180
182
|
input?: AgentSessionHistoryInput,
|
|
181
183
|
): Promise<AgentSessionHistoryPage> {
|
|
182
|
-
const
|
|
184
|
+
const archive_id = String(input?.archive_id || "").trim();
|
|
185
|
+
const [metadata, current_messages] = await Promise.all([
|
|
183
186
|
readSessionMetadata({
|
|
184
187
|
projectRoot: this.project_root,
|
|
185
188
|
agentId: this.agent_id,
|
|
@@ -187,13 +190,23 @@ export class SessionViewService<TSession extends Pick<AgentSession, "set">> {
|
|
|
187
190
|
}),
|
|
188
191
|
this.history_store.list(),
|
|
189
192
|
]);
|
|
193
|
+
const page_messages = archive_id
|
|
194
|
+
? await loadSessionArchiveMessagesFromPath(
|
|
195
|
+
getSdkAgentSessionArchiveFilePath(
|
|
196
|
+
this.project_root,
|
|
197
|
+
this.agent_id,
|
|
198
|
+
this.session_id,
|
|
199
|
+
archive_id,
|
|
200
|
+
),
|
|
201
|
+
)
|
|
202
|
+
: current_messages;
|
|
190
203
|
const session = await this.build_info({
|
|
191
204
|
metadata,
|
|
192
|
-
messages,
|
|
205
|
+
messages: current_messages,
|
|
193
206
|
});
|
|
194
207
|
return buildSessionHistoryPage({
|
|
195
208
|
session,
|
|
196
|
-
messages,
|
|
209
|
+
messages: page_messages,
|
|
197
210
|
input,
|
|
198
211
|
});
|
|
199
212
|
}
|