@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
@@ -1,30 +1,125 @@
1
+ import { makeDirectoryPrivateSync } from "./private-directory.js";
1
2
  import { createCipheriv, createDecipheriv, createHash, randomBytes, } from "node:crypto";
2
- import { appendFileSync, chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import { appendFileSync, chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
4
  import { join } from "node:path";
4
5
  import { fromBinary, toBinary } from "@bufbuild/protobuf";
6
+ import { atomicReplaceSync } from "./atomic-replace.js";
5
7
  import { EventEnvelopeSchema, } from "./generated/phigon/v1/telemetry_pb.js";
6
8
  import { BoundedEventQueue } from "./event-queue.js";
9
+ import { streamStateFileName } from "./stream-state.js";
7
10
  const spoolVersion = 1;
8
11
  const spoolFileName = "telemetry-spool.jsonl";
9
- const maxSpoolBytes = 64 << 20;
10
- const compactAfterOperations = 1024;
12
+ const defaultMaxSpoolBytes = 64 << 20;
13
+ // Buffered records are written together, at most this long after the first.
14
+ const flushDelayMs = 100;
15
+ // A burst this large is written at once rather than held in memory.
16
+ const flushAfterBytes = 1 << 20;
17
+ // The spool is rewritten once records that no longer matter (acknowledged,
18
+ // discarded or replaced events, and acknowledgements) outweigh the queued
19
+ // events and pass this size, or a quarter of the budget if that is smaller.
20
+ const compactAfterDeadBytes = 1 << 20;
11
21
  const scopedIDPattern = /^[A-Za-z0-9._:-]{1,128}$/u;
22
+ const retiredPairingsDirectory = "retired-pairings";
23
+ const damagedSpoolsDirectory = "damaged-spools";
24
+ // Each retired or damaged spool can be as large as the spool budget.
25
+ const retainedRetiredPairings = 3;
12
26
  /**
13
27
  * An encrypted append-only delivery spool. The in-memory queue remains the hot
14
28
  * path, while this log makes unacknowledged events recoverable after an
15
29
  * observer restart without writing prompt or tool content as plaintext.
30
+ *
31
+ * Records are group-committed: they are buffered and written with one
32
+ * flushed append at most 100 ms later, or at once by `flush`. An event is
33
+ * durable only after a flush, so a source checkpoint may move past an event
34
+ * only after `flush` returns (the collector's `flushDelivery`). Events the
35
+ * server already acknowledged are safe either way, and a lost
36
+ * acknowledgement or discard record only sends an event again.
16
37
  */
17
38
  export class FileBackedEventQueue extends BoundedEventQueue {
18
39
  #dataDirectory;
19
40
  #path;
41
+ #maxBytes;
42
+ #compactAfterDeadBytes;
20
43
  #scope;
21
44
  #key;
22
- #operations = 0;
23
- constructor(dataDirectory, capacity = 2048) {
45
+ // Prepare the private directory and secure the file once, and track the
46
+ // spool size here instead of stat-ing it before each write.
47
+ #directoryPrepared = false;
48
+ #fileSecured = false;
49
+ #size;
50
+ // Records accepted in memory but not yet written, oldest first.
51
+ #buffer = [];
52
+ #bufferBytes = 0;
53
+ #flushTimer;
54
+ // Why the last write failed. A failed append can leave a partial record,
55
+ // so the next write rewrites the whole spool instead of appending.
56
+ #writeFailure;
57
+ constructor(dataDirectory, capacity = 2048, maxBytes = defaultMaxSpoolBytes) {
24
58
  super(capacity);
59
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
60
+ throw new Error("Telemetry spool byte budget must be a positive integer.");
61
+ }
25
62
  this.#dataDirectory = dataDirectory;
26
63
  this.#path = join(dataDirectory, spoolFileName);
64
+ this.#maxBytes = maxBytes;
65
+ this.#compactAfterDeadBytes = Math.min(compactAfterDeadBytes, Math.max(1, Math.floor(maxBytes / 4)));
66
+ }
67
+ /**
68
+ * Writes every buffered record with one flushed append. Throws when the
69
+ * spool cannot be written; the records stay buffered and the next write
70
+ * retries them.
71
+ */
72
+ flush() {
73
+ if (this.#flushTimer !== undefined) {
74
+ clearTimeout(this.#flushTimer);
75
+ this.#flushTimer = undefined;
76
+ }
77
+ if (this.#writeFailure !== undefined) {
78
+ this.#compact();
79
+ return;
80
+ }
81
+ if (this.#buffer.length === 0)
82
+ return;
83
+ const encoded = this.#buffer.join("");
84
+ try {
85
+ this.#appendToFile(encoded);
86
+ }
87
+ catch (error) {
88
+ this.#writeFailure = error;
89
+ this.#size = undefined;
90
+ throw error;
91
+ }
92
+ this.#size = this.#currentSize() + this.#bufferBytes;
93
+ this.#buffer = [];
94
+ this.#bufferBytes = 0;
95
+ }
96
+ /**
97
+ * Adds the spool's size by bytes: the stored size of the unacknowledged
98
+ * events, which is what a compaction keeps, and the budget it must fit.
99
+ */
100
+ metrics() {
101
+ return Object.freeze({
102
+ ...super.metrics(),
103
+ bytes: this.queuedBytes(),
104
+ byteCapacity: this.#maxBytes,
105
+ });
27
106
  }
107
+ /**
108
+ * Loads the spool for this machine. None of these stops the observer, and
109
+ * the returned notice says which one happened:
110
+ * - A spool that an earlier pairing of this data directory left for
111
+ * another machine cannot be delivered as this one: it is moved aside
112
+ * with its stream cursor.
113
+ * - A spool that is too large to read safely, or holds a record that does
114
+ * not verify before its last line, is moved aside on its own and the
115
+ * queue starts empty. Its events were written before their sources'
116
+ * checkpoints moved, so they are not read again; the moved copy keeps
117
+ * them for an administrator.
118
+ * - A spool with more events than the queue holds, as after lowering
119
+ * PHIGON_ACTIVITY_QUEUE_CAPACITY, keeps the newest events, as a full
120
+ * queue does while running. The control plane records the skipped
121
+ * sequence numbers as a gap.
122
+ */
28
123
  restore(tenantID, machineID, credential) {
29
124
  validateScope(tenantID, machineID);
30
125
  if (!credential.startsWith("phg_m_") || credential.length > 256) {
@@ -38,34 +133,57 @@ export class FileBackedEventQueue extends BoundedEventQueue {
38
133
  !this.#key?.equals(key)) {
39
134
  throw new Error("Telemetry spool scope changed while the observer was running.");
40
135
  }
41
- return;
136
+ return undefined;
42
137
  }
43
138
  this.#scope = scope;
44
139
  this.#key = key;
45
140
  try {
46
141
  if (!existsSync(this.#path))
47
- return;
142
+ return undefined;
48
143
  const metadata = statSync(this.#path);
49
- if (!metadata.isFile() || metadata.size > maxSpoolBytes) {
50
- throw new Error("Telemetry spool exceeds its safe storage bound.");
144
+ if (!metadata.isFile() || metadata.size > this.#maxBytes) {
145
+ return this.#setAsideDamaged();
51
146
  }
52
147
  const restored = new BoundedEventQueue(this.metrics().capacity);
53
148
  const raw = readFileSync(this.#path, "utf8");
149
+ // Every record names its machine in plain text, so another machine's
150
+ // spool is told apart from a damaged one.
151
+ const owner = spoolOwner(raw);
152
+ if (owner !== undefined &&
153
+ (owner.tenantID !== tenantID || owner.machineID !== machineID)) {
154
+ this.#size = undefined;
155
+ const directory = retirePairingState(this.#dataDirectory, owner.machineID);
156
+ return directory === undefined
157
+ ? undefined
158
+ : { reason: "other_machine", directory };
159
+ }
54
160
  const lines = raw.split("\n");
55
161
  const completeLines = lines.slice(0, -1);
56
- for (const line of completeLines) {
57
- if (line.length === 0)
58
- continue;
59
- const record = parseRecord(line, scope);
60
- this.#restoreRecord(record, restored);
162
+ // Events left out because the queue was full, until a later record
163
+ // acknowledges or discards them.
164
+ const dropped = new Set();
165
+ try {
166
+ for (const line of completeLines) {
167
+ if (line.length === 0)
168
+ continue;
169
+ const record = parseRecord(line, scope);
170
+ this.#restoreRecord(record, restored, Buffer.byteLength(line) + 1, dropped);
171
+ }
172
+ }
173
+ catch {
174
+ return this.#setAsideDamaged();
61
175
  }
62
176
  if (!raw.endsWith("\n") && (lines.at(-1)?.length ?? 0) > 0) {
63
- // A crash can leave only the final append incomplete. It was never a
64
- // durable event, so ignore that tail and compact the verified prefix.
177
+ // A crash can leave only the final write incomplete. Its records
178
+ // were never flushed, so no source checkpoint moved past them:
179
+ // ignore that tail and compact the verified prefix.
65
180
  }
66
- this.#writeCompactedQueue(restored);
181
+ const sizes = this.#writeCompactedQueue(restored);
67
182
  this.replaceState(restored);
68
- this.#operations = 0;
183
+ this.reweigh(sizes);
184
+ const acknowledged = restored.metrics().acknowledged;
185
+ const lost = [...dropped].filter((sequence) => sequence > acknowledged).length;
186
+ return lost === 0 ? undefined : { reason: "over_capacity", dropped: lost };
69
187
  }
70
188
  catch (error) {
71
189
  this.#scope = undefined;
@@ -80,24 +198,33 @@ export class FileBackedEventQueue extends BoundedEventQueue {
80
198
  "before an unacknowledged event could be discarded.");
81
199
  }
82
200
  validateEventScope(value, scope, sequence);
201
+ // While the disk refuses writes, refuse new events before they reach
202
+ // memory, as an unbuffered append did; the collector reads them again.
203
+ if (this.#writeFailure !== undefined)
204
+ this.flush();
83
205
  const record = this.#encryptedRecord(value, sequence, coalesceKey);
84
- this.#append(record);
85
- super.enqueue(value, sequence, coalesceKey);
206
+ const bytes = this.#append(record);
207
+ super.enqueue(value, sequence, coalesceKey, bytes);
86
208
  this.#compactIfNeeded();
87
209
  }
210
+ // Removals apply in memory before they are buffered. On a full spool the
211
+ // compaction that makes room for the record then already leaves the
212
+ // removed events out, so an acknowledgement can always drain the spool.
213
+ // A removal lost in a crash only sends the event again, so removals are
214
+ // written lazily with the next group of records.
88
215
  acknowledge(throughSequence) {
89
216
  if (throughSequence <= this.metrics().acknowledged)
90
217
  return;
91
- this.#append(this.#sequenceRecord("acknowledge", throughSequence));
92
218
  super.acknowledge(throughSequence);
219
+ this.#append(this.#sequenceRecord("acknowledge", throughSequence));
93
220
  this.#compactIfNeeded();
94
221
  }
95
222
  discard(sequence) {
96
223
  if (!this.pending().some((event) => event.sequence === sequence)) {
97
224
  return false;
98
225
  }
99
- this.#append(this.#sequenceRecord("discard", sequence));
100
226
  const discarded = super.discard(sequence);
227
+ this.#append(this.#sequenceRecord("discard", sequence));
101
228
  this.#compactIfNeeded();
102
229
  return discarded;
103
230
  }
@@ -115,7 +242,7 @@ export class FileBackedEventQueue extends BoundedEventQueue {
115
242
  });
116
243
  this.#compact();
117
244
  }
118
- #restoreRecord(record, target) {
245
+ #restoreRecord(record, target, bytes, dropped) {
119
246
  const sequence = parseSequence(record.sequence);
120
247
  if (record.operation === "acknowledge") {
121
248
  target.acknowledge(sequence);
@@ -123,13 +250,28 @@ export class FileBackedEventQueue extends BoundedEventQueue {
123
250
  }
124
251
  if (record.operation === "discard") {
125
252
  target.discard(sequence);
253
+ dropped.delete(sequence);
126
254
  return;
127
255
  }
128
256
  const event = this.#decrypt(record);
129
- if (!target.canEnqueue(record.coalesce_key)) {
130
- throw new Error("Telemetry spool contains more events than the configured queue capacity.");
257
+ if (sequence > target.metrics().acknowledged &&
258
+ !target.canEnqueue(record.coalesce_key)) {
259
+ // A full queue makes room by leaving out its oldest event.
260
+ const oldest = target.metrics().oldestSequence;
261
+ if (oldest !== undefined)
262
+ dropped.add(oldest);
131
263
  }
132
- target.enqueue(event, sequence, record.coalesce_key);
264
+ target.enqueue(event, sequence, record.coalesce_key, bytes);
265
+ }
266
+ /** Moves an unreadable spool aside so the queue can start empty. */
267
+ #setAsideDamaged() {
268
+ this.#size = undefined;
269
+ removeSpoolFiles(this.#dataDirectory, false);
270
+ const directory = moveAside(this.#dataDirectory, damagedSpoolsDirectory, "damaged", [spoolFileName]);
271
+ if (directory === undefined) {
272
+ throw new Error("Telemetry spool disappeared while it was being moved aside.");
273
+ }
274
+ return { reason: "damaged", directory };
133
275
  }
134
276
  #encryptedRecord(event, sequence, coalesceKey) {
135
277
  const scope = this.#requireScope();
@@ -184,44 +326,119 @@ export class FileBackedEventQueue extends BoundedEventQueue {
184
326
  sequence: sequence.toString(),
185
327
  };
186
328
  }
329
+ /** Buffer one record for the next group write and return its stored size. */
187
330
  #append(record) {
188
- mkdirSync(this.#dataDirectory, { recursive: true, mode: 0o700 });
189
- chmodSync(this.#dataDirectory, 0o700);
190
331
  const encoded = `${JSON.stringify(record)}\n`;
191
- let size = existsSync(this.#path) ? statSync(this.#path).size : 0;
192
- if (size + Buffer.byteLength(encoded) > maxSpoolBytes) {
332
+ const bytes = Buffer.byteLength(encoded);
333
+ if (this.#storedBytes() + bytes > this.#maxBytes) {
193
334
  this.#compact();
194
- size = statSync(this.#path).size;
195
335
  }
196
- if (size + Buffer.byteLength(encoded) > maxSpoolBytes) {
336
+ if (this.#storedBytes() + bytes > this.#maxBytes) {
197
337
  throw new Error("Telemetry spool is full; collection stopped before data loss.");
198
338
  }
199
- appendFileSync(this.#path, encoded, {
339
+ this.#buffer.push(encoded);
340
+ this.#bufferBytes += bytes;
341
+ if (this.#bufferBytes >= flushAfterBytes) {
342
+ this.#flushQuietly();
343
+ }
344
+ else {
345
+ this.#flushTimer ??= setTimeout(() => {
346
+ this.#flushTimer = undefined;
347
+ this.#flushQuietly();
348
+ }, flushDelayMs).unref();
349
+ }
350
+ return bytes;
351
+ }
352
+ /**
353
+ * A write that runs outside a caller who could handle its failure. The
354
+ * failure is kept: the next event is refused until a write succeeds, and
355
+ * no source checkpoint moves past an unwritten event.
356
+ */
357
+ #flushQuietly() {
358
+ try {
359
+ this.flush();
360
+ }
361
+ catch {
362
+ // Kept in #writeFailure; the next write retries.
363
+ }
364
+ }
365
+ /** One flushed append of `encoded`. */
366
+ #appendToFile(encoded) {
367
+ this.#prepareDirectory();
368
+ if (this.#currentSize() === 0)
369
+ this.#fileSecured = false;
370
+ const options = {
200
371
  encoding: "utf8",
201
372
  mode: 0o600,
202
373
  flush: true,
203
- });
204
- chmodSync(this.#path, 0o600);
205
- this.#operations++;
374
+ };
375
+ try {
376
+ appendFileSync(this.#path, encoded, options);
377
+ }
378
+ catch (error) {
379
+ if (!isNodeError(error) || error.code !== "ENOENT")
380
+ throw error;
381
+ // The data directory was removed while running: recreate it privately.
382
+ this.#directoryPrepared = false;
383
+ this.#fileSecured = false;
384
+ this.#size = 0;
385
+ this.#prepareDirectory();
386
+ appendFileSync(this.#path, encoded, options);
387
+ }
388
+ if (!this.#fileSecured) {
389
+ chmodSync(this.#path, 0o600);
390
+ this.#fileSecured = true;
391
+ }
392
+ }
393
+ /** The spool's size once the buffered records are written. */
394
+ #storedBytes() {
395
+ return this.#currentSize() + this.#bufferBytes;
396
+ }
397
+ #prepareDirectory() {
398
+ if (this.#directoryPrepared)
399
+ return;
400
+ mkdirSync(this.#dataDirectory, { recursive: true, mode: 0o700 });
401
+ makeDirectoryPrivateSync(this.#dataDirectory);
402
+ this.#directoryPrepared = true;
403
+ }
404
+ #currentSize() {
405
+ if (this.#size === undefined) {
406
+ try {
407
+ this.#size = statSync(this.#path).size;
408
+ }
409
+ catch (error) {
410
+ if (!isNodeError(error) || error.code !== "ENOENT")
411
+ throw error;
412
+ this.#size = 0;
413
+ }
414
+ }
415
+ return this.#size;
206
416
  }
207
417
  #compactIfNeeded() {
208
- if (this.#operations >= compactAfterOperations)
418
+ // A compaction rewrites the queued events, so rewriting only once the
419
+ // records it drops outweigh them keeps its cost proportional to the
420
+ // records appended since the last one.
421
+ const live = this.queuedBytes();
422
+ const dead = this.#storedBytes() - live;
423
+ if (dead >= this.#compactAfterDeadBytes && dead > live)
209
424
  this.#compact();
210
425
  }
426
+ /** Rewrite the spool from memory, which also writes every buffered record. */
211
427
  #compact() {
212
- this.#writeCompactedQueue(this);
213
- this.#operations = 0;
428
+ this.reweigh(this.#writeCompactedQueue(this));
214
429
  }
430
+ /** Rewrite the spool as `queue` and return each queued event's stored size. */
215
431
  #writeCompactedQueue(queue) {
216
432
  this.#requireScope();
217
433
  mkdirSync(this.#dataDirectory, { recursive: true, mode: 0o700 });
218
- chmodSync(this.#dataDirectory, 0o700);
434
+ makeDirectoryPrivateSync(this.#dataDirectory);
219
435
  const records = [
220
436
  this.#sequenceRecord("acknowledge", queue.metrics().acknowledged),
221
437
  ...queue.entries().map((entry) => this.#encryptedRecord(entry.value, entry.sequence, entry.coalesceKey)),
222
438
  ];
223
- const encoded = `${records.map((record) => JSON.stringify(record)).join("\n")}\n`;
224
- if (Buffer.byteLength(encoded) > maxSpoolBytes) {
439
+ const lines = records.map((record) => JSON.stringify(record));
440
+ const encoded = `${lines.join("\n")}\n`;
441
+ if (Buffer.byteLength(encoded) > this.#maxBytes) {
225
442
  throw new Error("Telemetry spool is full; collection stopped before data loss.");
226
443
  }
227
444
  const temporaryPath = `${this.#path}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
@@ -232,8 +449,20 @@ export class FileBackedEventQueue extends BoundedEventQueue {
232
449
  mode: 0o600,
233
450
  flush: true,
234
451
  });
235
- renameSync(temporaryPath, this.#path);
452
+ this.#size = undefined;
453
+ atomicReplaceSync(temporaryPath, this.#path);
236
454
  chmodSync(this.#path, 0o600);
455
+ this.#directoryPrepared = true;
456
+ this.#fileSecured = true;
457
+ this.#size = Buffer.byteLength(encoded);
458
+ // Memory already holds every buffered record's effect.
459
+ this.#buffer = [];
460
+ this.#bufferBytes = 0;
461
+ this.#writeFailure = undefined;
462
+ if (this.#flushTimer !== undefined) {
463
+ clearTimeout(this.#flushTimer);
464
+ this.#flushTimer = undefined;
465
+ }
237
466
  }
238
467
  catch (error) {
239
468
  try {
@@ -244,6 +473,8 @@ export class FileBackedEventQueue extends BoundedEventQueue {
244
473
  }
245
474
  throw error;
246
475
  }
476
+ // The first line is the acknowledgement; each event is one line.
477
+ return lines.slice(1).map((line) => Buffer.byteLength(line) + 1);
247
478
  }
248
479
  #requireScope() {
249
480
  if (this.#scope === undefined) {
@@ -259,6 +490,50 @@ export class FileBackedEventQueue extends BoundedEventQueue {
259
490
  }
260
491
  }
261
492
  export function clearEventSpool(dataDirectory) {
493
+ removeSpoolFiles(dataDirectory, true);
494
+ }
495
+ /**
496
+ * Moves what an earlier pairing of this data directory left behind out of
497
+ * the way, so a computer paired again as a new machine starts with an empty
498
+ * queue instead of refusing to read the old one. The encrypted spool, the
499
+ * stream cursor and `extraFiles` (such as the old credential, the only key
500
+ * that can still decrypt that spool) go to `retired-pairings/<time>-<machine>/`.
501
+ * Only the newest few pairings are kept. Returns that directory, or
502
+ * undefined when there was nothing to move.
503
+ */
504
+ export function retirePairingState(dataDirectory, machineID, extraFiles = []) {
505
+ removeSpoolFiles(dataDirectory, false);
506
+ return moveAside(dataDirectory, retiredPairingsDirectory, machineID ?? "unknown", [spoolFileName, streamStateFileName, ...extraFiles]);
507
+ }
508
+ /**
509
+ * Moves the `names` that exist into a new `<rootName>/<time>-<label>-*`
510
+ * directory and keeps only the newest few such directories. Returns the new
511
+ * directory, or undefined when there was nothing to move.
512
+ */
513
+ function moveAside(dataDirectory, rootName, label, names) {
514
+ const present = names.filter((name) => existsSync(join(dataDirectory, name)));
515
+ if (present.length === 0)
516
+ return undefined;
517
+ const root = join(dataDirectory, rootName);
518
+ mkdirSync(root, { recursive: true, mode: 0o700 });
519
+ chmodSync(root, 0o700);
520
+ // The time first, so names sort oldest first; Windows refuses ":" in names.
521
+ const stamp = new Date().toISOString().replace(/[:.]/gu, "-");
522
+ const safeLabel = label.replace(/[^A-Za-z0-9._-]/gu, "_");
523
+ const destination = mkdtempSync(join(root, `${stamp}-${safeLabel}-`));
524
+ for (const name of present) {
525
+ atomicReplaceSync(join(dataDirectory, name), join(destination, name));
526
+ }
527
+ const kept = readdirSync(root, { withFileTypes: true })
528
+ .filter((entry) => entry.isDirectory())
529
+ .map((entry) => entry.name)
530
+ .sort();
531
+ for (const name of kept.slice(0, -retainedRetiredPairings)) {
532
+ rmSync(join(root, name), { recursive: true, force: true });
533
+ }
534
+ return destination;
535
+ }
536
+ function removeSpoolFiles(dataDirectory, includeSpool) {
262
537
  let names;
263
538
  try {
264
539
  names = readdirSync(dataDirectory);
@@ -270,7 +545,7 @@ export function clearEventSpool(dataDirectory) {
270
545
  }
271
546
  for (const name of names) {
272
547
  const temporary = name.startsWith(`${spoolFileName}.`) && name.endsWith(".tmp");
273
- if (name !== spoolFileName && !temporary)
548
+ if (!temporary && !(includeSpool && name === spoolFileName))
274
549
  continue;
275
550
  try {
276
551
  unlinkSync(join(dataDirectory, name));
@@ -281,6 +556,28 @@ export function clearEventSpool(dataDirectory) {
281
556
  }
282
557
  }
283
558
  }
559
+ /** The machine that wrote a spool, from its first record. */
560
+ function spoolOwner(raw) {
561
+ const end = raw.indexOf("\n");
562
+ if (end < 0)
563
+ return undefined;
564
+ let value;
565
+ try {
566
+ value = JSON.parse(raw.slice(0, end));
567
+ }
568
+ catch {
569
+ return undefined;
570
+ }
571
+ if (typeof value !== "object" || value === null ||
572
+ !("version" in value) || value.version !== spoolVersion ||
573
+ !("tenant_id" in value) || typeof value.tenant_id !== "string" ||
574
+ !("machine_id" in value) || typeof value.machine_id !== "string" ||
575
+ !scopedIDPattern.test(value.tenant_id) ||
576
+ !scopedIDPattern.test(value.machine_id)) {
577
+ return undefined;
578
+ }
579
+ return { tenantID: value.tenant_id, machineID: value.machine_id };
580
+ }
284
581
  function parseRecord(line, scope) {
285
582
  let value;
286
583
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"event-spool.js","sourceRoot":"","sources":["../../src/event-spool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,mBAAmB,GAEpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAC9C,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC;AAC/B,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AA8BpD;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAgC;IAC/D,cAAc,CAAS;IACvB,KAAK,CAAS;IACvB,MAAM,CAAyB;IAC/B,IAAI,CAAqB;IACzB,WAAW,GAAG,CAAC,CAAC;IAEhB,YAAY,aAAqB,EAAE,QAAQ,GAAG,IAAI;QAChD,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,QAAgB,EAAE,SAAiB,EAAE,UAAkB;QAC7D,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IACE,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;gBACjC,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;gBACnC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EACvB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO;YACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,GAAG,aAAa,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC/E,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAChC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3D,qEAAqE;gBACrE,sEAAsE;YACxE,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEQ,OAAO,CACd,KAAoB,EACpB,QAAgB,EAChB,WAAoB;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,oDAAoD,CACvD,CAAC;QACJ,CAAC;QACD,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEQ,WAAW,CAAC,eAAuB;QAC1C,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY;YAAE,OAAO;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;QACnE,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEQ,OAAO,CAAC,QAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEQ,qBAAqB,CAAC,eAAuB;QACpD,IAAI,eAAe,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY;YAAE,OAAO;QAC5D,KAAK,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEQ,cAAc,CACrB,OAAgD;QAEhD,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,cAAc,CACZ,MAAmB,EACnB,MAAwC;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IAED,gBAAgB,CACd,KAAoB,EACpB,QAAgB,EAChB,WAAoB;QAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,EAAE;YACd,MAAM,CAAC,UAAU,EAAE;SACpB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;YAC7B,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YACnE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC/B,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,MAAkB;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5E,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAoB,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,GAAG,UAAU,CAChB,mBAAmB,EACnB,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAC/D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe,CACb,SAAoC,EACpC,QAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAmB;QACzB,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9C,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;YAClC,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,WAAW,IAAI,sBAAsB;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClE,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,oBAAoB,CAAC,KAAuC;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,OAAO,GAAkB;YAC7B,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC;YACjE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,IAAI,CAAC,gBAAgB,CACnB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,WAAW,CAClB,CACF;SACF,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAClF,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3F,IAAI,CAAC;YACH,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE;gBACpC,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,UAAU,CAAC,aAAa,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,aAAqB;IACnD,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QAChE,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GACb,IAAI,CAAC,UAAU,CAAC,GAAG,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,aAAa,IAAI,CAAC,SAAS;YAAE,SAAS;QACnD,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAiB;IAClD,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,IACE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAC3C,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY;QACvD,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ;QAC7D,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,SAAS;QAChE,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QACvB,CAAC,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa;YAC/D,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;QAChC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO;QAAE,OAAO,KAA4B,CAAC;IACrE,IACE,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QACtD,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAChE,CAAC,cAAc,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,EACnE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,QAAQ,GAAG,qBAA2B,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB,EAAE,UAAkB;IACrD,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,sCAAsC,EAAE,MAAM,CAAC;SACtD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;SACpB,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;SAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;SACpB,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;SAC1B,MAAM,EAAE,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB,EAAE,QAAgB;IACnD,OAAO,MAAM,CAAC,IAAI,CAChB,gBAAgB,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,EAAE,EAC/D,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,SAAiB;IACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAoB,EACpB,KAAiB,EACjB,QAAgB;IAEhB,IACE,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QACjC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QACnC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"event-spool.js","sourceRoot":"","sources":["../../src/event-spool.ts"],"names":[],"mappings":"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"}
@@ -226,6 +226,13 @@ export type Heartbeat = Message<"phigon.v1.Heartbeat"> & {
226
226
  * @generated from field: uint64 acknowledged_sequence = 10;
227
227
  */
228
228
  acknowledgedSequence: bigint;
229
+ /**
230
+ * The observer that sent this heartbeat. Only version is set; older
231
+ * observers leave the field out.
232
+ *
233
+ * @generated from field: phigon.v1.BuildInfo observer_build = 11;
234
+ */
235
+ observerBuild?: BuildInfo | undefined;
229
236
  };
230
237
  /**
231
238
  * Describes the message phigon.v1.Heartbeat.
@@ -1 +1 @@
1
- {"version":3,"file":"identity_pb.d.ts","sourceRoot":"","sources":["../../../../../src/generated/phigon/v1/identity_pb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity_pb.d.ts","sourceRoot":"","sources":["../../../../../src/generated/phigon/v1/identity_pb.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { file_phigon_v1_common } from "./common_pb.js";
7
7
  /**
8
8
  * Describes the file phigon/v1/identity.proto.
9
9
  */
10
- export const file_phigon_v1_identity = /*@__PURE__*/ fileDesc("ChhwaGlnb24vdjEvaWRlbnRpdHkucHJvdG8SCXBoaWdvbi52MSLpAgoPTWFjaGluZUlkZW50aXR5EhIKCm1hY2hpbmVfaWQYASABKAkSFwoPaW5zdGFsbGF0aW9uX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIQCghob3N0bmFtZRgEIAEoCRI0ChBvcGVyYXRpbmdfc3lzdGVtGAUgASgOMhoucGhpZ29uLnYxLk9wZXJhdGluZ1N5c3RlbRIUCgxhcmNoaXRlY3R1cmUYBiABKAkSIAoYb3BlcmF0aW5nX3N5c3RlbV92ZXJzaW9uGAcgASgJEiwKDm9ic2VydmVyX2J1aWxkGAggASgLMhQucGhpZ29uLnYxLkJ1aWxkSW5mbxI2CgZsYWJlbHMYCSADKAsyJi5waGlnb24udjEuTWFjaGluZUlkZW50aXR5LkxhYmVsc0VudHJ5Gi0KC0xhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEi0wIKDUFnZW50SWRlbnRpdHkSEAoIYWdlbnRfaWQYASABKAkSIgoEa2luZBgCIAEoDjIULnBoaWdvbi52MS5BZ2VudEtpbmQSFAoMZGlzcGxheV9uYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSDwoHcnVudGltZRgFIAEoCRIkCgVzdGF0ZRgGIAEoDjIVLnBoaWdvbi52MS5BZ2VudFN0YXRlEhIKCnByb2Nlc3NfaWQYByABKAQSLgoKc3RhcnRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoQbGFzdF9vYnNlcnZlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFAoMY2FwYWJpbGl0aWVzGAogAygJEh4KFmV4ZWN1dGFibGVfcGF0aF9kaWdlc3QYCyABKAkioQEKDkFnZW50SW52ZW50b3J5EhIKCm1hY2hpbmVfaWQYASABKAkSLwoLb2JzZXJ2ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEigKBmFnZW50cxgDIAMoCzIYLnBoaWdvbi52MS5BZ2VudElkZW50aXR5Eg8KB3BhcnRpYWwYBCABKAgSDwoHbm90aWNlcxgFIAMoCSKaAgoJSGVhcnRiZWF0EhIKCm1hY2hpbmVfaWQYASABKAkSLwoLb2JzZXJ2ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhYKDnVwdGltZV9zZWNvbmRzGAMgASgEEhcKD2J1ZmZlcmVkX2V2ZW50cxgEIAEoDRIVCg1sYXN0X3NlcXVlbmNlGAUgASgEEhcKD2Nsb2NrX29mZnNldF9tcxgGIAEoEhIWCg5xdWV1ZV9jYXBhY2l0eRgHIAEoDRIWCg5kcm9wcGVkX2V2ZW50cxgIIAEoBBIYChBjb2FsZXNjZWRfZXZlbnRzGAkgASgEEh0KFWFja25vd2xlZGdlZF9zZXF1ZW5jZRgKIAEoBEI4WjZnaXRodWIuY29tL3BoaWdvbmFpL29ic2VydmVyL2dvL2dlbi9waGlnb24vdjE7cGhpZ29udjFiBnByb3RvMw", [file_google_protobuf_timestamp, file_phigon_v1_common]);
10
+ export const file_phigon_v1_identity = /*@__PURE__*/ fileDesc("ChhwaGlnb24vdjEvaWRlbnRpdHkucHJvdG8SCXBoaWdvbi52MSLpAgoPTWFjaGluZUlkZW50aXR5EhIKCm1hY2hpbmVfaWQYASABKAkSFwoPaW5zdGFsbGF0aW9uX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIQCghob3N0bmFtZRgEIAEoCRI0ChBvcGVyYXRpbmdfc3lzdGVtGAUgASgOMhoucGhpZ29uLnYxLk9wZXJhdGluZ1N5c3RlbRIUCgxhcmNoaXRlY3R1cmUYBiABKAkSIAoYb3BlcmF0aW5nX3N5c3RlbV92ZXJzaW9uGAcgASgJEiwKDm9ic2VydmVyX2J1aWxkGAggASgLMhQucGhpZ29uLnYxLkJ1aWxkSW5mbxI2CgZsYWJlbHMYCSADKAsyJi5waGlnb24udjEuTWFjaGluZUlkZW50aXR5LkxhYmVsc0VudHJ5Gi0KC0xhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEi0wIKDUFnZW50SWRlbnRpdHkSEAoIYWdlbnRfaWQYASABKAkSIgoEa2luZBgCIAEoDjIULnBoaWdvbi52MS5BZ2VudEtpbmQSFAoMZGlzcGxheV9uYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSDwoHcnVudGltZRgFIAEoCRIkCgVzdGF0ZRgGIAEoDjIVLnBoaWdvbi52MS5BZ2VudFN0YXRlEhIKCnByb2Nlc3NfaWQYByABKAQSLgoKc3RhcnRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoQbGFzdF9vYnNlcnZlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFAoMY2FwYWJpbGl0aWVzGAogAygJEh4KFmV4ZWN1dGFibGVfcGF0aF9kaWdlc3QYCyABKAkioQEKDkFnZW50SW52ZW50b3J5EhIKCm1hY2hpbmVfaWQYASABKAkSLwoLb2JzZXJ2ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEigKBmFnZW50cxgDIAMoCzIYLnBoaWdvbi52MS5BZ2VudElkZW50aXR5Eg8KB3BhcnRpYWwYBCABKAgSDwoHbm90aWNlcxgFIAMoCSLIAgoJSGVhcnRiZWF0EhIKCm1hY2hpbmVfaWQYASABKAkSLwoLb2JzZXJ2ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhYKDnVwdGltZV9zZWNvbmRzGAMgASgEEhcKD2J1ZmZlcmVkX2V2ZW50cxgEIAEoDRIVCg1sYXN0X3NlcXVlbmNlGAUgASgEEhcKD2Nsb2NrX29mZnNldF9tcxgGIAEoEhIWCg5xdWV1ZV9jYXBhY2l0eRgHIAEoDRIWCg5kcm9wcGVkX2V2ZW50cxgIIAEoBBIYChBjb2FsZXNjZWRfZXZlbnRzGAkgASgEEh0KFWFja25vd2xlZGdlZF9zZXF1ZW5jZRgKIAEoBBIsCg5vYnNlcnZlcl9idWlsZBgLIAEoCzIULnBoaWdvbi52MS5CdWlsZEluZm9COFo2Z2l0aHViLmNvbS9waGlnb25haS9vYnNlcnZlci9nby9nZW4vcGhpZ29uL3YxO3BoaWdvbnYxYgZwcm90bzM", [file_google_protobuf_timestamp, file_phigon_v1_common]);
11
11
  /**
12
12
  * Describes the message phigon.v1.MachineIdentity.
13
13
  * Use `create(MachineIdentitySchema)` to create a new message.