@pome-sh/cli 0.9.0 → 0.11.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 (449) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/src/cli/agent-resolver.d.ts +3 -0
  3. package/dist/src/cli/agent-resolver.js +10 -0
  4. package/dist/src/cli/checks-add.d.ts +32 -0
  5. package/dist/src/cli/checks-add.js +236 -0
  6. package/dist/src/cli/checks.d.ts +21 -0
  7. package/dist/src/cli/checks.js +150 -0
  8. package/dist/src/cli/main.js +28 -0
  9. package/dist/src/runner/runTask.d.ts +10 -10
  10. package/dist/src/task/insertCriterion.d.ts +15 -0
  11. package/dist/src/task/insertCriterion.js +62 -0
  12. package/dist/src/task/parseTask.d.ts +5 -0
  13. package/dist/src/task/parseTask.js +11 -0
  14. package/dist/src/task/taskSchema.d.ts +4 -4
  15. package/node_modules/@pome-sh/sdk/dist/checks.d.ts +58 -0
  16. package/node_modules/@pome-sh/sdk/dist/checks.js +203 -0
  17. package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -0
  18. package/node_modules/@pome-sh/sdk/package.json +7 -3
  19. package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
  20. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.d.ts +30 -0
  21. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js +203 -0
  22. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js.map +1 -0
  23. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.d.ts +3 -0
  24. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.js +10 -0
  25. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.js.map +1 -0
  26. package/node_modules/@pome-sh/twin-github/dist/src/check-params.d.ts +12 -0
  27. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js +99 -0
  28. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js.map +1 -0
  29. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.d.ts +11 -0
  30. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js +102 -0
  31. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js.map +1 -0
  32. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.d.ts +13 -0
  33. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js +132 -0
  34. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js.map +1 -0
  35. package/node_modules/@pome-sh/twin-github/dist/src/check-state.d.ts +56 -0
  36. package/node_modules/@pome-sh/twin-github/dist/src/check-state.js +80 -0
  37. package/node_modules/@pome-sh/twin-github/dist/src/check-state.js.map +1 -0
  38. package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +43 -0
  39. package/node_modules/@pome-sh/twin-github/dist/src/checks.js +65 -0
  40. package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -0
  41. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.d.ts +153 -0
  42. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js +66 -0
  43. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js.map +1 -0
  44. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.d.ts +567 -0
  45. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js +198 -0
  46. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js.map +1 -0
  47. package/node_modules/@pome-sh/twin-github/dist/src/{domain.d.ts → domain/github-domain.d.ts} +340 -71
  48. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js +794 -0
  49. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js.map +1 -0
  50. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.d.ts +5 -0
  51. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js +15 -0
  52. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js.map +1 -0
  53. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.d.ts +2 -0
  54. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js +5 -0
  55. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js.map +1 -0
  56. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.d.ts +545 -0
  57. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js +272 -0
  58. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js.map +1 -0
  59. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.d.ts +816 -0
  60. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js +256 -0
  61. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js.map +1 -0
  62. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.d.ts +160 -0
  63. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js +63 -0
  64. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js.map +1 -0
  65. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.d.ts +219 -0
  66. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js +131 -0
  67. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js.map +1 -0
  68. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.d.ts +252 -0
  69. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js +83 -0
  70. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js.map +1 -0
  71. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.d.ts +15 -0
  72. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js +2 -0
  73. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js.map +1 -0
  74. package/node_modules/@pome-sh/twin-github/dist/src/index.d.ts +2 -1
  75. package/node_modules/@pome-sh/twin-github/dist/src/index.js +1 -1
  76. package/node_modules/@pome-sh/twin-github/dist/src/index.js.map +1 -1
  77. package/node_modules/@pome-sh/twin-github/dist/src/routes.d.ts +1 -1
  78. package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
  79. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +3 -3
  80. package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +188 -188
  81. package/node_modules/@pome-sh/twin-github/dist/src/twin.d.ts +1 -1
  82. package/node_modules/@pome-sh/twin-github/dist/src/twin.js +1 -1
  83. package/node_modules/@pome-sh/twin-github/dist/src/twin.js.map +1 -1
  84. package/node_modules/@pome-sh/twin-github/package.json +4 -4
  85. package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/package.json +2 -2
  86. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  87. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  88. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  89. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  90. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  91. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  92. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  93. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  94. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  95. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  96. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  97. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  98. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  99. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  100. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  101. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  102. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  103. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  104. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  105. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  106. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  107. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  108. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  109. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  110. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  111. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  112. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  113. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  114. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  115. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  116. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  117. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  118. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  119. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  120. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  121. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  122. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  123. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  124. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  125. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  126. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  127. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  128. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  129. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  130. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  131. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  132. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  133. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  134. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/package.json +54 -0
  135. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
  136. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
  137. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
  138. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
  139. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
  140. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
  141. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
  142. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
  143. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
  144. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
  145. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/package.json +2 -1
  146. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
  147. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  148. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  149. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  150. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  151. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  152. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  153. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  154. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  155. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  156. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  157. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  158. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  159. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  160. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  161. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  162. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  163. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  164. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  165. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  166. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  167. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  168. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  169. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  170. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  171. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  172. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  173. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  174. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  175. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  176. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  177. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  178. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  179. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  180. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  181. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  182. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  183. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  184. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  185. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  186. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  187. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  188. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  189. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  190. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  191. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  192. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  193. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  194. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  195. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +54 -0
  196. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  197. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  198. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  199. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  200. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  201. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  202. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  203. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  204. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  205. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  206. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  207. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  208. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  209. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  210. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  211. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  212. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  213. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  214. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  215. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  216. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  217. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  218. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  219. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  220. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  221. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  222. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  223. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  224. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  225. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  226. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  227. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  228. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  229. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  230. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  231. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  232. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  233. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  234. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  235. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  236. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  237. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  238. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  239. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  240. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  241. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  242. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  243. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  244. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +54 -0
  245. package/package.json +3 -3
  246. package/tasks/00-default-seed.md +2 -2
  247. package/tasks/01-bug-happy-path.md +3 -3
  248. package/tasks/03-already-triaged.md +3 -3
  249. package/tasks/04-judge-context.md +1 -1
  250. package/tasks/06-mislabeled-needs-fix.md +4 -4
  251. package/tasks/08-prompt-injection-issue-body.md +1 -1
  252. package/tasks/17-in-scope-injection.md +4 -4
  253. package/tasks/26-github-linear-handoff.md +1 -1
  254. package/tasks/27-gmail-github-support-escalation.md +3 -3
  255. package/node_modules/@pome-sh/twin-github/dist/src/domain.js +0 -0
  256. package/node_modules/@pome-sh/twin-github/dist/src/domain.js.map +0 -1
  257. package/node_modules/@pome-sh/twin-github/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
  258. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -0
  259. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -0
  260. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -0
  261. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -0
  262. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js +0 -0
  263. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -0
  264. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -0
  265. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js +0 -0
  266. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -0
  267. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -0
  268. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js +0 -0
  269. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js.map +0 -0
  270. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -0
  271. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js +0 -0
  272. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -0
  273. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -0
  274. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -0
  275. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -0
  276. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -0
  277. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -0
  278. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -0
  279. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -0
  280. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -0
  281. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -0
  282. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -0
  283. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js +0 -0
  284. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js.map +0 -0
  285. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -0
  286. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -0
  287. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -0
  288. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -0
  289. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js +0 -0
  290. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -0
  291. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -0
  292. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js +0 -0
  293. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -0
  294. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -0
  295. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js +0 -0
  296. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -0
  297. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -0
  298. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -0
  299. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -0
  300. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -0
  301. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js +0 -0
  302. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js.map +0 -0
  303. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -0
  304. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -0
  305. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -0
  306. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
  307. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
  308. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
  309. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
  310. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
  311. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
  312. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
  313. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
  314. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
  315. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
  316. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
  317. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
  318. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -0
  319. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js +0 -0
  320. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -0
  321. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -0
  322. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -0
  323. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -0
  324. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
  325. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
  326. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
  327. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
  328. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
  329. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
  330. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
  331. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
  332. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
  333. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
  334. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
  335. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
  336. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
  337. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
  338. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
  339. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
  340. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
  341. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
  342. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
  343. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
  344. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
  345. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
  346. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
  347. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
  348. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
  349. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
  350. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
  351. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
  352. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
  353. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
  354. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
  355. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
  356. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
  357. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
  358. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
  359. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
  360. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -0
  361. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js +0 -0
  362. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -0
  363. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
  364. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
  365. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
  366. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
  367. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
  368. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
  369. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
  370. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
  371. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
  372. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
  373. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
  374. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
  375. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
  376. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
  377. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
  378. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
  379. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
  380. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
  381. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -0
  382. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/package.json +0 -0
  383. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/trace-contract.json +0 -0
  384. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
  385. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
  386. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
  387. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
  388. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
  389. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
  390. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
  391. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
  392. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
  393. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
  394. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
  395. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
  396. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
  397. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
  398. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
  399. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
  400. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
  401. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
  402. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
  403. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
  404. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
  405. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
  406. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
  407. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
  408. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
  409. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
  410. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
  411. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
  412. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
  413. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
  414. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
  415. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
  416. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
  417. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
  418. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
  419. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
  420. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
  421. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
  422. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
  423. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
  424. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
  425. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
  426. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
  427. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
  428. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
  429. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
  430. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
  431. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
  432. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
  433. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
  434. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
  435. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
  436. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
  437. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
  438. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
  439. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
  440. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
  441. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
  442. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
  443. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
  444. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
  445. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
  446. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
  447. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
  448. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
  449. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
@@ -0,0 +1,221 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // Streamable-HTTP JSON-RPC 2.0 MCP endpoint (`POST /s/:sid/mcp`), stateless
4
+ // mode: GET/DELETE answer 405. Generic over the twin's ToolSpec registry —
5
+ // the per-twin mcp.ts modules this replaces differed only in their tool
6
+ // tables and error envelopes, both of which now come from the manifest.
7
+ import { randomUUID } from "node:crypto";
8
+ import { toolInputSchema, toolListExtras, } from "./index.js";
9
+ import { UnknownToolError, envelopeFor } from "./errors.js";
10
+ import { makeToolCallContext } from "./tool-context.js";
11
+ const PARSE_ERROR = -32700;
12
+ const INVALID_REQUEST = -32600;
13
+ const METHOD_NOT_FOUND = -32601;
14
+ const INVALID_PARAMS = -32602;
15
+ const INTERNAL_ERROR = -32603;
16
+ const DEFAULT_PROTOCOL_VERSION = "2025-06-18";
17
+ const SUPPORTED_PROTOCOL_VERSIONS = new Set(["2024-11-05", "2025-03-26", "2025-06-18"]);
18
+ export function mcpMethodNotAllowed(c) {
19
+ return c.json({ jsonrpc: "2.0", id: null, error: { code: METHOD_NOT_FOUND, message: "Method not allowed in stateless mode" } }, 405, { Allow: "POST" });
20
+ }
21
+ export async function handleMcpJsonRpc(c, deps) {
22
+ let body;
23
+ try {
24
+ body = await c.req.json();
25
+ }
26
+ catch {
27
+ return jsonRpcErrorResponse(null, PARSE_ERROR, "Problems parsing JSON");
28
+ }
29
+ if (Array.isArray(body)) {
30
+ if (body.length === 0) {
31
+ return jsonRpcErrorResponse(null, INVALID_REQUEST, "Invalid Request");
32
+ }
33
+ const out = [];
34
+ for (const message of body) {
35
+ const response = await dispatch(message, deps, c);
36
+ if (response)
37
+ out.push(response);
38
+ }
39
+ if (out.length === 0)
40
+ return new Response(null, { status: 202 });
41
+ return Response.json(out, { status: 200, headers: { "content-type": "application/json" } });
42
+ }
43
+ const response = await dispatch(body, deps, c);
44
+ if (!response)
45
+ return new Response(null, { status: 202 });
46
+ return Response.json(response, { status: 200, headers: { "content-type": "application/json" } });
47
+ }
48
+ async function dispatch(message, deps, c) {
49
+ if (!isObject(message))
50
+ return errorEnvelope(null, INVALID_REQUEST, "Invalid Request");
51
+ if (message.jsonrpc !== "2.0" || typeof message.method !== "string") {
52
+ return errorEnvelope(idOf(message), INVALID_REQUEST, "Invalid Request");
53
+ }
54
+ const method = message.method;
55
+ const params = isObject(message.params) ? message.params : {};
56
+ const rawId = message.id;
57
+ if (rawId === undefined || rawId === null)
58
+ return null; // notification
59
+ if (typeof rawId !== "string" && typeof rawId !== "number") {
60
+ return errorEnvelope(null, INVALID_REQUEST, "Invalid Request: id must be string or number");
61
+ }
62
+ const id = rawId;
63
+ try {
64
+ switch (method) {
65
+ case "initialize":
66
+ return { jsonrpc: "2.0", id, result: buildInitializeResult(params, deps.definition) };
67
+ case "ping":
68
+ return { jsonrpc: "2.0", id, result: {} };
69
+ case "tools/list":
70
+ return {
71
+ jsonrpc: "2.0",
72
+ id,
73
+ result: {
74
+ tools: deps.definition.tools.map((tool) => ({
75
+ name: tool.name,
76
+ description: tool.description,
77
+ inputSchema: toolInputSchema(tool),
78
+ ...toolListExtras(tool),
79
+ })),
80
+ },
81
+ };
82
+ case "tools/call":
83
+ return await handleToolsCall(id, params, deps, c);
84
+ default:
85
+ return errorEnvelope(id, METHOD_NOT_FOUND, `Method not found: ${method}`);
86
+ }
87
+ }
88
+ catch (err) {
89
+ return errorEnvelope(id, INTERNAL_ERROR, err instanceof Error ? err.message : "Internal error");
90
+ }
91
+ }
92
+ function buildInitializeResult(params, definition) {
93
+ const requested = typeof params.protocolVersion === "string" ? params.protocolVersion : undefined;
94
+ const protocolVersion = requested && SUPPORTED_PROTOCOL_VERSIONS.has(requested) ? requested : DEFAULT_PROTOCOL_VERSION;
95
+ return {
96
+ protocolVersion,
97
+ capabilities: { tools: { listChanged: false } },
98
+ serverInfo: { name: `twin-${definition.id}`, version: definition.version },
99
+ };
100
+ }
101
+ async function handleToolsCall(id, params, deps, c) {
102
+ const name = params.name;
103
+ const args = params.arguments === undefined || params.arguments === null
104
+ ? {}
105
+ : isObject(params.arguments)
106
+ ? params.arguments
107
+ : undefined;
108
+ if (typeof name !== "string" || name.length === 0 || args === undefined) {
109
+ return errorEnvelope(id, INVALID_PARAMS, "Invalid params: expected { name: string, arguments?: object }");
110
+ }
111
+ const projectError = deps.definition.errorEnvelope ?? envelopeFor;
112
+ const tool = deps.definition.tools.find((t) => t.name === name);
113
+ const started = Date.now();
114
+ const call = makeToolCallContext(c);
115
+ let status;
116
+ let responseBody;
117
+ let toolError = null;
118
+ let mutation = false;
119
+ let mcpResult;
120
+ if (!tool) {
121
+ const envelope = projectError(new UnknownToolError(name));
122
+ // The unknown-tool result body is frozen per twin (F-682): github pins
123
+ // its pre-port `{message: "Unknown tool: <name>"}` text while the
124
+ // legacy /mcp/call surface keeps the envelope projection.
125
+ const body = deps.definition.mcpUnknownTool ? deps.definition.mcpUnknownTool(name) : envelope.body;
126
+ status = envelope.status;
127
+ responseBody = body;
128
+ toolError = `Unknown tool: ${name}`;
129
+ mcpResult = { content: [{ type: "text", text: JSON.stringify(body) }], isError: true };
130
+ }
131
+ else {
132
+ try {
133
+ const parsed = tool.schema.parse(args);
134
+ const value = await tool.handler(deps.domain, parsed, call.ctx);
135
+ status = 200;
136
+ responseBody = value;
137
+ mutation = tool.mutation;
138
+ // Only tools that declare `outputSchema` get `structuredContent` —
139
+ // existing twins omit both and stay byte-identical on the wire.
140
+ mcpResult = {
141
+ content: [
142
+ {
143
+ type: "text",
144
+ text: tool.contentText ? tool.contentText(value) : JSON.stringify(value),
145
+ },
146
+ ],
147
+ ...(tool.outputSchema !== undefined ? { structuredContent: value } : {}),
148
+ ...(tool.includeIsError ? { isError: false } : {}),
149
+ };
150
+ }
151
+ catch (err) {
152
+ const envelope = projectError(err);
153
+ status = envelope.status;
154
+ responseBody = envelope.body;
155
+ toolError = err instanceof Error ? err.message : "tool call failed";
156
+ mcpResult = { content: [{ type: "text", text: JSON.stringify(envelope.body) }], isError: true };
157
+ }
158
+ }
159
+ const delta = status < 400 ? call.delta() : null;
160
+ // Align with REST rest-routes-kit: when a handler reports reportDelta(null)
161
+ // (no-op mutation), state_mutation must be false. Twins that never call
162
+ // reportDelta keep ToolSpec.mutation as the recorder truth.
163
+ const effectiveMutation = status < 400 && mutation && (!call.reportedDelta() || delta !== null);
164
+ deps.recorder.record(buildEventCore(c, deps, {
165
+ started,
166
+ status,
167
+ requestBody: { tool: name, arguments: args },
168
+ responseBody,
169
+ mutation: effectiveMutation,
170
+ delta,
171
+ error: toolError,
172
+ }));
173
+ return { jsonrpc: "2.0", id, result: mcpResult };
174
+ }
175
+ function buildEventCore(c, deps, fields) {
176
+ const requestId = `req_${randomUUID()}`;
177
+ // Same stamping as recorder.ts emit() — see the comment there (F-683).
178
+ const stepId = c.req.header("x-pome-scenario-step-id") ?? null;
179
+ const correlationHeader = c.req.header("x-pome-correlation-id") ?? null;
180
+ return {
181
+ ts: new Date().toISOString(),
182
+ run_id: deps.runId,
183
+ twin: deps.definition.id,
184
+ request_id: requestId,
185
+ correlation_id: correlationHeader ?? requestId,
186
+ task_step_id: stepId,
187
+ scenario_step_id: stepId,
188
+ step_id: null,
189
+ // FDRS-402 adapter-rich path — per-twin pin, see recorder.ts (F-682).
190
+ tool_call_id: deps.definition.stampToolCallId ? correlationHeader : null,
191
+ method: c.req.method,
192
+ path: new URL(c.req.url).pathname,
193
+ request_body: fields.requestBody,
194
+ status: fields.status,
195
+ response_body: fields.responseBody,
196
+ latency_ms: Date.now() - fields.started,
197
+ fidelity: "semantic",
198
+ state_mutation: fields.mutation,
199
+ state_delta: fields.delta,
200
+ error: fields.error,
201
+ };
202
+ }
203
+ function errorEnvelope(id, code, message) {
204
+ return { jsonrpc: "2.0", id, error: { code, message } };
205
+ }
206
+ function jsonRpcErrorResponse(id, code, message) {
207
+ return Response.json(errorEnvelope(id, code, message), {
208
+ status: 200,
209
+ headers: { "content-type": "application/json" },
210
+ });
211
+ }
212
+ function idOf(message) {
213
+ const id = message.id;
214
+ if (typeof id === "string" || typeof id === "number")
215
+ return id;
216
+ return null;
217
+ }
218
+ function isObject(value) {
219
+ return typeof value === "object" && value !== null && !Array.isArray(value);
220
+ }
221
+ //# sourceMappingURL=mcp-jsonrpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-jsonrpc.js","sourceRoot":"","sources":["../src/mcp-jsonrpc.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,wEAAwE;AACxE,wEAAwE;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,eAAe,EACf,cAAc,GAKf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC;AAC3B,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC;AAC/B,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC;AAC9B,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC;AAE9B,MAAM,wBAAwB,GAAG,YAAY,CAAC;AAC9C,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAexF,MAAM,UAAU,mBAAmB,CAAC,CAAU;IAC5C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,EAChH,GAAG,EACH,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,CAAU,EACV,IAAyC;IAEzC,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,GAAG,GAAsB,EAAE,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACnG,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,OAAgB,EAChB,IAAyC,EACzC,CAAU;IAEV,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,MAAkC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,eAAe;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,8CAA8C,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,EAAE,GAAc,KAAK,CAAC;IAE5B,IAAI,CAAC;QACH,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY;gBACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxF,KAAK,MAAM;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC5C,KAAK,YAAY;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,EAAE;oBACF,MAAM,EAAE;wBACN,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC;4BAClC,GAAG,cAAc,CAAC,IAAI,CAAC;yBACxB,CAAC,CAAC;qBACJ;iBACF,CAAC;YACJ,KAAK,YAAY;gBACf,OAAO,MAAM,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpD;gBACE,OAAO,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAA+B,EAC/B,UAA+C;IAE/C,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,eAAe,GACnB,SAAS,IAAI,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACjG,OAAO;QACL,eAAe;QACf,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;QAC/C,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAAa,EACb,MAA+B,EAC/B,IAAyC,EACzC,CAAU;IAEV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,IAAI,GACR,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;QACzD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1B,CAAC,CAAC,MAAM,CAAC,SAAS;YAClB,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,+DAA+D,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,WAAW,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAExF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,MAAc,CAAC;IACnB,IAAI,YAAqB,CAAC;IAC1B,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,SAIH,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,uEAAuE;QACvE,kEAAkE;QAClE,0DAA0D;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,SAAS,GAAG,iBAAiB,IAAI,EAAE,CAAC;QACpC,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,CAAC;YACb,YAAY,GAAG,KAAK,CAAC;YACrB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,mEAAmE;YACnE,gEAAgE;YAChE,SAAS,GAAG;gBACV,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;qBACzE;iBACF;gBACD,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACzB,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC7B,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACpE,SAAS,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,4EAA4E;IAC5E,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,iBAAiB,GACrB,MAAM,GAAG,GAAG,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE;QACtB,OAAO;QACP,MAAM;QACN,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;QAC5C,YAAY;QACZ,QAAQ,EAAE,iBAAiB;QAC3B,KAAK;QACL,KAAK,EAAE,SAAS;KACjB,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CACrB,CAAU,EACV,IAAyC,EACzC,MAQC;IAED,MAAM,SAAS,GAAG,OAAO,UAAU,EAAE,EAAE,CAAC;IACxC,uEAAuE;IACvE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,IAAI,CAAC;IAC/D,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC;IACxE,OAAO;QACL,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,MAAM,EAAE,IAAI,CAAC,KAAK;QAClB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;QACxB,UAAU,EAAE,SAAS;QACrB,cAAc,EAAE,iBAAiB,IAAI,SAAS;QAC9C,YAAY,EAAE,MAAM;QACpB,gBAAgB,EAAE,MAAM;QACxB,OAAO,EAAE,IAAI;QACb,sEAAsE;QACtE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;QACxE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;QACpB,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ;QACjC,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO;QACvC,QAAQ,EAAE,UAAmB;QAC7B,cAAc,EAAE,MAAM,CAAC,QAAQ;QAC/B,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAoB,EAAE,IAAY,EAAE,OAAe;IACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAoB,EAAE,IAAY,EAAE,OAAe;IAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QACrD,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,IAAI,CAAC,OAAgC;IAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACtB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { type FidelityInventory } from "./fidelity-inventory.js";
2
+ export type ParityState = Record<string, unknown>;
3
+ export interface ParityStep {
4
+ tool: string;
5
+ arguments?: Record<string, unknown> | ((state: ParityState) => Record<string, unknown>);
6
+ /** Pull cross-call state (ids, numbers, shas) out of the response body. */
7
+ capture?: (body: unknown, state: ParityState) => void;
8
+ /** Expected HTTP status; default: any 2xx. */
9
+ status?: number;
10
+ /** Extra body assertion; return a problem string to fail the step. */
11
+ verify?: (body: unknown) => string | undefined;
12
+ }
13
+ export interface ParityRestProbe {
14
+ /** Label in the report, e.g. "unsupported-rest". */
15
+ surface: string;
16
+ method?: string;
17
+ /** Session-relative path, e.g. "/repos/acme/api/actions/runs". */
18
+ path: string;
19
+ /** Expected HTTP status. */
20
+ status: number;
21
+ /** Assert the body carries a `fidelity: "unsupported"` marker. */
22
+ expectUnsupportedEnvelope?: boolean;
23
+ /** Optional request body for mutating probes (e.g. messages.send). */
24
+ body?: string;
25
+ /** Extra request headers (authorization is always set by the runner). */
26
+ headers?: Record<string, string>;
27
+ /** Extra body assertion; return a problem string to fail the probe. */
28
+ verify?: (body: unknown) => string | undefined;
29
+ }
30
+ export interface ParityAppLike {
31
+ request(path: string | Request, init?: RequestInit): Response | Promise<Response>;
32
+ }
33
+ export interface RunParityOptions {
34
+ app: ParityAppLike;
35
+ twin: string;
36
+ inventory: FidelityInventory;
37
+ /** `listTools()` names from the twin source — the code truth. */
38
+ liveToolNames: string[];
39
+ steps: ParityStep[];
40
+ restProbes?: ParityRestProbe[];
41
+ /** Session id; default "fidelity-parity". */
42
+ sid?: string;
43
+ /** JWT secret; default env TWIN_AUTH_SECRET or the engine dev secret. */
44
+ secret?: string;
45
+ /** Extra JWT claims (login, team_id, account_id, ...). */
46
+ claims?: Record<string, unknown>;
47
+ /** Applied to every step without its own `verify` (twin error envelopes). */
48
+ stepVerify?: (body: unknown) => string | undefined;
49
+ /** Optional live upstream probes; entries are appended to the report. */
50
+ live?: () => Promise<unknown[]>;
51
+ }
52
+ export interface ParityResult {
53
+ ok: boolean;
54
+ failures: string[];
55
+ report: unknown[];
56
+ }
57
+ export declare function runFidelityParity(options: RunParityOptions): Promise<ParityResult>;
58
+ /** Script entrypoint: run, print the JSON report, set the exit code. */
59
+ export declare function runParityCli(options: RunParityOptions): Promise<ParityResult>;
60
+ export { compareToolNames, expandSurfaceCell, fidelityDocDriftSchema, fidelityInventorySchema, fidelitySurfaceSchema, heatTierSchema, lintFidelityInventory, loadFidelityInventory, parseFidelityDocRows, } from "./fidelity-inventory.js";
61
+ export type { FidelityDocDrift, FidelityDocRow, FidelityDocSource, FidelityInventory, FidelitySurface, HeatTier, } from "./fidelity-inventory.js";
@@ -0,0 +1,123 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // Shared fidelity:parity runner (F-730). One engine-level runner; each twin
4
+ // supplies declarative scenario data — an ordered, stateful chain of MCP
5
+ // calls with cross-call captures (a PR number, a charge id, a message ts) —
6
+ // plus its structured fidelity inventory. No per-twin runner copies (M1
7
+ // "twin-infra copies: 0" gate).
8
+ //
9
+ // The runner asserts three rings agree before it reports green:
10
+ // 1. live tool list (code truth from listTools())
11
+ // 2. fidelity.inventory.json tools (the machine-readable inventory)
12
+ // 3. scenario step coverage (every inventory tool exercised)
13
+ // and that every step answers its expected status through the frozen
14
+ // `POST /s/:sid/mcp/call` surface. Optional REST probes pin the loud-501
15
+ // unsupported envelope; an optional `live` hook lets a twin compare
16
+ // read-only shapes against the real upstream (e.g. `gh api`).
17
+ import { sign } from "hono/jwt";
18
+ import { compareToolNames, } from "./fidelity-inventory.js";
19
+ function bodyKeys(body) {
20
+ if (Array.isArray(body))
21
+ return ["array"];
22
+ if (body && typeof body === "object") {
23
+ return Object.keys(body).sort();
24
+ }
25
+ return [];
26
+ }
27
+ export async function runFidelityParity(options) {
28
+ const sid = options.sid ?? "fidelity-parity";
29
+ const secret = options.secret ?? process.env.TWIN_AUTH_SECRET ?? "dev-only-insecure-secret";
30
+ const token = await sign({ sid, exp: Math.floor(Date.now() / 1000) + 3600, ...options.claims }, secret);
31
+ const base = `/s/${sid}`;
32
+ const failures = [];
33
+ const report = [];
34
+ // Ring 1 ⇔ ring 2: inventory tools must equal the live tool list.
35
+ const inventoryNames = options.inventory.tools.map((entry) => entry.name);
36
+ const inventoryDiff = compareToolNames(inventoryNames, options.liveToolNames);
37
+ for (const name of inventoryDiff.missing) {
38
+ failures.push(`tool '${name}' is live in listTools() but missing from fidelity.inventory.json`);
39
+ }
40
+ for (const name of inventoryDiff.extra) {
41
+ failures.push(`tool '${name}' is in fidelity.inventory.json but not in listTools()`);
42
+ }
43
+ // Ring 2 ⇔ ring 3: every inventory tool needs at least one scenario step.
44
+ const covered = new Set(options.steps.map((step) => step.tool));
45
+ for (const name of inventoryNames) {
46
+ if (!covered.has(name))
47
+ failures.push(`no parity scenario step covers tool '${name}'`);
48
+ }
49
+ for (const tool of covered) {
50
+ if (!inventoryNames.includes(tool)) {
51
+ failures.push(`scenario step calls '${tool}' which is not in fidelity.inventory.json`);
52
+ }
53
+ }
54
+ const state = {};
55
+ for (const step of options.steps) {
56
+ const args = typeof step.arguments === "function" ? step.arguments(state) : step.arguments ?? {};
57
+ const response = await options.app.request(`${base}/mcp/call`, {
58
+ method: "POST",
59
+ headers: { authorization: `Bearer ${token}`, "content-type": "application/json" },
60
+ body: JSON.stringify({ tool: step.tool, arguments: args }),
61
+ });
62
+ const body = await response.json().catch(() => ({}));
63
+ const expected = step.status === undefined ? response.ok : response.status === step.status;
64
+ if (!expected) {
65
+ failures.push(`${step.tool}: expected ${step.status ?? "2xx"}, got ${response.status} ${JSON.stringify(body).slice(0, 300)}`);
66
+ }
67
+ else {
68
+ const problem = (step.verify ?? options.stepVerify)?.(body);
69
+ if (problem)
70
+ failures.push(`${step.tool}: ${problem}`);
71
+ step.capture?.(body, state);
72
+ }
73
+ report.push({ tool: step.tool, status: response.status, ok: response.ok, keys: bodyKeys(body) });
74
+ }
75
+ for (const probe of options.restProbes ?? []) {
76
+ const headers = {
77
+ authorization: `Bearer ${token}`,
78
+ ...probe.headers,
79
+ };
80
+ if (probe.body !== undefined && !headers["content-type"] && !headers["Content-Type"]) {
81
+ headers["content-type"] = "application/json";
82
+ }
83
+ const response = await options.app.request(`${base}${probe.path}`, {
84
+ method: probe.method ?? "GET",
85
+ headers,
86
+ ...(probe.body !== undefined ? { body: probe.body } : {}),
87
+ });
88
+ const body = await response.json().catch(() => ({}));
89
+ if (response.status !== probe.status) {
90
+ failures.push(`${probe.surface}: expected ${probe.status}, got ${response.status}`);
91
+ }
92
+ if (probe.expectUnsupportedEnvelope && !JSON.stringify(body).includes('"fidelity":"unsupported"')) {
93
+ failures.push(`${probe.surface}: body does not carry the fidelity:"unsupported" envelope`);
94
+ }
95
+ const problem = probe.verify?.(body);
96
+ if (problem)
97
+ failures.push(`${probe.surface}: ${problem}`);
98
+ report.push({ surface: probe.surface, status: response.status, body });
99
+ }
100
+ if (options.live) {
101
+ report.push(...(await options.live()));
102
+ }
103
+ return { ok: failures.length === 0, failures, report };
104
+ }
105
+ /** Script entrypoint: run, print the JSON report, set the exit code. */
106
+ export async function runParityCli(options) {
107
+ const result = await runFidelityParity(options);
108
+ console.log(JSON.stringify({
109
+ twin: options.twin,
110
+ tools: options.inventory.tools.length,
111
+ rest_surfaces: options.inventory.rest.length,
112
+ ok: result.ok,
113
+ failures: result.failures,
114
+ report: result.report,
115
+ }, null, 2));
116
+ if (!result.ok) {
117
+ console.error(`fidelity:parity FAILED for ${options.twin} (${result.failures.length} problem(s))`);
118
+ process.exitCode = 1;
119
+ }
120
+ return result;
121
+ }
122
+ export { compareToolNames, expandSurfaceCell, fidelityDocDriftSchema, fidelityInventorySchema, fidelitySurfaceSchema, heatTierSchema, lintFidelityInventory, loadFidelityInventory, parseFidelityDocRows, } from "./fidelity-inventory.js";
123
+ //# sourceMappingURL=parity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parity.js","sourceRoot":"","sources":["../src/parity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import type { RecorderEvent, TwinId } from "@pome-sh/shared-types";
2
+ import type { RecorderHandle } from "./index.js";
3
+ /**
4
+ * Projects a thrown error into the `{ status, body }` shape a route returns.
5
+ * Twin authors override this via `TwinDefinition.errorEnvelope` to preserve
6
+ * the upstream API's error shape (Stripe nests under `{ error: {...} }`;
7
+ * GitHub uses `{ message, documentation_url, errors[] }`; etc).
8
+ */
9
+ export type ErrorEnvelopeFn = (err: unknown) => {
10
+ status: number;
11
+ body: unknown;
12
+ };
13
+ /**
14
+ * Backing store for the twin-core recorder.
15
+ *
16
+ * `record` / `events` are required. `flush` / `close` are optional so existing
17
+ * in-memory callers stay source-compatible; durable stores implement them.
18
+ */
19
+ export interface RecorderStore {
20
+ record(event: RecorderEvent): void;
21
+ events(): RecorderEvent[];
22
+ /** Event count without the O(N) copy `events()` makes. Optional for custom stores. */
23
+ count?(): number;
24
+ /** Events dropped by a bounded store (stripe pins a 10k cap + dropped counter). */
25
+ dropped?(): number;
26
+ /**
27
+ * Durability barrier. Resolves when every previously accepted event is on
28
+ * the backing medium. Optional for heap-only stores.
29
+ */
30
+ flush?(): Promise<void>;
31
+ /**
32
+ * Flush + release. Idempotent. Optional for heap-only stores.
33
+ */
34
+ close?(): Promise<void>;
35
+ }
36
+ export interface RecorderStoreOptions {
37
+ /**
38
+ * Bound the in-memory tape: past `maxEvents` the store drops the OLDEST
39
+ * event and increments the `dropped()` counter (stripe's pre-port
40
+ * D-ENG-10/E-10 recorder behavior). Default: unbounded (github/slack).
41
+ * For file-backed stores this does **not** truncate the NDJSON tape —
42
+ * durability stays append-only; only `events()` is capped.
43
+ */
44
+ maxEvents?: number;
45
+ }
46
+ export declare function createRecorderStore(options?: RecorderStoreOptions): RecorderStore;
47
+ export interface FileBackedRecorderStoreOptions extends RecorderStoreOptions {
48
+ /**
49
+ * Path to the NDJSON tape (typically a run's `events.jsonl` or a sidecar).
50
+ * Parent directories are created if missing. Opens append-mode.
51
+ */
52
+ path: string;
53
+ /**
54
+ * When true, each accepted write is `fsync`'d so a `kill -9` loses at most
55
+ * the in-flight event. Default true for the production durable path (F-698).
56
+ */
57
+ fsync?: boolean;
58
+ }
59
+ /**
60
+ * Env key for the durable recorder tape. When set, twin boot paths and the
61
+ * self-host harness use `createFileBackedRecorderStore` instead of heap-only.
62
+ * Architecture (F-698 / §9 Q3): recorder *transport* lives in twin-core
63
+ * (`packages/sdk`); twins inherit durability by reading this env.
64
+ */
65
+ export declare const POME_RECORDER_EVENTS_PATH = "POME_RECORDER_EVENTS_PATH";
66
+ /**
67
+ * Wrap a legacy `RecorderEvent` into the unified `TwinHttpEvent` NDJSON row
68
+ * shape used by uploaded `events.jsonl` (FDRS-398). Pass-through only when
69
+ * `kind` is already `"TwinHttpEvent"`; any other kind is re-wrapped so the
70
+ * durable tape never persists a mismatched discriminator. Disk rows from the
71
+ * durable store use this shape so finalize/upload does not need a second wrap
72
+ * for crash-streamed events.
73
+ */
74
+ export declare function toTwinHttpEventRow(event: RecorderEvent): RecorderEvent & {
75
+ kind: "TwinHttpEvent";
76
+ event_id: string;
77
+ parent_id: null;
78
+ };
79
+ /**
80
+ * Durable recorder store (F-720 contract / F-698 implementation).
81
+ *
82
+ * Keeps an in-memory mirror of legacy `RecorderEvent` rows for `events()` /
83
+ * `GET /_pome/events` (unchanged API), and appends each accepted event as a
84
+ * `TwinHttpEvent` NDJSON line so on-disk `events.jsonl` matches the uploaded
85
+ * raw-trace byte shape. `flush()` drains pending writes and rethrows the
86
+ * first append/fsync failure; `fsync` (default true) bounds crash loss to
87
+ * the in-flight event. `maxEvents` caps only the heap mirror — the NDJSON
88
+ * tape stays append-only.
89
+ */
90
+ export declare function createFileBackedRecorderStore(options: FileBackedRecorderStoreOptions): RecorderStore;
91
+ /**
92
+ * Resolve the recorder store for a twin boot: durable file-backed when
93
+ * `POME_RECORDER_EVENTS_PATH` is set, otherwise the in-memory default.
94
+ */
95
+ export declare function resolveRecorderStore(options?: RecorderStoreOptions): RecorderStore;
96
+ export interface RecorderHandleOptions {
97
+ runId: string;
98
+ twin: TwinId;
99
+ store?: RecorderStore;
100
+ /**
101
+ * Projects thrown errors into a route response. Defaults to the generic
102
+ * `{ message, errors? }` envelope; the SDK's `createApp` forwards
103
+ * `definition.errorEnvelope` here so API-mirroring twins control their
104
+ * own error shape without bypassing the recorder middleware.
105
+ */
106
+ errorEnvelope?: ErrorEnvelopeFn;
107
+ /**
108
+ * FDRS-402 adapter-rich stamping pin (F-682): when true, events persist
109
+ * the incoming `x-pome-correlation-id` header as `tool_call_id` (github's
110
+ * frozen tape shape). Default false — slack's frozen tape stamps null.
111
+ */
112
+ stampToolCallId?: boolean;
113
+ /**
114
+ * Optional pre-redaction projection (from `TwinDefinition.recordingProjection`).
115
+ * Runs before `redactEvent` so twins can replace raw payloads with digests
116
+ * without bypassing the secret scrubber. Unset = no-op (existing twins).
117
+ */
118
+ recordingProjection?: (event: RecorderEvent) => RecorderEvent;
119
+ }
120
+ export declare function createRecorderHandle(options: RecorderHandleOptions): RecorderHandle;