@qwen-code/arena-agent 0.0.10-dev.0 → 0.0.10-dev.10
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/.env.example +57 -14
- package/CHANGELOG.md +228 -0
- package/README.md +240 -57
- package/dist/agent.d.ts +30 -2
- package/dist/agent.js +351 -104
- package/dist/agent.js.map +1 -1
- package/dist/anthropic.js +23 -22
- package/dist/anthropic.js.map +1 -1
- package/dist/ask-user.js +2 -0
- package/dist/ask-user.js.map +1 -1
- package/dist/attachments.js +4 -3
- package/dist/attachments.js.map +1 -1
- package/dist/brave-search.js +1 -3
- package/dist/brave-search.js.map +1 -1
- package/dist/canonical-data.js +2 -2
- package/dist/canonical-data.js.map +1 -1
- package/dist/cli.js +197 -34
- package/dist/cli.js.map +1 -1
- package/dist/code-tools.d.ts +8 -2
- package/dist/code-tools.js +709 -117
- package/dist/code-tools.js.map +1 -1
- package/dist/compaction.d.ts +49 -3
- package/dist/compaction.js +383 -170
- package/dist/compaction.js.map +1 -1
- package/dist/config.d.ts +17 -2
- package/dist/config.js +47 -5
- package/dist/config.js.map +1 -1
- package/dist/fetch-page.js +9 -33
- package/dist/fetch-page.js.map +1 -1
- package/dist/file-edit.d.ts +8 -0
- package/dist/file-edit.js +63 -0
- package/dist/file-edit.js.map +1 -0
- package/dist/history.d.ts +35 -1
- package/dist/history.js +400 -16
- package/dist/history.js.map +1 -1
- package/dist/legacy-compaction.d.ts +20 -0
- package/dist/legacy-compaction.js +209 -0
- package/dist/legacy-compaction.js.map +1 -0
- package/dist/midturn-checkpoint-hook.d.ts +31 -0
- package/dist/midturn-checkpoint-hook.js +38 -0
- package/dist/midturn-checkpoint-hook.js.map +1 -0
- package/dist/mock.js +5 -0
- package/dist/mock.js.map +1 -1
- package/dist/mode.js +4 -2
- package/dist/mode.js.map +1 -1
- package/dist/model-router-media.d.ts +1 -0
- package/dist/model-router-media.js +71 -1
- package/dist/model-router-media.js.map +1 -1
- package/dist/openai-responses.js +2 -0
- package/dist/openai-responses.js.map +1 -1
- package/dist/process-manager.js +18 -11
- package/dist/process-manager.js.map +1 -1
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.js +6 -2
- package/dist/prompts.js.map +1 -1
- package/dist/protocol.d.ts +5 -1
- package/dist/protocol.js +24 -2
- package/dist/protocol.js.map +1 -1
- package/dist/provider.d.ts +12 -5
- package/dist/provider.js +60 -52
- package/dist/provider.js.map +1 -1
- package/dist/repetitive-output.d.ts +12 -0
- package/dist/repetitive-output.js +80 -0
- package/dist/repetitive-output.js.map +1 -0
- package/dist/replay-responses.d.ts +17 -0
- package/dist/replay-responses.js +100 -0
- package/dist/replay-responses.js.map +1 -0
- package/dist/routify-web-fetch.js +20 -7
- package/dist/routify-web-fetch.js.map +1 -1
- package/dist/sandbox-file-write.d.ts +10 -0
- package/dist/sandbox-file-write.js +58 -0
- package/dist/sandbox-file-write.js.map +1 -0
- package/dist/sdk.js +9 -1
- package/dist/sdk.js.map +1 -1
- package/dist/server.js +127 -44
- package/dist/server.js.map +1 -1
- package/dist/session-memory-prompts.d.ts +5 -0
- package/dist/session-memory-prompts.js +7 -0
- package/dist/session-memory-prompts.js.map +1 -0
- package/dist/snapshot-client.d.ts +10 -0
- package/dist/snapshot-client.js +39 -0
- package/dist/snapshot-client.js.map +1 -0
- package/dist/spec.js +18 -10
- package/dist/spec.js.map +1 -1
- package/dist/speech-audio.d.ts +9 -0
- package/dist/speech-audio.js +130 -0
- package/dist/speech-audio.js.map +1 -0
- package/dist/speech-model.d.ts +3 -0
- package/dist/speech-model.js +8 -0
- package/dist/speech-model.js.map +1 -0
- package/dist/tools.d.ts +5 -0
- package/dist/tools.js +744 -121
- package/dist/tools.js.map +1 -1
- package/dist/tui.js +20 -12
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +28 -3
- package/dist/voice-registry.d.ts +2 -0
- package/dist/voice-registry.js +10 -2
- package/dist/voice-registry.js.map +1 -1
- package/dist/web/app.js +17 -3
- package/dist/web/app.js.map +1 -1
- package/dist/web-fetch-output.d.ts +9 -0
- package/dist/web-fetch-output.js +38 -0
- package/dist/web-fetch-output.js.map +1 -0
- package/dist/workspace.d.ts +2 -0
- package/dist/workspace.js +11 -6
- package/dist/workspace.js.map +1 -1
- package/docs/BINARY_DISTRIBUTION.md +27 -16
- package/docs/MODES_AND_RELEASES.md +28 -5
- package/docs/SDK.md +10 -4
- package/modes/code-arena/capture-provenance.json +57 -0
- package/modes/code-arena/full-stack/system-prompt.txt +1 -1
- package/modes/code-arena/full-stack/template/eslint.config.mjs +3 -4
- package/modes/code-arena/full-stack/template/postcss.config.mjs +2 -2
- package/modes/code-arena/full-stack/tools.json +186 -186
- package/modes/code-arena/html/system-prompt.txt +1 -1
- package/modes/code-arena/html/tools.json +123 -123
- package/modes/code-arena/react/system-prompt.txt +4 -3
- package/modes/code-arena/react/template/package.json +4 -4
- package/modes/code-arena/react/template/src/App.tsx +1 -1
- package/modes/code-arena/react/template/src/main.tsx +1 -1
- package/modes/code-arena/react/template/tsconfig.json +6 -0
- package/modes/code-arena/react/template/vite.config.ts +1 -0
- package/modes/code-arena/react/tools.json +178 -184
- package/package.json +15 -4
- package/scripts/README.md +62 -0
- package/scripts/check-changelog.mjs +66 -0
- package/vendor/audio/darwin-arm64/FFmpeg.LICENSE +502 -0
- package/vendor/audio/darwin-arm64/LAME.LICENSE +481 -0
- package/vendor/audio/darwin-arm64/Opus.LICENSE +44 -0
- package/vendor/audio/darwin-arm64/ffmpeg.gz +0 -0
- package/vendor/audio/darwin-arm64/manifest.json +39 -0
- package/vendor/audio/darwin-x64/FFmpeg.LICENSE +502 -0
- package/vendor/audio/darwin-x64/LAME.LICENSE +481 -0
- package/vendor/audio/darwin-x64/Opus.LICENSE +44 -0
- package/vendor/audio/darwin-x64/ffmpeg.gz +0 -0
- package/vendor/audio/darwin-x64/manifest.json +39 -0
- package/vendor/audio/linux-arm64/FFmpeg.LICENSE +502 -0
- package/vendor/audio/linux-arm64/LAME.LICENSE +481 -0
- package/vendor/audio/linux-arm64/Opus.LICENSE +44 -0
- package/vendor/audio/linux-arm64/ffmpeg.gz +0 -0
- package/vendor/audio/linux-arm64/manifest.json +39 -0
- package/vendor/audio/linux-x64/FFmpeg.LICENSE +502 -0
- package/vendor/audio/linux-x64/LAME.LICENSE +481 -0
- package/vendor/audio/linux-x64/Opus.LICENSE +44 -0
- package/vendor/audio/linux-x64/ffmpeg.gz +0 -0
- package/vendor/audio/linux-x64/manifest.json +39 -0
- package/vendor/audio/sources/build-audio-encoder.sh +76 -0
- package/vendor/audio/sources/ffmpeg-7.0.2.tar.xz +0 -0
- package/vendor/audio/sources/lame-3.100.tar.gz +0 -0
- package/vendor/audio/sources/opus-1.5.2.tar.gz +0 -0
- package/vendor/audio/sources/pkgconf-2.3.0.tar.xz +0 -0
- package/vendor/audio/sources/sources.lock.json +30 -0
- package/vendor/audio/win32-x64/FFmpeg.LICENSE +502 -0
- package/vendor/audio/win32-x64/LAME.LICENSE +481 -0
- package/vendor/audio/win32-x64/Opus.LICENSE +44 -0
- package/vendor/audio/win32-x64/ffmpeg.gz +0 -0
- package/vendor/audio/win32-x64/manifest.json +39 -0
package/dist/compaction.js
CHANGED
|
@@ -1,190 +1,403 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { Tiktoken } from "js-tiktoken/lite";
|
|
3
|
+
import o200kBase from "js-tiktoken/ranks/o200k_base";
|
|
4
|
+
import { estimateContextTokens, continuationSummaryBlock as legacySummaryBlock, compactMessagesIfNeeded as legacyCompact } from "./legacy-compaction.js";
|
|
5
|
+
import { memoryBudgetNoticeTemplate, emptySessionMemory, memoryContinuationPreamble, memorySystemPrompt, memoryUpdateTemplate } from "./session-memory-prompts.js";
|
|
6
|
+
export { estimateContextTokens };
|
|
7
|
+
/** Threshold with the default 1M context window and 0.25 trigger ratio. */
|
|
8
|
+
export const AGENT_ARENA_COMPACTION_THRESHOLD_TOKENS = 250_000;
|
|
9
|
+
export function storedSessionMemory(cache) {
|
|
10
|
+
if (!cache.latest && !cache.update)
|
|
11
|
+
return undefined;
|
|
12
|
+
return structuredClone({ version: 1, ...(cache.latest ? { latest: cache.latest } : {}),
|
|
13
|
+
...(cache.update ? { update: cache.update } : {}) });
|
|
14
|
+
}
|
|
15
|
+
export async function settleSessionMemory(cache, cancel = true) {
|
|
16
|
+
if (cancel)
|
|
17
|
+
cache.controller?.abort(new Error("Memory update cancelled at run boundary"));
|
|
18
|
+
await cache.pending;
|
|
19
|
+
}
|
|
20
|
+
const descriptions = new Map(emptySessionMemory.split("\n\n").map(section => {
|
|
21
|
+
const [header, description] = section.split("\n");
|
|
22
|
+
return [header, description];
|
|
23
|
+
}));
|
|
24
|
+
const headers = [...descriptions.keys()];
|
|
25
|
+
const budget = 1500;
|
|
26
|
+
function escapedMemory(text) {
|
|
27
|
+
return text.trim().replace(/<\/?(?:arena-system-message|session_memory)>/gi, tag => tag.replace("<", "<").replace(">", ">"));
|
|
28
|
+
}
|
|
29
|
+
/** Parse top-level section replacements. Code-fenced headers are content. */
|
|
30
|
+
function sections(text, strict = true) {
|
|
31
|
+
const found = new Map();
|
|
32
|
+
let header;
|
|
33
|
+
let body = [];
|
|
34
|
+
let fence;
|
|
35
|
+
const flush = () => { if (header)
|
|
36
|
+
found.set(header, body.join("\n").trim()); };
|
|
37
|
+
for (const line of text.trim().split("\n")) {
|
|
38
|
+
const marker = /^\s{0,3}(`{3,}|~{3,})/.exec(line)?.[1];
|
|
39
|
+
if (marker) {
|
|
40
|
+
if (!fence)
|
|
41
|
+
fence = { character: marker[0], length: marker.length };
|
|
42
|
+
else if (marker[0] === fence.character && marker.length >= fence.length && /^\s{0,3}(?:`+|~+)\s*$/.test(line))
|
|
43
|
+
fence = undefined;
|
|
44
|
+
}
|
|
45
|
+
if (!fence && /^# /.test(line) && (strict || descriptions.has(line))) {
|
|
46
|
+
if (!descriptions.has(line) || found.has(line) || header === line)
|
|
47
|
+
throw new Error("Invalid session memory section");
|
|
48
|
+
flush();
|
|
49
|
+
header = line;
|
|
50
|
+
body = [];
|
|
51
|
+
}
|
|
52
|
+
else if (header)
|
|
53
|
+
body.push(line);
|
|
54
|
+
else if (line.trim())
|
|
55
|
+
throw new Error("Session memory patch must begin with a section header");
|
|
56
|
+
}
|
|
57
|
+
if (fence)
|
|
58
|
+
throw new Error("Unclosed code fence in session memory patch");
|
|
59
|
+
flush();
|
|
60
|
+
return found;
|
|
61
|
+
}
|
|
62
|
+
function render(values) {
|
|
63
|
+
return headers.map(header => {
|
|
64
|
+
let body = values.get(header) || "";
|
|
65
|
+
const description = descriptions.get(header);
|
|
66
|
+
// The server-owned descriptions survive replacement; the model is told not to emit them.
|
|
67
|
+
if (body.startsWith(description))
|
|
68
|
+
body = body.slice(description.length).trim();
|
|
69
|
+
return `${header}\n${description}${body ? `\n\n${body}` : ""}`;
|
|
70
|
+
}).join("\n\n");
|
|
71
|
+
}
|
|
72
|
+
export function mergeSessionMemory(memory, patch) {
|
|
73
|
+
const changes = sections(patch);
|
|
74
|
+
if (!changes.get("# Current State"))
|
|
75
|
+
throw new Error("Missing Current State in session memory patch");
|
|
76
|
+
const previous = sections(memory, false);
|
|
77
|
+
for (const [header, body] of changes) {
|
|
78
|
+
if (!body)
|
|
79
|
+
throw new Error("Empty session memory replacement");
|
|
80
|
+
previous.set(header, escapedMemory(body));
|
|
81
|
+
}
|
|
82
|
+
return render(previous);
|
|
83
|
+
}
|
|
84
|
+
let memoryEncoder;
|
|
85
|
+
/** o200k_base matches all 45 captured section counts; unrelated to context estimation. */
|
|
86
|
+
export function memoryTokenEstimate(text) {
|
|
87
|
+
memoryEncoder ??= new Tiktoken(o200kBase);
|
|
88
|
+
// Memory may contain literal special-token spellings; count them as ordinary text.
|
|
89
|
+
return memoryEncoder.encode(text, [], []).length;
|
|
90
|
+
}
|
|
91
|
+
function inputTokens(usage) {
|
|
92
|
+
for (const key of ["prompt_tokens", "input_tokens"]) {
|
|
93
|
+
const value = usage?.[key];
|
|
94
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0)
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function completedRequestTokens(usage) {
|
|
100
|
+
const total = usage?.total_tokens;
|
|
101
|
+
if (typeof total === "number" && Number.isFinite(total) && total > 0)
|
|
102
|
+
return total;
|
|
103
|
+
const input = inputTokens(usage);
|
|
104
|
+
if (input === undefined)
|
|
105
|
+
return undefined;
|
|
106
|
+
for (const key of ["completion_tokens", "output_tokens"]) {
|
|
107
|
+
const output = usage?.[key];
|
|
108
|
+
if (typeof output === "number" && Number.isFinite(output) && output >= 0) {
|
|
109
|
+
return input + output;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
function visibleContextTokens(messages, tools, imageTokenEstimate) {
|
|
115
|
+
// Usage is persisted for accounting but stripped at every provider wire boundary.
|
|
116
|
+
const visible = messages.map(message => {
|
|
117
|
+
if (message.role !== "assistant" || !message.usage)
|
|
118
|
+
return message;
|
|
119
|
+
const { usage: _usage, ...rest } = message;
|
|
120
|
+
return rest;
|
|
121
|
+
});
|
|
122
|
+
return estimateContextTokens(visible, tools, imageTokenEstimate);
|
|
123
|
+
}
|
|
124
|
+
function hasMemoryOnlyPrefix(messages, assistantIndex) {
|
|
125
|
+
const firstIndex = messages[0]?.role === "system" ? 1 : 0;
|
|
126
|
+
const first = messages[firstIndex];
|
|
127
|
+
if (first?.role !== "user")
|
|
128
|
+
return false;
|
|
129
|
+
const parts = typeof first.content === "string" ? [{ text: first.content }] : first.content;
|
|
130
|
+
if (parts.length !== 1 || !("text" in parts[0]))
|
|
131
|
+
return false;
|
|
132
|
+
const text = parts[0].text.trim();
|
|
133
|
+
if (!text.startsWith("<arena-system-message>\n") || !text.endsWith("</arena-system-message>"))
|
|
134
|
+
return false;
|
|
135
|
+
if (messages.slice(firstIndex + 1, assistantIndex).some(message => message.role === "user"))
|
|
136
|
+
return false;
|
|
137
|
+
return messages.findIndex((message, index) => index > firstIndex && message.role === "assistant") === assistantIndex;
|
|
138
|
+
}
|
|
139
|
+
/** Provider-reported completed-request usage plus an estimate of later messages. */
|
|
140
|
+
export function estimateCompactionTokens(messages, tools, imageTokenEstimate) {
|
|
141
|
+
const current = visibleContextTokens(messages, tools, imageTokenEstimate);
|
|
142
|
+
for (let index = messages.length - 1; index >= 0; index--) {
|
|
41
143
|
const message = messages[index];
|
|
42
|
-
if (message?.role
|
|
43
|
-
|
|
144
|
+
if (message?.role !== "assistant")
|
|
145
|
+
continue;
|
|
146
|
+
if (hasMemoryOnlyPrefix(messages, index))
|
|
147
|
+
continue;
|
|
148
|
+
const completed = completedRequestTokens(message.usage);
|
|
149
|
+
if (completed !== undefined) {
|
|
150
|
+
const throughAssistant = visibleContextTokens(messages.slice(0, index + 1), tools, imageTokenEstimate);
|
|
151
|
+
return Math.max(0, completed + current - throughAssistant);
|
|
152
|
+
}
|
|
153
|
+
// Some OpenAI-compatible endpoints omit total/output usage. Fall back to
|
|
154
|
+
// the exact input baseline and locally estimate the replayed assistant too.
|
|
155
|
+
const baseline = inputTokens(message.usage);
|
|
156
|
+
if (baseline === undefined)
|
|
157
|
+
continue;
|
|
158
|
+
const previous = visibleContextTokens(messages.slice(0, index), tools, imageTokenEstimate);
|
|
159
|
+
return Math.max(0, baseline + current - previous);
|
|
44
160
|
}
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
161
|
+
return current;
|
|
162
|
+
}
|
|
163
|
+
export function sessionMemoryUpdatePrompt(memory) {
|
|
164
|
+
const oversized = [...sections(memory, false)].flatMap(([header, body]) => {
|
|
165
|
+
// Captured budgets exclude the heading and the leading italic description.
|
|
166
|
+
const count = memoryTokenEstimate(body.replace(/^_[^\n]+_\s*/, ""));
|
|
167
|
+
return count > budget ? [`- "${header}" is ~${count} tokens (limit: 1500)`] : [];
|
|
168
|
+
});
|
|
169
|
+
const notice = oversized.length ? "\n\n" + memoryBudgetNoticeTemplate.replace("{{SECTIONS}}", () => oversized.join("\n")) : "";
|
|
170
|
+
return memoryUpdateTemplate.replace("\n\n<session_memory>{{MEMORY}}</session_memory>", () => `${notice}\n\n<session_memory>\n${memory}\n</session_memory>`);
|
|
171
|
+
}
|
|
172
|
+
export function continuationSummaryBlock(memory) {
|
|
173
|
+
return `<arena-system-message>\n${memoryContinuationPreamble}\n\n${escapedMemory(memory)}\n\n</arena-system-message>`;
|
|
174
|
+
}
|
|
175
|
+
/** Rebuild model input from the latest applied marker, retaining raw history. */
|
|
176
|
+
export function contextFromHistory(history) {
|
|
177
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
178
|
+
const marker = history[i];
|
|
179
|
+
if (marker.role !== "compaction" || marker.undone)
|
|
180
|
+
continue;
|
|
181
|
+
const summary = marker.content.map(part => part.text).join("\n");
|
|
182
|
+
if (!summary.trim())
|
|
183
|
+
throw new Error("Compaction record has no summary");
|
|
184
|
+
const tail = history.slice(i + 1).filter(message => message.role !== "compaction");
|
|
185
|
+
if (tail[0]?.role === "tool")
|
|
186
|
+
throw new Error("Compaction record splits a tool call/result pair");
|
|
187
|
+
// The dump also contains older full summaries. Preserve their wrapper;
|
|
188
|
+
// current eight-section memory continues to use its captured preamble.
|
|
189
|
+
const block = summary.startsWith("# Current State\n")
|
|
190
|
+
? continuationSummaryBlock(summary) : legacySummaryBlock(summary);
|
|
191
|
+
const first = tail[0];
|
|
192
|
+
const user = { role: "user", content: [{ text: block },
|
|
193
|
+
...(first?.role === "user" ? typeof first.content === "string"
|
|
194
|
+
? [{ text: first.content }] : structuredClone(first.content) : [])] };
|
|
195
|
+
return [...(history[0]?.role === "system" ? [history[0]] : []), user, ...(first?.role === "user" ? tail.slice(1) : tail)];
|
|
55
196
|
}
|
|
56
|
-
return
|
|
197
|
+
return history.filter(message => message.role !== "compaction");
|
|
198
|
+
}
|
|
199
|
+
function textOf(message) {
|
|
200
|
+
return typeof message.content === "string" ? message.content : message.content.flatMap(p => "text" in p ? [p.text] : []).join("");
|
|
201
|
+
}
|
|
202
|
+
function extractMemory(messages) {
|
|
203
|
+
const copy = [...messages];
|
|
204
|
+
const first = copy[1]?.role === "user" ? structuredClone(copy[1]) : copy[1];
|
|
205
|
+
if (first)
|
|
206
|
+
copy[1] = first;
|
|
207
|
+
if (first?.role !== "user")
|
|
208
|
+
return { memory: emptySessionMemory, messages: copy };
|
|
209
|
+
const prefix = `<arena-system-message>\n${memoryContinuationPreamble}\n\n`;
|
|
210
|
+
const parts = typeof first.content === "string" ? [{ text: first.content }] : first.content;
|
|
211
|
+
const part = parts[0];
|
|
212
|
+
if (!part || !("text" in part) || !part.text.startsWith(prefix))
|
|
213
|
+
return { memory: emptySessionMemory, messages: copy };
|
|
214
|
+
const end = part.text.indexOf("\n\n</arena-system-message>", prefix.length);
|
|
215
|
+
if (end < 0)
|
|
216
|
+
throw new Error("Invalid persisted session memory block");
|
|
217
|
+
const memory = part.text.slice(prefix.length, end);
|
|
218
|
+
const trailing = part.text.slice(end + "\n\n</arena-system-message>".length);
|
|
219
|
+
first.content = [...(trailing ? [{ text: trailing }] : []), ...parts.slice(1)];
|
|
220
|
+
return { memory, messages: copy };
|
|
57
221
|
}
|
|
58
|
-
function
|
|
59
|
-
|
|
60
|
-
|
|
222
|
+
function prepend(message, memory) {
|
|
223
|
+
return { role: "user", content: [{ text: continuationSummaryBlock(memory) },
|
|
224
|
+
...(typeof message.content === "string" ? [{ text: message.content }] : structuredClone(message.content))] };
|
|
225
|
+
}
|
|
226
|
+
export function memoryPrefixHash(messages, count) {
|
|
227
|
+
const hash = crypto.createHash("sha256");
|
|
228
|
+
// Runtime system/date overrides do not invalidate the actual conversation prefix.
|
|
229
|
+
for (let i = 1; i < count; i++)
|
|
230
|
+
hash.update(JSON.stringify(messages[i]) + "\n");
|
|
231
|
+
return hash.digest("hex");
|
|
232
|
+
}
|
|
233
|
+
export function sessionMemoryMatchesHistory(state, messages) {
|
|
234
|
+
if (!state || typeof state !== "object")
|
|
235
|
+
return false;
|
|
236
|
+
const value = state;
|
|
237
|
+
if (value.version !== 1 || typeof value.memory !== "string" || typeof value.prefixHash !== "string" ||
|
|
238
|
+
!Number.isSafeInteger(value.coveredMessages) || value.coveredMessages < 2 ||
|
|
239
|
+
value.coveredMessages > messages.length ||
|
|
240
|
+
messages[value.coveredMessages]?.role === "tool" ||
|
|
241
|
+
memoryPrefixHash(messages, value.coveredMessages) !== value.prefixHash)
|
|
242
|
+
return false;
|
|
243
|
+
try {
|
|
244
|
+
const parsed = sections(value.memory, false);
|
|
245
|
+
return parsed.size === headers.length && parsed.has("# Current State");
|
|
61
246
|
}
|
|
62
|
-
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
247
|
+
catch {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
export function restoreSessionMemory(messages, state) {
|
|
252
|
+
if (!sessionMemoryMatchesHistory(state, messages))
|
|
253
|
+
return false;
|
|
254
|
+
const tail = messages.slice(state.coveredMessages);
|
|
255
|
+
const first = tail[0];
|
|
256
|
+
messages.splice(1, messages.length - 1, ...(first?.role === "user" ? [prepend(first, state.memory), ...tail.slice(1)] :
|
|
257
|
+
[{ role: "user", content: continuationSummaryBlock(state.memory) }, ...tail]));
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
export async function compactMessagesIfNeeded(messages, tools, client, model, settings, signal) {
|
|
261
|
+
if (settings.legacy)
|
|
262
|
+
return legacyCompact(messages, tools, client, model, settings, signal);
|
|
263
|
+
const before = estimateCompactionTokens(messages, tools, settings.imageTokenEstimate);
|
|
264
|
+
const unchanged = { compacted: false, estimatedTokensBefore: before, estimatedTokensAfter: before };
|
|
265
|
+
const threshold = settings.compactionThresholdTokens ?? settings.contextWindow * settings.triggerRatio;
|
|
266
|
+
if (before < threshold)
|
|
267
|
+
return unchanged;
|
|
268
|
+
// Preserve the current human turn (including all its tool-call/result pairs).
|
|
269
|
+
let boundary = -1;
|
|
270
|
+
for (let i = messages.length - 1; i >= 1; i--) {
|
|
271
|
+
const m = messages[i];
|
|
272
|
+
if (m.role === "user" && !/^<arena-system-message>\nThe image\(s\) below are the result of the preceding tool call\.[\s\S]*?<\/arena-system-message>\s*$/.test(textOf(m))) {
|
|
273
|
+
boundary = i;
|
|
274
|
+
break;
|
|
76
275
|
}
|
|
77
|
-
: message);
|
|
78
|
-
const serialized = JSON.stringify({ messages: modelVisibleMessages, tools }, (key, value) => key === "image" && typeof value === "string" ? "<image>" : value);
|
|
79
|
-
const structuralOverhead = messages.length * 8 + tools.length * 12;
|
|
80
|
-
return (estimateStringTokens(serialized) +
|
|
81
|
-
imageCount(modelVisibleMessages) * Math.max(0, imageTokenEstimate) +
|
|
82
|
-
structuralOverhead);
|
|
83
|
-
}
|
|
84
|
-
function safeSummary(value) {
|
|
85
|
-
return value
|
|
86
|
-
.trim()
|
|
87
|
-
.replace(/<arena-system-message>/gi, "<arena-system-message>")
|
|
88
|
-
.replace(/<\/arena-system-message>/gi, "</arena-system-message>");
|
|
89
|
-
}
|
|
90
|
-
export function continuationSummaryBlock(summary) {
|
|
91
|
-
const summaryBody = safeSummary(summary).replace(/\n---$/, "");
|
|
92
|
-
return ("<arena-system-message>\n" +
|
|
93
|
-
`${continuationPreamble}\n\n---\n${summaryBody}\n---\n` +
|
|
94
|
-
"</arena-system-message>");
|
|
95
|
-
}
|
|
96
|
-
function prependSummary(message, summaryBlock) {
|
|
97
|
-
if (typeof message.content === "string") {
|
|
98
|
-
return {
|
|
99
|
-
role: "user",
|
|
100
|
-
content: [{ text: summaryBlock }, { text: message.content }],
|
|
101
|
-
};
|
|
102
276
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
277
|
+
if (boundary <= 1)
|
|
278
|
+
return unchanged;
|
|
279
|
+
const prior = extractMemory(messages);
|
|
280
|
+
const { memory, usage } = await updateMemory(prior.messages.slice(1, boundary), prior.memory, client, model, settings, signal);
|
|
281
|
+
if (!memory)
|
|
282
|
+
return { ...unchanged, usage };
|
|
283
|
+
const current = messages[boundary];
|
|
284
|
+
messages.splice(1, messages.length - 1, prepend(current, memory), ...messages.slice(boundary + 1));
|
|
285
|
+
return { compacted: true, estimatedTokensBefore: before,
|
|
286
|
+
estimatedTokensAfter: visibleContextTokens(messages, tools, settings.imageTokenEstimate), usage, memory };
|
|
110
287
|
}
|
|
111
|
-
async function
|
|
288
|
+
async function updateMemory(source, previous, client, model, settings, signal) {
|
|
289
|
+
signal?.throwIfAborted();
|
|
112
290
|
const request = {
|
|
113
|
-
model,
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
],
|
|
119
|
-
tools: [],
|
|
120
|
-
toolChoice: "none",
|
|
121
|
-
temperature: 0,
|
|
122
|
-
maxTokens,
|
|
123
|
-
enableThinking: false,
|
|
124
|
-
thinkingBudget: 0,
|
|
125
|
-
preserveThinking: false,
|
|
126
|
-
signal,
|
|
291
|
+
model, messages: [{ role: "system", content: memorySystemPrompt }, ...source,
|
|
292
|
+
{ role: "user", content: sessionMemoryUpdatePrompt(previous) }],
|
|
293
|
+
tools: [], toolChoice: "none", temperature: 1, maxTokens: settings.summaryMaxTokens,
|
|
294
|
+
...(settings.reasoningEffort ? { reasoningEffort: settings.reasoningEffort } : { thinkingBudget: 81920 }),
|
|
295
|
+
enableThinking: true, preserveThinking: true, useProviderDefaults: true, signal,
|
|
127
296
|
};
|
|
128
|
-
|
|
297
|
+
let patch = "";
|
|
129
298
|
let usage;
|
|
299
|
+
let finishReason;
|
|
130
300
|
for await (const chunk of client.stream(request)) {
|
|
131
301
|
if (chunk.usage)
|
|
132
302
|
usage = chunk.usage;
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
303
|
+
const choice = chunk.choices?.[0];
|
|
304
|
+
patch += choice?.delta?.content || "";
|
|
305
|
+
if (choice?.finish_reason)
|
|
306
|
+
finishReason = choice.finish_reason;
|
|
136
307
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
estimatedTokensBefore: before,
|
|
148
|
-
estimatedTokensAfter: before,
|
|
149
|
-
};
|
|
308
|
+
if (signal?.aborted)
|
|
309
|
+
throw signal.reason || new Error("Memory update cancelled");
|
|
310
|
+
if (!patch.trim())
|
|
311
|
+
return { usage, update: { status: "error", code: "MEMORY_EMPTY_RESPONSE", usage } };
|
|
312
|
+
if (finishReason && finishReason !== "stop")
|
|
313
|
+
return { usage,
|
|
314
|
+
update: { status: "error", code: "MEMORY_INCOMPLETE_RESPONSE", error: `Memory response finished with ${finishReason}`, usage } };
|
|
315
|
+
let memory;
|
|
316
|
+
try {
|
|
317
|
+
memory = mergeSessionMemory(previous, patch);
|
|
150
318
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return {
|
|
154
|
-
compacted: false,
|
|
155
|
-
estimatedTokensBefore: before,
|
|
156
|
-
estimatedTokensAfter: before,
|
|
157
|
-
};
|
|
319
|
+
catch (error) {
|
|
320
|
+
return { usage, update: { status: "error", code: "MEMORY_INVALID_PATCH", error: String(error), usage } };
|
|
158
321
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
if (
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
322
|
+
return { memory, usage, update: { status: "success", usage } };
|
|
323
|
+
}
|
|
324
|
+
/** Provisional scheduling policy, not an observed official constant. */
|
|
325
|
+
export async function maintainSessionMemory(messages, history, cache, tools, client, model, settings, updateTokens = 24_000, signal, onUpdate) {
|
|
326
|
+
const before = estimateCompactionTokens(messages, tools, settings.imageTokenEstimate);
|
|
327
|
+
const unchanged = { compacted: false, estimatedTokensBefore: before, estimatedTokensAfter: before };
|
|
328
|
+
const threshold = settings.compactionThresholdTokens ?? settings.contextWindow * settings.triggerRatio;
|
|
329
|
+
const needsCompaction = before >= threshold;
|
|
330
|
+
if (cache.latest && !sessionMemoryMatchesHistory(cache.latest, history))
|
|
331
|
+
cache.latest = undefined;
|
|
332
|
+
if (cache.state && !sessionMemoryMatchesHistory(cache.state, history))
|
|
333
|
+
cache.state = undefined;
|
|
334
|
+
const previous = cache.latest || cache.state;
|
|
335
|
+
const embedded = previous ? undefined : extractMemory(history);
|
|
336
|
+
// Keep the newest complete assistant/tool step (or newest user message) verbatim.
|
|
337
|
+
// This also permits updates during a long single-user tool loop.
|
|
338
|
+
let boundary = history.length - 1;
|
|
339
|
+
while (boundary > 1 && history[boundary]?.role !== "assistant" && history[boundary]?.role !== "user")
|
|
340
|
+
boundary--;
|
|
341
|
+
// Keep an immediately preceding user instruction with the retained step.
|
|
342
|
+
while (boundary > 1 && history[boundary - 1]?.role === "user")
|
|
343
|
+
boundary--;
|
|
344
|
+
const start = previous?.coveredMessages ?? 1;
|
|
345
|
+
if (!cache.pending && boundary > start) {
|
|
346
|
+
const source = structuredClone((embedded?.messages ?? history).slice(start, boundary));
|
|
347
|
+
// A synthetic memory-only user message has no new content to summarize.
|
|
348
|
+
if (source[0]?.role === "user" && Array.isArray(source[0].content) && !source[0].content.length)
|
|
349
|
+
source.shift();
|
|
350
|
+
const prefixHash = memoryPrefixHash(history, boundary);
|
|
351
|
+
// Incremental estimate excludes system/tools and the existing memory. Images use
|
|
352
|
+
// the local estimator; the exact official scheduling tokenizer is unknown.
|
|
353
|
+
const eligible = estimateContextTokens(source, [], settings.imageTokenEstimate) >= updateTokens;
|
|
354
|
+
if ((eligible || needsCompaction) && cache.attemptedPrefix !== prefixHash) {
|
|
355
|
+
cache.attemptedPrefix = prefixHash;
|
|
356
|
+
const controller = new AbortController();
|
|
357
|
+
cache.controller = controller;
|
|
358
|
+
const updateSignal = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
|
|
359
|
+
cache.update = { status: "pending" };
|
|
360
|
+
// Publish the promise before any callback yields so concurrent schedulers
|
|
361
|
+
// observe the same in-flight update.
|
|
362
|
+
cache.pending = Promise.resolve().then(async () => {
|
|
363
|
+
if (onUpdate)
|
|
364
|
+
await onUpdate({ status: "pending" });
|
|
365
|
+
try {
|
|
366
|
+
const result = await updateMemory(source, previous?.memory ?? embedded?.memory ?? emptySessionMemory, client, model, settings, updateSignal);
|
|
367
|
+
updateSignal.throwIfAborted();
|
|
368
|
+
cache.update = result.update;
|
|
369
|
+
if (result.memory && memoryPrefixHash(history, boundary) === prefixHash) {
|
|
370
|
+
cache.latest = { version: 1, memory: result.memory, coveredMessages: boundary, prefixHash };
|
|
371
|
+
cache.latestUsage = result.usage;
|
|
372
|
+
}
|
|
373
|
+
else if (result.memory) {
|
|
374
|
+
cache.update = { status: "error", code: "MEMORY_STALE_HISTORY", usage: result.usage };
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
cache.update = { status: updateSignal.aborted ? "cancelled" : "error",
|
|
379
|
+
code: updateSignal.aborted ? "MEMORY_CANCELLED" : "MEMORY_REQUEST_FAILED",
|
|
380
|
+
error: error instanceof Error ? error.message : String(error) };
|
|
381
|
+
}
|
|
382
|
+
await onUpdate?.(cache.update);
|
|
383
|
+
}).finally(() => { cache.pending = undefined; cache.controller = undefined; });
|
|
384
|
+
}
|
|
176
385
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
386
|
+
if (!needsCompaction)
|
|
387
|
+
return unchanged;
|
|
388
|
+
// At the hard context boundary, wait for an in-flight snapshot if necessary.
|
|
389
|
+
if (cache.pending)
|
|
390
|
+
await cache.pending;
|
|
391
|
+
const latest = cache.latest;
|
|
392
|
+
if (!latest || latest.coveredMessages <= (cache.state?.coveredMessages ?? 1))
|
|
393
|
+
return unchanged;
|
|
394
|
+
const replacement = [...history];
|
|
395
|
+
if (!restoreSessionMemory(replacement, latest))
|
|
396
|
+
return unchanged;
|
|
397
|
+
messages.splice(0, messages.length, ...replacement);
|
|
398
|
+
cache.state = latest;
|
|
399
|
+
return { compacted: true, estimatedTokensBefore: before,
|
|
400
|
+
estimatedTokensAfter: visibleContextTokens(messages, tools, settings.imageTokenEstimate),
|
|
401
|
+
memory: latest.memory, usage: cache.latestUsage };
|
|
189
402
|
}
|
|
190
403
|
//# sourceMappingURL=compaction.js.map
|
package/dist/compaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAUA,MAAM,oBAAoB,GACxB,8EAA8E;IAC9E,+EAA+E;IAC/E,2EAA2E;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,yBAAyB,CAAC;AAE5B,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;4gBAgBgf,CAAC;AAE7gB,MAAM,cAAc,GAClB,8EAA8E,CAAC;AAEjF,MAAM,uBAAuB,GAC3B,+HAA+H,CAAC;AAgBlI,SAAS,iBAAiB,CAAC,OAAwB;IACjD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAChE,OAAO,OAAO,CAAC,OAAO;SACnB,MAAM,CAAC,CAAC,IAAI,EAA4B,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACxB,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,MAAM;QACvB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9B,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA4B;IACxD,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7E,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,IAAI,IAAI;YAAE,UAAU,IAAI,CAAC,CAAC;;YAClD,aAAa,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,QAAQ,GAAG,YAAY,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAA4B,EAC5B,KAAgC,EAChC,kBAAkB,GAAG,IAAI;IAEzB,MAAM,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACpD,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,qBAAqB,EAAE,MAAM;QACnE,CAAC,CAAC;YACE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;SACrD;QACH,CAAC,CAAC,OAAO,CACZ,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,EACzC,CAAC,GAAG,EAAE,KAAc,EAAE,EAAE,CACtB,GAAG,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CACnE,CAAC;IACF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IACnE,OAAO,CACL,oBAAoB,CAAC,UAAU,CAAC;QAChC,UAAU,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;QAClE,kBAAkB,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,OAAO,CAAC,0BAA0B,EAAE,8BAA8B,CAAC;SACnE,OAAO,CAAC,4BAA4B,EAAE,+BAA+B,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,CACL,0BAA0B;QAC1B,GAAG,oBAAoB,YAAY,WAAW,SAAS;QACvD,yBAAyB,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,OAAwB,EACxB,YAAoB;IAEpB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SAC7B,CAAC;IACpC,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE;YACtB,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC;SACpC;KAC8B,CAAC;AACpC,CAAC;AAOD,KAAK,UAAU,eAAe,CAC5B,MAAmB,EACnB,KAAa,EACb,cAAkC,EAClC,SAAiB,EACjB,MAAoB;IAEpB,MAAM,OAAO,GAAiB;QAC5B,KAAK;QACL,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE;YAChD,GAAG,eAAe,CAAC,cAAc,CAAC;YAClC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;SAC1C;QACD,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,CAAC;QACd,SAAS;QACT,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,KAAK;QACvB,MAAM;KACP,CAAC;IACF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAA6B,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;QACjD,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAmB,EACnB,KAAgC,EAChC,MAAmB,EACnB,KAAa,EACb,QAA4B,EAC5B,MAAoB;IAEpB,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC;IACxD,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACnE,MAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,qBAAqB,EAAE,MAAM;YAC7B,oBAAoB,EAAE,MAAM;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,qBAAqB,EAAE,MAAM;YAC7B,oBAAoB,EAAE,MAAM;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAC9C,MAAM,EACN,KAAK,EACL,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,EACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAClD,MAAM,CACP,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,qBAAqB,EAAE,MAAM;YAC7B,oBAAoB,EAAE,MAAM;YAC5B,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,WAAW,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,qBAAqB,EAAE,MAAM;YAC7B,oBAAoB,EAAE,MAAM;YAC5B,KAAK;SACN,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAc;QACnC,QAAQ,CAAC,CAAC,CAAE;QACZ,cAAc,CAAC,WAAW,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC9D,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC;IAC1D,OAAO;QACL,SAAS,EAAE,IAAI;QACf,qBAAqB,EAAE,MAAM;QAC7B,oBAAoB,EAAE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC;QACzE,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"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"}
|