@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.
- package/README.md +6 -13
- package/dist/src/cli/herdsman.d.ts +14 -1
- package/dist/src/cli/herdsman.d.ts.map +1 -1
- package/dist/src/cli/herdsman.js +49 -65
- package/dist/src/cli/herdsman.js.map +1 -1
- package/dist/src/daemon/agent-event-reconciler.d.ts.map +1 -1
- package/dist/src/daemon/agent-event-reconciler.js +53 -2
- package/dist/src/daemon/agent-event-reconciler.js.map +1 -1
- package/dist/src/daemon/herdr-session-watch-manager.d.ts +13 -1
- package/dist/src/daemon/herdr-session-watch-manager.d.ts.map +1 -1
- package/dist/src/daemon/herdr-session-watch-manager.js +52 -16
- package/dist/src/daemon/herdr-session-watch-manager.js.map +1 -1
- package/dist/src/daemon/observability-server.d.ts.map +1 -1
- package/dist/src/daemon/observability-server.js +16 -1
- package/dist/src/daemon/observability-server.js.map +1 -1
- package/dist/src/daemon/process-manager.d.ts +50 -49
- package/dist/src/daemon/process-manager.d.ts.map +1 -1
- package/dist/src/daemon/process-manager.js +246 -204
- package/dist/src/daemon/process-manager.js.map +1 -1
- package/dist/src/daemon/service-supervision.d.ts +68 -0
- package/dist/src/daemon/service-supervision.d.ts.map +1 -0
- package/dist/src/daemon/service-supervision.js +127 -0
- package/dist/src/daemon/service-supervision.js.map +1 -0
- package/dist/src/daemon/service.d.ts +35 -0
- package/dist/src/daemon/service.d.ts.map +1 -1
- package/dist/src/daemon/service.js +185 -27
- package/dist/src/daemon/service.js.map +1 -1
- package/dist/src/db/agent-events.d.ts +15 -0
- package/dist/src/db/agent-events.d.ts.map +1 -1
- package/dist/src/db/agent-events.js +180 -54
- package/dist/src/db/agent-events.js.map +1 -1
- package/dist/src/db/agents.js +1 -1
- package/dist/src/db/agents.js.map +1 -1
- package/dist/src/db/status-event-plans.d.ts +1 -1
- package/dist/src/db/status-event-plans.d.ts.map +1 -1
- package/dist/src/db/status-event-plans.js +5 -4
- package/dist/src/db/status-event-plans.js.map +1 -1
- package/dist/src/herdr/session-list.d.ts +11 -0
- package/dist/src/herdr/session-list.d.ts.map +1 -1
- package/dist/src/herdr/session-list.js +13 -0
- package/dist/src/herdr/session-list.js.map +1 -1
- package/dist/src/herdr/socket-client.d.ts +8 -0
- package/dist/src/herdr/socket-client.d.ts.map +1 -1
- package/dist/src/herdr/socket-client.js +43 -0
- package/dist/src/herdr/socket-client.js.map +1 -1
- package/dist/src/observability/agent-index-service.d.ts +15 -0
- package/dist/src/observability/agent-index-service.d.ts.map +1 -1
- package/dist/src/observability/agent-index-service.js +499 -135
- package/dist/src/observability/agent-index-service.js.map +1 -1
- package/dist/src/observability/agent-orchestrator-service.d.ts.map +1 -1
- package/dist/src/observability/agent-orchestrator-service.js +5 -1
- package/dist/src/observability/agent-orchestrator-service.js.map +1 -1
- package/dist/src/observability/contracts.d.ts +1 -0
- package/dist/src/observability/contracts.d.ts.map +1 -1
- package/dist/src/observability/contracts.js +8 -0
- package/dist/src/observability/contracts.js.map +1 -1
- package/drizzle/0010_legacy_degraded_cleanup.sql +1 -0
- package/drizzle/meta/0010_snapshot.json +975 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +3 -6
- package/README.ja.md +0 -153
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only supervision facts for `herdsman daemon status`.
|
|
3
|
+
*
|
|
4
|
+
* These answer "who supervises this daemon, and how many times has it
|
|
5
|
+
* restarted?" without touching any lifecycle behaviour: nothing here starts,
|
|
6
|
+
* stops, restarts or locks the daemon. Every probe is best-effort, so a
|
|
7
|
+
* missing `systemctl`, a denied `/proc` read or a wedged system manager
|
|
8
|
+
* degrades the answer instead of failing `daemon status`.
|
|
9
|
+
*
|
|
10
|
+
* Diagnostic path only: `readSystemdRestartCount` runs a *synchronous* command
|
|
11
|
+
* (`spawnSync`), which blocks the event loop for up to the probe timeout.
|
|
12
|
+
* These probes belong to `daemon status`; daemon lifecycle code must never call
|
|
13
|
+
* them.
|
|
14
|
+
*/
|
|
15
|
+
/** The systemd unit that supervises the production daemon (see AGENTS.md). */
|
|
16
|
+
export declare const HERDSMAN_SYSTEMD_UNIT = "herdsman.service";
|
|
17
|
+
/**
|
|
18
|
+
* Short, fixed timeout for the best-effort `systemctl` probe. `daemon status`
|
|
19
|
+
* is a diagnostic command, so it must never hang behind a wedged or unavailable
|
|
20
|
+
* system manager; 1.5s is far above a healthy `systemctl show` (single-digit
|
|
21
|
+
* ms) yet small enough to stay imperceptible when the manager is stuck.
|
|
22
|
+
*/
|
|
23
|
+
export declare const SUPERVISION_PROBE_TIMEOUT_MS = 1500;
|
|
24
|
+
/**
|
|
25
|
+
* Who supervises the running daemon:
|
|
26
|
+
* - `systemd:<unit>` — the daemon pid lives in that unit's cgroup inside the
|
|
27
|
+
* *system* slice, i.e. systemd's system manager owns it;
|
|
28
|
+
* - `unmanaged` — the cgroup was readable and named something, but the pid is
|
|
29
|
+
* not supervised by `herdsman.service`. That is all it says: it is **not** a
|
|
30
|
+
* claim that nothing else supervises the process, and it is not a licence to
|
|
31
|
+
* kill it;
|
|
32
|
+
* - `unknown` — no fact was available: the cgroup could not be read, or it read
|
|
33
|
+
* back empty/blank. "Nothing was read" is not the same as "not managed by
|
|
34
|
+
* that unit", so it must not be downgraded to `unmanaged`.
|
|
35
|
+
*
|
|
36
|
+
* When no daemon pid is known, this fact is not reported at all instead of
|
|
37
|
+
* being set to `unknown` (see `DaemonStatusFacts` in `process-manager.ts`).
|
|
38
|
+
*/
|
|
39
|
+
export type DaemonManagedBy = "unmanaged" | "unknown" | `systemd:${string}`;
|
|
40
|
+
/**
|
|
41
|
+
* Maps the content of `/proc/<pid>/cgroup` to a supervision fact. Pure, so it
|
|
42
|
+
* can be exercised with fabricated cgroup text. Handles both layouts:
|
|
43
|
+
* cgroup v2 `0::/system.slice/herdsman.service` and cgroup v1
|
|
44
|
+
* `1:name=systemd:/system.slice/herdsman.service`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function managedByFromCgroup(cgroup: string, unit?: string): DaemonManagedBy;
|
|
47
|
+
/** Reads `/proc/<pid>/cgroup`; undefined when procfs is absent or unreadable. */
|
|
48
|
+
export declare function readProcessCgroup(pid: number): string | undefined;
|
|
49
|
+
/** Injectable command runner so tests can supply fake `systemctl` behaviour. */
|
|
50
|
+
export type SystemctlRunner = (command: string, args: string[], timeoutMs: number) => string | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Best-effort `systemctl show <unit> -p NRestarts --value`. Returns undefined on
|
|
53
|
+
* any failure (command missing, permission denied, timeout, non-zero exit,
|
|
54
|
+
* unparsable output) and never throws, so the caller can omit the field.
|
|
55
|
+
*
|
|
56
|
+
* How to read the number: it is systemd's `NRestarts` for the *unit*, and
|
|
57
|
+
* `systemctl reset-failed`, a `systemctl stop` + `start` pair, or a unit that
|
|
58
|
+
* is not currently loaded all reset it to 0. So `0` means "systemd has not
|
|
59
|
+
* restarted this unit since it last loaded it", never "this daemon has never
|
|
60
|
+
* crashed".
|
|
61
|
+
*/
|
|
62
|
+
export declare function readSystemdRestartCount(options?: {
|
|
63
|
+
command?: string;
|
|
64
|
+
runner?: SystemctlRunner;
|
|
65
|
+
timeoutMs?: number;
|
|
66
|
+
unit?: string;
|
|
67
|
+
}): number | undefined;
|
|
68
|
+
//# sourceMappingURL=service-supervision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-supervision.d.ts","sourceRoot":"","sources":["../../../src/daemon/service-supervision.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,MAAM,EAAE,CAAC;AAe5E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,MAA8B,GACnC,eAAe,CAkBjB;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjE;AAED,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,MAAM,KACd,MAAM,GAAG,SAAS,CAAC;AAgCxB;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,SAAS,CAgBrB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
/**
|
|
4
|
+
* Read-only supervision facts for `herdsman daemon status`.
|
|
5
|
+
*
|
|
6
|
+
* These answer "who supervises this daemon, and how many times has it
|
|
7
|
+
* restarted?" without touching any lifecycle behaviour: nothing here starts,
|
|
8
|
+
* stops, restarts or locks the daemon. Every probe is best-effort, so a
|
|
9
|
+
* missing `systemctl`, a denied `/proc` read or a wedged system manager
|
|
10
|
+
* degrades the answer instead of failing `daemon status`.
|
|
11
|
+
*
|
|
12
|
+
* Diagnostic path only: `readSystemdRestartCount` runs a *synchronous* command
|
|
13
|
+
* (`spawnSync`), which blocks the event loop for up to the probe timeout.
|
|
14
|
+
* These probes belong to `daemon status`; daemon lifecycle code must never call
|
|
15
|
+
* them.
|
|
16
|
+
*/
|
|
17
|
+
/** The systemd unit that supervises the production daemon (see AGENTS.md). */
|
|
18
|
+
export const HERDSMAN_SYSTEMD_UNIT = "herdsman.service";
|
|
19
|
+
/**
|
|
20
|
+
* Short, fixed timeout for the best-effort `systemctl` probe. `daemon status`
|
|
21
|
+
* is a diagnostic command, so it must never hang behind a wedged or unavailable
|
|
22
|
+
* system manager; 1.5s is far above a healthy `systemctl show` (single-digit
|
|
23
|
+
* ms) yet small enough to stay imperceptible when the manager is stuck.
|
|
24
|
+
*/
|
|
25
|
+
export const SUPERVISION_PROBE_TIMEOUT_MS = 1500;
|
|
26
|
+
/** Prefix of the system manager's cgroup subtree, identical in cgroup v1 and v2. */
|
|
27
|
+
const SYSTEM_SLICE_PREFIX = "/system.slice/";
|
|
28
|
+
/**
|
|
29
|
+
* True when `path` is the unit's own cgroup or a nested cgroup inside it. The
|
|
30
|
+
* comparison is on the full path (not the basename) with a trailing-slash guard
|
|
31
|
+
* so `herdsman.service.dev` is not mistaken for the unit itself.
|
|
32
|
+
*/
|
|
33
|
+
function isSystemUnitCgroupPath(path, unit) {
|
|
34
|
+
const unitPath = `${SYSTEM_SLICE_PREFIX}${unit}`;
|
|
35
|
+
return path === unitPath || path.startsWith(`${unitPath}/`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Maps the content of `/proc/<pid>/cgroup` to a supervision fact. Pure, so it
|
|
39
|
+
* can be exercised with fabricated cgroup text. Handles both layouts:
|
|
40
|
+
* cgroup v2 `0::/system.slice/herdsman.service` and cgroup v1
|
|
41
|
+
* `1:name=systemd:/system.slice/herdsman.service`.
|
|
42
|
+
*/
|
|
43
|
+
export function managedByFromCgroup(cgroup, unit = HERDSMAN_SYSTEMD_UNIT) {
|
|
44
|
+
let sawContent = false;
|
|
45
|
+
for (const line of cgroup.split("\n")) {
|
|
46
|
+
const trimmed = line.trim();
|
|
47
|
+
if (trimmed === "")
|
|
48
|
+
continue;
|
|
49
|
+
sawContent = true;
|
|
50
|
+
const path = trimmed.slice(trimmed.lastIndexOf(":") + 1);
|
|
51
|
+
// The path must be the unit's own cgroup *and* live in the system slice.
|
|
52
|
+
// The slice check is not cosmetic: a user-session unit of the same name
|
|
53
|
+
// (`/user.slice/user-1000.slice/user@1000.service/app.slice/herdsman.service`)
|
|
54
|
+
// ends in the very same basename, so a basename-only match reported it as
|
|
55
|
+
// `systemd:herdsman.service` — the exact same string as the system unit —
|
|
56
|
+
// and an operator following that would `systemctl restart` the wrong unit.
|
|
57
|
+
if (isSystemUnitCgroupPath(path, unit))
|
|
58
|
+
return `systemd:${unit}`;
|
|
59
|
+
}
|
|
60
|
+
// Blank/empty content means the read produced no fact at all, which is
|
|
61
|
+
// `unknown`, not "not managed by that unit".
|
|
62
|
+
return sawContent ? "unmanaged" : "unknown";
|
|
63
|
+
}
|
|
64
|
+
/** Reads `/proc/<pid>/cgroup`; undefined when procfs is absent or unreadable. */
|
|
65
|
+
export function readProcessCgroup(pid) {
|
|
66
|
+
try {
|
|
67
|
+
return readFileSync(`/proc/${pid}/cgroup`, "utf8");
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Default runner: bounded `spawnSync` that never throws. On spawn error, a
|
|
75
|
+
* non-zero exit (including a timeout kill) or a missing stdout it reports
|
|
76
|
+
* `undefined`, i.e. "no fact available".
|
|
77
|
+
*
|
|
78
|
+
* `killSignal: "SIGKILL"` is what makes `timeout` a hard bound. The default is
|
|
79
|
+
* SIGTERM, which a child may simply ignore — and an ignoring child then keeps
|
|
80
|
+
* this *synchronous* call parked for its whole lifetime, so `daemon status`
|
|
81
|
+
* hangs behind it (measured on this machine with a `trap '' TERM; exec sleep 8`
|
|
82
|
+
* shim and `timeoutMs: 300`: 8003ms with the default signal, 301ms with
|
|
83
|
+
* SIGKILL). SIGKILL cannot be ignored, and `systemctl show` is a read-only
|
|
84
|
+
* client with nothing to clean up, so killing it hard is safe. Same lesson as
|
|
85
|
+
* the `execFile` timeout in `src/herdr/session-list.ts`.
|
|
86
|
+
*
|
|
87
|
+
* Diagnostic path only: this blocks the event loop for up to `timeoutMs`.
|
|
88
|
+
*/
|
|
89
|
+
function defaultSystemctlRunner(command, args, timeoutMs) {
|
|
90
|
+
const result = spawnSync(command, args, {
|
|
91
|
+
encoding: "utf8",
|
|
92
|
+
killSignal: "SIGKILL",
|
|
93
|
+
timeout: timeoutMs,
|
|
94
|
+
});
|
|
95
|
+
if (result.error || result.status !== 0)
|
|
96
|
+
return undefined;
|
|
97
|
+
return typeof result.stdout === "string" ? result.stdout : undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Best-effort `systemctl show <unit> -p NRestarts --value`. Returns undefined on
|
|
101
|
+
* any failure (command missing, permission denied, timeout, non-zero exit,
|
|
102
|
+
* unparsable output) and never throws, so the caller can omit the field.
|
|
103
|
+
*
|
|
104
|
+
* How to read the number: it is systemd's `NRestarts` for the *unit*, and
|
|
105
|
+
* `systemctl reset-failed`, a `systemctl stop` + `start` pair, or a unit that
|
|
106
|
+
* is not currently loaded all reset it to 0. So `0` means "systemd has not
|
|
107
|
+
* restarted this unit since it last loaded it", never "this daemon has never
|
|
108
|
+
* crashed".
|
|
109
|
+
*/
|
|
110
|
+
export function readSystemdRestartCount(options) {
|
|
111
|
+
const unit = options?.unit ?? HERDSMAN_SYSTEMD_UNIT;
|
|
112
|
+
const command = options?.command ?? "systemctl";
|
|
113
|
+
const timeoutMs = options?.timeoutMs ?? SUPERVISION_PROBE_TIMEOUT_MS;
|
|
114
|
+
const runner = options?.runner ?? defaultSystemctlRunner;
|
|
115
|
+
let stdout;
|
|
116
|
+
try {
|
|
117
|
+
stdout = runner(command, ["show", unit, "-p", "NRestarts", "--value"], timeoutMs);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
if (stdout === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
const value = Number(stdout.trim());
|
|
125
|
+
return Number.isInteger(value) && value >= 0 ? value : undefined;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=service-supervision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-supervision.js","sourceRoot":"","sources":["../../../src/daemon/service-supervision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { applyMigrations } from "../db/apply-migrations.js";
|
|
2
|
+
import { openSqlite } from "../db/client.js";
|
|
1
3
|
import { type HerdrSessionListRunner } from "../herdr/session-list.js";
|
|
2
4
|
/**
|
|
3
5
|
* Periodic reconcile cadence. The 7-day (settled events) and 30-day (released
|
|
@@ -9,6 +11,36 @@ import { type HerdrSessionListRunner } from "../herdr/session-list.js";
|
|
|
9
11
|
* per-tick socket traffic.
|
|
10
12
|
*/
|
|
11
13
|
export declare const RECONCILE_INTERVAL_MS: number;
|
|
14
|
+
/**
|
|
15
|
+
* Ceiling for the whole shutdown sequence. It must stay clearly below the unit's
|
|
16
|
+
* TimeoutStopSec (10s in /etc/systemd/system/herdsman.service): a shutdown that
|
|
17
|
+
* outlives it is SIGKILLed, which skips the finally cleanup (instance lock, pid
|
|
18
|
+
* file, helper child) and leaves the daemon half-stopped. Every step is bounded
|
|
19
|
+
* by whatever budget is left, so a single wedged step cannot run the sequence
|
|
20
|
+
* past this ceiling.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SHUTDOWN_BUDGET_MS = 5000;
|
|
23
|
+
/**
|
|
24
|
+
* Floor granted to a step once the budget is spent. The sequence may therefore
|
|
25
|
+
* overshoot the budget by at most (steps - 1) * SHUTDOWN_MIN_STEP_MS, which still
|
|
26
|
+
* leaves several seconds of headroom under TimeoutStopSec; in exchange no step is
|
|
27
|
+
* skipped outright, so the pid file and socket are always cleaned up.
|
|
28
|
+
*/
|
|
29
|
+
export declare const SHUTDOWN_MIN_STEP_MS = 250;
|
|
30
|
+
export type ShutdownStep = {
|
|
31
|
+
name: string;
|
|
32
|
+
run: () => Promise<unknown> | unknown;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Runs shutdown steps in order under one shared budget. Each step is raced
|
|
36
|
+
* against the time left: a step that overruns is logged and abandoned so the
|
|
37
|
+
* next step (and the caller's finally cleanup) still runs. Failures that are not
|
|
38
|
+
* timeouts are not swallowed — they reject the sequence as before, so a genuine
|
|
39
|
+
* shutdown error still surfaces instead of hiding behind the budget.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runShutdownSteps(steps: readonly ShutdownStep[], options?: {
|
|
42
|
+
budgetMs?: number;
|
|
43
|
+
}): Promise<void>;
|
|
12
44
|
type ReconcileRun = () => Promise<unknown>;
|
|
13
45
|
type IntervalHandle = ReturnType<typeof setInterval>;
|
|
14
46
|
/**
|
|
@@ -33,14 +65,17 @@ export declare class PeriodicReconcileScheduler {
|
|
|
33
65
|
stop(): Promise<void>;
|
|
34
66
|
}
|
|
35
67
|
export declare function runObservabilityDaemonService(input?: {
|
|
68
|
+
applyMigrations?: typeof applyMigrations;
|
|
36
69
|
connectSocket?: (socketPath: string) => Promise<boolean>;
|
|
37
70
|
environment?: NodeJS.ProcessEnv | undefined;
|
|
38
71
|
exit?: (code?: number) => void;
|
|
72
|
+
openSqlite?: typeof openSqlite;
|
|
39
73
|
pid?: number;
|
|
40
74
|
reconcileClearInterval?: (handle: ReturnType<typeof setInterval>) => void;
|
|
41
75
|
reconcileIntervalMs?: number;
|
|
42
76
|
reconcileSetInterval?: (callback: () => void, delay: number) => ReturnType<typeof setInterval>;
|
|
43
77
|
sessionList?: HerdrSessionListRunner;
|
|
78
|
+
shutdownBudgetMs?: number;
|
|
44
79
|
signalTarget?: {
|
|
45
80
|
off?: (event: "SIGINT" | "SIGTERM", listener: () => void | Promise<void>) => void;
|
|
46
81
|
once: (event: "SIGINT" | "SIGTERM", listener: () => void | Promise<void>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAUpG;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACvC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAmBD,KAAK,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3C,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAErD;;;;;;;;;GASG;AACH,qBAAa,0BAA0B;;gBAQzB,OAAO,EAAE;QACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;QACjD,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,YAAY,CAAC;QAClB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,cAAc,CAAC;KACvE;IAOD,KAAK,IAAI,IAAI;IAeP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B;AAED,wBAAsB,6BAA6B,CACjD,KAAK,GAAE;IACL,eAAe,CAAC,EAAE,OAAO,eAAe,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC/F,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;QAClF,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;KACnF,CAAC;CACE,GACL,OAAO,CAAC,IAAI,CAAC,CAiSf;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAahE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { chmodSync, existsSync, mkdirSync } from "node:fs";
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, rmSync } from "node:fs";
|
|
2
2
|
import { dirname, resolve } from "node:path";
|
|
3
3
|
import { env, exit } from "node:process";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -33,6 +33,78 @@ import { ObservabilityRpcServer } from "./observability-server.js";
|
|
|
33
33
|
* per-tick socket traffic.
|
|
34
34
|
*/
|
|
35
35
|
export const RECONCILE_INTERVAL_MS = 15 * 60 * 1000;
|
|
36
|
+
/**
|
|
37
|
+
* Ceiling for the whole shutdown sequence. It must stay clearly below the unit's
|
|
38
|
+
* TimeoutStopSec (10s in /etc/systemd/system/herdsman.service): a shutdown that
|
|
39
|
+
* outlives it is SIGKILLed, which skips the finally cleanup (instance lock, pid
|
|
40
|
+
* file, helper child) and leaves the daemon half-stopped. Every step is bounded
|
|
41
|
+
* by whatever budget is left, so a single wedged step cannot run the sequence
|
|
42
|
+
* past this ceiling.
|
|
43
|
+
*/
|
|
44
|
+
export const SHUTDOWN_BUDGET_MS = 5_000;
|
|
45
|
+
/**
|
|
46
|
+
* Floor granted to a step once the budget is spent. The sequence may therefore
|
|
47
|
+
* overshoot the budget by at most (steps - 1) * SHUTDOWN_MIN_STEP_MS, which still
|
|
48
|
+
* leaves several seconds of headroom under TimeoutStopSec; in exchange no step is
|
|
49
|
+
* skipped outright, so the pid file and socket are always cleaned up.
|
|
50
|
+
*/
|
|
51
|
+
export const SHUTDOWN_MIN_STEP_MS = 250;
|
|
52
|
+
/**
|
|
53
|
+
* Runs shutdown steps in order under one shared budget. Each step is raced
|
|
54
|
+
* against the time left: a step that overruns is logged and abandoned so the
|
|
55
|
+
* next step (and the caller's finally cleanup) still runs. Failures that are not
|
|
56
|
+
* timeouts are not swallowed — they reject the sequence as before, so a genuine
|
|
57
|
+
* shutdown error still surfaces instead of hiding behind the budget.
|
|
58
|
+
*/
|
|
59
|
+
export async function runShutdownSteps(steps, options = {}) {
|
|
60
|
+
const budgetMs = options.budgetMs ?? SHUTDOWN_BUDGET_MS;
|
|
61
|
+
const startedAt = Date.now();
|
|
62
|
+
const deadlineMs = startedAt + budgetMs;
|
|
63
|
+
for (const step of steps) {
|
|
64
|
+
const stepStartedAt = Date.now();
|
|
65
|
+
const remainingMs = deadlineMs - stepStartedAt;
|
|
66
|
+
const timeoutMs = Math.max(remainingMs, SHUTDOWN_MIN_STEP_MS);
|
|
67
|
+
console.log("Herdsman daemon shutdown step starting", {
|
|
68
|
+
budgetRemainingMs: Math.max(remainingMs, 0),
|
|
69
|
+
step: step.name,
|
|
70
|
+
timeoutMs,
|
|
71
|
+
});
|
|
72
|
+
const timedOut = await raceShutdownStep(step, timeoutMs);
|
|
73
|
+
const elapsedMs = Date.now() - stepStartedAt;
|
|
74
|
+
if (timedOut) {
|
|
75
|
+
console.warn("Herdsman daemon shutdown step timed out; continuing", {
|
|
76
|
+
budgetMs,
|
|
77
|
+
elapsedMs,
|
|
78
|
+
step: step.name,
|
|
79
|
+
timeoutMs,
|
|
80
|
+
});
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
console.log("Herdsman daemon shutdown step finished", { elapsedMs, step: step.name });
|
|
84
|
+
}
|
|
85
|
+
console.log("Herdsman daemon shutdown steps finished", {
|
|
86
|
+
budgetMs,
|
|
87
|
+
elapsedMs: Date.now() - startedAt,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Returns true when the timeout won; a step rejection propagates unchanged. */
|
|
91
|
+
async function raceShutdownStep(step, timeoutMs) {
|
|
92
|
+
let timer;
|
|
93
|
+
try {
|
|
94
|
+
const timedOut = new Promise((resolve) => {
|
|
95
|
+
timer = setTimeout(() => resolve(true), timeoutMs);
|
|
96
|
+
timer.unref();
|
|
97
|
+
});
|
|
98
|
+
const finished = Promise.resolve()
|
|
99
|
+
.then(() => step.run())
|
|
100
|
+
.then(() => false);
|
|
101
|
+
return await Promise.race([finished, timedOut]);
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
if (timer !== undefined)
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
36
108
|
/**
|
|
37
109
|
* Runs the reconcile cycle on a fixed cadence while guaranteeing at most one
|
|
38
110
|
* in-flight run: a tick that fires while the previous run is still executing is
|
|
@@ -89,7 +161,25 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
89
161
|
chmodSync(dirname(runtime.paths.dbPath), 0o700);
|
|
90
162
|
mkdirSync(dirname(runtime.paths.socketPath), { mode: 0o700, recursive: true });
|
|
91
163
|
chmodSync(dirname(runtime.paths.socketPath), 0o700);
|
|
92
|
-
const
|
|
164
|
+
const currentPid = input.pid ?? process.pid;
|
|
165
|
+
let releaseInstanceLock;
|
|
166
|
+
const releaseInstanceLockIfHeld = () => {
|
|
167
|
+
if (releaseInstanceLock) {
|
|
168
|
+
releaseInstanceLock();
|
|
169
|
+
releaseInstanceLock = undefined;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
// The bare daemon entrypoint (herdsman-daemon.js) takes an instance lock so
|
|
173
|
+
// two daemon processes cannot share one HERDSMAN_HOME. It is acquired before
|
|
174
|
+
// the SQLite database is opened: a second or orphaned daemon is rejected
|
|
175
|
+
// while it has not touched (opened, migrated, or locked) the database at all.
|
|
176
|
+
// The lock is released on graceful stop and on every startup failure path.
|
|
177
|
+
releaseInstanceLock = acquireDaemonLock(daemonInstanceLockPath(runtime.paths.pidPath), {
|
|
178
|
+
pid: currentPid,
|
|
179
|
+
});
|
|
180
|
+
const openSqliteImpl = input.openSqlite ?? openSqlite;
|
|
181
|
+
const applyMigrationsImpl = input.applyMigrations ?? applyMigrations;
|
|
182
|
+
const { sqlite } = openSqliteImpl(runtime.paths.dbPath);
|
|
93
183
|
for (const path of [
|
|
94
184
|
runtime.paths.dbPath,
|
|
95
185
|
`${runtime.paths.dbPath}-wal`,
|
|
@@ -98,7 +188,7 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
98
188
|
if (existsSync(path))
|
|
99
189
|
chmodSync(path, 0o600);
|
|
100
190
|
}
|
|
101
|
-
|
|
191
|
+
applyMigrationsImpl(sqlite, {
|
|
102
192
|
migrationsFolder: resolveMigrationsFolder(dirname(fileURLToPath(import.meta.url))),
|
|
103
193
|
});
|
|
104
194
|
const herdrSessions = new HerdrSessionStore(sqlite);
|
|
@@ -121,8 +211,16 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
121
211
|
scopes: agentOrchestratorScopes,
|
|
122
212
|
});
|
|
123
213
|
const turnCompletions = new TurnCompletionRegistry();
|
|
214
|
+
let publishEvent = (_event) => { };
|
|
215
|
+
// One controller drives every cancellable wait in the daemon. It is aborted at
|
|
216
|
+
// the start of stop(), so in-flight status waits (history-advance window, turn
|
|
217
|
+
// waits) and watcher loops end immediately instead of running out their own
|
|
218
|
+
// 30s / 12s windows and pushing the daemon past TimeoutStopSec.
|
|
219
|
+
const shutdownController = new AbortController();
|
|
124
220
|
const index = new AgentIndexService({
|
|
125
221
|
context: daemonServices.context,
|
|
222
|
+
onAgentEvent: (event) => publishEvent(event), // 闭包注入
|
|
223
|
+
shutdownSignal: shutdownController.signal,
|
|
126
224
|
stores: {
|
|
127
225
|
agentEvents,
|
|
128
226
|
agentHistoryCache,
|
|
@@ -156,6 +254,7 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
156
254
|
turnCompletions,
|
|
157
255
|
});
|
|
158
256
|
connectedTerminal = (input) => server.isTerminalConnected(input);
|
|
257
|
+
publishEvent = (event) => server.publishAgentEvent(event); // 接通推送
|
|
159
258
|
const watchManager = new HerdrSessionWatchManager({
|
|
160
259
|
agents,
|
|
161
260
|
herdrSessions,
|
|
@@ -164,6 +263,7 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
164
263
|
onAgentEvent: (event) => server.publishAgentEvent(event),
|
|
165
264
|
onAgentIndexRefreshed: (refreshed) => server.reconcileAgentLocations(refreshed),
|
|
166
265
|
sessionList,
|
|
266
|
+
shutdownSignal: shutdownController.signal,
|
|
167
267
|
});
|
|
168
268
|
const onUnhandledRejection = (reason) => {
|
|
169
269
|
console.error("Herdsman daemon unhandled rejection", reason);
|
|
@@ -173,30 +273,80 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
173
273
|
};
|
|
174
274
|
process.on("unhandledRejection", onUnhandledRejection);
|
|
175
275
|
process.on("uncaughtException", onUncaughtException);
|
|
176
|
-
const currentPid = input.pid ?? process.pid;
|
|
177
276
|
const signalTarget = input.signalTarget ?? process;
|
|
178
277
|
const doExit = input.exit ?? exit;
|
|
278
|
+
const shutdownBudgetMs = input.shutdownBudgetMs ?? SHUTDOWN_BUDGET_MS;
|
|
179
279
|
// Register signal handlers before the first await that can block (server
|
|
180
280
|
// start, reconcile): once the pid file is written the daemon must always
|
|
181
281
|
// clean it up on a graceful shutdown, even if startup is still in progress.
|
|
182
282
|
let reconcileScheduler;
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
283
|
+
let stopping = false;
|
|
284
|
+
let exitRequested = false;
|
|
285
|
+
// The forced-exit path can win the race against the graceful one; whichever
|
|
286
|
+
// gets there first decides the exit code, and the loser must not exit again.
|
|
287
|
+
const requestExit = (code) => {
|
|
288
|
+
if (exitRequested)
|
|
289
|
+
return;
|
|
290
|
+
exitRequested = true;
|
|
291
|
+
doExit(code);
|
|
292
|
+
};
|
|
293
|
+
// A second SIGTERM/SIGINT means the first shutdown is not converging (or the
|
|
294
|
+
// supervisor is about to SIGKILL). Re-arming through these handlers keeps that
|
|
295
|
+
// signal away from Node's default action, which would kill the process before
|
|
296
|
+
// the finally cleanup and leave the pid file, socket and instance lock behind.
|
|
297
|
+
const onSecondSignal = () => {
|
|
298
|
+
console.warn("Herdsman daemon received a second shutdown signal; forcing exit", {
|
|
299
|
+
pid: currentPid,
|
|
300
|
+
});
|
|
301
|
+
try {
|
|
302
|
+
removeDaemonPidFile(runtime.paths.pidPath, currentPid);
|
|
303
|
+
}
|
|
304
|
+
catch { }
|
|
305
|
+
try {
|
|
306
|
+
rmSync(runtime.paths.socketPath, { force: true });
|
|
307
|
+
}
|
|
308
|
+
catch { }
|
|
309
|
+
try {
|
|
310
|
+
releaseInstanceLockIfHeld();
|
|
188
311
|
}
|
|
312
|
+
catch { }
|
|
313
|
+
// Exit 0 on purpose: this is still an intentional stop, and a non-zero code
|
|
314
|
+
// would make `Restart=on-failure` pull the daemon back up.
|
|
315
|
+
requestExit(0);
|
|
189
316
|
};
|
|
190
317
|
const stop = async () => {
|
|
318
|
+
if (stopping)
|
|
319
|
+
return;
|
|
320
|
+
stopping = true;
|
|
321
|
+
detachSignalHandlers();
|
|
322
|
+
attachSignalHandlers(onSecondSignal);
|
|
323
|
+
const startedAt = Date.now();
|
|
191
324
|
let exitCode = 0;
|
|
325
|
+
console.log("Herdsman daemon shutdown starting", {
|
|
326
|
+
budgetMs: shutdownBudgetMs,
|
|
327
|
+
pid: currentPid,
|
|
328
|
+
});
|
|
192
329
|
try {
|
|
193
330
|
process.off("unhandledRejection", onUnhandledRejection);
|
|
194
331
|
process.off("uncaughtException", onUncaughtException);
|
|
195
332
|
index.stopWaitingHistoryRetries();
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
333
|
+
// Abort before draining: waits that are already in flight end now instead
|
|
334
|
+
// of holding the drain open for their own window.
|
|
335
|
+
shutdownController.abort();
|
|
336
|
+
console.log("Herdsman daemon shutdown aborted in-flight waits", {
|
|
337
|
+
elapsedMs: Date.now() - startedAt,
|
|
338
|
+
});
|
|
339
|
+
await runShutdownSteps([
|
|
340
|
+
{ name: "index.drainInFlightPlans", run: () => index.drainInFlightPlans() },
|
|
341
|
+
{
|
|
342
|
+
name: "reconcileScheduler.stop",
|
|
343
|
+
run: async () => {
|
|
344
|
+
await reconcileScheduler?.stop();
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
{ name: "watchManager.stop", run: () => watchManager.stop() },
|
|
348
|
+
{ name: "server.stop", run: () => server.stop() },
|
|
349
|
+
], { budgetMs: shutdownBudgetMs });
|
|
200
350
|
sqlite.close();
|
|
201
351
|
}
|
|
202
352
|
catch (error) {
|
|
@@ -206,19 +356,27 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
206
356
|
finally {
|
|
207
357
|
removeDaemonPidFile(runtime.paths.pidPath, currentPid);
|
|
208
358
|
releaseInstanceLockIfHeld();
|
|
209
|
-
|
|
359
|
+
console.log("Herdsman daemon shutdown finished", {
|
|
360
|
+
elapsedMs: Date.now() - startedAt,
|
|
361
|
+
exitCode,
|
|
362
|
+
});
|
|
363
|
+
requestExit(exitCode);
|
|
210
364
|
}
|
|
211
365
|
};
|
|
212
|
-
|
|
213
|
-
|
|
366
|
+
const attachSignalHandlers = (handler) => {
|
|
367
|
+
signalTarget.once("SIGINT", handler);
|
|
368
|
+
signalTarget.once("SIGTERM", handler);
|
|
369
|
+
};
|
|
370
|
+
const detachSignalHandlers = () => {
|
|
371
|
+
if (typeof signalTarget.off !== "function")
|
|
372
|
+
return;
|
|
373
|
+
signalTarget.off("SIGINT", stop);
|
|
374
|
+
signalTarget.off("SIGTERM", stop);
|
|
375
|
+
signalTarget.off("SIGINT", onSecondSignal);
|
|
376
|
+
signalTarget.off("SIGTERM", onSecondSignal);
|
|
377
|
+
};
|
|
378
|
+
attachSignalHandlers(stop);
|
|
214
379
|
try {
|
|
215
|
-
// The bare daemon entrypoint (herdsman-daemon.js) takes an instance lock
|
|
216
|
-
// distinct from the CLI operation lock so two daemon processes cannot
|
|
217
|
-
// share one HERDSMAN_HOME even when neither goes through the CLI. The lock
|
|
218
|
-
// is released on graceful stop and on every startup failure path.
|
|
219
|
-
releaseInstanceLock = acquireDaemonLock(daemonInstanceLockPath(runtime.paths.pidPath), {
|
|
220
|
-
pid: currentPid,
|
|
221
|
-
});
|
|
222
380
|
await server.start();
|
|
223
381
|
writeDaemonPidFile(runtime.paths.pidPath, currentPid);
|
|
224
382
|
await reconciler.reconcile({ releaseStaleOwners: false });
|
|
@@ -250,10 +408,10 @@ export async function runObservabilityDaemonService(input = {}) {
|
|
|
250
408
|
catch (error) {
|
|
251
409
|
process.off("unhandledRejection", onUnhandledRejection);
|
|
252
410
|
process.off("uncaughtException", onUncaughtException);
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
411
|
+
detachSignalHandlers();
|
|
412
|
+
// Same abort as the graceful path: a half-started watcher must not keep its
|
|
413
|
+
// socket (and the failing startup) alive.
|
|
414
|
+
shutdownController.abort();
|
|
257
415
|
try {
|
|
258
416
|
await reconcileScheduler?.stop();
|
|
259
417
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/daemon/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,7 +67,22 @@ export declare class AgentEventStore {
|
|
|
67
67
|
paneGeneration?: string | null;
|
|
68
68
|
invalidatedReason?: string;
|
|
69
69
|
}): void;
|
|
70
|
+
/**
|
|
71
|
+
* Direct invalidatePane without wrapping in a transaction.
|
|
72
|
+
*
|
|
73
|
+
* ONLY call this when the caller already holds an SQLite transaction
|
|
74
|
+
* (for example from AgentStore.replaceForSession). Calling this outside
|
|
75
|
+
* an explicit transaction will leave the two-step invalidation non-atomic
|
|
76
|
+
* with respect to other concurrent writers.
|
|
77
|
+
*/
|
|
78
|
+
invalidatePaneDirect(input: {
|
|
79
|
+
herdrSessionName: string;
|
|
80
|
+
paneId: string;
|
|
81
|
+
paneGeneration?: string | null;
|
|
82
|
+
invalidatedReason?: string;
|
|
83
|
+
}): void;
|
|
70
84
|
listReconcileCandidates(limit?: number, afterId?: number): AgentEventRecord[];
|
|
85
|
+
markRetainedInvalidated(id: number): boolean;
|
|
71
86
|
deleteReconcileCandidate(id: number): boolean;
|
|
72
87
|
/**
|
|
73
88
|
* Physically removes invalidated events older than the given age, measured from
|