@pome-sh/cli 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/src/cli/checks-add.js +16 -0
  3. package/dist/src/cli/checks-lint.d.ts +1 -0
  4. package/dist/src/cli/checks-lint.js +59 -0
  5. package/dist/src/cli/criterion-binding.d.ts +41 -0
  6. package/dist/src/cli/criterion-binding.js +111 -0
  7. package/dist/src/cli/main.js +12 -0
  8. package/dist/src/runner/runTask.d.ts +2 -2
  9. package/dist/src/task/insertCriterion.js +6 -1
  10. package/dist/src/task/parseTask.d.ts +21 -0
  11. package/dist/src/task/parseTask.js +48 -1
  12. package/dist/src/task/taskSchema.d.ts +4 -4
  13. package/node_modules/@pome-sh/sdk/dist/checks.d.ts +2 -0
  14. package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -1
  15. package/node_modules/@pome-sh/sdk/dist/failure-injection.js +7 -0
  16. package/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -1
  17. package/node_modules/@pome-sh/sdk/dist/index.d.ts +8 -0
  18. package/node_modules/@pome-sh/sdk/dist/index.js +1 -0
  19. package/node_modules/@pome-sh/sdk/dist/index.js.map +1 -1
  20. package/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +10 -0
  21. package/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -1
  22. package/node_modules/@pome-sh/sdk/dist/recorder.js +8 -4
  23. package/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -1
  24. package/node_modules/@pome-sh/sdk/dist/request-capture.d.ts +31 -0
  25. package/node_modules/@pome-sh/sdk/dist/request-capture.js +59 -0
  26. package/node_modules/@pome-sh/sdk/dist/request-capture.js.map +1 -0
  27. package/node_modules/@pome-sh/sdk/dist/server.d.ts +1 -0
  28. package/node_modules/@pome-sh/sdk/dist/server.js +13 -0
  29. package/node_modules/@pome-sh/sdk/dist/server.js.map +1 -1
  30. package/node_modules/@pome-sh/sdk/package.json +2 -2
  31. package/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +6 -0
  32. package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +2 -0
  33. package/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +14 -0
  34. package/node_modules/@pome-sh/shared-types/dist/recorder-events.js +40 -0
  35. package/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +1 -1
  36. package/node_modules/@pome-sh/shared-types/package.json +1 -1
  37. package/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
  38. package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
  39. package/node_modules/@pome-sh/twin-github/dist/src/check-params.d.ts +1 -0
  40. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js +17 -0
  41. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js.map +1 -1
  42. package/node_modules/@pome-sh/twin-github/dist/src/check-tape.d.ts +3 -0
  43. package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js +77 -0
  44. package/node_modules/@pome-sh/twin-github/dist/src/check-tape.js.map +1 -1
  45. package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +3 -1
  46. package/node_modules/@pome-sh/twin-github/dist/src/checks.js +4 -3
  47. package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -1
  48. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.d.ts +4 -4
  49. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.d.ts +5 -5
  50. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.d.ts +1 -1
  51. package/node_modules/@pome-sh/twin-github/dist/src/routes.js +16 -2
  52. package/node_modules/@pome-sh/twin-github/dist/src/routes.js.map +1 -1
  53. package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
  54. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +3 -3
  55. package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +22 -21
  56. package/node_modules/@pome-sh/twin-github/dist/src/tools.js +22 -0
  57. package/node_modules/@pome-sh/twin-github/dist/src/tools.js.map +1 -1
  58. package/node_modules/@pome-sh/twin-github/package.json +3 -3
  59. package/node_modules/@pome-sh/twin-stripe/dist/src/idempotency.js +6 -0
  60. package/node_modules/@pome-sh/twin-stripe/dist/src/idempotency.js.map +1 -1
  61. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js +9 -1
  62. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js.map +1 -1
  63. package/node_modules/@pome-sh/twin-stripe/dist/src/seed.d.ts +2 -2
  64. package/node_modules/@pome-sh/twin-stripe/dist/src/session.d.ts +3 -0
  65. package/node_modules/@pome-sh/twin-stripe/dist/src/session.js +72 -0
  66. package/node_modules/@pome-sh/twin-stripe/dist/src/session.js.map +1 -1
  67. package/node_modules/@pome-sh/twin-stripe/dist/src/twin.js +5 -1
  68. package/node_modules/@pome-sh/twin-stripe/dist/src/twin.js.map +1 -1
  69. package/node_modules/@pome-sh/twin-stripe/package.json +4 -4
  70. package/package.json +5 -5
  71. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -35
  72. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -103
  73. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -1
  74. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -100
  75. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +0 -262
  76. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -1
  77. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -7
  78. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +0 -14
  79. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -1
  80. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -44
  81. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +0 -113
  82. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +0 -1
  83. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -24
  84. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +0 -61
  85. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -1
  86. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -43
  87. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -160
  88. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -1
  89. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -121
  90. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -204
  91. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -1
  92. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -8
  93. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -39
  94. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -1
  95. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -372
  96. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +0 -139
  97. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +0 -1
  98. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -10
  99. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -221
  100. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -1
  101. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -61
  102. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +0 -123
  103. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -1
  104. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -120
  105. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +0 -368
  106. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -1
  107. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -1
  108. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +0 -3
  109. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -1
  110. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -54
  111. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -181
  112. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -1
  113. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -46
  114. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +0 -394
  115. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +0 -1
  116. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -8
  117. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -22
  118. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -1
  119. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +0 -54
  120. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -39
  121. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/errors.js +0 -33
  122. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -1
  123. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -254
  124. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -122
  125. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -1
  126. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -175
  127. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -182
  128. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -1
  129. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -90
  130. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/identity.js +0 -72
  131. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -1
  132. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -28
  133. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.js +0 -35
  134. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -1
  135. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -31
  136. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -76
  137. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -1
  138. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -331
  139. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -33
  140. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -1
  141. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -65
  142. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -455
  143. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -1
  144. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -39
  145. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -47
  146. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -1
  147. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -25
  148. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -27
  149. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -1
  150. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -100
  151. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -193
  152. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -1
  153. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -64
  154. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -112
  155. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -1
  156. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -26
  157. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -61
  158. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -1
  159. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -42
  160. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -104
  161. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -1
  162. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -57
  163. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -102
  164. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -1
  165. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -134
  166. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -152
  167. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -1
  168. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -480
  169. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -270
  170. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -1
  171. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -2
  172. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -152
  173. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -1
  174. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -257
  175. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.js +0 -335
  176. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
  177. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -208
  178. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/run.js +0 -170
  179. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -1
  180. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -14
  181. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -46
  182. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -1
  183. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -1006
  184. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -263
  185. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -1
  186. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -53
  187. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -51
  188. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -1
  189. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -80
  190. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -98
  191. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -1
  192. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -859
  193. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task.js +0 -60
  194. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -1
  195. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -68
  196. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/package.json +0 -55
  197. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/shared-types/trace-contract.json +0 -41
@@ -6,8 +6,80 @@
6
6
  // middleware settles payments by calling the twin's REST API over HTTP) —
7
7
  // the standalone server passes `http://127.0.0.1:<port>`, the CLI's
8
8
  // in-process harness passes its bound URL.
9
+ import { recordedRequestHeaders } from "@pome-sh/sdk/server";
9
10
  import { paymentMiddleware } from "./x402.js";
11
+ // F-1125 — record the gated exchange, whoever answered it.
12
+ //
13
+ // The x402 legs used to reach the tape not at all. The payment middleware
14
+ // answers every challenge leg itself and returns BEFORE `next()`, so the route
15
+ // handler — the only thing a `recorder.handle()` wrapper could have covered —
16
+ // never ran; and the protected resource was registered as a bare handler
17
+ // anyway. An unpaid attempt therefore left no trace: `state_final.json` is
18
+ // identical whether the agent paid, failed to pay, or never tried, and a
19
+ // negative criterion graded over that empty tape is the free pass D4 forbids.
20
+ //
21
+ // Recording the RESPONSE rather than instrumenting the middleware's eight exit
22
+ // points keeps x402's protocol logic untouched and puts on the tape exactly
23
+ // what the client received, which is what `The retry includes X-PAYMENT and
24
+ // returns 200` asks about.
25
+ //
26
+ // The middleware's own settlement calls (`POST /v1/payment_intents`,
27
+ // `simulate_crypto_deposit`) travel over HTTP back into this twin, so they are
28
+ // recorded separately by the REST routes that serve them, with their own state
29
+ // deltas. That is why this row is `state_mutation: false`: it would otherwise
30
+ // double-count mutations the tape already carries.
31
+ function recordGatedExchange(recorder, runId) {
32
+ return async (c, next) => {
33
+ const started = Date.now();
34
+ await next();
35
+ // `c.res.clone()` — reading the live body would consume the stream the
36
+ // client is still owed.
37
+ let responseBody = null;
38
+ try {
39
+ responseBody = await c.res.clone().json();
40
+ }
41
+ catch {
42
+ responseBody = null;
43
+ }
44
+ const status = c.res.status;
45
+ recorder.record({
46
+ ts: new Date().toISOString(),
47
+ run_id: runId,
48
+ twin: "stripe",
49
+ request_id: `req_${crypto.randomUUID()}`,
50
+ correlation_id: c.req.header("x-pome-correlation-id") ?? `req_${crypto.randomUUID()}`,
51
+ task_step_id: c.req.header("x-pome-scenario-step-id") ?? null,
52
+ scenario_step_id: c.req.header("x-pome-scenario-step-id") ?? null,
53
+ step_id: null,
54
+ tool_call_id: null,
55
+ method: c.req.method,
56
+ path: new URL(c.req.url).pathname,
57
+ request_body: null,
58
+ request_headers: recordedRequestHeaders(c),
59
+ // No MCP counterpart — x402 is a wire protocol, not a twin action.
60
+ tool: null,
61
+ status,
62
+ response_body: responseBody,
63
+ latency_ms: Date.now() - started,
64
+ fidelity: "semantic",
65
+ state_mutation: false,
66
+ state_delta: null,
67
+ error: status >= 400 ? x402Error(responseBody) : null,
68
+ });
69
+ };
70
+ }
71
+ function x402Error(body) {
72
+ if (body && typeof body === "object" && "error" in body) {
73
+ const message = body.error;
74
+ if (typeof message === "string")
75
+ return message;
76
+ }
77
+ return "payment required";
78
+ }
10
79
  export function registerX402Routes(session, opts) {
80
+ // Scoped to the gated prefix: a session-wide `use` would double-record every
81
+ // REST route, which already records itself through `recorder.handle`.
82
+ session.use("/x402/*", recordGatedExchange(opts.recorder, opts.runId));
11
83
  session.use(paymentMiddleware({
12
84
  "GET /x402/protected-resource": {
13
85
  accepts: [
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,kEAAkE;AAClE,0EAA0E;AAC1E,oEAAoE;AACpE,2CAA2C;AAI3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAM9C,MAAM,UAAU,kBAAkB,CAAC,OAAa,EAAE,IAA+B;IAC/E,OAAO,CAAC,GAAG,CACT,iBAAiB,CACf;QACE,8BAA8B,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,MAAM,EAAE,OAAO;oBACf,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,cAAc;oBACvB,WAAW,EAAE,kDAAkD;iBAChE;aACF;YACD,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,kBAAkB;SAC7B;KACF,EACD;QACE,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAgC,CAAC;YAC7D,OAAO,IAAI,EAAE,GAAG,IAAI,SAAS,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACpF,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;KACF,CACF,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,IAAI,CAAC;QACL,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,gCAAgC;QAC1C,OAAO,EAAE,sCAAsC;KAChD,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -155,7 +155,11 @@ export function createStripeTwinDefinition(opts) {
155
155
  opts.extendRoutes?.(app, ctx);
156
156
  registerStripeRoutes(app, ctx.domain, ctx.recorder, ctx.runId);
157
157
  if (opts.twinBaseUrl) {
158
- registerX402Routes(app, { twinBaseUrl: opts.twinBaseUrl });
158
+ registerX402Routes(app, {
159
+ twinBaseUrl: opts.twinBaseUrl,
160
+ recorder: ctx.recorder,
161
+ runId: ctx.runId,
162
+ });
159
163
  }
160
164
  },
161
165
  // Account-scoped state export (F1): two sessions sharing a DB see
@@ -1 +1 @@
1
- {"version":3,"file":"twin.js","sourceRoot":"","sources":["../../src/twin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"twin.js","sourceRoot":"","sources":["../../src/twin.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/twin-stripe",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "description": "Deterministic test double for Stripe x402 machine payments — stateful clone agents can drive without burning sandbox quota or real chain gas.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -53,9 +53,9 @@
53
53
  "license": "Apache-2.0",
54
54
  "dependencies": {
55
55
  "@hono/node-server": "^2.0.10",
56
- "@pome-sh/sdk": "0.5.1",
57
- "@pome-sh/shared-types": "0.12.0",
58
- "hono": "^4.12.27",
56
+ "@pome-sh/sdk": "0.9.0",
57
+ "@pome-sh/shared-types": "0.13.0",
58
+ "hono": "^4.12.31",
59
59
  "zod": "^4.1.13"
60
60
  },
61
61
  "engines": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pome-sh/cli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "Digital-twin testing for AI agents — run tasks against resettable local or hosted twins and record tool-call traces for evaluation on pome.sh.",
5
5
  "keywords": [
6
6
  "ai",
@@ -65,13 +65,13 @@
65
65
  "@anthropic-ai/sdk": "^0.110.0",
66
66
  "@hono/node-server": "^2.0.10",
67
67
  "@openrouter/ai-sdk-provider": "^3.0.0",
68
- "@pome-sh/sdk": "0.8.0",
69
- "@pome-sh/shared-types": "0.12.2",
68
+ "@pome-sh/sdk": "0.9.0",
69
+ "@pome-sh/shared-types": "0.13.0",
70
70
  "@pome-sh/twin-gmail": "0.2.0",
71
- "@pome-sh/twin-github": "0.5.0",
71
+ "@pome-sh/twin-github": "0.6.0",
72
72
  "@pome-sh/twin-linear": "0.1.0",
73
73
  "@pome-sh/twin-slack": "0.2.2",
74
- "@pome-sh/twin-stripe": "0.2.5",
74
+ "@pome-sh/twin-stripe": "0.3.0",
75
75
  "ai": "^7.0.18",
76
76
  "commander": "^15.0.0",
77
77
  "hono": "^4.10.7",
@@ -1,35 +0,0 @@
1
- import type { Context, MiddlewareHandler } from "hono";
2
- /** Context variable consulted first by getClientIp(). */
3
- export declare const CLIENT_IP_VAR = "pomeClientIp";
4
- /**
5
- * Explicitly record the peer address for this request. Alternate serving
6
- * bridges (or tests) call this from an upstream middleware so the gate never
7
- * reaches into runtime-private internals.
8
- *
9
- * SECURITY: the value passed here MUST be the transport-level peer address
10
- * (the socket's remote address as reported by the serving bridge). It takes
11
- * precedence over getConnInfo, so deriving it from any request-controlled
12
- * input — X-Forwarded-For or any other client-supplied header — would make
13
- * the loopback-only admin gate spoofable by whoever sets that header. If you
14
- * are behind a reverse proxy, use TWIN_ADMIN_TOKEN instead of trying to
15
- * recover the "real" client IP.
16
- */
17
- export declare function setClientIp(c: Context, ip: string): void;
18
- /**
19
- * Runtime-neutral client-IP accessor (FDRS-587). Resolution order:
20
- * 1. Explicit override set via setClientIp() (alternate bridges / tests).
21
- * 2. The node serving bridge's official getConnInfo helper.
22
- * 3. undefined — no live socket (e.g. app.request() in-process tests).
23
- */
24
- export declare function getClientIp(c: Context): Promise<string | undefined>;
25
- export declare function isLoopbackAddress(remote: string): boolean;
26
- export interface AdminGateOptions {
27
- /** 403 response factory so each twin keeps its own error envelope. */
28
- forbidden?: () => Response;
29
- }
30
- /**
31
- * Admin endpoint protection shared by every twin (FDRS-616). Each twin's
32
- * auth.ts wraps this with its own `forbidden` envelope. Semantics are
33
- * identical to the per-twin requireAdminAuth() copies this replaces.
34
- */
35
- export declare function createAdminGate(options?: AdminGateOptions): MiddlewareHandler;
@@ -1,103 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- // Shared admin-endpoint gate (FDRS-587 / FDRS-616). First-party twins import
3
- // this through `@pome-sh/sdk/server`; do not copy this file into a twin package.
4
- //
5
- // Tiered policy (semantics unchanged from the per-twin copies it replaces):
6
- // 1. TWIN_ADMIN_TOKEN set → require X-Admin-Token to match (timing-safe).
7
- // 2. TWIN_ADMIN_TOKEN unset + client IP known → allow only loopback.
8
- // 3. TWIN_ADMIN_TOKEN unset + client IP unknown → deny in production,
9
- // allow otherwise (accepted fail-open for in-process test harnesses).
10
- import { timingSafeEqual } from "node:crypto";
11
- /** Context variable consulted first by getClientIp(). */
12
- export const CLIENT_IP_VAR = "pomeClientIp";
13
- let nodeGetConnInfo;
14
- // Lazily import the node bridge's official ConnInfo helper. Dynamic because
15
- // @pome-sh/sdk declares @hono/node-server as an *optional* peer dependency —
16
- // a static import would crash consumers that never bind a Node socket.
17
- // Works with both @hono/node-server v1 and v2 (same subpath + signature).
18
- function loadNodeGetConnInfo() {
19
- nodeGetConnInfo ??= import("@hono/node-server/conninfo").then((mod) => mod.getConnInfo, () => undefined);
20
- return nodeGetConnInfo;
21
- }
22
- /**
23
- * Explicitly record the peer address for this request. Alternate serving
24
- * bridges (or tests) call this from an upstream middleware so the gate never
25
- * reaches into runtime-private internals.
26
- *
27
- * SECURITY: the value passed here MUST be the transport-level peer address
28
- * (the socket's remote address as reported by the serving bridge). It takes
29
- * precedence over getConnInfo, so deriving it from any request-controlled
30
- * input — X-Forwarded-For or any other client-supplied header — would make
31
- * the loopback-only admin gate spoofable by whoever sets that header. If you
32
- * are behind a reverse proxy, use TWIN_ADMIN_TOKEN instead of trying to
33
- * recover the "real" client IP.
34
- */
35
- export function setClientIp(c, ip) {
36
- c.set(CLIENT_IP_VAR, ip);
37
- }
38
- /**
39
- * Runtime-neutral client-IP accessor (FDRS-587). Resolution order:
40
- * 1. Explicit override set via setClientIp() (alternate bridges / tests).
41
- * 2. The node serving bridge's official getConnInfo helper.
42
- * 3. undefined — no live socket (e.g. app.request() in-process tests).
43
- */
44
- export async function getClientIp(c) {
45
- const override = c.get(CLIENT_IP_VAR);
46
- if (typeof override === "string" && override.length > 0)
47
- return override;
48
- const getConnInfo = await loadNodeGetConnInfo();
49
- if (!getConnInfo)
50
- return undefined;
51
- try {
52
- const address = getConnInfo(c).remote?.address;
53
- return typeof address === "string" && address.length > 0 ? address : undefined;
54
- }
55
- catch {
56
- // The helper throws when the context has no node socket behind it.
57
- return undefined;
58
- }
59
- }
60
- export function isLoopbackAddress(remote) {
61
- return (remote === "127.0.0.1" ||
62
- remote === "::1" ||
63
- remote === "::ffff:127.0.0.1" ||
64
- remote === "localhost");
65
- }
66
- function defaultForbidden() {
67
- return Response.json({ message: "Forbidden", documentation_url: "" }, { status: 403 });
68
- }
69
- /**
70
- * Admin endpoint protection shared by every twin (FDRS-616). Each twin's
71
- * auth.ts wraps this with its own `forbidden` envelope. Semantics are
72
- * identical to the per-twin requireAdminAuth() copies this replaces.
73
- */
74
- export function createAdminGate(options = {}) {
75
- const forbidden = options.forbidden ?? defaultForbidden;
76
- return async (c, next) => {
77
- const adminToken = process.env.TWIN_ADMIN_TOKEN;
78
- if (adminToken && adminToken.length > 0) {
79
- // Web Headers lookups are case-insensitive, so one lookup covers every
80
- // casing a client might send.
81
- const provided = c.req.header("X-Admin-Token");
82
- if (!provided)
83
- return forbidden();
84
- const a = Buffer.from(provided);
85
- const b = Buffer.from(adminToken);
86
- if (a.length !== b.length || !timingSafeEqual(a, b))
87
- return forbidden();
88
- await next();
89
- return;
90
- }
91
- const remote = await getClientIp(c);
92
- if (!remote) {
93
- if (process.env.NODE_ENV === "production")
94
- return forbidden();
95
- await next();
96
- return;
97
- }
98
- if (!isLoopbackAddress(remote))
99
- return forbidden();
100
- await next();
101
- };
102
- }
103
- //# sourceMappingURL=admin-gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-gate.js","sourceRoot":"","sources":["../src/admin-gate.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import type { Context, MiddlewareHandler } from "hono";
2
- /** `team_id` stamped on sessions authenticated by a provider-shaped token. */
3
- export declare const PROVIDER_SHAPED_TEAM_ID = "provider-shaped";
4
- export interface SessionClaims {
5
- sid: string;
6
- team_id: string;
7
- exp: number;
8
- [claim: string]: unknown;
9
- }
10
- /** Minimum session value; twins extend it via hooks (login, account_id, …). */
11
- export type SessionValue = {
12
- sid: string;
13
- } & Record<string, unknown>;
14
- export declare function resolveAuthSecret(): string;
15
- export interface ProviderTokenSpec {
16
- /** HMAC domain separator ("github" | "slack" | "stripe" | …). */
17
- provider: string;
18
- /** Declared token prefixes, e.g. ["xoxb-pome-", "xoxp-pome-"]. */
19
- prefixes: readonly string[];
20
- }
21
- export interface MintProviderTokenOptions {
22
- sid: string;
23
- /** Unix-seconds expiry. Omit for the legacy non-expiring shape. */
24
- exp?: number;
25
- /** Defaults to the spec's first declared prefix. */
26
- prefix?: string;
27
- secret?: string;
28
- }
29
- /**
30
- * Mint a provider-shaped token (F-712 row 10: minting lives in the engine;
31
- * CLI + cloud mint through it, parameterized by the twin's declared shape).
32
- */
33
- export declare function mintProviderToken(spec: ProviderTokenSpec, options: MintProviderTokenOptions): string;
34
- /**
35
- * Verify a provider-shaped token; returns the sid on success.
36
- *
37
- * The parse is right-anchored — the signature is always the trailing 22
38
- * base64url chars, the optional exp is a trailing all-digit segment of the
39
- * remainder — and the HMAC disambiguates the exp-vs-sid split. This fixes
40
- * the F-712 appendix bug once: the old per-twin `([^_]+)` regexes broke for
41
- * any sid whose base64url encoding contains `_` (the alphabet includes it).
42
- */
43
- export declare function verifyProviderToken(spec: ProviderTokenSpec, token: string, secret?: string): string | undefined;
44
- /** Why a request failed auth; rendered by the twin's `unauthorized` hook. */
45
- export type UnauthorizedKind = "no_token" | "invalid" | "expired";
46
- export interface AuthEnvelope {
47
- status: number;
48
- body: unknown;
49
- }
50
- /** Extra token location (F-712 row 3). Returns the token or undefined. */
51
- export type TokenResolver = (c: Context) => string | undefined | Promise<string | undefined>;
52
- /** Accept `?<param>=<token>` in the query string (real Slack behavior). */
53
- export declare function queryTokenResolver(param?: string): TokenResolver;
54
- /**
55
- * Accept `<param>=<token>` in a form-encoded POST body (real Slack
56
- * behavior). Only parses when the content type is form-encoded, so JSON
57
- * streaming reads downstream are never consumed here; `parseBody()` caches
58
- * on the Hono context, so downstream handlers see the same object.
59
- */
60
- export declare function formTokenResolver(param?: string): TokenResolver;
61
- export interface BearerAuthOptions {
62
- /** Row 1: the twin's provider-shaped token declaration. */
63
- providerToken?: ProviderTokenSpec;
64
- /** Row 7: extra session fields for provider-shaped sessions. */
65
- providerSession?: (sid: string) => Record<string, unknown>;
66
- /** Row 3: extra token locations tried after the Authorization header. */
67
- tokenResolvers?: readonly TokenResolver[];
68
- /**
69
- * Row 4 pin: accept a prefix-less bearer and case-insensitive "bearer".
70
- * Default false (github/slack); stripe pins true. Flipping a twin is a
71
- * contract change (CONTRACT.md + suite, then a cloud consumer PR).
72
- */
73
- allowRawBearer?: boolean;
74
- /**
75
- * Row 9: when false, a request with no `:sid` path segment trusts the
76
- * bearer alone (stripe's root `/v1/*` SDK-compat mount). Default true.
77
- */
78
- requirePathSid?: boolean;
79
- /** Row 8: DB-backed credential lookup, consulted before provider/JWT. */
80
- resolveCredential?: (token: string, c: Context) => SessionValue | undefined | Promise<SessionValue | undefined>;
81
- /**
82
- * Rows 2 + 6: the twin's 401 envelope, keyed by failure classification.
83
- * `info.token` carries the presented credential so a twin can render
84
- * shape-dependent messages (stripe: api-key-shaped tokens answer
85
- * "Invalid API Key provided.", JWTs answer "Bad credentials").
86
- */
87
- unauthorized?: (kind: UnauthorizedKind, info?: {
88
- token?: string;
89
- }) => AuthEnvelope;
90
- /** Row 5 pin: the twin's sid-mismatch envelope (github/slack 401, stripe 403). */
91
- sidMismatch?: () => AuthEnvelope;
92
- /** Row 7: extra session fields derived from verified JWT claims. */
93
- sessionExtras?: (claims: SessionClaims) => Record<string, unknown>;
94
- }
95
- export declare function bearerAuth(options?: BearerAuthOptions): MiddlewareHandler;
96
- /**
97
- * Admin endpoint protection. Thin wrapper over the shared admin-gate module
98
- * (FDRS-587 / FDRS-616) using the default error envelope.
99
- */
100
- export declare function requireAdminAuth(): MiddlewareHandler;