context-compress 2026.3.21 → 2026.5.0
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/README.md +258 -44
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +2 -10
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/filter.d.ts +52 -0
- package/dist/cli/filter.d.ts.map +1 -0
- package/dist/cli/filter.js +200 -0
- package/dist/cli/filter.js.map +1 -0
- package/dist/cli/index.d.ts +8 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +19 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lite.d.ts +15 -0
- package/dist/cli/lite.d.ts.map +1 -0
- package/dist/cli/lite.js +37 -0
- package/dist/cli/lite.js.map +1 -0
- package/dist/cli/setup.d.ts +23 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +122 -21
- package/dist/cli/setup.js.map +1 -1
- package/dist/executor.d.ts +7 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +51 -4
- package/dist/executor.js.map +1 -1
- package/dist/filters.d.ts +52 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +719 -0
- package/dist/filters.js.map +1 -0
- package/dist/hooks/pretooluse.js +57 -0
- package/dist/hooks/pretooluse.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +11 -0
- package/dist/network.js.map +1 -1
- package/dist/server.bundle.mjs +1333 -619
- package/dist/server.bundle.mjs.map +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +44 -610
- package/dist/server.js.map +1 -1
- package/dist/stats.d.ts +7 -1
- package/dist/stats.d.ts.map +1 -1
- package/dist/stats.js +65 -0
- package/dist/stats.js.map +1 -1
- package/dist/store.d.ts +1 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +15 -2
- package/dist/store.js.map +1 -1
- package/dist/tools/batch-execute.d.ts +4 -0
- package/dist/tools/batch-execute.d.ts.map +1 -0
- package/dist/tools/batch-execute.js +75 -0
- package/dist/tools/batch-execute.js.map +1 -0
- package/dist/tools/context.d.ts +17 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +2 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/discover.d.ts +4 -0
- package/dist/tools/discover.d.ts.map +1 -0
- package/dist/tools/discover.js +65 -0
- package/dist/tools/discover.js.map +1 -0
- package/dist/tools/execute-file.d.ts +4 -0
- package/dist/tools/execute-file.d.ts.map +1 -0
- package/dist/tools/execute-file.js +66 -0
- package/dist/tools/execute-file.js.map +1 -0
- package/dist/tools/execute.d.ts +4 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +54 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/fetch-and-index.d.ts +4 -0
- package/dist/tools/fetch-and-index.d.ts.map +1 -0
- package/dist/tools/fetch-and-index.js +91 -0
- package/dist/tools/fetch-and-index.js.map +1 -0
- package/dist/tools/index-content.d.ts +4 -0
- package/dist/tools/index-content.d.ts.map +1 -0
- package/dist/tools/index-content.js +85 -0
- package/dist/tools/index-content.js.map +1 -0
- package/dist/tools/search.d.ts +4 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +57 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/stats.d.ts +4 -0
- package/dist/tools/stats.d.ts.map +1 -0
- package/dist/tools/stats.js +10 -0
- package/dist/tools/stats.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util/auto-mode.d.ts +40 -0
- package/dist/util/auto-mode.d.ts.map +1 -0
- package/dist/util/auto-mode.js +181 -0
- package/dist/util/auto-mode.js.map +1 -0
- package/dist/util/fetch-code.d.ts +10 -0
- package/dist/util/fetch-code.d.ts.map +1 -0
- package/dist/util/fetch-code.js +87 -0
- package/dist/util/fetch-code.js.map +1 -0
- package/dist/util/intent-filter.d.ts +17 -0
- package/dist/util/intent-filter.d.ts.map +1 -0
- package/dist/util/intent-filter.js +28 -0
- package/dist/util/intent-filter.js.map +1 -0
- package/dist/util/label.d.ts +4 -0
- package/dist/util/label.d.ts.map +1 -0
- package/dist/util/label.js +14 -0
- package/dist/util/label.js.map +1 -0
- package/dist/util/path.d.ts +8 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +21 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/stream-compress.d.ts +36 -0
- package/dist/util/stream-compress.d.ts.map +1 -0
- package/dist/util/stream-compress.js +104 -0
- package/dist/util/stream-compress.js.map +1 -0
- package/dist/util/version.d.ts +2 -0
- package/dist/util/version.d.ts.map +1 -0
- package/dist/util/version.js +15 -0
- package/dist/util/version.js.map +1 -0
- package/docs/token-reduction-report.md +164 -88
- package/hooks/pretooluse.mjs +38 -0
- package/package.json +5 -4
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { deduplicateLines, groupErrorLines, stripAnsi, stripProgressLines } from "../executor.js";
|
|
3
|
+
import { DEFAULT_MODE, applyCommandFilter, parseRequestedMode, } from "../filters.js";
|
|
4
|
+
import { pickModeAuto } from "../util/auto-mode.js";
|
|
5
|
+
import { StreamCompressor } from "../util/stream-compress.js";
|
|
6
|
+
// Generic dedup/progress/group pipeline kicks in once output crosses these
|
|
7
|
+
// thresholds. Lower thresholds = pipeline runs on more outputs = better
|
|
8
|
+
// compression on mid-size noisy outputs. Higher = preserve small outputs as-is.
|
|
9
|
+
const BALANCED_DEDUP_THRESHOLD = 5_000;
|
|
10
|
+
const AGGRESSIVE_DEDUP_THRESHOLD = 2_000;
|
|
11
|
+
/**
|
|
12
|
+
* Apply the full context-compress output pipeline to a buffer.
|
|
13
|
+
*
|
|
14
|
+
* conservative: ANSI strip only — preserve everything else.
|
|
15
|
+
* balanced: ANSI strip → command filter (drops universal noise:
|
|
16
|
+
* progress bars, hint lines, ./.., 'total N', truncates
|
|
17
|
+
* git log bodies past 3 lines) → dedup/group (if >5KB).
|
|
18
|
+
* Preserves all metadata (perms, dates, commit headers).
|
|
19
|
+
* aggressive: balanced + aggressive command filters that drop metadata
|
|
20
|
+
* (git log → oneline, ls -la → name+size, etc.) and lower
|
|
21
|
+
* the dedup threshold to 2KB.
|
|
22
|
+
*
|
|
23
|
+
* Mirrors what SubprocessExecutor does internally so the same compression
|
|
24
|
+
* is available to standalone shell commands or other agents that don't
|
|
25
|
+
* route through the MCP execute() tool.
|
|
26
|
+
*/
|
|
27
|
+
export function compressOutput(stdout, originalCmd, mode = DEFAULT_MODE) {
|
|
28
|
+
let out = stripAnsi(stdout);
|
|
29
|
+
if (mode === "conservative")
|
|
30
|
+
return out;
|
|
31
|
+
if (originalCmd) {
|
|
32
|
+
const filtered = applyCommandFilter(originalCmd, out, mode);
|
|
33
|
+
if (filtered.filtered)
|
|
34
|
+
out = filtered.output;
|
|
35
|
+
}
|
|
36
|
+
const threshold = mode === "aggressive" ? AGGRESSIVE_DEDUP_THRESHOLD : BALANCED_DEDUP_THRESHOLD;
|
|
37
|
+
if (out.length > threshold) {
|
|
38
|
+
out = stripProgressLines(out);
|
|
39
|
+
out = deduplicateLines(out);
|
|
40
|
+
out = groupErrorLines(out);
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Async variant that handles the "auto" meta-mode by asking an LLM to
|
|
46
|
+
* pick conservative/balanced/aggressive for the given command + output.
|
|
47
|
+
* Concrete modes route to the synchronous compressOutput.
|
|
48
|
+
*/
|
|
49
|
+
export async function compressOutputAsync(stdout, originalCmd, mode = DEFAULT_MODE) {
|
|
50
|
+
if (mode !== "auto") {
|
|
51
|
+
return { output: compressOutput(stdout, originalCmd, mode), resolvedMode: mode };
|
|
52
|
+
}
|
|
53
|
+
const result = await pickModeAuto(originalCmd ?? "", stdout);
|
|
54
|
+
return {
|
|
55
|
+
output: compressOutput(stdout, originalCmd, result.mode),
|
|
56
|
+
resolvedMode: result.mode,
|
|
57
|
+
autoSource: result.source,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Resolve mode from CLI args, env, or default — in that priority order. */
|
|
61
|
+
function resolveMode(args) {
|
|
62
|
+
for (let i = 0; i < args.length; i++) {
|
|
63
|
+
if (args[i] === "--mode" && i + 1 < args.length) {
|
|
64
|
+
return parseRequestedMode(args[i + 1]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return parseRequestedMode(process.env.CONTEXT_COMPRESS_MODE);
|
|
68
|
+
}
|
|
69
|
+
/** Read stdin to a string. */
|
|
70
|
+
async function readStdin() {
|
|
71
|
+
process.stdin.setEncoding("utf-8");
|
|
72
|
+
let buf = "";
|
|
73
|
+
for await (const chunk of process.stdin)
|
|
74
|
+
buf += chunk;
|
|
75
|
+
return buf;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* `context-compress filter [--cmd '<orig>'] [--mode conservative|balanced|aggressive|auto]`
|
|
79
|
+
* Reads stdin, applies the pipeline, writes to stdout. Exits 0.
|
|
80
|
+
*/
|
|
81
|
+
export async function runFilter(args) {
|
|
82
|
+
let cmd;
|
|
83
|
+
for (let i = 0; i < args.length; i++) {
|
|
84
|
+
if (args[i] === "--cmd" && i + 1 < args.length) {
|
|
85
|
+
cmd = args[i + 1];
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const mode = resolveMode(args);
|
|
90
|
+
const input = await readStdin();
|
|
91
|
+
const { output: compressed } = await compressOutputAsync(input, cmd, mode);
|
|
92
|
+
process.stdout.write(compressed);
|
|
93
|
+
if (!compressed.endsWith("\n"))
|
|
94
|
+
process.stdout.write("\n");
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* `context-compress wrap [--stream] -- <cmd ...>`
|
|
99
|
+
*
|
|
100
|
+
* Default (buffered): spawn cmd, capture all stdout, apply full pipeline,
|
|
101
|
+
* print filtered stdout, propagate child's exit code.
|
|
102
|
+
*
|
|
103
|
+
* `--stream`: emit filtered output line-by-line as the child produces it.
|
|
104
|
+
* Use for long-running commands (tail -f, cargo watch, builds with
|
|
105
|
+
* progressive output) where buffering would defer all output until exit.
|
|
106
|
+
* Stream mode applies ANSI strip + progress filter + adjacent dedup only —
|
|
107
|
+
* command-aware filters need the full output.
|
|
108
|
+
*
|
|
109
|
+
* Usage:
|
|
110
|
+
* context-compress wrap "npm test"
|
|
111
|
+
* context-compress wrap --stream "tail -f /var/log/app.log"
|
|
112
|
+
* context-compress wrap -- npm test
|
|
113
|
+
*/
|
|
114
|
+
export async function runWrap(args) {
|
|
115
|
+
if (args.length === 0) {
|
|
116
|
+
process.stderr.write("Usage: context-compress wrap [--stream] [--mode <m>] <command...>\n");
|
|
117
|
+
return 2;
|
|
118
|
+
}
|
|
119
|
+
let stream = false;
|
|
120
|
+
const remaining = [];
|
|
121
|
+
for (let i = 0; i < args.length; i++) {
|
|
122
|
+
const a = args[i];
|
|
123
|
+
if (a === "--stream") {
|
|
124
|
+
stream = true;
|
|
125
|
+
}
|
|
126
|
+
else if (a === "--mode" && i + 1 < args.length) {
|
|
127
|
+
// Consumed by resolveMode below; skip the value here.
|
|
128
|
+
i++;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
remaining.push(a);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const mode = resolveMode(args);
|
|
135
|
+
const sepIdx = remaining.indexOf("--");
|
|
136
|
+
const cmdLine = sepIdx >= 0 ? remaining.slice(sepIdx + 1).join(" ") : remaining.join(" ");
|
|
137
|
+
if (!cmdLine.trim()) {
|
|
138
|
+
process.stderr.write("Usage: context-compress wrap [--stream] [--mode <m>] <command...>\n");
|
|
139
|
+
return 2;
|
|
140
|
+
}
|
|
141
|
+
return await new Promise((resolve) => {
|
|
142
|
+
const proc = spawn(cmdLine, {
|
|
143
|
+
shell: true,
|
|
144
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
145
|
+
env: { ...process.env, NO_COLOR: "1" },
|
|
146
|
+
});
|
|
147
|
+
if (stream) {
|
|
148
|
+
runStreaming(proc, resolve);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
runBuffered(proc, cmdLine, mode, resolve);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function runBuffered(proc, cmdLine, mode, resolve) {
|
|
156
|
+
const stdoutChunks = [];
|
|
157
|
+
const stderrChunks = [];
|
|
158
|
+
proc.stdout?.on("data", (c) => stdoutChunks.push(c));
|
|
159
|
+
proc.stderr?.on("data", (c) => stderrChunks.push(c));
|
|
160
|
+
proc.on("error", (err) => {
|
|
161
|
+
process.stderr.write(`context-compress wrap: ${err.message}\n`);
|
|
162
|
+
resolve(127);
|
|
163
|
+
});
|
|
164
|
+
proc.on("close", (code) => {
|
|
165
|
+
const stdout = Buffer.concat(stdoutChunks).toString("utf-8");
|
|
166
|
+
const stderr = Buffer.concat(stderrChunks).toString("utf-8");
|
|
167
|
+
// auto mode triggers an LLM call; concrete modes are sync. Both flow
|
|
168
|
+
// through compressOutputAsync.
|
|
169
|
+
compressOutputAsync(stdout, cmdLine, mode).then(({ output: compressed }) => {
|
|
170
|
+
process.stdout.write(compressed);
|
|
171
|
+
if (compressed && !compressed.endsWith("\n"))
|
|
172
|
+
process.stdout.write("\n");
|
|
173
|
+
if (stderr)
|
|
174
|
+
process.stderr.write(stderr);
|
|
175
|
+
resolve(code ?? 0);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function runStreaming(proc, resolve) {
|
|
180
|
+
const compressor = new StreamCompressor();
|
|
181
|
+
proc.stdout?.setEncoding("utf-8");
|
|
182
|
+
proc.stdout?.on("data", (chunk) => {
|
|
183
|
+
const out = compressor.process(chunk);
|
|
184
|
+
if (out)
|
|
185
|
+
process.stdout.write(out);
|
|
186
|
+
});
|
|
187
|
+
// stderr passes through unchanged — typically small, error-relevant.
|
|
188
|
+
proc.stderr?.on("data", (c) => process.stderr.write(c));
|
|
189
|
+
proc.on("error", (err) => {
|
|
190
|
+
process.stderr.write(`context-compress wrap: ${err.message}\n`);
|
|
191
|
+
resolve(127);
|
|
192
|
+
});
|
|
193
|
+
proc.on("close", (code) => {
|
|
194
|
+
const tail = compressor.flush();
|
|
195
|
+
if (tail)
|
|
196
|
+
process.stdout.write(tail);
|
|
197
|
+
resolve(code ?? 0);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/cli/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
* context-compress CLI
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
|
-
* context-compress
|
|
7
|
-
* context-compress setup
|
|
8
|
-
* context-compress
|
|
9
|
-
* context-compress
|
|
6
|
+
* context-compress → Start MCP server (stdio)
|
|
7
|
+
* context-compress setup → Interactive setup (prints instructions)
|
|
8
|
+
* context-compress setup --auto → One-line setup: write ~/.claude/settings.json
|
|
9
|
+
* context-compress init --auto → Alias for setup --auto
|
|
10
|
+
* context-compress doctor → Diagnose issues
|
|
11
|
+
* context-compress uninstall → Clean removal
|
|
12
|
+
* context-compress filter [--cmd '<orig>'] → stdin → compressed → stdout
|
|
13
|
+
* context-compress wrap <cmd> → run cmd, compress its stdout, exit with cmd's code
|
|
10
14
|
*/
|
|
11
15
|
export {};
|
|
12
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
|
package/dist/cli/index.js
CHANGED
|
@@ -3,16 +3,21 @@
|
|
|
3
3
|
* context-compress CLI
|
|
4
4
|
*
|
|
5
5
|
* Usage:
|
|
6
|
-
* context-compress
|
|
7
|
-
* context-compress setup
|
|
8
|
-
* context-compress
|
|
9
|
-
* context-compress
|
|
6
|
+
* context-compress → Start MCP server (stdio)
|
|
7
|
+
* context-compress setup → Interactive setup (prints instructions)
|
|
8
|
+
* context-compress setup --auto → One-line setup: write ~/.claude/settings.json
|
|
9
|
+
* context-compress init --auto → Alias for setup --auto
|
|
10
|
+
* context-compress doctor → Diagnose issues
|
|
11
|
+
* context-compress uninstall → Clean removal
|
|
12
|
+
* context-compress filter [--cmd '<orig>'] → stdin → compressed → stdout
|
|
13
|
+
* context-compress wrap <cmd> → run cmd, compress its stdout, exit with cmd's code
|
|
10
14
|
*/
|
|
11
15
|
const args = process.argv.slice(2);
|
|
12
16
|
const command = args[0];
|
|
13
|
-
|
|
17
|
+
const rest = args.slice(1);
|
|
18
|
+
if (command === "setup" || command === "init") {
|
|
14
19
|
const { setup } = await import("./setup.js");
|
|
15
|
-
await setup();
|
|
20
|
+
await setup(rest);
|
|
16
21
|
}
|
|
17
22
|
else if (command === "doctor") {
|
|
18
23
|
const { doctor } = await import("./doctor.js");
|
|
@@ -23,6 +28,14 @@ else if (command === "uninstall") {
|
|
|
23
28
|
const { uninstall } = await import("./uninstall.js");
|
|
24
29
|
await uninstall();
|
|
25
30
|
}
|
|
31
|
+
else if (command === "filter") {
|
|
32
|
+
const { runFilter } = await import("./filter.js");
|
|
33
|
+
process.exit(await runFilter(rest));
|
|
34
|
+
}
|
|
35
|
+
else if (command === "wrap") {
|
|
36
|
+
const { runWrap } = await import("./filter.js");
|
|
37
|
+
process.exit(await runWrap(rest));
|
|
38
|
+
}
|
|
26
39
|
else {
|
|
27
40
|
// Default: start MCP server
|
|
28
41
|
await import("../index.js");
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3B,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;KAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;KAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,SAAS,EAAE,CAAC;AACnB,CAAC;KAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC;KAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;KAAM,CAAC;IACP,4BAA4B;IAC5B,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* context-compress lite CLI — only the filter/wrap commands.
|
|
4
|
+
*
|
|
5
|
+
* No MCP server, no SQLite, no better-sqlite3 native bindings. Designed to
|
|
6
|
+
* be compiled into a single static binary via `bun build --compile` for
|
|
7
|
+
* RTK-style "curl | sh" install — covers the transparent shell-filter
|
|
8
|
+
* use case without any Node.js or npm install.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* cc-lite filter [--cmd '<orig>'] Read stdin → compressed → stdout.
|
|
12
|
+
* cc-lite wrap [--stream] <cmd...> Run cmd, compress its stdout.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=lite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lite.d.ts","sourceRoot":"","sources":["../../src/cli/lite.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/cli/lite.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* context-compress lite CLI — only the filter/wrap commands.
|
|
4
|
+
*
|
|
5
|
+
* No MCP server, no SQLite, no better-sqlite3 native bindings. Designed to
|
|
6
|
+
* be compiled into a single static binary via `bun build --compile` for
|
|
7
|
+
* RTK-style "curl | sh" install — covers the transparent shell-filter
|
|
8
|
+
* use case without any Node.js or npm install.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* cc-lite filter [--cmd '<orig>'] Read stdin → compressed → stdout.
|
|
12
|
+
* cc-lite wrap [--stream] <cmd...> Run cmd, compress its stdout.
|
|
13
|
+
*/
|
|
14
|
+
const args = process.argv.slice(2);
|
|
15
|
+
const command = args[0];
|
|
16
|
+
const rest = args.slice(1);
|
|
17
|
+
async function main() {
|
|
18
|
+
if (command === "filter") {
|
|
19
|
+
const { runFilter } = await import("./filter.js");
|
|
20
|
+
return await runFilter(rest);
|
|
21
|
+
}
|
|
22
|
+
if (command === "wrap") {
|
|
23
|
+
const { runWrap } = await import("./filter.js");
|
|
24
|
+
return await runWrap(rest);
|
|
25
|
+
}
|
|
26
|
+
if (command === "--help" || command === "-h" || !command) {
|
|
27
|
+
process.stderr.write("context-compress lite CLI\n\n" +
|
|
28
|
+
" filter [--cmd '<orig>'] stdin → compressed → stdout\n" +
|
|
29
|
+
" wrap [--stream] <cmd...> run cmd, compress stdout, propagate exit code\n");
|
|
30
|
+
return command ? 0 : 2;
|
|
31
|
+
}
|
|
32
|
+
process.stderr.write(`Unknown command: ${command}\n`);
|
|
33
|
+
return 2;
|
|
34
|
+
}
|
|
35
|
+
main().then((code) => process.exit(code));
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=lite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lite.js","sourceRoot":"","sources":["../../src/cli/lite.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE3B,KAAK,UAAU,IAAI;IAClB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAClD,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,+BAA+B;YAC9B,gEAAgE;YAChE,kFAAkF,CACnF,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACV,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC"}
|
package/dist/cli/setup.d.ts
CHANGED
|
@@ -1,2 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
interface ClaudeSettings {
|
|
2
|
+
hooks?: Record<string, Array<{
|
|
3
|
+
matcher?: string;
|
|
4
|
+
hooks?: Array<{
|
|
5
|
+
command?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
}>;
|
|
8
|
+
}>>;
|
|
9
|
+
mcpServers?: Record<string, {
|
|
10
|
+
command: string;
|
|
11
|
+
args: string[];
|
|
12
|
+
}>;
|
|
13
|
+
env?: Record<string, string>;
|
|
14
|
+
[k: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
/** Add or replace context-compress entries in settings.json. Returns list of changes made. */
|
|
17
|
+
export declare function applyAutoConfig(settings: ClaudeSettings, paths: {
|
|
18
|
+
serverEntry: string;
|
|
19
|
+
hookEntry: string;
|
|
20
|
+
binPath: string;
|
|
21
|
+
}, filterBash: boolean): string[];
|
|
22
|
+
export declare function setup(args?: string[]): Promise<void>;
|
|
23
|
+
export {};
|
|
2
24
|
//# sourceMappingURL=setup.d.ts.map
|
package/dist/cli/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAaA,UAAU,cAAc;IACvB,KAAK,CAAC,EAAE,MAAM,CACb,MAAM,EACN,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAC/E,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACrB;AAsCD,8FAA8F;AAC9F,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAClE,UAAU,EAAE,OAAO,GACjB,MAAM,EAAE,CAiDV;AAkCD,wBAAsB,KAAK,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC9D"}
|
package/dist/cli/setup.js
CHANGED
|
@@ -1,43 +1,144 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
2
3
|
import { dirname, resolve } from "node:path";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
4
5
|
import { detectRuntimes, getRuntimeSummary, hasBun } from "../runtime/index.js";
|
|
5
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the absolute paths the hook + MCP server need. We support two layouts:
|
|
9
|
+
* - Installed npm package: dist/cli/setup.js → ../index.js, ../../hooks/pretooluse.mjs
|
|
10
|
+
* - Dev (tsx): src/cli/setup.ts → ../index.js (built) or fall back to src/index.ts
|
|
11
|
+
*/
|
|
12
|
+
function resolvePaths() {
|
|
13
|
+
const distServer = resolve(__dirname, "..", "index.js");
|
|
14
|
+
const distHook = resolve(__dirname, "..", "..", "hooks", "pretooluse.mjs");
|
|
15
|
+
const distCli = resolve(__dirname, "index.js");
|
|
16
|
+
const srcHook = resolve(__dirname, "..", "hooks", "pretooluse.ts");
|
|
17
|
+
const srcCli = resolve(__dirname, "index.ts");
|
|
18
|
+
const serverEntry = existsSync(distServer) ? distServer : resolve(__dirname, "..", "index.ts");
|
|
19
|
+
const hookEntry = existsSync(distHook) ? distHook : srcHook;
|
|
20
|
+
const binPath = existsSync(distCli) ? distCli : srcCli;
|
|
21
|
+
return { serverEntry, hookEntry, binPath };
|
|
22
|
+
}
|
|
23
|
+
function isBuiltJs(p) {
|
|
24
|
+
return p.endsWith(".js") || p.endsWith(".mjs");
|
|
25
|
+
}
|
|
26
|
+
function readSettings(path) {
|
|
27
|
+
if (!existsSync(path))
|
|
28
|
+
return {};
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function writeSettings(path, settings) {
|
|
37
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
38
|
+
writeFileSync(path, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
39
|
+
}
|
|
40
|
+
/** Add or replace context-compress entries in settings.json. Returns list of changes made. */
|
|
41
|
+
export function applyAutoConfig(settings, paths, filterBash) {
|
|
42
|
+
const changes = [];
|
|
43
|
+
// 1. MCP server registration
|
|
44
|
+
const serverCmd = isBuiltJs(paths.serverEntry) ? "node" : "tsx";
|
|
45
|
+
const serverArgs = [paths.serverEntry];
|
|
46
|
+
settings.mcpServers ??= {};
|
|
47
|
+
const existing = settings.mcpServers["context-compress"];
|
|
48
|
+
if (!existing ||
|
|
49
|
+
existing.command !== serverCmd ||
|
|
50
|
+
JSON.stringify(existing.args) !== JSON.stringify(serverArgs)) {
|
|
51
|
+
settings.mcpServers["context-compress"] = { command: serverCmd, args: serverArgs };
|
|
52
|
+
changes.push(`Registered MCP server (${serverCmd} ${paths.serverEntry})`);
|
|
53
|
+
}
|
|
54
|
+
// 2. PreToolUse hook
|
|
55
|
+
settings.hooks ??= {};
|
|
56
|
+
settings.hooks.PreToolUse ??= [];
|
|
57
|
+
const hookCmd = isBuiltJs(paths.hookEntry) ? `node ${paths.hookEntry}` : `tsx ${paths.hookEntry}`;
|
|
58
|
+
const hookEntries = settings.hooks.PreToolUse;
|
|
59
|
+
const alreadyInstalled = hookEntries.some((entry) => entry.hooks?.some((h) => h.command?.includes("pretooluse")));
|
|
60
|
+
if (!alreadyInstalled) {
|
|
61
|
+
hookEntries.push({
|
|
62
|
+
matcher: "Bash|Read|Grep|WebFetch|Task",
|
|
63
|
+
hooks: [{ type: "command", command: hookCmd }],
|
|
64
|
+
});
|
|
65
|
+
changes.push(`Installed PreToolUse hook (${hookCmd})`);
|
|
66
|
+
}
|
|
67
|
+
// 3. Bash filter mode (opt-in, but on by default with --auto)
|
|
68
|
+
if (filterBash) {
|
|
69
|
+
settings.env ??= {};
|
|
70
|
+
if (settings.env.CONTEXT_COMPRESS_FILTER_BASH !== "1") {
|
|
71
|
+
settings.env.CONTEXT_COMPRESS_FILTER_BASH = "1";
|
|
72
|
+
changes.push("Enabled CONTEXT_COMPRESS_FILTER_BASH=1 (transparent Bash compression)");
|
|
73
|
+
}
|
|
74
|
+
// Pin CONTEXT_COMPRESS_BIN so the hook knows where to find the wrap command.
|
|
75
|
+
const binCmd = isBuiltJs(paths.binPath) ? `node ${paths.binPath}` : `tsx ${paths.binPath}`;
|
|
76
|
+
if (settings.env.CONTEXT_COMPRESS_BIN !== binCmd) {
|
|
77
|
+
settings.env.CONTEXT_COMPRESS_BIN = binCmd;
|
|
78
|
+
changes.push(`Set CONTEXT_COMPRESS_BIN to ${binCmd}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return changes;
|
|
82
|
+
}
|
|
83
|
+
function showRuntimes() {
|
|
9
84
|
console.log(" Detecting runtimes...");
|
|
85
|
+
}
|
|
86
|
+
async function showRuntimeReport() {
|
|
87
|
+
showRuntimes();
|
|
10
88
|
const runtimes = await detectRuntimes();
|
|
11
89
|
console.log(` Found ${runtimes.size} languages:\n`);
|
|
12
90
|
console.log(getRuntimeSummary(runtimes));
|
|
13
91
|
console.log();
|
|
14
|
-
// Step 2: Check Bun
|
|
15
92
|
if (hasBun(runtimes)) {
|
|
16
93
|
console.log(" Bun detected — JS/TS will run at maximum speed.\n");
|
|
17
94
|
}
|
|
18
95
|
else {
|
|
19
96
|
console.log(" Bun not found — JS/TS will use Node.js (install Bun for 3-5x speed).\n");
|
|
20
97
|
}
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const missing = all.filter((lang) => !runtimes.has(lang));
|
|
98
|
+
const optional = ["python", "ruby", "go", "rust", "php", "perl", "r", "elixir"];
|
|
99
|
+
const missing = optional.filter((lang) => !runtimes.has(lang));
|
|
24
100
|
if (missing.length > 0) {
|
|
25
101
|
console.log(` Optional runtimes not found: ${missing.join(", ")}`);
|
|
26
102
|
console.log(" Install them to enable additional language support.\n");
|
|
27
103
|
}
|
|
28
|
-
|
|
29
|
-
|
|
104
|
+
}
|
|
105
|
+
function showInstructions(serverEntry) {
|
|
30
106
|
console.log(" To add to Claude Code, run:");
|
|
31
|
-
console.log(` claude mcp add context-compress -- node ${
|
|
32
|
-
console.log(" Or
|
|
33
|
-
console.log(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
107
|
+
console.log(` claude mcp add context-compress -- node ${serverEntry}\n`);
|
|
108
|
+
console.log(" Or use --auto to do everything automatically:");
|
|
109
|
+
console.log(" context-compress setup --auto\n");
|
|
110
|
+
}
|
|
111
|
+
export async function setup(args = []) {
|
|
112
|
+
const opts = {
|
|
113
|
+
auto: args.includes("--auto"),
|
|
114
|
+
filterBash: !args.includes("--no-filter-bash"),
|
|
115
|
+
};
|
|
116
|
+
console.log("\n context-compress setup\n");
|
|
117
|
+
await showRuntimeReport();
|
|
118
|
+
const paths = resolvePaths();
|
|
119
|
+
if (!opts.auto) {
|
|
120
|
+
showInstructions(paths.serverEntry);
|
|
121
|
+
console.log(" Setup complete!\n");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// --auto: write settings.json directly
|
|
125
|
+
const settingsPath = resolve(homedir(), ".claude", "settings.json");
|
|
126
|
+
console.log(` Writing config to ${settingsPath}...`);
|
|
127
|
+
const settings = readSettings(settingsPath);
|
|
128
|
+
const changes = applyAutoConfig(settings, paths, opts.filterBash);
|
|
129
|
+
if (changes.length === 0) {
|
|
130
|
+
console.log(" Already configured. No changes made.\n");
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
writeSettings(settingsPath, settings);
|
|
134
|
+
console.log();
|
|
135
|
+
for (const c of changes)
|
|
136
|
+
console.log(` + ${c}`);
|
|
137
|
+
console.log();
|
|
138
|
+
}
|
|
139
|
+
console.log(" Setup complete! Restart Claude Code to load the new configuration.");
|
|
140
|
+
console.log(opts.filterBash
|
|
141
|
+
? " Bash output for git/npm/cargo/test/find/docker/kubectl/... will be auto-compressed.\n"
|
|
142
|
+
: " Tip: pass --filter-bash on next setup to enable transparent Bash compression.\n");
|
|
42
143
|
}
|
|
43
144
|
//# sourceMappingURL=setup.js.map
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { Config } from "./config.js";
|
|
2
2
|
import type { RuntimeMap } from "./runtime/index.js";
|
|
3
3
|
import type { ExecFileOptions, ExecOptions, ExecResult } from "./types.js";
|
|
4
|
+
declare function stripAnsi(str: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Strip progress/spinner lines that add no informational value.
|
|
7
|
+
* Removes: percentage bars, spinner characters, ANSI escape codes, download progress.
|
|
8
|
+
*/
|
|
9
|
+
declare function stripProgressLines(output: string): string;
|
|
4
10
|
/**
|
|
5
11
|
* Deduplicate consecutive repeated lines.
|
|
6
12
|
* Replaces N identical consecutive lines with "line (×N)".
|
|
@@ -11,7 +17,7 @@ declare function deduplicateLines(output: string): string;
|
|
|
11
17
|
* Collapses "ERROR: foo at line 1", "ERROR: foo at line 2" → "ERROR: foo (×2 occurrences, lines: 1, 2)"
|
|
12
18
|
*/
|
|
13
19
|
declare function groupErrorLines(output: string): string;
|
|
14
|
-
export { deduplicateLines, groupErrorLines };
|
|
20
|
+
export { deduplicateLines, groupErrorLines, stripAnsi, stripProgressLines };
|
|
15
21
|
export declare class SubprocessExecutor {
|
|
16
22
|
private runtimes;
|
|
17
23
|
private config;
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAUrF,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtC;AAwED;;;GAGG;AACH,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBlD;AAED;;;GAGG;AACH,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA+BhD;AAED;;;GAGG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6D/C;AA2CD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAE5E,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,eAAe,CAAwD;gBAEnE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAMhD,+DAA+D;IAC/D,QAAQ,IAAI,IAAI;IAWhB;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA0ErD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAsB7D,OAAO,CAAC,eAAe;IAsHvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;CAOtB"}
|