@downcity/agent 1.1.228 → 1.1.232
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/transports/HttpRemoteAgentTransport.d.ts.map +1 -1
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js +0 -7
- package/bin/agent/remote/transports/HttpRemoteAgentTransport.js.map +1 -1
- package/bin/executor/Executor.d.ts +25 -0
- package/bin/executor/Executor.d.ts.map +1 -1
- package/bin/executor/Executor.js +36 -0
- package/bin/executor/Executor.js.map +1 -1
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts +4 -0
- package/bin/executor/composer/compaction/SessionCompactionComposer.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts +0 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.d.ts.map +1 -1
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js +15 -11
- package/bin/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.js.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.d.ts +11 -0
- package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
- package/bin/executor/core-engine/CoreEngineRunner.js +12 -8
- package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
- package/bin/executor/store/history/SessionHistoryStore.d.ts +3 -13
- package/bin/executor/store/history/SessionHistoryStore.d.ts.map +1 -1
- package/bin/executor/store/history/jsonl/JsonlSessionHistoryStore.js +1 -1
- 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/index.d.ts +2 -1
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +1 -1
- 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/PluginRegistry.d.ts +22 -1
- package/bin/plugin/core/PluginRegistry.d.ts.map +1 -1
- package/bin/plugin/core/PluginRegistry.js +46 -4
- package/bin/plugin/core/PluginRegistry.js.map +1 -1
- package/bin/session/Session.d.ts +11 -1
- package/bin/session/Session.d.ts.map +1 -1
- package/bin/session/Session.js +76 -11
- package/bin/session/Session.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 +50 -62
- 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 +17 -1
- package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
- package/bin/session/runtime/SessionPromptRuntime.js +67 -8
- package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
- package/bin/session/services/SessionStateService.d.ts +15 -1
- package/bin/session/services/SessionStateService.d.ts.map +1 -1
- package/bin/session/services/SessionStateService.js +60 -39
- package/bin/session/services/SessionStateService.js.map +1 -1
- package/bin/session/services/SessionTurnService.d.ts +5 -0
- package/bin/session/services/SessionTurnService.d.ts.map +1 -1
- package/bin/session/services/SessionTurnService.js +17 -3
- 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/SessionTypes.d.ts +2 -24
- package/bin/types/agent/SessionTypes.d.ts.map +1 -1
- package/bin/types/executor/SessionRunContext.d.ts +21 -0
- package/bin/types/executor/SessionRunContext.d.ts.map +1 -1
- package/bin/types/plugin/PluginRuntime.d.ts +25 -0
- package/bin/types/plugin/PluginRuntime.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/SessionConfigMutation.d.ts +68 -0
- package/bin/types/session/SessionConfigMutation.d.ts.map +1 -0
- package/bin/types/session/SessionConfigMutation.js +10 -0
- package/bin/types/session/SessionConfigMutation.js.map +1 -0
- 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/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/package.json +3 -3
- package/scripts/city-model-tool-loop.test.mjs +32 -0
- package/scripts/session-action-message.test.mjs +59 -13
- package/scripts/session-compaction-context-window.test.mjs +95 -0
- package/scripts/session-config-turn-boundary.test.mjs +224 -0
- package/scripts/session-list-title.test.mjs +21 -3
- package/scripts/session-prompt-runtime.test.mjs +85 -0
- package/scripts/session-recorder.test.mjs +340 -11
- package/src/agent/local/Agent.ts +34 -3
- package/src/agent/local/services/AgentSessions.ts +61 -0
- package/src/agent/remote/transports/HttpRemoteAgentTransport.ts +0 -5
- package/src/executor/Executor.ts +62 -0
- package/src/executor/composer/compaction/SessionCompactionComposer.ts +5 -0
- package/src/executor/composer/compaction/jsonl/JsonlSessionCompactionComposer.ts +16 -14
- package/src/executor/core-engine/CoreEngineRunner.ts +24 -8
- package/src/executor/store/history/SessionHistoryStore.ts +3 -14
- package/src/executor/store/history/jsonl/JsonlSessionHistoryStore.ts +1 -1
- package/src/executor/tools/plugin/PluginToolBridge.ts +4 -2
- package/src/index.ts +8 -0
- package/src/model/CityModelAdapter.ts +15 -0
- package/src/plugin/core/PluginRegistry.ts +72 -4
- package/src/session/Session.ts +89 -11
- 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 +55 -80
- package/src/session/recorder/SessionRecorderHistoryStore.ts +29 -49
- package/src/session/runtime/SessionPromptRuntime.ts +100 -9
- package/src/session/services/SessionStateService.ts +79 -44
- package/src/session/services/SessionTurnService.ts +19 -3
- package/src/session/services/SessionViewService.ts +4 -50
- package/src/session/storage/Paths.ts +5 -38
- package/src/types/agent/SessionTypes.ts +2 -24
- package/src/types/executor/SessionRunContext.ts +25 -0
- package/src/types/plugin/PluginRuntime.ts +27 -0
- package/src/types/runtime/agent/AgentContext.ts +32 -7
- package/src/types/session/SessionConfigMutation.ts +78 -0
- 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/SessionSegment.ts +62 -0
- 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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA2C3C,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,iCAAiC;AACjC,MAAM,OAAO,wBAAwB;IAC1B,UAAU,CAAS;IACnB,gBAAgB,CAAS;IACzB,2BAA2B,CAAS;IACpC,iBAAiB,CAAS;IAElB,cAAc,CAAS;IAExC,YAAY,OAAwC;QAClD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,OAAO,CAC7C,OAAO,CAAC,2BAA2B;YACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,wBAAwB,CAAC,CAC3E,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;QACpF,IAAI,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC,gBAAgB,OAAO,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACxF,CAAC;IAED,2CAA2C;IAC3C,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kCAAkC,EAAE,CAAC;YACxE,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CACrC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,kBAAkB,CACnD,CAAC;YAEF,gDAAgD;YAChD,mDAAmD;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC/C,MAAM,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC,IAAI,CACtC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,CACrD,CAAC;YACF,MAAM,eAAe,GAAG,KAAK,IAAI,SAAS,EAAE,IAAI,KAAK,WAAW;gBAC9D,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ;gBACpC,SAAS,CAAC,MAAM,KAAK,WAAW;gBAChC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,CAAC;YACV,IAAI,CAAC,yBAAyB,CAC5B,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC3D,kBAAkB,CACnB,CAAC;YACF,IACE,KAAK;gBACL,SAAS,EAAE,IAAI,KAAK,WAAW;gBAC/B,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ;gBACpC,SAAS,CAAC,MAAM,KAAK,WAAW,EAChC,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,CAAC,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAC3F,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,mBAAmB,CAAC,eAAuB;QAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC;QACjF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,qBAAqB;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAChE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/E,IAAI,CAAC;QACP,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CACjG,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,YAAY,EAAE,YAAY,IAAI,CAAC,EAC/B,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC7E,CAAC;QACF,OAAO;YACL,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC;YAC7D,cAAc;SACf,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,kBAAkB,CAAC,eAAuB;QAC9C,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,eAAe,CAChD,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,sBAAsB,CAAC,QAA0B;QACrD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAA4B,CAAC;YAC7F,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,uBAAuB,CAAC,OAAgC;QAC5D,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzF,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,wBAAwB,CAC5B,aAA4E;QAE5E,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpD,IAAI,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACtF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC;YAC3E,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;gBAC3D,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,cAAc,CAClB,aAAmE;QAEnE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAClD,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,IAAI,CAAC,yBAAyB,CAC5B,gBAAgB,EAChB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CACjC,CAAC;YACF,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;gBACnE,QAAQ,EAAE,gBAAgB;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnF,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,0BAA0B,CAAC,OAAgC;QAC/D,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnF,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,cAAc,CAClB,KAAiC;QAEjC,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;YAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAClD,IAAI,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC1E,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAChD,IAAI,CAAC,yBAAyB,CAC5B,eAAe,EACf,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CACjC,CAAC;YACF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAC7C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,gBAAgB,CACxD,CAAC;YACF,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC9C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CACvD,CAAC;YACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpD,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,KAAK,YAAY,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,KAAK,GAAwB;gBACjC,cAAc;gBACd,YAAY;gBACZ,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC;aAChE,CAAC;YACF,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxE,MAAM,IAAI,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;gBACtE,eAAe,EAAE,iBAAiB;aACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO;aACnB,OAAO,CAAsB,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpF,OAAO,CAAC;oBACN,cAAc;oBACd,YAAY;oBACZ,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC;iBACzD,CAAC,CAAC;QACL,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACrE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0BAA0B;IAClB,KAAK,CAAC,YAAY,CAAC,KAA0B;QACnD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,MAAM,CAAiC,CAAC;QACxF,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClC,IACE,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,cAAc,GAAG,CAAC;YACjE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC,cAAc;YAC9C,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC,YAAY;YAChD,QAAQ,CAAC,IAAI,CACX,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,cAAc,GAAG,KAAK,CACtE,EACD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAsC,EAAE,CAAC;IAC9E,CAAC;IAED,0CAA0C;IAClC,KAAK,CAAC,2BAA2B;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kCAAkC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CACrC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,kBAAkB,CACnD,CAAC;QACF,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,iDAAiD;IACzC,KAAK,CAAC,kCAAkC;QAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,SAAS;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;gBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC5D,CAAC;IAED,gCAAgC;IACxB,KAAK,CAAC,oBAAoB,CAAC,QAA0B;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CACb,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,EAChC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACtE,GAAG,CAAC,CAAC;IACR,CAAC;IAED,yBAAyB;IACjB,KAAK,CAAC,8BAA8B,CAAC,OAAgC;QAC3E,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,2BAA2B,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QAC9F,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,8CAA8C;IACtC,KAAK,CAAC,4BAA4B,CAAC,QAA0B;QACnE,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACnF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACtE,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,0CAA0C;IAClC,KAAK,CAAC,oBAAoB,CAChC,KAA0B,EAC1B,QAA0B,EAC1B,OAA8B;QAE9B,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QAC7E,MAAM,OAAO,GAAG,GAAG;YACjB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SACxB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,oCAAoC;IAC5B,iBAAiB,CAAC,cAAsB,EAAE,YAAoB;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED,4BAA4B;IACpB,gBAAgB,CAAC,OAAuB;QAC9C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1F,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrE,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtE,CAAC;gBACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACzB,gBAAgB,CACtB,OAAqC,EACrC,iBAAyB;QAEzB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,iBAAiB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,4DAA4D;IACpD,yBAAyB,CAC/B,QAA0B,EAC1B,kBAA0B;QAE1B,MAAM,gBAAgB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtE,IAAI,gBAAgB,CAAC,IAAI,CACvB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,kBAAkB,GAAG,KAAK,GAAG,CAAC,CACxE,EAAE,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,gCAAgC;IACxB,KAAK,CAAC,aAAa;QACzB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IAED,uCAAuC;IAC/B,KAAK,CAAC,eAAe,CAAI,QAA0B;QACzD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACpC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM;YACR,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;gBACpE,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAClD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,GAAG,QAAQ;wBAAE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtF,CAAC;gBAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;gBAC5B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC3C,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;oBACnE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,iCAAiC;AACjC,SAAS,wBAAwB,CAAC,IAAoB,EAAE,KAAqB;IAC3E,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AACxC,CAAC"}
|
|
@@ -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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"}
|