@yiaany/ghostapi 0.1.7 → 0.1.8

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 (323) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/CONTRIBUTING.md +119 -117
  3. package/LICENSE +21 -21
  4. package/README.md +208 -185
  5. package/SECURITY.md +53 -37
  6. package/dist/actions/gateway.d.ts +179 -0
  7. package/dist/actions/gateway.js +514 -0
  8. package/dist/actions/gateway.js.map +1 -0
  9. package/dist/actions/index.d.ts +2 -0
  10. package/dist/actions/index.js +2 -0
  11. package/dist/actions/index.js.map +1 -0
  12. package/dist/ai/aiClient.js +4 -4
  13. package/dist/ai/aiClient.js.map +1 -1
  14. package/dist/ai/aiGenerator.d.ts +2 -2
  15. package/dist/ai/aiGenerator.js +21 -72
  16. package/dist/ai/aiGenerator.js.map +1 -1
  17. package/dist/ai/prompts.js +51 -51
  18. package/dist/ai/prompts.js.map +1 -1
  19. package/dist/approvals/approvalInbox.d.ts +150 -0
  20. package/dist/approvals/approvalInbox.js +412 -0
  21. package/dist/approvals/approvalInbox.js.map +1 -0
  22. package/dist/approvals/index.d.ts +2 -0
  23. package/dist/approvals/index.js +2 -0
  24. package/dist/approvals/index.js.map +1 -0
  25. package/dist/behavior/behaviorStore.d.ts +2 -0
  26. package/dist/behavior/behaviorStore.js +50 -46
  27. package/dist/behavior/behaviorStore.js.map +1 -1
  28. package/dist/cache/index.d.ts +2 -0
  29. package/dist/cache/index.js +58 -14
  30. package/dist/cache/index.js.map +1 -1
  31. package/dist/cli/index.js +438 -58
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/openUrl.d.ts +10 -0
  34. package/dist/cli/openUrl.js +31 -0
  35. package/dist/cli/openUrl.js.map +1 -0
  36. package/dist/cli/parser.d.ts +155 -0
  37. package/dist/cli/parser.js +504 -2
  38. package/dist/cli/parser.js.map +1 -1
  39. package/dist/config/dataPaths.d.ts +31 -0
  40. package/dist/config/dataPaths.js +45 -0
  41. package/dist/config/dataPaths.js.map +1 -0
  42. package/dist/config/localConfig.d.ts +1 -2
  43. package/dist/config/localConfig.js +27 -21
  44. package/dist/config/localConfig.js.map +1 -1
  45. package/dist/config/serverConfig.d.ts +2 -0
  46. package/dist/config/serverConfig.js +8 -1
  47. package/dist/config/serverConfig.js.map +1 -1
  48. package/dist/contracts/contract.d.ts +76 -0
  49. package/dist/contracts/contract.js +603 -0
  50. package/dist/contracts/contract.js.map +1 -0
  51. package/dist/contracts/index.d.ts +2 -0
  52. package/dist/contracts/index.js +2 -0
  53. package/dist/contracts/index.js.map +1 -0
  54. package/dist/credentials/credentialBroker.d.ts +207 -0
  55. package/dist/credentials/credentialBroker.js +588 -0
  56. package/dist/credentials/credentialBroker.js.map +1 -0
  57. package/dist/credentials/index.d.ts +2 -0
  58. package/dist/credentials/index.js +2 -0
  59. package/dist/credentials/index.js.map +1 -0
  60. package/dist/dashboard/app.js +685 -615
  61. package/dist/dashboard/index.html +13 -7
  62. package/dist/dashboard/styles.css +349 -349
  63. package/dist/egress/capabilities.d.ts +32 -0
  64. package/dist/egress/capabilities.js +165 -0
  65. package/dist/egress/capabilities.js.map +1 -0
  66. package/dist/egress/linuxBootstrap.d.ts +1 -0
  67. package/dist/egress/linuxBootstrap.js +121 -0
  68. package/dist/egress/linuxBootstrap.js.map +1 -0
  69. package/dist/egress/run.d.ts +18 -0
  70. package/dist/egress/run.js +305 -0
  71. package/dist/egress/run.js.map +1 -0
  72. package/dist/errors/errorEngine.d.ts +2 -2
  73. package/dist/errors/errorEngine.js +3 -40
  74. package/dist/errors/errorEngine.js.map +1 -1
  75. package/dist/evals/evals.d.ts +126 -0
  76. package/dist/evals/evals.js +466 -0
  77. package/dist/evals/evals.js.map +1 -0
  78. package/dist/evals/index.d.ts +2 -0
  79. package/dist/evals/index.js +2 -0
  80. package/dist/evals/index.js.map +1 -0
  81. package/dist/evidence/index.d.ts +2 -0
  82. package/dist/evidence/index.js +2 -0
  83. package/dist/evidence/index.js.map +1 -0
  84. package/dist/evidence/report.d.ts +143 -0
  85. package/dist/evidence/report.js +556 -0
  86. package/dist/evidence/report.js.map +1 -0
  87. package/dist/fault/faultLab.d.ts +5 -4
  88. package/dist/fault/faultLab.js +66 -24
  89. package/dist/fault/faultLab.js.map +1 -1
  90. package/dist/index.d.ts +46 -0
  91. package/dist/index.js +23 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/inventory/analysis.d.ts +12 -0
  94. package/dist/inventory/analysis.js +457 -0
  95. package/dist/inventory/analysis.js.map +1 -0
  96. package/dist/inventory/index.d.ts +5 -0
  97. package/dist/inventory/index.js +4 -0
  98. package/dist/inventory/index.js.map +1 -0
  99. package/dist/inventory/inventoryController.d.ts +53 -0
  100. package/dist/inventory/inventoryController.js +1044 -0
  101. package/dist/inventory/inventoryController.js.map +1 -0
  102. package/dist/inventory/types.d.ts +579 -0
  103. package/dist/inventory/types.js +787 -0
  104. package/dist/inventory/types.js.map +1 -0
  105. package/dist/landing/assets/index-CxWsopzP.css +1 -0
  106. package/dist/landing/assets/index-DZlpyhqd.js +55 -0
  107. package/dist/landing/assets/index-Dk-Xezs3.js +55 -0
  108. package/dist/landing/index.html +15 -15
  109. package/dist/ledger/actionLedger.d.ts +125 -0
  110. package/dist/ledger/actionLedger.js +594 -0
  111. package/dist/ledger/actionLedger.js.map +1 -0
  112. package/dist/ledger/index.d.ts +2 -0
  113. package/dist/ledger/index.js +2 -0
  114. package/dist/ledger/index.js.map +1 -0
  115. package/dist/mcp/server.js +4 -3
  116. package/dist/mcp/server.js.map +1 -1
  117. package/dist/policy/index.d.ts +3 -0
  118. package/dist/policy/index.js +2 -0
  119. package/dist/policy/index.js.map +1 -0
  120. package/dist/policy/policy.d.ts +14 -0
  121. package/dist/policy/policy.js +282 -0
  122. package/dist/policy/policy.js.map +1 -0
  123. package/dist/policy/types.d.ts +52 -0
  124. package/dist/policy/types.js +2 -0
  125. package/dist/policy/types.js.map +1 -0
  126. package/dist/productTelemetry/index.d.ts +16 -0
  127. package/dist/productTelemetry/index.js +142 -0
  128. package/dist/productTelemetry/index.js.map +1 -0
  129. package/dist/providers/conformance.d.ts +7 -0
  130. package/dist/providers/conformance.js +48 -0
  131. package/dist/providers/conformance.js.map +1 -0
  132. package/dist/providers/index.d.ts +4 -2
  133. package/dist/providers/index.js +3 -1
  134. package/dist/providers/index.js.map +1 -1
  135. package/dist/providers/packs/resendPack.d.ts +2 -0
  136. package/dist/providers/packs/resendPack.js +147 -0
  137. package/dist/providers/packs/resendPack.js.map +1 -0
  138. package/dist/providers/packs/stripePack.d.ts +2 -0
  139. package/dist/providers/packs/stripePack.js +852 -0
  140. package/dist/providers/packs/stripePack.js.map +1 -0
  141. package/dist/providers/registry.d.ts +7 -3
  142. package/dist/providers/registry.js +55 -4
  143. package/dist/providers/registry.js.map +1 -1
  144. package/dist/providers/resend.js +2 -11
  145. package/dist/providers/resend.js.map +1 -1
  146. package/dist/providers/runtime.d.ts +8 -0
  147. package/dist/providers/runtime.js +48 -0
  148. package/dist/providers/runtime.js.map +1 -0
  149. package/dist/providers/stripeWebhook.d.ts +13 -0
  150. package/dist/providers/stripeWebhook.js +50 -0
  151. package/dist/providers/stripeWebhook.js.map +1 -0
  152. package/dist/providers/types.d.ts +153 -0
  153. package/dist/proxy/cacheKey.js +3 -3
  154. package/dist/proxy/cacheKey.js.map +1 -1
  155. package/dist/proxy/providerDetector.d.ts +2 -7
  156. package/dist/proxy/providerDetector.js +4 -4
  157. package/dist/proxy/providerDetector.js.map +1 -1
  158. package/dist/proxy/proxyHandler.js +116 -12
  159. package/dist/proxy/proxyHandler.js.map +1 -1
  160. package/dist/proxy/requestNormalizer.d.ts +0 -1
  161. package/dist/proxy/requestNormalizer.js +2 -5
  162. package/dist/proxy/requestNormalizer.js.map +1 -1
  163. package/dist/reliability/costGovernance.d.ts +175 -0
  164. package/dist/reliability/costGovernance.js +515 -0
  165. package/dist/reliability/costGovernance.js.map +1 -0
  166. package/dist/reliability/index.d.ts +8 -0
  167. package/dist/reliability/index.js +5 -0
  168. package/dist/reliability/index.js.map +1 -0
  169. package/dist/reliability/reconciliation.d.ts +157 -0
  170. package/dist/reliability/reconciliation.js +522 -0
  171. package/dist/reliability/reconciliation.js.map +1 -0
  172. package/dist/reliability/runtimeHealth.d.ts +60 -0
  173. package/dist/reliability/runtimeHealth.js +356 -0
  174. package/dist/reliability/runtimeHealth.js.map +1 -0
  175. package/dist/reliability/slo.d.ts +131 -0
  176. package/dist/reliability/slo.js +375 -0
  177. package/dist/reliability/slo.js.map +1 -0
  178. package/dist/report/safetyReport.js +7 -3
  179. package/dist/report/safetyReport.js.map +1 -1
  180. package/dist/safety/index.d.ts +2 -0
  181. package/dist/safety/index.js +2 -0
  182. package/dist/safety/index.js.map +1 -0
  183. package/dist/safety/safetyController.d.ts +187 -0
  184. package/dist/safety/safetyController.js +477 -0
  185. package/dist/safety/safetyController.js.map +1 -0
  186. package/dist/scenarios/scenarioBundle.d.ts +75 -0
  187. package/dist/scenarios/scenarioBundle.js +750 -0
  188. package/dist/scenarios/scenarioBundle.js.map +1 -0
  189. package/dist/scenarios/scenarioStore.d.ts +1 -0
  190. package/dist/scenarios/scenarioStore.js +47 -32
  191. package/dist/scenarios/scenarioStore.js.map +1 -1
  192. package/dist/security/headerSanitizer.d.ts +2 -0
  193. package/dist/security/headerSanitizer.js +36 -1
  194. package/dist/security/headerSanitizer.js.map +1 -1
  195. package/dist/security/secrets.js +24 -4
  196. package/dist/security/secrets.js.map +1 -1
  197. package/dist/server/accessControl.d.ts +5 -0
  198. package/dist/server/accessControl.js +100 -0
  199. package/dist/server/accessControl.js.map +1 -0
  200. package/dist/server/createServer.d.ts +0 -5
  201. package/dist/server/createServer.js +9 -29
  202. package/dist/server/createServer.js.map +1 -1
  203. package/dist/server/eventsStore.d.ts +6 -1
  204. package/dist/server/eventsStore.js +83 -15
  205. package/dist/server/eventsStore.js.map +1 -1
  206. package/dist/server/routes.js +36 -10
  207. package/dist/server/routes.js.map +1 -1
  208. package/dist/server/sse.d.ts +2 -1
  209. package/dist/server/sse.js +15 -3
  210. package/dist/server/sse.js.map +1 -1
  211. package/dist/setup/setupGenerator.js +53 -6
  212. package/dist/setup/setupGenerator.js.map +1 -1
  213. package/dist/state/stateStore.d.ts +5 -0
  214. package/dist/state/stateStore.js +48 -62
  215. package/dist/state/stateStore.js.map +1 -1
  216. package/dist/storage/fileStore.d.ts +10 -0
  217. package/dist/storage/fileStore.js +131 -0
  218. package/dist/storage/fileStore.js.map +1 -0
  219. package/dist/teamControl/controlPlane.d.ts +255 -0
  220. package/dist/teamControl/controlPlane.js +918 -0
  221. package/dist/teamControl/controlPlane.js.map +1 -0
  222. package/dist/teamControl/deployment.d.ts +33 -0
  223. package/dist/teamControl/deployment.js +67 -0
  224. package/dist/teamControl/deployment.js.map +1 -0
  225. package/dist/teamControl/index.d.ts +4 -0
  226. package/dist/teamControl/index.js +3 -0
  227. package/dist/teamControl/index.js.map +1 -0
  228. package/dist/tests/testGenerator.js +4 -1
  229. package/dist/tests/testGenerator.js.map +1 -1
  230. package/dist/trust/index.d.ts +2 -0
  231. package/dist/trust/index.js +2 -0
  232. package/dist/trust/index.js.map +1 -0
  233. package/dist/trust/trustLadder.d.ts +182 -0
  234. package/dist/trust/trustLadder.js +560 -0
  235. package/dist/trust/trustLadder.js.map +1 -0
  236. package/dist/worlds/index.d.ts +2 -0
  237. package/dist/worlds/index.js +2 -0
  238. package/dist/worlds/index.js.map +1 -0
  239. package/dist/worlds/worlds.d.ts +160 -0
  240. package/dist/worlds/worlds.js +491 -0
  241. package/dist/worlds/worlds.js.map +1 -0
  242. package/docs/assets/dashboard.png +0 -0
  243. package/docs/ci.md +49 -0
  244. package/docs/commercial/README.md +29 -0
  245. package/docs/commercial/data-inventory.md +36 -0
  246. package/docs/commercial/manual-invoicing.md +44 -0
  247. package/docs/commercial/metrics.md +51 -0
  248. package/docs/commercial/pricing.md +103 -0
  249. package/docs/commercial/privacy-policy-draft.md +41 -0
  250. package/docs/commercial/terms-topics-for-counsel.md +51 -0
  251. package/docs/design-partners/README.md +52 -0
  252. package/docs/design-partners/demo-narratives.md +33 -0
  253. package/docs/design-partners/design-partner-offer.md +39 -0
  254. package/docs/design-partners/discovery-questions.md +28 -0
  255. package/docs/design-partners/feedback-capture-template.md +48 -0
  256. package/docs/design-partners/icp-one-pager.md +43 -0
  257. package/docs/design-partners/onboarding-checklist.md +33 -0
  258. package/docs/design-partners/pilot-success-criteria.md +27 -0
  259. package/docs/design-partners/pricing-interview-script.md +18 -0
  260. package/docs/design-partners/telemetry-plan.md +48 -0
  261. package/docs/development/baseline.md +114 -0
  262. package/docs/development/onboarding-smoke.md +37 -0
  263. package/docs/development/verification-0.1.8.md +25 -0
  264. package/docs/enterprise-product-roadmap-ru.md +1879 -0
  265. package/docs/fundraising/README.md +87 -0
  266. package/docs/fundraising/data-room-checklist.md +72 -0
  267. package/docs/fundraising/demo-script.md +52 -0
  268. package/docs/fundraising/design-partners-50.md +74 -0
  269. package/docs/fundraising/launch-posts.md +37 -0
  270. package/docs/fundraising/metrics-and-evidence.md +30 -0
  271. package/docs/fundraising/roadmap-12-month.md +25 -0
  272. package/docs/fundraising/technical-due-diligence-index.md +37 -0
  273. package/docs/fundraising/yc-application.md +25 -0
  274. package/docs/github-actions.md +84 -0
  275. package/docs/hosted-pilot.md +111 -0
  276. package/docs/mcp.md +52 -50
  277. package/docs/operations/disaster-recovery-runbook.md +81 -0
  278. package/docs/operations/kill-switch-runbook.md +32 -0
  279. package/docs/policy.md +61 -0
  280. package/docs/providers/authoring-packs.md +175 -0
  281. package/docs/providers/stripe-core-pack.md +82 -0
  282. package/docs/release-checklist.md +83 -71
  283. package/docs/release-migration-and-rollback.md +63 -0
  284. package/docs/release-readiness.md +39 -0
  285. package/docs/security/action-gateway-threat-model.md +34 -0
  286. package/docs/security/action-ledger-incident-replay-threat-model.md +42 -0
  287. package/docs/security/approval-inbox-threat-model.md +35 -0
  288. package/docs/security/credential-broker-threat-model.md +52 -0
  289. package/docs/security/egress-threat-model.md +126 -0
  290. package/docs/security/inventory-threat-model.md +104 -0
  291. package/docs/security/kill-switch-budgets-threat-model.md +37 -0
  292. package/docs/security/reliability-threat-model.md +111 -0
  293. package/docs/security/trust-ladder-threat-model.md +33 -0
  294. package/docs/team-control-plane.md +72 -0
  295. package/docs/usage.md +571 -57
  296. package/examples/README.md +10 -0
  297. package/examples/agent-instructions/README.md +39 -39
  298. package/examples/ci-smoke/README.md +21 -0
  299. package/examples/ci-smoke/ghostapi.policy.yaml +22 -0
  300. package/examples/ci-smoke/package.json +9 -0
  301. package/examples/ci-smoke/production-egress.mjs +2 -0
  302. package/examples/ci-smoke/safe.mjs +17 -0
  303. package/examples/evals/README.md +24 -0
  304. package/examples/evals/retry-after.eval.json +52 -0
  305. package/examples/generic-rest/README.md +27 -27
  306. package/examples/github-fetch/README.md +35 -35
  307. package/examples/openai-streaming/README.md +16 -0
  308. package/examples/openai-streaming/streaming-tool-call.mjs +31 -0
  309. package/examples/policy/ghostapi.policy.yaml +27 -0
  310. package/examples/record-replay/README.md +19 -0
  311. package/examples/record-replay/replay-requests.json +22 -0
  312. package/examples/record-replay/stripe-checkout.har.json +30 -0
  313. package/examples/resend-node/README.md +22 -22
  314. package/examples/stripe-node/README.md +35 -29
  315. package/examples/stripe-node/checkout-flow.mjs +61 -0
  316. package/examples/twilio-node/README.md +21 -21
  317. package/examples/worlds/README.md +19 -0
  318. package/examples/worlds/subscription-recovery.mjs +12 -0
  319. package/package.json +27 -12
  320. package/dist/providers/stripe.d.ts +0 -2
  321. package/dist/providers/stripe.js +0 -15
  322. package/dist/providers/stripe.js.map +0 -1
  323. package/docs/assets/ghostapi-avatar.png +0 -0
@@ -0,0 +1,514 @@
1
+ import { createHash, createPrivateKey, createPublicKey, generateKeyPairSync, KeyObject, randomUUID, sign, verify } from "node:crypto";
2
+ import { lstat, readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { getDataPaths } from "../config/dataPaths.js";
5
+ import { createLocalSafetyController } from "../safety/index.js";
6
+ import { sanitizeSecretString } from "../security/secrets.js";
7
+ import { atomicWriteJson, ensurePrivateDirectory, withFileLock } from "../storage/fileStore.js";
8
+ import { inspectWorld, runSubscriptionFailureWorkflow } from "../worlds/index.js";
9
+ const ACTION_SCHEMA_VERSION = 1;
10
+ const ACTION_KIND = "ghostapi.action";
11
+ const APPROVAL_KIND = "ghostapi.action-approval";
12
+ const RECORD_KIND = "ghostapi.action-record";
13
+ const MAX_ACTION_BYTES = 128 * 1024;
14
+ const MAX_RECEIPTS = 20;
15
+ const IDENTIFIER = /^[a-z0-9][a-z0-9._-]{0,127}$/;
16
+ const HASH = /^[a-f0-9]{64}$/;
17
+ export class ActionGatewayError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "ActionGatewayError";
21
+ }
22
+ }
23
+ export function canonicalizeActionEnvelope(value) {
24
+ return canonicalJson(validateActionEnvelope(value));
25
+ }
26
+ export function actionHash(value) {
27
+ return sha256(canonicalizeActionEnvelope(value));
28
+ }
29
+ export function actionApprovalHash(value) {
30
+ return sha256(canonicalJson(validateActionApproval(value)));
31
+ }
32
+ export function validateActionEnvelope(value) {
33
+ const action = object(value, "Action envelope must be an object.");
34
+ exactKeys(action, ["schemaVersion", "kind", "actionId", "idempotencyKey", "actor", "project", "provider", "operation", "resource", "arguments", "expectedSideEffects", "riskClass", "reversibility", "policy", "evidence", "expiresAt", "nonce"], "Action envelope");
35
+ if (action.schemaVersion !== ACTION_SCHEMA_VERSION || action.kind !== ACTION_KIND)
36
+ throw new ActionGatewayError("Unsupported action envelope schema.");
37
+ const actor = object(action.actor, "Action actor is invalid.");
38
+ exactKeys(actor, ["id", "workloadId", "type"], "Action actor");
39
+ if (actor.type !== "agent" && actor.type !== "service")
40
+ throw new ActionGatewayError("Action actor type is invalid.");
41
+ const project = object(action.project, "Action project is invalid.");
42
+ exactKeys(project, ["id", "environment"], "Action project");
43
+ if (project.environment !== "synthetic")
44
+ throw new ActionGatewayError("Only the synthetic action environment is available.");
45
+ if (action.provider !== "ghostapi-synthetic")
46
+ throw new ActionGatewayError("Unknown action provider.");
47
+ const resource = object(action.resource, "Action resource is invalid.");
48
+ exactKeys(resource, ["type", "id"], "Action resource");
49
+ if (resource.type !== "synthetic-world")
50
+ throw new ActionGatewayError("Action resource type is invalid.");
51
+ const args = object(action.arguments, "Action arguments are invalid.");
52
+ exactKeys(args, ["worldId"], "Action arguments");
53
+ const operation = identifier(action.operation, "Action operation");
54
+ const sideEffects = action.expectedSideEffects;
55
+ const expected = ["stripe.subscription.past_due", "email.subscription_payment_failed", "github.recovery_issue", "generic_rest.payment_failed"];
56
+ if (!Array.isArray(sideEffects) || sideEffects.length > 16 || sideEffects.some((value) => typeof value !== "string" || !IDENTIFIER.test(value) || sanitizeSecretString(value) !== value) || new Set(sideEffects).size !== sideEffects.length)
57
+ throw new ActionGatewayError("Action expected side effects must be a bounded unique list of safe identifiers.");
58
+ if (operation === "synthetic.subscription_failure" && (sideEffects.length !== expected.length || sideEffects.some((value, index) => value !== expected[index])))
59
+ throw new ActionGatewayError("Action expected side effects are invalid for the synthetic operation.");
60
+ if (action.riskClass !== "read" && action.riskClass !== "write" && action.riskClass !== "money_movement" && action.riskClass !== "external_communication" && action.riskClass !== "delete" && action.riskClass !== "deploy")
61
+ throw new ActionGatewayError("Action risk class is invalid.");
62
+ if (action.reversibility !== "none" && action.reversibility !== "compensatable")
63
+ throw new ActionGatewayError("Action reversibility is invalid.");
64
+ const policy = object(action.policy, "Action policy reference is invalid.");
65
+ exactKeys(policy, ["version", "hash"], "Action policy reference");
66
+ const evidence = object(action.evidence, "Action evidence reference is invalid.");
67
+ exactKeys(evidence, ["hash"], "Action evidence reference");
68
+ const worldId = identifier(args.worldId, "Action world id");
69
+ if (resource.id !== worldId)
70
+ throw new ActionGatewayError("Action resource and normalized world argument must match.");
71
+ return {
72
+ schemaVersion: 1,
73
+ kind: "ghostapi.action",
74
+ actionId: identifier(action.actionId, "Action id"),
75
+ idempotencyKey: identifier(action.idempotencyKey, "Action idempotency key"),
76
+ actor: { id: identifier(actor.id, "Action actor id"), workloadId: identifier(actor.workloadId, "Action workload id"), type: actor.type },
77
+ project: { id: identifier(project.id, "Action project id"), environment: "synthetic" },
78
+ provider: "ghostapi-synthetic",
79
+ operation,
80
+ resource: { type: "synthetic-world", id: worldId },
81
+ arguments: { worldId },
82
+ expectedSideEffects: [...sideEffects],
83
+ riskClass: action.riskClass,
84
+ reversibility: action.reversibility,
85
+ policy: { version: positiveInteger(policy.version, "Action policy version"), hash: hash(policy.hash, "Action policy hash") },
86
+ evidence: { hash: hash(evidence.hash, "Action evidence hash") },
87
+ expiresAt: futureTimestamp(action.expiresAt, "Action expiry"),
88
+ nonce: identifier(action.nonce, "Action nonce")
89
+ };
90
+ }
91
+ export function validateActionApproval(value) {
92
+ const approval = object(value, "Action approval must be an object.");
93
+ exactKeys(approval, ["schemaVersion", "kind", "approvalId", "actionHash", "approvedBy", "approvedAt", "expiresAt", "nonce", "provenance"], "Action approval");
94
+ if (approval.schemaVersion !== ACTION_SCHEMA_VERSION || approval.kind !== APPROVAL_KIND)
95
+ throw new ActionGatewayError("Unsupported action approval schema.");
96
+ const approvedAt = timestamp(approval.approvedAt, "Action approval timestamp");
97
+ const expiresAt = futureTimestamp(approval.expiresAt, "Action approval expiry");
98
+ if (Date.parse(expiresAt) <= Date.parse(approvedAt))
99
+ throw new ActionGatewayError("Action approval must expire after it was issued.");
100
+ const provenance = object(approval.provenance, "Action approval provenance is invalid.");
101
+ exactKeys(provenance, ["kind", "keyId", "signature"], "Action approval provenance");
102
+ if (provenance.kind !== "ghostapi.ed25519-signature" || typeof provenance.signature !== "string" || !/^[A-Za-z0-9_-]{86}$/.test(provenance.signature))
103
+ throw new ActionGatewayError("Action approval provenance is invalid.");
104
+ return { schemaVersion: 1, kind: "ghostapi.action-approval", approvalId: identifier(approval.approvalId, "Action approval id"), actionHash: hash(approval.actionHash, "Action approval hash"), approvedBy: identifier(approval.approvedBy, "Action approver id"), approvedAt, expiresAt, nonce: identifier(approval.nonce, "Action approval nonce"), provenance: { kind: "ghostapi.ed25519-signature", keyId: identifier(provenance.keyId, "Action approval provenance key id"), signature: provenance.signature } };
105
+ }
106
+ export function createSyntheticActionAdapter() {
107
+ return {
108
+ provider: "ghostapi-synthetic",
109
+ supports: (operation) => operation === "synthetic.subscription_failure",
110
+ async plan(action) {
111
+ if (action.resource.id !== action.arguments.worldId)
112
+ throw new ActionGatewayError("Synthetic action resource does not match normalized arguments.");
113
+ },
114
+ async simulate(action) {
115
+ await inspectWorld(action.arguments.worldId);
116
+ },
117
+ async execute(action, controls) {
118
+ const receipt = await runSubscriptionFailureWorkflow(action.arguments.worldId, action.actionId, controls?.commit);
119
+ return { outcome: "committed", providerRequestId: `synthetic_${receipt.actionId}`, result: { worldId: action.arguments.worldId, subscriptionId: receipt.subscriptionId, syntheticReceiptId: receipt.actionId } };
120
+ },
121
+ async verify(action) {
122
+ const world = await inspectWorld(action.arguments.worldId);
123
+ const receipt = world.state.receipts.find((candidate) => candidate.actionId === action.actionId);
124
+ return receipt === undefined
125
+ ? { committed: false }
126
+ : { committed: true, providerRequestId: `synthetic_${receipt.actionId}`, result: { worldId: action.arguments.worldId, subscriptionId: receipt.subscriptionId, syntheticReceiptId: receipt.actionId } };
127
+ }
128
+ };
129
+ }
130
+ export class LocalActionGateway {
131
+ now;
132
+ pathForAction;
133
+ adapter;
134
+ safetyController;
135
+ approvalVerifier;
136
+ constructor(options = {}) {
137
+ this.now = options.now ?? (() => new Date());
138
+ this.pathForAction = options.pathForAction ?? getActionPath;
139
+ this.adapter = options.adapter ?? createSyntheticActionAdapter();
140
+ this.safetyController = options.safetyController ?? createLocalSafetyController({ now: this.now });
141
+ this.approvalVerifier = options.approvalVerifier ?? createDisabledActionApprovalVerifier();
142
+ }
143
+ async submit(actionValue, approvalValue, policy) {
144
+ const action = validateActionEnvelope(actionValue);
145
+ const approval = validateActionApproval(approvalValue);
146
+ const verification = await this.approvalVerifier.verify(action, approval, { phase: "submit" });
147
+ requireApprovalInboxVerification(approval, verification);
148
+ const current = this.now().toISOString();
149
+ verifyPolicy(action, policy);
150
+ const actionDigest = actionHash(action);
151
+ const path = this.pathForAction(action.actionId);
152
+ return withFileLock(path, async () => {
153
+ const existing = await readStoredAction(path, false);
154
+ if (existing !== null) {
155
+ if (existing.actionHash === actionDigest && actionApprovalHash(existing.approval) === actionApprovalHash(approval))
156
+ return existing;
157
+ throw new ActionGatewayError("Action id already exists with a different immutable envelope or approval.");
158
+ }
159
+ if (Date.parse(action.expiresAt) <= Date.parse(current))
160
+ throw new ActionGatewayError("Action has expired.");
161
+ verifyApproval(action, approval, current);
162
+ const record = { schemaVersion: 1, kind: "ghostapi.action-record", envelope: action, actionHash: actionDigest, approval, receipts: [] };
163
+ record.receipts.push(createReceipt(record, "requested", current));
164
+ await writeStoredAction(path, record);
165
+ return record;
166
+ });
167
+ }
168
+ async inspect(actionId) {
169
+ return readStoredAction(this.pathForAction(identifier(actionId, "Action id")), true);
170
+ }
171
+ async execute(actionValue, identity, policy) {
172
+ const requested = validateActionEnvelope(actionValue);
173
+ const path = this.pathForAction(requested.actionId);
174
+ return withFileLock(path, async () => {
175
+ const record = await readStoredAction(path, true);
176
+ if (record === null)
177
+ throw new ActionGatewayError("Action was not submitted.");
178
+ const approvalVerification = await this.approvalVerifier.verify(record.envelope, record.approval, { phase: "execute" });
179
+ requireApprovalInboxVerification(record.approval, approvalVerification);
180
+ const current = this.now().toISOString();
181
+ if (actionHash(requested) !== record.actionHash || canonicalizeActionEnvelope(requested) !== canonicalizeActionEnvelope(record.envelope))
182
+ throw new ActionGatewayError("Action envelope changed after approval; execution is blocked.");
183
+ verifyApproval(record.envelope, record.approval, current, false);
184
+ verifyPolicy(record.envelope, policy);
185
+ if (identity.actorId !== record.envelope.actor.id || identity.workloadId !== record.envelope.actor.workloadId)
186
+ throw new ActionGatewayError("Execution identity does not match the approved action.");
187
+ if (!this.adapter.supports(record.envelope.operation))
188
+ throw new ActionGatewayError(`Execution adapter does not support action operation: ${record.envelope.operation}`);
189
+ const verified = findLatestReceipt(record.receipts, "verified");
190
+ if (verified !== undefined)
191
+ return verified;
192
+ const committed = findLatestReceipt(record.receipts, "committed");
193
+ if (committed !== undefined) {
194
+ const reconciliation = await this.adapter.verify(record.envelope);
195
+ if (!reconciliation.committed || reconciliation.providerRequestId === undefined || reconciliation.result === undefined)
196
+ throw new ActionGatewayError("Committed action verification is incomplete; execution will not retry without idempotency proof.");
197
+ const verifiedReceipt = createReceipt(record, "verified", current, reconciliation.providerRequestId, reconciliation.result);
198
+ appendReceipt(record, verifiedReceipt);
199
+ await writeStoredAction(path, record);
200
+ return verifiedReceipt;
201
+ }
202
+ const attempted = findLatestReceipt(record.receipts, "attempted");
203
+ if (attempted !== undefined) {
204
+ const reconciliation = await this.adapter.verify(record.envelope);
205
+ if (!reconciliation.committed || reconciliation.providerRequestId === undefined || reconciliation.result === undefined)
206
+ throw new ActionGatewayError("Prior action outcome is unknown; execution will not retry without idempotency proof.");
207
+ appendReceipt(record, createReceipt(record, "committed", current, reconciliation.providerRequestId, reconciliation.result));
208
+ const verifiedReceipt = createReceipt(record, "verified", current, reconciliation.providerRequestId, reconciliation.result);
209
+ appendReceipt(record, verifiedReceipt);
210
+ await writeStoredAction(path, record);
211
+ return verifiedReceipt;
212
+ }
213
+ if (Date.parse(record.envelope.expiresAt) <= Date.parse(current))
214
+ throw new ActionGatewayError("Action has expired.");
215
+ verifyApproval(record.envelope, record.approval, current);
216
+ await this.adapter.plan(record.envelope);
217
+ await this.adapter.simulate(record.envelope);
218
+ const safety = await this.safetyController.admit(safetyAction(record.envelope, record.actionHash));
219
+ if (safety.replay)
220
+ throw new ActionGatewayError("Safety controller replay was reached before a verified action receipt.");
221
+ appendReceipt(record, createReceipt(record, "attempted", current));
222
+ await writeStoredAction(path, record);
223
+ let execution;
224
+ try {
225
+ execution = await this.adapter.execute(record.envelope, { commit: safety.commit });
226
+ }
227
+ catch {
228
+ await safety.complete({ success: false, latencyMs: 0, reason: "synthetic execution failed or was stopped" });
229
+ const failed = createReceipt(record, "failed", this.now().toISOString(), undefined, undefined, { code: "execution_error", retrySafe: false });
230
+ appendReceipt(record, failed);
231
+ await writeStoredAction(path, record);
232
+ throw new ActionGatewayError("Action execution failed; it was not automatically retried.");
233
+ }
234
+ if (execution.outcome === "unknown") {
235
+ await safety.complete({ success: false, latencyMs: 0, reason: "synthetic execution outcome is unknown" });
236
+ const failed = createReceipt(record, "failed", this.now().toISOString(), undefined, undefined, { code: "unknown_outcome", retrySafe: false });
237
+ appendReceipt(record, failed);
238
+ await writeStoredAction(path, record);
239
+ throw new ActionGatewayError("Action provider outcome is unknown; it was not automatically retried.");
240
+ }
241
+ appendReceipt(record, createReceipt(record, "committed", this.now().toISOString(), execution.providerRequestId, execution.result));
242
+ await writeStoredAction(path, record);
243
+ const verification = await this.adapter.verify(record.envelope);
244
+ if (!verification.committed || verification.providerRequestId === undefined || verification.result === undefined) {
245
+ await safety.complete({ success: false, reconciliationMismatch: true, latencyMs: 0, reason: "synthetic verification did not prove the result" });
246
+ const failed = createReceipt(record, "failed", this.now().toISOString(), execution.providerRequestId, execution.result, { code: "verification_failed", retrySafe: false });
247
+ appendReceipt(record, failed);
248
+ await writeStoredAction(path, record);
249
+ throw new ActionGatewayError("Action committed but verification did not prove its result; it was not automatically retried.");
250
+ }
251
+ const verifiedReceipt = createReceipt(record, "verified", this.now().toISOString(), verification.providerRequestId, verification.result);
252
+ appendReceipt(record, verifiedReceipt);
253
+ await writeStoredAction(path, record);
254
+ await safety.complete({ success: true, latencyMs: 0 });
255
+ return verifiedReceipt;
256
+ });
257
+ }
258
+ async compensate(actionId) {
259
+ const action = await this.inspect(actionId);
260
+ if (this.adapter.compensate === undefined || action.envelope.reversibility !== "compensatable")
261
+ throw new ActionGatewayError("Compensation is unsupported for this action; no rollback is claimed.");
262
+ await this.adapter.compensate(action.envelope);
263
+ throw new ActionGatewayError("Compensation adapters must return a durable compensation receipt before this operation can be exposed.");
264
+ }
265
+ }
266
+ function safetyAction(action, actionDigest) {
267
+ return {
268
+ organizationId: "ghostapi-local",
269
+ projectId: action.project.id,
270
+ environment: action.project.environment,
271
+ actorId: action.actor.id,
272
+ workloadId: action.actor.workloadId,
273
+ provider: action.provider,
274
+ operation: action.operation,
275
+ riskClass: action.riskClass,
276
+ idempotencyKey: action.idempotencyKey,
277
+ actionHash: actionDigest,
278
+ costs: { monetaryAmountMinor: 0, requests: 1, messages: 1, mutations: 1, deletes: 0, tokenCost: 0 }
279
+ };
280
+ }
281
+ export function createLocalActionGateway(options = {}) {
282
+ return new LocalActionGateway(options);
283
+ }
284
+ export function createDisabledActionApprovalVerifier() {
285
+ return { async verify() { throw new ActionGatewayError("Action approval authenticity could not be verified."); } };
286
+ }
287
+ export function createEd25519ActionApprovalSigner(options) {
288
+ const keyId = identifier(options.keyId, "Action approval signing key id");
289
+ const privateKey = options.privateKey instanceof KeyObject ? options.privateKey : createPrivateKey(options.privateKey);
290
+ if (privateKey.type !== "private" || privateKey.asymmetricKeyType !== "ed25519")
291
+ throw new ActionGatewayError("Action approval signing key must be an Ed25519 private key.");
292
+ return {
293
+ issue(value) {
294
+ const approval = validateUnsignedActionApproval(value);
295
+ const signature = sign(null, Buffer.from(canonicalJson(approval), "utf8"), privateKey).toString("base64url");
296
+ return { ...approval, provenance: { kind: "ghostapi.ed25519-signature", keyId, signature } };
297
+ }
298
+ };
299
+ }
300
+ export function createEd25519ActionApprovalVerifier(options) {
301
+ const keys = new Map(Object.entries(options.trustedKeys).map(([keyId, key]) => {
302
+ const parsedId = identifier(keyId, "Action approval verification key id");
303
+ const publicKey = key instanceof KeyObject && key.type === "public" ? key : createPublicKey(key);
304
+ if (publicKey.asymmetricKeyType !== "ed25519")
305
+ throw new ActionGatewayError("Action approval verification key must be Ed25519.");
306
+ return [parsedId, publicKey];
307
+ }));
308
+ return {
309
+ async verify(action, approval) {
310
+ const parsed = validateActionApproval(approval);
311
+ const publicKey = keys.get(parsed.provenance.keyId);
312
+ const valid = publicKey !== undefined && verify(null, Buffer.from(canonicalJson(unsignedActionApproval(parsed)), "utf8"), publicKey, Buffer.from(parsed.provenance.signature, "base64url"));
313
+ if (!valid || parsed.actionHash !== actionHash(action))
314
+ throw new ActionGatewayError("Action approval authenticity could not be verified.");
315
+ return { provenance: "verified" };
316
+ }
317
+ };
318
+ }
319
+ export function createTestActionApprovalVerifier() {
320
+ const { privateKey, publicKey } = generateKeyPairSync("ed25519");
321
+ const signer = createEd25519ActionApprovalSigner({ keyId: "test-approval-key", privateKey });
322
+ return {
323
+ verifier: createEd25519ActionApprovalVerifier({ trustedKeys: { "test-approval-key": publicKey } }),
324
+ signer,
325
+ issue: (approval) => signer.issue(approval)
326
+ };
327
+ }
328
+ export function getActionPath(actionId) {
329
+ return join(getDataPaths().actions, `${identifier(actionId, "Action id")}.action.json`);
330
+ }
331
+ async function readStoredAction(path, required) {
332
+ await ensurePrivateDirectory(getDataPaths().actions);
333
+ const info = await lstat(path).catch((error) => isErrorCode(error, "ENOENT") ? null : Promise.reject(error));
334
+ if (info === null) {
335
+ if (required)
336
+ throw new ActionGatewayError("Action was not found.");
337
+ return null;
338
+ }
339
+ if (!info.isFile() || info.isSymbolicLink())
340
+ throw new ActionGatewayError("Action record must be a regular non-symlink file.");
341
+ const source = await readFile(path, "utf8");
342
+ if (Buffer.byteLength(source, "utf8") > MAX_ACTION_BYTES)
343
+ throw new ActionGatewayError(`Action record exceeds ${MAX_ACTION_BYTES} bytes.`);
344
+ try {
345
+ return validateStoredAction(JSON.parse(source));
346
+ }
347
+ catch (error) {
348
+ if (error instanceof ActionGatewayError)
349
+ throw error;
350
+ throw new ActionGatewayError("Action record is not valid JSON.");
351
+ }
352
+ }
353
+ async function writeStoredAction(path, record) {
354
+ await ensurePrivateDirectory(getDataPaths().actions);
355
+ await atomicWriteJson(path, validateStoredAction(record));
356
+ }
357
+ export function validateStoredAction(value) {
358
+ const record = object(value, "Action record must be an object.");
359
+ exactKeys(record, ["schemaVersion", "kind", "envelope", "actionHash", "approval", "receipts"], "Action record");
360
+ if (record.schemaVersion !== ACTION_SCHEMA_VERSION || record.kind !== RECORD_KIND)
361
+ throw new ActionGatewayError("Unsupported action record schema.");
362
+ const envelope = validateActionEnvelope(record.envelope);
363
+ const digest = hash(record.actionHash, "Action record hash");
364
+ if (digest !== actionHash(envelope))
365
+ throw new ActionGatewayError("Action record hash does not match its envelope.");
366
+ const approval = validateActionApproval(record.approval);
367
+ verifyApproval(envelope, approval, new Date(0).toISOString(), false);
368
+ const rawReceipts = record.receipts;
369
+ if (!Array.isArray(rawReceipts) || rawReceipts.length < 1 || rawReceipts.length > MAX_RECEIPTS)
370
+ throw new ActionGatewayError("Action record receipts are invalid.");
371
+ const receipts = rawReceipts.map((receipt, index) => validateReceipt(receipt, envelope.actionId, digest, index === 0 ? receiptGenesisHash(digest) : rawReceipts[index - 1].receiptHash));
372
+ if (receipts[0].status !== "requested")
373
+ throw new ActionGatewayError("Action record must begin with a requested receipt.");
374
+ return { schemaVersion: 1, kind: "ghostapi.action-record", envelope, actionHash: digest, approval, receipts };
375
+ }
376
+ function createReceipt(record, status, timestamp, providerRequestId, result, failure) {
377
+ const previousReceiptHash = record.receipts.length === 0 ? receiptGenesisHash(record.actionHash) : record.receipts.at(-1).receiptHash;
378
+ const base = { receiptId: identifier(`receipt-${randomUUID().replace(/-/g, "")}`, "Receipt id"), actionId: record.envelope.actionId, actionHash: record.actionHash, status, timestamp: timestampValue(timestamp, "Action receipt timestamp"), ...(providerRequestId === undefined ? {} : { providerRequestId: identifier(providerRequestId, "Provider request id") }), ...(result === undefined ? {} : { result }), ...(failure === undefined ? {} : { failure }), previousReceiptHash };
379
+ return { ...base, receiptHash: sha256(canonicalJson(base)) };
380
+ }
381
+ function appendReceipt(record, receipt) {
382
+ if (record.receipts.length >= MAX_RECEIPTS)
383
+ throw new ActionGatewayError(`Action receipt limit of ${MAX_RECEIPTS} was reached.`);
384
+ record.receipts.push(receipt);
385
+ }
386
+ function validateReceipt(value, actionId, actionDigest, previousReceiptHash) {
387
+ const receipt = object(value, "Action receipt is invalid.");
388
+ exactKeys(receipt, ["receiptId", "actionId", "actionHash", "status", "timestamp", "providerRequestId", "result", "failure", "previousReceiptHash", "receiptHash"], "Action receipt");
389
+ if (receipt.actionId !== actionId || receipt.actionHash !== actionDigest || receipt.previousReceiptHash !== previousReceiptHash || (receipt.status !== "requested" && receipt.status !== "attempted" && receipt.status !== "committed" && receipt.status !== "verified" && receipt.status !== "failed"))
390
+ throw new ActionGatewayError("Action receipt linkage is invalid.");
391
+ const providerRequestId = receipt.providerRequestId === undefined ? undefined : identifier(receipt.providerRequestId, "Provider request id");
392
+ const result = receipt.result === undefined ? undefined : normalizeResult(receipt.result);
393
+ const failure = receipt.failure === undefined ? undefined : normalizeFailure(receipt.failure);
394
+ if ((receipt.status === "committed" || receipt.status === "verified") && (providerRequestId === undefined || result === undefined))
395
+ throw new ActionGatewayError("Committed and verified receipts require a provider result.");
396
+ if (receipt.status === "failed" && failure === undefined)
397
+ throw new ActionGatewayError("Failed receipt requires a failure classification.");
398
+ const status = receipt.status;
399
+ const base = { receiptId: identifier(receipt.receiptId, "Receipt id"), actionId, actionHash: actionDigest, status, timestamp: timestampValue(receipt.timestamp, "Action receipt timestamp"), ...(providerRequestId === undefined ? {} : { providerRequestId }), ...(result === undefined ? {} : { result }), ...(failure === undefined ? {} : { failure }), previousReceiptHash };
400
+ if (hash(receipt.receiptHash, "Action receipt hash") !== sha256(canonicalJson(base)))
401
+ throw new ActionGatewayError("Action receipt hash is invalid.");
402
+ return { ...base, receiptHash: receipt.receiptHash };
403
+ }
404
+ function normalizeResult(value) {
405
+ const result = object(value, "Action receipt result is invalid.");
406
+ exactKeys(result, ["worldId", "subscriptionId", "syntheticReceiptId"], "Action receipt result");
407
+ return { worldId: identifier(result.worldId, "Action receipt world id"), subscriptionId: identifier(result.subscriptionId, "Action receipt subscription id"), syntheticReceiptId: identifier(result.syntheticReceiptId, "Action receipt synthetic receipt id") };
408
+ }
409
+ function normalizeFailure(value) {
410
+ const failure = object(value, "Action receipt failure is invalid.");
411
+ exactKeys(failure, ["code", "retrySafe"], "Action receipt failure");
412
+ if ((failure.code !== "execution_error" && failure.code !== "unknown_outcome" && failure.code !== "verification_failed") || failure.retrySafe !== false)
413
+ throw new ActionGatewayError("Action receipt failure is invalid.");
414
+ return { code: failure.code, retrySafe: false };
415
+ }
416
+ function verifyApproval(action, approval, now, enforceExpiry = true) {
417
+ if (approval.actionHash !== actionHash(action))
418
+ throw new ActionGatewayError("Action approval is not bound to the exact canonical action hash.");
419
+ if (approval.approvedBy === action.actor.id || approval.approvedBy === action.actor.workloadId)
420
+ throw new ActionGatewayError("An action actor cannot approve its own high-risk action.");
421
+ if (enforceExpiry && Date.parse(approval.approvedAt) > Date.parse(now))
422
+ throw new ActionGatewayError("Action approval timestamp is in the future.");
423
+ if (enforceExpiry && Date.parse(approval.expiresAt) <= Date.parse(now))
424
+ throw new ActionGatewayError("Action approval has expired.");
425
+ }
426
+ function verifyPolicy(action, policy) {
427
+ if (!policy.allowed)
428
+ throw new ActionGatewayError("Current policy denies action execution.");
429
+ if (policy.version !== action.policy.version || policy.hash !== action.policy.hash)
430
+ throw new ActionGatewayError("Current policy reference does not match the approved action.");
431
+ }
432
+ function receiptGenesisHash(actionDigest) {
433
+ return sha256(`ghostapi.action.receipt.v1:${actionDigest}`);
434
+ }
435
+ function findLatestReceipt(receipts, status) {
436
+ for (let index = receipts.length - 1; index >= 0; index -= 1) {
437
+ const receipt = receipts[index];
438
+ if (receipt.status === status)
439
+ return receipt;
440
+ }
441
+ return undefined;
442
+ }
443
+ function object(value, message) {
444
+ if (value === null || typeof value !== "object" || Array.isArray(value))
445
+ throw new ActionGatewayError(message);
446
+ return value;
447
+ }
448
+ function exactKeys(value, keys, label) {
449
+ for (const key of Object.keys(value))
450
+ if (!keys.includes(key))
451
+ throw new ActionGatewayError(`${label} contains unsupported field: ${key}`);
452
+ }
453
+ function identifier(value, label) {
454
+ if (typeof value !== "string" || !IDENTIFIER.test(value) || sanitizeSecretString(value) !== value)
455
+ throw new ActionGatewayError(`${label} must be a safe stable identifier.`);
456
+ return value;
457
+ }
458
+ function hash(value, label) {
459
+ if (typeof value !== "string" || !HASH.test(value))
460
+ throw new ActionGatewayError(`${label} must be a SHA-256 hex digest.`);
461
+ return value;
462
+ }
463
+ function positiveInteger(value, label) {
464
+ if (!Number.isInteger(value) || typeof value !== "number" || value < 1)
465
+ throw new ActionGatewayError(`${label} must be a positive integer.`);
466
+ return value;
467
+ }
468
+ function timestamp(value, label) {
469
+ return timestampValue(value, label);
470
+ }
471
+ function timestampValue(value, label) {
472
+ if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value) || !Number.isFinite(Date.parse(value)))
473
+ throw new ActionGatewayError(`${label} must be an ISO UTC timestamp.`);
474
+ return value;
475
+ }
476
+ function futureTimestamp(value, label) {
477
+ return timestampValue(value, label);
478
+ }
479
+ function canonicalJson(value) {
480
+ if (value === null || typeof value === "boolean" || typeof value === "string")
481
+ return JSON.stringify(value);
482
+ if (typeof value === "number") {
483
+ if (!Number.isFinite(value))
484
+ throw new ActionGatewayError("Canonical action values must be finite.");
485
+ return JSON.stringify(value);
486
+ }
487
+ if (Array.isArray(value))
488
+ return `[${value.map(canonicalJson).join(",")}]`;
489
+ if (typeof value === "object") {
490
+ const record = value;
491
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(",")}}`;
492
+ }
493
+ throw new ActionGatewayError("Canonical action values must be JSON data.");
494
+ }
495
+ function requireApprovalInboxVerification(approval, verification) {
496
+ if (approval.approvedBy === "approval-inbox" && verification.approvalInboxRequestId !== approval.approvalId)
497
+ throw new ActionGatewayError("Approval inbox provenance is not active for execution.");
498
+ }
499
+ function validateUnsignedActionApproval(value) {
500
+ const approval = object(value, "Action approval must be an object.");
501
+ exactKeys(approval, ["schemaVersion", "kind", "approvalId", "actionHash", "approvedBy", "approvedAt", "expiresAt", "nonce"], "Unsigned action approval");
502
+ return unsignedActionApproval(validateActionApproval({ ...approval, provenance: { kind: "ghostapi.ed25519-signature", keyId: "validation-key", signature: "A".repeat(86) } }));
503
+ }
504
+ function unsignedActionApproval(approval) {
505
+ const { provenance: _provenance, ...unsigned } = approval;
506
+ return unsigned;
507
+ }
508
+ function sha256(value) {
509
+ return createHash("sha256").update(value, "utf8").digest("hex");
510
+ }
511
+ function isErrorCode(error, code) {
512
+ return error instanceof Error && "code" in error && error.code === code;
513
+ }
514
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/actions/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ActionGatewayError, LocalActionGateway, actionApprovalHash, actionHash, canonicalizeActionEnvelope, createLocalActionGateway, createDisabledActionApprovalVerifier, createEd25519ActionApprovalSigner, createEd25519ActionApprovalVerifier, createSyntheticActionAdapter, createTestActionApprovalVerifier, getActionPath, validateActionApproval, validateActionEnvelope, validateStoredAction } from "./gateway.js";
2
+ export type { ActionApproval, ActionApprovalVerifier, ActionApprovalSigner, ActionApprovalVerification, ActionApprovalVerificationContext, ActionEnvelope, ActionExecutionAdapter, ActionExecutionIdentity, ActionExecutionReceipt, ActionGatewayOptions, ActionPolicyCheck, ActionReceiptStatus, ActionReversibility, ActionRiskClass, StoredAction, UnsignedActionApproval } from "./gateway.js";
@@ -0,0 +1,2 @@
1
+ export { ActionGatewayError, LocalActionGateway, actionApprovalHash, actionHash, canonicalizeActionEnvelope, createLocalActionGateway, createDisabledActionApprovalVerifier, createEd25519ActionApprovalSigner, createEd25519ActionApprovalVerifier, createSyntheticActionAdapter, createTestActionApprovalVerifier, getActionPath, validateActionApproval, validateActionEnvelope, validateStoredAction } from "./gateway.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,oCAAoC,EACpC,iCAAiC,EACjC,mCAAmC,EACnC,4BAA4B,EAC5B,gCAAgC,EAChC,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,cAAc,CAAC"}
@@ -1,10 +1,11 @@
1
1
  export async function askLLM(messages, config) {
2
- if (!config.apiKey) {
3
- throw new Error("No LLM API key configured");
2
+ if (config.offline || config.allowExternalLlm !== true || !config.apiKey) {
3
+ throw new Error("External LLM access requires explicit opt-in and GHOSTAPI_LLM_API_KEY");
4
4
  }
5
5
  // A basic OpenAI-compatible implementation. Since GPT-4o-mini / GPT-4o are standard defaults,
6
6
  // OpenAI chat completions endpoint is assumed for MVP.
7
7
  const response = await fetch("https://api.openai.com/v1/chat/completions", {
8
+ signal: AbortSignal.timeout(15_000),
8
9
  method: "POST",
9
10
  headers: {
10
11
  "Content-Type": "application/json",
@@ -17,8 +18,7 @@ export async function askLLM(messages, config) {
17
18
  })
18
19
  });
19
20
  if (!response.ok) {
20
- const text = await response.text();
21
- throw new Error(`LLM Error: ${response.status} ${text}`);
21
+ throw new Error(`LLM request failed with status ${response.status}`);
22
22
  }
23
23
  const json = await response.json();
24
24
  const content = json.choices?.[0]?.message?.content;
@@ -1 +1 @@
1
- {"version":3,"file":"aiClient.js","sourceRoot":"","sources":["../../src/ai/aiClient.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAqB,EAAE,MAAoB;IACtE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,+FAA+F;IAC/F,uDAAuD;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4CAA4C,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;SACzC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ;YACR,WAAW,EAAE,GAAG;SACjB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4B,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"aiClient.js","sourceRoot":"","sources":["../../src/ai/aiClient.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAqB,EAAE,MAAoB;IACtE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,+FAA+F;IAC/F,uDAAuD;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4CAA4C,EAAE;QACzE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;SACzC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ;YACR,WAAW,EAAE,GAAG;SACjB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4B,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}