@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 managed = this.processManager.listAgentSnapshots()
1353
- .some((snapshot) => snapshot.name === command.agent);
1354
- if (!managed) {
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ouro.bot/cli",
3
- "version": "0.1.0-alpha.680",
3
+ "version": "0.1.0-alpha.681",
4
4
  "main": "dist/heart/daemon/ouro-entry.js",
5
5
  "bin": {
6
6
  "cli": "dist/heart/daemon/ouro-bot-entry.js",