context-compress 2026.5.0 → 2026.7.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/.claude-plugin/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +12 -0
- package/.codex-plugin/plugin.json +40 -0
- package/.mcp.json +11 -0
- package/README.md +43 -12
- package/dist/bench/quality.d.ts +46 -0
- package/dist/bench/quality.d.ts.map +1 -0
- package/dist/bench/quality.js +118 -0
- package/dist/bench/quality.js.map +1 -0
- package/dist/bench/run.d.ts +2 -0
- package/dist/bench/run.d.ts.map +1 -0
- package/dist/bench/run.js +4 -0
- package/dist/bench/run.js.map +1 -0
- package/dist/cli/filter.d.ts.map +1 -1
- package/dist/cli/filter.js +13 -1
- package/dist/cli/filter.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +4 -2
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -0
- package/dist/config.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +32 -8
- package/dist/executor.js.map +1 -1
- package/dist/format-filter.d.ts +63 -0
- package/dist/format-filter.d.ts.map +1 -0
- package/dist/format-filter.js +331 -0
- package/dist/format-filter.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +14 -1
- package/dist/logger.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +37 -20
- package/dist/runtime/index.js.map +1 -1
- package/dist/server.bundle.mjs +479 -110
- package/dist/server.bundle.mjs.map +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/stats.d.ts.map +1 -1
- package/dist/stats.js +19 -1
- 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 +20 -2
- package/dist/store.js.map +1 -1
- package/dist/tools/batch-execute.d.ts.map +1 -1
- package/dist/tools/batch-execute.js +20 -2
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/util/auto-mode.d.ts +8 -0
- package/dist/util/auto-mode.d.ts.map +1 -1
- package/dist/util/auto-mode.js +40 -26
- package/dist/util/auto-mode.js.map +1 -1
- package/dist/util/fetch-code.d.ts.map +1 -1
- package/dist/util/fetch-code.js +2 -48
- package/dist/util/fetch-code.js.map +1 -1
- package/dist/util/html-to-markdown.d.ts +17 -0
- package/dist/util/html-to-markdown.d.ts.map +1 -0
- package/dist/util/html-to-markdown.js +66 -0
- package/dist/util/html-to-markdown.js.map +1 -0
- package/dist/util/intent-filter.d.ts +12 -3
- package/dist/util/intent-filter.d.ts.map +1 -1
- package/dist/util/intent-filter.js +61 -8
- package/dist/util/intent-filter.js.map +1 -1
- package/dist/util/regret.d.ts +54 -0
- package/dist/util/regret.d.ts.map +1 -0
- package/dist/util/regret.js +107 -0
- package/dist/util/regret.js.map +1 -0
- package/docs/agentic-benchmark.md +110 -0
- package/docs/quality-regression-report.md +20 -0
- package/hooks/claude-codex-hooks.json +19 -0
- package/package.json +9 -5
- package/skills/context-compress-audit/SKILL.md +49 -0
- package/skills/context-compress-audit/agents/openai.yaml +13 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "context-compress",
|
|
4
|
+
"description": "MCP server and hook toolkit that keeps large tool output searchable instead of dumping it into context.",
|
|
5
|
+
"owner": {
|
|
6
|
+
"name": "Open330",
|
|
7
|
+
"url": "https://github.com/Open330"
|
|
8
|
+
},
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "context-compress",
|
|
12
|
+
"description": "Compress Bash, Read, WebFetch, logs, tests, and API output before it reaches the context window.",
|
|
13
|
+
"source": "./",
|
|
14
|
+
"category": "productivity"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "context-compress",
|
|
3
|
+
"version": "2026.7.0",
|
|
4
|
+
"description": "Keep large tool output searchable without flooding the agent context window.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Open330",
|
|
7
|
+
"url": "https://github.com/Open330"
|
|
8
|
+
},
|
|
9
|
+
"skills": "./skills/",
|
|
10
|
+
"hooks": "./hooks/claude-codex-hooks.json",
|
|
11
|
+
"mcpServers": "./.mcp.json"
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "context-compress",
|
|
3
|
+
"version": "2026.7.0",
|
|
4
|
+
"description": "Keep large tool output searchable without flooding the agent context window.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Open330",
|
|
7
|
+
"url": "https://github.com/Open330"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Open330/context-compress",
|
|
10
|
+
"repository": "https://github.com/Open330/context-compress",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"mcp",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"context-window",
|
|
16
|
+
"token-optimization",
|
|
17
|
+
"developer-tools"
|
|
18
|
+
],
|
|
19
|
+
"skills": "./skills/",
|
|
20
|
+
"mcpServers": "./.mcp.json",
|
|
21
|
+
"interface": {
|
|
22
|
+
"displayName": "Context Compress",
|
|
23
|
+
"shortDescription": "Compress tool output before it enters context.",
|
|
24
|
+
"longDescription": "Run commands, fetch pages, index large outputs, and search the retained data through an MCP server so agents see concise answers instead of raw logs.",
|
|
25
|
+
"developerName": "Open330",
|
|
26
|
+
"category": "Productivity",
|
|
27
|
+
"capabilities": [
|
|
28
|
+
"MCP",
|
|
29
|
+
"Skills",
|
|
30
|
+
"Token optimization"
|
|
31
|
+
],
|
|
32
|
+
"websiteURL": "https://github.com/Open330/context-compress",
|
|
33
|
+
"brandColor": "#2563EB",
|
|
34
|
+
"defaultPrompt": [
|
|
35
|
+
"Run tests through context-compress and summarize failures.",
|
|
36
|
+
"Index this large output and search it for root causes.",
|
|
37
|
+
"Audit this session for raw tool output waste."
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
package/.mcp.json
ADDED
package/README.md
CHANGED
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
# context-compress
|
|
4
4
|
|
|
5
5
|
**Stop drowning your AI agent in shell output.**
|
|
6
|
-
|
|
6
|
+
Large tool output stays searchable — not stuffed into the context window.
|
|
7
|
+
Use it through an MCP server, a drop-in CLI, agent plugins, or all three.
|
|
7
8
|
|
|
8
9
|
[](https://github.com/Open330/context-compress/actions/workflows/ci.yml)
|
|
9
10
|
[](https://www.npmjs.com/package/context-compress)
|
|
10
11
|
[](https://nodejs.org)
|
|
11
12
|
[](LICENSE)
|
|
12
13
|
[](tsconfig.json)
|
|
13
|
-
[](#contributing)
|
|
14
15
|
|
|
15
|
-
[Quickstart](#quickstart) · [Compression Modes](#compression-modes) · [vs RTK](#head-to-head-with-rtk) · [How It Works](#how-it-works) · [Configuration](#configuration) · [CLI](#cli) · [Changelog](CHANGELOG.md)
|
|
16
|
+
[Quickstart](#quickstart) · [Plugin Support](#plugin-support) · [Compression Modes](#compression-modes) · [vs RTK](#head-to-head-with-rtk) · [How It Works](#how-it-works) · [Configuration](#configuration) · [CLI](#cli) · [Changelog](CHANGELOG.md)
|
|
16
17
|
|
|
17
18
|
</div>
|
|
18
19
|
|
|
@@ -27,9 +28,9 @@ Compress tool output before it hits the context window — through an MCP server
|
|
|
27
28
|
</td>
|
|
28
29
|
<td align="center" width="25%">
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
<br>
|
|
32
|
-
<br><sub>
|
|
31
|
+
**Searchable**
|
|
32
|
+
<br>raw data retained
|
|
33
|
+
<br><sub>FTS5 + BM25</sub>
|
|
33
34
|
|
|
34
35
|
</td>
|
|
35
36
|
<td align="center" width="25%">
|
|
@@ -41,9 +42,9 @@ Compress tool output before it hits the context window — through an MCP server
|
|
|
41
42
|
</td>
|
|
42
43
|
<td align="center" width="25%">
|
|
43
44
|
|
|
44
|
-
**
|
|
45
|
-
<br
|
|
46
|
-
<br><sub>
|
|
45
|
+
**Plugins**
|
|
46
|
+
<br>Codex + Claude
|
|
47
|
+
<br><sub>MCP • hooks • skills</sub>
|
|
47
48
|
|
|
48
49
|
</td>
|
|
49
50
|
</tr>
|
|
@@ -121,6 +122,18 @@ It works in two modes that compose freely:
|
|
|
121
122
|
npm install -g context-compress
|
|
122
123
|
```
|
|
123
124
|
|
|
125
|
+
### Plugin Support
|
|
126
|
+
|
|
127
|
+
context-compress now ships plugin metadata for agent hosts:
|
|
128
|
+
|
|
129
|
+
| Host | Files | What they enable |
|
|
130
|
+
|:--|:--|:--|
|
|
131
|
+
| **Codex** | `.codex-plugin/plugin.json`, `.mcp.json`, `skills/` | MCP server registration plus skills in plugin-aware Codex flows. |
|
|
132
|
+
| **Claude Code** | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `hooks/claude-codex-hooks.json` | PreToolUse routing, skills, and MCP config from a plugin install. |
|
|
133
|
+
| **Manual / fallback** | `context-compress setup --auto` | Writes `~/.claude/settings.json` directly when plugin installation is not available. |
|
|
134
|
+
|
|
135
|
+
The plugin manifests are designed for built package/archive installs where `dist/`, `hooks/`, and `skills/` are present together. For a raw source checkout, run `npm install && npm run build` before testing the plugin locally, or use the global npm setup above.
|
|
136
|
+
|
|
124
137
|
### One-line setup
|
|
125
138
|
|
|
126
139
|
```bash
|
|
@@ -225,6 +238,20 @@ export CONTEXT_COMPRESS_MODE=aggressive
|
|
|
225
238
|
|
|
226
239
|
The PreToolUse hook also forwards `CONTEXT_COMPRESS_MODE` automatically when wrapping Bash commands, so agents transparently get whatever mode you've configured.
|
|
227
240
|
|
|
241
|
+
### Beyond mode selection
|
|
242
|
+
|
|
243
|
+
Three capabilities layer on top of the modes above. All are grounded in the 2026 agent-compression literature, whose central finding is that *token-level* extractive compression (LLMLingua-2, Selective Context) breaks agents by destroying action grammar — so context-compress only ever operates on **whole structural units**, never partial tokens.
|
|
244
|
+
|
|
245
|
+
- **Format-aware compression** — when no command-specific filter matches, output is compressed by its *shape*. Pretty-printed JSON is minified losslessly (balanced) or collapsed to a schema + sample (aggressive); NDJSON folds into per-shape summaries; repetitive logs fold into `template ×count` via variable masking (Drain-style). Error/warning lines are always kept verbatim, and balanced-mode JSON stays parseable. Typical wins: JSON −41% (still valid) to −96%, logs −98%.
|
|
246
|
+
- **Intent-conditioned summaries** — pass `intent` to `execute` and large output is indexed, then the top query-ranked sections are inlined up to a byte budget (`CONTEXT_COMPRESS_INTENT_BUDGET_BYTES`, default 1800) instead of only listing section titles — fewer follow-up `search()` round-trips. Error lines are surfaced as a safety net.
|
|
247
|
+
- **Self-tuning `auto` mode (ACON-style)** — when a command is compressed aggressively and then re-run fast (≤30s) repeatedly, `auto` records the "regret" and downgrades that command one step to preserve fidelity. Downgrades only ever *reduce* compression, so a false positive costs tokens, never correctness. See the self-tuning table in `stats`.
|
|
248
|
+
|
|
249
|
+
Verify fidelity yourself with the quality-regression benchmark, which measures **survival of task-critical information**, not just token ratio:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
npm run bench:quality # report at docs/quality-regression-report.md
|
|
253
|
+
```
|
|
254
|
+
|
|
228
255
|
### Head-to-head with [RTK](https://github.com/rtk-ai/rtk)
|
|
229
256
|
|
|
230
257
|
Reproduce locally:
|
|
@@ -290,6 +317,8 @@ Without context-compress, 12 operations consume **133% of the 200K context windo
|
|
|
290
317
|
|
|
291
318
|
**[Read the full Token Reduction Report](docs/token-reduction-report.md)** — includes cost analysis, architecture deep-dive, and FAQ on context loss trade-offs.
|
|
292
319
|
|
|
320
|
+
**[Read the Agentic Benchmark Plan](docs/agentic-benchmark.md)** — defines the fair on/off benchmark for real Claude Code sessions, including baseline isolation, task success checks, and reporting limits.
|
|
321
|
+
|
|
293
322
|
---
|
|
294
323
|
|
|
295
324
|
## What Changed from context-mode
|
|
@@ -335,8 +364,8 @@ CONTEXT_COMPRESS_NUDGE_GREP=0
|
|
|
335
364
|
# Compression mode: conservative | balanced (default) | aggressive | auto
|
|
336
365
|
CONTEXT_COMPRESS_MODE=balanced
|
|
337
366
|
|
|
338
|
-
# Auto mode prefers the Anthropic API when
|
|
339
|
-
|
|
367
|
+
# Auto mode prefers the Anthropic API when ANTHROPIC_API_KEY is set
|
|
368
|
+
# in your shell or secret manager (faster than `claude -p` fallback)
|
|
340
369
|
|
|
341
370
|
# RTK-style transparent Bash wrapping (default: off)
|
|
342
371
|
CONTEXT_COMPRESS_FILTER_BASH=1
|
|
@@ -448,7 +477,7 @@ context-compress/
|
|
|
448
477
|
│ ├── doctor.ts # `doctor` — diagnostics
|
|
449
478
|
│ └── uninstall.ts # `uninstall` — clean removal
|
|
450
479
|
├── tests/
|
|
451
|
-
│ ├── unit/ # 18 unit test files
|
|
480
|
+
│ ├── unit/ # 18 unit test files
|
|
452
481
|
│ └── integration/ # 3 integration test files
|
|
453
482
|
├── scripts/
|
|
454
483
|
│ ├── benchmark.ts # Synthetic compression benchmark
|
|
@@ -516,6 +545,8 @@ RTK_BIN=... tsx scripts/benchmark-vs-rtk.ts --auto # also run LLM-judged auto
|
|
|
516
545
|
RTK_BIN=... tsx scripts/benchmark-vs-rtk.ts --json # machine-readable
|
|
517
546
|
```
|
|
518
547
|
|
|
548
|
+
For real agent sessions, use [docs/agentic-benchmark.md](docs/agentic-benchmark.md) to compare baseline, MCP-only, hook-balanced, and hook-aggressive arms with isolated settings.
|
|
549
|
+
|
|
519
550
|
---
|
|
520
551
|
|
|
521
552
|
## License
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quality-regression benchmark.
|
|
3
|
+
*
|
|
4
|
+
* The usual compression metric is "% tokens removed" — but for an agent, the
|
|
5
|
+
* number that actually matters is whether the *task-critical information
|
|
6
|
+
* survived* the compression (cf. ACON / the agent-compression literature, which
|
|
7
|
+
* evaluates end-task success, not token ratio). A compressor that drops 99% of
|
|
8
|
+
* bytes is worthless if it also drops the error message the agent needed.
|
|
9
|
+
*
|
|
10
|
+
* This harness runs a fixed corpus of (command, output, must-contain) cases
|
|
11
|
+
* through the real compression pipeline at every mode and reports two numbers
|
|
12
|
+
* per case: reduction % and survival % (fraction of must-contain assertions still
|
|
13
|
+
* present). It's consumed both by a CLI report (npm run bench:quality) and by a
|
|
14
|
+
* unit test that fails if survival regresses below the per-case floor — so the
|
|
15
|
+
* Phase 1–3 compressors can't silently start eating important output.
|
|
16
|
+
*/
|
|
17
|
+
import type { FilterMode } from "../filters.js";
|
|
18
|
+
export interface BenchCase {
|
|
19
|
+
name: string;
|
|
20
|
+
command: string;
|
|
21
|
+
output: string;
|
|
22
|
+
/** Substrings that MUST survive compression in every mode. */
|
|
23
|
+
mustContain: string[];
|
|
24
|
+
/** If true, balanced-mode output must remain parseable JSON. */
|
|
25
|
+
balancedKeepsValidJson?: boolean;
|
|
26
|
+
/** Minimum acceptable survival ratio (default 1.0 — everything must survive). */
|
|
27
|
+
minSurvival?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface ModeResult {
|
|
30
|
+
mode: FilterMode;
|
|
31
|
+
beforeBytes: number;
|
|
32
|
+
afterBytes: number;
|
|
33
|
+
reduction: number;
|
|
34
|
+
survival: number;
|
|
35
|
+
missing: string[];
|
|
36
|
+
validJson: boolean | null;
|
|
37
|
+
}
|
|
38
|
+
export interface CaseResult {
|
|
39
|
+
name: string;
|
|
40
|
+
modes: ModeResult[];
|
|
41
|
+
}
|
|
42
|
+
export declare const CORPUS: BenchCase[];
|
|
43
|
+
export declare function runCase(c: BenchCase): CaseResult;
|
|
44
|
+
export declare function runQualityBench(corpus?: BenchCase[]): CaseResult[];
|
|
45
|
+
export declare function formatBenchReport(results?: CaseResult[]): string;
|
|
46
|
+
//# sourceMappingURL=quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/bench/quality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,gEAAgE;IAChE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,EAAE,CAAC;CACpB;AA6CD,eAAO,MAAM,MAAM,EAAE,SAAS,EA2B7B,CAAC;AAiBF,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAiBhD;AAED,wBAAgB,eAAe,CAAC,MAAM,GAAE,SAAS,EAAW,GAAG,UAAU,EAAE,CAE1E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,UAAU,EAAsB,GAAG,MAAM,CAanF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quality-regression benchmark.
|
|
3
|
+
*
|
|
4
|
+
* The usual compression metric is "% tokens removed" — but for an agent, the
|
|
5
|
+
* number that actually matters is whether the *task-critical information
|
|
6
|
+
* survived* the compression (cf. ACON / the agent-compression literature, which
|
|
7
|
+
* evaluates end-task success, not token ratio). A compressor that drops 99% of
|
|
8
|
+
* bytes is worthless if it also drops the error message the agent needed.
|
|
9
|
+
*
|
|
10
|
+
* This harness runs a fixed corpus of (command, output, must-contain) cases
|
|
11
|
+
* through the real compression pipeline at every mode and reports two numbers
|
|
12
|
+
* per case: reduction % and survival % (fraction of must-contain assertions still
|
|
13
|
+
* present). It's consumed both by a CLI report (npm run bench:quality) and by a
|
|
14
|
+
* unit test that fails if survival regresses below the per-case floor — so the
|
|
15
|
+
* Phase 1–3 compressors can't silently start eating important output.
|
|
16
|
+
*/
|
|
17
|
+
import { compressOutput } from "../cli/filter.js";
|
|
18
|
+
const MODES = ["conservative", "balanced", "aggressive"];
|
|
19
|
+
function jsonBlob() {
|
|
20
|
+
return JSON.stringify({
|
|
21
|
+
status: "ok",
|
|
22
|
+
total: 128,
|
|
23
|
+
users: Array.from({ length: 60 }, (_, i) => ({
|
|
24
|
+
id: i,
|
|
25
|
+
name: `user_${i}`,
|
|
26
|
+
email: `user${i}@example.com`,
|
|
27
|
+
role: i === 0 ? "admin" : "member",
|
|
28
|
+
})),
|
|
29
|
+
}, null, 2);
|
|
30
|
+
}
|
|
31
|
+
function ndjsonBlob() {
|
|
32
|
+
return Array.from({ length: 40 }, (_, i) => JSON.stringify({ ts: 1_700_000_000 + i, level: "info", msg: "req", path: `/api/${i}` })).join("\n");
|
|
33
|
+
}
|
|
34
|
+
function logBlob() {
|
|
35
|
+
const lines = Array.from({ length: 200 }, (_, i) => `2026-07-06T10:00:${String(i % 60).padStart(2, "0")}.001Z INFO [http] GET /api/items/${i} 200 in ${i % 40}ms`);
|
|
36
|
+
lines.splice(120, 0, "2026-07-06T10:02:00.000Z ERROR [db] connection timeout to db-primary:5432");
|
|
37
|
+
return lines.join("\n");
|
|
38
|
+
}
|
|
39
|
+
function gitLogBlob() {
|
|
40
|
+
return Array.from({ length: 25 }, (_, i) => `commit ${"a".repeat(40 - String(i).length)}${i}\nAuthor: Dev <dev@example.com>\nDate: Mon Jul 6 10:0${i % 10}:00 2026\n\n Fix issue number ${i} in the widget renderer\n`).join("\n");
|
|
41
|
+
}
|
|
42
|
+
export const CORPUS = [
|
|
43
|
+
{
|
|
44
|
+
name: "pretty-json (unrecognized cmd)",
|
|
45
|
+
command: "somecli users --json",
|
|
46
|
+
output: jsonBlob(),
|
|
47
|
+
mustContain: ['"role"', "admin", "user_0"],
|
|
48
|
+
balancedKeepsValidJson: true,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "ndjson stream",
|
|
52
|
+
command: "logcli tail --json",
|
|
53
|
+
output: ndjsonBlob(),
|
|
54
|
+
mustContain: ["path", "level"],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "app logs with an error",
|
|
58
|
+
command: "myservice serve -v",
|
|
59
|
+
output: logBlob(),
|
|
60
|
+
mustContain: ["connection timeout to db-primary:5432", "ERROR"],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: "git log",
|
|
64
|
+
command: "git log -25",
|
|
65
|
+
output: gitLogBlob(),
|
|
66
|
+
// Aggressive git log keeps subjects one-per-line; subjects must survive.
|
|
67
|
+
mustContain: ["Fix issue number 0", "Fix issue number 24"],
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
function survival(output, mustContain) {
|
|
71
|
+
if (mustContain.length === 0)
|
|
72
|
+
return { survival: 1, missing: [] };
|
|
73
|
+
const missing = mustContain.filter((s) => !output.includes(s));
|
|
74
|
+
return { survival: (mustContain.length - missing.length) / mustContain.length, missing };
|
|
75
|
+
}
|
|
76
|
+
function isValidJson(s) {
|
|
77
|
+
try {
|
|
78
|
+
JSON.parse(s);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function runCase(c) {
|
|
86
|
+
const beforeBytes = Buffer.byteLength(c.output);
|
|
87
|
+
const modes = MODES.map((mode) => {
|
|
88
|
+
const out = compressOutput(c.output, c.command, mode);
|
|
89
|
+
const afterBytes = Buffer.byteLength(out);
|
|
90
|
+
const { survival: s, missing } = survival(out, c.mustContain);
|
|
91
|
+
return {
|
|
92
|
+
mode,
|
|
93
|
+
beforeBytes,
|
|
94
|
+
afterBytes,
|
|
95
|
+
reduction: beforeBytes > 0 ? 1 - afterBytes / beforeBytes : 0,
|
|
96
|
+
survival: s,
|
|
97
|
+
missing,
|
|
98
|
+
validJson: c.balancedKeepsValidJson && mode === "balanced" ? isValidJson(out) : null,
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
return { name: c.name, modes };
|
|
102
|
+
}
|
|
103
|
+
export function runQualityBench(corpus = CORPUS) {
|
|
104
|
+
return corpus.map(runCase);
|
|
105
|
+
}
|
|
106
|
+
export function formatBenchReport(results = runQualityBench()) {
|
|
107
|
+
const lines = ["# Quality-Regression Benchmark", ""];
|
|
108
|
+
lines.push("| Case | Mode | Reduction | Survival | Valid JSON |");
|
|
109
|
+
lines.push("|------|------|-----------|----------|------------|");
|
|
110
|
+
for (const r of results) {
|
|
111
|
+
for (const m of r.modes) {
|
|
112
|
+
const vj = m.validJson === null ? "—" : m.validJson ? "✓" : "✗";
|
|
113
|
+
lines.push(`| ${r.name} | ${m.mode} | ${(m.reduction * 100).toFixed(0)}% | ${(m.survival * 100).toFixed(0)}% | ${vj} |`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return lines.join("\n");
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/bench/quality.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/bench/run.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/bench/run.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,EAAE,IAAI,CAAC,CAAC"}
|
package/dist/cli/filter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/cli/filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,aAAa,EAGlB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/cli/filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,UAAU,EACf,KAAK,aAAa,EAGlB,MAAM,eAAe,CAAC;AAWvB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,GAAE,UAAyB,GAC7B,MAAM,CA4BR;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,GAAE,aAA4B,GAChC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAU5E;AAoBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C7D"}
|
package/dist/cli/filter.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { deduplicateLines, groupErrorLines, stripAnsi, stripProgressLines } from "../executor.js";
|
|
3
3
|
import { DEFAULT_MODE, applyCommandFilter, parseRequestedMode, } from "../filters.js";
|
|
4
|
+
import { applyFormatFilter } from "../format-filter.js";
|
|
4
5
|
import { pickModeAuto } from "../util/auto-mode.js";
|
|
5
6
|
import { StreamCompressor } from "../util/stream-compress.js";
|
|
6
7
|
// Generic dedup/progress/group pipeline kicks in once output crosses these
|
|
@@ -28,10 +29,21 @@ export function compressOutput(stdout, originalCmd, mode = DEFAULT_MODE) {
|
|
|
28
29
|
let out = stripAnsi(stdout);
|
|
29
30
|
if (mode === "conservative")
|
|
30
31
|
return out;
|
|
32
|
+
let commandFiltered = false;
|
|
31
33
|
if (originalCmd) {
|
|
32
34
|
const filtered = applyCommandFilter(originalCmd, out, mode);
|
|
33
|
-
if (filtered.filtered)
|
|
35
|
+
if (filtered.filtered) {
|
|
34
36
|
out = filtered.output;
|
|
37
|
+
commandFiltered = true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Format-aware fallback: when no command-specific filter matched, compress by
|
|
41
|
+
// the *shape* of the output (JSON minify/collapse, log template folding).
|
|
42
|
+
// This catches the long tail of unrecognized commands emitting structured data.
|
|
43
|
+
if (!commandFiltered) {
|
|
44
|
+
const fmt = applyFormatFilter(out, mode);
|
|
45
|
+
if (fmt.filtered)
|
|
46
|
+
out = fmt.output;
|
|
35
47
|
}
|
|
36
48
|
const threshold = mode === "aggressive" ? AGGRESSIVE_DEDUP_THRESHOLD : BALANCED_DEDUP_THRESHOLD;
|
|
37
49
|
if (out.length > threshold) {
|
package/dist/cli/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/cli/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EACN,YAAY,EAGZ,kBAAkB,EAClB,kBAAkB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,2EAA2E;AAC3E,wEAAwE;AACxE,gFAAgF;AAChF,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC7B,MAAc,EACd,WAAoB,EACpB,OAAmB,YAAY;IAE/B,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,GAAG,CAAC;IAExC,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/cli/filter.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAoG/C"}
|
package/dist/cli/uninstall.js
CHANGED
|
@@ -38,7 +38,8 @@ export async function uninstall() {
|
|
|
38
38
|
const settings = JSON.parse(readFileSync(mcpPath, "utf-8"));
|
|
39
39
|
const mcpServers = settings.mcpServers;
|
|
40
40
|
if (mcpServers && "context-compress" in mcpServers) {
|
|
41
|
-
|
|
41
|
+
// biome-ignore lint/performance/noDelete: must remove the key, not set it to null
|
|
42
|
+
delete mcpServers["context-compress"];
|
|
42
43
|
writeFileSync(mcpPath, `${JSON.stringify(settings, null, 2)}\n`, "utf-8");
|
|
43
44
|
changes.push("Removed context-compress MCP server from settings");
|
|
44
45
|
}
|
|
@@ -53,7 +54,8 @@ export async function uninstall() {
|
|
|
53
54
|
const mcp = JSON.parse(readFileSync(mcpJson, "utf-8"));
|
|
54
55
|
const servers = mcp.mcpServers;
|
|
55
56
|
if (servers && "context-compress" in servers) {
|
|
56
|
-
|
|
57
|
+
// biome-ignore lint/performance/noDelete: must remove the key, not set it to null
|
|
58
|
+
delete servers["context-compress"];
|
|
57
59
|
writeFileSync(mcpJson, `${JSON.stringify(mcp, null, 2)}\n`, "utf-8");
|
|
58
60
|
changes.push("Removed context-compress from .mcp.json");
|
|
59
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,SAAS;IAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA8C,CAAC;QACtE,IAAI,KAAK,EAAE,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YACvC,KAAK,CAAC,UAAU,GAAI,KAAK,CAAC,UAA6C,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAgD,CAAC;gBAC1E,OAAO,CAAC,UAAU,EAAE,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CACvF,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,wEAAwE;gBACxE,OAAO,KAAK,CAAC,UAAU,CAAC;YACzB,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACxE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;gBACvB,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC7D,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IACjE,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAiD,CAAC;QAC9E,IAAI,UAAU,IAAI,kBAAkB,IAAI,UAAU,EAAE,CAAC;YACpD,UAAU,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface Config {
|
|
|
14
14
|
nudgeOnGrep: boolean;
|
|
15
15
|
/** Threshold in bytes to trigger intent-based search filtering */
|
|
16
16
|
intentSearchThreshold: number;
|
|
17
|
+
/** Byte budget for query-ranked content inlined into an intent-filtered summary */
|
|
18
|
+
intentBudgetBytes: number;
|
|
17
19
|
/** Default max output bytes for executor */
|
|
18
20
|
maxOutputBytes: number;
|
|
19
21
|
/** Hard cap in bytes for stream-level output (kills process if exceeded) */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;IACnC,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;
|
|
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,mFAAmF;IACnF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,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;IACnC,gFAAgF;IAChF,SAAS,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAyKD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAkFtD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,iCAAiC;AACjC,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
package/dist/config.js
CHANGED
|
@@ -10,6 +10,7 @@ const DEFAULTS = {
|
|
|
10
10
|
nudgeOnRead: true,
|
|
11
11
|
nudgeOnGrep: true,
|
|
12
12
|
intentSearchThreshold: 5_000,
|
|
13
|
+
intentBudgetBytes: 1_800,
|
|
13
14
|
maxOutputBytes: 102_400,
|
|
14
15
|
hardCapBytes: 100 * 1024 * 1024,
|
|
15
16
|
searchMaxBytes: 40_960,
|
|
@@ -31,6 +32,7 @@ const LEVEL_OVERRIDES = {
|
|
|
31
32
|
batchMaxBytes: 40_960,
|
|
32
33
|
searchLimit: 2,
|
|
33
34
|
intentSearchThreshold: 3_000,
|
|
35
|
+
intentBudgetBytes: 1_000,
|
|
34
36
|
},
|
|
35
37
|
ultra: {
|
|
36
38
|
maxOutputBytes: 25_600,
|
|
@@ -38,6 +40,7 @@ const LEVEL_OVERRIDES = {
|
|
|
38
40
|
batchMaxBytes: 20_480,
|
|
39
41
|
searchLimit: 1,
|
|
40
42
|
intentSearchThreshold: 2_000,
|
|
43
|
+
intentBudgetBytes: 500,
|
|
41
44
|
},
|
|
42
45
|
};
|
|
43
46
|
const ConfigSchema = z.object({
|
|
@@ -48,6 +51,7 @@ const ConfigSchema = z.object({
|
|
|
48
51
|
nudgeOnRead: z.boolean().optional(),
|
|
49
52
|
nudgeOnGrep: z.boolean().optional(),
|
|
50
53
|
intentSearchThreshold: z.number().int().positive().optional(),
|
|
54
|
+
intentBudgetBytes: z.number().int().positive().optional(),
|
|
51
55
|
maxOutputBytes: z.number().int().positive().optional(),
|
|
52
56
|
hardCapBytes: z.number().int().positive().optional(),
|
|
53
57
|
searchMaxBytes: z.number().int().positive().optional(),
|
|
@@ -139,6 +143,9 @@ function loadEnvConfig() {
|
|
|
139
143
|
const intentThreshold = parseIntEnv("CONTEXT_COMPRESS_INTENT_SEARCH_THRESHOLD");
|
|
140
144
|
if (intentThreshold !== undefined)
|
|
141
145
|
partial.intentSearchThreshold = intentThreshold;
|
|
146
|
+
const intentBudget = parseIntEnv("CONTEXT_COMPRESS_INTENT_BUDGET_BYTES");
|
|
147
|
+
if (intentBudget !== undefined)
|
|
148
|
+
partial.intentBudgetBytes = intentBudget;
|
|
142
149
|
const level = process.env.CONTEXT_COMPRESS_LEVEL;
|
|
143
150
|
if (level === "normal" || level === "compact" || level === "ultra") {
|
|
144
151
|
partial.compressionLevel = level;
|
|
@@ -180,6 +187,10 @@ export function loadConfig(projectDir) {
|
|
|
180
187
|
console.error(`[context-compress] Config: intentSearchThreshold clamped from ${merged.intentSearchThreshold} to 0`);
|
|
181
188
|
merged.intentSearchThreshold = 0;
|
|
182
189
|
}
|
|
190
|
+
if (merged.intentBudgetBytes < 0) {
|
|
191
|
+
console.error(`[context-compress] Config: intentBudgetBytes clamped from ${merged.intentBudgetBytes} to 0`);
|
|
192
|
+
merged.intentBudgetBytes = 0;
|
|
193
|
+
}
|
|
183
194
|
if (merged.searchLimit < 1) {
|
|
184
195
|
console.error(`[context-compress] Config: searchLimit clamped from ${merged.searchLimit} to 1`);
|
|
185
196
|
merged.searchLimit = 1;
|