@phigon/observer 8.0.1

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 (284) hide show
  1. package/README.md +303 -0
  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/action-policy.d.ts +38 -0
  9. package/dist/src/action-policy.d.ts.map +1 -0
  10. package/dist/src/action-policy.js +269 -0
  11. package/dist/src/action-policy.js.map +1 -0
  12. package/dist/src/activity/adapters/claude.d.ts +3 -0
  13. package/dist/src/activity/adapters/claude.d.ts.map +1 -0
  14. package/dist/src/activity/adapters/claude.js +89 -0
  15. package/dist/src/activity/adapters/claude.js.map +1 -0
  16. package/dist/src/activity/adapters/codex.d.ts +3 -0
  17. package/dist/src/activity/adapters/codex.d.ts.map +1 -0
  18. package/dist/src/activity/adapters/codex.js +277 -0
  19. package/dist/src/activity/adapters/codex.js.map +1 -0
  20. package/dist/src/activity/adapters/copilot.d.ts +2 -0
  21. package/dist/src/activity/adapters/copilot.d.ts.map +1 -0
  22. package/dist/src/activity/adapters/copilot.js +4 -0
  23. package/dist/src/activity/adapters/copilot.js.map +1 -0
  24. package/dist/src/activity/adapters/generic.d.ts +2 -0
  25. package/dist/src/activity/adapters/generic.d.ts.map +1 -0
  26. package/dist/src/activity/adapters/generic.js +4 -0
  27. package/dist/src/activity/adapters/generic.js.map +1 -0
  28. package/dist/src/activity/adapters/hermes.d.ts +2 -0
  29. package/dist/src/activity/adapters/hermes.d.ts.map +1 -0
  30. package/dist/src/activity/adapters/hermes.js +4 -0
  31. package/dist/src/activity/adapters/hermes.js.map +1 -0
  32. package/dist/src/activity/adapters/openai-compatible.d.ts +4 -0
  33. package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -0
  34. package/dist/src/activity/adapters/openai-compatible.js +116 -0
  35. package/dist/src/activity/adapters/openai-compatible.js.map +1 -0
  36. package/dist/src/activity/adapters/openclaw.d.ts +2 -0
  37. package/dist/src/activity/adapters/openclaw.d.ts.map +1 -0
  38. package/dist/src/activity/adapters/openclaw.js +4 -0
  39. package/dist/src/activity/adapters/openclaw.js.map +1 -0
  40. package/dist/src/activity/adapters/opencode.d.ts +3 -0
  41. package/dist/src/activity/adapters/opencode.d.ts.map +1 -0
  42. package/dist/src/activity/adapters/opencode.js +137 -0
  43. package/dist/src/activity/adapters/opencode.js.map +1 -0
  44. package/dist/src/activity/bridges.d.ts +7 -0
  45. package/dist/src/activity/bridges.d.ts.map +1 -0
  46. package/dist/src/activity/bridges.js +17 -0
  47. package/dist/src/activity/bridges.js.map +1 -0
  48. package/dist/src/activity/collector.d.ts +90 -0
  49. package/dist/src/activity/collector.d.ts.map +1 -0
  50. package/dist/src/activity/collector.js +706 -0
  51. package/dist/src/activity/collector.js.map +1 -0
  52. package/dist/src/activity/index.d.ts +14 -0
  53. package/dist/src/activity/index.d.ts.map +1 -0
  54. package/dist/src/activity/index.js +14 -0
  55. package/dist/src/activity/index.js.map +1 -0
  56. package/dist/src/activity/ingest.d.ts +15 -0
  57. package/dist/src/activity/ingest.d.ts.map +1 -0
  58. package/dist/src/activity/ingest.js +103 -0
  59. package/dist/src/activity/ingest.js.map +1 -0
  60. package/dist/src/activity/native-capabilities.d.ts +14 -0
  61. package/dist/src/activity/native-capabilities.d.ts.map +1 -0
  62. package/dist/src/activity/native-capabilities.js +85 -0
  63. package/dist/src/activity/native-capabilities.js.map +1 -0
  64. package/dist/src/activity/normalize.d.ts +17 -0
  65. package/dist/src/activity/normalize.d.ts.map +1 -0
  66. package/dist/src/activity/normalize.js +416 -0
  67. package/dist/src/activity/normalize.js.map +1 -0
  68. package/dist/src/activity/opencode-sqlite-source.d.ts +19 -0
  69. package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -0
  70. package/dist/src/activity/opencode-sqlite-source.js +305 -0
  71. package/dist/src/activity/opencode-sqlite-source.js.map +1 -0
  72. package/dist/src/activity/policy.d.ts +48 -0
  73. package/dist/src/activity/policy.d.ts.map +1 -0
  74. package/dist/src/activity/policy.js +436 -0
  75. package/dist/src/activity/policy.js.map +1 -0
  76. package/dist/src/activity/record.d.ts +7 -0
  77. package/dist/src/activity/record.d.ts.map +1 -0
  78. package/dist/src/activity/record.js +61 -0
  79. package/dist/src/activity/record.js.map +1 -0
  80. package/dist/src/activity/source-reader.d.ts +46 -0
  81. package/dist/src/activity/source-reader.d.ts.map +1 -0
  82. package/dist/src/activity/source-reader.js +594 -0
  83. package/dist/src/activity/source-reader.js.map +1 -0
  84. package/dist/src/activity/types.d.ts +21 -0
  85. package/dist/src/activity/types.d.ts.map +1 -0
  86. package/dist/src/activity/types.js +2 -0
  87. package/dist/src/activity/types.js.map +1 -0
  88. package/dist/src/agent-action-executor.d.ts +21 -0
  89. package/dist/src/agent-action-executor.d.ts.map +1 -0
  90. package/dist/src/agent-action-executor.js +248 -0
  91. package/dist/src/agent-action-executor.js.map +1 -0
  92. package/dist/src/agentic-guardian.d.ts +50 -0
  93. package/dist/src/agentic-guardian.d.ts.map +1 -0
  94. package/dist/src/agentic-guardian.js +220 -0
  95. package/dist/src/agentic-guardian.js.map +1 -0
  96. package/dist/src/atomic-replace.d.ts +4 -0
  97. package/dist/src/atomic-replace.d.ts.map +1 -0
  98. package/dist/src/atomic-replace.js +18 -0
  99. package/dist/src/atomic-replace.js.map +1 -0
  100. package/dist/src/cli.d.ts +11 -0
  101. package/dist/src/cli.d.ts.map +1 -0
  102. package/dist/src/cli.js +1244 -0
  103. package/dist/src/cli.js.map +1 -0
  104. package/dist/src/config.d.ts +68 -0
  105. package/dist/src/config.d.ts.map +1 -0
  106. package/dist/src/config.js +260 -0
  107. package/dist/src/config.js.map +1 -0
  108. package/dist/src/credential-store.d.ts +22 -0
  109. package/dist/src/credential-store.d.ts.map +1 -0
  110. package/dist/src/credential-store.js +91 -0
  111. package/dist/src/credential-store.js.map +1 -0
  112. package/dist/src/custom-agent-registry.d.ts +26 -0
  113. package/dist/src/custom-agent-registry.d.ts.map +1 -0
  114. package/dist/src/custom-agent-registry.js +288 -0
  115. package/dist/src/custom-agent-registry.js.map +1 -0
  116. package/dist/src/discovery/adapters/claude.d.ts +3 -0
  117. package/dist/src/discovery/adapters/claude.d.ts.map +1 -0
  118. package/dist/src/discovery/adapters/claude.js +26 -0
  119. package/dist/src/discovery/adapters/claude.js.map +1 -0
  120. package/dist/src/discovery/adapters/codex.d.ts +3 -0
  121. package/dist/src/discovery/adapters/codex.d.ts.map +1 -0
  122. package/dist/src/discovery/adapters/codex.js +23 -0
  123. package/dist/src/discovery/adapters/codex.js.map +1 -0
  124. package/dist/src/discovery/adapters/custom.d.ts +4 -0
  125. package/dist/src/discovery/adapters/custom.d.ts.map +1 -0
  126. package/dist/src/discovery/adapters/custom.js +24 -0
  127. package/dist/src/discovery/adapters/custom.js.map +1 -0
  128. package/dist/src/discovery/adapters/generic.d.ts +3 -0
  129. package/dist/src/discovery/adapters/generic.d.ts.map +1 -0
  130. package/dist/src/discovery/adapters/generic.js +126 -0
  131. package/dist/src/discovery/adapters/generic.js.map +1 -0
  132. package/dist/src/discovery/adapters/hermes.d.ts +3 -0
  133. package/dist/src/discovery/adapters/hermes.d.ts.map +1 -0
  134. package/dist/src/discovery/adapters/hermes.js +22 -0
  135. package/dist/src/discovery/adapters/hermes.js.map +1 -0
  136. package/dist/src/discovery/adapters/openclaw.d.ts +3 -0
  137. package/dist/src/discovery/adapters/openclaw.d.ts.map +1 -0
  138. package/dist/src/discovery/adapters/openclaw.js +22 -0
  139. package/dist/src/discovery/adapters/openclaw.js.map +1 -0
  140. package/dist/src/discovery/engine.d.ts +17 -0
  141. package/dist/src/discovery/engine.d.ts.map +1 -0
  142. package/dist/src/discovery/engine.js +164 -0
  143. package/dist/src/discovery/engine.js.map +1 -0
  144. package/dist/src/discovery/evidence.d.ts +29 -0
  145. package/dist/src/discovery/evidence.d.ts.map +1 -0
  146. package/dist/src/discovery/evidence.js +2 -0
  147. package/dist/src/discovery/evidence.js.map +1 -0
  148. package/dist/src/discovery/index.d.ts +11 -0
  149. package/dist/src/discovery/index.d.ts.map +1 -0
  150. package/dist/src/discovery/index.js +11 -0
  151. package/dist/src/discovery/index.js.map +1 -0
  152. package/dist/src/discovery/known-agent.d.ts +17 -0
  153. package/dist/src/discovery/known-agent.d.ts.map +1 -0
  154. package/dist/src/discovery/known-agent.js +193 -0
  155. package/dist/src/discovery/known-agent.js.map +1 -0
  156. package/dist/src/discovery/process-identity.d.ts +19 -0
  157. package/dist/src/discovery/process-identity.d.ts.map +1 -0
  158. package/dist/src/discovery/process-identity.js +73 -0
  159. package/dist/src/discovery/process-identity.js.map +1 -0
  160. package/dist/src/discovery/system-evidence.d.ts +9 -0
  161. package/dist/src/discovery/system-evidence.d.ts.map +1 -0
  162. package/dist/src/discovery/system-evidence.js +270 -0
  163. package/dist/src/discovery/system-evidence.js.map +1 -0
  164. package/dist/src/discovery/types.d.ts +21 -0
  165. package/dist/src/discovery/types.d.ts.map +1 -0
  166. package/dist/src/discovery/types.js +2 -0
  167. package/dist/src/discovery/types.js.map +1 -0
  168. package/dist/src/event-queue.d.ts +32 -0
  169. package/dist/src/event-queue.d.ts.map +1 -0
  170. package/dist/src/event-queue.js +125 -0
  171. package/dist/src/event-queue.js.map +1 -0
  172. package/dist/src/event-spool.d.ts +19 -0
  173. package/dist/src/event-spool.d.ts.map +1 -0
  174. package/dist/src/event-spool.js +350 -0
  175. package/dist/src/event-spool.js.map +1 -0
  176. package/dist/src/generated/phigon/v1/action_pb.d.ts +223 -0
  177. package/dist/src/generated/phigon/v1/action_pb.d.ts.map +1 -0
  178. package/dist/src/generated/phigon/v1/action_pb.js +96 -0
  179. package/dist/src/generated/phigon/v1/action_pb.js.map +1 -0
  180. package/dist/src/generated/phigon/v1/common_pb.d.ts +255 -0
  181. package/dist/src/generated/phigon/v1/common_pb.d.ts.map +1 -0
  182. package/dist/src/generated/phigon/v1/common_pb.js +242 -0
  183. package/dist/src/generated/phigon/v1/common_pb.js.map +1 -0
  184. package/dist/src/generated/phigon/v1/history_sync_pb.d.ts +119 -0
  185. package/dist/src/generated/phigon/v1/history_sync_pb.d.ts.map +1 -0
  186. package/dist/src/generated/phigon/v1/history_sync_pb.js +46 -0
  187. package/dist/src/generated/phigon/v1/history_sync_pb.js.map +1 -0
  188. package/dist/src/generated/phigon/v1/identity_pb.d.ts +235 -0
  189. package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -0
  190. package/dist/src/generated/phigon/v1/identity_pb.js +31 -0
  191. package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -0
  192. package/dist/src/generated/phigon/v1/observer_service_pb.d.ts +362 -0
  193. package/dist/src/generated/phigon/v1/observer_service_pb.d.ts.map +1 -0
  194. package/dist/src/generated/phigon/v1/observer_service_pb.js +120 -0
  195. package/dist/src/generated/phigon/v1/observer_service_pb.js.map +1 -0
  196. package/dist/src/generated/phigon/v1/policy_pb.d.ts +456 -0
  197. package/dist/src/generated/phigon/v1/policy_pb.d.ts.map +1 -0
  198. package/dist/src/generated/phigon/v1/policy_pb.js +161 -0
  199. package/dist/src/generated/phigon/v1/policy_pb.js.map +1 -0
  200. package/dist/src/generated/phigon/v1/supervision_pb.d.ts +849 -0
  201. package/dist/src/generated/phigon/v1/supervision_pb.d.ts.map +1 -0
  202. package/dist/src/generated/phigon/v1/supervision_pb.js +384 -0
  203. package/dist/src/generated/phigon/v1/supervision_pb.js.map +1 -0
  204. package/dist/src/generated/phigon/v1/telemetry_pb.d.ts +761 -0
  205. package/dist/src/generated/phigon/v1/telemetry_pb.d.ts.map +1 -0
  206. package/dist/src/generated/phigon/v1/telemetry_pb.js +309 -0
  207. package/dist/src/generated/phigon/v1/telemetry_pb.js.map +1 -0
  208. package/dist/src/guardian-containment.d.ts +30 -0
  209. package/dist/src/guardian-containment.d.ts.map +1 -0
  210. package/dist/src/guardian-containment.js +113 -0
  211. package/dist/src/guardian-containment.js.map +1 -0
  212. package/dist/src/guardian-decision-journal.d.ts +29 -0
  213. package/dist/src/guardian-decision-journal.d.ts.map +1 -0
  214. package/dist/src/guardian-decision-journal.js +55 -0
  215. package/dist/src/guardian-decision-journal.js.map +1 -0
  216. package/dist/src/guardian-execution-manifest.d.ts +29 -0
  217. package/dist/src/guardian-execution-manifest.d.ts.map +1 -0
  218. package/dist/src/guardian-execution-manifest.js +95 -0
  219. package/dist/src/guardian-execution-manifest.js.map +1 -0
  220. package/dist/src/guardian-hosted-client.d.ts +10 -0
  221. package/dist/src/guardian-hosted-client.d.ts.map +1 -0
  222. package/dist/src/guardian-hosted-client.js +45 -0
  223. package/dist/src/guardian-hosted-client.js.map +1 -0
  224. package/dist/src/guardian-managed-exec.d.ts +21 -0
  225. package/dist/src/guardian-managed-exec.d.ts.map +1 -0
  226. package/dist/src/guardian-managed-exec.js +249 -0
  227. package/dist/src/guardian-managed-exec.js.map +1 -0
  228. package/dist/src/guardian-model-bridge.d.ts +13 -0
  229. package/dist/src/guardian-model-bridge.d.ts.map +1 -0
  230. package/dist/src/guardian-model-bridge.js +87 -0
  231. package/dist/src/guardian-model-bridge.js.map +1 -0
  232. package/dist/src/guardian-native.d.ts +3 -0
  233. package/dist/src/guardian-native.d.ts.map +1 -0
  234. package/dist/src/guardian-native.js +13 -0
  235. package/dist/src/guardian-native.js.map +1 -0
  236. package/dist/src/guardian-process-monitor.d.ts +20 -0
  237. package/dist/src/guardian-process-monitor.d.ts.map +1 -0
  238. package/dist/src/guardian-process-monitor.js +98 -0
  239. package/dist/src/guardian-process-monitor.js.map +1 -0
  240. package/dist/src/health.d.ts +35 -0
  241. package/dist/src/health.d.ts.map +1 -0
  242. package/dist/src/health.js +41 -0
  243. package/dist/src/health.js.map +1 -0
  244. package/dist/src/historical-identity-store.d.ts +20 -0
  245. package/dist/src/historical-identity-store.d.ts.map +1 -0
  246. package/dist/src/historical-identity-store.js +391 -0
  247. package/dist/src/historical-identity-store.js.map +1 -0
  248. package/dist/src/index.d.ts +14 -0
  249. package/dist/src/index.d.ts.map +1 -0
  250. package/dist/src/index.js +14 -0
  251. package/dist/src/index.js.map +1 -0
  252. package/dist/src/installation.d.ts +2 -0
  253. package/dist/src/installation.d.ts.map +1 -0
  254. package/dist/src/installation.js +44 -0
  255. package/dist/src/installation.js.map +1 -0
  256. package/dist/src/machine-command-executor.d.ts +28 -0
  257. package/dist/src/machine-command-executor.d.ts.map +1 -0
  258. package/dist/src/machine-command-executor.js +166 -0
  259. package/dist/src/machine-command-executor.js.map +1 -0
  260. package/dist/src/pair.d.ts +21 -0
  261. package/dist/src/pair.d.ts.map +1 -0
  262. package/dist/src/pair.js +125 -0
  263. package/dist/src/pair.js.map +1 -0
  264. package/dist/src/remove-machine.d.ts +15 -0
  265. package/dist/src/remove-machine.d.ts.map +1 -0
  266. package/dist/src/remove-machine.js +77 -0
  267. package/dist/src/remove-machine.js.map +1 -0
  268. package/dist/src/stream-client.d.ts +42 -0
  269. package/dist/src/stream-client.d.ts.map +1 -0
  270. package/dist/src/stream-client.js +867 -0
  271. package/dist/src/stream-client.js.map +1 -0
  272. package/dist/src/stream-state.d.ts +13 -0
  273. package/dist/src/stream-state.d.ts.map +1 -0
  274. package/dist/src/stream-state.js +128 -0
  275. package/dist/src/stream-state.js.map +1 -0
  276. package/dist/src/windows-process.d.ts +7 -0
  277. package/dist/src/windows-process.d.ts.map +1 -0
  278. package/dist/src/windows-process.js +17 -0
  279. package/dist/src/windows-process.js.map +1 -0
  280. package/package.json +78 -0
  281. package/scripts/install.mjs +308 -0
  282. package/scripts/managed-service.mjs +132 -0
  283. package/scripts/verify-guardian-release.mjs +42 -0
  284. package/scripts/windows-app-control.mjs +117 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historical-identity-store.js","sourceRoot":"","sources":["../../src/historical-identity-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { loadConfig, type CollectionPolicy, type ObserverConfig, type ObserverLogLevel, type ObservabilityProfile, type ActivitySourceDirectories, } from "./config.js";
2
+ export { createHealthSnapshot, type ObserverHealth, } from "./health.js";
3
+ export { FileCredentialStore, type CredentialStore, type StoredMachineCredential, } from "./credential-store.js";
4
+ export { removeMachine, type RemoveMachineResult, } from "./remove-machine.js";
5
+ export { CustomAgentRegistry, customAgentRegistration, type CustomAgentRegistration, } from "./custom-agent-registry.js";
6
+ export { pairMachine, type PairOptions, type PairResult, } from "./pair.js";
7
+ export { BoundedEventQueue, type QueueMetrics, } from "./event-queue.js";
8
+ export { FileBackedEventQueue, clearEventSpool, } from "./event-spool.js";
9
+ export { ObserverStreamClient, type ObserverStreamMetrics, type StreamClientOptions, } from "./stream-client.js";
10
+ export { StreamStateStore, type StreamState, } from "./stream-state.js";
11
+ export { FileActionPolicyStore, managedActionNames, type ActionPolicyPersistence, type ManagedActionName, type StoredActionPolicy, } from "./action-policy.js";
12
+ export * from "./discovery/index.js";
13
+ export * from "./activity/index.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { loadConfig, } from "./config.js";
2
+ export { createHealthSnapshot, } from "./health.js";
3
+ export { FileCredentialStore, } from "./credential-store.js";
4
+ export { removeMachine, } from "./remove-machine.js";
5
+ export { CustomAgentRegistry, customAgentRegistration, } from "./custom-agent-registry.js";
6
+ export { pairMachine, } from "./pair.js";
7
+ export { BoundedEventQueue, } from "./event-queue.js";
8
+ export { FileBackedEventQueue, clearEventSpool, } from "./event-spool.js";
9
+ export { ObserverStreamClient, } from "./stream-client.js";
10
+ export { StreamStateStore, } from "./stream-state.js";
11
+ export { FileActionPolicyStore, managedActionNames, } from "./action-policy.js";
12
+ export * from "./discovery/index.js";
13
+ export * from "./activity/index.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAMX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,GAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,GAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,aAAa,GAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,WAAW,GAGZ,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAInB,MAAM,oBAAoB,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loadOrCreateInstallationID(dataDirectory: string): Promise<string>;
2
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/installation.ts"],"names":[],"mappings":"AAOA,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAkCjB"}
@@ -0,0 +1,44 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
5
+ export async function loadOrCreateInstallationID(dataDirectory) {
6
+ await mkdir(dataDirectory, { recursive: true, mode: 0o700 });
7
+ await chmod(dataDirectory, 0o700);
8
+ const installationPath = join(dataDirectory, "installation-id");
9
+ try {
10
+ const existing = (await readFile(installationPath, "utf8")).trim();
11
+ if (!uuidPattern.test(existing)) {
12
+ throw new Error("Stored observer installation ID is invalid.");
13
+ }
14
+ return existing;
15
+ }
16
+ catch (error) {
17
+ if (!isNodeError(error) || error.code !== "ENOENT") {
18
+ throw error;
19
+ }
20
+ }
21
+ const installationID = randomUUID();
22
+ try {
23
+ await writeFile(installationPath, `${installationID}\n`, {
24
+ encoding: "utf8",
25
+ flag: "wx",
26
+ mode: 0o600,
27
+ });
28
+ return installationID;
29
+ }
30
+ catch (error) {
31
+ if (!isNodeError(error) || error.code !== "EEXIST") {
32
+ throw error;
33
+ }
34
+ const existing = (await readFile(installationPath, "utf8")).trim();
35
+ if (!uuidPattern.test(existing)) {
36
+ throw new Error("Stored observer installation ID is invalid.");
37
+ }
38
+ return existing;
39
+ }
40
+ }
41
+ function isNodeError(error) {
42
+ return error instanceof Error && "code" in error;
43
+ }
44
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/installation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GACf,4EAA4E,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAAqB;IAErB,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,gBAAgB,EAAE,GAAG,cAAc,IAAI,EAAE;YACvD,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { RemoteActionType as Action, type AgentActionCommand, type AgentActionResult } from "./generated/phigon/v1/action_pb.js";
2
+ export declare const machineActionTypes: readonly Action[];
3
+ export type CommandSpec = {
4
+ executable: string;
5
+ arguments: string[];
6
+ working_directory?: string;
7
+ timeout_seconds: number;
8
+ };
9
+ export declare function parseCommand(value: string): CommandSpec | null;
10
+ /** Separate machine-owner enrollment; durable claims prevent crash/retry execution. */
11
+ export declare class MachineCommandExecutor {
12
+ #private;
13
+ constructor(options: {
14
+ enabled: boolean;
15
+ machineID: string;
16
+ dataDirectory: string;
17
+ });
18
+ execute(command: AgentActionCommand): Promise<AgentActionResult>;
19
+ }
20
+ export declare function powerCommand(restart: boolean): CommandSpec;
21
+ export declare function redactCommandOutput(value: string): string;
22
+ export declare function runCommand(spec: CommandSpec): Promise<{
23
+ output: string;
24
+ exitCode: number | null;
25
+ truncated: boolean;
26
+ timedOut: boolean;
27
+ }>;
28
+ //# sourceMappingURL=machine-command-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-command-executor.d.ts","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"AAOA,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;IACnF,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA0DjE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAI1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;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"}
@@ -0,0 +1,166 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
4
+ import { cpus, freemem, hostname, platform, release, totalmem, uptime } from "node:os";
5
+ import { join } from "node:path";
6
+ import { create, fromJsonString, toJsonString } from "@bufbuild/protobuf";
7
+ import { timestampDate, timestampFromDate } from "@bufbuild/protobuf/wkt";
8
+ import { AgentActionResultSchema, RemoteActionResultState as State, RemoteActionType as Action } from "./generated/phigon/v1/action_pb.js";
9
+ export const machineActionTypes = [Action.RUN_COMMAND, Action.INSPECT_SYSTEM, Action.SHUTDOWN_MACHINE, Action.RESTART_MACHINE];
10
+ const outputLimit = 32768;
11
+ 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;
12
+ export function parseCommand(value) {
13
+ let input;
14
+ try {
15
+ input = JSON.parse(value);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ if (!input || typeof input !== "object" || Array.isArray(input))
21
+ return null;
22
+ const item = input;
23
+ if (Object.keys(item).some((key) => !["executable", "arguments", "working_directory", "timeout_seconds"].includes(key)))
24
+ return null;
25
+ const bounded = (v, max) => typeof v === "string" && Buffer.byteLength(v) <= max && !v.includes("\0");
26
+ if (!bounded(item["executable"], 2048) || !item["executable"].trim() || !Array.isArray(item["arguments"]) || item["arguments"].length > 64 ||
27
+ !item["arguments"].every((arg) => bounded(arg, 4096)) ||
28
+ (item["working_directory"] !== undefined && !bounded(item["working_directory"], 2048)) ||
29
+ !Number.isInteger(item["timeout_seconds"]) || Number(item["timeout_seconds"]) < 1 || Number(item["timeout_seconds"]) > 120)
30
+ return null;
31
+ if (Buffer.byteLength(item["executable"] + String(item["working_directory"] ?? "") + item["arguments"].join("")) > 12288)
32
+ return null;
33
+ return item;
34
+ }
35
+ /** Separate machine-owner enrollment; durable claims prevent crash/retry execution. */
36
+ export class MachineCommandExecutor {
37
+ #options;
38
+ #queue = Promise.resolve();
39
+ constructor(options) { this.#options = options; }
40
+ execute(command) {
41
+ const task = this.#queue.then(() => this.#execute(command)).catch(() => create(AgentActionResultSchema, {
42
+ actionId: command.actionId, idempotencyKey: command.idempotencyKey, machineId: this.#options.machineID,
43
+ observedAt: timestampFromDate(new Date()), state: State.FAILED,
44
+ resultCode: "execution_journal_unavailable", detail: "Execution could not be confirmed from its durable record. Check the system before issuing another request.",
45
+ }));
46
+ this.#queue = task.catch(() => undefined);
47
+ return task;
48
+ }
49
+ async #execute(command) {
50
+ const receipt = (state, resultCode, detail, extra = {}) => create(AgentActionResultSchema, {
51
+ actionId: command.actionId, idempotencyKey: command.idempotencyKey, machineId: this.#options.machineID,
52
+ observedAt: timestampFromDate(new Date()), state, resultCode, detail, ...extra,
53
+ });
54
+ if (!this.#options.enabled)
55
+ return receipt(State.REJECTED, "executor_disabled", "Machine owner has not enabled remote commands.");
56
+ if (command.machineId !== this.#options.machineID || !uuid.test(command.actionId) || !uuid.test(command.idempotencyKey) ||
57
+ !machineActionTypes.includes(command.action) || command.agentId !== "__machine__" || command.processId !== 0n || !command.expiresAt) {
58
+ return receipt(State.REJECTED, "invalid_command", "Machine command identity or capability is invalid.");
59
+ }
60
+ const expires = timestampDate(command.expiresAt).getTime();
61
+ if (!Number.isFinite(expires) || expires > Date.now() + 330_000)
62
+ return receipt(State.EXPIRED, "command_expired", "Command is outside its approved execution window.");
63
+ const spec = command.action === Action.RUN_COMMAND ? parseCommand(command.commandJson) : null;
64
+ if ((command.action === Action.RUN_COMMAND && !spec) || (command.action !== Action.RUN_COMMAND && !["", "null"].includes(command.commandJson)))
65
+ return receipt(State.REJECTED, "invalid_command", "Executable, arguments, or limits are invalid.");
66
+ const digest = createHash("sha256").update(JSON.stringify([command.actionId, command.machineId, command.action, command.commandJson, command.reason, expires])).digest("hex");
67
+ const directory = join(this.#options.dataDirectory, "machine-operation-receipts");
68
+ const path = join(directory, `${command.idempotencyKey}.json`);
69
+ try {
70
+ const stored = JSON.parse(await readFile(path, "utf8"));
71
+ return stored.digest === digest ? fromJsonString(AgentActionResultSchema, stored.receipt) : receipt(State.REJECTED, "idempotency_conflict", "This request key belongs to a different command.");
72
+ }
73
+ catch (error) {
74
+ if (error.code !== "ENOENT")
75
+ throw error;
76
+ }
77
+ if (expires <= Date.now())
78
+ return receipt(State.EXPIRED, "command_expired", "Command expired before execution.");
79
+ await mkdir(directory, { recursive: true, mode: 0o700 });
80
+ const uncertain = receipt(State.FAILED, "execution_interrupted", "Execution was claimed but no completion receipt is available. It will not be repeated automatically.");
81
+ try {
82
+ await writeFile(path, JSON.stringify({ digest, receipt: toJsonString(AgentActionResultSchema, uncertain) }), { flag: "wx", mode: 0o600, flush: true });
83
+ }
84
+ catch (error) {
85
+ if (error.code !== "EEXIST")
86
+ throw error;
87
+ const stored = JSON.parse(await readFile(path, "utf8"));
88
+ return stored.digest === digest ? fromJsonString(AgentActionResultSchema, stored.receipt) : receipt(State.REJECTED, "idempotency_conflict", "This request key belongs to a different command.");
89
+ }
90
+ let result;
91
+ if (command.action === Action.INSPECT_SYSTEM) {
92
+ 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 });
93
+ }
94
+ else {
95
+ const power = command.action === Action.SHUTDOWN_MACHINE || command.action === Action.RESTART_MACHINE;
96
+ const operation = power ? powerCommand(command.action === Action.RESTART_MACHINE) : spec;
97
+ const execution = await runCommand(operation);
98
+ const succeeded = execution.exitCode === 0 && !execution.timedOut;
99
+ 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 }) });
100
+ }
101
+ const temporary = `${path}.tmp`;
102
+ await writeFile(temporary, JSON.stringify({ digest, receipt: toJsonString(AgentActionResultSchema, result) }), { mode: 0o600, flush: true });
103
+ await rename(temporary, path);
104
+ return result;
105
+ }
106
+ }
107
+ export function powerCommand(restart) {
108
+ return process.platform === "win32"
109
+ ? { executable: join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "shutdown.exe"), arguments: [restart ? "/r" : "/s", "/t", "60"], timeout_seconds: 10 }
110
+ : { executable: "/sbin/shutdown", arguments: [restart ? "-r" : "-h", "+1"], timeout_seconds: 10 };
111
+ }
112
+ export function redactCommandOutput(value) {
113
+ let safe = value.replace(/\x1b\[[0-?]*[ -/]*[@-~]/gu, "").replace(/\b(?:sk-[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9]{20,}|AKIA[0-9A-Z]{16})\b/gu, "[REDACTED]")
114
+ .replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{12,}/giu, "$1[REDACTED]")
115
+ .replace(/(["']?(?:api[_-]?key|access[_-]?token|client[_-]?secret|password)["']?\s*[:=]\s*["']?)[^"',\s}]{6,}/giu, "$1[REDACTED]");
116
+ for (const [key, secret] of Object.entries(process.env))
117
+ if (/TOKEN|SECRET|PASSWORD|API_KEY/iu.test(key) && secret && secret.length >= 8)
118
+ safe = safe.split(secret).join("[REDACTED]");
119
+ return safe;
120
+ }
121
+ export async function runCommand(spec) {
122
+ return new Promise((resolve) => {
123
+ const env = Object.fromEntries(Object.entries(process.env).filter(([key]) => !/^PHIGON_|TOKEN|SECRET|PASSWORD|API_KEY/iu.test(key)));
124
+ 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 } : {}) });
125
+ let collected = Buffer.alloc(0);
126
+ let truncated = false;
127
+ let timedOut = false;
128
+ let done = false;
129
+ const consume = (chunk) => { const remaining = outputLimit - collected.length; if (chunk.length > remaining)
130
+ truncated = true; if (remaining > 0)
131
+ collected = Buffer.concat([collected, chunk.subarray(0, remaining)]); };
132
+ const finish = (exitCode) => {
133
+ if (done)
134
+ return;
135
+ done = true;
136
+ clearTimeout(timeout);
137
+ clearTimeout(hardDeadline);
138
+ const safe = Buffer.from(redactCommandOutput(collected.toString("utf8")));
139
+ // Leave room for a final UTF-8 replacement character after a byte boundary.
140
+ const output = safe.subarray(0, outputLimit - 4).toString("utf8");
141
+ resolve({ output, exitCode, truncated: truncated || safe.length > outputLimit - 4, timedOut });
142
+ };
143
+ child.stdout.on("data", consume);
144
+ child.stderr.on("data", consume);
145
+ child.once("error", () => { consume(Buffer.from("Operating system could not launch the requested executable.")); finish(null); });
146
+ child.once("close", (code) => finish(code));
147
+ const timeout = setTimeout(() => {
148
+ timedOut = true;
149
+ if (process.platform === "win32" && child.pid) {
150
+ const killer = spawn(join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "taskkill.exe"), ["/PID", String(child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" });
151
+ killer.on("error", () => child.kill());
152
+ }
153
+ else {
154
+ try {
155
+ if (child.pid)
156
+ process.kill(-child.pid, "SIGKILL");
157
+ }
158
+ catch {
159
+ child.kill("SIGKILL");
160
+ }
161
+ }
162
+ }, spec.timeout_seconds * 1000);
163
+ const hardDeadline = setTimeout(() => { child.stdout.destroy(); child.stderr.destroy(); child.unref(); finish(null); }, spec.timeout_seconds * 1000 + 3000);
164
+ });
165
+ }
166
+ //# sourceMappingURL=machine-command-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-command-executor.js","sourceRoot":"","sources":["../../src/machine-command-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ObserverConfig } from "./config.js";
2
+ import { type CredentialStore } from "./credential-store.js";
3
+ export declare const OBSERVER_CONSENT_POLICY_VERSION = "observer-policy-v1";
4
+ export type ConsentProfile = "metadata" | "full";
5
+ export type PairResult = Readonly<{
6
+ machineId: string;
7
+ displayName: string;
8
+ state: string;
9
+ controlPlaneOrigin: string;
10
+ credentialStored: true;
11
+ }>;
12
+ export type PairOptions = Readonly<{
13
+ config: ObserverConfig;
14
+ code: string;
15
+ displayName?: string;
16
+ consentProfile: ConsentProfile;
17
+ credentialStore?: CredentialStore;
18
+ fetcher?: typeof fetch;
19
+ }>;
20
+ export declare function pairMachine(options: PairOptions): Promise<PairResult>;
21
+ //# sourceMappingURL=pair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/pair.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,CAAC;AAcjD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,IAAI,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC,CAAC;AAEH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsF3E"}
@@ -0,0 +1,125 @@
1
+ import { arch, hostname, platform } from "node:os";
2
+ import { FileCredentialStore, } from "./credential-store.js";
3
+ import { loadOrCreateInstallationID } from "./installation.js";
4
+ export const OBSERVER_CONSENT_POLICY_VERSION = "observer-policy-v1";
5
+ export async function pairMachine(options) {
6
+ const code = options.code.trim();
7
+ if (code.length === 0) {
8
+ throw new Error("Pairing code is required.");
9
+ }
10
+ const installationID = await loadOrCreateInstallationID(options.config.dataDirectory);
11
+ if (options.config.observabilityProfile === "full" &&
12
+ options.consentProfile !== "full") {
13
+ throw new Error("The configured full observability profile requires full-content consent.");
14
+ }
15
+ const endpoint = new URL("/v1/pairing/exchange", options.config.controlPlaneUrl);
16
+ const fetcher = options.fetcher ?? fetch;
17
+ const credentialStore = options.credentialStore ??
18
+ new FileCredentialStore(options.config.dataDirectory);
19
+ const previous = await credentialStore.load();
20
+ if (previous !== null && previous.controlPlaneOrigin !== endpoint.origin) {
21
+ throw new Error("The stored machine belongs to a different control plane. Use a separate data directory to pair another workspace.");
22
+ }
23
+ let response;
24
+ try {
25
+ response = await fetcher(endpoint, {
26
+ method: "POST",
27
+ headers: {
28
+ "Content-Type": "application/json",
29
+ Accept: "application/json",
30
+ },
31
+ body: JSON.stringify({
32
+ code,
33
+ ...(previous === null ? {} : { existing_credential: previous.credential }),
34
+ installation_id: installationID,
35
+ display_name: options.displayName?.trim() || hostname(),
36
+ hostname: hostname(),
37
+ operating_system: normalizedOperatingSystem(),
38
+ architecture: arch(),
39
+ consent: {
40
+ granted: true,
41
+ profile: options.consentProfile,
42
+ policy_version: OBSERVER_CONSENT_POLICY_VERSION,
43
+ },
44
+ }),
45
+ redirect: "error",
46
+ signal: AbortSignal.timeout(10_000),
47
+ });
48
+ }
49
+ catch (error) {
50
+ if (error instanceof Error && error.name === "TimeoutError") {
51
+ throw new Error(`Pairing timed out while contacting ${endpoint.origin}. Try again.`);
52
+ }
53
+ throw new Error(`Could not reach ${endpoint.origin}. Check your internet connection and try again.`);
54
+ }
55
+ if (!response.ok) {
56
+ throw new Error(await pairingFailureMessage(response));
57
+ }
58
+ const value = await response.json();
59
+ const paired = parsePairingResponse(value);
60
+ await credentialStore.save({
61
+ machineId: paired.machine.id,
62
+ tenantId: paired.machine.tenant_id,
63
+ credential: paired.credential,
64
+ controlPlaneOrigin: options.config.controlPlaneUrl.origin,
65
+ createdAt: new Date().toISOString(),
66
+ consentProfile: options.consentProfile,
67
+ consentPolicyVersion: OBSERVER_CONSENT_POLICY_VERSION,
68
+ consentedAt: new Date().toISOString(),
69
+ });
70
+ return Object.freeze({
71
+ machineId: paired.machine.id,
72
+ displayName: paired.machine.display_name,
73
+ state: paired.machine.state,
74
+ controlPlaneOrigin: options.config.controlPlaneUrl.origin,
75
+ credentialStored: true,
76
+ });
77
+ }
78
+ function parsePairingResponse(value) {
79
+ if (typeof value !== "object" ||
80
+ value === null ||
81
+ !("credential" in value) ||
82
+ typeof value.credential !== "string" ||
83
+ !value.credential.startsWith("phg_m_") ||
84
+ !("machine" in value) ||
85
+ typeof value.machine !== "object" ||
86
+ value.machine === null ||
87
+ !("id" in value.machine) ||
88
+ typeof value.machine.id !== "string" ||
89
+ !("tenant_id" in value.machine) ||
90
+ typeof value.machine.tenant_id !== "string" ||
91
+ !("display_name" in value.machine) ||
92
+ typeof value.machine.display_name !== "string" ||
93
+ !("state" in value.machine) ||
94
+ typeof value.machine.state !== "string") {
95
+ throw new Error("Control plane returned an invalid pairing response.");
96
+ }
97
+ return value;
98
+ }
99
+ async function pairingFailureMessage(response) {
100
+ try {
101
+ const value = await response.json();
102
+ if (typeof value === "object" &&
103
+ value !== null &&
104
+ "error" in value &&
105
+ typeof value.error === "object" &&
106
+ value.error !== null &&
107
+ "message" in value.error &&
108
+ typeof value.error.message === "string") {
109
+ return value.error.message;
110
+ }
111
+ }
112
+ catch {
113
+ // The status code still provides an actionable, non-sensitive failure.
114
+ }
115
+ return `Pairing failed with HTTP ${response.status}.`;
116
+ }
117
+ function normalizedOperatingSystem() {
118
+ const value = platform();
119
+ if (value === "darwin")
120
+ return "macos";
121
+ if (value === "win32")
122
+ return "windows";
123
+ return "linux";
124
+ }
125
+ //# sourceMappingURL=pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/pair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ObserverConfig } from "./config.js";
2
+ import type { StoredMachineCredential } from "./credential-store.js";
3
+ export type RemoveMachineResult = Readonly<{
4
+ status: "removed";
5
+ machineId: string;
6
+ controlPlaneOrigin: string;
7
+ credentialRemoved: true;
8
+ }>;
9
+ export declare function removeMachine(options: Readonly<{
10
+ config: ObserverConfig;
11
+ credential: StoredMachineCredential;
12
+ clearCredential: () => Promise<boolean>;
13
+ fetcher?: typeof fetch;
14
+ }>): Promise<RemoveMachineResult>;
15
+ //# sourceMappingURL=remove-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-machine.d.ts","sourceRoot":"","sources":["../../src/remove-machine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,wBAAsB,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;IACpD,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,uBAAuB,CAAC;IACpC,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6DhC"}
@@ -0,0 +1,77 @@
1
+ export async function removeMachine(options) {
2
+ const configuredOrigin = options.config.controlPlaneUrl.origin;
3
+ if (options.credential.controlPlaneOrigin !== configuredOrigin) {
4
+ throw new Error(`The stored machine belongs to ${options.credential.controlPlaneOrigin}, ` +
5
+ `but the observer is configured for ${configuredOrigin}. Restore the ` +
6
+ "original PHIGON_CONTROL_PLANE_URL before removing this machine.");
7
+ }
8
+ const endpoint = new URL("/v1/machine", options.config.controlPlaneUrl);
9
+ const fetcher = options.fetcher ?? fetch;
10
+ let response;
11
+ try {
12
+ response = await fetcher(endpoint, {
13
+ method: "DELETE",
14
+ headers: {
15
+ Authorization: `Bearer ${options.credential.credential}`,
16
+ Accept: "application/json",
17
+ },
18
+ redirect: "error",
19
+ signal: AbortSignal.timeout(10_000),
20
+ });
21
+ }
22
+ catch (error) {
23
+ if (error instanceof Error && error.name === "TimeoutError") {
24
+ throw new Error(`Machine removal timed out while contacting ${endpoint.origin}. ` +
25
+ "The local credential was kept; try again.");
26
+ }
27
+ throw new Error(`Could not reach ${endpoint.origin}. The local credential was kept; ` +
28
+ "check your connection and try again.");
29
+ }
30
+ if (!response.ok) {
31
+ throw new Error(await removalFailureMessage(response));
32
+ }
33
+ if (response.status !== 204) {
34
+ throw new Error(`Control plane returned an unexpected machine-removal response ` +
35
+ `(HTTP ${response.status}). The local credential was kept.`);
36
+ }
37
+ try {
38
+ await options.clearCredential();
39
+ }
40
+ catch {
41
+ throw new Error(`Machine ${options.credential.machineId} was removed from ` +
42
+ `${configuredOrigin}, but local credential cleanup failed. Remove ` +
43
+ `machine-credential.json from ${options.config.dataDirectory} before ` +
44
+ "pairing again.");
45
+ }
46
+ return Object.freeze({
47
+ status: "removed",
48
+ machineId: options.credential.machineId,
49
+ controlPlaneOrigin: configuredOrigin,
50
+ credentialRemoved: true,
51
+ });
52
+ }
53
+ async function removalFailureMessage(response) {
54
+ try {
55
+ const value = await response.json();
56
+ if (typeof value === "object" &&
57
+ value !== null &&
58
+ "error" in value &&
59
+ typeof value.error === "object" &&
60
+ value.error !== null &&
61
+ "message" in value.error &&
62
+ typeof value.error.message === "string") {
63
+ const message = value.error.message.trim();
64
+ if (message.length > 0 &&
65
+ Buffer.byteLength(message, "utf8") <= 512 &&
66
+ !/[\u0000-\u001f\u007f]/u.test(message)) {
67
+ return `${message} The local credential was kept.`;
68
+ }
69
+ }
70
+ }
71
+ catch {
72
+ // The status code is still useful and does not expose the credential.
73
+ }
74
+ return `Machine removal failed with HTTP ${response.status}. ` +
75
+ "The local credential was kept.";
76
+ }
77
+ //# sourceMappingURL=remove-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-machine.js","sourceRoot":"","sources":["../../src/remove-machine.ts"],"names":[],"mappings":"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"}