cc-cream 0.1.10 → 0.1.12
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 +10 -0
- package/package.json +1 -1
- package/src/install.js +10 -9
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to cc-cream are documented here. Format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.1.12] — 2026-05-29
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- **`/cc-cream:setup` and `/cc-cream:uninstall` are much cheaper to run** (CREAM-qhgyiodh). These are slash commands, so their `.md` body and the installer's stdout both enter the model context (~1k tokens for an uninstall). Trimmed the command bodies to just the bang line — the only essential human hint (“run `/plugin uninstall cc-cream` afterwards”) now lives in the frontmatter `description`, which is menu metadata rather than model-facing body. And `install.js` no longer echoes the full statusLine command JSON: it prints terse confirmations (`Removed cc-cream's statusLine.`, `Setting the cc-cream statusLine.`). The terse summary also survives Claude Code's command-output fold, so the “what was removed / kept” feedback is actually visible. (The bar itself remains zero-token — it's never in the model context; this only concerns the occasional setup/uninstall commands.)
|
|
11
|
+
|
|
12
|
+
## [0.1.11] — 2026-05-29
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- **Status bar could pin to an old version when a non-semver cache dir exists** (CREAM-kxwhbwzq). The plugin-mode statusLine self-resolves the highest installed version with `ls -1d …/cc-cream/*/ | sort -V | tail -1`. `sort -V` sorts directory *names*, so a git-sha install dir (e.g. `c83650b6360f/`) sorts after every `0.1.x` and got picked — pinning the bar to whatever version that dir held (observed: 0.1.3), with `/plugin update` unable to move off it. The command now filters to semver-named dirs (`grep -E '/[0-9]+(\.[0-9]+)+/$'`) before `sort -V`, so a stray non-numeric dir can't hijack version selection. Re-run `/cc-cream:setup` once (or reinstall) to rewrite the statusLine with the hardened command.
|
|
16
|
+
|
|
7
17
|
## [0.1.10] — 2026-05-29
|
|
8
18
|
|
|
9
19
|
### Added
|
package/package.json
CHANGED
package/src/install.js
CHANGED
|
@@ -23,10 +23,13 @@ const TRUST_NOTE =
|
|
|
23
23
|
// `nodePath` is the ABSOLUTE node binary, resolved once at setup time — the
|
|
24
24
|
// statusLine subprocess may not inherit the user's PATH, so a bare `node` is
|
|
25
25
|
// unsafe. The `-d .../*/` glob yields directory paths with a trailing slash, so
|
|
26
|
-
// `src/cc-cream.js` concatenates directly. `
|
|
27
|
-
//
|
|
26
|
+
// `src/cc-cream.js` concatenates directly. The `grep` keeps ONLY semver-named
|
|
27
|
+
// dirs (e.g. `0.1.10/`) before `sort -V | tail -1` picks the highest — without
|
|
28
|
+
// it, a non-numeric cache dir (a git-sha install like `c83650b6360f/`) sorts
|
|
29
|
+
// last and pins the bar to whatever version that happens to be, defeating
|
|
30
|
+
// auto-update. With it, `/plugin update` is applied live with no re-run of setup.
|
|
28
31
|
export function autoUpdateCommand(nodePath) {
|
|
29
|
-
return `${nodePath} "$(ls -1d "\${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/plugins/cache/*/cc-cream/*/ 2>/dev/null | sort -V | tail -1)src/cc-cream.js"`;
|
|
32
|
+
return `${nodePath} "$(ls -1d "\${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/plugins/cache/*/cc-cream/*/ 2>/dev/null | grep -E '/[0-9]+(\\.[0-9]+)+/$' | sort -V | tail -1)src/cc-cream.js"`;
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
// `desired` is considered already installed if it matches the planned command
|
|
@@ -65,16 +68,14 @@ export function planUninstall(settings) {
|
|
|
65
68
|
|
|
66
69
|
if (!isCcCreamStatusLine(existing)) {
|
|
67
70
|
if (existing && typeof existing === 'object') {
|
|
68
|
-
messages.push(
|
|
69
|
-
`Your statusLine is not cc-cream's — leaving it untouched:\n ${JSON.stringify(existing)}`,
|
|
70
|
-
);
|
|
71
|
+
messages.push("Your statusLine is not cc-cream's — leaving it untouched.");
|
|
71
72
|
} else {
|
|
72
73
|
messages.push('No cc-cream statusLine found in settings.json — nothing to remove.');
|
|
73
74
|
}
|
|
74
75
|
return { settings: s, changed: false, messages };
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
messages.push(
|
|
78
|
+
messages.push("Removed cc-cream's statusLine.");
|
|
78
79
|
const next = { ...s };
|
|
79
80
|
delete next.statusLine;
|
|
80
81
|
return { settings: next, changed: true, messages };
|
|
@@ -110,7 +111,7 @@ export function plan(settings, { entrypoint, consent, plugin = false, nodePath }
|
|
|
110
111
|
// An existing (different) statusLine must be confirmed before replacing.
|
|
111
112
|
const hasExisting = existing && typeof existing === 'object';
|
|
112
113
|
if (hasExisting) {
|
|
113
|
-
messages.push(
|
|
114
|
+
messages.push('An existing statusLine is configured.');
|
|
114
115
|
messages.push('Replace it with cc-cream?');
|
|
115
116
|
if (consent !== true) {
|
|
116
117
|
messages.push('Declined — your existing statusLine is unchanged.');
|
|
@@ -118,7 +119,7 @@ export function plan(settings, { entrypoint, consent, plugin = false, nodePath }
|
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
|
|
121
|
-
messages.push(
|
|
122
|
+
messages.push('Setting the cc-cream statusLine.');
|
|
122
123
|
messages.push(TRUST_NOTE);
|
|
123
124
|
return { settings: { ...s, statusLine: desired }, changed: true, messages, needsConsent: hasExisting };
|
|
124
125
|
}
|