@ouro.bot/cli 0.1.0-alpha.680 → 0.1.0-alpha.681
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.json
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_note": "This changelog is maintained as part of the PR/version-bump workflow. Agent-curated, not auto-generated. Agents read this file directly via read_file to understand what changed between versions.",
|
|
3
3
|
"versions": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.1.0-alpha.681",
|
|
6
|
+
"changes": [
|
|
7
|
+
"Prevent parked private runtimes from waking during reloads, preserve Whisper machine config, and render temporal recovery context at turn start."
|
|
8
|
+
]
|
|
9
|
+
},
|
|
4
10
|
{
|
|
5
11
|
"version": "0.1.0-alpha.680",
|
|
6
12
|
"changes": [
|
|
@@ -864,6 +864,11 @@ function renderSignal(signalEntry) {
|
|
|
864
864
|
return ` - ${signalEntry.status.toUpperCase()} ${signalEntry.id}: ${signalEntry.summary}${repairText}`;
|
|
865
865
|
}
|
|
866
866
|
function formatReceipt(receipt) {
|
|
867
|
+
const blockedGuidance = receipt.verdict === "blocked"
|
|
868
|
+
? receipt.latestReadyLocator
|
|
869
|
+
? "guidance: current latest is blocked; repair blocked signals or use latest-ready before continuing."
|
|
870
|
+
: "guidance: current latest is blocked; repair blocked signals before continuing."
|
|
871
|
+
: null;
|
|
867
872
|
return [
|
|
868
873
|
`Recovery Sentinel - ${receipt.agent}`,
|
|
869
874
|
`generated: ${receipt.generatedAt}`,
|
|
@@ -872,6 +877,7 @@ function formatReceipt(receipt) {
|
|
|
872
877
|
`verdict: ${receipt.verdict}`,
|
|
873
878
|
`latest-ready: ${receipt.latestReadyLocator ?? "unavailable"}`,
|
|
874
879
|
`summary: ${receipt.summary}`,
|
|
880
|
+
...(blockedGuidance ? [blockedGuidance] : []),
|
|
875
881
|
"",
|
|
876
882
|
"Recovery anchor",
|
|
877
883
|
` kind: ${receipt.recoveryAnchor.kind}`,
|
|
@@ -2167,6 +2167,9 @@ async function applyRuntimeChangeToRunningAgent(agent, deps, onProgress, options
|
|
|
2167
2167
|
: { kind: "agent.restart", agent }));
|
|
2168
2168
|
if (!response.ok)
|
|
2169
2169
|
return `daemon restart skipped: ${response.error ?? response.message ?? "unknown daemon error"}`;
|
|
2170
|
+
if (typeof response.message === "string" && response.message.startsWith("restart skipped")) {
|
|
2171
|
+
return response.message;
|
|
2172
|
+
}
|
|
2170
2173
|
const deadline = cliNowMs(deps) + DEFAULT_RUNTIME_APPLY_TIMEOUT_MS;
|
|
2171
2174
|
onProgress?.(`waiting for ${agent} to come back\n- reload request accepted`);
|
|
2172
2175
|
while (cliNowMs(deps) < deadline) {
|
|
@@ -1349,11 +1349,14 @@ class OuroDaemon {
|
|
|
1349
1349
|
if (!this.processManager.restartAgent) {
|
|
1350
1350
|
return { ok: false, error: "Managed agent restart is not available." };
|
|
1351
1351
|
}
|
|
1352
|
-
const
|
|
1353
|
-
.
|
|
1354
|
-
if (!
|
|
1352
|
+
const managedSnapshot = this.processManager.listAgentSnapshots()
|
|
1353
|
+
.find((snapshot) => snapshot.name === command.agent);
|
|
1354
|
+
if (!managedSnapshot) {
|
|
1355
1355
|
return { ok: false, error: `Unknown managed agent '${command.agent}'.` };
|
|
1356
1356
|
}
|
|
1357
|
+
if (managedSnapshot.autoStart === false && managedSnapshot.status === "stopped") {
|
|
1358
|
+
return { ok: true, message: `restart skipped for parked non-autostart agent '${command.agent}'` };
|
|
1359
|
+
}
|
|
1357
1360
|
const restartWork = command.skipConfigCheck === true
|
|
1358
1361
|
? this.processManager.restartAgent(command.agent, { skipConfigCheck: true })
|
|
1359
1362
|
: this.processManager.restartAgent(command.agent);
|
|
@@ -610,6 +610,13 @@ class DaemonProcessManager {
|
|
|
610
610
|
return;
|
|
611
611
|
}
|
|
612
612
|
state.snapshot.lastCrashAt = new Date(now).toISOString();
|
|
613
|
+
if (state.config.autoStart === false) {
|
|
614
|
+
state.snapshot.status = "stopped";
|
|
615
|
+
state.snapshot.errorReason = "non-autostart worker exited unexpectedly; not respawning";
|
|
616
|
+
state.snapshot.fixHint = "Start it explicitly after checking the exit cause.";
|
|
617
|
+
this.notifySnapshotChange(state.snapshot);
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
613
620
|
// Fast-crash detection: if the agent dies within 5 seconds of starting, it's likely
|
|
614
621
|
// a configuration issue (missing credentials, bad provider, etc.) not a transient failure.
|
|
615
622
|
// After 3 consecutive fast crashes, stop retrying and mark as config-failed.
|
|
@@ -263,7 +263,7 @@ function renderStartOfTurnPacket(packet) {
|
|
|
263
263
|
if (tokens <= budget.max)
|
|
264
264
|
break;
|
|
265
265
|
// Skip continuity sections — they are protected.
|
|
266
|
-
if (section.label === "resume" || section.label === "arc" || section.label === "recoverySentinel")
|
|
266
|
+
if (section.label === "resume" || section.label === "arc" || section.label === "recoverySentinel" || section.label === "sessionTiming")
|
|
267
267
|
continue;
|
|
268
268
|
// Remove this section entirely
|
|
269
269
|
const idx = sections.findIndex((s) => s.label === section.label);
|
|
@@ -297,6 +297,9 @@ function formatSections(sections) {
|
|
|
297
297
|
case "recoverySentinel":
|
|
298
298
|
parts.push(`**Recovery Sentinel:**\n${section.content}`);
|
|
299
299
|
break;
|
|
300
|
+
case "sessionTiming":
|
|
301
|
+
parts.push(`**Thread timing:** ${section.content}`);
|
|
302
|
+
break;
|
|
300
303
|
case "obligations":
|
|
301
304
|
parts.push(`**Owed:**\n${section.content}`);
|
|
302
305
|
break;
|