vibeostheog 0.23.43 → 0.23.45

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
@@ -1,3 +1,13 @@
1
+ ## 0.23.45
2
+ - fix: propagate local agent_mode as fallback when remote CV omits it
3
+
4
+
5
+ ## 0.23.44
6
+ - fix: force-add run-test-suite.mjs for CI release workflow
7
+ - fix: restart stale startup plan agent and clear workspace followup pause
8
+ - chore: sync package-lock version
9
+
10
+
1
11
  ## 0.23.43
2
12
  - fix: support desktop footer alert chain
3
13
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeostheog",
3
- "version": "0.23.43",
3
+ "version": "0.23.45",
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",
@@ -75,7 +75,7 @@ async function apiComputeControlVector(state, action, optimizationMode) {
75
75
  const res = await remoteCall("blackboxControlVector", [state, action, optimizationMode], null);
76
76
  if (res?.control_vector) {
77
77
  const local = computeControlVector(state, action, optimizationMode);
78
- return { ...res.control_vector, tier_bias: local.tier_bias, optimization_mode: local.optimization_mode };
78
+ return { agent_mode: local.agent_mode, ...res.control_vector, tier_bias: local.tier_bias, optimization_mode: local.optimization_mode };
79
79
  }
80
80
  }
81
81
  catch { }
@@ -284,7 +284,6 @@ export function syncControlSettings(cv, options = {}) {
284
284
  if (restoreAgent && oc.default_agent === "plan") {
285
285
  oc.default_agent = restoreAgent;
286
286
  writeFileSync(OC_CONFIG, JSON.stringify(oc, null, 2) + "\n");
287
- clearWorkspaceFollowupPauseForSession(sid);
288
287
  if (currentSel.previous_default_agent)
289
288
  writeSelection("previous_default_agent", null);
290
289
  }
@@ -168,27 +168,27 @@ async function _appendFooter(input, output, directory) {
168
168
  output?.messageId ||
169
169
  output?.message?.id ||
170
170
  null;
171
- if (messageID && textCompletePainted.has(messageID))
172
- return;
173
- function _payload(obj) {
174
- if (obj?.message && typeof obj.message === "object")
175
- return obj.message;
176
- return obj;
177
- }
178
- function _extractText(obj) {
179
- const payload = _payload(obj);
180
- if (typeof payload?.text === "string")
181
- return payload.text;
182
- if (typeof payload?.result === "string")
183
- return payload.result;
184
- if (typeof payload?.content === "string")
185
- return payload.content;
186
- if (Array.isArray(payload?.content))
187
- return payload.content.filter(p => p?.type === "text").map(p => p.text).filter(Boolean).join("\n");
188
- if (Array.isArray(payload?.parts))
189
- return payload.parts.filter(p => p?.type === "text").map(p => p.text).filter(Boolean).join("\n");
190
- return "";
191
- }
171
+ if (messageID && textCompletePainted.has(messageID))
172
+ return;
173
+ function _payload(obj) {
174
+ if (obj?.message && typeof obj.message === "object")
175
+ return obj.message;
176
+ return obj;
177
+ }
178
+ function _extractText(obj) {
179
+ const payload = _payload(obj);
180
+ if (typeof payload?.text === "string")
181
+ return payload.text;
182
+ if (typeof payload?.result === "string")
183
+ return payload.result;
184
+ if (typeof payload?.content === "string")
185
+ return payload.content;
186
+ if (Array.isArray(payload?.content))
187
+ return payload.content.filter(p => p?.type === "text").map(p => p.text).filter(Boolean).join("\n");
188
+ if (Array.isArray(payload?.parts))
189
+ return payload.parts.filter(p => p?.type === "text").map(p => p.text).filter(Boolean).join("\n");
190
+ return "";
191
+ }
192
192
  const text = _extractText(output);
193
193
  if (!text)
194
194
  return;
@@ -336,32 +336,32 @@ async function _appendFooter(input, output, directory) {
336
336
  }
337
337
  }
338
338
  catch { }
339
- }
340
- function _setFooter(obj, text) {
341
- const target = _payload(obj);
342
- if (typeof target?.text === "string")
343
- target.text = text;
344
- else if (typeof target?.result === "string")
345
- target.result = text;
346
- else if (typeof target?.content === "string")
347
- target.content = text;
348
- else if (Array.isArray(target?.content)) {
349
- const textParts = target.content.filter(p => p?.type === "text");
350
- if (textParts.length > 0)
351
- textParts[textParts.length - 1].text = text;
352
- else
353
- target.content.push({ type: "text", text });
354
339
  }
355
- else if (Array.isArray(target?.parts)) {
356
- const textParts = target.parts.filter(p => p?.type === "text");
357
- if (textParts.length > 0)
358
- textParts[textParts.length - 1].text = text;
340
+ function _setFooter(obj, text) {
341
+ const target = _payload(obj);
342
+ if (typeof target?.text === "string")
343
+ target.text = text;
344
+ else if (typeof target?.result === "string")
345
+ target.result = text;
346
+ else if (typeof target?.content === "string")
347
+ target.content = text;
348
+ else if (Array.isArray(target?.content)) {
349
+ const textParts = target.content.filter(p => p?.type === "text");
350
+ if (textParts.length > 0)
351
+ textParts[textParts.length - 1].text = text;
352
+ else
353
+ target.content.push({ type: "text", text });
354
+ }
355
+ else if (Array.isArray(target?.parts)) {
356
+ const textParts = target.parts.filter(p => p?.type === "text");
357
+ if (textParts.length > 0)
358
+ textParts[textParts.length - 1].text = text;
359
+ else
360
+ target.parts.push({ type: "text", text });
361
+ }
359
362
  else
360
- target.parts.push({ type: "text", text });
363
+ target.text = text;
361
364
  }
362
- else
363
- target.text = text;
364
- }
365
365
  _setFooter(output, footerText);
366
366
  _lastStrippedText = stripped;
367
367
  // CLI/pipe mode: stdout is already rendered, write footer to stderr