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.
Files changed (115) hide show
  1. package/README.md +258 -44
  2. package/dist/cli/doctor.d.ts.map +1 -1
  3. package/dist/cli/doctor.js +2 -10
  4. package/dist/cli/doctor.js.map +1 -1
  5. package/dist/cli/filter.d.ts +52 -0
  6. package/dist/cli/filter.d.ts.map +1 -0
  7. package/dist/cli/filter.js +200 -0
  8. package/dist/cli/filter.js.map +1 -0
  9. package/dist/cli/index.d.ts +8 -4
  10. package/dist/cli/index.d.ts.map +1 -1
  11. package/dist/cli/index.js +19 -6
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/cli/lite.d.ts +15 -0
  14. package/dist/cli/lite.d.ts.map +1 -0
  15. package/dist/cli/lite.js +37 -0
  16. package/dist/cli/lite.js.map +1 -0
  17. package/dist/cli/setup.d.ts +23 -1
  18. package/dist/cli/setup.d.ts.map +1 -1
  19. package/dist/cli/setup.js +122 -21
  20. package/dist/cli/setup.js.map +1 -1
  21. package/dist/executor.d.ts +7 -1
  22. package/dist/executor.d.ts.map +1 -1
  23. package/dist/executor.js +51 -4
  24. package/dist/executor.js.map +1 -1
  25. package/dist/filters.d.ts +52 -0
  26. package/dist/filters.d.ts.map +1 -0
  27. package/dist/filters.js +719 -0
  28. package/dist/filters.js.map +1 -0
  29. package/dist/hooks/pretooluse.js +57 -0
  30. package/dist/hooks/pretooluse.js.map +1 -1
  31. package/dist/network.d.ts.map +1 -1
  32. package/dist/network.js +11 -0
  33. package/dist/network.js.map +1 -1
  34. package/dist/server.bundle.mjs +1333 -619
  35. package/dist/server.bundle.mjs.map +4 -4
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +44 -610
  38. package/dist/server.js.map +1 -1
  39. package/dist/stats.d.ts +7 -1
  40. package/dist/stats.d.ts.map +1 -1
  41. package/dist/stats.js +65 -0
  42. package/dist/stats.js.map +1 -1
  43. package/dist/store.d.ts +1 -0
  44. package/dist/store.d.ts.map +1 -1
  45. package/dist/store.js +15 -2
  46. package/dist/store.js.map +1 -1
  47. package/dist/tools/batch-execute.d.ts +4 -0
  48. package/dist/tools/batch-execute.d.ts.map +1 -0
  49. package/dist/tools/batch-execute.js +75 -0
  50. package/dist/tools/batch-execute.js.map +1 -0
  51. package/dist/tools/context.d.ts +17 -0
  52. package/dist/tools/context.d.ts.map +1 -0
  53. package/dist/tools/context.js +2 -0
  54. package/dist/tools/context.js.map +1 -0
  55. package/dist/tools/discover.d.ts +4 -0
  56. package/dist/tools/discover.d.ts.map +1 -0
  57. package/dist/tools/discover.js +65 -0
  58. package/dist/tools/discover.js.map +1 -0
  59. package/dist/tools/execute-file.d.ts +4 -0
  60. package/dist/tools/execute-file.d.ts.map +1 -0
  61. package/dist/tools/execute-file.js +66 -0
  62. package/dist/tools/execute-file.js.map +1 -0
  63. package/dist/tools/execute.d.ts +4 -0
  64. package/dist/tools/execute.d.ts.map +1 -0
  65. package/dist/tools/execute.js +54 -0
  66. package/dist/tools/execute.js.map +1 -0
  67. package/dist/tools/fetch-and-index.d.ts +4 -0
  68. package/dist/tools/fetch-and-index.d.ts.map +1 -0
  69. package/dist/tools/fetch-and-index.js +91 -0
  70. package/dist/tools/fetch-and-index.js.map +1 -0
  71. package/dist/tools/index-content.d.ts +4 -0
  72. package/dist/tools/index-content.d.ts.map +1 -0
  73. package/dist/tools/index-content.js +85 -0
  74. package/dist/tools/index-content.js.map +1 -0
  75. package/dist/tools/search.d.ts +4 -0
  76. package/dist/tools/search.d.ts.map +1 -0
  77. package/dist/tools/search.js +57 -0
  78. package/dist/tools/search.js.map +1 -0
  79. package/dist/tools/stats.d.ts +4 -0
  80. package/dist/tools/stats.d.ts.map +1 -0
  81. package/dist/tools/stats.js +10 -0
  82. package/dist/tools/stats.js.map +1 -0
  83. package/dist/types.d.ts +11 -0
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/util/auto-mode.d.ts +40 -0
  86. package/dist/util/auto-mode.d.ts.map +1 -0
  87. package/dist/util/auto-mode.js +181 -0
  88. package/dist/util/auto-mode.js.map +1 -0
  89. package/dist/util/fetch-code.d.ts +10 -0
  90. package/dist/util/fetch-code.d.ts.map +1 -0
  91. package/dist/util/fetch-code.js +87 -0
  92. package/dist/util/fetch-code.js.map +1 -0
  93. package/dist/util/intent-filter.d.ts +17 -0
  94. package/dist/util/intent-filter.d.ts.map +1 -0
  95. package/dist/util/intent-filter.js +28 -0
  96. package/dist/util/intent-filter.js.map +1 -0
  97. package/dist/util/label.d.ts +4 -0
  98. package/dist/util/label.d.ts.map +1 -0
  99. package/dist/util/label.js +14 -0
  100. package/dist/util/label.js.map +1 -0
  101. package/dist/util/path.d.ts +8 -0
  102. package/dist/util/path.d.ts.map +1 -0
  103. package/dist/util/path.js +21 -0
  104. package/dist/util/path.js.map +1 -0
  105. package/dist/util/stream-compress.d.ts +36 -0
  106. package/dist/util/stream-compress.d.ts.map +1 -0
  107. package/dist/util/stream-compress.js +104 -0
  108. package/dist/util/stream-compress.js.map +1 -0
  109. package/dist/util/version.d.ts +2 -0
  110. package/dist/util/version.d.ts.map +1 -0
  111. package/dist/util/version.js +15 -0
  112. package/dist/util/version.js.map +1 -0
  113. package/docs/token-reduction-report.md +164 -88
  114. package/hooks/pretooluse.mjs +38 -0
  115. 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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"}
@@ -3,10 +3,14 @@
3
3
  * context-compress CLI
4
4
  *
5
5
  * Usage:
6
- * context-compress → Start MCP server (stdio)
7
- * context-compress setup → Interactive setup
8
- * context-compress doctor Diagnose issues
9
- * context-compress uninstallClean removal
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
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 → Start MCP server (stdio)
7
- * context-compress setup → Interactive setup
8
- * context-compress doctor Diagnose issues
9
- * context-compress uninstallClean removal
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
- if (command === "setup") {
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");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,KAAK,EAAE,CAAC;AACf,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,CAAC;IACP,4BAA4B;IAC5B,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
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"}
@@ -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"}
@@ -1,2 +1,24 @@
1
- export declare function setup(): Promise<void>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAOA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C3C"}
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 { execSync } from "node:child_process";
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
- export async function setup() {
7
- console.log("\n context-compress setup\n");
8
- // Step 1: Detect runtimes
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
- // Step 3: Missing optional runtimes
22
- const all = ["python", "ruby", "go", "rust", "php", "perl", "r", "elixir"];
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
- // Step 4: Show installation instructions
29
- const serverPath = resolve(__dirname, "..", "index.js");
104
+ }
105
+ function showInstructions(serverEntry) {
30
106
  console.log(" To add to Claude Code, run:");
31
- console.log(` claude mcp add context-compress -- node ${serverPath}\n`);
32
- console.log(" Or add to .mcp.json:");
33
- console.log(JSON.stringify({
34
- mcpServers: {
35
- "context-compress": {
36
- command: "node",
37
- args: [serverPath],
38
- },
39
- },
40
- }, null, 4));
41
- console.log("\n Setup complete!\n");
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
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,KAAK;IAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,IAAI,eAAe,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,oBAAoB;IACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACzF,CAAC;IAED,oCAAoC;IACpC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAU,CAAC;IACpF,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACxE,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,+CAA+C,UAAU,IAAI,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CACb;QACC,UAAU,EAAE;YACX,kBAAkB,EAAE;gBACnB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,CAAC,UAAU,CAAC;aAClB;SACD;KACD,EACD,IAAI,EACJ,CAAC,CACD,CACD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AA2ErF;;;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,CAAC;AAE7C,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;IAyErD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAsB7D,OAAO,CAAC,eAAe;IAwGvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;CAOtB"}
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"}