@yiaany/ghostapi 0.1.9 → 0.2.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 (292) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/CONTRIBUTING.md +132 -119
  3. package/LICENSE +21 -21
  4. package/PROVENANCE.md +13 -0
  5. package/README.md +78 -84
  6. package/SECURITY.md +56 -53
  7. package/dist/actions/gateway.js +320 -72
  8. package/dist/actions/gateway.js.map +1 -1
  9. package/dist/actions/index.d.ts +2 -2
  10. package/dist/actions/index.js +1 -1
  11. package/dist/actions/index.js.map +1 -1
  12. package/dist/agents/agentPrompt.js +7 -5
  13. package/dist/agents/agentPrompt.js.map +1 -1
  14. package/dist/ai/aiClient.js +5 -5
  15. package/dist/ai/aiClient.js.map +1 -1
  16. package/dist/ai/aiGenerator.js +66 -26
  17. package/dist/ai/aiGenerator.js.map +1 -1
  18. package/dist/ai/genericInference.js +151 -36
  19. package/dist/ai/genericInference.js.map +1 -1
  20. package/dist/ai/prompts.js +55 -49
  21. package/dist/ai/prompts.js.map +1 -1
  22. package/dist/approvals/approvalInbox.js +649 -133
  23. package/dist/approvals/approvalInbox.js.map +1 -1
  24. package/dist/approvals/index.d.ts +2 -2
  25. package/dist/approvals/index.js +1 -1
  26. package/dist/approvals/index.js.map +1 -1
  27. package/dist/behavior/behaviorStore.js +34 -14
  28. package/dist/behavior/behaviorStore.js.map +1 -1
  29. package/dist/cache/index.js +14 -5
  30. package/dist/cache/index.js.map +1 -1
  31. package/dist/cli/index.js +226 -93
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/openUrl.js +17 -3
  34. package/dist/cli/openUrl.js.map +1 -1
  35. package/dist/cli/parser.js +79 -18
  36. package/dist/cli/parser.js.map +1 -1
  37. package/dist/config/dataPaths.js +4 -2
  38. package/dist/config/dataPaths.js.map +1 -1
  39. package/dist/config/localConfig.js +5 -2
  40. package/dist/config/localConfig.js.map +1 -1
  41. package/dist/config/serverConfig.js +11 -5
  42. package/dist/config/serverConfig.js.map +1 -1
  43. package/dist/contracts/contract.js +311 -83
  44. package/dist/contracts/contract.js.map +1 -1
  45. package/dist/contracts/index.d.ts +2 -2
  46. package/dist/contracts/index.js +1 -1
  47. package/dist/contracts/index.js.map +1 -1
  48. package/dist/credentials/credentialBroker.js +391 -79
  49. package/dist/credentials/credentialBroker.js.map +1 -1
  50. package/dist/credentials/index.d.ts +2 -2
  51. package/dist/credentials/index.js +1 -1
  52. package/dist/credentials/index.js.map +1 -1
  53. package/dist/dashboard/app.js +823 -685
  54. package/dist/dashboard/dashboard.js.map +1 -1
  55. package/dist/dashboard/index.html +704 -267
  56. package/dist/dashboard/styles.css +1040 -349
  57. package/dist/egress/capabilities.js +55 -25
  58. package/dist/egress/capabilities.js.map +1 -1
  59. package/dist/egress/linuxBootstrap.js +47 -11
  60. package/dist/egress/linuxBootstrap.js.map +1 -1
  61. package/dist/egress/run.js +170 -31
  62. package/dist/egress/run.js.map +1 -1
  63. package/dist/errors/errorEngine.js +15 -3
  64. package/dist/errors/errorEngine.js.map +1 -1
  65. package/dist/errors/providerErrors.js.map +1 -1
  66. package/dist/evals/evals.js +304 -78
  67. package/dist/evals/evals.js.map +1 -1
  68. package/dist/evals/index.d.ts +2 -2
  69. package/dist/evals/index.js +1 -1
  70. package/dist/evals/index.js.map +1 -1
  71. package/dist/evidence/index.d.ts +2 -2
  72. package/dist/evidence/index.js +1 -1
  73. package/dist/evidence/index.js.map +1 -1
  74. package/dist/evidence/report.d.ts +1 -1
  75. package/dist/evidence/report.js +263 -79
  76. package/dist/evidence/report.js.map +1 -1
  77. package/dist/fault/faultLab.js +24 -9
  78. package/dist/fault/faultLab.js.map +1 -1
  79. package/dist/index.d.ts +42 -42
  80. package/dist/index.js +21 -21
  81. package/dist/index.js.map +1 -1
  82. package/dist/inventory/analysis.d.ts +1 -1
  83. package/dist/inventory/analysis.js +174 -50
  84. package/dist/inventory/analysis.js.map +1 -1
  85. package/dist/inventory/index.d.ts +4 -4
  86. package/dist/inventory/index.js +3 -3
  87. package/dist/inventory/index.js.map +1 -1
  88. package/dist/inventory/inventoryController.js +362 -115
  89. package/dist/inventory/inventoryController.js.map +1 -1
  90. package/dist/inventory/types.js +680 -140
  91. package/dist/inventory/types.js.map +1 -1
  92. package/dist/ledger/actionLedger.js +355 -78
  93. package/dist/ledger/actionLedger.js.map +1 -1
  94. package/dist/ledger/index.d.ts +2 -2
  95. package/dist/ledger/index.js +1 -1
  96. package/dist/ledger/index.js.map +1 -1
  97. package/dist/mcp/server.js +26 -11
  98. package/dist/mcp/server.js.map +1 -1
  99. package/dist/policy/index.d.ts +2 -2
  100. package/dist/policy/index.js +1 -1
  101. package/dist/policy/index.js.map +1 -1
  102. package/dist/policy/policy.js +112 -32
  103. package/dist/policy/policy.js.map +1 -1
  104. package/dist/productTelemetry/index.js +71 -20
  105. package/dist/productTelemetry/index.js.map +1 -1
  106. package/dist/providers/conformance.js +10 -5
  107. package/dist/providers/conformance.js.map +1 -1
  108. package/dist/providers/discord.js +2 -2
  109. package/dist/providers/generic.js +3 -3
  110. package/dist/providers/github.js +2 -2
  111. package/dist/providers/index.d.ts +3 -3
  112. package/dist/providers/index.js +2 -2
  113. package/dist/providers/index.js.map +1 -1
  114. package/dist/providers/openai.js +3 -3
  115. package/dist/providers/packs/resendPack.js +51 -25
  116. package/dist/providers/packs/resendPack.js.map +1 -1
  117. package/dist/providers/packs/stripePack.js +590 -121
  118. package/dist/providers/packs/stripePack.js.map +1 -1
  119. package/dist/providers/registry.js +4 -4
  120. package/dist/providers/registry.js.map +1 -1
  121. package/dist/providers/runtime.js +7 -6
  122. package/dist/providers/runtime.js.map +1 -1
  123. package/dist/providers/stripeWebhook.js +39 -10
  124. package/dist/providers/stripeWebhook.js.map +1 -1
  125. package/dist/providers/twilio.js +2 -2
  126. package/dist/proxy/cacheKey.js +9 -2
  127. package/dist/proxy/cacheKey.js.map +1 -1
  128. package/dist/proxy/providerDetector.js +22 -9
  129. package/dist/proxy/providerDetector.js.map +1 -1
  130. package/dist/proxy/proxyHandler.js +57 -22
  131. package/dist/proxy/proxyHandler.js.map +1 -1
  132. package/dist/proxy/requestNormalizer.js +4 -2
  133. package/dist/proxy/requestNormalizer.js.map +1 -1
  134. package/dist/reliability/costGovernance.js +211 -49
  135. package/dist/reliability/costGovernance.js.map +1 -1
  136. package/dist/reliability/index.d.ts +8 -8
  137. package/dist/reliability/index.js +4 -4
  138. package/dist/reliability/index.js.map +1 -1
  139. package/dist/reliability/reconciliation.js +274 -65
  140. package/dist/reliability/reconciliation.js.map +1 -1
  141. package/dist/reliability/runtimeHealth.js +127 -35
  142. package/dist/reliability/runtimeHealth.js.map +1 -1
  143. package/dist/reliability/slo.js +257 -50
  144. package/dist/reliability/slo.js.map +1 -1
  145. package/dist/report/safetyReport.d.ts +6 -0
  146. package/dist/report/safetyReport.js +56 -12
  147. package/dist/report/safetyReport.js.map +1 -1
  148. package/dist/rules/aiRules.js +5 -5
  149. package/dist/rules/aiRules.js.map +1 -1
  150. package/dist/safety/index.d.ts +2 -2
  151. package/dist/safety/index.js +1 -1
  152. package/dist/safety/index.js.map +1 -1
  153. package/dist/safety/safetyController.js +675 -165
  154. package/dist/safety/safetyController.js.map +1 -1
  155. package/dist/scenarios/scenarioBundle.js +204 -71
  156. package/dist/scenarios/scenarioBundle.js.map +1 -1
  157. package/dist/scenarios/scenarioStore.js +88 -29
  158. package/dist/scenarios/scenarioStore.js.map +1 -1
  159. package/dist/security/headerSanitizer.js +52 -10
  160. package/dist/security/headerSanitizer.js.map +1 -1
  161. package/dist/security/secrets.js +10 -5
  162. package/dist/security/secrets.js.map +1 -1
  163. package/dist/server/accessControl.js +37 -10
  164. package/dist/server/accessControl.js.map +1 -1
  165. package/dist/server/createServer.js +1 -1
  166. package/dist/server/createServer.js.map +1 -1
  167. package/dist/server/eventsStore.js +15 -5
  168. package/dist/server/eventsStore.js.map +1 -1
  169. package/dist/server/routes.js +61 -19
  170. package/dist/server/routes.js.map +1 -1
  171. package/dist/server/sse.js +1 -1
  172. package/dist/server/sse.js.map +1 -1
  173. package/dist/setup/sdkDetector.js +7 -2
  174. package/dist/setup/sdkDetector.js.map +1 -1
  175. package/dist/setup/setupGenerator.js +136 -48
  176. package/dist/setup/setupGenerator.js.map +1 -1
  177. package/dist/state/stateExtractor.js +3 -1
  178. package/dist/state/stateExtractor.js.map +1 -1
  179. package/dist/state/stateResolver.js +10 -7
  180. package/dist/state/stateResolver.js.map +1 -1
  181. package/dist/state/stateStore.js +13 -4
  182. package/dist/state/stateStore.js.map +1 -1
  183. package/dist/storage/fileStore.js +12 -4
  184. package/dist/storage/fileStore.js.map +1 -1
  185. package/dist/teamControl/controlPlane.js +846 -174
  186. package/dist/teamControl/controlPlane.js.map +1 -1
  187. package/dist/teamControl/deployment.js +19 -5
  188. package/dist/teamControl/deployment.js.map +1 -1
  189. package/dist/teamControl/index.d.ts +4 -4
  190. package/dist/teamControl/index.js +2 -2
  191. package/dist/teamControl/index.js.map +1 -1
  192. package/dist/tests/testGenerator.js +15 -7
  193. package/dist/tests/testGenerator.js.map +1 -1
  194. package/dist/trust/index.d.ts +2 -2
  195. package/dist/trust/index.js +1 -1
  196. package/dist/trust/index.js.map +1 -1
  197. package/dist/trust/trustLadder.js +309 -63
  198. package/dist/trust/trustLadder.js.map +1 -1
  199. package/dist/worlds/index.d.ts +2 -2
  200. package/dist/worlds/index.js +1 -1
  201. package/dist/worlds/index.js.map +1 -1
  202. package/dist/worlds/worlds.js +364 -65
  203. package/dist/worlds/worlds.js.map +1 -1
  204. package/docs/assets/dashboard.png +0 -0
  205. package/docs/ci.md +49 -49
  206. package/docs/github-actions.md +84 -84
  207. package/docs/mcp.md +58 -52
  208. package/docs/policy.md +63 -61
  209. package/docs/providers/authoring-packs.md +180 -175
  210. package/docs/providers/stripe-core-pack.md +84 -82
  211. package/docs/releases/README.md +13 -0
  212. package/docs/security/action-gateway-threat-model.md +34 -34
  213. package/docs/security/action-ledger-incident-replay-threat-model.md +42 -42
  214. package/docs/security/approval-inbox-threat-model.md +35 -35
  215. package/docs/security/credential-broker-threat-model.md +52 -52
  216. package/docs/security/egress-threat-model.md +126 -126
  217. package/docs/security/inventory-threat-model.md +104 -104
  218. package/docs/security/kill-switch-budgets-threat-model.md +37 -37
  219. package/docs/security/reliability-threat-model.md +111 -111
  220. package/docs/security/trust-ladder-threat-model.md +33 -33
  221. package/docs/telemetry.md +14 -0
  222. package/docs/usage.md +680 -571
  223. package/examples/README.md +10 -10
  224. package/examples/agent-instructions/README.md +39 -39
  225. package/examples/ci-smoke/README.md +21 -21
  226. package/examples/ci-smoke/ghostapi.policy.yaml +22 -22
  227. package/examples/ci-smoke/package.json +9 -9
  228. package/examples/ci-smoke/production-egress.mjs +4 -2
  229. package/examples/ci-smoke/safe.mjs +21 -17
  230. package/examples/evals/README.md +24 -24
  231. package/examples/evals/retry-after.eval.json +71 -52
  232. package/examples/generic-rest/README.md +27 -27
  233. package/examples/github-fetch/README.md +38 -35
  234. package/examples/openai-streaming/README.md +16 -16
  235. package/examples/openai-streaming/streaming-tool-call.mjs +44 -31
  236. package/examples/policy/ghostapi.policy.yaml +27 -27
  237. package/examples/record-replay/README.md +19 -19
  238. package/examples/record-replay/replay-requests.json +22 -22
  239. package/examples/record-replay/stripe-checkout.har.json +30 -30
  240. package/examples/resend-node/README.md +22 -22
  241. package/examples/stripe-node/README.md +35 -35
  242. package/examples/stripe-node/checkout-flow.mjs +87 -61
  243. package/examples/twilio-node/README.md +21 -21
  244. package/examples/worlds/README.md +19 -19
  245. package/examples/worlds/subscription-recovery.mjs +21 -12
  246. package/package.json +28 -6
  247. package/dist/landing/assets/index-BXR41fAD.css +0 -1
  248. package/dist/landing/assets/index-CxWsopzP.css +0 -1
  249. package/dist/landing/assets/index-D8_ggMRE.js +0 -55
  250. package/dist/landing/assets/index-DZlpyhqd.js +0 -55
  251. package/dist/landing/assets/index-Dk-Xezs3.js +0 -55
  252. package/dist/landing/index.html +0 -15
  253. package/dist/landing/landing.d.ts +0 -3
  254. package/dist/landing/landing.js +0 -12
  255. package/dist/landing/landing.js.map +0 -1
  256. package/docs/commercial/README.md +0 -29
  257. package/docs/commercial/data-inventory.md +0 -36
  258. package/docs/commercial/manual-invoicing.md +0 -44
  259. package/docs/commercial/metrics.md +0 -51
  260. package/docs/commercial/pricing.md +0 -103
  261. package/docs/commercial/privacy-policy-draft.md +0 -41
  262. package/docs/commercial/terms-topics-for-counsel.md +0 -51
  263. package/docs/design-partners/README.md +0 -52
  264. package/docs/design-partners/demo-narratives.md +0 -33
  265. package/docs/design-partners/design-partner-offer.md +0 -39
  266. package/docs/design-partners/discovery-questions.md +0 -28
  267. package/docs/design-partners/feedback-capture-template.md +0 -48
  268. package/docs/design-partners/icp-one-pager.md +0 -43
  269. package/docs/design-partners/onboarding-checklist.md +0 -33
  270. package/docs/design-partners/pilot-success-criteria.md +0 -27
  271. package/docs/design-partners/pricing-interview-script.md +0 -18
  272. package/docs/design-partners/telemetry-plan.md +0 -48
  273. package/docs/development/baseline.md +0 -114
  274. package/docs/development/onboarding-smoke.md +0 -37
  275. package/docs/development/verification-0.1.8.md +0 -25
  276. package/docs/enterprise-product-roadmap-ru.md +0 -1879
  277. package/docs/fundraising/README.md +0 -87
  278. package/docs/fundraising/data-room-checklist.md +0 -72
  279. package/docs/fundraising/demo-script.md +0 -52
  280. package/docs/fundraising/design-partners-50.md +0 -74
  281. package/docs/fundraising/launch-posts.md +0 -37
  282. package/docs/fundraising/metrics-and-evidence.md +0 -30
  283. package/docs/fundraising/roadmap-12-month.md +0 -25
  284. package/docs/fundraising/technical-due-diligence-index.md +0 -37
  285. package/docs/fundraising/yc-application.md +0 -25
  286. package/docs/hosted-pilot.md +0 -111
  287. package/docs/operations/disaster-recovery-runbook.md +0 -81
  288. package/docs/operations/kill-switch-runbook.md +0 -32
  289. package/docs/release-checklist.md +0 -83
  290. package/docs/release-migration-and-rollback.md +0 -63
  291. package/docs/release-readiness.md +0 -39
  292. package/docs/team-control-plane.md +0 -72
@@ -1,21 +1,22 @@
1
1
  const PROXY_BYPASSES = [
2
2
  "A new HTTP client, direct IP address, custom DNS resolver, UDP, QUIC, local-network target, or subprocess can ignore proxy configuration.",
3
- "A malicious process running as the same user can create its own network path."
3
+ "A malicious process running as the same user can create its own network path.",
4
4
  ];
5
5
  const HOSTILE_BYPASSES = [
6
6
  "An administrator/root-equivalent actor and a compromised host are outside this threat model.",
7
- "A separate process running outside the launched containment boundary remains able to use the host network."
7
+ "A separate process running outside the launched containment boundary remains able to use the host network.",
8
8
  ];
9
9
  export function detectEgressCapabilities(input = {}) {
10
10
  const runtime = {
11
11
  platform: input.platform ?? process.platform,
12
12
  arch: input.arch ?? process.arch,
13
- nodeVersion: input.nodeVersion ?? process.versions.node
13
+ nodeVersion: input.nodeVersion ?? process.versions.node,
14
14
  };
15
15
  const capabilities = [
16
16
  createProxyGuidanceCapability(),
17
- createNodePermissionCapability(input.nodeNetworkPermission ?? process.allowedNodeEnvironmentFlags.has("--allow-net")),
18
- ...createPlatformCapabilities(runtime.platform)
17
+ createNodePermissionCapability(input.nodeNetworkPermission ??
18
+ process.allowedNodeEnvironmentFlags.has("--allow-net")),
19
+ ...createPlatformCapabilities(runtime.platform),
19
20
  ];
20
21
  return {
21
22
  schemaVersion: 1,
@@ -26,7 +27,7 @@ export function detectEgressCapabilities(input = {}) {
26
27
  capabilities,
27
28
  globalStateChanged: false,
28
29
  remainingBypasses: [...PROXY_BYPASSES, ...HOSTILE_BYPASSES],
29
- nextArchitecture: architectureFor(runtime.platform)
30
+ nextArchitecture: architectureFor(runtime.platform),
30
31
  };
31
32
  }
32
33
  export function formatEgressCapabilityReport(report) {
@@ -36,7 +37,7 @@ export function formatEgressCapabilityReport(report) {
36
37
  "Status: NO PROCESS LAUNCHED",
37
38
  "Current diagnostic guarantee: HTTP proxy guidance only",
38
39
  "",
39
- "Capabilities:"
40
+ "Capabilities:",
40
41
  ];
41
42
  for (const capability of report.capabilities) {
42
43
  lines.push(` ${capability.status.toUpperCase().padEnd(15)} ${capability.title}: ${capability.detail}`);
@@ -62,7 +63,7 @@ function createProxyGuidanceCapability() {
62
63
  guarantee: "http-proxy-guidance",
63
64
  detail: "GhostAPI can guide supported HTTP clients to a local endpoint, but does not intercept or block other traffic.",
64
65
  requiredPrivileges: [],
65
- remainingBypasses: PROXY_BYPASSES
66
+ remainingBypasses: PROXY_BYPASSES,
66
67
  };
67
68
  }
68
69
  function createNodePermissionCapability(supportsNetworkPermission) {
@@ -74,10 +75,16 @@ function createNodePermissionCapability(supportsNetworkPermission) {
74
75
  detail: supportsNetworkPermission
75
76
  ? "A Node process started with --permission and without --allow-net can deny network access, but the model is a seat belt for trusted code, not hostile-code sandboxing."
76
77
  : "This Node.js version does not provide a supported network-deny control suitable for GhostAPI egress enforcement.",
77
- requiredPrivileges: supportsNetworkPermission ? ["Launch the target with --permission and do not grant --allow-net."] : [],
78
+ requiredPrivileges: supportsNetworkPermission
79
+ ? ["Launch the target with --permission and do not grant --allow-net."]
80
+ : [],
78
81
  remainingBypasses: supportsNetworkPermission
79
- ? ["It applies only to the launched Node process and does not provide security guarantees against malicious code or other processes."]
80
- : ["Any Node program, child process, or native tool can still create network connections."]
82
+ ? [
83
+ "It applies only to the launched Node process and does not provide security guarantees against malicious code or other processes.",
84
+ ]
85
+ : [
86
+ "Any Node program, child process, or native tool can still create network connections.",
87
+ ],
81
88
  };
82
89
  }
83
90
  function createPlatformCapabilities(platform) {
@@ -90,10 +97,17 @@ function createPlatformCapabilities(platform) {
90
97
  status: "degraded",
91
98
  guarantee: "process-level-enforcement",
92
99
  detail: "ghostapi run uses a fresh user, mount, and network namespace with loopback-only GhostAPI. It fails closed unless local unshare and ip preflight succeeds.",
93
- requiredPrivileges: ["util-linux unshare, iproute2 ip, and host policy allowing the required unprivileged user, mount, and network namespaces."],
94
- remainingBypasses: ["Denied kernel socket attempts are enforced but not individually attributable by this backend.", "The target must use GhostAPI loopback configuration; TLS provider-host interception is not implemented.", "Filesystem UNIX sockets that the same user can access, such as a mounted container-control socket, are outside this network-namespace boundary.", ...HOSTILE_BYPASSES]
100
+ requiredPrivileges: [
101
+ "util-linux unshare, iproute2 ip, and host policy allowing the required unprivileged user, mount, and network namespaces.",
102
+ ],
103
+ remainingBypasses: [
104
+ "Denied kernel socket attempts are enforced but not individually attributable by this backend.",
105
+ "The target must use GhostAPI loopback configuration; TLS provider-host interception is not implemented.",
106
+ "Filesystem UNIX sockets that the same user can access, such as a mounted container-control socket, are outside this network-namespace boundary.",
107
+ ...HOSTILE_BYPASSES,
108
+ ],
95
109
  },
96
- createContainerCapability("An OCI runtime configured with a no-network mode")
110
+ createContainerCapability("An OCI runtime configured with a no-network mode"),
97
111
  ];
98
112
  case "darwin":
99
113
  return [
@@ -103,10 +117,15 @@ function createPlatformCapabilities(platform) {
103
117
  status: "degraded",
104
118
  guarantee: "unsupported",
105
119
  detail: "App Sandbox network access is entitlement-based for a signed app and is not a generic GhostAPI subprocess launcher.",
106
- requiredPrivileges: ["A signed sandboxed application and an entitlement configuration designed for the launched helper."],
107
- remainingBypasses: ["An arbitrary command launched outside that app sandbox is not constrained.", ...HOSTILE_BYPASSES]
120
+ requiredPrivileges: [
121
+ "A signed sandboxed application and an entitlement configuration designed for the launched helper.",
122
+ ],
123
+ remainingBypasses: [
124
+ "An arbitrary command launched outside that app sandbox is not constrained.",
125
+ ...HOSTILE_BYPASSES,
126
+ ],
108
127
  },
109
- createContainerCapability("A separately configured Linux-container or VM runtime")
128
+ createContainerCapability("A separately configured Linux-container or VM runtime"),
110
129
  ];
111
130
  case "win32":
112
131
  return [
@@ -116,10 +135,15 @@ function createPlatformCapabilities(platform) {
116
135
  status: "not-implemented",
117
136
  guarantee: "process-level-enforcement",
118
137
  detail: "AppContainer can deny network capability to a launched process, but GhostAPI does not create profiles or launch AppContainers yet.",
119
- requiredPrivileges: ["An AppContainer/LPAC launcher, a minimal capability profile, and a writable sandbox directory."],
120
- remainingBypasses: ["A normal Win32 child process is not in an AppContainer.", ...HOSTILE_BYPASSES]
138
+ requiredPrivileges: [
139
+ "An AppContainer/LPAC launcher, a minimal capability profile, and a writable sandbox directory.",
140
+ ],
141
+ remainingBypasses: [
142
+ "A normal Win32 child process is not in an AppContainer.",
143
+ ...HOSTILE_BYPASSES,
144
+ ],
121
145
  },
122
- createContainerCapability("A separately configured Windows or Linux container/VM runtime")
146
+ createContainerCapability("A separately configured Windows or Linux container/VM runtime"),
123
147
  ];
124
148
  default:
125
149
  return [
@@ -130,9 +154,9 @@ function createPlatformCapabilities(platform) {
130
154
  guarantee: "unsupported",
131
155
  detail: `GhostAPI has no supported native egress-isolation backend for ${platform}.`,
132
156
  requiredPrivileges: [],
133
- remainingBypasses: PROXY_BYPASSES
157
+ remainingBypasses: PROXY_BYPASSES,
134
158
  },
135
- createContainerCapability("A separately configured OCI runtime")
159
+ createContainerCapability("A separately configured OCI runtime"),
136
160
  ];
137
161
  }
138
162
  }
@@ -143,8 +167,14 @@ function createContainerCapability(requirement) {
143
167
  status: "not-implemented",
144
168
  guarantee: "container-network-namespace-enforcement",
145
169
  detail: "A no-network container can provide the strongest planned local guarantee, but GhostAPI does not manage containers in this release.",
146
- requiredPrivileges: [requirement, "An image and mount policy that excludes host network-control sockets and credentials."],
147
- remainingBypasses: ["Mounted Docker/Podman sockets, host networking, privileged mode, or inherited credentials would break the boundary.", ...HOSTILE_BYPASSES]
170
+ requiredPrivileges: [
171
+ requirement,
172
+ "An image and mount policy that excludes host network-control sockets and credentials.",
173
+ ],
174
+ remainingBypasses: [
175
+ "Mounted Docker/Podman sockets, host networking, privileged mode, or inherited credentials would break the boundary.",
176
+ ...HOSTILE_BYPASSES,
177
+ ],
148
178
  };
149
179
  }
150
180
  function architectureFor(platform) {
@@ -159,7 +189,7 @@ function architectureFor(platform) {
159
189
  "Keep policy parsing and evidence collection in an unprivileged GhostAPI parent process.",
160
190
  nativeStep,
161
191
  "Add an OCI no-network backend that exposes GhostAPI only through a deliberate local transport, never host networking.",
162
- "Use child-owned namespaces, profiles, and containers so crash cleanup is automatic; do not modify global proxy or firewall state."
192
+ "Use child-owned namespaces, profiles, and containers so crash cleanup is automatic; do not modify global proxy or firewall state.",
163
193
  ];
164
194
  }
165
195
  //# sourceMappingURL=capabilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/egress/capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/egress/capabilities.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,23 @@ async function main() {
12
12
  delete process.env.GHOSTAPI_LLM_API_KEY;
13
13
  const evidence = await readEvidence(config.evidencePath);
14
14
  evidence.status = "running";
15
- evidence.events.push({ type: "loopback-enabled", timestamp: new Date().toISOString() });
16
- const app = await createServer({ host: "127.0.0.1", port: config.port, model: process.env.GHOSTAPI_MODEL ?? "gpt-4o-mini", offline: true });
15
+ evidence.events.push({
16
+ type: "loopback-enabled",
17
+ timestamp: new Date().toISOString(),
18
+ });
19
+ const app = await createServer({
20
+ host: "127.0.0.1",
21
+ port: config.port,
22
+ model: process.env.GHOSTAPI_MODEL ?? "gpt-4o-mini",
23
+ offline: true,
24
+ });
17
25
  const server = http.createServer(app);
18
26
  await listen(server, config.port);
19
- evidence.events.push({ type: "ghostapi-ready", timestamp: new Date().toISOString(), detail: `http://127.0.0.1:${config.port}` });
27
+ evidence.events.push({
28
+ type: "ghostapi-ready",
29
+ timestamp: new Date().toISOString(),
30
+ detail: `http://127.0.0.1:${config.port}`,
31
+ });
20
32
  await atomicWriteJson(config.evidencePath, evidence);
21
33
  const targetEnvironment = createTargetEnvironment(process.env);
22
34
  delete targetEnvironment.GHOSTAPI_RUN_BOOTSTRAP_CONFIG;
@@ -31,7 +43,11 @@ async function main() {
31
43
  let result;
32
44
  let interruptedBy;
33
45
  try {
34
- const target = spawn(config.command[0], config.command.slice(1), { env: targetEnvironment, stdio: "inherit", detached: true });
46
+ const target = spawn(config.command[0], config.command.slice(1), {
47
+ env: targetEnvironment,
48
+ stdio: "inherit",
49
+ detached: true,
50
+ });
35
51
  const forward = (signal) => {
36
52
  interruptedBy = signal;
37
53
  if (target.pid !== undefined)
@@ -45,13 +61,22 @@ async function main() {
45
61
  }
46
62
  catch (error) {
47
63
  evidence.status = "failed-to-start";
48
- evidence.events.push({ type: "target-failed-to-start", timestamp: new Date().toISOString(), detail: safeErrorMessage(error) });
64
+ evidence.events.push({
65
+ type: "target-failed-to-start",
66
+ timestamp: new Date().toISOString(),
67
+ detail: safeErrorMessage(error),
68
+ });
49
69
  process.exitCode = 1;
50
70
  }
51
71
  finally {
52
72
  if (result !== undefined) {
53
73
  evidence.status = "finished";
54
- evidence.events.push({ type: "target-exited", timestamp: new Date().toISOString(), exitCode: result.exitCode, detail: interruptedBy ?? result.signal ?? undefined });
74
+ evidence.events.push({
75
+ type: "target-exited",
76
+ timestamp: new Date().toISOString(),
77
+ exitCode: result.exitCode,
78
+ detail: interruptedBy ?? result.signal ?? undefined,
79
+ });
55
80
  }
56
81
  await atomicWriteJson(config.evidencePath, evidence);
57
82
  await close(server);
@@ -60,7 +85,8 @@ async function main() {
60
85
  function createTargetEnvironment(environment) {
61
86
  const targetEnvironment = { ...environment };
62
87
  for (const [key, value] of Object.entries(targetEnvironment)) {
63
- if (isSensitiveEnvironmentKey(key) || (value !== undefined && sanitizeSecretString(value) !== value))
88
+ if (isSensitiveEnvironmentKey(key) ||
89
+ (value !== undefined && sanitizeSecretString(value) !== value))
64
90
  delete targetEnvironment[key];
65
91
  }
66
92
  return targetEnvironment;
@@ -77,7 +103,13 @@ function parseConfig() {
77
103
  if (!raw)
78
104
  throw new Error("Missing GhostAPI run bootstrap configuration.");
79
105
  const parsed = JSON.parse(raw);
80
- if (!Array.isArray(parsed.command) || parsed.command.length === 0 || typeof parsed.port !== "number" || typeof parsed.evidencePath !== "string" || typeof parsed.runtimeDataDir !== "string" || typeof parsed.runId !== "string" || !Array.isArray(parsed.allowedHosts)) {
106
+ if (!Array.isArray(parsed.command) ||
107
+ parsed.command.length === 0 ||
108
+ typeof parsed.port !== "number" ||
109
+ typeof parsed.evidencePath !== "string" ||
110
+ typeof parsed.runtimeDataDir !== "string" ||
111
+ typeof parsed.runId !== "string" ||
112
+ !Array.isArray(parsed.allowedHosts)) {
81
113
  throw new Error("Invalid GhostAPI run bootstrap configuration.");
82
114
  }
83
115
  return parsed;
@@ -90,9 +122,13 @@ function runIp(args) {
90
122
  return new Promise((resolve, reject) => {
91
123
  const child = spawn("ip", args, { stdio: ["ignore", "ignore", "pipe"] });
92
124
  let stderr = "";
93
- child.stderr.on("data", (chunk) => { stderr += String(chunk); });
125
+ child.stderr.on("data", (chunk) => {
126
+ stderr += String(chunk);
127
+ });
94
128
  child.once("error", reject);
95
- child.once("exit", (code) => code === 0 ? resolve() : reject(new Error(`Unable to configure loopback: ${stderr || `ip exited ${code}`}`)));
129
+ child.once("exit", (code) => code === 0
130
+ ? resolve()
131
+ : reject(new Error(`Unable to configure loopback: ${stderr || `ip exited ${code}`}`)));
96
132
  });
97
133
  }
98
134
  function listen(server, port) {
@@ -105,7 +141,7 @@ function listen(server, port) {
105
141
  });
106
142
  }
107
143
  function close(server) {
108
- return new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve()));
144
+ return new Promise((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
109
145
  }
110
146
  function waitForTarget(target) {
111
147
  return new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"linuxBootstrap.js","sourceRoot":"","sources":["../../src/egress/linuxBootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linuxBootstrap.js","sourceRoot":"","sources":["../../src/egress/linuxBootstrap.ts"],"names":[],"mappings":"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"}