vibeostheog 0.23.2 → 0.23.3
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 +4 -0
- package/package.json +1 -1
- package/src/lib/hooks/footer.js +1 -1
- package/src/lib/pricing.js +7 -2
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.3",
|
|
4
4
|
"description": "Cost-aware delegation enforcer for OpenCode. Tracks model usage, routes Task subagents to cheaper tiers, surfaces cumulative savings in chat. Includes research audit, reporting framework, project memory, progressive scratchpad decadence, and trinity CLI for brain/medium/cheap slot switching.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"release": "node scripts/release.mjs",
|
package/src/lib/hooks/footer.js
CHANGED
|
@@ -285,7 +285,7 @@ async function _appendFooter(input, output, directory) {
|
|
|
285
285
|
const optMode = (resolvedMode || "budget").toLowerCase();
|
|
286
286
|
const vibeBrand = optMode === "vibemax" ? "VibeMaX" : optMode === "vibeultrax" ? "VibeUltraX" : optMode === "quality" ? "VibeQMaX" : "VibeMaX";
|
|
287
287
|
const modeLabel = modeCapitalized(optMode);
|
|
288
|
-
const qualityIcon = execution.quality === "brain" ? "🧠" : execution.quality === "medium" ? "⚙" : "⚡";
|
|
288
|
+
const qualityIcon = execution.quality === "brain" ? "🧠" : execution.quality === "medium" ? "⚙" : execution.quality === "free" ? "🎁" : "⚡";
|
|
289
289
|
const flashIcon = isApiConnected() ? " ⚡" : "";
|
|
290
290
|
let vibeLine = `— ${qualityIcon} ${execution.quality} | ${execution.provider_label} | ${modelDisplayName(execution.model)}`;
|
|
291
291
|
if (ltTotal > 0) {
|
package/src/lib/pricing.js
CHANGED
|
@@ -145,6 +145,8 @@ export function formatProviderName(providerName) {
|
|
|
145
145
|
return "Anthropic";
|
|
146
146
|
if (raw === "google")
|
|
147
147
|
return "Google";
|
|
148
|
+
if (raw === "opencode-go")
|
|
149
|
+
return "OpenCode Go";
|
|
148
150
|
return raw.charAt(0).toUpperCase() + raw.slice(1);
|
|
149
151
|
}
|
|
150
152
|
export function formatQualityName(quality) {
|
|
@@ -258,13 +260,16 @@ export function shortModelName(modelId) {
|
|
|
258
260
|
const MODEL_DISPLAY_PREFIXES = /^(deepseek|claude|gemini|gpt|davinci|llama|qwq|qwen)-/i;
|
|
259
261
|
export function modelDisplayName(modelId) {
|
|
260
262
|
const short = shortModelName(modelId);
|
|
261
|
-
const
|
|
263
|
+
const isFree = short.endsWith("-free");
|
|
264
|
+
const base = isFree ? short.slice(0, -5) : short;
|
|
265
|
+
const cleaned = base.replace(MODEL_DISPLAY_PREFIXES, "");
|
|
262
266
|
if (!cleaned)
|
|
263
267
|
return short;
|
|
264
|
-
|
|
268
|
+
const display = cleaned
|
|
265
269
|
.split(/[-_]/)
|
|
266
270
|
.map(w => w.charAt(0).toUpperCase() + w.slice(1))
|
|
267
271
|
.join(" ");
|
|
272
|
+
return isFree ? `${display} Free` : display;
|
|
268
273
|
}
|
|
269
274
|
export function trendDisplay(sesTrend) {
|
|
270
275
|
const t = sesTrend === "up" || sesTrend === "down" ? sesTrend : "stable";
|