@dorokuma/herdsman 0.12.1 → 0.13.2

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.
Files changed (61) hide show
  1. package/README.md +6 -13
  2. package/dist/src/cli/herdsman.d.ts +14 -1
  3. package/dist/src/cli/herdsman.d.ts.map +1 -1
  4. package/dist/src/cli/herdsman.js +49 -65
  5. package/dist/src/cli/herdsman.js.map +1 -1
  6. package/dist/src/daemon/agent-event-reconciler.d.ts.map +1 -1
  7. package/dist/src/daemon/agent-event-reconciler.js +53 -2
  8. package/dist/src/daemon/agent-event-reconciler.js.map +1 -1
  9. package/dist/src/daemon/herdr-session-watch-manager.d.ts +13 -1
  10. package/dist/src/daemon/herdr-session-watch-manager.d.ts.map +1 -1
  11. package/dist/src/daemon/herdr-session-watch-manager.js +52 -16
  12. package/dist/src/daemon/herdr-session-watch-manager.js.map +1 -1
  13. package/dist/src/daemon/observability-server.d.ts.map +1 -1
  14. package/dist/src/daemon/observability-server.js +16 -1
  15. package/dist/src/daemon/observability-server.js.map +1 -1
  16. package/dist/src/daemon/process-manager.d.ts +50 -49
  17. package/dist/src/daemon/process-manager.d.ts.map +1 -1
  18. package/dist/src/daemon/process-manager.js +246 -204
  19. package/dist/src/daemon/process-manager.js.map +1 -1
  20. package/dist/src/daemon/service-supervision.d.ts +68 -0
  21. package/dist/src/daemon/service-supervision.d.ts.map +1 -0
  22. package/dist/src/daemon/service-supervision.js +127 -0
  23. package/dist/src/daemon/service-supervision.js.map +1 -0
  24. package/dist/src/daemon/service.d.ts +35 -0
  25. package/dist/src/daemon/service.d.ts.map +1 -1
  26. package/dist/src/daemon/service.js +185 -27
  27. package/dist/src/daemon/service.js.map +1 -1
  28. package/dist/src/db/agent-events.d.ts +15 -0
  29. package/dist/src/db/agent-events.d.ts.map +1 -1
  30. package/dist/src/db/agent-events.js +180 -54
  31. package/dist/src/db/agent-events.js.map +1 -1
  32. package/dist/src/db/agents.js +1 -1
  33. package/dist/src/db/agents.js.map +1 -1
  34. package/dist/src/db/status-event-plans.d.ts +1 -1
  35. package/dist/src/db/status-event-plans.d.ts.map +1 -1
  36. package/dist/src/db/status-event-plans.js +5 -4
  37. package/dist/src/db/status-event-plans.js.map +1 -1
  38. package/dist/src/herdr/session-list.d.ts +11 -0
  39. package/dist/src/herdr/session-list.d.ts.map +1 -1
  40. package/dist/src/herdr/session-list.js +13 -0
  41. package/dist/src/herdr/session-list.js.map +1 -1
  42. package/dist/src/herdr/socket-client.d.ts +8 -0
  43. package/dist/src/herdr/socket-client.d.ts.map +1 -1
  44. package/dist/src/herdr/socket-client.js +43 -0
  45. package/dist/src/herdr/socket-client.js.map +1 -1
  46. package/dist/src/observability/agent-index-service.d.ts +15 -0
  47. package/dist/src/observability/agent-index-service.d.ts.map +1 -1
  48. package/dist/src/observability/agent-index-service.js +499 -135
  49. package/dist/src/observability/agent-index-service.js.map +1 -1
  50. package/dist/src/observability/agent-orchestrator-service.d.ts.map +1 -1
  51. package/dist/src/observability/agent-orchestrator-service.js +5 -1
  52. package/dist/src/observability/agent-orchestrator-service.js.map +1 -1
  53. package/dist/src/observability/contracts.d.ts +1 -0
  54. package/dist/src/observability/contracts.d.ts.map +1 -1
  55. package/dist/src/observability/contracts.js +8 -0
  56. package/dist/src/observability/contracts.js.map +1 -1
  57. package/drizzle/0010_legacy_degraded_cleanup.sql +1 -0
  58. package/drizzle/meta/0010_snapshot.json +975 -0
  59. package/drizzle/meta/_journal.json +7 -0
  60. package/package.json +3 -6
  61. package/README.ja.md +0 -153
@@ -1,15 +1,21 @@
1
1
  import { spawn, spawnSync } from "node:child_process";
2
2
  import { randomUUID } from "node:crypto";
3
- import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
4
4
  import { createConnection } from "node:net";
5
5
  import { basename, dirname } from "node:path";
6
+ import { HERDSMAN_SYSTEMD_UNIT, managedByFromCgroup, readProcessCgroup, readSystemdRestartCount, } from "../daemon/service-supervision.js";
7
+ /**
8
+ * True when the daemon pid is supervised by the herdsman *system* unit — the
9
+ * only case in which the systemd `NRestarts` probe describes this pid.
10
+ */
11
+ export function isSystemdHerdsmanManaged(managedBy) {
12
+ return managedBy === `systemd:${HERDSMAN_SYSTEMD_UNIT}`;
13
+ }
6
14
  export const DAEMON_ENTRYPOINT_NAMES = ["herdsman-daemon.js"];
7
- export const CLI_ENTRYPOINT_NAMES = ["herdsman-daemon.js", "herdsman.js", "herdsman"];
8
15
  /**
9
16
  * Instance lock path for the daemon's bare entrypoint (herdsman-daemon.js).
10
- * Deliberately distinct from the CLI operation lock (`${pidPath}.lock`) so a
11
- * daemon started outside the CLI does not collide with CLI start/stop/restart
12
- * operations, and vice versa.
17
+ * Kept distinct from the plain `${pidPath}.lock` name so a daemon that owns
18
+ * its home through this lock cannot collide with any other lock namespace.
13
19
  */
14
20
  export function daemonInstanceLockPath(pidPath) {
15
21
  return `${pidPath}.instance.lock`;
@@ -55,25 +61,12 @@ export function removeDaemonPidFile(pidPath, expectedPid) {
55
61
  return false;
56
62
  }
57
63
  }
58
- export function writeDaemonRuntimeRecord(path, record) {
59
- mkdirSync(dirname(path), { mode: 0o700, recursive: true });
60
- writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`, { mode: 0o600 });
61
- }
62
- export async function prepareDaemonSocketPath(input) {
63
- mkdirSync(dirname(input.socketPath), { mode: 0o700, recursive: true });
64
- if (!existsSync(input.socketPath)) {
65
- return;
66
- }
67
- const connectSocket = input.deps?.connectSocket ?? defaultConnectSocket;
68
- if (await connectSocket(input.socketPath)) {
69
- throw new Error(`Herdsman daemon socket is already reachable: ${input.socketPath}`);
70
- }
71
- rmSync(input.socketPath, { force: true });
72
- }
73
64
  export async function getDaemonStatus(input) {
74
65
  const processIsRunning = input.deps?.isProcessRunning ?? isProcessRunning;
75
66
  const identityProbe = input.deps?.identityProbe ?? readDaemonProcessIdentity;
76
67
  const connectSocket = input.deps?.connectSocket ?? defaultConnectSocket;
68
+ const probeCgroup = input.deps?.readCgroup ?? readProcessCgroup;
69
+ const probeRestartCount = input.deps?.readServiceRestartCount ?? readSystemdRestartCount;
77
70
  if (!existsSync(input.pidPath)) {
78
71
  if (await connectSocket(input.socketPath)) {
79
72
  return {
@@ -127,6 +120,7 @@ export async function getDaemonStatus(input) {
127
120
  console.warn(`Unable to verify daemon process identity for PID ${pid}: /proc unavailable`);
128
121
  }
129
122
  return {
123
+ ...supervisionFacts(pid, probeCgroup, probeRestartCount),
130
124
  pid,
131
125
  pidPath: input.pidPath,
132
126
  socketPath: input.socketPath,
@@ -134,164 +128,45 @@ export async function getDaemonStatus(input) {
134
128
  state: "running",
135
129
  };
136
130
  }
137
- export async function startDaemonProcess(input) {
138
- mkdirSync(dirname(input.pidPath), { mode: 0o700, recursive: true });
139
- mkdirSync(dirname(input.logPath), { mode: 0o700, recursive: true });
140
- const existing = await getDaemonStatus({
141
- ...(input.deps !== undefined ? { deps: input.deps } : {}),
142
- pidPath: input.pidPath,
143
- socketPath: input.socketPath,
144
- });
145
- if (existing.state === "running") {
146
- if (existing.socketReachable) {
147
- const pid = "pid" in existing ? existing.pid : undefined;
148
- throw new Error(pid !== undefined
149
- ? `Herdsman daemon is already running with pid ${pid}: ${existing.socketPath}`
150
- : `Herdsman daemon is already running: ${existing.socketPath}`);
151
- }
152
- const pid = "pid" in existing ? existing.pid : undefined;
153
- throw new Error(`Herdsman daemon process is already running${pid !== undefined ? ` with pid ${pid}` : ""} but its socket is not reachable: ${existing.socketPath}`);
154
- }
155
- if (existing.stalePid !== undefined)
156
- rmSync(input.pidPath, { force: true });
157
- let pidFd;
131
+ /**
132
+ * Best-effort supervision facts for a known daemon pid. Never throws: a probe
133
+ * that rejects or throws only degrades its own field, so `daemon status` keeps
134
+ * its state and exit code no matter how broken `/proc` or `systemctl` is.
135
+ *
136
+ * Diagnostic path only: `probeRestartCount` spawns `systemctl` synchronously
137
+ * (see `service-supervision.ts`), so this must never be called from daemon
138
+ * lifecycle or hot paths.
139
+ */
140
+ function supervisionFacts(pid, probeCgroup, probeRestartCount) {
141
+ let managedBy = "unknown";
158
142
  try {
159
- pidFd = openSync(input.pidPath, "wx", 0o600);
160
- }
161
- catch (error) {
162
- if (error.code === "EEXIST") {
163
- throw new Error(`Herdsman daemon is already running: ${input.pidPath}`);
164
- }
165
- throw error;
143
+ const cgroup = probeCgroup(pid);
144
+ if (cgroup !== undefined)
145
+ managedBy = managedByFromCgroup(cgroup);
166
146
  }
167
- let childPid;
168
- let childConfirmedDead = false;
169
- try {
170
- await prepareDaemonSocketPath({
171
- ...(input.deps !== undefined ? { deps: input.deps } : {}),
172
- socketPath: input.socketPath,
173
- });
174
- const logFd = openRotatedLog(input.logPath);
175
- let child;
176
- try {
177
- child = (input.deps?.spawnProcess ?? spawnDaemonProcess)(input.nodePath, [input.entrypointPath], {
178
- detached: true,
179
- env: input.env,
180
- stdio: ["ignore", logFd, logFd],
181
- });
182
- }
183
- finally {
184
- closeSync(logFd);
185
- }
186
- if (!child.pid)
187
- throw new Error("Failed to start Herdsman daemon: child pid was not assigned");
188
- childPid = child.pid;
189
- child.unref();
190
- writeDaemonPidFile(input.pidPath, child.pid);
191
- try {
192
- const waitMs = input.deps?.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
193
- const connectSocket = input.deps?.readinessProbe ?? defaultConnectSocket;
194
- const deadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
195
- while (Date.now() < deadline && !(await connectSocket(input.socketPath)))
196
- await waitMs(50);
197
- if (!(await connectSocket(input.socketPath)))
198
- throw new Error("Timed out waiting for Herdsman daemon socket");
199
- }
200
- catch (error) {
201
- const killProcess = input.deps?.killProcess ?? ((pid, signal) => process.kill(pid, signal));
202
- const processIsRunning = input.deps?.isProcessRunning ?? isProcessRunning;
203
- const waitMs = input.deps?.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
204
- killProcess(child.pid, "SIGTERM");
205
- const deadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
206
- while (Date.now() < deadline && processIsRunning(child.pid))
207
- await waitMs(50);
208
- if (processIsRunning(child.pid)) {
209
- killProcess(child.pid, "SIGKILL");
210
- const killDeadline = Date.now() + (input.deps?.readinessTimeoutMs ?? 10_000);
211
- while (Date.now() < killDeadline && processIsRunning(child.pid))
212
- await waitMs(50);
213
- }
214
- if (!processIsRunning(child.pid)) {
215
- childConfirmedDead = true;
216
- rmSync(input.pidPath, { force: true });
217
- }
218
- throw error;
219
- }
220
- const record = {
221
- ...input.runtimeRecord,
222
- startedAt: new Date().toISOString(),
223
- version: 1,
224
- };
225
- // The runtime record no longer carries a pid: the pid file is the pid
226
- // source of truth, and a stale pid here misleads liveness checks.
227
- delete record.pid;
228
- writeDaemonRuntimeRecord(input.runtimeRecordPath, record);
229
- return { pid: child.pid };
230
- }
231
- catch (error) {
232
- if (childPid !== undefined && childConfirmedDead)
233
- rmSync(input.pidPath, { force: true });
234
- throw error;
235
- }
236
- finally {
237
- closeSync(pidFd);
238
- }
239
- }
240
- export async function stopDaemonProcess(input) {
241
- const deps = input.deps ?? {};
242
- const status = await getDaemonStatus({
243
- deps,
244
- pidPath: input.pidPath,
245
- socketPath: input.socketPath,
246
- });
247
- if (status.state === "stopped") {
248
- rmSync(input.pidPath, { force: true });
249
- return { alreadyStopped: true };
250
- }
251
- const killProcess = deps.killProcess ?? ((pid, signal) => process.kill(pid, signal));
252
- const processIsRunning = deps.isProcessRunning ?? isProcessRunning;
253
- const waitMs = deps.waitMs ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
254
- const pid = "pid" in status ? status.pid : undefined;
255
- if (pid === undefined) {
256
- const stalePid = "stalePid" in status ? status.stalePid : undefined;
257
- if (status.state === "running" && stalePid !== undefined) {
258
- throw new Error(`Herdsman daemon socket is reachable at ${status.socketPath} but pid file ${status.pidPath} refers to stale PID ${stalePid}; the daemon is managed outside this pid file and cannot be stopped via CLI`);
259
- }
260
- throw new Error("Herdsman daemon status is missing a PID");
261
- }
262
- killProcess(pid, "SIGTERM");
263
- const deadline = Date.now() + input.timeoutMs;
264
- while (Date.now() < deadline) {
265
- if (!processIsRunning(pid)) {
266
- rmSync(input.pidPath, { force: true });
267
- return { alreadyStopped: false, pid };
268
- }
269
- await waitMs(50);
270
- }
271
- killProcess(pid, "SIGKILL");
272
- const killDeadline = Date.now() + input.timeoutMs;
273
- while (Date.now() < killDeadline && processIsRunning(pid))
274
- await waitMs(50);
275
- if (!processIsRunning(pid)) {
276
- rmSync(input.pidPath, { force: true });
277
- return { alreadyStopped: false, pid };
278
- }
279
- throw new Error(`Timed out waiting for Herdsman daemon pid ${pid} to stop after SIGKILL`);
280
- }
281
- function openRotatedLog(path) {
147
+ catch {
148
+ managedBy = "unknown";
149
+ }
150
+ // Only probe the restart count for a pid the herdsman system unit actually
151
+ // supervises. `NRestarts` is a property of `herdsman.service`, so for an
152
+ // `unmanaged` (or `unknown`) daemon it would be the count of a unit that does
153
+ // not own this pid — and `managedBy: unmanaged` + `restartCount: 3` reads
154
+ // like "this stray daemon restarted three times". Skipping the probe also
155
+ // keeps the diagnostic path from spawning `systemctl` for an answer that
156
+ // could not mean anything.
157
+ if (!isSystemdHerdsmanManaged(managedBy))
158
+ return { managedBy };
159
+ let restartCount;
282
160
  try {
283
- if (statSync(path).size > 10 * 1024 * 1024)
284
- renameSync(path, `${path}.1`);
161
+ restartCount = probeRestartCount();
285
162
  }
286
- catch (error) {
287
- if (error.code !== "ENOENT")
288
- throw error;
163
+ catch {
164
+ restartCount = undefined;
289
165
  }
290
- return openSync(path, "a", 0o600);
291
- }
292
- function spawnDaemonProcess(command, args, options) {
293
- const child = spawn(command, args, options);
294
- return { pid: child.pid, unref: () => child.unref() };
166
+ // `0` here means "systemd has not restarted the unit since it loaded it"
167
+ // (reset-failed / stop+start / an unloaded unit all reset the counter), not
168
+ // "this daemon has never crashed".
169
+ return restartCount === undefined ? { managedBy } : { managedBy, restartCount };
295
170
  }
296
171
  export function readDaemonProcessIdentity(pid, expectedNames = DAEMON_ENTRYPOINT_NAMES) {
297
172
  if (!existsSync("/proc")) {
@@ -370,19 +245,81 @@ export function isFlockHeld(lockPath) {
370
245
  }
371
246
  throw new Error(`flock probe exited with unexpected status ${res.status} on ${lockPath}`);
372
247
  }
373
- function isChildProcessActive(pid) {
248
+ /**
249
+ * One-shot flag for the degraded release barrier. Module scope on purpose: the
250
+ * missing `/proc/<pid>/task/<pid>/children` file is a property of the kernel/
251
+ * procfs, not of a single lock, so one warning per process is enough. This runs
252
+ * on every successful acquisition, so it must never flood the log.
253
+ */
254
+ let warnedChildPidsUnavailable = false;
255
+ /**
256
+ * Reads the direct children of `pid` from procfs. `flock` forks so it can wait
257
+ * for the command it runs, and that command inherits the flock file descriptor,
258
+ * so those children are the other processes keeping the flock alive. Returns []
259
+ * when procfs does not expose the children file (or on a non-Linux host); the
260
+ * caller then falls back to watching the flock process alone.
261
+ *
262
+ * The fallback is a silent degradation of the release barrier, so it announces
263
+ * itself once per process when procfs is present but the file cannot be read.
264
+ * The return contract, the control flow and the hot path stay untouched.
265
+ */
266
+ function readChildPids(pid) {
267
+ try {
268
+ return readFileSync(`/proc/${pid}/task/${pid}/children`, "utf8")
269
+ .split(/\s+/)
270
+ .map((part) => Number(part))
271
+ .filter((value) => Number.isInteger(value) && value > 0);
272
+ }
273
+ catch {
274
+ // `/proc` exists on every supported platform, so a failure here means the
275
+ // children file itself is unavailable (or unreadable). That is exactly the
276
+ // case where release() only waits for the flock process and the residual
277
+ // "released but still held for a few ms" window is left to the bounded
278
+ // acquire retry.
279
+ if (existsSync("/proc") && !warnedChildPidsUnavailable) {
280
+ warnedChildPidsUnavailable = true;
281
+ console.warn(`[herdsman] /proc/${pid}/task/${pid}/children is unavailable: release barrier degraded to watching the flock process alone, residual races are absorbed by the bounded acquire retry`);
282
+ }
283
+ return [];
284
+ }
285
+ }
286
+ function isChildProcessActive(pid, readProcessStat = (targetPid) => readFileSync(`/proc/${targetPid}/stat`, "utf8"), phase = "ready") {
374
287
  if (existsSync("/proc")) {
375
288
  try {
376
- const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
289
+ const stat = readProcessStat(pid);
377
290
  const lastParen = stat.lastIndexOf(")");
291
+ // procfs reports st_size 0, so the read has no size hint and can come back
292
+ // truncated/empty. Unparsable content proves nothing about liveness, so it
293
+ // must not be read as "the process is gone".
378
294
  if (lastParen === -1)
379
- return false;
295
+ return true;
380
296
  const rest = stat.slice(lastParen + 2).trim();
381
297
  const state = rest.charAt(0);
382
- return state !== "Z" && state !== "X" && state !== "T";
298
+ // Liveness here means "this process has not exited and closed its own fds
299
+ // yet", never "the flock is free": a Z/X state says this pid has exited and
300
+ // dropped its own fds -- note D1/D2: an inherited child fd (e.g. a
301
+ // `setsid`-escaped descendant) may still hold the flock, since `flock` lives
302
+ // on the kernel's open file description and any surviving fd keeps it held.
303
+ // T (SIGSTOP/SIGTSTP) is only paused and still holds it (`flock -x -n`
304
+ // against a stopped holder exits 1). Whether that paused holder is alive or
305
+ // abandonable is what the phase above decides: T counts as alive once READY
306
+ // made the helper a holder, and as abandonable while it is still our
307
+ // half-built pre-READY child.
308
+ // Lowercase t (stopped while being traced) already counted as alive and is
309
+ // unchanged. Consistent with the other two liveness surfaces in this file
310
+ // (hasLiveLockOwner -> kill(pid, 0), isFlockHeld -> a real `flock -n`), both
311
+ // of which treat T as alive. See D6 in
312
+ // .agents/notes/20260930-terminal-event-delivery-open-items.md.
313
+ const pausedCountsAsActive = phase === "ready";
314
+ return state !== "Z" && state !== "X" && (pausedCountsAsActive || state !== "T");
383
315
  }
384
- catch {
385
- return false;
316
+ catch (error) {
317
+ // Only the kernel proving the pid is gone counts as dead: ENOENT (no
318
+ // /proc/<pid>/stat entry) or ESRCH. Any other failure (EACCES, EPERM, EIO,
319
+ // unknown) means "cannot tell", and a lock-holding child must never be
320
+ // SIGKILLed because of a transient procfs read failure.
321
+ const code = error?.code;
322
+ return code !== "ENOENT" && code !== "ESRCH";
386
323
  }
387
324
  }
388
325
  try {
@@ -393,18 +330,66 @@ function isChildProcessActive(pid) {
393
330
  return false;
394
331
  }
395
332
  }
333
+ const ACQUIRE_WINDOW_MS = 1000;
396
334
  /**
397
- * Acquires an exclusive non-blocking flock on lockPath using a child process.
398
- * The child process runs `flock -x -n <lockPath> sh -c 'printf READY > <ackFile>; exec cat'`.
399
- * The parent process waits for the READY handshake confirmation.
400
- * The lock file is a persistent regular file and is NEVER removed to prevent inode reuse race conditions.
335
+ * Bounded retries for a single acquisition, and the delay between them.
336
+ *
337
+ * `flock -n` also fails while a *previous* holder is still finishing its
338
+ * kernel-side teardown (see the release post-condition below): the kernel drops
339
+ * the flock only once the last process holding the descriptor is gone, which can
340
+ * lag behind the signal for a few milliseconds. Retrying inside the same
341
+ * acquisition window turns that spurious "lock is held" into a success.
342
+ *
343
+ * The budget is deliberately small because it is also spent on the legitimate
344
+ * "another process holds the lock" path (the `operation lock is held` error),
345
+ * which must stay fast: with a live owner registered the retries are skipped
346
+ * entirely (see hasLiveLockOwner), and the worst case that remains is one extra
347
+ * helper spawn plus one delay per failed attempt. Measured on the 200-round
348
+ * contention stress test (5s vitest timeout): 1.05s before this change, 1.08s
349
+ * with the release barrier only, 1.37s with the retries (424 helpers spawned
350
+ * instead of 400); a 2ms delay instead of 1ms costs 1.43s but never spawns a
351
+ * wasted helper.
401
352
  */
402
- export function acquireFlockHandle(lockPath) {
403
- mkdirSync(dirname(lockPath), { mode: 0o700, recursive: true });
404
- // Ensure persistent lock file exists and is never removed
405
- const fd = openSync(lockPath, "a", 0o600);
406
- closeSync(fd);
407
- const ackFile = `${lockPath}.ack.${process.pid}.${Date.now()}.${randomUUID()}`;
353
+ const ACQUIRE_MAX_ATTEMPTS = 4;
354
+ const ACQUIRE_RETRY_DELAY_MS = 1;
355
+ /**
356
+ * True when `<lockPath>.owner.json` names a process that is still alive, i.e. the
357
+ * lock is held on purpose rather than left behind by a holder that is currently
358
+ * being torn down. `acquireDaemonLock` writes that record, and it is dropped
359
+ * before the flock helper is signalled, so a live owner means retrying cannot
360
+ * help — that path keeps the diagnostic "lock is held" error fast.
361
+ */
362
+ function hasLiveLockOwner(lockPath) {
363
+ try {
364
+ const ownerPath = `${lockPath}.owner.json`;
365
+ if (!existsSync(ownerPath)) {
366
+ return false;
367
+ }
368
+ const data = JSON.parse(readFileSync(ownerPath, "utf8"));
369
+ if (typeof data.pid !== "number" || !Number.isInteger(data.pid) || data.pid <= 0) {
370
+ return false;
371
+ }
372
+ return isProcessRunning(data.pid);
373
+ }
374
+ catch {
375
+ return false;
376
+ }
377
+ }
378
+ /**
379
+ * Spawns one flock helper and waits for its READY handshake. On success returns
380
+ * the child together with every pid that holds its flock file descriptor (see
381
+ * readChildPids); on failure the helper has already been killed, its ack file
382
+ * removed, and null is returned.
383
+ *
384
+ * `deadline` is the caller's shared acquisition deadline (epoch ms). The helper
385
+ * window is clamped to whatever is left of it so a single attempt can never
386
+ * spend a fresh 1000ms after the retry loop already burned the previous one:
387
+ * without the clamp the worst case was 2x the documented bound (~2s), reachable
388
+ * when a helper stays alive without publishing READY (ack file unwritable while
389
+ * the lock file is writable, e.g. a full filesystem). The 1000ms ceiling itself
390
+ * is unchanged.
391
+ */
392
+ function spawnFlockHelper(lockPath, ackFile, deadline, deps) {
408
393
  const child = spawn("flock", ["-x", "-n", lockPath, "sh", "-c", `printf READY > "${ackFile}"; exec cat`], {
409
394
  detached: true,
410
395
  stdio: ["pipe", "ignore", "ignore"],
@@ -413,13 +398,19 @@ export function acquireFlockHandle(lockPath) {
413
398
  return null;
414
399
  }
415
400
  const start = Date.now();
401
+ // Remaining budget of the shared window, capped by the single-attempt ceiling.
402
+ const windowMs = Math.min(ACQUIRE_WINDOW_MS, deadline - Date.now());
416
403
  let acquired = false;
417
- while (Date.now() - start < 1000) {
404
+ let helperPids = [];
405
+ while (Date.now() - start < windowMs) {
418
406
  if (existsSync(ackFile)) {
419
407
  try {
420
408
  const content = readFileSync(ackFile, "utf8");
421
- if (content.startsWith("READY") && isChildProcessActive(child.pid)) {
409
+ if (content.startsWith("READY") && isChildProcessActive(child.pid, deps?.readProcessStat)) {
422
410
  acquired = true;
411
+ // Read the fd-sharing pids while the helper is provably alive: release()
412
+ // needs them, and they cannot be discovered after the flock parent dies.
413
+ helperPids = [child.pid, ...readChildPids(child.pid)];
423
414
  try {
424
415
  rmSync(ackFile, { force: true });
425
416
  }
@@ -430,7 +421,12 @@ export function acquireFlockHandle(lockPath) {
430
421
  catch { }
431
422
  }
432
423
  // Check if child exited (e.g. flock returned 1 because lock is held by another process)
433
- if (!isChildProcessActive(child.pid)) {
424
+ // Pre-READY, so a paused (T) helper is abandonable: it never published the
425
+ // handshake and is therefore not the protocol's holder — just our own
426
+ // half-built child. Killing it (below) frees only the flock we were trying to
427
+ // take, so no second master can result, and the attempt loop retries on the
428
+ // fast path instead of burning the window (D6 refined).
429
+ if (!isChildProcessActive(child.pid, deps?.readProcessStat, "pre-ready")) {
434
430
  break;
435
431
  }
436
432
  const until = Date.now() + 1;
@@ -440,7 +436,7 @@ export function acquireFlockHandle(lockPath) {
440
436
  rmSync(ackFile, { force: true });
441
437
  }
442
438
  catch { }
443
- if (!acquired || !isChildProcessActive(child.pid)) {
439
+ if (!acquired || !isChildProcessActive(child.pid, deps?.readProcessStat)) {
444
440
  try {
445
441
  if (child.pid)
446
442
  process.kill(-child.pid, "SIGKILL");
@@ -452,6 +448,53 @@ export function acquireFlockHandle(lockPath) {
452
448
  catch { }
453
449
  return null;
454
450
  }
451
+ return { child, helperPids };
452
+ }
453
+ /**
454
+ * Acquires an exclusive non-blocking flock on lockPath using a child process.
455
+ * The child process runs `flock -x -n <lockPath> sh -c 'printf READY > <ackFile>; exec cat'`.
456
+ * The parent process waits for the READY handshake confirmation, retrying a
457
+ * bounded number of times when the helper exits without it (that also happens
458
+ * while a previous holder is still being torn down), and gives up after
459
+ * ACQUIRE_MAX_ATTEMPTS or when the acquisition window is spent.
460
+ * The lock file is a persistent regular file and is NEVER removed to prevent inode reuse race conditions.
461
+ */
462
+ export function acquireFlockHandle(lockPath, deps) {
463
+ mkdirSync(dirname(lockPath), { mode: 0o700, recursive: true });
464
+ // Ensure persistent lock file exists and is never removed
465
+ const fd = openSync(lockPath, "a", 0o600);
466
+ closeSync(fd);
467
+ const deadline = Date.now() + ACQUIRE_WINDOW_MS;
468
+ let helper = null;
469
+ for (let attempt = 1; attempt <= ACQUIRE_MAX_ATTEMPTS; attempt += 1) {
470
+ // One ack file per attempt: a dying helper must never be able to publish the
471
+ // handshake of the next attempt (the name is unique via randomUUID anyway).
472
+ const ackFile = `${lockPath}.ack.${process.pid}.${Date.now()}.${randomUUID()}`;
473
+ helper = spawnFlockHelper(lockPath, ackFile, deadline, deps);
474
+ if (helper) {
475
+ break;
476
+ }
477
+ if (attempt === ACQUIRE_MAX_ATTEMPTS || Date.now() + ACQUIRE_RETRY_DELAY_MS >= deadline) {
478
+ break;
479
+ }
480
+ // A live registered owner means the lock is genuinely held, not mid-release:
481
+ // retrying cannot help, it would only delay the diagnostic "lock is held"
482
+ // error. Checked on both sides of the delay because the holder publishes its
483
+ // owner record a moment after its flock lands, so a contention window that is
484
+ // already owned is dropped without even waiting.
485
+ if (hasLiveLockOwner(lockPath)) {
486
+ break;
487
+ }
488
+ const until = Date.now() + ACQUIRE_RETRY_DELAY_MS;
489
+ while (Date.now() < until) { }
490
+ if (hasLiveLockOwner(lockPath)) {
491
+ break;
492
+ }
493
+ }
494
+ if (!helper) {
495
+ return null;
496
+ }
497
+ const { child, helperPids } = helper;
455
498
  child.unref();
456
499
  let released = false;
457
500
  const release = () => {
@@ -473,9 +516,17 @@ export function acquireFlockHandle(lockPath) {
473
516
  }
474
517
  catch { }
475
518
  if (child.pid) {
519
+ // Post-condition: the flock is free again. Signalling the helper is not
520
+ // enough — the kernel only drops the flock once the last process holding
521
+ // the descriptor is gone, and the helper's command child shares it, so
522
+ // waiting for the flock process alone returns while the lock is still
523
+ // held. Wait for every fd-holding helper pid inside the same best-effort
524
+ // budget; a zombie counts as gone (the kernel already closed its fds). If
525
+ // it is still held when the budget is spent we return anyway and the
526
+ // bounded acquire-side retry absorbs the remainder.
476
527
  const deadline = Date.now() + 100;
477
528
  while (Date.now() < deadline) {
478
- if (!isChildProcessActive(child.pid)) {
529
+ if (!helperPids.some((pid) => isChildProcessActive(pid, deps?.readProcessStat))) {
479
530
  break;
480
531
  }
481
532
  const until = Date.now() + 1;
@@ -508,7 +559,7 @@ export function acquireDaemonLock(lockPath, deps) {
508
559
  };
509
560
  const formatLockHeldError = (pid) => {
510
561
  const ownerInfo = pid !== undefined ? ` by PID ${pid}` : "";
511
- return `Herdsman daemon operation lock is held${ownerInfo}: ${lockPath}. 确认无 daemon 操作在跑后可删除: ${lockPath}`;
562
+ return `Herdsman daemon operation lock is held${ownerInfo}: ${lockPath}. 先看 systemctl status herdsman.service 确认 daemon 状态;仅当确认无 daemon 与 CLI 操作在跑时才可删除锁文件(删掉会让新进程在新 inode 上重新加锁成功,可能出现两个实例同时跑): ${lockPath}`;
512
563
  };
513
564
  const flockHandle = acquireFlockHandle(lockPath);
514
565
  if (!flockHandle) {
@@ -549,15 +600,6 @@ export function acquireDaemonLock(lockPath, deps) {
549
600
  flockHandle.release();
550
601
  };
551
602
  }
552
- export async function withDaemonLock(lockPath, action, deps) {
553
- const release = acquireDaemonLock(lockPath, deps);
554
- try {
555
- return await action();
556
- }
557
- finally {
558
- release();
559
- }
560
- }
561
603
  export function defaultConnectSocket(socketPath) {
562
604
  return new Promise((resolve) => {
563
605
  const socket = createConnection(socketPath);
@@ -1 +1 @@
1
- {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../../src/daemon/process-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../../src/daemon/process-manager.ts"],"names":[],"mappings":"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"}