vibeostheog 0.23.11 → 0.23.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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.13",
|
|
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
|
@@ -289,14 +289,12 @@ async function _appendFooter(input, output, directory) {
|
|
|
289
289
|
const modeLabel = modeCapitalized(brandedToRuntime[optMode] || optMode);
|
|
290
290
|
const qualityIcon = execution.quality === "brain" ? "🧠" : execution.quality === "medium" ? "⚙" : execution.quality === "free" ? "🎁" : "⚡";
|
|
291
291
|
const flashIcon = isApiConnected() ? " ⚡" : "";
|
|
292
|
-
|
|
293
|
-
const selModel = selNowFooter.executed_model || execution.model;
|
|
294
|
-
let vibeLine = `— ${qualityIcon} ${execution.quality} | ${selProvider} | ${modelDisplayName(selModel)}`;
|
|
292
|
+
let vibeLine = `— ${qualityIcon} ${execution.quality} | ${execution.provider_label} | ${modelDisplayName(execution.model)}`;
|
|
295
293
|
if (ltTotal > 0) {
|
|
296
294
|
vibeLine += ` | $${formatUsd(ltTotal)}`;
|
|
297
295
|
}
|
|
298
296
|
if (isApiConnected()) {
|
|
299
|
-
vibeLine += ` | ${vibeBrand}${flashIcon}
|
|
297
|
+
vibeLine += ` | ${vibeBrand}${flashIcon}`;
|
|
300
298
|
}
|
|
301
299
|
const footerText = stripped + `\n\n${vibeLine} —`;
|
|
302
300
|
if (_blackboxEnabled) {
|
|
@@ -733,11 +733,11 @@ export const onToolExecuteAfter = async (input, output) => {
|
|
|
733
733
|
const vibeBrand = brandMap[optModeFooter] || (execution.quality === "brain" ? "VibeQMaX" : "VibeMaX");
|
|
734
734
|
const qualityIcon = execution.quality === "brain" ? "\u{1F9E0}" : execution.quality === "medium" ? "\u2699" : execution.quality === "free" ? "\u{1F381}" : "\u26A1";
|
|
735
735
|
const modeLabel = modeCapitalized(brandedToRuntime[optModeFooter] || optModeFooter);
|
|
736
|
-
_footerText = `— ${qualityIcon} ${execution.quality} | ${
|
|
736
|
+
_footerText = `— ${qualityIcon} ${execution.quality} | ${execution.provider_label} | ${modelDisplayName(execution.model)}`;
|
|
737
737
|
if (ltTotal > 0) {
|
|
738
738
|
_footerText += ` | $${formatUsd(ltTotal)}`;
|
|
739
739
|
}
|
|
740
|
-
_footerText += ` | ${vibeBrand}${flashIcon}
|
|
740
|
+
_footerText += ` | ${vibeBrand}${flashIcon} —\n\n`;
|
|
741
741
|
output.title = _footerText.trim();
|
|
742
742
|
if (typeof output?.output === "string")
|
|
743
743
|
output.output = _footerText + output.output;
|
package/src/lib/trinity-tool.js
CHANGED
|
@@ -87,11 +87,22 @@ export function createTrinityTool(deps) {
|
|
|
87
87
|
cheap: models.find(m => m.id === trinity.cheap) || { id: trinity.cheap, cost: deps._modelCost(trinity.cheap), tier: deps._modelTier(trinity.cheap) },
|
|
88
88
|
};
|
|
89
89
|
const tiersData = deps.safeJsonParse(deps.readFileSync(deps.TIERS_FILE, "utf-8"));
|
|
90
|
-
tiersData.trinity
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
const oldTiers = tiersData.trinity || {};
|
|
91
|
+
const oldProvider = tiersData.selection?.selected_provider || "";
|
|
92
|
+
const newProvider = trinity.provider || resolveExecutionIdentity(deps.currentModel, deps.directory)?.provider || "";
|
|
93
|
+
tiersData.trinity ??= {};
|
|
94
|
+
const slots = ["brain", "medium", "cheap"];
|
|
95
|
+
for (const s of slots) {
|
|
96
|
+
const autoModel = probed[s].id;
|
|
97
|
+
const oldModel = oldTiers[s]?.oc || "";
|
|
98
|
+
const oldModelProvider = oldModel.includes("/") ? oldModel.split("/")[0] : "";
|
|
99
|
+
if (oldModelProvider && oldModelProvider !== oldProvider && oldModelProvider !== newProvider) {
|
|
100
|
+
tiersData.trinity[s] = oldTiers[s];
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
tiersData.trinity[s] = { oc: autoModel, cc: deps.modelToCcAlias(autoModel) };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
95
106
|
tiersData.selection ??= {};
|
|
96
107
|
tiersData.selection.selected_provider = trinity.provider || resolveExecutionIdentity(deps.currentModel, deps.directory)?.provider || "";
|
|
97
108
|
tiersData.selection.selected_model = deps.currentModel;
|