@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.
Files changed (309) hide show
  1. package/README.md +244 -18
  2. package/dist/bin/guardian-runner-darwin-amd64 +0 -0
  3. package/dist/bin/guardian-runner-darwin-arm64 +0 -0
  4. package/dist/bin/guardian-runner-linux-amd64 +0 -0
  5. package/dist/bin/guardian-runner-linux-arm64 +0 -0
  6. package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
  7. package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
  8. package/dist/src/abortable-delay.d.ts +10 -0
  9. package/dist/src/abortable-delay.d.ts.map +1 -0
  10. package/dist/src/abortable-delay.js +21 -0
  11. package/dist/src/abortable-delay.js.map +1 -0
  12. package/dist/src/action-policy.d.ts.map +1 -1
  13. package/dist/src/action-policy.js +4 -2
  14. package/dist/src/action-policy.js.map +1 -1
  15. package/dist/src/activity/adapters/claude.d.ts.map +1 -1
  16. package/dist/src/activity/adapters/claude.js +28 -2
  17. package/dist/src/activity/adapters/claude.js.map +1 -1
  18. package/dist/src/activity/adapters/cline-task.d.ts +7 -0
  19. package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
  20. package/dist/src/activity/adapters/cline-task.js +197 -0
  21. package/dist/src/activity/adapters/cline-task.js.map +1 -0
  22. package/dist/src/activity/adapters/cline.d.ts +3 -0
  23. package/dist/src/activity/adapters/cline.d.ts.map +1 -0
  24. package/dist/src/activity/adapters/cline.js +102 -0
  25. package/dist/src/activity/adapters/cline.js.map +1 -0
  26. package/dist/src/activity/adapters/codex.d.ts.map +1 -1
  27. package/dist/src/activity/adapters/codex.js +76 -0
  28. package/dist/src/activity/adapters/codex.js.map +1 -1
  29. package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
  30. package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
  31. package/dist/src/activity/adapters/copilot-chat.js +176 -0
  32. package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
  33. package/dist/src/activity/adapters/copilot.d.ts +2 -1
  34. package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
  35. package/dist/src/activity/adapters/copilot.js +173 -2
  36. package/dist/src/activity/adapters/copilot.js.map +1 -1
  37. package/dist/src/activity/adapters/cursor.d.ts +3 -0
  38. package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
  39. package/dist/src/activity/adapters/cursor.js +86 -0
  40. package/dist/src/activity/adapters/cursor.js.map +1 -0
  41. package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
  42. package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
  43. package/dist/src/activity/adapters/factory-droid.js +126 -0
  44. package/dist/src/activity/adapters/factory-droid.js.map +1 -0
  45. package/dist/src/activity/adapters/gemini.d.ts +3 -0
  46. package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
  47. package/dist/src/activity/adapters/gemini.js +177 -0
  48. package/dist/src/activity/adapters/gemini.js.map +1 -0
  49. package/dist/src/activity/adapters/goose.d.ts +3 -0
  50. package/dist/src/activity/adapters/goose.d.ts.map +1 -0
  51. package/dist/src/activity/adapters/goose.js +116 -0
  52. package/dist/src/activity/adapters/goose.js.map +1 -0
  53. package/dist/src/activity/adapters/kiro.d.ts +3 -0
  54. package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
  55. package/dist/src/activity/adapters/kiro.js +47 -0
  56. package/dist/src/activity/adapters/kiro.js.map +1 -0
  57. package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -1
  58. package/dist/src/activity/adapters/openai-compatible.js +9 -1
  59. package/dist/src/activity/adapters/openai-compatible.js.map +1 -1
  60. package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
  61. package/dist/src/activity/adapters/opencode.js +108 -1
  62. package/dist/src/activity/adapters/opencode.js.map +1 -1
  63. package/dist/src/activity/adapters/zed.d.ts +3 -0
  64. package/dist/src/activity/adapters/zed.d.ts.map +1 -0
  65. package/dist/src/activity/adapters/zed.js +134 -0
  66. package/dist/src/activity/adapters/zed.js.map +1 -0
  67. package/dist/src/activity/collector.d.ts +43 -1
  68. package/dist/src/activity/collector.d.ts.map +1 -1
  69. package/dist/src/activity/collector.js +490 -77
  70. package/dist/src/activity/collector.js.map +1 -1
  71. package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
  72. package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
  73. package/dist/src/activity/goose-sqlite-source.js +274 -0
  74. package/dist/src/activity/goose-sqlite-source.js.map +1 -0
  75. package/dist/src/activity/index.d.ts +3 -0
  76. package/dist/src/activity/index.d.ts.map +1 -1
  77. package/dist/src/activity/index.js +3 -0
  78. package/dist/src/activity/index.js.map +1 -1
  79. package/dist/src/activity/ingest.d.ts +9 -0
  80. package/dist/src/activity/ingest.d.ts.map +1 -1
  81. package/dist/src/activity/ingest.js +94 -4
  82. package/dist/src/activity/ingest.js.map +1 -1
  83. package/dist/src/activity/json-document-source.d.ts +151 -0
  84. package/dist/src/activity/json-document-source.d.ts.map +1 -0
  85. package/dist/src/activity/json-document-source.js +586 -0
  86. package/dist/src/activity/json-document-source.js.map +1 -0
  87. package/dist/src/activity/native-capabilities.d.ts.map +1 -1
  88. package/dist/src/activity/native-capabilities.js +8 -12
  89. package/dist/src/activity/native-capabilities.js.map +1 -1
  90. package/dist/src/activity/normalize.d.ts.map +1 -1
  91. package/dist/src/activity/normalize.js +64 -6
  92. package/dist/src/activity/normalize.js.map +1 -1
  93. package/dist/src/activity/opencode-message-tables.d.ts +87 -0
  94. package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
  95. package/dist/src/activity/opencode-message-tables.js +546 -0
  96. package/dist/src/activity/opencode-message-tables.js.map +1 -0
  97. package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
  98. package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
  99. package/dist/src/activity/opencode-sqlite-source.js +154 -63
  100. package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
  101. package/dist/src/activity/source-reader.d.ts +60 -4
  102. package/dist/src/activity/source-reader.d.ts.map +1 -1
  103. package/dist/src/activity/source-reader.js +593 -75
  104. package/dist/src/activity/source-reader.js.map +1 -1
  105. package/dist/src/activity/sqlite-connections.d.ts +77 -0
  106. package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
  107. package/dist/src/activity/sqlite-connections.js +220 -0
  108. package/dist/src/activity/sqlite-connections.js.map +1 -0
  109. package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
  110. package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
  111. package/dist/src/activity/zed-sqlite-source.js +547 -0
  112. package/dist/src/activity/zed-sqlite-source.js.map +1 -0
  113. package/dist/src/agent-action-executor.d.ts +18 -1
  114. package/dist/src/agent-action-executor.d.ts.map +1 -1
  115. package/dist/src/agent-action-executor.js +113 -58
  116. package/dist/src/agent-action-executor.js.map +1 -1
  117. package/dist/src/agentic-guardian.d.ts.map +1 -1
  118. package/dist/src/agentic-guardian.js +6 -5
  119. package/dist/src/agentic-guardian.js.map +1 -1
  120. package/dist/src/atomic-replace.d.ts +7 -0
  121. package/dist/src/atomic-replace.d.ts.map +1 -1
  122. package/dist/src/atomic-replace.js +28 -3
  123. package/dist/src/atomic-replace.js.map +1 -1
  124. package/dist/src/bridge-journal.d.ts +32 -0
  125. package/dist/src/bridge-journal.d.ts.map +1 -0
  126. package/dist/src/bridge-journal.js +113 -0
  127. package/dist/src/bridge-journal.js.map +1 -0
  128. package/dist/src/cli.d.ts +7 -1
  129. package/dist/src/cli.d.ts.map +1 -1
  130. package/dist/src/cli.js +534 -50
  131. package/dist/src/cli.js.map +1 -1
  132. package/dist/src/collection-notice.d.ts +34 -0
  133. package/dist/src/collection-notice.d.ts.map +1 -0
  134. package/dist/src/collection-notice.js +73 -0
  135. package/dist/src/collection-notice.js.map +1 -0
  136. package/dist/src/config.d.ts +39 -0
  137. package/dist/src/config.d.ts.map +1 -1
  138. package/dist/src/config.js +187 -36
  139. package/dist/src/config.js.map +1 -1
  140. package/dist/src/connection-config.d.ts.map +1 -1
  141. package/dist/src/connection-config.js +5 -0
  142. package/dist/src/connection-config.js.map +1 -1
  143. package/dist/src/content-redaction.d.ts +17 -1
  144. package/dist/src/content-redaction.d.ts.map +1 -1
  145. package/dist/src/content-redaction.js +51 -3
  146. package/dist/src/content-redaction.js.map +1 -1
  147. package/dist/src/credential-store.d.ts +20 -1
  148. package/dist/src/credential-store.d.ts.map +1 -1
  149. package/dist/src/credential-store.js +29 -4
  150. package/dist/src/credential-store.js.map +1 -1
  151. package/dist/src/custom-agent-registry.d.ts.map +1 -1
  152. package/dist/src/custom-agent-registry.js +2 -1
  153. package/dist/src/custom-agent-registry.js.map +1 -1
  154. package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
  155. package/dist/src/discovery/adapters/generic.js +160 -2
  156. package/dist/src/discovery/adapters/generic.js.map +1 -1
  157. package/dist/src/discovery/engine.d.ts +7 -1
  158. package/dist/src/discovery/engine.d.ts.map +1 -1
  159. package/dist/src/discovery/engine.js +21 -16
  160. package/dist/src/discovery/engine.js.map +1 -1
  161. package/dist/src/discovery/known-agent.d.ts +7 -0
  162. package/dist/src/discovery/known-agent.d.ts.map +1 -1
  163. package/dist/src/discovery/known-agent.js +9 -4
  164. package/dist/src/discovery/known-agent.js.map +1 -1
  165. package/dist/src/discovery/system-evidence.d.ts +40 -1
  166. package/dist/src/discovery/system-evidence.d.ts.map +1 -1
  167. package/dist/src/discovery/system-evidence.js +189 -16
  168. package/dist/src/discovery/system-evidence.js.map +1 -1
  169. package/dist/src/doctor-check.d.ts +51 -0
  170. package/dist/src/doctor-check.d.ts.map +1 -0
  171. package/dist/src/doctor-check.js +174 -0
  172. package/dist/src/doctor-check.js.map +1 -0
  173. package/dist/src/enroll.d.ts +86 -0
  174. package/dist/src/enroll.d.ts.map +1 -0
  175. package/dist/src/enroll.js +245 -0
  176. package/dist/src/enroll.js.map +1 -0
  177. package/dist/src/entry.d.ts +3 -0
  178. package/dist/src/entry.d.ts.map +1 -0
  179. package/dist/src/entry.js +14 -0
  180. package/dist/src/entry.js.map +1 -0
  181. package/dist/src/event-queue.d.ts +13 -1
  182. package/dist/src/event-queue.d.ts.map +1 -1
  183. package/dist/src/event-queue.js +137 -42
  184. package/dist/src/event-queue.js.map +1 -1
  185. package/dist/src/event-spool.d.ts +61 -3
  186. package/dist/src/event-spool.d.ts.map +1 -1
  187. package/dist/src/event-spool.js +341 -44
  188. package/dist/src/event-spool.js.map +1 -1
  189. package/dist/src/generated/phigon/v1/identity_pb.d.ts +7 -0
  190. package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
  191. package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
  192. package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
  193. package/dist/src/guardian-containment.d.ts +2 -6
  194. package/dist/src/guardian-containment.d.ts.map +1 -1
  195. package/dist/src/guardian-containment.js +12 -63
  196. package/dist/src/guardian-containment.js.map +1 -1
  197. package/dist/src/guardian-decision-journal.d.ts.map +1 -1
  198. package/dist/src/guardian-decision-journal.js +4 -19
  199. package/dist/src/guardian-decision-journal.js.map +1 -1
  200. package/dist/src/guardian-managed-exec.d.ts.map +1 -1
  201. package/dist/src/guardian-managed-exec.js +6 -18
  202. package/dist/src/guardian-managed-exec.js.map +1 -1
  203. package/dist/src/guardian-model-bridge.d.ts.map +1 -1
  204. package/dist/src/guardian-model-bridge.js +2 -1
  205. package/dist/src/guardian-model-bridge.js.map +1 -1
  206. package/dist/src/guardian-native.d.ts +0 -1
  207. package/dist/src/guardian-native.d.ts.map +1 -1
  208. package/dist/src/guardian-native.js +0 -6
  209. package/dist/src/guardian-native.js.map +1 -1
  210. package/dist/src/guardian-process-monitor.d.ts +4 -0
  211. package/dist/src/guardian-process-monitor.d.ts.map +1 -1
  212. package/dist/src/guardian-process-monitor.js +82 -26
  213. package/dist/src/guardian-process-monitor.js.map +1 -1
  214. package/dist/src/health.d.ts +19 -1
  215. package/dist/src/health.d.ts.map +1 -1
  216. package/dist/src/health.js +22 -1
  217. package/dist/src/health.js.map +1 -1
  218. package/dist/src/historical-identity-store.d.ts +8 -1
  219. package/dist/src/historical-identity-store.d.ts.map +1 -1
  220. package/dist/src/historical-identity-store.js +28 -10
  221. package/dist/src/historical-identity-store.js.map +1 -1
  222. package/dist/src/index.d.ts +2 -0
  223. package/dist/src/index.d.ts.map +1 -1
  224. package/dist/src/index.js +2 -0
  225. package/dist/src/index.js.map +1 -1
  226. package/dist/src/installation.d.ts +2 -0
  227. package/dist/src/installation.d.ts.map +1 -1
  228. package/dist/src/installation.js +6 -3
  229. package/dist/src/installation.js.map +1 -1
  230. package/dist/src/instance-lock.d.ts +45 -0
  231. package/dist/src/instance-lock.d.ts.map +1 -0
  232. package/dist/src/instance-lock.js +243 -0
  233. package/dist/src/instance-lock.js.map +1 -0
  234. package/dist/src/machine-command-executor.d.ts +22 -7
  235. package/dist/src/machine-command-executor.d.ts.map +1 -1
  236. package/dist/src/machine-command-executor.js +80 -19
  237. package/dist/src/machine-command-executor.js.map +1 -1
  238. package/dist/src/node-version.d.ts +8 -0
  239. package/dist/src/node-version.d.ts.map +1 -0
  240. package/dist/src/node-version.js +17 -0
  241. package/dist/src/node-version.js.map +1 -0
  242. package/dist/src/observer-log.d.ts +50 -0
  243. package/dist/src/observer-log.d.ts.map +1 -0
  244. package/dist/src/observer-log.js +141 -0
  245. package/dist/src/observer-log.js.map +1 -0
  246. package/dist/src/pair.d.ts +68 -1
  247. package/dist/src/pair.d.ts.map +1 -1
  248. package/dist/src/pair.js +204 -65
  249. package/dist/src/pair.js.map +1 -1
  250. package/dist/src/private-directory.d.ts +10 -0
  251. package/dist/src/private-directory.d.ts.map +1 -0
  252. package/dist/src/private-directory.js +66 -0
  253. package/dist/src/private-directory.js.map +1 -0
  254. package/dist/src/process-tree.d.ts +73 -0
  255. package/dist/src/process-tree.d.ts.map +1 -0
  256. package/dist/src/process-tree.js +256 -0
  257. package/dist/src/process-tree.js.map +1 -0
  258. package/dist/src/proxy.d.ts +68 -0
  259. package/dist/src/proxy.d.ts.map +1 -0
  260. package/dist/src/proxy.js +209 -0
  261. package/dist/src/proxy.js.map +1 -0
  262. package/dist/src/purge.d.ts +17 -0
  263. package/dist/src/purge.d.ts.map +1 -0
  264. package/dist/src/purge.js +84 -0
  265. package/dist/src/purge.js.map +1 -0
  266. package/dist/src/remove-machine.d.ts +5 -1
  267. package/dist/src/remove-machine.d.ts.map +1 -1
  268. package/dist/src/remove-machine.js +28 -14
  269. package/dist/src/remove-machine.js.map +1 -1
  270. package/dist/src/server-authority.d.ts +29 -0
  271. package/dist/src/server-authority.d.ts.map +1 -0
  272. package/dist/src/server-authority.js +106 -0
  273. package/dist/src/server-authority.js.map +1 -0
  274. package/dist/src/server-clock.d.ts +32 -0
  275. package/dist/src/server-clock.d.ts.map +1 -0
  276. package/dist/src/server-clock.js +72 -0
  277. package/dist/src/server-clock.js.map +1 -0
  278. package/dist/src/service-command.d.ts +20 -0
  279. package/dist/src/service-command.d.ts.map +1 -0
  280. package/dist/src/service-command.js +136 -0
  281. package/dist/src/service-command.js.map +1 -0
  282. package/dist/src/service.d.ts +98 -0
  283. package/dist/src/service.d.ts.map +1 -0
  284. package/dist/src/service.js +472 -0
  285. package/dist/src/service.js.map +1 -0
  286. package/dist/src/stream-client.d.ts +21 -1
  287. package/dist/src/stream-client.d.ts.map +1 -1
  288. package/dist/src/stream-client.js +137 -24
  289. package/dist/src/stream-client.js.map +1 -1
  290. package/dist/src/stream-state.d.ts +2 -0
  291. package/dist/src/stream-state.d.ts.map +1 -1
  292. package/dist/src/stream-state.js +5 -2
  293. package/dist/src/stream-state.js.map +1 -1
  294. package/dist/src/system-inspection.d.ts +78 -0
  295. package/dist/src/system-inspection.d.ts.map +1 -0
  296. package/dist/src/system-inspection.js +281 -0
  297. package/dist/src/system-inspection.js.map +1 -0
  298. package/dist/src/update.d.ts.map +1 -1
  299. package/dist/src/update.js +9 -3
  300. package/dist/src/update.js.map +1 -1
  301. package/dist/src/user-notices.d.ts +64 -0
  302. package/dist/src/user-notices.d.ts.map +1 -0
  303. package/dist/src/user-notices.js +141 -0
  304. package/dist/src/user-notices.js.map +1 -0
  305. package/package.json +7 -7
  306. package/dist/src/windows-process.d.ts +0 -7
  307. package/dist/src/windows-process.d.ts.map +0 -1
  308. package/dist/src/windows-process.js +0 -18
  309. 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 declare function runCommand(spec: CommandSpec): Promise<{
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":"AAQA,OAAO,EAA6D,gBAAgB,IAAI,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5L,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;AAI3H,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAa9D;AAED,uFAAuF;AACvF,qBAAa,sBAAsB;;gBAGrB,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAInF,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAShE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAsDvB;AAED;uFACuF;AACvF,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAI1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAyB/I"}
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 { redactSecrets } from "./content-redaction.js";
2
- import { spawn } from "node:child_process";
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 { mkdir, readFile, readdir, lstat, unlink, rename, writeFile } from "node:fs/promises";
5
- import { cpus, freemem, hostname, platform, release, totalmem, uptime } from "node:os";
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
- if (!Number.isFinite(expires) || expires > Date.now() + 330_000)
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 <= Date.now())
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
- result = receipt(State.SUCCEEDED, "inspection_complete", "Current operating-system information collected.", { output: JSON.stringify({ hostname: hostname(), platform: platform(), release: release(), logical_cpus: cpus().length, memory_bytes: totalmem(), free_memory_bytes: freemem(), uptime_seconds: Math.floor(uptime()), observed_at: new Date().toISOString() }, null, 2), exitCode: 0 });
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 = 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 }) });
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
- await rename(temporary, path);
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 (/TOKEN|SECRET|PASSWORD|API_KEY/iu.test(key) && secret && secret.length >= 8)
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_|TOKEN|SECRET|PASSWORD|API_KEY/iu.test(key)));
152
- const 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 } : {}) });
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
- child.stdout.on("data", consume);
172
- child.stderr.on("data", consume);
173
- child.once("error", () => { consume(Buffer.from("Operating system could not launch the requested executable.")); finish(null); });
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
- const killer = spawn(join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "taskkill.exe"), ["/PID", String(child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" });
179
- killer.on("error", () => child.kill());
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(() => { child.stdout.destroy(); child.stderr.destroy(); child.unref(); finish(null); }, spec.timeout_seconds * 1000 + 3000);
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"}