squeez 1.7.5 → 1.7.7

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/CHANGELOG.md CHANGED
@@ -9,6 +9,37 @@ conventional commit messages on `main`.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [1.7.6] - 2026-04-21
13
+
14
+ ### Changed
15
+ - chore(release): bump version to 1.7.6 [squeez-release-bot]
16
+ - docs: update changelog and benchmarks for v1.7.5
17
+ - chore(release): bump version to 1.7.5 [squeez-release-bot]
18
+ - docs: update changelog and benchmarks for v1.7.4
19
+ - chore(release): bump version to 1.7.4 [squeez-release-bot]
20
+ - perf: O(log n) refactor — tail read, offset index, single-pass parser
21
+ - docs: update changelog and benchmarks for v1.7.3
22
+ - chore(release): bump version to 1.7.3 [squeez-release-bot]
23
+
24
+ ### Fixed
25
+ - fix(hosts): preserve user settings.json when existing JSON fails to parse (#83)
26
+ - prevent OOM from unbounded file reads + data integrity fixes
27
+ - fix(ci): use native ubuntu-24.04-arm runner for aarch64 build
28
+
29
+ ## [1.7.5] - 2026-04-19
30
+
31
+ ### Changed
32
+ - chore(release): bump version to 1.7.5 [squeez-release-bot]
33
+ - docs: update changelog and benchmarks for v1.7.4
34
+ - chore(release): bump version to 1.7.4 [squeez-release-bot]
35
+ - perf: O(log n) refactor — tail read, offset index, single-pass parser
36
+ - docs: update changelog and benchmarks for v1.7.3
37
+ - chore(release): bump version to 1.7.3 [squeez-release-bot]
38
+
39
+ ### Fixed
40
+ - prevent OOM from unbounded file reads + data integrity fixes
41
+ - fix(ci): use native ubuntu-24.04-arm runner for aarch64 build
42
+
12
43
  ## [1.7.4] - 2026-04-19
13
44
 
14
45
  ### Changed
@@ -47,10 +78,12 @@ conventional commit messages on `main`.
47
78
  ## [1.5.1] and earlier
48
79
  See the [git tag history](https://github.com/claudioemmanuel/squeez/tags) for pre-1.5.2 details. release-please takes over changelog generation from 1.7.1 onwards.
49
80
 
50
- [Unreleased]: https://github.com/claudioemmanuel/squeez/compare/v1.7.4...HEAD
81
+ [Unreleased]: https://github.com/claudioemmanuel/squeez/compare/v1.7.6...HEAD
51
82
  [1.7.0]: https://github.com/claudioemmanuel/squeez/compare/v1.6.1...v1.7.0
52
83
  [1.6.1]: https://github.com/claudioemmanuel/squeez/compare/v1.6.0...v1.6.1
53
84
  [1.6.0]: https://github.com/claudioemmanuel/squeez/compare/v1.5.2...v1.6.0
54
85
  [1.5.2]: https://github.com/claudioemmanuel/squeez/releases/tag/v1.5.2
55
86
  [1.7.3]: https://github.com/claudioemmanuel/squeez/compare/v1.7.2...v1.7.3
56
87
  [1.7.4]: https://github.com/claudioemmanuel/squeez/compare/v1.7.2...v1.7.4
88
+ [1.7.5]: https://github.com/claudioemmanuel/squeez/compare/v1.7.2...v1.7.5
89
+ [1.7.6]: https://github.com/claudioemmanuel/squeez/compare/v1.7.2...v1.7.6
package/README.md CHANGED
@@ -119,29 +119,29 @@ Measured on macOS (Apple Silicon). Token count = `chars / 4` (matches Claude's ~
119
119
 
120
120
  | Scenario | Before | After | Reduction | Latency |
121
121
  |----------|--------|-------|-----------|---------|
122
- | `summarize_huge` | 82,257 tk | 420 tk | **-99%** | 54.5 ms |
123
- | `repetitive_output` | 4,692 tk | 37 tk | **-99%** | 165 µs |
124
- | `high_context_adaptive` | 4,418 tk | 52 tk | **-99%** | 666 µs |
125
- | `ps_aux` | 40,373 tk | 2,352 tk | **-94%** | 2.3 ms |
126
- | `git_log_200` | 2,692 tk | 289 tk | **-89%** | 170 µs |
127
- | `tsc_errors` | 731 tk | 101 tk | **-86%** | 23 µs |
128
- | `cargo_build_noisy` | 2,106 tk | 452 tk | **-79%** | 225 µs |
129
- | `docker_logs` | 665 tk | 186 tk | **-72%** | 36 µs |
130
- | `find_deep` | 424 tk | 134 tk | **-68%** | 70 µs |
131
- | `git_status` | 50 tk | 16 tk | **-68%** | 9 µs |
132
- | `state_first_simulation` | 182 tk | 69 tk | **-62%** | 10 µs |
133
- | `verbose_app_log` | 4,957 tk | 1,991 tk | **-60%** | 257 µs |
134
- | `npm_install` | 524 tk | 232 tk | **-56%** | 37 µs |
135
- | `claude_md_overhead` | 717 tk | 318 tk | **-56%** | 335 µs |
122
+ | `summarize_huge` | 82,257 tk | 420 tk | **-99%** | 55.3 ms |
123
+ | `repetitive_output` | 4,692 tk | 37 tk | **-99%** | 194 µs |
124
+ | `high_context_adaptive` | 4,418 tk | 52 tk | **-99%** | 764 µs |
125
+ | `ps_aux` | 40,373 tk | 2,352 tk | **-94%** | 2.2 ms |
126
+ | `git_log_200` | 2,692 tk | 289 tk | **-89%** | 166 µs |
127
+ | `tsc_errors` | 731 tk | 101 tk | **-86%** | 27 µs |
128
+ | `cargo_build_noisy` | 2,106 tk | 452 tk | **-79%** | 229 µs |
129
+ | `docker_logs` | 665 tk | 186 tk | **-72%** | 39 µs |
130
+ | `find_deep` | 424 tk | 134 tk | **-68%** | 72 µs |
131
+ | `git_status` | 50 tk | 16 tk | **-68%** | 10 µs |
132
+ | `state_first_simulation` | 182 tk | 69 tk | **-62%** | 14 µs |
133
+ | `verbose_app_log` | 4,957 tk | 1,991 tk | **-60%** | 231 µs |
134
+ | `npm_install` | 524 tk | 232 tk | **-56%** | 38 µs |
135
+ | `claude_md_overhead` | 717 tk | 318 tk | **-56%** | 209 µs |
136
136
  | `crosscall_redundancy_3x` | 486 tk | 241 tk | **-50%** | 51.2 ms |
137
- | `ls_la` | 1,782 tk | 886 tk | **-50%** | 185 µs |
138
- | `env_dump` | 441 tk | 287 tk | **-35%** | 22 µs |
139
- | `git_copilot` | 640 tk | 421 tk | **-34%** | 88 µs |
140
- | `agent_heavy` | 2,306 tk | 1,564 tk | **-32%** | 336 µs |
141
- | `md_prose` | 187 tk | 138 tk | **-26%** | 549 µs |
142
- | `md_claude_md` | 316 tk | 247 tk | **-22%** | 1.0 ms |
143
- | `git_diff` | 502 tk | 497 tk | **-1%** | 33 µs |
144
- | `kubectl_pods` | 1,513 tk | 1,513 tk | **-0%** | 21 µs |
137
+ | `ls_la` | 1,782 tk | 886 tk | **-50%** | 163 µs |
138
+ | `env_dump` | 441 tk | 287 tk | **-35%** | 19 µs |
139
+ | `git_copilot` | 640 tk | 421 tk | **-34%** | 87 µs |
140
+ | `agent_heavy` | 2,306 tk | 1,564 tk | **-32%** | 320 µs |
141
+ | `md_prose` | 187 tk | 138 tk | **-26%** | 564 µs |
142
+ | `md_claude_md` | 316 tk | 247 tk | **-22%** | 919 µs |
143
+ | `git_diff` | 502 tk | 497 tk | **-1%** | 35 µs |
144
+ | `kubectl_pods` | 1,513 tk | 1,513 tk | **-0%** | 25 µs |
145
145
 
146
146
  ### Aggregate
147
147
 
package/install.js CHANGED
@@ -111,11 +111,28 @@ async function main() {
111
111
  function registerHooks() {
112
112
  const settingsPath = path.join(os.homedir(), '.claude', 'settings.json');
113
113
  let settings = {};
114
- try {
115
- if (fs.existsSync(settingsPath)) {
116
- settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
114
+ const fileExisted = fs.existsSync(settingsPath);
115
+ if (fileExisted) {
116
+ let raw;
117
+ try {
118
+ raw = fs.readFileSync(settingsPath, 'utf8');
119
+ if (raw.charCodeAt(0) === 0xFEFF) raw = raw.slice(1); // strip BOM
120
+ } catch (err) {
121
+ warn(`could not read ${settingsPath}: ${err.message} — skipping hook registration.`);
122
+ return;
117
123
  }
118
- } catch (_) {}
124
+ try {
125
+ settings = JSON.parse(raw);
126
+ } catch (err) {
127
+ warn(`refusing to overwrite ${settingsPath}: could not parse existing JSON (${err.message}).`);
128
+ warn(`fix or remove the file, then re-run: squeez setup`);
129
+ return;
130
+ }
131
+ if (typeof settings !== 'object' || settings === null || Array.isArray(settings)) {
132
+ warn(`refusing to overwrite ${settingsPath}: top-level value is not a JSON object.`);
133
+ return;
134
+ }
135
+ }
119
136
 
120
137
  let changed = false;
121
138
 
@@ -153,6 +170,9 @@ function registerHooks() {
153
170
 
154
171
  if (changed) {
155
172
  try {
173
+ if (fileExisted) {
174
+ try { fs.copyFileSync(settingsPath, settingsPath + '.bak'); } catch (_) {}
175
+ }
156
176
  fs.writeFileSync(settingsPath + '.tmp', JSON.stringify(settings, null, 2));
157
177
  fs.renameSync(settingsPath + '.tmp', settingsPath);
158
178
  log('Claude Code hooks registered.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "squeez",
3
- "version": "1.7.5",
3
+ "version": "1.7.7",
4
4
  "description": "Hook-based token compressor for Claude Code, Copilot CLI, and OpenCode. Compresses bash output up to 95%, collapses redundant calls, injects caveman persona.",
5
5
  "keywords": [
6
6
  "claude-code",