@pome-sh/cli 0.1.0 → 0.2.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 (738) hide show
  1. package/README.md +5 -6
  2. package/dist/build-info.json +3 -3
  3. package/dist/src/cli/eval.js +26 -8
  4. package/dist/src/cli/init-sdk.d.ts +0 -3
  5. package/dist/src/cli/init-sdk.js +117 -24
  6. package/dist/src/cli/main.js +23 -69
  7. package/dist/src/cli/register.d.ts +9 -0
  8. package/dist/src/cli/register.js +51 -5
  9. package/dist/src/cli/session.d.ts +7 -1
  10. package/dist/src/cli/session.js +87 -27
  11. package/dist/src/demo/runDemo.js +3 -2
  12. package/dist/src/doctor/checks.js +2 -2
  13. package/dist/src/hosted/client.d.ts +41 -5
  14. package/dist/src/hosted/client.js +333 -19
  15. package/dist/src/hosted/errors.d.ts +11 -1
  16. package/dist/src/hosted/errors.js +8 -1
  17. package/dist/src/hosted/evalResultView.d.ts +2 -0
  18. package/dist/src/hosted/evalResultView.js +22 -0
  19. package/dist/src/hosted/uploadAndFinalize.d.ts +18 -1
  20. package/dist/src/hosted/uploadAndFinalize.js +51 -3
  21. package/dist/src/recorder/inspect.js +20 -2
  22. package/dist/src/runner/mergeAdapterSignals.js +2 -2
  23. package/dist/src/runner/ports.js +3 -0
  24. package/dist/src/runner/runScenario.d.ts +79 -2
  25. package/dist/src/runner/runScenario.js +94 -36
  26. package/dist/src/runner/runScenarioHosted.d.ts +37 -0
  27. package/dist/src/runner/runScenarioHosted.js +257 -58
  28. package/dist/src/runner/runTrialGroup.d.ts +1 -3
  29. package/dist/src/runner/runTrialGroup.js +1 -3
  30. package/dist/src/scenario/parseScenario.d.ts +5 -0
  31. package/dist/src/scenario/parseScenario.js +135 -8
  32. package/dist/src/scenario/scenarioSchema.d.ts +200 -3
  33. package/dist/src/scenario/scenarioSchema.js +12 -1
  34. package/dist/src/twin/twinHarness.d.ts +10 -0
  35. package/dist/src/twin/twinHarness.js +6 -2
  36. package/dist/src/twin/twinStart.d.ts +19 -0
  37. package/dist/src/twin/twinStart.js +156 -0
  38. package/node_modules/@pome-sh/sdk/dist/db.d.ts +4 -4
  39. package/node_modules/@pome-sh/sdk/dist/db.js +93 -25
  40. package/node_modules/@pome-sh/sdk/dist/db.js.map +1 -1
  41. package/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  42. package/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  43. package/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  44. package/node_modules/@pome-sh/sdk/dist/parity.d.ts +55 -0
  45. package/node_modules/@pome-sh/sdk/dist/parity.js +112 -0
  46. package/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  47. package/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +15 -0
  48. package/node_modules/@pome-sh/sdk/dist/server-helpers.js +96 -0
  49. package/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -1
  50. package/node_modules/@pome-sh/sdk/dist/server.d.ts +1 -1
  51. package/node_modules/@pome-sh/sdk/dist/server.js +9 -7
  52. package/node_modules/@pome-sh/sdk/dist/server.js.map +1 -1
  53. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/errors.d.ts +39 -0
  54. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/errors.js +33 -0
  55. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/errors.js.map +1 -0
  56. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/evaluator-hooks.d.ts +13 -0
  57. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/evaluator-hooks.js +6 -0
  58. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/evaluator-hooks.js.map +1 -0
  59. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +215 -0
  60. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +83 -0
  61. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +1 -0
  62. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +175 -0
  63. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/github-access-control.js +182 -0
  64. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +1 -0
  65. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/identity.d.ts +90 -0
  66. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/identity.js +72 -0
  67. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/identity.js.map +1 -0
  68. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/index.d.ts +27 -0
  69. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/index.js +34 -0
  70. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -0
  71. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +286 -0
  72. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +33 -0
  73. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +1 -0
  74. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +65 -0
  75. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +455 -0
  76. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +1 -0
  77. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +39 -0
  78. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +47 -0
  79. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +1 -0
  80. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +25 -0
  81. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/index.js +27 -0
  82. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +1 -0
  83. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +100 -0
  84. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +185 -0
  85. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +1 -0
  86. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +64 -0
  87. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +112 -0
  88. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +1 -0
  89. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +26 -0
  90. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/nano.js +61 -0
  91. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +1 -0
  92. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +42 -0
  93. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/project.js +96 -0
  94. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +1 -0
  95. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +51 -0
  96. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +74 -0
  97. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +1 -0
  98. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +134 -0
  99. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +152 -0
  100. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +1 -0
  101. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +418 -0
  102. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/recorder-events.js +234 -0
  103. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +1 -0
  104. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +2 -0
  105. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/redaction.js +152 -0
  106. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/redaction.js.map +1 -0
  107. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/rest.d.ts +198 -0
  108. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/rest.js +225 -0
  109. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
  110. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/run.d.ts +201 -0
  111. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/run.js +166 -0
  112. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/run.js.map +1 -0
  113. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +446 -0
  114. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/seed-state.js +167 -0
  115. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +1 -0
  116. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +53 -0
  117. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/sessions.js +51 -0
  118. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/sessions.js.map +1 -0
  119. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +66 -0
  120. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task-vocab.js +84 -0
  121. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +1 -0
  122. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task.d.ts +483 -0
  123. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task.js +60 -0
  124. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/dist/task.js.map +1 -0
  125. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/package.json +54 -0
  126. package/node_modules/@pome-sh/sdk/node_modules/@pome-sh/shared-types/trace-contract.json +41 -0
  127. package/node_modules/@pome-sh/sdk/package.json +7 -7
  128. package/node_modules/@pome-sh/shared-types/dist/errors.d.ts +39 -0
  129. package/node_modules/@pome-sh/shared-types/dist/errors.js +33 -0
  130. package/node_modules/@pome-sh/shared-types/dist/errors.js.map +1 -0
  131. package/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +252 -0
  132. package/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +122 -0
  133. package/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +1 -0
  134. package/node_modules/@pome-sh/shared-types/dist/identity.d.ts +90 -0
  135. package/node_modules/@pome-sh/shared-types/dist/identity.js +72 -0
  136. package/node_modules/@pome-sh/shared-types/dist/identity.js.map +1 -0
  137. package/node_modules/@pome-sh/shared-types/dist/index.d.ts +13 -1353
  138. package/node_modules/@pome-sh/shared-types/dist/index.js +14 -568
  139. package/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
  140. package/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +45 -0
  141. package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +8 -0
  142. package/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +1 -1
  143. package/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +7 -0
  144. package/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +1 -1
  145. package/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +62 -0
  146. package/node_modules/@pome-sh/shared-types/dist/recorder-events.js +36 -0
  147. package/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +1 -1
  148. package/node_modules/@pome-sh/shared-types/dist/rest.d.ts +245 -0
  149. package/node_modules/@pome-sh/shared-types/dist/rest.js +303 -0
  150. package/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
  151. package/node_modules/@pome-sh/shared-types/dist/run.d.ts +7 -0
  152. package/node_modules/@pome-sh/shared-types/dist/run.js +4 -0
  153. package/node_modules/@pome-sh/shared-types/dist/run.js.map +1 -1
  154. package/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +14 -0
  155. package/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +46 -0
  156. package/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +1 -0
  157. package/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +446 -0
  158. package/node_modules/@pome-sh/shared-types/dist/seed-state.js +167 -0
  159. package/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +1 -0
  160. package/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +53 -0
  161. package/node_modules/@pome-sh/shared-types/dist/sessions.js +51 -0
  162. package/node_modules/@pome-sh/shared-types/dist/sessions.js.map +1 -0
  163. package/node_modules/@pome-sh/shared-types/dist/task.d.ts +485 -0
  164. package/node_modules/@pome-sh/shared-types/dist/task.js +60 -0
  165. package/node_modules/@pome-sh/shared-types/dist/task.js.map +1 -0
  166. package/node_modules/@pome-sh/shared-types/package.json +2 -1
  167. package/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
  168. package/node_modules/@pome-sh/twin-github/FIDELITY.md +127 -67
  169. package/node_modules/@pome-sh/twin-github/README.md +5 -8
  170. package/node_modules/@pome-sh/twin-github/dist/examples/claude-github-agent.js +4 -20
  171. package/node_modules/@pome-sh/twin-github/dist/examples/claude-github-agent.js.map +1 -1
  172. package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
  173. package/node_modules/@pome-sh/twin-github/dist/src/domain.d.ts +141 -3
  174. package/node_modules/@pome-sh/twin-github/dist/src/domain.js +0 -0
  175. package/node_modules/@pome-sh/twin-github/dist/src/domain.js.map +1 -1
  176. package/node_modules/@pome-sh/twin-github/dist/src/routes.js +2 -0
  177. package/node_modules/@pome-sh/twin-github/dist/src/routes.js.map +1 -1
  178. package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
  179. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +2 -2
  180. package/node_modules/@pome-sh/twin-github/dist/src/server.js +7 -6
  181. package/node_modules/@pome-sh/twin-github/dist/src/server.js.map +1 -1
  182. package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +168 -18
  183. package/node_modules/@pome-sh/twin-github/dist/src/tools.js +23 -0
  184. package/node_modules/@pome-sh/twin-github/dist/src/tools.js.map +1 -1
  185. package/node_modules/@pome-sh/twin-github/fidelity.inventory.json +773 -0
  186. package/node_modules/@pome-sh/twin-github/package.json +5 -5
  187. package/node_modules/@pome-sh/twin-slack/FIDELITY.md +121 -35
  188. package/node_modules/@pome-sh/twin-slack/README.md +2 -6
  189. package/node_modules/@pome-sh/twin-slack/dist/scripts/fidelity-parity.js +92 -0
  190. package/node_modules/@pome-sh/twin-slack/dist/scripts/fidelity-parity.js.map +1 -0
  191. package/node_modules/@pome-sh/twin-slack/dist/scripts/smoke.js +3 -3
  192. package/node_modules/@pome-sh/twin-slack/dist/scripts/smoke.js.map +1 -1
  193. package/node_modules/@pome-sh/twin-slack/dist/scripts/validate-mcp.js +1 -1
  194. package/node_modules/@pome-sh/twin-slack/dist/scripts/validate-mcp.js.map +1 -1
  195. package/node_modules/@pome-sh/twin-slack/dist/src/server.js +7 -6
  196. package/node_modules/@pome-sh/twin-slack/dist/src/server.js.map +1 -1
  197. package/node_modules/@pome-sh/twin-slack/dist/src/tools.d.ts +30 -4
  198. package/node_modules/@pome-sh/twin-slack/dist/src/tools.js +48 -1
  199. package/node_modules/@pome-sh/twin-slack/dist/src/tools.js.map +1 -1
  200. package/node_modules/@pome-sh/twin-slack/fidelity.inventory.json +377 -0
  201. package/node_modules/@pome-sh/twin-slack/package.json +5 -5
  202. package/node_modules/@pome-sh/twin-stripe/FIDELITY.md +151 -50
  203. package/node_modules/@pome-sh/twin-stripe/README.md +44 -47
  204. package/node_modules/@pome-sh/twin-stripe/dist/scripts/fidelity-parity.js +186 -0
  205. package/node_modules/@pome-sh/twin-stripe/dist/scripts/fidelity-parity.js.map +1 -0
  206. package/node_modules/@pome-sh/twin-stripe/dist/scripts/smoke.js +8 -4
  207. package/node_modules/@pome-sh/twin-stripe/dist/scripts/smoke.js.map +1 -1
  208. package/node_modules/@pome-sh/twin-stripe/dist/src/db.js +26 -2
  209. package/node_modules/@pome-sh/twin-stripe/dist/src/db.js.map +1 -1
  210. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/billing.d.ts +101 -0
  211. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/billing.js +195 -0
  212. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/billing.js.map +1 -0
  213. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/charges.d.ts +15 -1
  214. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/charges.js +17 -5
  215. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/charges.js.map +1 -1
  216. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/customers.d.ts +47 -0
  217. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/customers.js +103 -0
  218. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/customers.js.map +1 -0
  219. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/events.d.ts +1 -1
  220. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/events.js.map +1 -1
  221. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/index.d.ts +6 -0
  222. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/index.js +3 -0
  223. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/index.js.map +1 -1
  224. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-intents.d.ts +61 -2
  225. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-intents.js +214 -52
  226. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-intents.js.map +1 -1
  227. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-methods.d.ts +45 -0
  228. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-methods.js +159 -0
  229. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/payment-methods.js.map +1 -0
  230. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/refunds.d.ts +6 -0
  231. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/refunds.js +16 -0
  232. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/refunds.js.map +1 -1
  233. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/schema.d.ts +1 -0
  234. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/schema.js +144 -1
  235. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/schema.js.map +1 -1
  236. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/stripe-domain.d.ts +420 -43
  237. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/stripe-domain.js +442 -13
  238. package/node_modules/@pome-sh/twin-stripe/dist/src/domain/stripe-domain.js.map +1 -1
  239. package/node_modules/@pome-sh/twin-stripe/dist/src/errors.d.ts +19 -0
  240. package/node_modules/@pome-sh/twin-stripe/dist/src/errors.js +15 -1
  241. package/node_modules/@pome-sh/twin-stripe/dist/src/errors.js.map +1 -1
  242. package/node_modules/@pome-sh/twin-stripe/dist/src/ids.d.ts +2 -0
  243. package/node_modules/@pome-sh/twin-stripe/dist/src/ids.js +2 -0
  244. package/node_modules/@pome-sh/twin-stripe/dist/src/ids.js.map +1 -1
  245. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.d.ts +8 -0
  246. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js +105 -1
  247. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/_helpers.js.map +1 -1
  248. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/billing.d.ts +4 -0
  249. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/billing.js +117 -0
  250. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/billing.js.map +1 -0
  251. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/customers.d.ts +4 -0
  252. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/customers.js +47 -0
  253. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/customers.js.map +1 -0
  254. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/index.js +6 -0
  255. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/index.js.map +1 -1
  256. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/payment-intents.js +28 -102
  257. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/payment-intents.js.map +1 -1
  258. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/payment-methods.d.ts +4 -0
  259. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/payment-methods.js +33 -0
  260. package/node_modules/@pome-sh/twin-stripe/dist/src/routes/payment-methods.js.map +1 -0
  261. package/node_modules/@pome-sh/twin-stripe/dist/src/seed.d.ts +10 -8
  262. package/node_modules/@pome-sh/twin-stripe/dist/src/seed.js +3 -2
  263. package/node_modules/@pome-sh/twin-stripe/dist/src/seed.js.map +1 -1
  264. package/node_modules/@pome-sh/twin-stripe/dist/src/serializers.d.ts +181 -21
  265. package/node_modules/@pome-sh/twin-stripe/dist/src/serializers.js +257 -34
  266. package/node_modules/@pome-sh/twin-stripe/dist/src/serializers.js.map +1 -1
  267. package/node_modules/@pome-sh/twin-stripe/dist/src/server.js +7 -6
  268. package/node_modules/@pome-sh/twin-stripe/dist/src/server.js.map +1 -1
  269. package/node_modules/@pome-sh/twin-stripe/dist/src/tools.d.ts +107 -5
  270. package/node_modules/@pome-sh/twin-stripe/dist/src/tools.js +139 -6
  271. package/node_modules/@pome-sh/twin-stripe/dist/src/tools.js.map +1 -1
  272. package/node_modules/@pome-sh/twin-stripe/dist/src/types.d.ts +73 -0
  273. package/node_modules/@pome-sh/twin-stripe/dist/src/upstream-types.d.ts +8 -0
  274. package/node_modules/@pome-sh/twin-stripe/dist/src/x402.js +6 -1
  275. package/node_modules/@pome-sh/twin-stripe/dist/src/x402.js.map +1 -1
  276. package/node_modules/@pome-sh/twin-stripe/fidelity.inventory.json +425 -0
  277. package/node_modules/@pome-sh/twin-stripe/package.json +5 -5
  278. package/package.json +9 -10
  279. package/skills/pome-setup/SKILL.md +1 -1
  280. package/dist/src/recorder/verdictArtifact.d.ts +0 -71
  281. package/dist/src/recorder/verdictArtifact.js +0 -207
  282. package/dist/src/score/view.d.ts +0 -38
  283. package/dist/src/score/view.js +0 -59
  284. package/dist/src/twin/github/app.d.ts +0 -10
  285. package/dist/src/twin/github/app.js +0 -316
  286. package/dist/src/twin/github/db/migrations.d.ts +0 -2
  287. package/dist/src/twin/github/db/migrations.js +0 -64
  288. package/dist/src/twin/github/db/openDatabase.d.ts +0 -2
  289. package/dist/src/twin/github/db/openDatabase.js +0 -13
  290. package/dist/src/twin/github/db/queries.d.ts +0 -77
  291. package/dist/src/twin/github/db/queries.js +0 -93
  292. package/dist/src/twin/github/domain/seed.d.ts +0 -74
  293. package/dist/src/twin/github/domain/seed.js +0 -104
  294. package/dist/src/twin/github/domain/serializers.d.ts +0 -113
  295. package/dist/src/twin/github/domain/serializers.js +0 -76
  296. package/dist/src/twin/github/types.d.ts +0 -66
  297. package/dist/src/twin/github/types.js +0 -1
  298. package/dist/src/twin-github/app.d.ts +0 -9
  299. package/dist/src/twin-github/app.js +0 -327
  300. package/dist/src/twin-github/auth.d.ts +0 -16
  301. package/dist/src/twin-github/auth.js +0 -142
  302. package/dist/src/twin-github/build-info.d.ts +0 -7
  303. package/dist/src/twin-github/build-info.js +0 -52
  304. package/dist/src/twin-github/db.d.ts +0 -4
  305. package/dist/src/twin-github/db.js +0 -362
  306. package/dist/src/twin-github/domain.d.ts +0 -1649
  307. package/dist/src/twin-github/domain.js +0 -957
  308. package/dist/src/twin-github/errors.d.ts +0 -14
  309. package/dist/src/twin-github/errors.js +0 -34
  310. package/dist/src/twin-github/index.d.ts +0 -9
  311. package/dist/src/twin-github/index.js +0 -7
  312. package/dist/src/twin-github/mcp.d.ts +0 -17
  313. package/dist/src/twin-github/mcp.js +0 -281
  314. package/dist/src/twin-github/recorder.d.ts +0 -2
  315. package/dist/src/twin-github/recorder.js +0 -29
  316. package/dist/src/twin-github/seed.d.ts +0 -74
  317. package/dist/src/twin-github/seed.js +0 -107
  318. package/dist/src/twin-github/serializers.d.ts +0 -449
  319. package/dist/src/twin-github/serializers.js +0 -429
  320. package/dist/src/twin-github/server.js +0 -34
  321. package/dist/src/twin-github/tools.d.ts +0 -1545
  322. package/dist/src/twin-github/tools.js +0 -347
  323. package/dist/src/twin-github/types.d.ts +0 -198
  324. package/dist/src/twin-github/unsupported-envelope.d.ts +0 -10
  325. package/dist/src/twin-github/unsupported-envelope.js +0 -29
  326. package/dist/src/twin-github/util.d.ts +0 -13
  327. package/dist/src/twin-github/util.js +0 -61
  328. package/dist/src/twin-slack/app.d.ts +0 -17
  329. package/dist/src/twin-slack/app.js +0 -683
  330. package/dist/src/twin-slack/auth.d.ts +0 -38
  331. package/dist/src/twin-slack/auth.js +0 -219
  332. package/dist/src/twin-slack/build-info.d.ts +0 -7
  333. package/dist/src/twin-slack/build-info.js +0 -9
  334. package/dist/src/twin-slack/db.d.ts +0 -4
  335. package/dist/src/twin-slack/db.js +0 -213
  336. package/dist/src/twin-slack/domain.d.ts +0 -236
  337. package/dist/src/twin-slack/domain.js +0 -1293
  338. package/dist/src/twin-slack/errors.d.ts +0 -16
  339. package/dist/src/twin-slack/errors.js +0 -60
  340. package/dist/src/twin-slack/index.d.ts +0 -8
  341. package/dist/src/twin-slack/index.js +0 -8
  342. package/dist/src/twin-slack/mcp.d.ts +0 -17
  343. package/dist/src/twin-slack/mcp.js +0 -226
  344. package/dist/src/twin-slack/recorder.d.ts +0 -2
  345. package/dist/src/twin-slack/recorder.js +0 -15
  346. package/dist/src/twin-slack/seed.d.ts +0 -49
  347. package/dist/src/twin-slack/seed.js +0 -139
  348. package/dist/src/twin-slack/serializers.d.ts +0 -141
  349. package/dist/src/twin-slack/serializers.js +0 -377
  350. package/dist/src/twin-slack/tools.d.ts +0 -97
  351. package/dist/src/twin-slack/tools.js +0 -171
  352. package/dist/src/twin-slack/types.d.ts +0 -164
  353. package/dist/src/twin-slack/types.js +0 -1
  354. package/dist/src/twin-slack/unsupported-envelope.d.ts +0 -12
  355. package/dist/src/twin-slack/unsupported-envelope.js +0 -61
  356. package/dist/src/twin-slack/upstream-types.d.ts +0 -19
  357. package/dist/src/twin-slack/upstream-types.js +0 -1
  358. package/dist/src/twin-slack/util.d.ts +0 -31
  359. package/dist/src/twin-slack/util.js +0 -136
  360. package/node_modules/base64-js/LICENSE +0 -21
  361. package/node_modules/base64-js/README.md +0 -34
  362. package/node_modules/base64-js/base64js.min.js +0 -1
  363. package/node_modules/base64-js/index.d.ts +0 -3
  364. package/node_modules/base64-js/index.js +0 -150
  365. package/node_modules/base64-js/package.json +0 -47
  366. package/node_modules/better-sqlite3/LICENSE +0 -21
  367. package/node_modules/better-sqlite3/README.md +0 -99
  368. package/node_modules/better-sqlite3/binding.gyp +0 -38
  369. package/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  370. package/node_modules/better-sqlite3/deps/common.gypi +0 -68
  371. package/node_modules/better-sqlite3/deps/copy.js +0 -31
  372. package/node_modules/better-sqlite3/deps/defines.gypi +0 -42
  373. package/node_modules/better-sqlite3/deps/download.sh +0 -123
  374. package/node_modules/better-sqlite3/deps/patches/1208.patch +0 -15
  375. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +0 -269395
  376. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +0 -14347
  377. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +0 -739
  378. package/node_modules/better-sqlite3/deps/sqlite3.gyp +0 -80
  379. package/node_modules/better-sqlite3/deps/test_extension.c +0 -21
  380. package/node_modules/better-sqlite3/lib/database.js +0 -90
  381. package/node_modules/better-sqlite3/lib/index.js +0 -3
  382. package/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
  383. package/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
  384. package/node_modules/better-sqlite3/lib/methods/function.js +0 -31
  385. package/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
  386. package/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
  387. package/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
  388. package/node_modules/better-sqlite3/lib/methods/table.js +0 -189
  389. package/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
  390. package/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
  391. package/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
  392. package/node_modules/better-sqlite3/lib/util.js +0 -12
  393. package/node_modules/better-sqlite3/package.json +0 -59
  394. package/node_modules/better-sqlite3/src/addon.cpp +0 -47
  395. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +0 -74
  396. package/node_modules/better-sqlite3/src/objects/backup.cpp +0 -120
  397. package/node_modules/better-sqlite3/src/objects/backup.hpp +0 -36
  398. package/node_modules/better-sqlite3/src/objects/database.cpp +0 -417
  399. package/node_modules/better-sqlite3/src/objects/database.hpp +0 -103
  400. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +0 -113
  401. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +0 -50
  402. package/node_modules/better-sqlite3/src/objects/statement.cpp +0 -383
  403. package/node_modules/better-sqlite3/src/objects/statement.hpp +0 -58
  404. package/node_modules/better-sqlite3/src/util/bind-map.cpp +0 -73
  405. package/node_modules/better-sqlite3/src/util/binder.cpp +0 -193
  406. package/node_modules/better-sqlite3/src/util/constants.cpp +0 -172
  407. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +0 -121
  408. package/node_modules/better-sqlite3/src/util/custom-function.cpp +0 -59
  409. package/node_modules/better-sqlite3/src/util/custom-table.cpp +0 -409
  410. package/node_modules/better-sqlite3/src/util/data-converter.cpp +0 -17
  411. package/node_modules/better-sqlite3/src/util/data.cpp +0 -194
  412. package/node_modules/better-sqlite3/src/util/helpers.cpp +0 -109
  413. package/node_modules/better-sqlite3/src/util/macros.cpp +0 -90
  414. package/node_modules/better-sqlite3/src/util/query-macros.cpp +0 -71
  415. package/node_modules/better-sqlite3/src/util/row-builder.cpp +0 -49
  416. package/node_modules/bindings/LICENSE.md +0 -22
  417. package/node_modules/bindings/README.md +0 -98
  418. package/node_modules/bindings/bindings.js +0 -221
  419. package/node_modules/bindings/package.json +0 -28
  420. package/node_modules/bl/.travis.yml +0 -17
  421. package/node_modules/bl/BufferList.js +0 -396
  422. package/node_modules/bl/LICENSE.md +0 -13
  423. package/node_modules/bl/README.md +0 -247
  424. package/node_modules/bl/bl.js +0 -84
  425. package/node_modules/bl/package.json +0 -37
  426. package/node_modules/bl/test/convert.js +0 -21
  427. package/node_modules/bl/test/indexOf.js +0 -492
  428. package/node_modules/bl/test/isBufferList.js +0 -32
  429. package/node_modules/bl/test/test.js +0 -869
  430. package/node_modules/buffer/AUTHORS.md +0 -70
  431. package/node_modules/buffer/LICENSE +0 -21
  432. package/node_modules/buffer/README.md +0 -410
  433. package/node_modules/buffer/index.d.ts +0 -186
  434. package/node_modules/buffer/index.js +0 -1817
  435. package/node_modules/buffer/package.json +0 -96
  436. package/node_modules/chownr/LICENSE +0 -15
  437. package/node_modules/chownr/README.md +0 -3
  438. package/node_modules/chownr/chownr.js +0 -167
  439. package/node_modules/chownr/package.json +0 -29
  440. package/node_modules/decompress-response/index.d.ts +0 -22
  441. package/node_modules/decompress-response/index.js +0 -58
  442. package/node_modules/decompress-response/license +0 -9
  443. package/node_modules/decompress-response/package.json +0 -56
  444. package/node_modules/decompress-response/readme.md +0 -48
  445. package/node_modules/deep-extend/CHANGELOG.md +0 -46
  446. package/node_modules/deep-extend/LICENSE +0 -20
  447. package/node_modules/deep-extend/README.md +0 -91
  448. package/node_modules/deep-extend/index.js +0 -1
  449. package/node_modules/deep-extend/lib/deep-extend.js +0 -150
  450. package/node_modules/deep-extend/package.json +0 -62
  451. package/node_modules/detect-libc/LICENSE +0 -201
  452. package/node_modules/detect-libc/README.md +0 -163
  453. package/node_modules/detect-libc/index.d.ts +0 -14
  454. package/node_modules/detect-libc/lib/detect-libc.js +0 -313
  455. package/node_modules/detect-libc/lib/elf.js +0 -39
  456. package/node_modules/detect-libc/lib/filesystem.js +0 -51
  457. package/node_modules/detect-libc/lib/process.js +0 -24
  458. package/node_modules/detect-libc/package.json +0 -44
  459. package/node_modules/end-of-stream/LICENSE +0 -21
  460. package/node_modules/end-of-stream/README.md +0 -54
  461. package/node_modules/end-of-stream/index.js +0 -96
  462. package/node_modules/end-of-stream/package.json +0 -37
  463. package/node_modules/expand-template/.travis.yml +0 -6
  464. package/node_modules/expand-template/LICENSE +0 -21
  465. package/node_modules/expand-template/README.md +0 -43
  466. package/node_modules/expand-template/index.js +0 -26
  467. package/node_modules/expand-template/package.json +0 -29
  468. package/node_modules/expand-template/test.js +0 -67
  469. package/node_modules/file-uri-to-path/.npmignore +0 -1
  470. package/node_modules/file-uri-to-path/.travis.yml +0 -30
  471. package/node_modules/file-uri-to-path/History.md +0 -21
  472. package/node_modules/file-uri-to-path/LICENSE +0 -20
  473. package/node_modules/file-uri-to-path/README.md +0 -74
  474. package/node_modules/file-uri-to-path/index.d.ts +0 -2
  475. package/node_modules/file-uri-to-path/index.js +0 -66
  476. package/node_modules/file-uri-to-path/package.json +0 -32
  477. package/node_modules/file-uri-to-path/test/test.js +0 -24
  478. package/node_modules/file-uri-to-path/test/tests.json +0 -13
  479. package/node_modules/fs-constants/LICENSE +0 -21
  480. package/node_modules/fs-constants/README.md +0 -26
  481. package/node_modules/fs-constants/browser.js +0 -1
  482. package/node_modules/fs-constants/index.js +0 -1
  483. package/node_modules/fs-constants/package.json +0 -19
  484. package/node_modules/github-from-package/.travis.yml +0 -4
  485. package/node_modules/github-from-package/LICENSE +0 -18
  486. package/node_modules/github-from-package/example/package.json +0 -8
  487. package/node_modules/github-from-package/example/url.js +0 -3
  488. package/node_modules/github-from-package/index.js +0 -17
  489. package/node_modules/github-from-package/package.json +0 -30
  490. package/node_modules/github-from-package/readme.markdown +0 -53
  491. package/node_modules/github-from-package/test/a.json +0 -8
  492. package/node_modules/github-from-package/test/b.json +0 -5
  493. package/node_modules/github-from-package/test/c.json +0 -5
  494. package/node_modules/github-from-package/test/d.json +0 -7
  495. package/node_modules/github-from-package/test/e.json +0 -5
  496. package/node_modules/github-from-package/test/url.js +0 -19
  497. package/node_modules/ieee754/LICENSE +0 -11
  498. package/node_modules/ieee754/README.md +0 -51
  499. package/node_modules/ieee754/index.d.ts +0 -10
  500. package/node_modules/ieee754/index.js +0 -85
  501. package/node_modules/ieee754/package.json +0 -52
  502. package/node_modules/inherits/LICENSE +0 -16
  503. package/node_modules/inherits/README.md +0 -42
  504. package/node_modules/inherits/inherits.js +0 -9
  505. package/node_modules/inherits/inherits_browser.js +0 -27
  506. package/node_modules/inherits/package.json +0 -29
  507. package/node_modules/ini/LICENSE +0 -15
  508. package/node_modules/ini/README.md +0 -102
  509. package/node_modules/ini/ini.js +0 -206
  510. package/node_modules/ini/package.json +0 -33
  511. package/node_modules/mimic-response/index.d.ts +0 -17
  512. package/node_modules/mimic-response/index.js +0 -77
  513. package/node_modules/mimic-response/license +0 -9
  514. package/node_modules/mimic-response/package.json +0 -42
  515. package/node_modules/mimic-response/readme.md +0 -78
  516. package/node_modules/minimist/.eslintrc +0 -29
  517. package/node_modules/minimist/.github/FUNDING.yml +0 -12
  518. package/node_modules/minimist/.nycrc +0 -14
  519. package/node_modules/minimist/CHANGELOG.md +0 -298
  520. package/node_modules/minimist/LICENSE +0 -18
  521. package/node_modules/minimist/README.md +0 -121
  522. package/node_modules/minimist/example/parse.js +0 -4
  523. package/node_modules/minimist/index.js +0 -263
  524. package/node_modules/minimist/package.json +0 -75
  525. package/node_modules/minimist/test/all_bool.js +0 -34
  526. package/node_modules/minimist/test/bool.js +0 -177
  527. package/node_modules/minimist/test/dash.js +0 -43
  528. package/node_modules/minimist/test/default_bool.js +0 -37
  529. package/node_modules/minimist/test/dotted.js +0 -24
  530. package/node_modules/minimist/test/kv_short.js +0 -32
  531. package/node_modules/minimist/test/long.js +0 -33
  532. package/node_modules/minimist/test/num.js +0 -38
  533. package/node_modules/minimist/test/parse.js +0 -209
  534. package/node_modules/minimist/test/parse_modified.js +0 -11
  535. package/node_modules/minimist/test/proto.js +0 -64
  536. package/node_modules/minimist/test/short.js +0 -69
  537. package/node_modules/minimist/test/stop_early.js +0 -17
  538. package/node_modules/minimist/test/unknown.js +0 -104
  539. package/node_modules/minimist/test/whitespace.js +0 -10
  540. package/node_modules/mkdirp-classic/LICENSE +0 -21
  541. package/node_modules/mkdirp-classic/README.md +0 -18
  542. package/node_modules/mkdirp-classic/index.js +0 -98
  543. package/node_modules/mkdirp-classic/package.json +0 -18
  544. package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +0 -31
  545. package/node_modules/napi-build-utils/LICENSE +0 -21
  546. package/node_modules/napi-build-utils/README.md +0 -52
  547. package/node_modules/napi-build-utils/index.js +0 -214
  548. package/node_modules/napi-build-utils/index.md +0 -0
  549. package/node_modules/napi-build-utils/package.json +0 -42
  550. package/node_modules/node-abi/LICENSE +0 -21
  551. package/node_modules/node-abi/README.md +0 -54
  552. package/node_modules/node-abi/abi_registry.json +0 -453
  553. package/node_modules/node-abi/index.js +0 -179
  554. package/node_modules/node-abi/package.json +0 -45
  555. package/node_modules/once/LICENSE +0 -15
  556. package/node_modules/once/README.md +0 -79
  557. package/node_modules/once/once.js +0 -42
  558. package/node_modules/once/package.json +0 -33
  559. package/node_modules/prebuild-install/CHANGELOG.md +0 -131
  560. package/node_modules/prebuild-install/CONTRIBUTING.md +0 -6
  561. package/node_modules/prebuild-install/LICENSE +0 -21
  562. package/node_modules/prebuild-install/README.md +0 -163
  563. package/node_modules/prebuild-install/asset.js +0 -44
  564. package/node_modules/prebuild-install/bin.js +0 -78
  565. package/node_modules/prebuild-install/download.js +0 -142
  566. package/node_modules/prebuild-install/error.js +0 -14
  567. package/node_modules/prebuild-install/help.txt +0 -16
  568. package/node_modules/prebuild-install/index.js +0 -1
  569. package/node_modules/prebuild-install/log.js +0 -33
  570. package/node_modules/prebuild-install/package.json +0 -67
  571. package/node_modules/prebuild-install/proxy.js +0 -35
  572. package/node_modules/prebuild-install/rc.js +0 -64
  573. package/node_modules/prebuild-install/util.js +0 -143
  574. package/node_modules/pump/.github/FUNDING.yml +0 -2
  575. package/node_modules/pump/.travis.yml +0 -5
  576. package/node_modules/pump/LICENSE +0 -21
  577. package/node_modules/pump/README.md +0 -74
  578. package/node_modules/pump/SECURITY.md +0 -5
  579. package/node_modules/pump/empty.js +0 -1
  580. package/node_modules/pump/index.js +0 -86
  581. package/node_modules/pump/package.json +0 -30
  582. package/node_modules/pump/test-browser.js +0 -66
  583. package/node_modules/pump/test-node.js +0 -53
  584. package/node_modules/rc/LICENSE.APACHE2 +0 -15
  585. package/node_modules/rc/LICENSE.BSD +0 -26
  586. package/node_modules/rc/LICENSE.MIT +0 -24
  587. package/node_modules/rc/README.md +0 -227
  588. package/node_modules/rc/browser.js +0 -7
  589. package/node_modules/rc/cli.js +0 -4
  590. package/node_modules/rc/index.js +0 -53
  591. package/node_modules/rc/lib/utils.js +0 -104
  592. package/node_modules/rc/package.json +0 -29
  593. package/node_modules/rc/test/ini.js +0 -16
  594. package/node_modules/rc/test/nested-env-vars.js +0 -50
  595. package/node_modules/rc/test/test.js +0 -59
  596. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  597. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  598. package/node_modules/readable-stream/LICENSE +0 -47
  599. package/node_modules/readable-stream/README.md +0 -106
  600. package/node_modules/readable-stream/errors-browser.js +0 -127
  601. package/node_modules/readable-stream/errors.js +0 -116
  602. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  603. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  604. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  605. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  606. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  607. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  608. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  609. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  610. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  611. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  612. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  613. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  614. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  615. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  616. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  617. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  618. package/node_modules/readable-stream/package.json +0 -68
  619. package/node_modules/readable-stream/readable-browser.js +0 -9
  620. package/node_modules/readable-stream/readable.js +0 -16
  621. package/node_modules/safe-buffer/LICENSE +0 -21
  622. package/node_modules/safe-buffer/README.md +0 -584
  623. package/node_modules/safe-buffer/index.d.ts +0 -187
  624. package/node_modules/safe-buffer/index.js +0 -65
  625. package/node_modules/safe-buffer/package.json +0 -51
  626. package/node_modules/semver/LICENSE +0 -15
  627. package/node_modules/semver/README.md +0 -680
  628. package/node_modules/semver/bin/semver.js +0 -195
  629. package/node_modules/semver/classes/comparator.js +0 -143
  630. package/node_modules/semver/classes/index.js +0 -7
  631. package/node_modules/semver/classes/range.js +0 -577
  632. package/node_modules/semver/classes/semver.js +0 -350
  633. package/node_modules/semver/functions/clean.js +0 -8
  634. package/node_modules/semver/functions/cmp.js +0 -54
  635. package/node_modules/semver/functions/coerce.js +0 -62
  636. package/node_modules/semver/functions/compare-build.js +0 -9
  637. package/node_modules/semver/functions/compare-loose.js +0 -5
  638. package/node_modules/semver/functions/compare.js +0 -7
  639. package/node_modules/semver/functions/diff.js +0 -60
  640. package/node_modules/semver/functions/eq.js +0 -5
  641. package/node_modules/semver/functions/gt.js +0 -5
  642. package/node_modules/semver/functions/gte.js +0 -5
  643. package/node_modules/semver/functions/inc.js +0 -21
  644. package/node_modules/semver/functions/lt.js +0 -5
  645. package/node_modules/semver/functions/lte.js +0 -5
  646. package/node_modules/semver/functions/major.js +0 -5
  647. package/node_modules/semver/functions/minor.js +0 -5
  648. package/node_modules/semver/functions/neq.js +0 -5
  649. package/node_modules/semver/functions/parse.js +0 -18
  650. package/node_modules/semver/functions/patch.js +0 -5
  651. package/node_modules/semver/functions/prerelease.js +0 -8
  652. package/node_modules/semver/functions/rcompare.js +0 -5
  653. package/node_modules/semver/functions/rsort.js +0 -5
  654. package/node_modules/semver/functions/satisfies.js +0 -12
  655. package/node_modules/semver/functions/sort.js +0 -5
  656. package/node_modules/semver/functions/truncate.js +0 -48
  657. package/node_modules/semver/functions/valid.js +0 -8
  658. package/node_modules/semver/index.js +0 -93
  659. package/node_modules/semver/internal/constants.js +0 -37
  660. package/node_modules/semver/internal/debug.js +0 -11
  661. package/node_modules/semver/internal/identifiers.js +0 -29
  662. package/node_modules/semver/internal/lrucache.js +0 -42
  663. package/node_modules/semver/internal/parse-options.js +0 -17
  664. package/node_modules/semver/internal/re.js +0 -223
  665. package/node_modules/semver/package.json +0 -78
  666. package/node_modules/semver/preload.js +0 -4
  667. package/node_modules/semver/range.bnf +0 -17
  668. package/node_modules/semver/ranges/gtr.js +0 -6
  669. package/node_modules/semver/ranges/intersects.js +0 -9
  670. package/node_modules/semver/ranges/ltr.js +0 -6
  671. package/node_modules/semver/ranges/max-satisfying.js +0 -27
  672. package/node_modules/semver/ranges/min-satisfying.js +0 -26
  673. package/node_modules/semver/ranges/min-version.js +0 -63
  674. package/node_modules/semver/ranges/outside.js +0 -82
  675. package/node_modules/semver/ranges/simplify.js +0 -49
  676. package/node_modules/semver/ranges/subset.js +0 -249
  677. package/node_modules/semver/ranges/to-comparators.js +0 -10
  678. package/node_modules/semver/ranges/valid.js +0 -13
  679. package/node_modules/simple-concat/.travis.yml +0 -3
  680. package/node_modules/simple-concat/LICENSE +0 -20
  681. package/node_modules/simple-concat/README.md +0 -44
  682. package/node_modules/simple-concat/index.js +0 -15
  683. package/node_modules/simple-concat/package.json +0 -47
  684. package/node_modules/simple-concat/test/basic.js +0 -41
  685. package/node_modules/simple-get/.github/dependabot.yml +0 -15
  686. package/node_modules/simple-get/.github/workflows/ci.yml +0 -23
  687. package/node_modules/simple-get/LICENSE +0 -20
  688. package/node_modules/simple-get/README.md +0 -333
  689. package/node_modules/simple-get/index.js +0 -108
  690. package/node_modules/simple-get/package.json +0 -67
  691. package/node_modules/string_decoder/LICENSE +0 -48
  692. package/node_modules/string_decoder/README.md +0 -47
  693. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  694. package/node_modules/string_decoder/package.json +0 -34
  695. package/node_modules/strip-json-comments/index.js +0 -70
  696. package/node_modules/strip-json-comments/license +0 -21
  697. package/node_modules/strip-json-comments/package.json +0 -42
  698. package/node_modules/strip-json-comments/readme.md +0 -64
  699. package/node_modules/tar-fs/.travis.yml +0 -6
  700. package/node_modules/tar-fs/LICENSE +0 -21
  701. package/node_modules/tar-fs/README.md +0 -165
  702. package/node_modules/tar-fs/index.js +0 -392
  703. package/node_modules/tar-fs/package.json +0 -46
  704. package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  705. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  706. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  707. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  708. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  709. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  710. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  711. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  712. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  713. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  714. package/node_modules/tar-fs/test/index.js +0 -457
  715. package/node_modules/tar-stream/LICENSE +0 -21
  716. package/node_modules/tar-stream/README.md +0 -168
  717. package/node_modules/tar-stream/extract.js +0 -257
  718. package/node_modules/tar-stream/headers.js +0 -295
  719. package/node_modules/tar-stream/index.js +0 -2
  720. package/node_modules/tar-stream/pack.js +0 -255
  721. package/node_modules/tar-stream/package.json +0 -58
  722. package/node_modules/tar-stream/sandbox.js +0 -11
  723. package/node_modules/tunnel-agent/LICENSE +0 -55
  724. package/node_modules/tunnel-agent/README.md +0 -4
  725. package/node_modules/tunnel-agent/index.js +0 -244
  726. package/node_modules/tunnel-agent/package.json +0 -22
  727. package/node_modules/util-deprecate/History.md +0 -16
  728. package/node_modules/util-deprecate/LICENSE +0 -24
  729. package/node_modules/util-deprecate/README.md +0 -53
  730. package/node_modules/util-deprecate/browser.js +0 -67
  731. package/node_modules/util-deprecate/node.js +0 -6
  732. package/node_modules/util-deprecate/package.json +0 -27
  733. package/node_modules/wrappy/LICENSE +0 -15
  734. package/node_modules/wrappy/README.md +0 -36
  735. package/node_modules/wrappy/package.json +0 -29
  736. package/node_modules/wrappy/wrappy.js +0 -33
  737. /package/{dist/src/twin-github/server.d.ts → node_modules/@pome-sh/twin-slack/dist/scripts/fidelity-parity.d.ts} +0 -0
  738. /package/{dist/src/twin-github/types.js → node_modules/@pome-sh/twin-stripe/dist/scripts/fidelity-parity.d.ts} +0 -0
@@ -1,683 +0,0 @@
1
- import { Hono } from "hono";
2
- import { ZodError } from "zod";
3
- import { bearerAuth, requireAdminAuth } from "./auth.js";
4
- import { twinBuildInfo } from "./build-info.js";
5
- import { openSlackTwinDatabase } from "./db.js";
6
- import { SlackDomain } from "./domain.js";
7
- import { TwinError, twinErrorFromSqliteConstraint } from "./errors.js";
8
- import { handleMcpRequest, mcpMethodNotAllowed } from "./mcp.js";
9
- import { defaultSeedState } from "./seed.js";
10
- import { listTools, executeTool, isMutatingTool, toolDefinitions } from "./tools.js";
11
- import { slackError, slackOk } from "./serializers.js";
12
- import { unsupportedEnvelope } from "./unsupported-envelope.js";
13
- import { asBool, asNumber, asString, asOptionalString, nowIso, parseFormOrJson, requestId } from "./util.js";
14
- import { redactSecrets } from "../recorder/redaction.js";
15
- export function createSlackTwinApp(opts = {}) {
16
- const db = opts.db ?? openSlackTwinDatabase(":memory:");
17
- const domain = opts.domain ?? new SlackDomain(db);
18
- const recorder = opts.recorder;
19
- const runId = opts.runId ?? "spawn";
20
- const app = new Hono();
21
- // Root health (no auth).
22
- app.get("/healthz", (c) => {
23
- return c.json({
24
- ok: true,
25
- twin: "slack",
26
- implementation: "slack_clone",
27
- tools: toolDefinitions.length,
28
- runtime: twinBuildInfo(),
29
- });
30
- });
31
- // Admin (localhost-only).
32
- const admin = new Hono();
33
- admin.use("*", requireAdminAuth());
34
- admin.post("/reset", async (c) => {
35
- return handleAdmin(c, recorder, runId, "admin/reset", async () => {
36
- let delta = null;
37
- domain.resetToDefault(defaultSeedState, (d) => {
38
- delta = d;
39
- });
40
- return { ok: true, delta };
41
- });
42
- });
43
- admin.post("/seed", async (c) => {
44
- return handleAdmin(c, recorder, runId, "admin/seed", async () => {
45
- const body = await parseFormOrJson(c);
46
- let delta = null;
47
- domain.applySeed(body.seed ?? body, (d) => {
48
- delta = d;
49
- });
50
- return { ok: true, delta };
51
- });
52
- });
53
- app.route("/admin", admin);
54
- // Session-scoped routes — all require bearer JWT.
55
- const session = new Hono();
56
- session.use("*", bearerAuth());
57
- session.get("/healthz", (c) => c.json({ ok: true, sid: c.req.param("sid") }));
58
- session.get("/_pome/health", (c) => c.json({ ok: true, twin: "slack" }));
59
- session.get("/_pome/state", (c) => c.json(redactSecrets(domain.exportState())));
60
- session.get("/_pome/events", (c) => c.json(recorder ? recorder.events() : []));
61
- // MCP — JSON-RPC 2.0 streamable HTTP.
62
- session.post("/mcp", (c) => handleMcpRequest(c, { domain, recorder, runId }));
63
- session.get("/mcp", (c) => mcpMethodNotAllowed(c));
64
- session.delete("/mcp", (c) => mcpMethodNotAllowed(c));
65
- // Legacy tool listing + dispatch.
66
- session.get("/mcp/tools", (c) => c.json({ tools: listTools() }));
67
- session.post("/mcp/call", async (c) => {
68
- const body = await parseFormOrJson(c);
69
- const name = asOptionalString(body.tool ?? body.name);
70
- const args = (body.arguments ?? body.params ?? {});
71
- if (!name)
72
- return jsonSlackError(c, "invalid_arguments", 400);
73
- if (!toolDefinitions.some((t) => t.name === name))
74
- return jsonSlackError(c, "unknown_tool", 404);
75
- return handle(c, recorder, runId, name, async () => {
76
- let delta = null;
77
- const result = executeTool(domain, name, args, (d) => {
78
- delta = d;
79
- }, actorFrom(c));
80
- return { body: ensureOk(result), delta, mutation: isMutatingTool(name) };
81
- });
82
- });
83
- // ─────────────────────────────────────────────────────────────────────────
84
- // Auth
85
- // ─────────────────────────────────────────────────────────────────────────
86
- const handleAuthTest = async (c) => handle(c, recorder, runId, "auth.test", async () => {
87
- const result = domain.authTest(actorFrom(c));
88
- return { body: slackOk(result) };
89
- });
90
- session.get("/auth.test", handleAuthTest);
91
- session.post("/auth.test", handleAuthTest);
92
- // ─────────────────────────────────────────────────────────────────────────
93
- // Conversations
94
- // ─────────────────────────────────────────────────────────────────────────
95
- const handleConversationsList = async (c) => handle(c, recorder, runId, "conversations.list", async () => {
96
- const args = await readArgs(c);
97
- const result = domain.conversationsList({
98
- types: asOptionalString(args.types),
99
- exclude_archived: asBool(args.exclude_archived, false),
100
- limit: args.limit !== undefined ? asNumber(args.limit, 100) : undefined,
101
- cursor: asOptionalString(args.cursor),
102
- team_id: asOptionalString(args.team_id),
103
- });
104
- return { body: slackOk(result) };
105
- });
106
- session.get("/conversations.list", handleConversationsList);
107
- session.post("/conversations.list", handleConversationsList);
108
- const handleConversationsInfo = async (c) => handle(c, recorder, runId, "conversations.info", async () => {
109
- const args = await readArgs(c);
110
- const channel = asOptionalString(args.channel);
111
- if (!channel)
112
- throw new TwinError("channel_not_found", 400, "channel_not_found");
113
- const result = domain.conversationsInfo({
114
- channel,
115
- include_num_members: asBool(args.include_num_members, false),
116
- }, actorFrom(c));
117
- return { body: slackOk(result) };
118
- });
119
- session.get("/conversations.info", handleConversationsInfo);
120
- session.post("/conversations.info", handleConversationsInfo);
121
- session.post("/conversations.create", async (c) => handle(c, recorder, runId, "conversations.create", async () => {
122
- const args = await readArgs(c);
123
- let delta = null;
124
- const result = domain.conversationsCreate({
125
- name: asString(args.name),
126
- is_private: asBool(args.is_private, false),
127
- team_id: asOptionalString(args.team_id),
128
- }, actorFrom(c), (d) => {
129
- delta = d;
130
- });
131
- return { body: slackOk(result), delta, mutation: true };
132
- }));
133
- session.post("/conversations.archive", async (c) => handle(c, recorder, runId, "conversations.archive", async () => {
134
- const args = await readArgs(c);
135
- let delta = null;
136
- const result = domain.conversationsArchive({ channel: asString(args.channel) }, actorFrom(c), (d) => {
137
- delta = d;
138
- });
139
- return { body: slackOk(result), delta, mutation: true };
140
- }));
141
- session.post("/conversations.invite", async (c) => handle(c, recorder, runId, "conversations.invite", async () => {
142
- const args = await readArgs(c);
143
- let delta = null;
144
- const result = domain.conversationsInvite({ channel: asString(args.channel), users: asString(args.users) }, actorFrom(c), (d) => {
145
- delta = d;
146
- });
147
- return { body: slackOk(result), delta, mutation: true };
148
- }));
149
- session.post("/conversations.join", async (c) => handle(c, recorder, runId, "conversations.join", async () => {
150
- const args = await readArgs(c);
151
- let delta = null;
152
- const result = domain.conversationsJoin({ channel: asString(args.channel) }, actorFrom(c), (d) => {
153
- delta = d;
154
- });
155
- return { body: slackOk(result), delta, mutation: true };
156
- }));
157
- session.post("/conversations.leave", async (c) => handle(c, recorder, runId, "conversations.leave", async () => {
158
- const args = await readArgs(c);
159
- let delta = null;
160
- const result = domain.conversationsLeave({ channel: asString(args.channel) }, actorFrom(c), (d) => {
161
- delta = d;
162
- });
163
- return { body: slackOk(result), delta, mutation: true };
164
- }));
165
- session.post("/conversations.kick", async (c) => handle(c, recorder, runId, "conversations.kick", async () => {
166
- const args = await readArgs(c);
167
- let delta = null;
168
- const result = domain.conversationsKick({ channel: asString(args.channel), user: asString(args.user) }, actorFrom(c), (d) => {
169
- delta = d;
170
- });
171
- return { body: slackOk(result), delta, mutation: true };
172
- }));
173
- const handleConversationsMembers = async (c) => handle(c, recorder, runId, "conversations.members", async () => {
174
- const args = await readArgs(c);
175
- const result = domain.conversationsMembers({
176
- channel: asString(args.channel),
177
- limit: args.limit !== undefined ? asNumber(args.limit, 100) : undefined,
178
- cursor: asOptionalString(args.cursor),
179
- }, actorFrom(c));
180
- return { body: slackOk(result) };
181
- });
182
- session.get("/conversations.members", handleConversationsMembers);
183
- session.post("/conversations.members", handleConversationsMembers);
184
- const handleConversationsHistory = async (c) => handle(c, recorder, runId, "conversations.history", async () => {
185
- const args = await readArgs(c);
186
- const result = domain.conversationsHistory({
187
- channel: asString(args.channel),
188
- cursor: asOptionalString(args.cursor),
189
- inclusive: asBool(args.inclusive, false),
190
- latest: asOptionalString(args.latest),
191
- limit: args.limit !== undefined ? asNumber(args.limit, 100) : undefined,
192
- oldest: asOptionalString(args.oldest),
193
- }, actorFrom(c));
194
- return { body: slackOk(result) };
195
- });
196
- session.get("/conversations.history", handleConversationsHistory);
197
- session.post("/conversations.history", handleConversationsHistory);
198
- const handleConversationsReplies = async (c) => handle(c, recorder, runId, "conversations.replies", async () => {
199
- const args = await readArgs(c);
200
- const result = domain.conversationsReplies({
201
- channel: asString(args.channel),
202
- ts: asString(args.ts),
203
- cursor: asOptionalString(args.cursor),
204
- inclusive: asBool(args.inclusive, false),
205
- latest: asOptionalString(args.latest),
206
- limit: args.limit !== undefined ? asNumber(args.limit, 100) : undefined,
207
- oldest: asOptionalString(args.oldest),
208
- }, actorFrom(c));
209
- return { body: slackOk(result) };
210
- });
211
- session.get("/conversations.replies", handleConversationsReplies);
212
- session.post("/conversations.replies", handleConversationsReplies);
213
- session.post("/conversations.open", async (c) => handle(c, recorder, runId, "conversations.open", async () => {
214
- const args = await readArgs(c);
215
- let delta = null;
216
- const result = domain.conversationsOpen({
217
- users: asOptionalString(args.users),
218
- channel: asOptionalString(args.channel),
219
- return_im: asBool(args.return_im, false),
220
- }, actorFrom(c), (d) => {
221
- delta = d;
222
- });
223
- return { body: slackOk(result), delta, mutation: !result.already_open };
224
- }));
225
- // ─────────────────────────────────────────────────────────────────────────
226
- // Chat
227
- // ─────────────────────────────────────────────────────────────────────────
228
- session.post("/chat.postMessage", async (c) => handle(c, recorder, runId, "chat.postMessage", async () => {
229
- const args = await readArgs(c);
230
- let delta = null;
231
- const result = domain.chatPostMessage({
232
- channel: asString(args.channel),
233
- text: asOptionalString(args.text),
234
- blocks: asOptionalString(args.blocks),
235
- attachments: asOptionalString(args.attachments),
236
- thread_ts: asOptionalString(args.thread_ts),
237
- reply_broadcast: asBool(args.reply_broadcast, false),
238
- icon_emoji: asOptionalString(args.icon_emoji),
239
- icon_url: asOptionalString(args.icon_url),
240
- username: asOptionalString(args.username),
241
- as_user: asBool(args.as_user, false),
242
- }, actorFrom(c), (d) => {
243
- delta = d;
244
- });
245
- return { body: slackOk(result), delta, mutation: true };
246
- }));
247
- session.post("/chat.update", async (c) => handle(c, recorder, runId, "chat.update", async () => {
248
- const args = await readArgs(c);
249
- let delta = null;
250
- const result = domain.chatUpdate({
251
- channel: asString(args.channel),
252
- ts: asString(args.ts),
253
- text: asOptionalString(args.text),
254
- blocks: asOptionalString(args.blocks),
255
- attachments: asOptionalString(args.attachments),
256
- }, actorFrom(c), (d) => {
257
- delta = d;
258
- });
259
- return { body: slackOk(result), delta, mutation: true };
260
- }));
261
- session.post("/chat.delete", async (c) => handle(c, recorder, runId, "chat.delete", async () => {
262
- const args = await readArgs(c);
263
- let delta = null;
264
- const result = domain.chatDelete({ channel: asString(args.channel), ts: asString(args.ts) }, actorFrom(c), (d) => {
265
- delta = d;
266
- });
267
- return { body: slackOk(result), delta, mutation: true };
268
- }));
269
- session.post("/chat.scheduleMessage", async (c) => handle(c, recorder, runId, "chat.scheduleMessage", async () => {
270
- const args = await readArgs(c);
271
- let delta = null;
272
- const result = domain.chatScheduleMessage({
273
- channel: asString(args.channel),
274
- text: asString(args.text),
275
- post_at: asNumber(args.post_at, 0),
276
- thread_ts: asOptionalString(args.thread_ts),
277
- blocks: asOptionalString(args.blocks),
278
- }, actorFrom(c), (d) => {
279
- delta = d;
280
- });
281
- return { body: slackOk(result), delta, mutation: true };
282
- }));
283
- session.post("/chat.deleteScheduledMessage", async (c) => handle(c, recorder, runId, "chat.deleteScheduledMessage", async () => {
284
- const args = await readArgs(c);
285
- let delta = null;
286
- const result = domain.chatDeleteScheduledMessage({ channel: asString(args.channel), scheduled_message_id: asString(args.scheduled_message_id) }, actorFrom(c), (d) => {
287
- delta = d;
288
- });
289
- return { body: slackOk(result), delta, mutation: true };
290
- }));
291
- // ─────────────────────────────────────────────────────────────────────────
292
- // Reactions
293
- // ─────────────────────────────────────────────────────────────────────────
294
- session.post("/reactions.add", async (c) => handle(c, recorder, runId, "reactions.add", async () => {
295
- const args = await readArgs(c);
296
- let delta = null;
297
- const result = domain.reactionsAdd({
298
- channel: asString(args.channel),
299
- timestamp: asString(args.timestamp),
300
- name: asString(args.name),
301
- }, actorFrom(c), (d) => {
302
- delta = d;
303
- });
304
- return { body: slackOk(result), delta, mutation: true };
305
- }));
306
- session.post("/reactions.remove", async (c) => handle(c, recorder, runId, "reactions.remove", async () => {
307
- const args = await readArgs(c);
308
- let delta = null;
309
- const result = domain.reactionsRemove({
310
- channel: asString(args.channel),
311
- timestamp: asString(args.timestamp),
312
- name: asString(args.name),
313
- }, actorFrom(c), (d) => {
314
- delta = d;
315
- });
316
- return { body: slackOk(result), delta, mutation: true };
317
- }));
318
- const handleReactionsGet = async (c) => handle(c, recorder, runId, "reactions.get", async () => {
319
- const args = await readArgs(c);
320
- const result = domain.reactionsGet({
321
- channel: asString(args.channel),
322
- timestamp: asString(args.timestamp),
323
- full: asBool(args.full, false),
324
- }, actorFrom(c));
325
- return { body: slackOk(result) };
326
- });
327
- session.get("/reactions.get", handleReactionsGet);
328
- session.post("/reactions.get", handleReactionsGet);
329
- // ─────────────────────────────────────────────────────────────────────────
330
- // Users
331
- // ─────────────────────────────────────────────────────────────────────────
332
- const handleUsersList = async (c) => handle(c, recorder, runId, "users.list", async () => {
333
- const args = await readArgs(c);
334
- const result = domain.usersList({
335
- cursor: asOptionalString(args.cursor),
336
- limit: args.limit !== undefined ? asNumber(args.limit, 100) : undefined,
337
- include_locale: asBool(args.include_locale, false),
338
- team_id: asOptionalString(args.team_id),
339
- });
340
- return { body: slackOk(result) };
341
- });
342
- session.get("/users.list", handleUsersList);
343
- session.post("/users.list", handleUsersList);
344
- const handleUsersInfo = async (c) => handle(c, recorder, runId, "users.info", async () => {
345
- const args = await readArgs(c);
346
- const result = domain.usersInfo({
347
- user: asString(args.user),
348
- include_locale: asBool(args.include_locale, false),
349
- });
350
- return { body: slackOk(result) };
351
- });
352
- session.get("/users.info", handleUsersInfo);
353
- session.post("/users.info", handleUsersInfo);
354
- const handleUsersLookupByEmail = async (c) => handle(c, recorder, runId, "users.lookupByEmail", async () => {
355
- const args = await readArgs(c);
356
- const result = domain.usersLookupByEmail({ email: asString(args.email) });
357
- return { body: slackOk(result) };
358
- });
359
- session.get("/users.lookupByEmail", handleUsersLookupByEmail);
360
- session.post("/users.lookupByEmail", handleUsersLookupByEmail);
361
- const handleUsersProfileGet = async (c) => handle(c, recorder, runId, "users.profile.get", async () => {
362
- const args = await readArgs(c);
363
- const result = domain.usersProfileGet({
364
- user: asOptionalString(args.user),
365
- include_labels: asBool(args.include_labels, false),
366
- }, actorFrom(c));
367
- return { body: slackOk(result) };
368
- });
369
- session.get("/users.profile.get", handleUsersProfileGet);
370
- session.post("/users.profile.get", handleUsersProfileGet);
371
- session.post("/users.profile.set", async (c) => handle(c, recorder, runId, "users.profile.set", async () => {
372
- const args = await readArgs(c);
373
- let delta = null;
374
- const result = domain.usersProfileSet({
375
- user: asOptionalString(args.user),
376
- profile: asOptionalString(args.profile),
377
- name: asOptionalString(args.name),
378
- value: asOptionalString(args.value),
379
- }, actorFrom(c), (d) => {
380
- delta = d;
381
- });
382
- return { body: slackOk(result), delta, mutation: true };
383
- }));
384
- // ─────────────────────────────────────────────────────────────────────────
385
- // Pins
386
- // ─────────────────────────────────────────────────────────────────────────
387
- session.post("/pins.add", async (c) => handle(c, recorder, runId, "pins.add", async () => {
388
- const args = await readArgs(c);
389
- let delta = null;
390
- const result = domain.pinsAdd({ channel: asString(args.channel), timestamp: asString(args.timestamp) }, actorFrom(c), (d) => {
391
- delta = d;
392
- });
393
- return { body: slackOk(result), delta, mutation: true };
394
- }));
395
- session.post("/pins.remove", async (c) => handle(c, recorder, runId, "pins.remove", async () => {
396
- const args = await readArgs(c);
397
- let delta = null;
398
- const result = domain.pinsRemove({ channel: asString(args.channel), timestamp: asString(args.timestamp) }, actorFrom(c), (d) => {
399
- delta = d;
400
- });
401
- return { body: slackOk(result), delta, mutation: true };
402
- }));
403
- const handlePinsList = async (c) => handle(c, recorder, runId, "pins.list", async () => {
404
- const args = await readArgs(c);
405
- const result = domain.pinsList({ channel: asString(args.channel) }, actorFrom(c));
406
- return { body: slackOk(result) };
407
- });
408
- session.get("/pins.list", handlePinsList);
409
- session.post("/pins.list", handlePinsList);
410
- // ─────────────────────────────────────────────────────────────────────────
411
- // Search
412
- // ─────────────────────────────────────────────────────────────────────────
413
- const handleSearchMessages = async (c) => handle(c, recorder, runId, "search.messages", async () => {
414
- const args = await readArgs(c);
415
- const result = domain.searchMessages({
416
- query: asString(args.query),
417
- count: args.count !== undefined ? asNumber(args.count, 20) : undefined,
418
- page: args.page !== undefined ? asNumber(args.page, 1) : undefined,
419
- sort: asOptionalString(args.sort),
420
- sort_dir: asOptionalString(args.sort_dir),
421
- highlight: asBool(args.highlight, false),
422
- }, actorFrom(c));
423
- return { body: slackOk(result) };
424
- });
425
- session.get("/search.messages", handleSearchMessages);
426
- session.post("/search.messages", handleSearchMessages);
427
- // ─────────────────────────────────────────────────────────────────────────
428
- // Files (metadata-only)
429
- // ─────────────────────────────────────────────────────────────────────────
430
- session.post("/files.upload", async (c) => handle(c, recorder, runId, "files.upload", async () => {
431
- const args = await readArgs(c);
432
- let delta = null;
433
- const result = domain.filesUpload({
434
- channels: asOptionalString(args.channels),
435
- channel: asOptionalString(args.channel),
436
- filename: asOptionalString(args.filename),
437
- title: asOptionalString(args.title),
438
- filetype: asOptionalString(args.filetype),
439
- content: asOptionalString(args.content),
440
- initial_comment: asOptionalString(args.initial_comment),
441
- thread_ts: asOptionalString(args.thread_ts),
442
- }, actorFrom(c), (d) => {
443
- delta = d;
444
- });
445
- return { body: slackOk(result), delta, mutation: true };
446
- }));
447
- const handleFilesInfo = async (c) => handle(c, recorder, runId, "files.info", async () => {
448
- const args = await readArgs(c);
449
- const result = domain.filesInfo({ file: asString(args.file) });
450
- return { body: slackOk(result) };
451
- });
452
- session.get("/files.info", handleFilesInfo);
453
- session.post("/files.info", handleFilesInfo);
454
- const handleFilesList = async (c) => handle(c, recorder, runId, "files.list", async () => {
455
- const args = await readArgs(c);
456
- const result = domain.filesList({
457
- channel: asOptionalString(args.channel),
458
- user: asOptionalString(args.user),
459
- count: args.count !== undefined ? asNumber(args.count, 100) : undefined,
460
- page: args.page !== undefined ? asNumber(args.page, 1) : undefined,
461
- types: asOptionalString(args.types),
462
- });
463
- return { body: slackOk(result) };
464
- });
465
- session.get("/files.list", handleFilesList);
466
- session.post("/files.list", handleFilesList);
467
- session.post("/files.delete", async (c) => handle(c, recorder, runId, "files.delete", async () => {
468
- const args = await readArgs(c);
469
- let delta = null;
470
- const result = domain.filesDelete({ file: asString(args.file) }, actorFrom(c), (d) => {
471
- delta = d;
472
- });
473
- return { body: slackOk(result), delta, mutation: true };
474
- }));
475
- // ─────────────────────────────────────────────────────────────────────────
476
- // Bookmarks
477
- // ─────────────────────────────────────────────────────────────────────────
478
- session.post("/bookmarks.add", async (c) => handle(c, recorder, runId, "bookmarks.add", async () => {
479
- const args = await readArgs(c);
480
- let delta = null;
481
- const result = domain.bookmarksAdd({
482
- channel_id: asString(args.channel_id),
483
- title: asString(args.title),
484
- type: asOptionalString(args.type),
485
- link: asOptionalString(args.link),
486
- emoji: asOptionalString(args.emoji),
487
- entity_id: asOptionalString(args.entity_id),
488
- }, actorFrom(c), (d) => {
489
- delta = d;
490
- });
491
- return { body: slackOk(result), delta, mutation: true };
492
- }));
493
- session.post("/bookmarks.remove", async (c) => handle(c, recorder, runId, "bookmarks.remove", async () => {
494
- const args = await readArgs(c);
495
- let delta = null;
496
- const result = domain.bookmarksRemove({ channel_id: asString(args.channel_id), bookmark_id: asString(args.bookmark_id) }, actorFrom(c), (d) => {
497
- delta = d;
498
- });
499
- return { body: slackOk(result), delta, mutation: true };
500
- }));
501
- const handleBookmarksList = async (c) => handle(c, recorder, runId, "bookmarks.list", async () => {
502
- const args = await readArgs(c);
503
- const result = domain.bookmarksList({ channel_id: asString(args.channel_id) });
504
- return { body: slackOk(result) };
505
- });
506
- session.get("/bookmarks.list", handleBookmarksList);
507
- session.post("/bookmarks.list", handleBookmarksList);
508
- // ─────────────────────────────────────────────────────────────────────────
509
- // Team
510
- // ─────────────────────────────────────────────────────────────────────────
511
- const handleTeamInfo = async (c) => handle(c, recorder, runId, "team.info", async () => {
512
- const args = await readArgs(c);
513
- const result = domain.teamInfo({ team: asOptionalString(args.team) });
514
- return { body: slackOk(result) };
515
- });
516
- session.get("/team.info", handleTeamInfo);
517
- session.post("/team.info", handleTeamInfo);
518
- // Catch-all 501. Twin-only fields (`fidelity`, `supported_surfaces`) live under
519
- // the `_twin` namespace, matching twin-github / twin-stripe. Envelope defined
520
- // once in ./unsupported-envelope.ts so the cross-twin namespace lint checks the
521
- // shipped shape.
522
- session.all("*", (c) => {
523
- return c.json(unsupportedEnvelope.body, unsupportedEnvelope.status);
524
- });
525
- app.route("/s/:sid", session);
526
- return app;
527
- }
528
- // ─────────────────────────────────────────────────────────────────────────────
529
- // Helpers
530
- // ─────────────────────────────────────────────────────────────────────────────
531
- function actorFrom(c) {
532
- const session = c.get("session");
533
- return { login: session?.login };
534
- }
535
- async function readArgs(c) {
536
- const method = c.req.method.toUpperCase();
537
- if (method === "GET" || method === "HEAD") {
538
- const query = c.req.query();
539
- return { ...query };
540
- }
541
- // For POST/PUT — merge query and body so endpoints can accept either.
542
- const body = await parseFormOrJson(c);
543
- const query = c.req.query();
544
- return { ...query, ...body };
545
- }
546
- function ensureOk(value) {
547
- if (value && typeof value === "object" && !Array.isArray(value)) {
548
- const obj = value;
549
- if ("ok" in obj)
550
- return obj;
551
- return { ok: true, ...obj };
552
- }
553
- return { ok: true, result: value };
554
- }
555
- async function handle(c, recorder, runId, method, fn) {
556
- const started = Date.now();
557
- let status = 200;
558
- let responseBody;
559
- let stateDelta = null;
560
- let mutation = false;
561
- let errorString = null;
562
- let outcomeResponse;
563
- try {
564
- const outcome = await fn();
565
- responseBody = outcome.body;
566
- stateDelta = outcome.delta ?? null;
567
- mutation = Boolean(outcome.mutation && status < 400);
568
- outcomeResponse = c.json(outcome.body);
569
- }
570
- catch (err) {
571
- if (err instanceof TwinError) {
572
- // Application-level Slack errors return HTTP 200 with {ok:false, error}.
573
- // This matches real Slack and is required by every official SDK
574
- // (@slack/web-api, @slack/bolt) — non-200 is treated as a transport
575
- // failure, not a parseable response. Auth middleware errors keep their
576
- // native 401 (handled in auth.ts, not here). Admin-gate restricted_action
577
- // is a TwinError too — also keeps its native status because admin
578
- // endpoints are twin-internal, not Slack API.
579
- status = 200;
580
- responseBody = { ok: false, error: err.code, ...(err.extra ?? {}) };
581
- errorString = err.code;
582
- outcomeResponse = c.json(responseBody, 200);
583
- }
584
- else if (err instanceof ZodError) {
585
- // Slack returns 200 + {ok:false, error:"invalid_arguments", response_metadata.messages}
586
- // for validation errors. Match that.
587
- status = 200;
588
- responseBody = {
589
- ok: false,
590
- error: "invalid_arguments",
591
- response_metadata: {
592
- messages: err.issues.map((issue) => `${issue.path.join(".") || "(root)"}: ${issue.message}`),
593
- },
594
- };
595
- errorString = "invalid_arguments";
596
- outcomeResponse = c.json(responseBody, 200);
597
- }
598
- else {
599
- const mapped = twinErrorFromSqliteConstraint(method, err);
600
- if (mapped) {
601
- status = 200;
602
- responseBody = { ok: false, error: mapped.code, ...(mapped.extra ?? {}) };
603
- errorString = mapped.code;
604
- outcomeResponse = c.json(responseBody, 200);
605
- }
606
- else {
607
- // Genuine server bugs return 5xx so platform retries / alerting kick in.
608
- status = 500;
609
- const message = err instanceof Error ? err.message : "internal_error";
610
- responseBody = { ok: false, error: "internal_error", warning: message };
611
- errorString = message;
612
- outcomeResponse = c.json(responseBody, 500);
613
- }
614
- }
615
- }
616
- recordEvent(c, recorder, runId, method, {
617
- started,
618
- status,
619
- body: responseBody,
620
- delta: status < 400 && !errorString ? stateDelta : null,
621
- mutation: status < 400 && !errorString && mutation,
622
- error: errorString,
623
- });
624
- return outcomeResponse;
625
- }
626
- async function handleAdmin(c, recorder, runId, method, fn) {
627
- const started = Date.now();
628
- let status = 200;
629
- let responseBody;
630
- let stateDelta = null;
631
- let errorString = null;
632
- let outcomeResponse;
633
- try {
634
- const result = await fn();
635
- responseBody = { ok: result.ok };
636
- stateDelta = result.delta;
637
- outcomeResponse = c.json({ ok: result.ok });
638
- }
639
- catch (err) {
640
- status = 500;
641
- const message = err instanceof Error ? err.message : "internal_error";
642
- responseBody = { ok: false, error: "internal_error", warning: message };
643
- errorString = message;
644
- outcomeResponse = c.json(responseBody, 500);
645
- }
646
- recordEvent(c, recorder, runId, method, {
647
- started,
648
- status,
649
- body: responseBody,
650
- delta: stateDelta,
651
- mutation: status < 400,
652
- error: errorString,
653
- });
654
- return outcomeResponse;
655
- }
656
- function recordEvent(c, recorder, runId, method, fields) {
657
- if (!recorder)
658
- return;
659
- const reqId = requestId();
660
- recorder.record({
661
- ts: nowIso(),
662
- run_id: runId,
663
- twin: "slack",
664
- request_id: reqId,
665
- correlation_id: reqId,
666
- scenario_step_id: c.req.header("x-pome-scenario-step-id") ?? null,
667
- step_id: null,
668
- tool_call_id: null,
669
- method: c.req.method,
670
- path: new URL(c.req.url).pathname,
671
- request_body: { route: method },
672
- status: fields.status,
673
- response_body: fields.body,
674
- latency_ms: Date.now() - fields.started,
675
- fidelity: "semantic",
676
- state_mutation: fields.mutation,
677
- state_delta: fields.delta,
678
- error: fields.error,
679
- });
680
- }
681
- function jsonSlackError(c, code, status) {
682
- return c.json(slackError(code), status);
683
- }