@ouro.bot/cli 0.1.0-alpha.195 → 0.1.0-alpha.196
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,13 @@
|
|
|
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.196",
|
|
6
|
+
"changes": [
|
|
7
|
+
"fix: ouro up verifies daemon is alive before reporting started (polls socket for 10s)",
|
|
8
|
+
"fix: daemon-runtime-sync also verifies after replacing a stale daemon"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
4
11
|
{
|
|
5
12
|
"version": "0.1.0-alpha.195",
|
|
6
13
|
"changes": [
|
|
@@ -266,15 +266,38 @@ async function ensureDaemonRunning(deps) {
|
|
|
266
266
|
},
|
|
267
267
|
cleanupStaleSocket: deps.cleanupStaleSocket,
|
|
268
268
|
startDaemonProcess: deps.startDaemonProcess,
|
|
269
|
+
checkSocketAlive: deps.checkSocketAlive,
|
|
269
270
|
});
|
|
270
271
|
}
|
|
271
272
|
deps.cleanupStaleSocket(deps.socketPath);
|
|
272
273
|
const started = await deps.startDaemonProcess(deps.socketPath);
|
|
274
|
+
const pid = started.pid ?? "unknown";
|
|
275
|
+
// Verify the daemon actually comes up before reporting success
|
|
276
|
+
const verified = await verifyDaemonAlive(deps.checkSocketAlive, deps.socketPath);
|
|
277
|
+
/* v8 ignore start -- daemon liveness failure: requires real daemon crash timing @preserve */
|
|
278
|
+
if (!verified) {
|
|
279
|
+
return {
|
|
280
|
+
alreadyRunning: false,
|
|
281
|
+
message: `daemon spawned (pid ${pid}) but failed to respond within 10s — check \`ouro status\` or daemon logs`,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
/* v8 ignore stop */
|
|
273
285
|
return {
|
|
274
286
|
alreadyRunning: false,
|
|
275
|
-
message: `daemon started (pid ${
|
|
287
|
+
message: `daemon started (pid ${pid})`,
|
|
276
288
|
};
|
|
277
289
|
}
|
|
290
|
+
/* v8 ignore start -- daemon liveness poll: real socket timing untestable in vitest @preserve */
|
|
291
|
+
async function verifyDaemonAlive(checkSocketAlive, socketPath, maxWaitMs = 10_000, pollIntervalMs = 500) {
|
|
292
|
+
const deadline = Date.now() + maxWaitMs;
|
|
293
|
+
while (Date.now() < deadline) {
|
|
294
|
+
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
295
|
+
if (await checkSocketAlive(socketPath))
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
/* v8 ignore stop */
|
|
278
301
|
/**
|
|
279
302
|
* Extract `--agent <name>` from an args array, returning the agent name and
|
|
280
303
|
* the remaining args with the flag pair removed.
|
|
@@ -2,6 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ensureCurrentDaemonRuntime = ensureCurrentDaemonRuntime;
|
|
4
4
|
const runtime_1 = require("../../nerves/runtime");
|
|
5
|
+
/* v8 ignore start -- daemon liveness poll: real socket timing untestable in vitest @preserve */
|
|
6
|
+
async function verifyDaemonStarted(deps) {
|
|
7
|
+
if (!deps.checkSocketAlive)
|
|
8
|
+
return true;
|
|
9
|
+
const maxWaitMs = 10_000;
|
|
10
|
+
const pollIntervalMs = 500;
|
|
11
|
+
const deadline = Date.now() + maxWaitMs;
|
|
12
|
+
while (Date.now() < deadline) {
|
|
13
|
+
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
14
|
+
if (await deps.checkSocketAlive(deps.socketPath))
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/* v8 ignore stop */
|
|
5
20
|
function isKnownVersion(version) {
|
|
6
21
|
return version !== "unknown" && version.trim().length > 0;
|
|
7
22
|
}
|
|
@@ -116,11 +131,15 @@ async function ensureCurrentDaemonRuntime(deps) {
|
|
|
116
131
|
}
|
|
117
132
|
deps.cleanupStaleSocket(deps.socketPath);
|
|
118
133
|
const started = await deps.startDaemonProcess(deps.socketPath);
|
|
134
|
+
const pid = started.pid ?? "unknown";
|
|
135
|
+
const verified = await verifyDaemonStarted(deps);
|
|
136
|
+
/* v8 ignore next -- daemon liveness failure: requires real daemon crash timing @preserve */
|
|
137
|
+
const suffix = verified ? "" : " — but daemon failed to respond, check logs";
|
|
119
138
|
result = {
|
|
120
139
|
alreadyRunning: false,
|
|
121
140
|
message: includesVersionDrift
|
|
122
|
-
? `restarted stale daemon from ${runningVersion} to ${deps.localVersion} (pid ${
|
|
123
|
-
: `restarted drifted daemon (${driftSummary}) (pid ${
|
|
141
|
+
? `restarted stale daemon from ${runningVersion} to ${deps.localVersion} (pid ${pid})${suffix}`
|
|
142
|
+
: `restarted drifted daemon (${driftSummary}) (pid ${pid})${suffix}`,
|
|
124
143
|
};
|
|
125
144
|
(0, runtime_1.emitNervesEvent)({
|
|
126
145
|
component: "daemon",
|