@downcity/agent 1.1.228 → 1.1.236
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/local/Agent.d.ts +6 -1
- package/bin/agent/local/Agent.d.ts.map +1 -1
- package/bin/agent/local/Agent.js +30 -3
- package/bin/agent/local/Agent.js.map +1 -1
- package/bin/agent/local/services/AgentSessions.d.ts +23 -0
- package/bin/agent/local/services/AgentSessions.d.ts.map +1 -1
- package/bin/agent/local/services/AgentSessions.js +44 -0
- package/bin/agent/local/services/AgentSessions.js.map +1 -1
- package/bin/agent/remote/RemoteSession.d.ts +2 -0
- package/bin/agent/remote/RemoteSession.d.ts.map +1 -1
- package/bin/agent/remote/RemoteSession.js +4 -0
- package/bin/agent/remote/RemoteSession.js.map +1 -1
- package/bin/agent/remote/RemoteTransport.d.ts +2 -0
- package/bin/agent/remote/RemoteTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts +1 -0
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +11 -7
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts +1 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js +3 -0
- package/bin/agent/remote/transports/RpcRemoteAgentTransport.js.map +1 -1
- package/bin/executor/Executor.d.ts +43 -0
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +127 -7
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +10 -0
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts +0 -10
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +4 -34
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts +1 -3
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js +7 -59
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts +38 -0
- package/bin/executor/core-engine/CoreEngineContextCompaction.d.ts.map +1 -0
- package/bin/executor/core-engine/CoreEngineContextCompaction.js +392 -0
- package/bin/executor/core-engine/CoreEngineContextCompaction.js.map +1 -0
- package/bin/executor/core-engine/CoreEngineMessageState.d.ts +15 -0
- package/bin/executor/core-engine/CoreEngineMessageState.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineMessageState.js +20 -0
- package/bin/executor/core-engine/CoreEngineMessageState.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts +15 -0
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.js +150 -35
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +7 -23
- package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +2 -4
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js.map +1 -1
- package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -1
- package/bin/executor/tools/plugin/PluginToolBridge.js +4 -2
- package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -1
- package/bin/executor/types/SessionRun.d.ts +8 -0
- package/bin/executor/types/SessionRun.d.ts.map +1 -1
- package/bin/index.d.ts +3 -2
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +2 -2
- package/bin/index.js.map +1 -1
- package/bin/model/CityModelAdapter.d.ts +6 -0
- package/bin/model/CityModelAdapter.d.ts.map +1 -1
- package/bin/model/CityModelAdapter.js +13 -0
- package/bin/model/CityModelAdapter.js.map +1 -1
- package/bin/plugin/core/PluginLocalExecution.js +3 -3
- package/bin/plugin/core/PluginLocalExecution.js.map +1 -1
- package/bin/plugin/core/PluginRegistry.d.ts +41 -2
- package/bin/plugin/core/PluginRegistry.d.ts.map +1 -1
- package/bin/plugin/core/PluginRegistry.js +145 -6
- package/bin/plugin/core/PluginRegistry.js.map +1 -1
- package/bin/rpc/Client.d.ts +4 -0
- package/bin/rpc/Client.d.ts.map +1 -1
- package/bin/rpc/Client.js +11 -0
- package/bin/rpc/Client.js.map +1 -1
- package/bin/session/Session.d.ts +15 -1
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +83 -11
- package/bin/session/Session.js.map +1 -1
- package/bin/session/SessionSystemBuilder.d.ts.map +1 -1
- package/bin/session/SessionSystemBuilder.js +3 -1
- package/bin/session/SessionSystemBuilder.js.map +1 -1
- package/bin/session/browse/Browse.d.ts +0 -8
- package/bin/session/browse/Browse.d.ts.map +1 -1
- package/bin/session/browse/Browse.js +72 -57
- package/bin/session/browse/Browse.js.map +1 -1
- package/bin/session/recorder/JsonlSessionMessageStore.d.ts +69 -16
- package/bin/session/recorder/JsonlSessionMessageStore.d.ts.map +1 -1
- package/bin/session/recorder/JsonlSessionMessageStore.js +283 -60
- package/bin/session/recorder/JsonlSessionMessageStore.js.map +1 -1
- package/bin/session/recorder/SessionRecorder.d.ts +20 -2
- package/bin/session/recorder/SessionRecorder.d.ts.map +1 -1
- package/bin/session/recorder/SessionRecorder.js +91 -46
- package/bin/session/recorder/SessionRecorder.js.map +1 -1
- package/bin/session/recorder/SessionRecorderCompaction.d.ts +3 -3
- package/bin/session/recorder/SessionRecorderCompaction.d.ts.map +1 -1
- package/bin/session/recorder/SessionRecorderCompaction.js +118 -88
- package/bin/session/recorder/SessionRecorderCompaction.js.map +1 -1
- package/bin/session/recorder/SessionRecorderHistoryStore.d.ts +2 -2
- package/bin/session/recorder/SessionRecorderHistoryStore.d.ts.map +1 -1
- package/bin/session/recorder/SessionRecorderHistoryStore.js +31 -36
- package/bin/session/recorder/SessionRecorderHistoryStore.js.map +1 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts +21 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
- package/bin/session/runtime/SessionPromptRuntime.js +65 -8
- package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
- package/bin/session/services/SessionStateService.d.ts +19 -1
- package/bin/session/services/SessionStateService.d.ts.map +1 -1
- package/bin/session/services/SessionStateService.js +70 -40
- package/bin/session/services/SessionStateService.js.map +1 -1
- package/bin/session/services/SessionTurnService.d.ts +15 -0
- package/bin/session/services/SessionTurnService.d.ts.map +1 -1
- package/bin/session/services/SessionTurnService.js +104 -7
- package/bin/session/services/SessionTurnService.js.map +1 -1
- package/bin/session/services/SessionViewService.d.ts +1 -5
- package/bin/session/services/SessionViewService.d.ts.map +1 -1
- package/bin/session/services/SessionViewService.js +4 -34
- package/bin/session/services/SessionViewService.js.map +1 -1
- package/bin/session/storage/Paths.d.ts +3 -15
- package/bin/session/storage/Paths.d.ts.map +1 -1
- package/bin/session/storage/Paths.js +5 -21
- package/bin/session/storage/Paths.js.map +1 -1
- package/bin/types/agent/SessionActor.d.ts +8 -0
- package/bin/types/agent/SessionActor.d.ts.map +1 -1
- package/bin/types/agent/SessionTypes.d.ts +2 -24
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +29 -0
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
- package/bin/types/plugin/PluginRuntime.d.ts +59 -2
- package/bin/types/plugin/PluginRuntime.d.ts.map +1 -1
- package/bin/types/plugin/PluginState.d.ts +10 -0
- package/bin/types/plugin/PluginState.d.ts.map +1 -1
- package/bin/types/rpc/RpcProtocol.d.ts +10 -0
- package/bin/types/rpc/RpcProtocol.d.ts.map +1 -1
- package/bin/types/runtime/agent/AgentContext.d.ts +17 -5
- package/bin/types/runtime/agent/AgentContext.d.ts.map +1 -1
- package/bin/types/runtime/agent/AgentContext.js +29 -6
- package/bin/types/runtime/agent/AgentContext.js.map +1 -1
- package/bin/types/session/SessionLocalState.d.ts +8 -0
- package/bin/types/session/SessionLocalState.d.ts.map +1 -1
- package/bin/types/session/SessionMessage.d.ts +16 -12
- package/bin/types/session/SessionMessage.d.ts.map +1 -1
- package/bin/types/session/SessionMutation.d.ts +1 -1
- package/bin/types/session/SessionMutation.js +1 -1
- package/bin/types/session/SessionOptions.d.ts +16 -0
- package/bin/types/session/SessionOptions.d.ts.map +1 -1
- package/bin/types/session/SessionQueueCommand.d.ts +68 -0
- package/bin/types/session/SessionQueueCommand.d.ts.map +1 -0
- package/bin/types/session/SessionQueueCommand.js +10 -0
- package/bin/types/session/SessionQueueCommand.js.map +1 -0
- package/bin/types/session/SessionSegment.d.ts +57 -0
- package/bin/types/session/SessionSegment.d.ts.map +1 -0
- package/bin/types/session/SessionSegment.js +8 -0
- package/bin/types/session/SessionSegment.js.map +1 -0
- package/bin/utils/logger/Logger.d.ts +7 -9
- package/bin/utils/logger/Logger.d.ts.map +1 -1
- package/bin/utils/logger/Logger.js +11 -9
- package/bin/utils/logger/Logger.js.map +1 -1
- package/package.json +3 -3
- package/scripts/city-model-tool-loop.test.mjs +32 -0
- package/scripts/core-engine-context-compaction.test.mjs +411 -0
- package/scripts/logger-isolation.test.mjs +55 -0
- package/scripts/multi-agent-plugin-isolation.test.mjs +289 -0
- package/scripts/plugin-tool-bridge.test.mjs +52 -0
- package/scripts/remote-session-reconnect.test.mjs +18 -0
- package/scripts/session-action-message.test.mjs +59 -13
- package/scripts/session-compaction-context-window.test.mjs +96 -0
- package/scripts/session-config-turn-boundary.test.mjs +278 -0
- package/scripts/session-list-title.test.mjs +21 -3
- package/scripts/session-prompt-runtime.test.mjs +93 -0
- package/scripts/session-recorder.test.mjs +335 -15
- package/src/agent/local/Agent.ts +34 -3
- package/src/agent/local/services/AgentSessions.ts +61 -0
- package/src/agent/remote/RemoteSession.ts +5 -0
- package/src/agent/remote/RemoteTransport.ts +2 -0
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +15 -5
- package/src/agent/remote/transports/RpcRemoteAgentTransport.ts +4 -0
- package/src/executor/Executor.ts +161 -7
- package/src/executor/composer/compaction/SessionCompactionComposer.ts +12 -0
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +4 -55
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionExecutor.ts +8 -66
- package/src/executor/core-engine/CoreEngineContextCompaction.ts +477 -0
- package/src/executor/core-engine/CoreEngineMessageState.ts +29 -0
- package/src/executor/core-engine/CoreEngineRunner.ts +211 -43
- package/src/executor/store/history/SessionHistoryStore.ts +7 -26
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +2 -4
- package/src/executor/tools/plugin/PluginToolBridge.ts +4 -2
- package/src/executor/types/SessionRun.ts +9 -0
- package/src/index.ts +9 -1
- package/src/model/CityModelAdapter.ts +15 -0
- package/src/plugin/core/PluginLocalExecution.ts +3 -3
- package/src/plugin/core/PluginRegistry.ts +187 -6
- package/src/rpc/Client.ts +12 -0
- package/src/session/Session.ts +97 -11
- package/src/session/SessionSystemBuilder.ts +4 -1
- package/src/session/browse/Browse.ts +73 -69
- package/src/session/recorder/JsonlSessionMessageStore.ts +378 -60
- package/src/session/recorder/SessionRecorder.ts +116 -49
- package/src/session/recorder/SessionRecorderCompaction.ts +131 -108
- package/src/session/recorder/SessionRecorderHistoryStore.ts +29 -49
- package/src/session/runtime/SessionPromptRuntime.ts +86 -10
- package/src/session/services/SessionStateService.ts +89 -45
- package/src/session/services/SessionTurnService.ts +112 -7
- package/src/session/services/SessionViewService.ts +4 -50
- package/src/session/storage/Paths.ts +5 -38
- package/src/types/agent/SessionActor.ts +9 -0
- package/src/types/agent/SessionTypes.ts +2 -24
- package/src/types/executor/SessionRunContext.ts +34 -0
- package/src/types/plugin/PluginRuntime.ts +63 -2
- package/src/types/plugin/PluginState.ts +10 -0
- package/src/types/rpc/RpcProtocol.ts +11 -0
- package/src/types/runtime/agent/AgentContext.ts +32 -7
- package/src/types/session/SessionLocalState.ts +9 -0
- package/src/types/session/SessionMessage.ts +16 -12
- package/src/types/session/SessionMutation.ts +1 -1
- package/src/types/session/SessionOptions.ts +21 -0
- package/src/types/session/SessionQueueCommand.ts +78 -0
- package/src/types/session/SessionSegment.ts +62 -0
- package/src/utils/logger/Logger.ts +10 -10
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,83 +1,143 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Session Message 的 Active + Segment JSONL 存储。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Active 保存上次 Compact 后产生的真实 Message;Compact 把 Active 前缀写入按
|
|
5
|
+
* sequence 范围命名的不可变 Segment,并在 Segment 末尾追加累计 Summary footer。
|
|
6
6
|
*/
|
|
7
7
|
import fs from "fs-extra";
|
|
8
8
|
import { open, readFile, stat } from "node:fs/promises";
|
|
9
9
|
import path from "node:path";
|
|
10
10
|
import { generateId } from "../../utils/Id.js";
|
|
11
|
-
|
|
11
|
+
const SEGMENT_FILE_PATTERN = /^(\d+)-(\d+)\.jsonl$/;
|
|
12
|
+
const SEQUENCE_FILE_WIDTH = 12;
|
|
13
|
+
/** Active + Segment JSONL 存储。 */
|
|
12
14
|
export class JsonlSessionMessageStore {
|
|
13
15
|
session_id;
|
|
14
|
-
|
|
16
|
+
active_file_path;
|
|
15
17
|
assistant_message_file_path;
|
|
18
|
+
segments_dir_path;
|
|
16
19
|
lock_file_path;
|
|
17
20
|
constructor(options) {
|
|
18
21
|
this.session_id = String(options.session_id || "").trim();
|
|
19
|
-
this.
|
|
22
|
+
this.active_file_path = path.resolve(options.file_path);
|
|
20
23
|
this.assistant_message_file_path = path.resolve(options.assistant_message_file_path ||
|
|
21
|
-
path.join(path.dirname(this.
|
|
22
|
-
this.
|
|
24
|
+
path.join(path.dirname(this.active_file_path), "assistant_message.json"));
|
|
25
|
+
this.segments_dir_path = path.join(path.dirname(this.active_file_path), "segments");
|
|
26
|
+
this.lock_file_path = `${this.active_file_path}.lock`;
|
|
23
27
|
if (!this.session_id)
|
|
24
28
|
throw new Error("JsonlSessionMessageStore requires session_id");
|
|
25
29
|
}
|
|
26
|
-
/**
|
|
30
|
+
/** 创建 Active 与 Segment 布局,并清理已经完成的遗留草稿。 */
|
|
27
31
|
async initialize() {
|
|
28
|
-
await this.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
await this.with_write_lock(async () => {
|
|
33
|
+
const ranges = await this.list_segment_ranges();
|
|
34
|
+
const folded_messages = await this.read_folded_active_messages_unsafe();
|
|
35
|
+
const latest_segment_end = ranges.at(-1)?.end_sequence || 0;
|
|
36
|
+
const messages = folded_messages.filter((message) => message.sequence > latest_segment_end);
|
|
37
|
+
// Compact 先落 Segment 再覆盖 Active。若进程在两步之间退出,重启时按
|
|
38
|
+
// Segment sequence 边界清除 Active 重叠前缀,保证不丢消息且上下文不重复。
|
|
39
|
+
if (messages.length !== folded_messages.length) {
|
|
40
|
+
await this.write_active_messages_unsafe(messages);
|
|
41
|
+
}
|
|
42
|
+
const draft = await this.read_assistant_message();
|
|
43
|
+
if (draft && draft.session_id !== this.session_id) {
|
|
44
|
+
throw new Error("assistant_message.json session_id mismatch");
|
|
45
|
+
}
|
|
46
|
+
const finalized = draft && messages.find((message) => message.message_id === draft.message_id);
|
|
47
|
+
const effective_draft = draft && finalized?.type === "assistant" &&
|
|
48
|
+
finalized.revision >= draft.revision &&
|
|
49
|
+
finalized.status !== "streaming"
|
|
50
|
+
? null
|
|
51
|
+
: draft;
|
|
52
|
+
this.validate_runtime_sequence(effective_draft ? [...messages, effective_draft] : messages, latest_segment_end);
|
|
53
|
+
if (draft &&
|
|
54
|
+
finalized?.type === "assistant" &&
|
|
55
|
+
finalized.revision >= draft.revision &&
|
|
56
|
+
finalized.status !== "streaming") {
|
|
57
|
+
await fs.remove(this.assistant_message_file_path);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
38
60
|
}
|
|
39
|
-
/** 读取
|
|
61
|
+
/** 读取 Active 和当前 Assistant 草稿,并按 revision 折叠。 */
|
|
40
62
|
async list_messages() {
|
|
41
63
|
await this.ensure_layout();
|
|
42
|
-
const by_id = new Map();
|
|
43
|
-
const raw = await fs.readFile(this.messages_file_path, "utf8").catch(() => "");
|
|
44
|
-
for (const [index, line] of raw.split("\n").entries()) {
|
|
45
|
-
const value = line.trim();
|
|
46
|
-
if (!value)
|
|
47
|
-
continue;
|
|
48
|
-
try {
|
|
49
|
-
const message = JSON.parse(value);
|
|
50
|
-
this.validate_message(message);
|
|
51
|
-
const previous = by_id.get(message.message_id);
|
|
52
|
-
if (!previous || message.revision > previous.revision)
|
|
53
|
-
by_id.set(message.message_id, message);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
throw new Error(`Invalid session message at line ${String(index + 1)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
64
|
+
const by_id = new Map((await this.read_active_messages_unsafe()).map((message) => [message.message_id, message]));
|
|
59
65
|
const draft = await this.read_assistant_message();
|
|
60
66
|
if (draft) {
|
|
61
67
|
const previous = by_id.get(draft.message_id);
|
|
62
68
|
if (!previous || draft.revision > previous.revision)
|
|
63
69
|
by_id.set(draft.message_id, draft);
|
|
64
70
|
}
|
|
65
|
-
|
|
71
|
+
const messages = [...by_id.values()].sort(compare_message_sequence);
|
|
72
|
+
const ranges = await this.list_segment_ranges();
|
|
73
|
+
this.validate_runtime_sequence(messages, ranges.at(-1)?.end_sequence || 0);
|
|
74
|
+
return messages;
|
|
75
|
+
}
|
|
76
|
+
/** 读取指定 sequence 之前最近的完整 Segment。 */
|
|
77
|
+
async read_segment_before(before_sequence) {
|
|
78
|
+
const boundary = Number(before_sequence);
|
|
79
|
+
if (!Number.isFinite(boundary))
|
|
80
|
+
return null;
|
|
81
|
+
const ranges = await this.list_segment_ranges();
|
|
82
|
+
const range = [...ranges].reverse().find((item) => item.end_sequence < boundary);
|
|
83
|
+
return range ? await this.read_segment(range) : null;
|
|
84
|
+
}
|
|
85
|
+
/** 读取最新已关闭 Segment 的累计 Summary。 */
|
|
86
|
+
async read_latest_summary() {
|
|
87
|
+
const ranges = await this.list_segment_ranges();
|
|
88
|
+
const latest = ranges[ranges.length - 1];
|
|
89
|
+
return latest ? (await this.read_segment(latest)).summary : null;
|
|
90
|
+
}
|
|
91
|
+
/** 读取全部真实历史,供 Fork 等明确需要完整复制的操作使用。 */
|
|
92
|
+
async list_history_messages() {
|
|
93
|
+
const ranges = await this.list_segment_ranges();
|
|
94
|
+
const messages = [];
|
|
95
|
+
for (const range of ranges) {
|
|
96
|
+
messages.push(...(await this.read_segment(range)).messages);
|
|
97
|
+
}
|
|
98
|
+
messages.push(...(await this.list_messages()));
|
|
99
|
+
return messages.sort(compare_message_sequence);
|
|
100
|
+
}
|
|
101
|
+
/** 读取当前存储统计,不解析与当前操作无关的旧 Segment 正文。 */
|
|
102
|
+
async stats() {
|
|
103
|
+
const ranges = await this.list_segment_ranges();
|
|
104
|
+
const active_messages = await this.list_messages();
|
|
105
|
+
const latest_range = ranges[ranges.length - 1];
|
|
106
|
+
const latest_message = active_messages[active_messages.length - 1] ||
|
|
107
|
+
(latest_range ? (await this.read_segment(latest_range)).messages.at(-1) : null) ||
|
|
108
|
+
null;
|
|
109
|
+
const paths = [this.active_file_path, ...ranges.map((range) => range.file_path)];
|
|
110
|
+
const sizes = await Promise.all(paths.map(async (file_path) => await stat(file_path).then((value) => value.size).catch(() => 0)));
|
|
111
|
+
const latest_sequence = Math.max(latest_range?.end_sequence || 0, active_messages.reduce((max, message) => Math.max(max, message.sequence), 0));
|
|
112
|
+
return {
|
|
113
|
+
message_count: latest_sequence,
|
|
114
|
+
history_bytes: sizes.reduce((total, size) => total + size, 0),
|
|
115
|
+
latest_message,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** 判断给定边界之前是否仍存在历史 Segment。 */
|
|
119
|
+
async has_segment_before(before_sequence) {
|
|
120
|
+
return (await this.list_segment_ranges()).some((range) => range.end_sequence < before_sequence);
|
|
121
|
+
}
|
|
122
|
+
/** 返回当前 Active 之前的读取边界。 */
|
|
123
|
+
async active_before_sequence(messages) {
|
|
124
|
+
const first = messages[0];
|
|
125
|
+
if (first)
|
|
126
|
+
return first.sequence;
|
|
127
|
+
const ranges = await this.list_segment_ranges();
|
|
128
|
+
const latest = ranges[ranges.length - 1];
|
|
129
|
+
return latest ? latest.end_sequence + 1 : undefined;
|
|
66
130
|
}
|
|
67
131
|
/** 读取当前运行中的 Assistant 草稿。 */
|
|
68
132
|
async read_assistant_message() {
|
|
69
133
|
try {
|
|
70
134
|
const value = await fs.readJson(this.assistant_message_file_path);
|
|
71
135
|
this.validate_message(value);
|
|
72
|
-
|
|
73
|
-
return null;
|
|
74
|
-
return value;
|
|
136
|
+
return value.type === "assistant" && value.status === "streaming" ? value : null;
|
|
75
137
|
}
|
|
76
138
|
catch (error) {
|
|
77
139
|
if (error.code === "ENOENT")
|
|
78
140
|
return null;
|
|
79
|
-
if (error instanceof SyntaxError)
|
|
80
|
-
throw error;
|
|
81
141
|
throw error;
|
|
82
142
|
}
|
|
83
143
|
}
|
|
@@ -97,15 +157,17 @@ export class JsonlSessionMessageStore {
|
|
|
97
157
|
await this.write_assistant_message_unsafe(message);
|
|
98
158
|
});
|
|
99
159
|
}
|
|
100
|
-
/**
|
|
160
|
+
/** 在写锁内分配全局 sequence 并创建唯一 Assistant 草稿。 */
|
|
101
161
|
async create_assistant_message(build_message) {
|
|
102
162
|
return await this.with_write_lock(async () => {
|
|
103
163
|
const current = await this.read_assistant_message();
|
|
104
164
|
if (current)
|
|
105
165
|
throw new Error(`Assistant draft already exists: ${current.message_id}`);
|
|
106
|
-
const messages = await this.
|
|
166
|
+
const messages = await this.read_active_messages_unsafe();
|
|
167
|
+
const ranges = await this.list_segment_ranges();
|
|
168
|
+
this.validate_runtime_sequence(messages, ranges.at(-1)?.end_sequence || 0);
|
|
107
169
|
const message = build_message({
|
|
108
|
-
message_sequence:
|
|
170
|
+
message_sequence: await this.next_sequence_unsafe(messages),
|
|
109
171
|
messages,
|
|
110
172
|
});
|
|
111
173
|
this.validate_message(message);
|
|
@@ -116,22 +178,24 @@ export class JsonlSessionMessageStore {
|
|
|
116
178
|
return message;
|
|
117
179
|
});
|
|
118
180
|
}
|
|
119
|
-
/** 创建新 Message
|
|
181
|
+
/** 创建新 Message 或向 Active 追加已有 Message revision。 */
|
|
120
182
|
async append_message(build_message) {
|
|
121
183
|
return await this.with_write_lock(async () => {
|
|
122
|
-
const messages = await this.
|
|
184
|
+
const messages = await this.read_active_messages_unsafe();
|
|
123
185
|
const draft = await this.read_assistant_message();
|
|
124
186
|
const current_messages = draft ? [...messages, draft] : messages;
|
|
187
|
+
const ranges = await this.list_segment_ranges();
|
|
188
|
+
this.validate_runtime_sequence(current_messages, ranges.at(-1)?.end_sequence || 0);
|
|
125
189
|
const message = build_message({
|
|
126
|
-
message_sequence:
|
|
190
|
+
message_sequence: await this.next_sequence_unsafe(current_messages),
|
|
127
191
|
messages: current_messages,
|
|
128
192
|
});
|
|
129
193
|
this.validate_message(message);
|
|
130
|
-
await fs.appendFile(this.
|
|
194
|
+
await fs.appendFile(this.active_file_path, `${JSON.stringify(message)}\n`, "utf8");
|
|
131
195
|
return message;
|
|
132
196
|
});
|
|
133
197
|
}
|
|
134
|
-
/** 将 Assistant
|
|
198
|
+
/** 将 Assistant 草稿最终追加到 Active,并删除草稿文件。 */
|
|
135
199
|
async finalize_assistant_message(message) {
|
|
136
200
|
this.validate_message(message);
|
|
137
201
|
if (message.status === "streaming")
|
|
@@ -144,12 +208,112 @@ export class JsonlSessionMessageStore {
|
|
|
144
208
|
if (message.revision !== current.revision + 1) {
|
|
145
209
|
throw new Error(`Invalid final Assistant revision: ${message.message_id}`);
|
|
146
210
|
}
|
|
147
|
-
await fs.appendFile(this.
|
|
211
|
+
await fs.appendFile(this.active_file_path, `${JSON.stringify(message)}\n`, "utf8");
|
|
148
212
|
await fs.remove(this.assistant_message_file_path);
|
|
149
213
|
});
|
|
150
214
|
}
|
|
151
|
-
|
|
152
|
-
|
|
215
|
+
/** 把 Active 前缀与累计 Summary 提交为不可变 Segment。 */
|
|
216
|
+
async compact_active(input) {
|
|
217
|
+
return await this.with_write_lock(async () => {
|
|
218
|
+
const draft = await this.read_assistant_message();
|
|
219
|
+
if (draft)
|
|
220
|
+
throw new Error("Cannot compact while Assistant is streaming");
|
|
221
|
+
const active_messages = await this.read_active_messages_unsafe();
|
|
222
|
+
const ranges = await this.list_segment_ranges();
|
|
223
|
+
this.validate_runtime_sequence(active_messages, ranges.at(-1)?.end_sequence || 0);
|
|
224
|
+
const segment_messages = active_messages.filter((message) => message.sequence <= input.through_sequence);
|
|
225
|
+
const retained_messages = active_messages.filter((message) => message.sequence > input.through_sequence);
|
|
226
|
+
if (segment_messages.length === 0) {
|
|
227
|
+
throw new Error("Compact boundary does not include Active messages");
|
|
228
|
+
}
|
|
229
|
+
const start_sequence = segment_messages[0].sequence;
|
|
230
|
+
const end_sequence = segment_messages.at(-1)?.sequence || 0;
|
|
231
|
+
if (input.summary.through_sequence !== end_sequence) {
|
|
232
|
+
throw new Error("Compact Summary boundary does not match Segment end");
|
|
233
|
+
}
|
|
234
|
+
const range = {
|
|
235
|
+
start_sequence,
|
|
236
|
+
end_sequence,
|
|
237
|
+
file_path: this.segment_file_path(start_sequence, end_sequence),
|
|
238
|
+
};
|
|
239
|
+
if (await fs.pathExists(range.file_path)) {
|
|
240
|
+
throw new Error(`Session Segment already exists: ${range.file_path}`);
|
|
241
|
+
}
|
|
242
|
+
await this.write_segment_unsafe(range, segment_messages, input.summary);
|
|
243
|
+
await this.write_active_messages_unsafe(retained_messages);
|
|
244
|
+
return {
|
|
245
|
+
segment: { range, messages: segment_messages, summary: input.summary },
|
|
246
|
+
active_messages: retained_messages,
|
|
247
|
+
};
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/** 扫描 Segment 文件名并返回 sequence 升序索引。 */
|
|
251
|
+
async list_segment_ranges() {
|
|
252
|
+
await this.ensure_layout();
|
|
253
|
+
const entries = await fs.readdir(this.segments_dir_path, { withFileTypes: true });
|
|
254
|
+
const ranges = entries
|
|
255
|
+
.flatMap((entry) => {
|
|
256
|
+
if (!entry.isFile())
|
|
257
|
+
return [];
|
|
258
|
+
const match = SEGMENT_FILE_PATTERN.exec(entry.name);
|
|
259
|
+
if (!match)
|
|
260
|
+
return [];
|
|
261
|
+
const start_sequence = Number(match[1]);
|
|
262
|
+
const end_sequence = Number(match[2]);
|
|
263
|
+
if (!Number.isInteger(start_sequence) || !Number.isInteger(end_sequence))
|
|
264
|
+
return [];
|
|
265
|
+
return [{
|
|
266
|
+
start_sequence,
|
|
267
|
+
end_sequence,
|
|
268
|
+
file_path: path.join(this.segments_dir_path, entry.name),
|
|
269
|
+
}];
|
|
270
|
+
})
|
|
271
|
+
.sort((left, right) => left.start_sequence - right.start_sequence);
|
|
272
|
+
for (let index = 0; index < ranges.length; index += 1) {
|
|
273
|
+
const range = ranges[index];
|
|
274
|
+
const previous = ranges[index - 1];
|
|
275
|
+
if (!range || range.start_sequence > range.end_sequence) {
|
|
276
|
+
throw new Error("Session Segment filename contains an invalid sequence range");
|
|
277
|
+
}
|
|
278
|
+
if (index === 0 && range.start_sequence !== 1) {
|
|
279
|
+
throw new Error("The first Session Segment must start at sequence 1");
|
|
280
|
+
}
|
|
281
|
+
if (previous && range.start_sequence !== previous.end_sequence + 1) {
|
|
282
|
+
throw new Error("Session Segment sequence ranges must be contiguous and non-overlapping");
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return ranges;
|
|
286
|
+
}
|
|
287
|
+
/** 读取并验证一个不可变 Segment。 */
|
|
288
|
+
async read_segment(range) {
|
|
289
|
+
const raw = await fs.readFile(range.file_path, "utf8");
|
|
290
|
+
const lines = raw.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
291
|
+
const summary_value = JSON.parse(lines.pop() || "null");
|
|
292
|
+
this.validate_summary(summary_value, range.end_sequence);
|
|
293
|
+
const messages = lines.map((line) => {
|
|
294
|
+
const message = JSON.parse(line);
|
|
295
|
+
this.validate_message(message);
|
|
296
|
+
return message;
|
|
297
|
+
}).sort(compare_message_sequence);
|
|
298
|
+
if (messages.length !== range.end_sequence - range.start_sequence + 1 ||
|
|
299
|
+
messages[0]?.sequence !== range.start_sequence ||
|
|
300
|
+
messages.at(-1)?.sequence !== range.end_sequence ||
|
|
301
|
+
messages.some((message, index) => message.sequence !== range.start_sequence + index)) {
|
|
302
|
+
throw new Error(`Session Segment range mismatch: ${range.file_path}`);
|
|
303
|
+
}
|
|
304
|
+
return { range, messages, summary: summary_value };
|
|
305
|
+
}
|
|
306
|
+
/** 读取 Active 中每个 Message 的最高 revision。 */
|
|
307
|
+
async read_active_messages_unsafe() {
|
|
308
|
+
const messages = await this.read_folded_active_messages_unsafe();
|
|
309
|
+
const ranges = await this.list_segment_ranges();
|
|
310
|
+
const latest_segment_end = ranges.at(-1)?.end_sequence || 0;
|
|
311
|
+
const active_messages = messages.filter((message) => message.sequence > latest_segment_end);
|
|
312
|
+
return active_messages;
|
|
313
|
+
}
|
|
314
|
+
/** 读取 Active 原始行,并按 Message ID 保留最高 revision。 */
|
|
315
|
+
async read_folded_active_messages_unsafe() {
|
|
316
|
+
const raw = await fs.readFile(this.active_file_path, "utf8").catch(() => "");
|
|
153
317
|
const by_id = new Map();
|
|
154
318
|
for (const line of raw.split("\n")) {
|
|
155
319
|
if (!line.trim())
|
|
@@ -160,14 +324,45 @@ export class JsonlSessionMessageStore {
|
|
|
160
324
|
if (!previous || message.revision > previous.revision)
|
|
161
325
|
by_id.set(message.message_id, message);
|
|
162
326
|
}
|
|
163
|
-
return [...by_id.values()].sort(
|
|
327
|
+
return [...by_id.values()].sort(compare_message_sequence);
|
|
328
|
+
}
|
|
329
|
+
/** 计算下一条真实 Message sequence。 */
|
|
330
|
+
async next_sequence_unsafe(messages) {
|
|
331
|
+
const ranges = await this.list_segment_ranges();
|
|
332
|
+
return Math.max(ranges.at(-1)?.end_sequence || 0, messages.reduce((max, message) => Math.max(max, message.sequence), 0)) + 1;
|
|
164
333
|
}
|
|
334
|
+
/** 原子覆盖 Assistant 草稿。 */
|
|
165
335
|
async write_assistant_message_unsafe(message) {
|
|
166
336
|
const temporary_path = `${this.assistant_message_file_path}.${process.pid}.${Date.now()}.tmp`;
|
|
167
|
-
await fs.ensureDir(path.dirname(this.assistant_message_file_path));
|
|
168
337
|
await fs.writeJson(temporary_path, message, { spaces: 2 });
|
|
169
338
|
await fs.move(temporary_path, this.assistant_message_file_path, { overwrite: true });
|
|
170
339
|
}
|
|
340
|
+
/** 原子覆盖 Active,只写入每个 Message 的最终 revision。 */
|
|
341
|
+
async write_active_messages_unsafe(messages) {
|
|
342
|
+
const temporary_path = `${this.active_file_path}.${process.pid}.${Date.now()}.tmp`;
|
|
343
|
+
const content = messages.length > 0
|
|
344
|
+
? `${messages.map((message) => JSON.stringify(message)).join("\n")}\n`
|
|
345
|
+
: "";
|
|
346
|
+
await fs.writeFile(temporary_path, content, "utf8");
|
|
347
|
+
await fs.move(temporary_path, this.active_file_path, { overwrite: true });
|
|
348
|
+
}
|
|
349
|
+
/** 原子创建一个带累计 Summary footer 的 Segment。 */
|
|
350
|
+
async write_segment_unsafe(range, messages, summary) {
|
|
351
|
+
const temporary_path = `${range.file_path}.${process.pid}.${Date.now()}.tmp`;
|
|
352
|
+
const content = `${[
|
|
353
|
+
...messages.map((message) => JSON.stringify(message)),
|
|
354
|
+
JSON.stringify(summary),
|
|
355
|
+
].join("\n")}\n`;
|
|
356
|
+
await fs.writeFile(temporary_path, content, "utf8");
|
|
357
|
+
await fs.move(temporary_path, range.file_path, { overwrite: false });
|
|
358
|
+
}
|
|
359
|
+
/** 生成稳定的 Segment sequence 范围文件名。 */
|
|
360
|
+
segment_file_path(start_sequence, end_sequence) {
|
|
361
|
+
const start = String(start_sequence).padStart(SEQUENCE_FILE_WIDTH, "0");
|
|
362
|
+
const end = String(end_sequence).padStart(SEQUENCE_FILE_WIDTH, "0");
|
|
363
|
+
return path.join(this.segments_dir_path, `${start}-${end}.jsonl`);
|
|
364
|
+
}
|
|
365
|
+
/** 验证真实 Session Message。 */
|
|
171
366
|
validate_message(message) {
|
|
172
367
|
if (!message || typeof message !== "object")
|
|
173
368
|
throw new Error("message must be an object");
|
|
@@ -186,10 +381,32 @@ export class JsonlSessionMessageStore {
|
|
|
186
381
|
}
|
|
187
382
|
}
|
|
188
383
|
}
|
|
384
|
+
/** 验证 Segment footer Summary。 */
|
|
385
|
+
validate_summary(summary, expected_sequence) {
|
|
386
|
+
if (!summary || summary.record_type !== "summary") {
|
|
387
|
+
throw new Error("Session Segment summary footer is required");
|
|
388
|
+
}
|
|
389
|
+
if (summary.session_id !== this.session_id || !summary.summary_id) {
|
|
390
|
+
throw new Error("Session Segment summary identity mismatch");
|
|
391
|
+
}
|
|
392
|
+
if (summary.through_sequence !== expected_sequence || !String(summary.text || "").trim()) {
|
|
393
|
+
throw new Error("Session Segment summary boundary is invalid");
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/** 验证 Active 与草稿合并后紧接最新 Segment,且真实 Message sequence 连续。 */
|
|
397
|
+
validate_runtime_sequence(messages, latest_segment_end) {
|
|
398
|
+
const ordered_messages = [...messages].sort(compare_message_sequence);
|
|
399
|
+
if (ordered_messages.some((message, index) => message.sequence !== latest_segment_end + index + 1)) {
|
|
400
|
+
throw new Error("Active and draft Session Message sequences must be contiguous");
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/** 创建 Active、Segment 与锁所需目录。 */
|
|
189
404
|
async ensure_layout() {
|
|
190
|
-
await fs.ensureDir(path.dirname(this.
|
|
191
|
-
await fs.
|
|
405
|
+
await fs.ensureDir(path.dirname(this.active_file_path));
|
|
406
|
+
await fs.ensureDir(this.segments_dir_path);
|
|
407
|
+
await fs.ensureFile(this.active_file_path);
|
|
192
408
|
}
|
|
409
|
+
/** 使用同目录锁串行化 Active、草稿与 Segment 写入。 */
|
|
193
410
|
async with_write_lock(callback) {
|
|
194
411
|
await this.ensure_layout();
|
|
195
412
|
const token = `${process.pid}:${Date.now()}:${generateId()}`;
|
|
@@ -211,8 +428,9 @@ export class JsonlSessionMessageStore {
|
|
|
211
428
|
await fs.remove(this.lock_file_path);
|
|
212
429
|
}
|
|
213
430
|
catch { /* 锁文件可能刚被释放。 */ }
|
|
214
|
-
if (Date.now() - started_at > stale_ms * 2)
|
|
431
|
+
if (Date.now() - started_at > stale_ms * 2) {
|
|
215
432
|
throw new Error(`Session message lock timeout: ${this.lock_file_path}`);
|
|
433
|
+
}
|
|
216
434
|
await new Promise((resolve) => setTimeout(resolve, 40));
|
|
217
435
|
}
|
|
218
436
|
}
|
|
@@ -221,11 +439,16 @@ export class JsonlSessionMessageStore {
|
|
|
221
439
|
}
|
|
222
440
|
finally {
|
|
223
441
|
try {
|
|
224
|
-
if ((await readFile(this.lock_file_path, "utf8")).trim() === token)
|
|
442
|
+
if ((await readFile(this.lock_file_path, "utf8")).trim() === token) {
|
|
225
443
|
await fs.remove(this.lock_file_path);
|
|
444
|
+
}
|
|
226
445
|
}
|
|
227
446
|
catch { /* 锁已被清理。 */ }
|
|
228
447
|
}
|
|
229
448
|
}
|
|
230
449
|
}
|
|
450
|
+
/** 按全局 Message sequence 升序排序。 */
|
|
451
|
+
function compare_message_sequence(left, right) {
|
|
452
|
+
return left.sequence - right.sequence;
|
|
453
|
+
}
|
|
231
454
|
//# sourceMappingURL=JsonlSessionMessageStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonlSessionMessageStore.js","sourceRoot":"","sources":["../../../src/session/recorder/JsonlSessionMessageStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JsonlSessionMessageStore.js","sourceRoot":"","sources":["../../../src/session/recorder/JsonlSessionMessageStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import type { UIMessage, UIMessageChunk } from "ai";
|
|
7
7
|
import { JsonlSessionMessageStore } from "../../session/recorder/JsonlSessionMessageStore.js";
|
|
8
8
|
import type { JsonObject } from "../../types/common/Json.js";
|
|
9
|
-
import type { ListSessionMessagesInput, SessionActionMessage, SessionAssistantMessage, SessionAssistantMessagePart, SessionErrorMessage, SessionMessage, SessionMessagePage, SessionUserMessage, SessionUserMessagePart } from "../../types/session/SessionMessage.js";
|
|
9
|
+
import type { ListSessionMessagesInput, SessionActionMessage, SessionAssistantFilePart, SessionAssistantMessage, SessionAssistantMessagePart, SessionErrorMessage, SessionMessage, SessionMessagePage, SessionUserMessage, SessionUserMessagePart } from "../../types/session/SessionMessage.js";
|
|
10
10
|
import type { SessionMutation } from "../../types/session/SessionMutation.js";
|
|
11
|
+
import type { SessionContextSnapshot, SessionMessageStorageStats, SessionSegmentSummary } from "../../types/session/SessionSegment.js";
|
|
11
12
|
/** SessionRecorder 构造参数。 */
|
|
12
13
|
export interface SessionRecorderOptions {
|
|
13
14
|
/** 当前 Session 标识。 */
|
|
@@ -114,8 +115,21 @@ export declare class SessionRecorder {
|
|
|
114
115
|
}): Promise<SessionActionMessage>;
|
|
115
116
|
/** 创建用户可见 Error Message。 */
|
|
116
117
|
append_error_message(input: AppendSessionErrorMessageInput): Promise<SessionErrorMessage>;
|
|
117
|
-
/**
|
|
118
|
+
/** 读取 Active 或指定边界之前最近的完整 Segment。 */
|
|
118
119
|
list_messages(input?: ListSessionMessagesInput): Promise<SessionMessagePage>;
|
|
120
|
+
/** 读取最新累计 Summary 与全部 Active Message,供模型上下文使用。 */
|
|
121
|
+
context_snapshot(): Promise<SessionContextSnapshot>;
|
|
122
|
+
/** 读取全部真实历史,供 Fork 等明确的全量复制操作使用。 */
|
|
123
|
+
list_history_messages(): Promise<SessionMessage[]>;
|
|
124
|
+
/** 读取当前 Session 的存储统计。 */
|
|
125
|
+
storage_stats(): Promise<SessionMessageStorageStats>;
|
|
126
|
+
/** 把 Active 前缀和累计 Summary 提交为不可变 Segment。 */
|
|
127
|
+
compact_active(input: {
|
|
128
|
+
/** 移入 Segment 的最后一条真实 Message sequence。 */
|
|
129
|
+
through_sequence: number;
|
|
130
|
+
/** 写入 Segment footer 的累计 Summary。 */
|
|
131
|
+
summary: SessionSegmentSummary;
|
|
132
|
+
}): Promise<void>;
|
|
119
133
|
/** 向当前 Session 导入 fork 来源 Message,并重新分配全部身份和顺序。 */
|
|
120
134
|
import_messages(messages: SessionMessage[]): Promise<void>;
|
|
121
135
|
/** @internal 写入 Assistant 原始文本 delta。 */
|
|
@@ -154,6 +168,10 @@ export declare class SessionAssistantMessageWriter {
|
|
|
154
168
|
apply_chunk(chunk: UIMessageChunk): Promise<void>;
|
|
155
169
|
/** 写入一个完整 Assistant part。 */
|
|
156
170
|
upsert_part(part: SessionAssistantMessagePart): Promise<void>;
|
|
171
|
+
/**
|
|
172
|
+
* 把最终结果中的文件补入当前 Assistant,并对流式已写入文件去重。
|
|
173
|
+
*/
|
|
174
|
+
append_file_part(input: Pick<SessionAssistantFilePart, "filename" | "media_type" | "url">): Promise<void>;
|
|
157
175
|
/** 当前实现逐 chunk 等待落盘,因此 flush 在返回时天然完成。 */
|
|
158
176
|
flush(): Promise<void>;
|
|
159
177
|
/** 正常完成当前 assistant segment。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionRecorder.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAEpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAE3B,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionRecorder.d.ts","sourceRoot":"","sources":["../../../src/session/recorder/SessionRecorder.ts"],"names":[],"mappings":"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"}
|