@phigon/observer 8.1.0 → 8.3.0
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 +244 -18
- package/dist/bin/guardian-runner-darwin-amd64 +0 -0
- package/dist/bin/guardian-runner-darwin-arm64 +0 -0
- package/dist/bin/guardian-runner-linux-amd64 +0 -0
- package/dist/bin/guardian-runner-linux-arm64 +0 -0
- package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
- package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
- package/dist/src/abortable-delay.d.ts +10 -0
- package/dist/src/abortable-delay.d.ts.map +1 -0
- package/dist/src/abortable-delay.js +21 -0
- package/dist/src/abortable-delay.js.map +1 -0
- package/dist/src/action-policy.d.ts.map +1 -1
- package/dist/src/action-policy.js +4 -2
- package/dist/src/action-policy.js.map +1 -1
- package/dist/src/activity/adapters/claude.d.ts.map +1 -1
- package/dist/src/activity/adapters/claude.js +28 -2
- package/dist/src/activity/adapters/claude.js.map +1 -1
- package/dist/src/activity/adapters/cline-task.d.ts +7 -0
- package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline-task.js +197 -0
- package/dist/src/activity/adapters/cline-task.js.map +1 -0
- package/dist/src/activity/adapters/cline.d.ts +3 -0
- package/dist/src/activity/adapters/cline.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline.js +102 -0
- package/dist/src/activity/adapters/cline.js.map +1 -0
- package/dist/src/activity/adapters/codex.d.ts.map +1 -1
- package/dist/src/activity/adapters/codex.js +76 -0
- package/dist/src/activity/adapters/codex.js.map +1 -1
- package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
- package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
- package/dist/src/activity/adapters/copilot-chat.js +176 -0
- package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
- package/dist/src/activity/adapters/copilot.d.ts +2 -1
- package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
- package/dist/src/activity/adapters/copilot.js +173 -2
- package/dist/src/activity/adapters/copilot.js.map +1 -1
- package/dist/src/activity/adapters/cursor.d.ts +3 -0
- package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
- package/dist/src/activity/adapters/cursor.js +86 -0
- package/dist/src/activity/adapters/cursor.js.map +1 -0
- package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
- package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
- package/dist/src/activity/adapters/factory-droid.js +126 -0
- package/dist/src/activity/adapters/factory-droid.js.map +1 -0
- package/dist/src/activity/adapters/gemini.d.ts +3 -0
- package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
- package/dist/src/activity/adapters/gemini.js +177 -0
- package/dist/src/activity/adapters/gemini.js.map +1 -0
- package/dist/src/activity/adapters/goose.d.ts +3 -0
- package/dist/src/activity/adapters/goose.d.ts.map +1 -0
- package/dist/src/activity/adapters/goose.js +116 -0
- package/dist/src/activity/adapters/goose.js.map +1 -0
- package/dist/src/activity/adapters/kiro.d.ts +3 -0
- package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
- package/dist/src/activity/adapters/kiro.js +47 -0
- package/dist/src/activity/adapters/kiro.js.map +1 -0
- package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -1
- package/dist/src/activity/adapters/openai-compatible.js +9 -1
- package/dist/src/activity/adapters/openai-compatible.js.map +1 -1
- package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
- package/dist/src/activity/adapters/opencode.js +108 -1
- package/dist/src/activity/adapters/opencode.js.map +1 -1
- package/dist/src/activity/adapters/zed.d.ts +3 -0
- package/dist/src/activity/adapters/zed.d.ts.map +1 -0
- package/dist/src/activity/adapters/zed.js +134 -0
- package/dist/src/activity/adapters/zed.js.map +1 -0
- package/dist/src/activity/collector.d.ts +43 -1
- package/dist/src/activity/collector.d.ts.map +1 -1
- package/dist/src/activity/collector.js +490 -77
- package/dist/src/activity/collector.js.map +1 -1
- package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
- package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/goose-sqlite-source.js +274 -0
- package/dist/src/activity/goose-sqlite-source.js.map +1 -0
- package/dist/src/activity/index.d.ts +3 -0
- package/dist/src/activity/index.d.ts.map +1 -1
- package/dist/src/activity/index.js +3 -0
- package/dist/src/activity/index.js.map +1 -1
- package/dist/src/activity/ingest.d.ts +9 -0
- package/dist/src/activity/ingest.d.ts.map +1 -1
- package/dist/src/activity/ingest.js +94 -4
- package/dist/src/activity/ingest.js.map +1 -1
- package/dist/src/activity/json-document-source.d.ts +151 -0
- package/dist/src/activity/json-document-source.d.ts.map +1 -0
- package/dist/src/activity/json-document-source.js +586 -0
- package/dist/src/activity/json-document-source.js.map +1 -0
- package/dist/src/activity/native-capabilities.d.ts.map +1 -1
- package/dist/src/activity/native-capabilities.js +8 -12
- package/dist/src/activity/native-capabilities.js.map +1 -1
- package/dist/src/activity/normalize.d.ts.map +1 -1
- package/dist/src/activity/normalize.js +64 -6
- package/dist/src/activity/normalize.js.map +1 -1
- package/dist/src/activity/opencode-message-tables.d.ts +87 -0
- package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
- package/dist/src/activity/opencode-message-tables.js +546 -0
- package/dist/src/activity/opencode-message-tables.js.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
- package/dist/src/activity/opencode-sqlite-source.js +154 -63
- package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
- package/dist/src/activity/source-reader.d.ts +60 -4
- package/dist/src/activity/source-reader.d.ts.map +1 -1
- package/dist/src/activity/source-reader.js +593 -75
- package/dist/src/activity/source-reader.js.map +1 -1
- package/dist/src/activity/sqlite-connections.d.ts +77 -0
- package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
- package/dist/src/activity/sqlite-connections.js +220 -0
- package/dist/src/activity/sqlite-connections.js.map +1 -0
- package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
- package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/zed-sqlite-source.js +547 -0
- package/dist/src/activity/zed-sqlite-source.js.map +1 -0
- package/dist/src/agent-action-executor.d.ts +18 -1
- package/dist/src/agent-action-executor.d.ts.map +1 -1
- package/dist/src/agent-action-executor.js +113 -58
- package/dist/src/agent-action-executor.js.map +1 -1
- package/dist/src/agentic-guardian.d.ts.map +1 -1
- package/dist/src/agentic-guardian.js +6 -5
- package/dist/src/agentic-guardian.js.map +1 -1
- package/dist/src/atomic-replace.d.ts +7 -0
- package/dist/src/atomic-replace.d.ts.map +1 -1
- package/dist/src/atomic-replace.js +28 -3
- package/dist/src/atomic-replace.js.map +1 -1
- package/dist/src/bridge-journal.d.ts +32 -0
- package/dist/src/bridge-journal.d.ts.map +1 -0
- package/dist/src/bridge-journal.js +113 -0
- package/dist/src/bridge-journal.js.map +1 -0
- package/dist/src/cli.d.ts +7 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +534 -50
- package/dist/src/cli.js.map +1 -1
- package/dist/src/collection-notice.d.ts +34 -0
- package/dist/src/collection-notice.d.ts.map +1 -0
- package/dist/src/collection-notice.js +73 -0
- package/dist/src/collection-notice.js.map +1 -0
- package/dist/src/config.d.ts +39 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +187 -36
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-config.d.ts.map +1 -1
- package/dist/src/connection-config.js +5 -0
- package/dist/src/connection-config.js.map +1 -1
- package/dist/src/content-redaction.d.ts +17 -1
- package/dist/src/content-redaction.d.ts.map +1 -1
- package/dist/src/content-redaction.js +51 -3
- package/dist/src/content-redaction.js.map +1 -1
- package/dist/src/credential-store.d.ts +20 -1
- package/dist/src/credential-store.d.ts.map +1 -1
- package/dist/src/credential-store.js +29 -4
- package/dist/src/credential-store.js.map +1 -1
- package/dist/src/custom-agent-registry.d.ts.map +1 -1
- package/dist/src/custom-agent-registry.js +2 -1
- package/dist/src/custom-agent-registry.js.map +1 -1
- package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
- package/dist/src/discovery/adapters/generic.js +160 -2
- package/dist/src/discovery/adapters/generic.js.map +1 -1
- package/dist/src/discovery/engine.d.ts +7 -1
- package/dist/src/discovery/engine.d.ts.map +1 -1
- package/dist/src/discovery/engine.js +21 -16
- package/dist/src/discovery/engine.js.map +1 -1
- package/dist/src/discovery/known-agent.d.ts +7 -0
- package/dist/src/discovery/known-agent.d.ts.map +1 -1
- package/dist/src/discovery/known-agent.js +9 -4
- package/dist/src/discovery/known-agent.js.map +1 -1
- package/dist/src/discovery/system-evidence.d.ts +40 -1
- package/dist/src/discovery/system-evidence.d.ts.map +1 -1
- package/dist/src/discovery/system-evidence.js +189 -16
- package/dist/src/discovery/system-evidence.js.map +1 -1
- package/dist/src/doctor-check.d.ts +51 -0
- package/dist/src/doctor-check.d.ts.map +1 -0
- package/dist/src/doctor-check.js +174 -0
- package/dist/src/doctor-check.js.map +1 -0
- package/dist/src/enroll.d.ts +86 -0
- package/dist/src/enroll.d.ts.map +1 -0
- package/dist/src/enroll.js +245 -0
- package/dist/src/enroll.js.map +1 -0
- package/dist/src/entry.d.ts +3 -0
- package/dist/src/entry.d.ts.map +1 -0
- package/dist/src/entry.js +14 -0
- package/dist/src/entry.js.map +1 -0
- package/dist/src/event-queue.d.ts +13 -1
- package/dist/src/event-queue.d.ts.map +1 -1
- package/dist/src/event-queue.js +137 -42
- package/dist/src/event-queue.js.map +1 -1
- package/dist/src/event-spool.d.ts +61 -3
- package/dist/src/event-spool.d.ts.map +1 -1
- package/dist/src/event-spool.js +341 -44
- package/dist/src/event-spool.js.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.d.ts +7 -0
- package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
- package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
- package/dist/src/guardian-containment.d.ts +2 -6
- package/dist/src/guardian-containment.d.ts.map +1 -1
- package/dist/src/guardian-containment.js +12 -63
- package/dist/src/guardian-containment.js.map +1 -1
- package/dist/src/guardian-decision-journal.d.ts.map +1 -1
- package/dist/src/guardian-decision-journal.js +4 -19
- package/dist/src/guardian-decision-journal.js.map +1 -1
- package/dist/src/guardian-managed-exec.d.ts.map +1 -1
- package/dist/src/guardian-managed-exec.js +6 -18
- package/dist/src/guardian-managed-exec.js.map +1 -1
- package/dist/src/guardian-model-bridge.d.ts.map +1 -1
- package/dist/src/guardian-model-bridge.js +2 -1
- package/dist/src/guardian-model-bridge.js.map +1 -1
- package/dist/src/guardian-native.d.ts +0 -1
- package/dist/src/guardian-native.d.ts.map +1 -1
- package/dist/src/guardian-native.js +0 -6
- package/dist/src/guardian-native.js.map +1 -1
- package/dist/src/guardian-process-monitor.d.ts +4 -0
- package/dist/src/guardian-process-monitor.d.ts.map +1 -1
- package/dist/src/guardian-process-monitor.js +82 -26
- package/dist/src/guardian-process-monitor.js.map +1 -1
- package/dist/src/health.d.ts +19 -1
- package/dist/src/health.d.ts.map +1 -1
- package/dist/src/health.js +22 -1
- package/dist/src/health.js.map +1 -1
- package/dist/src/historical-identity-store.d.ts +8 -1
- package/dist/src/historical-identity-store.d.ts.map +1 -1
- package/dist/src/historical-identity-store.js +28 -10
- package/dist/src/historical-identity-store.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/installation.d.ts +2 -0
- package/dist/src/installation.d.ts.map +1 -1
- package/dist/src/installation.js +6 -3
- package/dist/src/installation.js.map +1 -1
- package/dist/src/instance-lock.d.ts +45 -0
- package/dist/src/instance-lock.d.ts.map +1 -0
- package/dist/src/instance-lock.js +243 -0
- package/dist/src/instance-lock.js.map +1 -0
- package/dist/src/machine-command-executor.d.ts +22 -7
- package/dist/src/machine-command-executor.d.ts.map +1 -1
- package/dist/src/machine-command-executor.js +80 -19
- package/dist/src/machine-command-executor.js.map +1 -1
- package/dist/src/node-version.d.ts +8 -0
- package/dist/src/node-version.d.ts.map +1 -0
- package/dist/src/node-version.js +17 -0
- package/dist/src/node-version.js.map +1 -0
- package/dist/src/observer-log.d.ts +50 -0
- package/dist/src/observer-log.d.ts.map +1 -0
- package/dist/src/observer-log.js +141 -0
- package/dist/src/observer-log.js.map +1 -0
- package/dist/src/pair.d.ts +68 -1
- package/dist/src/pair.d.ts.map +1 -1
- package/dist/src/pair.js +204 -65
- package/dist/src/pair.js.map +1 -1
- package/dist/src/private-directory.d.ts +10 -0
- package/dist/src/private-directory.d.ts.map +1 -0
- package/dist/src/private-directory.js +66 -0
- package/dist/src/private-directory.js.map +1 -0
- package/dist/src/process-tree.d.ts +73 -0
- package/dist/src/process-tree.d.ts.map +1 -0
- package/dist/src/process-tree.js +256 -0
- package/dist/src/process-tree.js.map +1 -0
- package/dist/src/proxy.d.ts +68 -0
- package/dist/src/proxy.d.ts.map +1 -0
- package/dist/src/proxy.js +209 -0
- package/dist/src/proxy.js.map +1 -0
- package/dist/src/purge.d.ts +17 -0
- package/dist/src/purge.d.ts.map +1 -0
- package/dist/src/purge.js +84 -0
- package/dist/src/purge.js.map +1 -0
- package/dist/src/remove-machine.d.ts +5 -1
- package/dist/src/remove-machine.d.ts.map +1 -1
- package/dist/src/remove-machine.js +28 -14
- package/dist/src/remove-machine.js.map +1 -1
- package/dist/src/server-authority.d.ts +29 -0
- package/dist/src/server-authority.d.ts.map +1 -0
- package/dist/src/server-authority.js +106 -0
- package/dist/src/server-authority.js.map +1 -0
- package/dist/src/server-clock.d.ts +32 -0
- package/dist/src/server-clock.d.ts.map +1 -0
- package/dist/src/server-clock.js +72 -0
- package/dist/src/server-clock.js.map +1 -0
- package/dist/src/service-command.d.ts +20 -0
- package/dist/src/service-command.d.ts.map +1 -0
- package/dist/src/service-command.js +136 -0
- package/dist/src/service-command.js.map +1 -0
- package/dist/src/service.d.ts +98 -0
- package/dist/src/service.d.ts.map +1 -0
- package/dist/src/service.js +472 -0
- package/dist/src/service.js.map +1 -0
- package/dist/src/stream-client.d.ts +21 -1
- package/dist/src/stream-client.d.ts.map +1 -1
- package/dist/src/stream-client.js +137 -24
- package/dist/src/stream-client.js.map +1 -1
- package/dist/src/stream-state.d.ts +2 -0
- package/dist/src/stream-state.d.ts.map +1 -1
- package/dist/src/stream-state.js +5 -2
- package/dist/src/stream-state.js.map +1 -1
- package/dist/src/system-inspection.d.ts +78 -0
- package/dist/src/system-inspection.d.ts.map +1 -0
- package/dist/src/system-inspection.js +281 -0
- package/dist/src/system-inspection.js.map +1 -0
- package/dist/src/update.d.ts.map +1 -1
- package/dist/src/update.js +9 -3
- package/dist/src/update.js.map +1 -1
- package/dist/src/user-notices.d.ts +64 -0
- package/dist/src/user-notices.d.ts.map +1 -0
- package/dist/src/user-notices.js +141 -0
- package/dist/src/user-notices.js.map +1 -0
- package/package.json +7 -7
- package/dist/src/windows-process.d.ts +0 -7
- package/dist/src/windows-process.d.ts.map +0 -1
- package/dist/src/windows-process.js +0 -18
- package/dist/src/windows-process.js.map +0 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { readFileSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { mkdir, readFile, stat, unlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import { uptime } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { makeDirectoryPrivate } from "./private-directory.js";
|
|
6
|
+
import { defaultProcessSampler } from "./system-inspection.js";
|
|
7
|
+
const lockFileName = "observer.lock";
|
|
8
|
+
// A lock file that is still empty or partly written may belong to an
|
|
9
|
+
// observer that is creating it right now.
|
|
10
|
+
const unreadableLockGraceMs = 10_000;
|
|
11
|
+
// Clock and uptime rounding between the lock's time and the boot time.
|
|
12
|
+
const bootToleranceMs = 60_000;
|
|
13
|
+
// Between the operating system's start time for a process and the time the
|
|
14
|
+
// observer wrote to its lock: start-up before Node's clock begins, the
|
|
15
|
+
// one-second resolution of ps, and small clock corrections.
|
|
16
|
+
const processStartToleranceMs = 10_000;
|
|
17
|
+
const processStartReadTimeoutMs = 15_000;
|
|
18
|
+
export class ObserverAlreadyRunningError extends Error {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Holds a data directory for one running observer. Two `run` processes on
|
|
22
|
+
* one directory would reuse sequence numbers and overwrite each other's
|
|
23
|
+
* spool, cursors and saved state.
|
|
24
|
+
*
|
|
25
|
+
* The lock is a file created with the exclusive `wx` flag that names the
|
|
26
|
+
* holder's process ID and start time. A lock whose process is gone, that was
|
|
27
|
+
* taken before the computer last started, or whose process ID now belongs to
|
|
28
|
+
* a process that started at another time, is stale and is taken over.
|
|
29
|
+
*/
|
|
30
|
+
export class InstanceLock {
|
|
31
|
+
#path;
|
|
32
|
+
#content;
|
|
33
|
+
#releaseOnExit;
|
|
34
|
+
#released = false;
|
|
35
|
+
constructor(path, content) {
|
|
36
|
+
this.#path = path;
|
|
37
|
+
this.#content = content;
|
|
38
|
+
// Last resort for an exit that skips `release`, such as process.exit.
|
|
39
|
+
this.#releaseOnExit = () => this.#releaseSync();
|
|
40
|
+
process.once("exit", this.#releaseOnExit);
|
|
41
|
+
}
|
|
42
|
+
static async acquire(dataDirectory, options = {}) {
|
|
43
|
+
const pid = options.pid ?? process.pid;
|
|
44
|
+
const startedAt = options.startedAt ??
|
|
45
|
+
new Date(Date.now() - Math.round(process.uptime() * 1_000));
|
|
46
|
+
const isAlive = options.isAlive ?? processIsAlive;
|
|
47
|
+
const processStartedAt = options.processStartedAt ?? readProcessStartedAt;
|
|
48
|
+
const bootedAt = options.bootedAt ?? (() => Date.now() - uptime() * 1_000);
|
|
49
|
+
const now = options.now ?? Date.now;
|
|
50
|
+
const path = join(dataDirectory, lockFileName);
|
|
51
|
+
const content = `${JSON.stringify({ pid, started_at: startedAt.toISOString() })}\n`;
|
|
52
|
+
await mkdir(dataDirectory, { recursive: true, mode: 0o700 });
|
|
53
|
+
await makeDirectoryPrivate(dataDirectory);
|
|
54
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
55
|
+
try {
|
|
56
|
+
await writeFile(path, content, { encoding: "utf8", flag: "wx", mode: 0o600 });
|
|
57
|
+
return new InstanceLock(path, content);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (!isNodeError(error) || error.code !== "EEXIST")
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
let existing;
|
|
64
|
+
try {
|
|
65
|
+
existing = await readFile(path, "utf8");
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
// Released between our attempt and this read: try again.
|
|
69
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
70
|
+
continue;
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
const holder = parseLock(existing);
|
|
74
|
+
if (holder === undefined) {
|
|
75
|
+
let modifiedMs;
|
|
76
|
+
try {
|
|
77
|
+
modifiedMs = (await stat(path)).mtimeMs;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
81
|
+
continue;
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
if (now() - modifiedMs < unreadableLockGraceMs) {
|
|
85
|
+
throw alreadyRunning(path, undefined);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (await holderIsLive(holder, isAlive, processStartedAt, bootedAt)) {
|
|
89
|
+
throw alreadyRunning(path, holder);
|
|
90
|
+
}
|
|
91
|
+
// Stale. Remove it only while it is still the lock that was judged
|
|
92
|
+
// stale, so an observer that took it over meanwhile keeps it.
|
|
93
|
+
try {
|
|
94
|
+
if (await readFile(path, "utf8") === existing)
|
|
95
|
+
await unlink(path);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (!isNodeError(error) || error.code !== "ENOENT")
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw alreadyRunning(path, undefined);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether an observer holds this data directory now, judged the way
|
|
106
|
+
* `acquire` judges it, without taking or removing the lock.
|
|
107
|
+
*/
|
|
108
|
+
static async inspect(dataDirectory, options = {}) {
|
|
109
|
+
const isAlive = options.isAlive ?? processIsAlive;
|
|
110
|
+
const processStartedAt = options.processStartedAt ?? readProcessStartedAt;
|
|
111
|
+
const bootedAt = options.bootedAt ?? (() => Date.now() - uptime() * 1_000);
|
|
112
|
+
const now = options.now ?? Date.now;
|
|
113
|
+
const path = join(dataDirectory, lockFileName);
|
|
114
|
+
let existing;
|
|
115
|
+
try {
|
|
116
|
+
existing = await readFile(path, "utf8");
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
120
|
+
return { running: false };
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
const holder = parseLock(existing);
|
|
124
|
+
if (holder === undefined) {
|
|
125
|
+
try {
|
|
126
|
+
// Still being written by an observer that is starting.
|
|
127
|
+
return { running: now() - (await stat(path)).mtimeMs < unreadableLockGraceMs };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (isNodeError(error) && error.code === "ENOENT")
|
|
131
|
+
return { running: false };
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const running = await holderIsLive(holder, isAlive, processStartedAt, bootedAt);
|
|
136
|
+
return running
|
|
137
|
+
? { running, pid: holder.pid, startedAt: holder.started_at }
|
|
138
|
+
: { running };
|
|
139
|
+
}
|
|
140
|
+
async release() {
|
|
141
|
+
if (this.#released)
|
|
142
|
+
return;
|
|
143
|
+
this.#released = true;
|
|
144
|
+
process.removeListener("exit", this.#releaseOnExit);
|
|
145
|
+
try {
|
|
146
|
+
if (await readFile(this.#path, "utf8") === this.#content) {
|
|
147
|
+
await unlink(this.#path);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (!isNodeError(error) || error.code !== "ENOENT")
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
#releaseSync() {
|
|
156
|
+
if (this.#released)
|
|
157
|
+
return;
|
|
158
|
+
this.#released = true;
|
|
159
|
+
try {
|
|
160
|
+
if (readFileSync(this.#path, "utf8") === this.#content)
|
|
161
|
+
unlinkSync(this.#path);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Exiting anyway; the next start treats a dead holder as stale.
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function alreadyRunning(path, holder) {
|
|
169
|
+
const who = holder === undefined
|
|
170
|
+
? "Another Phigon observer"
|
|
171
|
+
: `Another Phigon observer (process ${holder.pid}, started ${holder.started_at})`;
|
|
172
|
+
return new ObserverAlreadyRunningError(`${who} is already running with this data directory. Two observers on ` +
|
|
173
|
+
"one data directory would overwrite each other's queued activity and " +
|
|
174
|
+
"progress. Stop the other observer, or give this one its own data " +
|
|
175
|
+
`directory. If no observer is running, delete ${path}.`);
|
|
176
|
+
}
|
|
177
|
+
function parseLock(raw) {
|
|
178
|
+
let value;
|
|
179
|
+
try {
|
|
180
|
+
value = JSON.parse(raw);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
if (typeof value !== "object" || value === null ||
|
|
186
|
+
!("pid" in value) || typeof value.pid !== "number" ||
|
|
187
|
+
!Number.isSafeInteger(value.pid) || value.pid < 1 ||
|
|
188
|
+
!("started_at" in value) || typeof value.started_at !== "string" ||
|
|
189
|
+
!Number.isFinite(Date.parse(value.started_at))) {
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
return { pid: value.pid, started_at: value.started_at };
|
|
193
|
+
}
|
|
194
|
+
/** A holder that started since the computer last started and still runs. */
|
|
195
|
+
async function holderIsLive(holder, isAlive, processStartedAt, bootedAt) {
|
|
196
|
+
return Date.parse(holder.started_at) >= bootedAt() - bootToleranceMs &&
|
|
197
|
+
isAlive(holder.pid) &&
|
|
198
|
+
!(await processIDReused(holder, processStartedAt));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* After a hard kill the operating system can give the holder's process ID to
|
|
202
|
+
* an unrelated program. When its start time cannot be read, the holder is
|
|
203
|
+
* taken to be still running.
|
|
204
|
+
*/
|
|
205
|
+
async function processIDReused(holder, processStartedAt) {
|
|
206
|
+
let startedAt;
|
|
207
|
+
try {
|
|
208
|
+
startedAt = await processStartedAt(holder.pid);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return startedAt !== null && Number.isFinite(startedAt) &&
|
|
214
|
+
Math.abs(startedAt - Date.parse(holder.started_at)) > processStartToleranceMs;
|
|
215
|
+
}
|
|
216
|
+
async function readProcessStartedAt(pid) {
|
|
217
|
+
let timer;
|
|
218
|
+
const timeout = new Promise((resolve) => {
|
|
219
|
+
timer = setTimeout(() => resolve(null), processStartReadTimeoutMs);
|
|
220
|
+
});
|
|
221
|
+
try {
|
|
222
|
+
const sample = await Promise.race([defaultProcessSampler()([pid], 0), timeout]);
|
|
223
|
+
return sample?.before.get(pid)?.startedAt ?? null;
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
clearTimeout(timer);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export function processIsAlive(pid) {
|
|
230
|
+
try {
|
|
231
|
+
// Signal 0 checks that the process exists without touching it.
|
|
232
|
+
process.kill(pid, 0);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
// EPERM: it exists but belongs to another user.
|
|
237
|
+
return isNodeError(error) && error.code === "EPERM";
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function isNodeError(error) {
|
|
241
|
+
return error instanceof Error && "code" in error;
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=instance-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../../src/instance-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { type rename } from "node:fs/promises";
|
|
2
|
+
import { type RunningAgents } from "./system-inspection.js";
|
|
1
3
|
import { RemoteActionType as Action, type AgentActionCommand, type AgentActionResult } from "./generated/phigon/v1/action_pb.js";
|
|
4
|
+
import type { UserNotices } from "./user-notices.js";
|
|
2
5
|
export declare const machineActionTypes: readonly Action[];
|
|
3
6
|
export type CommandSpec = {
|
|
4
7
|
executable: string;
|
|
@@ -7,26 +10,38 @@ export type CommandSpec = {
|
|
|
7
10
|
timeout_seconds: number;
|
|
8
11
|
};
|
|
9
12
|
export declare function parseCommand(value: string): CommandSpec | null;
|
|
13
|
+
export type MachineCommandOptions = {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
machineID: string;
|
|
16
|
+
dataDirectory: string;
|
|
17
|
+
replace?: typeof rename;
|
|
18
|
+
/** Running agent processes for inspect_system; omitted means none are listed. */
|
|
19
|
+
agents?: () => Promise<RunningAgents>;
|
|
20
|
+
/** Tells the person at this computer what Phigon did. */
|
|
21
|
+
notices?: UserNotices;
|
|
22
|
+
/** The server's current time, which command expiry is measured in. */
|
|
23
|
+
serverNow?: () => number;
|
|
24
|
+
};
|
|
10
25
|
/** Separate machine-owner enrollment; durable claims prevent crash/retry execution. */
|
|
11
26
|
export declare class MachineCommandExecutor {
|
|
12
27
|
#private;
|
|
13
|
-
constructor(options:
|
|
14
|
-
enabled: boolean;
|
|
15
|
-
machineID: string;
|
|
16
|
-
dataDirectory: string;
|
|
17
|
-
});
|
|
28
|
+
constructor(options: MachineCommandOptions);
|
|
18
29
|
execute(command: AgentActionCommand): Promise<AgentActionResult>;
|
|
19
30
|
prune(): Promise<void>;
|
|
20
31
|
}
|
|
21
32
|
/** Commands expire within minutes. Thirty days of receipts allows local
|
|
22
33
|
* troubleshooting; an expired command is still rejected after its receipt ages out. */
|
|
23
34
|
export declare function pruneCommandReceipts(directory: string, now?: number): Promise<void>;
|
|
35
|
+
/** "C:\Tools\node.exe" and "/usr/bin/node" are "node". */
|
|
36
|
+
export declare function programName(executable: string): string;
|
|
24
37
|
export declare function powerCommand(restart: boolean): CommandSpec;
|
|
25
38
|
export declare function redactCommandOutput(value: string): string;
|
|
26
|
-
export
|
|
39
|
+
export type CommandExecution = {
|
|
27
40
|
output: string;
|
|
28
41
|
exitCode: number | null;
|
|
29
42
|
truncated: boolean;
|
|
30
43
|
timedOut: boolean;
|
|
31
|
-
|
|
44
|
+
launched: boolean;
|
|
45
|
+
};
|
|
46
|
+
export declare function runCommand(spec: CommandSpec): Promise<CommandExecution>;
|
|
32
47
|
//# sourceMappingURL=machine-command-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-command-executor.d.ts","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"machine-command-executor.d.ts","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsD,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAI7F,OAAO,EAA6D,gBAAgB,IAAI,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5L,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAiG,CAAC;AAClJ,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAK3H,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa9D;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC;IACxB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACtC,yDAAyD;IACzD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B,CAAC;AAEF,uFAAuF;AACvF,qBAAa,sBAAsB;;gBAGrB,OAAO,EAAE,qBAAqB;IAI1C,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAShE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoEvB;AAED;uFACuF;AACvF,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAI1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AASrI,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkD7E"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { atomicReplace } from "./atomic-replace.js";
|
|
2
|
+
import { credentialEnvironmentName, redactSecrets } from "./content-redaction.js";
|
|
3
|
+
import { execFile, spawn } from "node:child_process";
|
|
3
4
|
import { createHash } from "node:crypto";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { guardianRunnerPath } from "./guardian-native.js";
|
|
6
|
+
import { parseTreeReport } from "./process-tree.js";
|
|
7
|
+
import { mkdir, readFile, readdir, lstat, unlink, writeFile } from "node:fs/promises";
|
|
8
|
+
import { formatInspection, inspectSystem } from "./system-inspection.js";
|
|
6
9
|
import { join } from "node:path";
|
|
7
10
|
import { create, fromJsonString, toJsonString } from "@bufbuild/protobuf";
|
|
8
11
|
import { timestampDate, timestampFromDate } from "@bufbuild/protobuf/wkt";
|
|
9
12
|
import { AgentActionResultSchema, RemoteActionResultState as State, RemoteActionType as Action } from "./generated/phigon/v1/action_pb.js";
|
|
10
13
|
export const machineActionTypes = [Action.RUN_COMMAND, Action.INSPECT_SYSTEM, Action.SHUTDOWN_MACHINE, Action.RESTART_MACHINE];
|
|
11
14
|
const outputLimit = 32768;
|
|
15
|
+
const outputDrainMs = 500;
|
|
12
16
|
const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
13
17
|
export function parseCommand(value) {
|
|
14
18
|
let input;
|
|
@@ -67,7 +71,8 @@ export class MachineCommandExecutor {
|
|
|
67
71
|
return receipt(State.REJECTED, "invalid_command", "Machine command identity or capability is invalid.");
|
|
68
72
|
}
|
|
69
73
|
const expires = timestampDate(command.expiresAt).getTime();
|
|
70
|
-
|
|
74
|
+
const serverNow = this.#options.serverNow ?? Date.now;
|
|
75
|
+
if (!Number.isFinite(expires) || expires > serverNow() + 330_000)
|
|
71
76
|
return receipt(State.EXPIRED, "command_expired", "Command is outside its approved execution window.");
|
|
72
77
|
const spec = command.action === Action.RUN_COMMAND ? parseCommand(command.commandJson) : null;
|
|
73
78
|
if ((command.action === Action.RUN_COMMAND && !spec) || (command.action !== Action.RUN_COMMAND && !["", "null"].includes(command.commandJson)))
|
|
@@ -83,7 +88,7 @@ export class MachineCommandExecutor {
|
|
|
83
88
|
if (error.code !== "ENOENT")
|
|
84
89
|
throw error;
|
|
85
90
|
}
|
|
86
|
-
if (expires <=
|
|
91
|
+
if (expires <= serverNow())
|
|
87
92
|
return receipt(State.EXPIRED, "command_expired", "Command expired before execution.");
|
|
88
93
|
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
89
94
|
const uncertain = receipt(State.FAILED, "execution_interrupted", "Execution was claimed but no completion receipt is available. It will not be repeated automatically.");
|
|
@@ -98,18 +103,31 @@ export class MachineCommandExecutor {
|
|
|
98
103
|
}
|
|
99
104
|
let result;
|
|
100
105
|
if (command.action === Action.INSPECT_SYSTEM) {
|
|
101
|
-
|
|
106
|
+
const report = await inspectSystem(this.#options.agents === undefined ? {} : { agents: this.#options.agents });
|
|
107
|
+
result = receipt(State.SUCCEEDED, "inspection_complete", report.agents_complete
|
|
108
|
+
? "Current operating-system, disk and agent process information collected."
|
|
109
|
+
: "Current operating-system and disk information collected; the agent process list is incomplete.", { output: formatInspection(report), exitCode: 0 });
|
|
102
110
|
}
|
|
103
111
|
else {
|
|
104
112
|
const power = command.action === Action.SHUTDOWN_MACHINE || command.action === Action.RESTART_MACHINE;
|
|
105
113
|
const operation = power ? powerCommand(command.action === Action.RESTART_MACHINE) : spec;
|
|
106
114
|
const execution = await runCommand(operation);
|
|
107
115
|
const succeeded = execution.exitCode === 0 && !execution.timedOut;
|
|
108
|
-
result =
|
|
116
|
+
result = !execution.launched
|
|
117
|
+
? receipt(State.FAILED, "command_not_started", "The operating system could not start the executable. Nothing ran.", { output: execution.output })
|
|
118
|
+
: receipt(succeeded ? State.SUCCEEDED : State.FAILED, execution.timedOut ? "command_timeout" : succeeded ? (power ? "power_change_scheduled" : "command_completed") : "command_failed", execution.timedOut ? "Command exceeded its time limit; termination was requested." : power && succeeded ? "Operating system accepted the power change scheduled for one minute from now." : succeeded ? "Command completed." : "Command did not complete successfully.", { output: execution.output, outputTruncated: execution.truncated, ...(execution.exitCode === null ? {} : { exitCode: execution.exitCode }) });
|
|
119
|
+
}
|
|
120
|
+
if (command.action === Action.RUN_COMMAND && result.resultCode !== "command_not_started") {
|
|
121
|
+
this.#options.notices?.commandRan({ key: command.actionId, program: programName(spec.executable), reason: command.reason });
|
|
122
|
+
}
|
|
123
|
+
else if (result.resultCode === "power_change_scheduled") {
|
|
124
|
+
this.#options.notices?.powerChange({ key: command.actionId, restart: command.action === Action.RESTART_MACHINE, reason: command.reason });
|
|
109
125
|
}
|
|
110
126
|
const temporary = `${path}.tmp`;
|
|
111
127
|
await writeFile(temporary, JSON.stringify({ digest, receipt: toJsonString(AgentActionResultSchema, result) }), { mode: 0o600, flush: true });
|
|
112
|
-
|
|
128
|
+
// A scanner briefly holding the receipt on Windows must not turn a
|
|
129
|
+
// completed command into "journal unavailable" with its output lost.
|
|
130
|
+
await atomicReplace(temporary, path, this.#options.replace);
|
|
113
131
|
return result;
|
|
114
132
|
}
|
|
115
133
|
}
|
|
@@ -134,6 +152,10 @@ export async function pruneCommandReceipts(directory, now = Date.now()) {
|
|
|
134
152
|
await unlink(path).catch(() => undefined);
|
|
135
153
|
}
|
|
136
154
|
}
|
|
155
|
+
/** "C:\Tools\node.exe" and "/usr/bin/node" are "node". */
|
|
156
|
+
export function programName(executable) {
|
|
157
|
+
return executable.split(/[\\/]/u).pop()?.replace(/\.(?:exe|cmd|bat|ps1)$/iu, "") || "a command";
|
|
158
|
+
}
|
|
137
159
|
export function powerCommand(restart) {
|
|
138
160
|
return process.platform === "win32"
|
|
139
161
|
? { executable: join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "shutdown.exe"), arguments: [restart ? "/r" : "/s", "/t", "60"], timeout_seconds: 10 }
|
|
@@ -142,14 +164,33 @@ export function powerCommand(restart) {
|
|
|
142
164
|
export function redactCommandOutput(value) {
|
|
143
165
|
let safe = redactSecrets(value, "[REDACTED]");
|
|
144
166
|
for (const [key, secret] of Object.entries(process.env))
|
|
145
|
-
if (
|
|
167
|
+
if (credentialEnvironmentName(key) && secret && secret.length >= 8)
|
|
146
168
|
safe = safe.split(secret).join("[REDACTED]");
|
|
169
|
+
// The paired credential lives in the data directory, not the environment;
|
|
170
|
+
// redactSecrets masks its phg_m_ prefix wherever it is printed.
|
|
147
171
|
return safe;
|
|
148
172
|
}
|
|
173
|
+
function launchFailure(executable) {
|
|
174
|
+
const batch = process.platform === "win32" && /\.(?:cmd|bat)$/iu.test(executable)
|
|
175
|
+
? " Windows runs .cmd and .bat files only through cmd.exe; use cmd.exe with the arguments /d /c and the script path."
|
|
176
|
+
: "";
|
|
177
|
+
return { output: `The operating system could not start the requested executable.${batch}`, exitCode: null, truncated: false, timedOut: false, launched: false };
|
|
178
|
+
}
|
|
149
179
|
export async function runCommand(spec) {
|
|
150
180
|
return new Promise((resolve) => {
|
|
151
|
-
const env = Object.fromEntries(Object.entries(process.env).filter(([key]) => !/^PHIGON_
|
|
152
|
-
|
|
181
|
+
const env = Object.fromEntries(Object.entries(process.env).filter(([key]) => !/^PHIGON_/iu.test(key) && !credentialEnvironmentName(key)));
|
|
182
|
+
let child;
|
|
183
|
+
try {
|
|
184
|
+
child = spawn(spec.executable, spec.arguments, { shell: false, windowsHide: true, detached: process.platform !== "win32", stdio: ["ignore", "pipe", "pipe"], env, ...(spec.working_directory ? { cwd: spec.working_directory } : {}) });
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Node refuses some launches synchronously (for example a Windows batch
|
|
188
|
+
// file without a shell). That must still produce a receipt.
|
|
189
|
+
resolve(launchFailure(spec.executable));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const stdout = child.stdout;
|
|
193
|
+
const stderr = child.stderr;
|
|
153
194
|
let collected = Buffer.alloc(0);
|
|
154
195
|
let truncated = false;
|
|
155
196
|
let timedOut = false;
|
|
@@ -163,20 +204,40 @@ export async function runCommand(spec) {
|
|
|
163
204
|
done = true;
|
|
164
205
|
clearTimeout(timeout);
|
|
165
206
|
clearTimeout(hardDeadline);
|
|
207
|
+
clearTimeout(drain);
|
|
166
208
|
const safe = Buffer.from(redactCommandOutput(truncated ? collected.toString("utf8").replace(/[^\n]*$/u, "[TRUNCATED]") : collected.toString("utf8")));
|
|
167
209
|
// Leave room for a final UTF-8 replacement character after a byte boundary.
|
|
168
210
|
const output = safe.subarray(0, outputLimit - 4).toString("utf8");
|
|
169
|
-
resolve({ output, exitCode, truncated: truncated || safe.length > outputLimit - 4, timedOut });
|
|
211
|
+
resolve({ output, exitCode, truncated: truncated || safe.length > outputLimit - 4, timedOut, launched: true });
|
|
170
212
|
};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
child.once("error", () => {
|
|
213
|
+
stdout.on("data", consume);
|
|
214
|
+
stderr.on("data", consume);
|
|
215
|
+
child.once("error", () => {
|
|
216
|
+
// After a successful start, "error" only reports a failed kill; "close" follows.
|
|
217
|
+
if (child.pid !== undefined || done)
|
|
218
|
+
return;
|
|
219
|
+
done = true;
|
|
220
|
+
clearTimeout(timeout);
|
|
221
|
+
clearTimeout(hardDeadline);
|
|
222
|
+
resolve(launchFailure(spec.executable));
|
|
223
|
+
});
|
|
174
224
|
child.once("close", (code) => finish(code));
|
|
225
|
+
// "close" waits for every holder of the output pipes. A background process
|
|
226
|
+
// the command started can hold them long after the command exited, so
|
|
227
|
+
// report the command's own exit after a short drain instead of a timeout.
|
|
228
|
+
let drain;
|
|
229
|
+
child.once("exit", (code) => {
|
|
230
|
+
drain = setTimeout(() => { stdout.destroy(); stderr.destroy(); finish(code); }, outputDrainMs);
|
|
231
|
+
});
|
|
175
232
|
const timeout = setTimeout(() => {
|
|
176
233
|
timedOut = true;
|
|
177
234
|
if (process.platform === "win32" && child.pid) {
|
|
178
|
-
|
|
179
|
-
|
|
235
|
+
// taskkill /T trusts recorded parent PIDs, so it can also end an
|
|
236
|
+
// unrelated process whose dead parent's PID our command reused. The
|
|
237
|
+
// helper accepts only our direct child and descendants created after
|
|
238
|
+
// their parent. Our own child is still held, so killing it is safe.
|
|
239
|
+
execFile(guardianRunnerPath(), ["--kill-pid", String(child.pid), "--own-child", "--tree"], { windowsHide: true, timeout: 15_000, maxBuffer: 16 << 10, encoding: "utf8" }, (error, stdout) => { if (error !== null || parseTreeReport(stdout).outcome !== "dispatched")
|
|
240
|
+
child.kill(); });
|
|
180
241
|
}
|
|
181
242
|
else {
|
|
182
243
|
try {
|
|
@@ -188,7 +249,7 @@ export async function runCommand(spec) {
|
|
|
188
249
|
}
|
|
189
250
|
}
|
|
190
251
|
}, spec.timeout_seconds * 1000);
|
|
191
|
-
const hardDeadline = setTimeout(() => {
|
|
252
|
+
const hardDeadline = setTimeout(() => { stdout.destroy(); stderr.destroy(); child.unref(); finish(null); }, spec.timeout_seconds * 1000 + 3000);
|
|
192
253
|
});
|
|
193
254
|
}
|
|
194
255
|
//# sourceMappingURL=machine-command-executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-command-executor.js","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"machine-command-executor.js","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The oldest Node.js the observer runs on. Trusting a company's own server
|
|
3
|
+
* needs `tls.setDefaultCACertificates`, which Node.js 24.5 added.
|
|
4
|
+
*/
|
|
5
|
+
export declare const minimumNodeVersion = "24.5.0";
|
|
6
|
+
/** Why this Node.js cannot run the observer, or undefined when it can. */
|
|
7
|
+
export declare function nodeVersionProblem(version: string): string | undefined;
|
|
8
|
+
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../src/node-version.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMtE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Loaded before anything else, so it imports nothing: an older Node.js must
|
|
2
|
+
// reach the plain message below instead of failing on a newer API.
|
|
3
|
+
/**
|
|
4
|
+
* The oldest Node.js the observer runs on. Trusting a company's own server
|
|
5
|
+
* needs `tls.setDefaultCACertificates`, which Node.js 24.5 added.
|
|
6
|
+
*/
|
|
7
|
+
export const minimumNodeVersion = "24.5.0";
|
|
8
|
+
/** Why this Node.js cannot run the observer, or undefined when it can. */
|
|
9
|
+
export function nodeVersionProblem(version) {
|
|
10
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)/u.exec(version);
|
|
11
|
+
const major = match === null ? 0 : Number(match[1]);
|
|
12
|
+
const minor = match === null ? 0 : Number(match[2]);
|
|
13
|
+
if (major > 24 || (major === 24 && minor >= 5))
|
|
14
|
+
return undefined;
|
|
15
|
+
return `Phigon observer needs Node.js 24.5 or newer; this computer has ${version.replace(/^v/u, "")}.`;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=node-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../../src/node-version.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjE,OAAO,kEAAkE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC;AACzG,CAAC"}
|