@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,95 @@
1
+ import { createHash } from "node:crypto";
2
+ import { constants, createReadStream } from "node:fs";
3
+ import { access, realpath, stat } from "node:fs/promises";
4
+ import { delimiter, isAbsolute, resolve } from "node:path";
5
+ export function executionEnvironment(source) {
6
+ const result = {};
7
+ const seen = new Set();
8
+ for (const key of Object.keys(source).sort()) {
9
+ const value = source[key];
10
+ const normalized = process.platform === "win32" ? key.toUpperCase() : key;
11
+ if (value === undefined || seen.has(normalized))
12
+ continue;
13
+ seen.add(normalized);
14
+ // Machine management credentials and runtime injection must never be
15
+ // inherited by the supervised workload.
16
+ if (/^PHIGON_/iu.test(key) || /^(NODE_OPTIONS|NODE_PATH|LD_PRELOAD|LD_LIBRARY_PATH|DYLD_.*|PYTHONPATH|PYTHONHOME|RUBYOPT|PERL5OPT|BASH_ENV|ENV)$/iu.test(key))
17
+ continue;
18
+ result[key] = value;
19
+ }
20
+ return result;
21
+ }
22
+ export async function digestExecutable(path) {
23
+ const info = await stat(path);
24
+ if (!info.isFile() || info.size > 1 << 30)
25
+ throw new Error("Guardian execution input is not a supported regular file.");
26
+ const hash = createHash("sha256");
27
+ for await (const chunk of createReadStream(path))
28
+ hash.update(chunk);
29
+ return hash.digest("hex");
30
+ }
31
+ async function resolveExecutable(executable, cwd, env) {
32
+ const explicit = isAbsolute(executable) || /[/\\]/u.test(executable);
33
+ const pathKey = Object.keys(env).find((key) => key.toUpperCase() === "PATH");
34
+ const paths = explicit ? [resolve(cwd, executable)] : (env[pathKey ?? "PATH"] ?? "").split(delimiter)
35
+ .filter((entry) => entry !== "" && isAbsolute(entry)).map((entry) => resolve(entry, executable));
36
+ for (const path of paths) {
37
+ const candidates = process.platform === "win32" && !/\.exe$/iu.test(path) ? [path, `${path}.exe`] : [path];
38
+ for (const candidate of candidates) {
39
+ try {
40
+ const resolved = await realpath(candidate);
41
+ if (process.platform === "win32" && !/\.exe$/iu.test(resolved))
42
+ continue;
43
+ if (!(await stat(resolved)).isFile())
44
+ continue;
45
+ await access(resolved, process.platform === "win32" ? constants.F_OK : constants.X_OK);
46
+ return resolved;
47
+ }
48
+ catch { /* Try the next explicit PATH entry. */ }
49
+ }
50
+ }
51
+ throw new Error("Guardian could not resolve a native executable. For scripts, name the interpreter explicitly.");
52
+ }
53
+ export async function createExecutionManifest(options) {
54
+ const cwd = await realpath(options.cwd ?? process.cwd());
55
+ if (options.cgroupRoot && (process.platform !== "linux" || !isAbsolute(options.cgroupRoot)))
56
+ throw new Error("Guardian cgroup configuration requires an absolute Linux cgroup-v2 root.");
57
+ const executable = await resolveExecutable(options.executable, cwd, options.environment);
58
+ const inputs = [];
59
+ // Bind existing file arguments, including directly named scripts/configs.
60
+ // Files read indirectly need an OS filesystem policy; they are not guessed.
61
+ for (const arg of options.arguments) {
62
+ if (arg.startsWith("-") || arg.includes("\0") || arg.length > 4096)
63
+ continue;
64
+ let path;
65
+ try {
66
+ path = await realpath(resolve(cwd, arg));
67
+ if (!(await stat(path)).isFile())
68
+ continue;
69
+ }
70
+ catch {
71
+ continue;
72
+ }
73
+ if (!inputs.some((input) => input.path === path))
74
+ inputs.push({ path, digest: await digestExecutable(path) });
75
+ if (inputs.length > 64)
76
+ throw new Error("Guardian execution has too many file inputs.");
77
+ }
78
+ const environmentEntries = Object.entries(options.environment).filter((entry) => entry[1] !== undefined).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
79
+ const manifest = Object.freeze({
80
+ sandbox: options.sandbox ?? "",
81
+ executable, executable_digest: await digestExecutable(executable), arguments: Object.freeze([...options.arguments]),
82
+ working_directory: cwd, environment_digest: createHash("sha256").update(JSON.stringify(environmentEntries)).digest("hex"),
83
+ inputs: Object.freeze(inputs.map((input) => Object.freeze(input))), agent_id: options.agentId, model: options.model ?? "", cgroup_root: options.cgroupRoot ?? "",
84
+ });
85
+ if (Buffer.byteLength(JSON.stringify(manifest)) > 56 << 10)
86
+ throw new Error("Guardian execution manifest exceeds its bound.");
87
+ return manifest;
88
+ }
89
+ export async function verifyExecutionManifest(manifest, environment) {
90
+ const current = await createExecutionManifest({ executable: manifest.executable, arguments: manifest.arguments,
91
+ agentId: manifest.agent_id, model: manifest.model, cwd: manifest.working_directory, environment, cgroupRoot: manifest.cgroup_root, sandbox: manifest.sandbox });
92
+ if (JSON.stringify(current) !== JSON.stringify(manifest))
93
+ throw new Error("Phigon Guardian blocked execution because its executable, inputs, directory, or environment changed after review.");
94
+ }
95
+ //# sourceMappingURL=guardian-execution-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-execution-manifest.js","sourceRoot":"","sources":["../../src/guardian-execution-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class GuardianHostedClient {
2
+ private readonly options;
3
+ constructor(options: Readonly<{
4
+ controlPlaneURL: URL;
5
+ credential: string;
6
+ fetcher?: typeof fetch;
7
+ }>);
8
+ post(path: string, body: unknown, signal?: AbortSignal, timeoutMs?: number): Promise<Record<string, unknown>>;
9
+ }
10
+ //# sourceMappingURL=guardian-hosted-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-hosted-client.d.ts","sourceRoot":"","sources":["../../src/guardian-hosted-client.ts"],"names":[],"mappings":"AAEA,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,QAAQ,CAAC;QAAE,eAAe,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;KAAE,CAAC;IAE9G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,SAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAqBrH"}
@@ -0,0 +1,45 @@
1
+ import { GuardianDecisionUnavailableError } from "./agentic-guardian.js";
2
+ export class GuardianHostedClient {
3
+ options;
4
+ constructor(options) {
5
+ this.options = options;
6
+ }
7
+ async post(path, body, signal, timeoutMs = 370_000) {
8
+ try {
9
+ const timeout = AbortSignal.timeout(timeoutMs);
10
+ const response = await (this.options.fetcher ?? fetch)(new URL(path, this.options.controlPlaneURL), {
11
+ method: "POST", redirect: "error", headers: { Authorization: `Bearer ${this.options.credential}`, "Content-Type": "application/json" },
12
+ body: JSON.stringify(body), signal: signal === undefined ? timeout : AbortSignal.any([timeout, signal]),
13
+ });
14
+ const reader = response.body?.getReader();
15
+ if (!reader)
16
+ throw new Error("Missing response.");
17
+ const chunks = [];
18
+ let size = 0;
19
+ try {
20
+ while (true) {
21
+ const chunk = await reader.read();
22
+ if (chunk.done)
23
+ break;
24
+ size += chunk.value.byteLength;
25
+ if (size > 64 << 10)
26
+ throw new Error("Oversized response.");
27
+ chunks.push(chunk.value);
28
+ }
29
+ }
30
+ finally {
31
+ await reader.cancel();
32
+ }
33
+ if (!response.ok)
34
+ throw new Error(`Service returned ${response.status}.`);
35
+ const value = JSON.parse(Buffer.concat(chunks).toString("utf8"));
36
+ if (value === null || typeof value !== "object" || Array.isArray(value))
37
+ throw new Error("Invalid response.");
38
+ return value;
39
+ }
40
+ catch {
41
+ throw new GuardianDecisionUnavailableError("Phigon Guardian could not verify hosted enforcement; the action remains blocked.");
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=guardian-hosted-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-hosted-client.js","sourceRoot":"","sources":["../../src/guardian-hosted-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,OAAuF;QAAvF,YAAO,GAAP,OAAO,CAAgF;IAAG,CAAC;IAExH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAa,EAAE,MAAoB,EAAE,SAAS,GAAG,OAAO;QAC/E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAClG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACtI,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aACxG,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClD,MAAM,MAAM,GAAiB,EAAE,CAAC;YAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC;gBAAC,OAAO,IAAI,EAAE,CAAC;oBAAC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAAC,IAAI,KAAK,CAAC,IAAI;wBAAE,MAAM;oBAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;oBAC5G,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxF,CAAC;YAAC,CAAC;oBAAS,CAAC;gBAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC9G,OAAO,KAAgC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,gCAAgC,CAAC,kFAAkF,CAAC,CAAC;QACjI,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import { type ExecutionManifest } from "./guardian-execution-manifest.js";
2
+ export type ManagedExecutionResult = Readonly<{
3
+ exitCode: number;
4
+ invocationId: string;
5
+ }>;
6
+ export declare function executeManagedCommand(options: Readonly<{
7
+ executable: string;
8
+ arguments: readonly string[];
9
+ agentId: string;
10
+ sessionId: string;
11
+ dataDirectory: string;
12
+ manifest: ExecutionManifest;
13
+ environment: NodeJS.ProcessEnv;
14
+ lease?: Readonly<{
15
+ origin: string;
16
+ credential: string;
17
+ request: Readonly<Record<string, unknown>>;
18
+ }>;
19
+ signal?: AbortSignal;
20
+ }>): Promise<ManagedExecutionResult>;
21
+ //# sourceMappingURL=guardian-managed-exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-managed-exec.d.ts","sourceRoot":"","sources":["../../src/guardian-managed-exec.ts"],"names":[],"mappings":"AAMA,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAInG,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IACrG,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA2InC"}
@@ -0,0 +1,249 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { chmod, mkdir, open, unlink } from "node:fs/promises";
4
+ import { join, resolve as resolvePath } from "node:path";
5
+ import { guardianRunnerPath } from "./guardian-native.js";
6
+ import { access } from "node:fs/promises";
7
+ import { verifyExecutionManifest } from "./guardian-execution-manifest.js";
8
+ import { StringDecoder } from "node:string_decoder";
9
+ import { spawn } from "node:child_process";
10
+ export async function executeManagedCommand(options) {
11
+ const runner = guardianRunnerPath();
12
+ await access(runner, constants.X_OK);
13
+ await verifyExecutionManifest(options.manifest, options.environment);
14
+ if (options.signal?.aborted)
15
+ throw new Error("Guardian execution authorization expired before start.");
16
+ const invocationId = randomUUID();
17
+ const journal = new ManagedCommandJournal(options.dataDirectory);
18
+ await journal.append({
19
+ invocationId,
20
+ agentId: options.agentId,
21
+ sessionId: options.sessionId,
22
+ phase: "requested",
23
+ executable: options.executable,
24
+ arguments: options.arguments,
25
+ });
26
+ if (options.signal?.aborted)
27
+ throw new Error("Guardian execution authorization expired before start.");
28
+ const leaseFile = options.lease === undefined ? undefined : resolvePath(options.dataDirectory, `guardian-lease-${randomUUID()}.json`);
29
+ const relays = new Map();
30
+ let leaseCreated = false;
31
+ try {
32
+ if (leaseFile !== undefined) {
33
+ const bootstrap = JSON.stringify(options.lease);
34
+ if (Buffer.byteLength(bootstrap) > 128 << 10)
35
+ throw new Error("Guardian native lease bootstrap exceeds its limit.");
36
+ const file = await open(leaseFile, "wx", 0o600);
37
+ leaseCreated = true;
38
+ try {
39
+ await file.writeFile(bootstrap);
40
+ }
41
+ finally {
42
+ await file.close();
43
+ }
44
+ }
45
+ return await new Promise((resolve, reject) => {
46
+ const child = spawn(runner, ["--sha256", options.manifest.executable_digest, "--cwd", options.manifest.working_directory, "--cgroup-root", options.manifest.cgroup_root, "--sandbox", options.manifest.sandbox, "--lease-config", leaseFile ?? "",
47
+ "--", options.manifest.executable, ...options.manifest.arguments], {
48
+ shell: false,
49
+ windowsHide: true,
50
+ cwd: options.manifest.working_directory,
51
+ env: options.environment,
52
+ stdio: ["inherit", "pipe", "pipe"],
53
+ });
54
+ const terminate = () => { child.kill("SIGTERM"); };
55
+ options.signal?.addEventListener("abort", terminate, { once: true });
56
+ if (options.signal?.aborted)
57
+ terminate();
58
+ process.once("SIGINT", terminate);
59
+ process.once("SIGTERM", terminate);
60
+ const detach = () => {
61
+ options.signal?.removeEventListener("abort", terminate);
62
+ process.removeListener("SIGINT", terminate);
63
+ process.removeListener("SIGTERM", terminate);
64
+ };
65
+ const stdoutDecoder = new StringDecoder("utf8");
66
+ const stderrDecoder = new StringDecoder("utf8");
67
+ let writes = Promise.resolve();
68
+ let closed = false;
69
+ const mirrorAbort = new AbortController();
70
+ let mirrorDeadline;
71
+ child.once("exit", () => {
72
+ // Preserve normal output, but a stalled terminal cannot prevent final
73
+ // audit/exit handling after the native process has already stopped.
74
+ mirrorDeadline = setTimeout(() => mirrorAbort.abort(), 1_000);
75
+ });
76
+ const record = (stream, output, raw) => {
77
+ if (output === "" && raw === undefined)
78
+ return;
79
+ child.stdout?.pause();
80
+ child.stderr?.pause();
81
+ const batch = writes.then(async () => {
82
+ for (let offset = 0; offset < output.length; offset += 8_192) {
83
+ await journal.append({
84
+ invocationId,
85
+ agentId: options.agentId,
86
+ sessionId: options.sessionId,
87
+ phase: "running",
88
+ executable: options.executable,
89
+ arguments: options.arguments,
90
+ stream,
91
+ output: output.slice(offset, offset + 8_192),
92
+ });
93
+ }
94
+ if (raw !== undefined && !mirrorAbort.signal.aborted) {
95
+ let relay = relays.get(stream);
96
+ if (!relay) {
97
+ relay = outputRelay(runner, stream === "stdout" ? process.stdout.fd : process.stderr.fd, options.dataDirectory, options.environment);
98
+ relays.set(stream, relay);
99
+ }
100
+ await relay.write(raw, mirrorAbort.signal);
101
+ }
102
+ }).then(() => {
103
+ // Resume only after the whole current queue, not its first 8 KiB.
104
+ if (writes === batch) {
105
+ child.stdout?.resume();
106
+ child.stderr?.resume();
107
+ }
108
+ });
109
+ writes = batch;
110
+ void batch.catch(() => { terminate(); mirrorAbort.abort(); child.stdout?.resume(); child.stderr?.resume(); });
111
+ };
112
+ child.stdout?.on("data", (chunk) => {
113
+ record("stdout", stdoutDecoder.write(chunk), chunk);
114
+ });
115
+ child.stderr?.on("data", (chunk) => {
116
+ record("stderr", stderrDecoder.write(chunk), chunk);
117
+ });
118
+ child.once("error", (error) => {
119
+ if (closed)
120
+ return;
121
+ closed = true;
122
+ detach();
123
+ mirrorAbort.abort();
124
+ writes.then(() => journal.append({
125
+ invocationId,
126
+ agentId: options.agentId,
127
+ sessionId: options.sessionId,
128
+ phase: "failed",
129
+ executable: options.executable,
130
+ arguments: options.arguments,
131
+ output: safeExecutionError(error),
132
+ exitCode: 1,
133
+ })).then(() => reject(error), reject).finally(() => clearTimeout(mirrorDeadline));
134
+ });
135
+ child.once("close", (code, signal) => {
136
+ if (closed)
137
+ return;
138
+ closed = true;
139
+ detach();
140
+ record("stdout", stdoutDecoder.end());
141
+ record("stderr", stderrDecoder.end());
142
+ const exitCode = options.signal?.aborted ? 77 : code ?? 1;
143
+ writes.then(() => journal.append({
144
+ invocationId,
145
+ agentId: options.agentId,
146
+ sessionId: options.sessionId,
147
+ phase: exitCode === 0 ? "succeeded" : "failed",
148
+ executable: options.executable,
149
+ arguments: options.arguments,
150
+ ...(signal === null ? {} : { output: `Process exited after ${signal}.` }),
151
+ exitCode,
152
+ })).then(() => resolve({ exitCode, invocationId }), reject).finally(() => clearTimeout(mirrorDeadline));
153
+ });
154
+ });
155
+ }
156
+ finally {
157
+ for (const relay of relays.values())
158
+ relay.process.stdin?.end();
159
+ const deadline = setTimeout(() => { for (const relay of relays.values())
160
+ relay.process.kill("SIGKILL"); }, 1_000);
161
+ try {
162
+ await Promise.all([...relays.values()].map((relay) => relay.closed));
163
+ }
164
+ finally {
165
+ clearTimeout(deadline);
166
+ }
167
+ if (leaseFile !== undefined && leaseCreated) {
168
+ await unlink(leaseFile).catch((error) => { if (error.code !== "ENOENT")
169
+ throw error; });
170
+ }
171
+ }
172
+ }
173
+ // Native relays isolate blocking console IO. Child stdin is an asynchronous
174
+ // IPC stream, so its backpressure can be cancelled without blocking Node or
175
+ // occupying its shared filesystem/DNS thread pool.
176
+ function outputRelay(runner, fd, cwd, environment) {
177
+ const child = spawn(runner, ["__relay"], { cwd, env: environment, windowsHide: true, stdio: ["pipe", fd, "ignore"] });
178
+ child.stdin?.on("error", () => { });
179
+ const closed = new Promise((resolve) => { child.once("exit", () => resolve()); child.once("error", () => resolve()); });
180
+ return { process: child, closed, write: async (data, signal) => {
181
+ if (signal.aborted)
182
+ return;
183
+ const pending = new Promise((resolve, reject) => {
184
+ if (!child.stdin) {
185
+ reject(new Error("Guardian output relay unavailable."));
186
+ return;
187
+ }
188
+ child.stdin.write(data, (error) => error ? reject(error) : resolve());
189
+ });
190
+ await waitForTerminal(pending, signal);
191
+ } };
192
+ }
193
+ async function waitForTerminal(pending, signal) {
194
+ if (signal.aborted)
195
+ return;
196
+ let abort = () => { };
197
+ const cancelled = new Promise((resolve) => { abort = resolve; signal.addEventListener("abort", abort, { once: true }); });
198
+ try {
199
+ await Promise.race([pending, cancelled]);
200
+ }
201
+ finally {
202
+ signal.removeEventListener("abort", abort);
203
+ }
204
+ }
205
+ class ManagedCommandJournal {
206
+ #dataDirectory;
207
+ constructor(dataDirectory) {
208
+ this.#dataDirectory = dataDirectory;
209
+ }
210
+ async append(record) {
211
+ const directory = join(this.#dataDirectory, "bridges", "generic");
212
+ await mkdir(directory, { recursive: true, mode: 0o700 });
213
+ await chmod(this.#dataDirectory, 0o700);
214
+ await chmod(join(this.#dataDirectory, "bridges"), 0o700);
215
+ await chmod(directory, 0o700);
216
+ const path = join(directory, "guardian-managed-commands.jsonl");
217
+ const encoded = JSON.stringify({
218
+ type: "phigon_managed_command",
219
+ timestamp: new Date().toISOString(),
220
+ session_id: record.sessionId,
221
+ agent_id: record.agentId,
222
+ invocation_id: record.invocationId,
223
+ phase: record.phase,
224
+ executable: record.executable,
225
+ arguments: record.arguments,
226
+ stream: record.stream ?? "",
227
+ output: record.output ?? "",
228
+ exit_code: record.exitCode ?? null,
229
+ });
230
+ if (Buffer.byteLength(encoded, "utf8") > 96 << 10) {
231
+ throw new Error("Managed command telemetry chunk exceeded 96 KiB.");
232
+ }
233
+ const handle = await open(path, "a", 0o600);
234
+ try {
235
+ await handle.write(`${encoded}\n`);
236
+ }
237
+ finally {
238
+ await handle.close();
239
+ }
240
+ await chmod(path, 0o600);
241
+ }
242
+ }
243
+ function safeExecutionError(error) {
244
+ const code = error instanceof Error && "code" in error
245
+ ? String(error.code ?? "unknown")
246
+ : "unknown";
247
+ return `Managed executable could not start (${code.slice(0, 32)}).`;
248
+ }
249
+ //# sourceMappingURL=guardian-managed-exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-managed-exec.js","sourceRoot":"","sources":["../../src/guardian-managed-exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function startGuardianModelBridge(options: Readonly<{
2
+ controlPlaneURL: URL;
3
+ credential: string;
4
+ agentId: string;
5
+ provider: string;
6
+ fetcher?: typeof fetch;
7
+ maxConcurrentRequests?: number;
8
+ }>): Promise<Readonly<{
9
+ baseURL: string;
10
+ token: string;
11
+ close: () => Promise<void>;
12
+ }>>;
13
+ //# sourceMappingURL=guardian-model-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-model-bridge.d.ts","sourceRoot":"","sources":["../../src/guardian-model-bridge.ts"],"names":[],"mappings":"AAIA,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC/D,eAAe,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAC5E,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAAC,CAyDrF"}
@@ -0,0 +1,87 @@
1
+ import { randomBytes, timingSafeEqual } from "node:crypto";
2
+ import { createServer } from "node:http";
3
+ import { once } from "node:events";
4
+ export async function startGuardianModelBridge(options) {
5
+ const token = randomBytes(32).toString("hex");
6
+ const maximum = options.maxConcurrentRequests ?? 8;
7
+ if (!Number.isInteger(maximum) || maximum < 1 || maximum > 64)
8
+ throw new Error("Invalid model bridge concurrency limit.");
9
+ const requests = new Set();
10
+ const server = createServer({ connectionsCheckingInterval: 1_000 }, (request, response) => {
11
+ void (async () => {
12
+ const presented = request.headers.authorization?.replace(/^Bearer /u, "") ?? request.headers["x-api-key"];
13
+ const supplied = typeof presented === "string" ? Buffer.from(presented) : Buffer.alloc(0);
14
+ if (request.method !== "POST" || request.headers.origin !== undefined || supplied.length !== token.length || !timingSafeEqual(supplied, Buffer.from(token)) ||
15
+ !["/v1/chat/completions", "/v1/responses", "/v1/embeddings", "/v1/messages"].includes(request.url ?? "")) {
16
+ response.writeHead(403, { Connection: "close" });
17
+ response.end("Phigon Guardian: model gateway access denied.");
18
+ return;
19
+ }
20
+ // Admission starts before body buffering. Slow uploads consume a slot too.
21
+ if (requests.size >= maximum) {
22
+ response.writeHead(429, { "Content-Type": "application/json", "Retry-After": "1", Connection: "close" });
23
+ response.end(JSON.stringify({ error: { code: "phigon_guardian_capacity", message: "Phigon Guardian model bridge is busy. Try again shortly." } }));
24
+ return;
25
+ }
26
+ const controller = new AbortController();
27
+ requests.add(controller);
28
+ response.once("close", () => controller.abort());
29
+ try {
30
+ const chunks = [];
31
+ let size = 0;
32
+ for await (const chunk of request) {
33
+ const data = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
34
+ size += data.length;
35
+ if (size > 1 << 20) {
36
+ response.writeHead(413, { Connection: "close" });
37
+ response.end();
38
+ return;
39
+ }
40
+ chunks.push(data);
41
+ }
42
+ if (controller.signal.aborted)
43
+ return;
44
+ const upstream = await (options.fetcher ?? fetch)(new URL(`/v1/machine/guardian/models/${options.provider}${request.url}`, options.controlPlaneURL), {
45
+ method: "POST", redirect: "error", headers: { Authorization: `Bearer ${options.credential}`, "Content-Type": "application/json", "X-Phigon-Agent-ID": options.agentId },
46
+ body: Buffer.concat(chunks), signal: AbortSignal.any([controller.signal, AbortSignal.timeout(370_000)]),
47
+ });
48
+ response.writeHead(upstream.status, { "Content-Type": upstream.headers.get("content-type") ?? "application/json", "Cache-Control": "no-store" });
49
+ if (upstream.body)
50
+ for await (const chunk of upstream.body) {
51
+ if (!response.write(chunk))
52
+ await once(response, "drain", { signal: controller.signal });
53
+ }
54
+ response.end();
55
+ }
56
+ finally {
57
+ requests.delete(controller);
58
+ controller.abort();
59
+ }
60
+ })().catch(() => {
61
+ if (response.headersSent) {
62
+ response.destroy();
63
+ return;
64
+ }
65
+ response.writeHead(503, { "Content-Type": "application/json", Connection: "close" });
66
+ response.end(JSON.stringify({ error: { code: "phigon_guardian_unavailable", message: "Phigon Guardian blocked the model request because enforcement is unavailable." } }));
67
+ });
68
+ });
69
+ server.requestTimeout = 15_000;
70
+ server.headersTimeout = 10_000;
71
+ server.maxConnections = maximum * 4;
72
+ let closing;
73
+ await new Promise((resolve, reject) => { server.once("error", reject); server.listen(0, "127.0.0.1", resolve); });
74
+ const address = server.address();
75
+ if (address === null || typeof address === "string")
76
+ throw new Error("Guardian model bridge did not bind.");
77
+ return { baseURL: `http://127.0.0.1:${address.port}/v1`, token, close: () => {
78
+ if (closing)
79
+ return closing;
80
+ for (const controller of requests)
81
+ controller.abort();
82
+ server.closeAllConnections();
83
+ closing = new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
84
+ return closing;
85
+ } };
86
+ }
87
+ //# sourceMappingURL=guardian-model-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-model-bridge.js","sourceRoot":"","sources":["../../src/guardian-model-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function guardianRunnerPath(): string;
2
+ export declare function killVerifiedWindowsProcess(processId: number, startedAt: string): Promise<void>;
3
+ //# sourceMappingURL=guardian-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-native.d.ts","sourceRoot":"","sources":["../../src/guardian-native.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AACD,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpG"}
@@ -0,0 +1,13 @@
1
+ import { execFile } from "node:child_process";
2
+ import { fileURLToPath } from "node:url";
3
+ export function guardianRunnerPath() {
4
+ const os = process.platform === "win32" ? "windows" : process.platform;
5
+ const arch = process.arch === "x64" ? "amd64" : process.arch;
6
+ return fileURLToPath(new URL(`../bin/guardian-runner-${os}-${arch}${os === "windows" ? ".exe" : ""}`, import.meta.url));
7
+ }
8
+ export async function killVerifiedWindowsProcess(processId, startedAt) {
9
+ await new Promise((resolve, reject) => execFile(guardianRunnerPath(), ["--kill-pid", String(processId), "--started-at", startedAt], {
10
+ windowsHide: true, timeout: 8_000, maxBuffer: 4096,
11
+ }, (error) => error ? reject(error) : resolve()));
12
+ }
13
+ //# sourceMappingURL=guardian-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardian-native.js","sourceRoot":"","sources":["../../src/guardian-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7D,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1H,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,SAAiB,EAAE,SAAiB;IACnF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE;QACxI,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;KACnD,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC"}