context-compress 1.0.0 → 2026.3.13

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 (45) hide show
  1. package/README.md +41 -5
  2. package/dist/cli/doctor.d.ts.map +1 -1
  3. package/dist/cli/doctor.js +22 -1
  4. package/dist/cli/doctor.js.map +1 -1
  5. package/dist/config.d.ts +3 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +97 -4
  8. package/dist/config.js.map +1 -1
  9. package/dist/executor.d.ts +12 -0
  10. package/dist/executor.d.ts.map +1 -1
  11. package/dist/executor.js +129 -14
  12. package/dist/executor.js.map +1 -1
  13. package/dist/hooks/pretooluse.js +12 -6
  14. package/dist/hooks/pretooluse.js.map +1 -1
  15. package/dist/network.d.ts +5 -0
  16. package/dist/network.d.ts.map +1 -0
  17. package/dist/network.js +42 -0
  18. package/dist/network.js.map +1 -0
  19. package/dist/runtime/languages/go.js +3 -3
  20. package/dist/runtime/languages/go.js.map +1 -1
  21. package/dist/runtime/languages/javascript.js +1 -1
  22. package/dist/runtime/languages/javascript.js.map +1 -1
  23. package/dist/runtime/languages/r.js +1 -1
  24. package/dist/runtime/languages/rust.js +2 -2
  25. package/dist/runtime/languages/rust.js.map +1 -1
  26. package/dist/runtime/languages/typescript.js +1 -1
  27. package/dist/runtime/languages/typescript.js.map +1 -1
  28. package/dist/server.bundle.mjs +531 -152
  29. package/dist/server.bundle.mjs.map +4 -4
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +160 -25
  32. package/dist/server.js.map +1 -1
  33. package/dist/snippet.d.ts.map +1 -1
  34. package/dist/snippet.js +1 -8
  35. package/dist/snippet.js.map +1 -1
  36. package/dist/stats.d.ts.map +1 -1
  37. package/dist/stats.js +28 -11
  38. package/dist/stats.js.map +1 -1
  39. package/dist/store.d.ts +14 -0
  40. package/dist/store.d.ts.map +1 -1
  41. package/dist/store.js +44 -22
  42. package/dist/store.js.map +1 -1
  43. package/docs/token-reduction-report.md +459 -0
  44. package/hooks/pretooluse.mjs +10 -5
  45. package/package.json +7 -4
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  A context-aware **MCP server** for [Claude Code](https://claude.ai/claude-code) that compresses tool output by processing it in isolated subprocesses. Raw data stays in the sandbox — only concise summaries enter your context window.
13
13
 
14
- [Quickstart for Agents](#quickstart-for-agents) · [Getting Started](#getting-started) · [How It Works](#how-it-works) · [Configuration](#configuration) · [CLI](#cli) · [Changelog](CHANGELOG.md)
14
+ [Quickstart for Agents](#quickstart-for-agents) · [Getting Started](#getting-started) · [How It Works](#how-it-works) · [Token Reduction](#token-reduction) · [Configuration](#configuration) · [CLI](#cli) · [Changelog](CHANGELOG.md)
15
15
 
16
16
  </div>
17
17
 
@@ -19,11 +19,21 @@ A context-aware **MCP server** for [Claude Code](https://claude.ai/claude-code)
19
19
 
20
20
  ## Quickstart for Agents
21
21
 
22
+ <div><img src="https://quickstart-for-agents.vercel.app/api/header.svg?theme=claude-code&title=context-compress&lang=Agents&mascot=thinking" width="100%" /></div>
23
+
22
24
  ```
23
- npm install -g context-compress && claude mcp add context-compress -- node $(which context-compress)
25
+ Install context-compress an MCP server that compresses tool output for Claude Code.
26
+ Raw data stays in sandboxed subprocesses, only concise summaries enter your context window.
27
+ Saves ~99% of tokens on large outputs while keeping everything searchable via FTS5.
28
+
29
+ npm install -g context-compress
30
+ claude mcp add context-compress -- node $(which context-compress)
31
+ context-compress doctor
32
+
33
+ More info: https://github.com/Open330/context-compress
24
34
  ```
25
35
 
26
- MCP server that compresses tool output for Claude Code — raw data stays in sandboxed subprocesses, only concise summaries enter your context window.
36
+ <div><img src="https://quickstart-for-agents.vercel.app/api/footer.svg?theme=claude-code&project=context-compress" width="100%" /></div>
27
37
 
28
38
  ---
29
39
 
@@ -125,6 +135,32 @@ context-compress doctor
125
135
 
126
136
  ---
127
137
 
138
+ ## Token Reduction
139
+
140
+ context-compress achieves **99.2% token reduction** across a typical 12-operation coding session.
141
+
142
+ | Operation | Before | After | Reduction |
143
+ |:--|--:|--:|--:|
144
+ | Read bundled file (776KB) | 194,076 tok | 105 tok | 99.9% |
145
+ | Playwright snapshot (56KB) | 14,000 tok | 75 tok | 99.5% |
146
+ | Read CSV/JSON data (100KB) | 25,000 tok | 125 tok | 99.5% |
147
+ | Read source file (21KB) | 5,250 tok | 88 tok | 98.3% |
148
+ | npm install log (15KB) | 3,750 tok | 50 tok | 98.7% |
149
+ | curl API response (12KB) | 3,000 tok | 88 tok | 97.1% |
150
+ | npm test (42 tests) | 935 tok | 45 tok | 95.2% |
151
+ | batch_execute (5 cmds) | 6,250 tok | 375 tok | 94.0% |
152
+ | fetch_and_index (45KB page) | 11,250 tok | 750 tok | 93.3% |
153
+ | grep (small output) | 361 tok | 361 tok | 0% |
154
+ | **Session Total** | **267,121 tok** | **2,223 tok** | **99.2%** |
155
+
156
+ Without context-compress, 12 operations consume **133% of the 200K context window** — overflowing it entirely. With context-compress, the same operations use **1.1%**, leaving 98.9% free for actual conversation.
157
+
158
+ > Data isn't deleted — it's indexed in FTS5 and searchable on demand. Small outputs (<5KB) pass through uncompressed.
159
+
160
+ **[Read the full Token Reduction Report](docs/token-reduction-report.md)** — includes cost analysis, architecture deep-dive, and FAQ on context loss trade-offs.
161
+
162
+ ---
163
+
128
164
  ## What Changed from context-mode
129
165
 
130
166
  | | context-mode | context-compress |
@@ -201,7 +237,7 @@ context-compress uninstall # Clean removal: hooks, MCP reg, stale DBs
201
237
  [PASS] PreToolUse hook configured
202
238
  [PASS] FTS5 / better-sqlite3 works
203
239
 
204
- Version: v1.0.0
240
+ Version: v2026.3.3
205
241
  All checks passed.
206
242
  ```
207
243
 
@@ -263,7 +299,7 @@ cd context-compress
263
299
  npm install
264
300
  npm run typecheck # Type checking
265
301
  npm run lint # Biome linting
266
- npm run test:unit # 36 unit tests
302
+ npm run test:unit # Unit tests
267
303
  npm run test # All tests (unit + integration)
268
304
  npm run build # Compile + bundle
269
305
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AA6BA,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CA4G9C"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AA8BA,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAiI9C"}
@@ -1,3 +1,4 @@
1
+ import { createHash } from "node:crypto";
1
2
  import { constants, accessSync, readFileSync } from "node:fs";
2
3
  import { homedir } from "node:os";
3
4
  import { dirname, resolve } from "node:path";
@@ -86,11 +87,31 @@ export async function doctor() {
86
87
  else {
87
88
  console.log(" [WARN] Could not read ~/.claude/settings.json");
88
89
  }
89
- // 4. Hook script
90
+ // 4. Hook script + integrity
90
91
  const hookPath = resolve(__dirname, "..", "..", "hooks", "pretooluse.mjs");
91
92
  try {
92
93
  accessSync(hookPath, constants.R_OK);
93
94
  console.log(" [PASS] Hook script exists");
95
+ // SHA-256 integrity check
96
+ const hookContent = readFileSync(hookPath);
97
+ const hash = createHash("sha256").update(hookContent).digest("hex");
98
+ const checksumPath = resolve(__dirname, "..", "..", "hooks", "pretooluse.sha256");
99
+ try {
100
+ const expectedHash = readFileSync(checksumPath, "utf-8").trim();
101
+ if (hash === expectedHash) {
102
+ console.log(` [PASS] Hook integrity: SHA-256 verified (${hash.slice(0, 12)}...)`);
103
+ }
104
+ else {
105
+ console.log(" [WARN] Hook integrity: SHA-256 MISMATCH");
106
+ console.log(` Expected: ${expectedHash.slice(0, 16)}...`);
107
+ console.log(` Got: ${hash.slice(0, 16)}...`);
108
+ console.log(" Hook may have been modified. Rebuild with: npm run build:hooks");
109
+ }
110
+ }
111
+ catch {
112
+ // No checksum file yet — show hash for reference
113
+ console.log(` [INFO] Hook SHA-256: ${hash.slice(0, 12)}... (no checksum file to verify against)`);
114
+ }
94
115
  }
95
116
  catch {
96
117
  console.log(` [WARN] Hook script not found at ${hookPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export type CompressionLevel = "normal" | "compact" | "ultra";
1
2
  export interface Config {
2
3
  /** Environment variables to pass through to subprocesses (default: none) */
3
4
  passthroughEnvVars: string[];
@@ -29,6 +30,8 @@ export interface Config {
29
30
  searchReduceAfter: number;
30
31
  /** Number of search calls before blocking */
31
32
  searchBlockAfter: number;
33
+ /** Compression level: normal (default), compact (shorter labels), ultra (minimal output) */
34
+ compressionLevel: CompressionLevel;
32
35
  }
33
36
  export declare function loadConfig(projectDir?: string): Config;
34
37
  export declare function getConfig(): Config;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,MAAM;IACtB,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAkED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAStD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,iCAAiC;AACjC,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,MAAM;IACtB,4EAA4E;IAC5E,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,4FAA4F;IAC5F,gBAAgB,EAAE,gBAAgB,CAAC;CACnC;AAuJD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,iCAAiC;AACjC,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
package/dist/config.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
2
3
  import { join } from "node:path";
4
+ import { z } from "zod";
3
5
  const DEFAULTS = {
4
6
  passthroughEnvVars: [],
5
7
  debug: false,
@@ -16,16 +18,66 @@ const DEFAULTS = {
16
18
  searchWindowMs: 60_000,
17
19
  searchReduceAfter: 3,
18
20
  searchBlockAfter: 8,
21
+ compressionLevel: "normal",
19
22
  };
23
+ /** Overrides applied per compression level */
24
+ const LEVEL_OVERRIDES = {
25
+ normal: {},
26
+ compact: {
27
+ maxOutputBytes: 51_200,
28
+ searchMaxBytes: 20_480,
29
+ batchMaxBytes: 40_960,
30
+ searchLimit: 2,
31
+ intentSearchThreshold: 3_000,
32
+ },
33
+ ultra: {
34
+ maxOutputBytes: 25_600,
35
+ searchMaxBytes: 10_240,
36
+ batchMaxBytes: 20_480,
37
+ searchLimit: 1,
38
+ intentSearchThreshold: 2_000,
39
+ },
40
+ };
41
+ const ConfigSchema = z.object({
42
+ passthroughEnvVars: z.array(z.string()).optional(),
43
+ debug: z.boolean().optional(),
44
+ blockCurl: z.boolean().optional(),
45
+ blockWebFetch: z.boolean().optional(),
46
+ nudgeOnRead: z.boolean().optional(),
47
+ nudgeOnGrep: z.boolean().optional(),
48
+ intentSearchThreshold: z.number().int().positive().optional(),
49
+ maxOutputBytes: z.number().int().positive().optional(),
50
+ hardCapBytes: z.number().int().positive().optional(),
51
+ searchMaxBytes: z.number().int().positive().optional(),
52
+ batchMaxBytes: z.number().int().positive().optional(),
53
+ searchLimit: z.number().int().positive().optional(),
54
+ searchWindowMs: z.number().int().positive().optional(),
55
+ searchReduceAfter: z.number().int().nonnegative().optional(),
56
+ searchBlockAfter: z.number().int().positive().optional(),
57
+ compressionLevel: z.enum(["normal", "compact", "ultra"]).optional(),
58
+ });
59
+ function parseIntEnv(key) {
60
+ const val = process.env[key];
61
+ if (val === undefined)
62
+ return undefined;
63
+ const n = Number.parseInt(val, 10);
64
+ return Number.isNaN(n) ? undefined : n;
65
+ }
20
66
  function loadFileConfig(projectDir) {
21
67
  const paths = [
22
68
  projectDir && join(projectDir, ".context-compress.json"),
23
- join(process.env.HOME ?? "~", ".context-compress.json"),
69
+ join(homedir(), ".context-compress.json"),
24
70
  ].filter(Boolean);
25
71
  for (const p of paths) {
26
72
  try {
27
73
  const raw = readFileSync(p, "utf-8");
28
- return JSON.parse(raw);
74
+ const parsed = JSON.parse(raw);
75
+ const result = ConfigSchema.safeParse(parsed);
76
+ if (result.success) {
77
+ return result.data;
78
+ }
79
+ // Invalid config — fall back to defaults
80
+ return {};
29
81
  }
30
82
  catch {
31
83
  // File doesn't exist or invalid JSON — skip
@@ -55,6 +107,38 @@ function loadEnvConfig() {
55
107
  if (process.env.CONTEXT_COMPRESS_NUDGE_GREP !== undefined) {
56
108
  partial.nudgeOnGrep = process.env.CONTEXT_COMPRESS_NUDGE_GREP !== "0";
57
109
  }
110
+ // Numeric overrides
111
+ const maxOutput = parseIntEnv("CONTEXT_COMPRESS_MAX_OUTPUT_BYTES");
112
+ if (maxOutput !== undefined)
113
+ partial.maxOutputBytes = maxOutput;
114
+ const hardCap = parseIntEnv("CONTEXT_COMPRESS_HARD_CAP_BYTES");
115
+ if (hardCap !== undefined)
116
+ partial.hardCapBytes = hardCap;
117
+ const searchMax = parseIntEnv("CONTEXT_COMPRESS_SEARCH_MAX_BYTES");
118
+ if (searchMax !== undefined)
119
+ partial.searchMaxBytes = searchMax;
120
+ const batchMax = parseIntEnv("CONTEXT_COMPRESS_BATCH_MAX_BYTES");
121
+ if (batchMax !== undefined)
122
+ partial.batchMaxBytes = batchMax;
123
+ const searchLimit = parseIntEnv("CONTEXT_COMPRESS_SEARCH_LIMIT");
124
+ if (searchLimit !== undefined)
125
+ partial.searchLimit = searchLimit;
126
+ const searchWindow = parseIntEnv("CONTEXT_COMPRESS_SEARCH_WINDOW_MS");
127
+ if (searchWindow !== undefined)
128
+ partial.searchWindowMs = searchWindow;
129
+ const searchReduce = parseIntEnv("CONTEXT_COMPRESS_SEARCH_REDUCE_AFTER");
130
+ if (searchReduce !== undefined)
131
+ partial.searchReduceAfter = searchReduce;
132
+ const searchBlock = parseIntEnv("CONTEXT_COMPRESS_SEARCH_BLOCK_AFTER");
133
+ if (searchBlock !== undefined)
134
+ partial.searchBlockAfter = searchBlock;
135
+ const intentThreshold = parseIntEnv("CONTEXT_COMPRESS_INTENT_SEARCH_THRESHOLD");
136
+ if (intentThreshold !== undefined)
137
+ partial.intentSearchThreshold = intentThreshold;
138
+ const level = process.env.CONTEXT_COMPRESS_LEVEL;
139
+ if (level === "normal" || level === "compact" || level === "ultra") {
140
+ partial.compressionLevel = level;
141
+ }
58
142
  return partial;
59
143
  }
60
144
  let _config = null;
@@ -63,8 +147,17 @@ export function loadConfig(projectDir) {
63
147
  return _config;
64
148
  const fileConfig = loadFileConfig(projectDir);
65
149
  const envConfig = loadEnvConfig();
66
- // Priority: ENV > file > defaults
67
- _config = { ...DEFAULTS, ...fileConfig, ...envConfig };
150
+ // Priority: ENV > file > level overrides > defaults
151
+ const merged = { ...DEFAULTS, ...fileConfig, ...envConfig };
152
+ const levelOverrides = LEVEL_OVERRIDES[merged.compressionLevel];
153
+ // Level overrides only apply to values not explicitly set by user
154
+ for (const [key, value] of Object.entries(levelOverrides)) {
155
+ const k = key;
156
+ if (!(k in fileConfig) && !(k in envConfig)) {
157
+ merged[k] = value;
158
+ }
159
+ }
160
+ _config = merged;
68
161
  return _config;
69
162
  }
70
163
  export function getConfig() {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,18 @@
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
+ /**
5
+ * Deduplicate consecutive repeated lines.
6
+ * Replaces N identical consecutive lines with "line (×N)".
7
+ */
8
+ declare function deduplicateLines(output: string): string;
9
+ /**
10
+ * Group similar error/warning lines by pattern.
11
+ * Collapses "ERROR: foo at line 1", "ERROR: foo at line 2" → "ERROR: foo (×2 occurrences, lines: 1, 2)"
12
+ */
13
+ declare function groupErrorLines(output: string): string;
14
+ export { deduplicateLines, groupErrorLines };
15
+ export declare function formatBytes(bytes: number): string;
4
16
  export declare class SubprocessExecutor {
5
17
  private runtimes;
6
18
  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;AA2HrF,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAyB;gBAExB,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAMhD;;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;IAiFvB,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;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AA0ErF;;;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,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAyB;gBAExB,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAMhD;;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;IAkGvB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;CAOtB"}
package/dist/executor.js CHANGED
@@ -2,10 +2,8 @@ import { execFileSync, spawn } from "node:child_process";
2
2
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
- import { debug, error as logError, warn } from "./logger.js";
5
+ import { debug } from "./logger.js";
6
6
  const DEFAULT_TIMEOUT = 30_000;
7
- const DEFAULT_MAX_OUTPUT = 102_400;
8
- const DEFAULT_HARD_CAP = 100 * 1024 * 1024;
9
7
  /** Safe base environment variables */
10
8
  const SAFE_ENV_KEYS = [
11
9
  "PATH",
@@ -72,6 +70,105 @@ function killProcessTree(pid) {
72
70
  }
73
71
  }
74
72
  }
73
+ /**
74
+ * Deduplicate consecutive repeated lines.
75
+ * Replaces N identical consecutive lines with "line (×N)".
76
+ */
77
+ function deduplicateLines(output) {
78
+ const lines = output.split("\n");
79
+ if (lines.length < 3)
80
+ return output;
81
+ const result = [];
82
+ let prevLine = lines[0];
83
+ let count = 1;
84
+ for (let i = 1; i < lines.length; i++) {
85
+ if (lines[i] === prevLine && prevLine.trim().length > 0) {
86
+ count++;
87
+ }
88
+ else {
89
+ if (count > 2) {
90
+ result.push(prevLine);
91
+ result.push(` ... (×${count} identical lines)`);
92
+ }
93
+ else {
94
+ for (let j = 0; j < count; j++)
95
+ result.push(prevLine);
96
+ }
97
+ prevLine = lines[i];
98
+ count = 1;
99
+ }
100
+ }
101
+ // Flush last group
102
+ if (count > 2) {
103
+ result.push(prevLine);
104
+ result.push(` ... (×${count} identical lines)`);
105
+ }
106
+ else {
107
+ for (let j = 0; j < count; j++)
108
+ result.push(prevLine);
109
+ }
110
+ return result.join("\n");
111
+ }
112
+ /**
113
+ * Group similar error/warning lines by pattern.
114
+ * Collapses "ERROR: foo at line 1", "ERROR: foo at line 2" → "ERROR: foo (×2 occurrences, lines: 1, 2)"
115
+ */
116
+ function groupErrorLines(output) {
117
+ const lines = output.split("\n");
118
+ if (lines.length < 5)
119
+ return output;
120
+ // Detect error/warning patterns
121
+ const ERROR_RE = /^(.*?(?:error|warning|Error|Warning|ERR|WARN)[:\s])\s*(.+?)(?:\s+(?:at|in|on)\s+(?:line\s+)?(\d+))?$/i;
122
+ const errorGroups = new Map();
123
+ const resultLines = [];
124
+ let groupedCount = 0;
125
+ for (const line of lines) {
126
+ const match = line.match(ERROR_RE);
127
+ if (match) {
128
+ const prefix = match[1].trim();
129
+ const msg = match[2].trim();
130
+ const key = `${prefix}|${msg}`;
131
+ const existing = errorGroups.get(key);
132
+ if (existing) {
133
+ existing.count++;
134
+ if (match[3])
135
+ existing.locations.push(match[3]);
136
+ groupedCount++;
137
+ continue;
138
+ }
139
+ errorGroups.set(key, {
140
+ message: `${prefix} ${msg}`,
141
+ locations: match[3] ? [match[3]] : [],
142
+ count: 1,
143
+ });
144
+ groupedCount++;
145
+ continue;
146
+ }
147
+ resultLines.push(line);
148
+ }
149
+ // Only apply grouping if it actually reduces output
150
+ if (groupedCount < 4 || errorGroups.size === groupedCount)
151
+ return output;
152
+ const grouped = [];
153
+ for (const [, group] of errorGroups) {
154
+ if (group.count === 1) {
155
+ grouped.push(group.message + (group.locations.length ? ` at line ${group.locations[0]}` : ""));
156
+ }
157
+ else {
158
+ let line = `${group.message} (×${group.count})`;
159
+ if (group.locations.length > 0) {
160
+ line += ` [lines: ${group.locations.join(", ")}]`;
161
+ }
162
+ grouped.push(line);
163
+ }
164
+ }
165
+ if (grouped.length > 0) {
166
+ resultLines.push("");
167
+ resultLines.push(`── Grouped errors/warnings (${groupedCount} → ${errorGroups.size}) ──`);
168
+ resultLines.push(...grouped);
169
+ }
170
+ return resultLines.join("\n");
171
+ }
75
172
  /**
76
173
  * Smart truncation: keep 60% head + 40% tail, snapping to line boundaries.
77
174
  */
@@ -106,10 +203,11 @@ function smartTruncate(output, maxBytes) {
106
203
  const tailLines = lines.slice(tailStart);
107
204
  const truncatedLines = lines.length - headEnd - (lines.length - tailStart);
108
205
  const truncatedBytes = Buffer.byteLength(output) - headBytes - tailBytes;
109
- const separator = `\n... [${truncatedLines} lines / ${formatSize(truncatedBytes)} truncated — showing first ${headEnd} + last ${lines.length - tailStart} lines] ...\n`;
206
+ const separator = `\n... [${truncatedLines} lines / ${formatBytes(truncatedBytes)} truncated — showing first ${headEnd} + last ${lines.length - tailStart} lines] ...\n`;
110
207
  return headLines.join("\n") + separator + tailLines.join("\n");
111
208
  }
112
- function formatSize(bytes) {
209
+ export { deduplicateLines, groupErrorLines };
210
+ export function formatBytes(bytes) {
113
211
  if (bytes < 1024)
114
212
  return `${bytes}B`;
115
213
  if (bytes < 1024 * 1024)
@@ -185,7 +283,7 @@ export class SubprocessExecutor {
185
283
  }
186
284
  finally {
187
285
  // Defer cleanup slightly so runtime (especially Bun) fully exits
188
- setTimeout(() => this.cleanupTempDir(tmpDir), 100);
286
+ setTimeout(() => this.cleanupTempDir(tmpDir), 100).unref();
189
287
  }
190
288
  }
191
289
  /**
@@ -212,11 +310,12 @@ export class SubprocessExecutor {
212
310
  spawnAndCapture(cmd, args, cwd, timeout, maxOutput, useShell) {
213
311
  return new Promise((resolve) => {
214
312
  const hardCap = this.config.hardCapBytes;
215
- let stdoutBuf = Buffer.alloc(0);
216
- let stderrBuf = Buffer.alloc(0);
313
+ const stdoutChunks = [];
314
+ const stderrChunks = [];
217
315
  let totalBytes = 0;
218
316
  let killed = false;
219
317
  let networkBytes;
318
+ let resolved = false;
220
319
  const proc = spawn(cmd, args, {
221
320
  cwd,
222
321
  env: { ...this.env, TMPDIR: cwd },
@@ -233,7 +332,7 @@ export class SubprocessExecutor {
233
332
  killProcessTree(proc.pid);
234
333
  return;
235
334
  }
236
- stdoutBuf = Buffer.concat([stdoutBuf, chunk]);
335
+ stdoutChunks.push(chunk);
237
336
  });
238
337
  proc.stderr?.on("data", (chunk) => {
239
338
  totalBytes += chunk.length;
@@ -243,14 +342,27 @@ export class SubprocessExecutor {
243
342
  killProcessTree(proc.pid);
244
343
  return;
245
344
  }
246
- stderrBuf = Buffer.concat([stderrBuf, chunk]);
345
+ stderrChunks.push(chunk);
247
346
  });
248
347
  proc.on("error", (err) => {
249
348
  debug("Process error:", err.message);
349
+ if (!resolved) {
350
+ resolved = true;
351
+ resolve({
352
+ stdout: "",
353
+ stderr: err.message,
354
+ exitCode: 1,
355
+ truncated: false,
356
+ killed: false,
357
+ });
358
+ }
250
359
  });
251
360
  proc.on("close", (code) => {
252
- let stdout = stdoutBuf.toString("utf-8");
253
- let stderr = stderrBuf.toString("utf-8");
361
+ if (resolved)
362
+ return;
363
+ resolved = true;
364
+ let stdout = Buffer.concat(stdoutChunks).toString("utf-8");
365
+ let stderr = Buffer.concat(stderrChunks).toString("utf-8");
254
366
  // Extract network bytes from JS/TS stderr marker
255
367
  const netMatch = stderr.match(/__CM_NET__:(\d+)/);
256
368
  if (netMatch) {
@@ -258,8 +370,11 @@ export class SubprocessExecutor {
258
370
  stderr = stderr.replace(/__CM_NET__:\d+\n?/, "");
259
371
  }
260
372
  if (killed) {
261
- stdout += `\n[output capped at ${formatSize(hardCap)} — process killed]`;
373
+ stdout += `\n[output capped at ${formatBytes(hardCap)} — process killed]`;
262
374
  }
375
+ // Post-process: dedup repeated lines + group similar errors
376
+ stdout = deduplicateLines(stdout);
377
+ stdout = groupErrorLines(stdout);
263
378
  const truncated = Buffer.byteLength(stdout) > maxOutput;
264
379
  if (truncated) {
265
380
  stdout = smartTruncate(stdout, maxOutput);
@@ -293,7 +408,7 @@ export class SubprocessExecutor {
293
408
  * Wrap JS/TS code with fetch interceptor for network tracking.
294
409
  */
295
410
  function wrapWithNetworkTracking(code) {
296
- const preamble = "let __cm_net=0;const __cm_f=globalThis.fetch;if(__cm_f){globalThis.fetch=async(...a)=>{const r=await __cm_f(...a);try{const cl=r.clone();const b=await cl.arrayBuffer();__cm_net+=b.byteLength}catch{}return r};}";
411
+ const preamble = "let __cm_net=0;const __cm_f=globalThis.fetch;if(__cm_f){globalThis.fetch=async(...a)=>{const r=await __cm_f(...a);try{const cl=r.headers.get('content-length');if(cl){__cm_net+=parseInt(cl,10)}else{const b=await r.clone().arrayBuffer();__cm_net+=b.byteLength}}catch{}return r};}";
297
412
  const epilogue = `\nprocess.stderr.write('__CM_NET__:'+__cm_net+'\\n');`;
298
413
  // Wrap in async IIFE
299
414
  return `${preamble}\nasync function __cm_main(){${code}}\n__cm_main().then(()=>{${epilogue}}).catch(e=>{console.error(e);${epilogue}process.exit(1)});`;
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}