@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,794 @@
1
+ import { notFound, validationFailed } from "../errors.js";
2
+ import { fileSha, linesChanged, makeSha, nowIso, treeSha } from "../util.js";
3
+ import { defaultSeedState, parseSeed } from "../seed.js";
4
+ import { contentDirectoryEntryJson, labelJson, pullRequestJson, pullRequestListJson, } from "../serializers.js";
5
+ import { resetDatabase } from "../db.js";
6
+ import * as checks from "./checks.js";
7
+ import * as git from "./git.js";
8
+ import * as issues from "./issues.js";
9
+ import * as pulls from "./pulls.js";
10
+ import * as releases from "./releases.js";
11
+ import * as repos from "./repos.js";
12
+ import * as search from "./search.js";
13
+ import { commitIdentityKey, normalizePath } from "./helpers.js";
14
+ export class GitHubDomain {
15
+ db;
16
+ constructor(db) {
17
+ this.db = db;
18
+ }
19
+ seed(seed = defaultSeedState(), onDelta) {
20
+ const parsedSeed = parseSeed(seed);
21
+ const before = this.summarizeRepositories();
22
+ const tx = this.db.transaction(() => {
23
+ resetDatabase(this.db);
24
+ const users = new Set(parsedSeed.users?.map((user) => user.login) ?? []);
25
+ for (const repo of parsedSeed.repositories) {
26
+ users.add(repo.owner);
27
+ for (const login of repo.collaborators ?? [])
28
+ users.add(login);
29
+ for (const issue of repo.issues ?? [])
30
+ for (const login of issue.assignees ?? [])
31
+ users.add(login);
32
+ }
33
+ users.add("pome-agent");
34
+ for (const user of parsedSeed.users ?? []) {
35
+ this.upsertUser(user.login, user.type ?? "User", user.name ?? "");
36
+ }
37
+ for (const login of users) {
38
+ this.upsertUser(login, login === "acme" ? "Organization" : "User", login);
39
+ }
40
+ for (const repoSeed of parsedSeed.repositories) {
41
+ const repo = this.insertRepository({
42
+ owner: repoSeed.owner,
43
+ name: repoSeed.name,
44
+ description: repoSeed.description ?? "",
45
+ private: repoSeed.private ?? false,
46
+ defaultBranch: repoSeed.default_branch ?? "main",
47
+ fork: false,
48
+ parentFullName: null
49
+ });
50
+ for (const login of repoSeed.collaborators ?? [])
51
+ this.addCollaborator(repo.id, login);
52
+ this.addCollaborator(repo.id, "pome-agent");
53
+ for (const label of repoSeed.labels ?? []) {
54
+ this.createLabel(repo, label.name, label.color ?? "ededed", label.description ?? "");
55
+ }
56
+ this.createBranchInternal(repo, repo.default_branch, null);
57
+ const files = repoSeed.files?.filter((file) => (file.branch ?? repo.default_branch) === repo.default_branch) ?? [];
58
+ this.commitFiles(repo, repo.default_branch, "Initial seed commit", files, "pome-agent");
59
+ const nonDefaultBranches = new Set((repoSeed.files ?? []).map((file) => file.branch ?? repo.default_branch).filter((branch) => branch !== repo.default_branch));
60
+ for (const branch of nonDefaultBranches) {
61
+ this.createBranch({ owner: repo.owner, repo: repo.name, branch, from_branch: repo.default_branch });
62
+ const branchFiles = repoSeed.files?.filter((file) => (file.branch ?? repo.default_branch) === branch) ?? [];
63
+ this.commitFiles(repo, branch, `Seed ${branch}`, branchFiles, "pome-agent");
64
+ }
65
+ for (const issue of repoSeed.issues ?? []) {
66
+ const legacyAssignee = issue.assignee;
67
+ const assignees = issue.assignees ?? (legacyAssignee ? [legacyAssignee] : []);
68
+ const created = this.createIssue({ owner: repo.owner, repo: repo.name, title: issue.title, body: issue.body ?? "", labels: issue.labels ?? [], assignees });
69
+ if (issue.number && issue.number !== created.number) {
70
+ const from = created.number;
71
+ const to = issue.number;
72
+ this.db.prepare("UPDATE issues SET number = ? WHERE repo_id = ? AND number = ?").run(to, repo.id, from);
73
+ this.db.prepare("UPDATE issue_labels SET issue_number = ? WHERE repo_id = ? AND issue_number = ?").run(to, repo.id, from);
74
+ this.db.prepare("UPDATE issue_assignees SET issue_number = ? WHERE repo_id = ? AND issue_number = ?").run(to, repo.id, from);
75
+ this.db.prepare("UPDATE issue_comments SET issue_number = ? WHERE repo_id = ? AND issue_number = ?").run(to, repo.id, from);
76
+ this.bumpEntityCounter(repo.id, to);
77
+ }
78
+ if (issue.state === "closed")
79
+ this.updateIssue({ owner: repo.owner, repo: repo.name, issue_number: issue.number ?? created.number, state: "closed" });
80
+ }
81
+ for (const pull of repoSeed.pull_requests ?? []) {
82
+ const createdPr = this.createPullRequest({ owner: repo.owner, repo: repo.name, title: pull.title, body: pull.body ?? "", head: pull.head, base: pull.base ?? repo.default_branch, actor: pull.author });
83
+ const prNumber = createdPr.number;
84
+ // The PR row and its head branch don't change across seeded reviews /
85
+ // statuses, so resolve the head SHA once rather than re-querying it on
86
+ // every iteration (and in both blocks below).
87
+ const seedsHead = (pull.reviews ?? []).length > 0 || (pull.statuses ?? []).length > 0;
88
+ const prRow = seedsHead ? this.requirePullRequest(repo.id, prNumber) : null;
89
+ const headRepo = prRow ? this.requireRepoById(prRow.head_repo_id) : null;
90
+ const headSha = prRow && headRepo ? this.requireBranch(headRepo.id, prRow.head_ref).head_sha ?? "" : "";
91
+ // Seed reviews directly into pull_request_reviews so we can record
92
+ // the author and state honestly. Going through createPullRequestReview
93
+ // would hardcode user_login = "pome-agent" and lose author identity.
94
+ for (const review of pull.reviews ?? []) {
95
+ users.add(review.author);
96
+ this.upsertUser(review.author, "User", review.author);
97
+ this.db.prepare("INSERT INTO pull_request_reviews (repo_id, pull_number, user_login, state, body, commit_sha, submitted_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run(repo.id, prNumber, review.author,
98
+ // parseSeed defaults this to "APPROVED"; guard direct seed() callers
99
+ // that pass a hand-built seed with no explicit review state.
100
+ review.state ?? "APPROVED", review.body ?? "", headSha, nowIso());
101
+ }
102
+ // Seed commit statuses on the PR head SHA. Same shape as
103
+ // createStatus() so merge_pull_request's required-status check
104
+ // sees the seeded value.
105
+ if ((pull.statuses ?? []).length > 0 && headRepo) {
106
+ for (const status of pull.statuses ?? []) {
107
+ this.createStatus({
108
+ owner: headRepo.owner,
109
+ repo: headRepo.name,
110
+ sha: headSha,
111
+ state: status.state ?? "success",
112
+ context: status.context ?? "ci/build",
113
+ description: status.description ?? ""
114
+ });
115
+ }
116
+ }
117
+ }
118
+ }
119
+ this.audit("seed", null, { repositories: parsedSeed.repositories.length });
120
+ });
121
+ tx();
122
+ onDelta?.({
123
+ before: { repositories: before },
124
+ after: { repositories: this.summarizeRepositories() }
125
+ });
126
+ }
127
+ summarizeRepositories() {
128
+ const rows = this.db.prepare("SELECT owner, name FROM repositories ORDER BY full_name ASC").all();
129
+ return rows;
130
+ }
131
+ exportState() {
132
+ const repos = this.db.prepare("SELECT * FROM repositories ORDER BY full_name ASC").all();
133
+ return {
134
+ repositories: repos.map((repo) => ({
135
+ ...repo,
136
+ branches: this.listBranches(repo.id),
137
+ files: this.db.prepare("SELECT * FROM files WHERE repo_id = ? ORDER BY branch, path").all(repo.id),
138
+ labels: this.listLabels(repo.id),
139
+ issues: this.listIssuesRows(repo.id).map((issue) => ({
140
+ ...issue,
141
+ labels: this.listIssueLabels(repo.id, issue.number),
142
+ assignees: this.listIssueAssignees(repo.id, issue.number),
143
+ comments: this.listIssueCommentRows(repo.id, issue.number)
144
+ })),
145
+ pull_requests: this.listPullRequestRows(repo.id).map((pull) => ({
146
+ ...pull,
147
+ files: this.listPullRequestFileRows(repo.id, pull.number),
148
+ reviews: this.listPullRequestReviewRows(repo.id, pull.number),
149
+ review_comments: this.listPullRequestReviewCommentRows(repo.id, pull.number)
150
+ })),
151
+ commit_statuses: this.db.prepare("SELECT * FROM commit_statuses WHERE repo_id = ? ORDER BY id ASC").all(repo.id),
152
+ check_runs: this.db.prepare("SELECT * FROM check_runs WHERE repo_id = ? ORDER BY id ASC").all(repo.id)
153
+ }))
154
+ };
155
+ }
156
+ getRepository(input) {
157
+ return repos.getRepository(this, input);
158
+ }
159
+ createRepository(input, onDelta) {
160
+ return repos.createRepository(this, input, onDelta);
161
+ }
162
+ forkRepository(input, onDelta) {
163
+ return repos.forkRepository(this, input, onDelta);
164
+ }
165
+ searchRepositories(input) {
166
+ return search.searchRepositories(this, input);
167
+ }
168
+ searchUsers(input) {
169
+ return search.searchUsers(this, input);
170
+ }
171
+ searchCode(input) {
172
+ return search.searchCode(this, input);
173
+ }
174
+ searchCommits(input) {
175
+ return search.searchCommits(this, input);
176
+ }
177
+ getFileContents(input) {
178
+ return git.getFileContents(this, input);
179
+ }
180
+ listCommits(input) {
181
+ return git.listCommits(this, input);
182
+ }
183
+ createOrUpdateFile(input, options = {}, onDelta) {
184
+ return git.createOrUpdateFile(this, input, options, onDelta);
185
+ }
186
+ pushFiles(input, options = {}, onDelta) {
187
+ return git.pushFiles(this, input, options, onDelta);
188
+ }
189
+ createBranch(input, onDelta) {
190
+ return git.createBranch(this, input, onDelta);
191
+ }
192
+ createIssue(input, onDelta) {
193
+ return issues.createIssue(this, input, onDelta);
194
+ }
195
+ listIssues(input) {
196
+ return issues.listIssues(this, input);
197
+ }
198
+ searchIssues(input) {
199
+ return search.searchIssues(this, input);
200
+ }
201
+ getIssue(input) {
202
+ return issues.getIssue(this, input);
203
+ }
204
+ updateIssue(input, onDelta) {
205
+ return issues.updateIssue(this, input, onDelta);
206
+ }
207
+ addIssueComment(input, onDelta) {
208
+ return issues.addIssueComment(this, input, onDelta);
209
+ }
210
+ listIssueComments(input) {
211
+ return issues.listIssueComments(this, input);
212
+ }
213
+ listRepositoryLabels(input) {
214
+ return issues.listRepositoryLabels(this, input);
215
+ }
216
+ createRepositoryLabel(input, onDelta) {
217
+ return issues.createRepositoryLabel(this, input, onDelta);
218
+ }
219
+ listIssueLabelsForIssue(input) {
220
+ return issues.listIssueLabelsForIssue(this, input);
221
+ }
222
+ addIssueLabels(input, onDelta) {
223
+ return issues.addIssueLabels(this, input, onDelta);
224
+ }
225
+ deleteIssueLabel(input, onDelta) {
226
+ return issues.deleteIssueLabel(this, input, onDelta);
227
+ }
228
+ listCollaborators(input) {
229
+ return repos.listCollaborators(this, input);
230
+ }
231
+ isCollaborator(input) {
232
+ return repos.isCollaborator(this, input);
233
+ }
234
+ hasRepositoryPermission(input) {
235
+ return repos.hasRepositoryPermission(this, input);
236
+ }
237
+ addAssignees(input, onDelta) {
238
+ return issues.addAssignees(this, input, onDelta);
239
+ }
240
+ createPullRequest(input, onDelta) {
241
+ return pulls.createPullRequest(this, input, onDelta);
242
+ }
243
+ listPullRequests(input) {
244
+ return pulls.listPullRequests(this, input);
245
+ }
246
+ getPullRequest(input) {
247
+ return pulls.getPullRequest(this, input);
248
+ }
249
+ getPullRequestFiles(input) {
250
+ return pulls.getPullRequestFiles(this, input);
251
+ }
252
+ getPullRequestReviews(input) {
253
+ return pulls.getPullRequestReviews(this, input);
254
+ }
255
+ createPullRequestReview(input, onDelta) {
256
+ return pulls.createPullRequestReview(this, input, onDelta);
257
+ }
258
+ getPullRequestComments(input) {
259
+ return pulls.getPullRequestComments(this, input);
260
+ }
261
+ getPullRequestStatus(input) {
262
+ return pulls.getPullRequestStatus(this, input);
263
+ }
264
+ mergePullRequest(input, onDelta) {
265
+ return pulls.mergePullRequest(this, input, onDelta);
266
+ }
267
+ updatePullRequestBranch(input, onDelta) {
268
+ return pulls.updatePullRequestBranch(this, input, onDelta);
269
+ }
270
+ createStatus(input) {
271
+ return checks.createStatus(this, input);
272
+ }
273
+ listBranchesForRepo(input) {
274
+ return git.listBranchesForRepo(this, input);
275
+ }
276
+ getBranchByName(input) {
277
+ return git.getBranchByName(this, input);
278
+ }
279
+ deleteBranch(input, onDelta) {
280
+ return git.deleteBranch(this, input, onDelta);
281
+ }
282
+ deleteFile(input, options = {}, onDelta) {
283
+ return git.deleteFile(this, input, options, onDelta);
284
+ }
285
+ getCommitWithFiles(input) {
286
+ return git.getCommitWithFiles(this, input);
287
+ }
288
+ compareCommits(input) {
289
+ return git.compareCommits(this, input);
290
+ }
291
+ getPullRequestDiff(input) {
292
+ return pulls.getPullRequestDiff(this, input);
293
+ }
294
+ updatePullRequest(input, onDelta) {
295
+ return pulls.updatePullRequest(this, input, onDelta);
296
+ }
297
+ getPullRequestCommits(input) {
298
+ return pulls.getPullRequestCommits(this, input);
299
+ }
300
+ createPullRequestReviewComment(input, options = {}, onDelta) {
301
+ return pulls.createPullRequestReviewComment(this, input, options, onDelta);
302
+ }
303
+ addReplyToPullRequestComment(input, options = {}, onDelta) {
304
+ return pulls.addReplyToPullRequestComment(this, input, options, onDelta);
305
+ }
306
+ updateIssueComment(input, onDelta) {
307
+ return issues.updateIssueComment(this, input, onDelta);
308
+ }
309
+ deleteIssueComment(input, onDelta) {
310
+ return issues.deleteIssueComment(this, input, onDelta);
311
+ }
312
+ listMilestones(input) {
313
+ return issues.listMilestones(this, input);
314
+ }
315
+ createMilestone(input, onDelta) {
316
+ return issues.createMilestone(this, input, onDelta);
317
+ }
318
+ updateMilestone(input, onDelta) {
319
+ return issues.updateMilestone(this, input, onDelta);
320
+ }
321
+ deleteMilestone(input, onDelta) {
322
+ return issues.deleteMilestone(this, input, onDelta);
323
+ }
324
+ createCommitStatus(input, onDelta) {
325
+ return checks.createCommitStatus(this, input, onDelta);
326
+ }
327
+ getCombinedStatusForRef(input) {
328
+ return checks.getCombinedStatusForRef(this, input);
329
+ }
330
+ createCheckRun(input, onDelta) {
331
+ return checks.createCheckRun(this, input, onDelta);
332
+ }
333
+ listCheckRunsForRef(input) {
334
+ return checks.listCheckRunsForRef(this, input);
335
+ }
336
+ listTags(input) {
337
+ return releases.listTags(this, input);
338
+ }
339
+ listReleases(input) {
340
+ return releases.listReleases(this, input);
341
+ }
342
+ getLatestRelease(input) {
343
+ return releases.getLatestRelease(this, input);
344
+ }
345
+ getReleaseByTag(input) {
346
+ return releases.getReleaseByTag(this, input);
347
+ }
348
+ getTag(input) {
349
+ return releases.getTag(this, input);
350
+ }
351
+ createRelease(input, options = {}, onDelta) {
352
+ return releases.createRelease(this, input, options, onDelta);
353
+ }
354
+ getMe(input = {}) {
355
+ return repos.getMe(this, input);
356
+ }
357
+ addCollaboratorAction(input, onDelta) {
358
+ return repos.addCollaboratorAction(this, input, onDelta);
359
+ }
360
+ // ----- shared helpers (used by domain/* modules) -----
361
+ latestCommitStatuses(repoId, sha) {
362
+ const statuses = this.db.prepare("SELECT * FROM commit_statuses WHERE repo_id = ? AND sha = ? ORDER BY updated_at DESC, id DESC").all(repoId, sha);
363
+ const latestByContext = new Map();
364
+ for (const status of statuses) {
365
+ if (!latestByContext.has(status.context))
366
+ latestByContext.set(status.context, status);
367
+ }
368
+ return [...latestByContext.values()];
369
+ }
370
+ // ===== private helpers added for v2 hot paths ============================
371
+ requireCommitOnRepo(repoId, sha) {
372
+ const exists = this.db.prepare("SELECT 1 FROM commits WHERE repo_id = ? AND sha = ?").get(repoId, sha);
373
+ if (!exists)
374
+ notFound("No commit found for SHA");
375
+ }
376
+ resolveCommitByRef(repo, ref) {
377
+ // Try as SHA first.
378
+ const byHash = this.db.prepare("SELECT * FROM commits WHERE repo_id = ? AND sha = ?").get(repo.id, ref);
379
+ if (byHash)
380
+ return byHash;
381
+ // Try as branch name.
382
+ const branch = this.getBranch(repo.id, ref);
383
+ if (branch?.head_sha) {
384
+ const commit = this.db.prepare("SELECT * FROM commits WHERE repo_id = ? AND sha = ?").get(repo.id, branch.head_sha);
385
+ if (commit)
386
+ return commit;
387
+ }
388
+ // Try as tag name.
389
+ const tag = this.db.prepare("SELECT * FROM tags WHERE repo_id = ? AND name = ?").get(repo.id, ref);
390
+ if (tag) {
391
+ const commit = this.db.prepare("SELECT * FROM commits WHERE repo_id = ? AND sha = ?").get(repo.id, tag.commit_sha);
392
+ if (commit)
393
+ return commit;
394
+ }
395
+ notFound("No commit found for ref");
396
+ }
397
+ resolveRefToSha(repo, ref) {
398
+ return this.resolveCommitByRef(repo, ref).sha;
399
+ }
400
+ commitAncestry(repoId, sha) {
401
+ const all = this.db.prepare("SELECT * FROM commits WHERE repo_id = ?").all(repoId);
402
+ const bySha = new Map(all.map((commit) => [commit.sha, commit]));
403
+ const out = [];
404
+ const seen = new Set();
405
+ const MAX_DEPTH = 2000;
406
+ let cursor = sha;
407
+ while (cursor && out.length < MAX_DEPTH) {
408
+ if (seen.has(cursor))
409
+ break;
410
+ seen.add(cursor);
411
+ const commit = bySha.get(cursor);
412
+ if (!commit)
413
+ break;
414
+ out.push(commit);
415
+ cursor = commit.parent_sha;
416
+ }
417
+ return out;
418
+ }
419
+ findMergeBase(baseRepo, baseSha, headRepo, headSha) {
420
+ if (!baseSha || !headSha)
421
+ return null;
422
+ const headAncestry = this.commitAncestry(headRepo.id, headSha);
423
+ const headShas = new Set(headAncestry.map((commit) => commit.sha));
424
+ // Fork heads carry copies of the base commits with randomized SHAs
425
+ // (copyForkCommits salts makeSha with a UUID), but the copy preserves
426
+ // message/authors/tree_sha/created_at verbatim — match cross-repo
427
+ // ancestry on that identity tuple. Returns the base-space SHA.
428
+ const headKeys = baseRepo.id === headRepo.id ? null : new Set(headAncestry.map((commit) => commitIdentityKey(commit)));
429
+ for (const commit of this.commitAncestry(baseRepo.id, baseSha)) {
430
+ if (headShas.has(commit.sha))
431
+ return commit.sha;
432
+ if (headKeys?.has(commitIdentityKey(commit)))
433
+ return commit.sha;
434
+ }
435
+ return null;
436
+ }
437
+ /** File state (path → blob) as of a commit, reconstructed from file_versions. */
438
+ fileStateAtCommit(repoId, sha) {
439
+ const state = new Map();
440
+ if (!sha)
441
+ return state;
442
+ const seen = new Set();
443
+ for (const commit of this.commitAncestry(repoId, sha)) {
444
+ const versions = this.db.prepare("SELECT path, content, sha, status FROM file_versions WHERE repo_id = ? AND commit_sha = ?").all(repoId, commit.sha);
445
+ for (const version of versions) {
446
+ if (seen.has(version.path))
447
+ continue;
448
+ seen.add(version.path);
449
+ if (version.status !== "removed")
450
+ state.set(version.path, { content: version.content, sha: version.sha });
451
+ }
452
+ }
453
+ return state;
454
+ }
455
+ /** Net base-branch changes since the merge base, skipping paths the head branch also touched (head wins). */
456
+ mergeChangesFromBase(baseRepo, baseRef, headRepo, headRef, mergeBase) {
457
+ const branchFiles = (repoId, branch) => new Map(this.db.prepare("SELECT * FROM files WHERE repo_id = ? AND branch = ?").all(repoId, branch).map((file) => [file.path, file]));
458
+ const baseNow = branchFiles(baseRepo.id, baseRef);
459
+ const headNow = branchFiles(headRepo.id, headRef);
460
+ const atMergeBase = this.fileStateAtCommit(baseRepo.id, mergeBase);
461
+ const changes = [];
462
+ for (const path of new Set([...baseNow.keys(), ...atMergeBase.keys()])) {
463
+ const current = baseNow.get(path);
464
+ const original = atMergeBase.get(path);
465
+ if (current?.sha === original?.sha)
466
+ continue;
467
+ if (headNow.get(path)?.sha !== original?.sha)
468
+ continue;
469
+ if (!current)
470
+ changes.push({ path, content: "", delete: true });
471
+ else
472
+ changes.push({ path, content: current.content });
473
+ }
474
+ return changes;
475
+ }
476
+ commitsBetween(repoId, headSha, baseSha) {
477
+ const ancestry = this.commitAncestry(repoId, headSha);
478
+ if (!baseSha)
479
+ return ancestry;
480
+ const stopIndex = ancestry.findIndex((commit) => commit.sha === baseSha);
481
+ if (stopIndex === -1)
482
+ return ancestry;
483
+ return ancestry.slice(0, stopIndex);
484
+ }
485
+ computeCommitFiles(repo, commit) {
486
+ const versions = this.db.prepare("SELECT path, content, sha, status FROM file_versions WHERE repo_id = ? AND commit_sha = ?").all(repo.id, commit.sha);
487
+ return versions.map((version) => {
488
+ const additions = version.status === "removed" ? 0 : version.content.split("\n").filter(Boolean).length || 1;
489
+ const deletions = version.status === "added" ? 0 : version.content.split("\n").filter(Boolean).length || 0;
490
+ return {
491
+ repo_id: repo.id,
492
+ pull_number: 0,
493
+ filename: version.path,
494
+ status: version.status,
495
+ additions,
496
+ deletions,
497
+ changes: additions + deletions,
498
+ blob_url: `https://github.com/${repo.full_name}/blob/${commit.sha}/${version.path}`,
499
+ raw_url: `https://raw.githubusercontent.com/${repo.full_name}/${commit.sha}/${version.path}`,
500
+ contents_url: `https://api.github.com/repos/${repo.full_name}/contents/${version.path}?ref=${commit.sha}`,
501
+ patch: `@@ ${version.path} @@`
502
+ };
503
+ });
504
+ }
505
+ computeCompareFiles(repo, base, head) {
506
+ // Build path → latest version snapshot at each commit by walking ancestry
507
+ // and folding file_versions. Used by /compare.
508
+ const baseSnapshot = this.snapshotAtCommit(repo.id, base.sha);
509
+ const headSnapshot = this.snapshotAtCommit(repo.id, head.sha);
510
+ const paths = [...new Set([...baseSnapshot.keys(), ...headSnapshot.keys()])].sort();
511
+ const rows = [];
512
+ for (const path of paths) {
513
+ const baseFile = baseSnapshot.get(path);
514
+ const headFile = headSnapshot.get(path);
515
+ if (baseFile?.sha === headFile?.sha)
516
+ continue;
517
+ const diff = linesChanged(baseFile?.content, headFile?.content ?? "");
518
+ rows.push({
519
+ repo_id: repo.id,
520
+ pull_number: 0,
521
+ filename: path,
522
+ status: baseFile && headFile ? "modified" : headFile ? "added" : "removed",
523
+ additions: diff.additions,
524
+ deletions: headFile ? diff.deletions : (baseFile?.content.split("\n").length ?? 0),
525
+ changes: diff.additions + diff.deletions,
526
+ blob_url: `https://github.com/${repo.full_name}/blob/${head.sha}/${path}`,
527
+ raw_url: `https://raw.githubusercontent.com/${repo.full_name}/${head.sha}/${path}`,
528
+ contents_url: `https://api.github.com/repos/${repo.full_name}/contents/${path}?ref=${head.sha}`,
529
+ patch: `@@ ${path} @@`
530
+ });
531
+ }
532
+ return rows;
533
+ }
534
+ snapshotAtCommit(repoId, sha) {
535
+ // Walk ancestry oldest → newest, folding file_versions per path. Removed rows clear the entry.
536
+ const ancestry = this.commitAncestry(repoId, sha).reverse();
537
+ const out = new Map();
538
+ for (const commit of ancestry) {
539
+ const versions = this.db.prepare("SELECT path, content, sha, status FROM file_versions WHERE repo_id = ? AND commit_sha = ?").all(repoId, commit.sha);
540
+ for (const version of versions) {
541
+ if (version.status === "removed")
542
+ out.delete(version.path);
543
+ else
544
+ out.set(version.path, { content: version.content, sha: version.sha });
545
+ }
546
+ }
547
+ return out;
548
+ }
549
+ nextMilestoneNumber(repoId) {
550
+ const row = this.db.prepare("SELECT COALESCE(MAX(number), 0) AS max FROM milestones WHERE repo_id = ?").get(repoId);
551
+ return row.max + 1;
552
+ }
553
+ transaction(fn) {
554
+ return this.db.transaction(fn).immediate();
555
+ }
556
+ insertRepository(input) {
557
+ const now = nowIso();
558
+ this.db.prepare("INSERT INTO repositories (owner, name, full_name, description, private, default_branch, fork, parent_full_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(input.owner, input.name, `${input.owner}/${input.name}`, input.description, input.private ? 1 : 0, input.defaultBranch, input.fork ? 1 : 0, input.parentFullName, now, now);
559
+ return this.requireRepo(input.owner, input.name);
560
+ }
561
+ copyForkCommits(source, fork) {
562
+ const sourceCommits = this.db.prepare("SELECT * FROM commits WHERE repo_id = ?").all(source.id);
563
+ const bySha = new Map(sourceCommits.map((commit) => [commit.sha, commit]));
564
+ const copied = new Map();
565
+ const copyCommit = (commit) => {
566
+ const existing = copied.get(commit.sha);
567
+ if (existing)
568
+ return existing;
569
+ const parent = commit.parent_sha ? bySha.get(commit.parent_sha) : undefined;
570
+ const parentSha = parent ? copyCommit(parent) : null;
571
+ const sha = makeSha(fork.full_name, commit.sha);
572
+ copied.set(commit.sha, sha);
573
+ this.db.prepare("INSERT INTO commits (sha, repo_id, message, author_login, committer_login, parent_sha, tree_sha, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(sha, fork.id, commit.message, commit.author_login, commit.committer_login, parentSha, commit.tree_sha, commit.created_at);
574
+ const versions = this.db.prepare("SELECT path, content, sha, status FROM file_versions WHERE repo_id = ? AND commit_sha = ?").all(source.id, commit.sha);
575
+ for (const version of versions) {
576
+ this.db.prepare("INSERT INTO file_versions (commit_sha, repo_id, path, content, sha, status) VALUES (?, ?, ?, ?, ?, ?)").run(sha, fork.id, version.path, version.content, version.sha, version.status);
577
+ }
578
+ return sha;
579
+ };
580
+ for (const commit of sourceCommits)
581
+ copyCommit(commit);
582
+ return copied;
583
+ }
584
+ commitFiles(repo, branchName, message, files, actor) {
585
+ const branch = this.requireBranch(repo.id, branchName);
586
+ const now = nowIso();
587
+ const normalizedFiles = files.map((file) => ({ ...file, path: normalizePath(file.path) }));
588
+ const existingPaths = this.db.prepare("SELECT path FROM files WHERE repo_id = ? AND branch = ? ORDER BY path").all(repo.id, branchName).map((row) => row.path);
589
+ const nextPaths = new Set(existingPaths);
590
+ for (const file of normalizedFiles) {
591
+ if (file.delete)
592
+ nextPaths.delete(file.path);
593
+ else
594
+ nextPaths.add(file.path);
595
+ }
596
+ const sha = makeSha(repo.full_name, branchName, message, normalizedFiles, now);
597
+ const commit = {
598
+ sha,
599
+ repo_id: repo.id,
600
+ message,
601
+ author_login: actor,
602
+ committer_login: actor,
603
+ parent_sha: branch.head_sha,
604
+ tree_sha: treeSha([...nextPaths]),
605
+ created_at: now
606
+ };
607
+ this.db.prepare("INSERT INTO commits (sha, repo_id, message, author_login, committer_login, parent_sha, tree_sha, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(commit.sha, commit.repo_id, commit.message, commit.author_login, commit.committer_login, commit.parent_sha, commit.tree_sha, commit.created_at);
608
+ for (const file of normalizedFiles) {
609
+ const path = file.path;
610
+ const existing = this.getFile(repo.id, branchName, path);
611
+ if (file.delete) {
612
+ if (!existing)
613
+ validationFailed("files", "missing", path);
614
+ this.db.prepare("INSERT INTO file_versions (commit_sha, repo_id, path, content, sha, status) VALUES (?, ?, ?, ?, ?, 'removed')").run(commit.sha, repo.id, path, existing.content, existing.sha);
615
+ this.db.prepare("DELETE FROM files WHERE repo_id = ? AND branch = ? AND path = ?").run(repo.id, branchName, path);
616
+ continue;
617
+ }
618
+ const sha = fileSha(file.content);
619
+ this.db.prepare("INSERT INTO file_versions (commit_sha, repo_id, path, content, sha, status) VALUES (?, ?, ?, ?, ?, ?)").run(commit.sha, repo.id, path, file.content, sha, existing ? "modified" : "added");
620
+ this.db.prepare("INSERT INTO files (repo_id, branch, path, content, sha, size, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(repo_id, branch, path) DO UPDATE SET content = excluded.content, sha = excluded.sha, size = excluded.size, updated_at = excluded.updated_at").run(repo.id, branchName, path, file.content, sha, Buffer.byteLength(file.content), now);
621
+ }
622
+ this.db.prepare("UPDATE branches SET head_sha = ?, updated_at = ? WHERE repo_id = ? AND name = ?").run(commit.sha, now, repo.id, branchName);
623
+ this.db.prepare("UPDATE repositories SET updated_at = ? WHERE id = ?").run(now, repo.id);
624
+ return commit;
625
+ }
626
+ calculatePullFiles(baseRepo, baseRef, headRepo, headRef) {
627
+ const baseFiles = new Map(this.db.prepare("SELECT * FROM files WHERE repo_id = ? AND branch = ?").all(baseRepo.id, baseRef).map((file) => [file.path, file]));
628
+ const headFiles = new Map(this.db.prepare("SELECT * FROM files WHERE repo_id = ? AND branch = ?").all(headRepo.id, headRef).map((file) => [file.path, file]));
629
+ const paths = [...new Set([...baseFiles.keys(), ...headFiles.keys()])].sort();
630
+ const rows = [];
631
+ for (const path of paths) {
632
+ const base = baseFiles.get(path);
633
+ const head = headFiles.get(path);
634
+ if (base?.sha === head?.sha)
635
+ continue;
636
+ const diff = linesChanged(base?.content, head?.content ?? "");
637
+ rows.push({
638
+ repo_id: baseRepo.id,
639
+ pull_number: 0,
640
+ filename: path,
641
+ status: base && head ? "modified" : head ? "added" : "removed",
642
+ additions: diff.additions,
643
+ deletions: head ? diff.deletions : base?.content.split("\n").length ?? 0,
644
+ changes: diff.additions + diff.deletions,
645
+ blob_url: `https://github.com/${headRepo.full_name}/blob/${headRef}/${path}`,
646
+ raw_url: `https://raw.githubusercontent.com/${headRepo.full_name}/${headRef}/${path}`,
647
+ contents_url: `https://api.github.com/repos/${headRepo.full_name}/contents/${path}`,
648
+ patch: `@@ ${path} @@`
649
+ });
650
+ }
651
+ return rows;
652
+ }
653
+ replacePullFiles(repoId, pullNumber, files) {
654
+ this.db.prepare("DELETE FROM pull_request_files WHERE repo_id = ? AND pull_number = ?").run(repoId, pullNumber);
655
+ for (const file of files) {
656
+ this.db.prepare("INSERT INTO pull_request_files (repo_id, pull_number, filename, status, additions, deletions, changes, blob_url, raw_url, contents_url, patch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(repoId, pullNumber, file.filename, file.status, file.additions, file.deletions, file.changes, file.blob_url, file.raw_url, file.contents_url, file.patch);
657
+ }
658
+ }
659
+ // Single-PR GET (full PullRequest shape: keeps merged / commits / additions /
660
+ // deletions / changed_files).
661
+ serializePull(pr) {
662
+ const baseRepo = this.requireRepoById(pr.base_repo_id);
663
+ const headRepo = this.requireRepoById(pr.head_repo_id);
664
+ const files = this.db.prepare("SELECT * FROM pull_request_files WHERE repo_id = ? AND pull_number = ?").all(pr.repo_id, pr.number);
665
+ const headSha = this.getBranch(headRepo.id, pr.head_ref)?.head_sha ?? pr.head_sha;
666
+ const baseSha = this.getBranch(baseRepo.id, pr.base_ref)?.head_sha ?? pr.base_sha;
667
+ return pullRequestJson(pr, baseRepo, headRepo, 1, files.length, headSha, baseSha);
668
+ }
669
+ // LIST endpoint (leaner PullRequestSimple shape: drops the single-PR-only
670
+ // diff-stat fields, matching real GitHub).
671
+ serializePullSimple(pr) {
672
+ const baseRepo = this.requireRepoById(pr.base_repo_id);
673
+ const headRepo = this.requireRepoById(pr.head_repo_id);
674
+ const headSha = this.getBranch(headRepo.id, pr.head_ref)?.head_sha ?? pr.head_sha;
675
+ const baseSha = this.getBranch(baseRepo.id, pr.base_ref)?.head_sha ?? pr.base_sha;
676
+ return pullRequestListJson(pr, baseRepo, headRepo, headSha, baseSha);
677
+ }
678
+ resolveHeadRef(baseRepo, head) {
679
+ const [owner, ref] = head.includes(":") ? head.split(":", 2) : [baseRepo.owner, head];
680
+ const repo = this.requireRepo(owner, baseRepo.name);
681
+ return { repo, ref: ref };
682
+ }
683
+ listDirectory(repo, branch, path) {
684
+ const prefix = path ? `${path}/` : "";
685
+ const rows = this.db.prepare("SELECT * FROM files WHERE repo_id = ? AND branch = ? AND path LIKE ? ORDER BY path ASC").all(repo.id, branch, `${prefix}%`);
686
+ const seen = new Set();
687
+ const entries = [];
688
+ for (const file of rows) {
689
+ const rest = file.path.slice(prefix.length);
690
+ const first = rest.split("/")[0];
691
+ const childPath = prefix ? `${prefix}${first}` : first;
692
+ if (seen.has(childPath))
693
+ continue;
694
+ seen.add(childPath);
695
+ entries.push(contentDirectoryEntryJson(childPath, repo, branch, rest.includes("/") ? undefined : file));
696
+ }
697
+ return entries;
698
+ }
699
+ createBranchInternal(repo, name, headSha) {
700
+ const now = nowIso();
701
+ this.db.prepare("INSERT INTO branches (repo_id, name, head_sha, created_at, updated_at) VALUES (?, ?, ?, ?, ?)").run(repo.id, name, headSha, now, now);
702
+ return this.requireBranch(repo.id, name);
703
+ }
704
+ upsertUser(login, type, name) {
705
+ this.db.prepare("INSERT INTO users (login, type, name, created_at) VALUES (?, ?, ?, ?) ON CONFLICT(login) DO UPDATE SET type = excluded.type, name = excluded.name").run(login, type, name, nowIso());
706
+ }
707
+ addCollaborator(repoId, login) {
708
+ this.upsertUser(login, "User", login);
709
+ this.db.prepare("INSERT OR IGNORE INTO collaborators (repo_id, login, permission) VALUES (?, ?, 'push')").run(repoId, login);
710
+ }
711
+ createLabel(repo, name, color, description) {
712
+ this.db.prepare("INSERT OR IGNORE INTO labels (repo_id, name, color, description) VALUES (?, ?, ?, ?)").run(repo.id, name, color, description);
713
+ return labelJson(this.getLabel(repo.id, name));
714
+ }
715
+ getRepo(owner, repo) {
716
+ return this.db.prepare("SELECT * FROM repositories WHERE owner = ? AND name = ?").get(owner, repo);
717
+ }
718
+ requireRepo(owner, repo) {
719
+ return this.getRepo(owner, repo) ?? notFound("Not Found");
720
+ }
721
+ requireRepoById(repoId) {
722
+ return this.db.prepare("SELECT * FROM repositories WHERE id = ?").get(repoId) ?? notFound("Not Found");
723
+ }
724
+ getBranch(repoId, name) {
725
+ return this.db.prepare("SELECT * FROM branches WHERE repo_id = ? AND name = ?").get(repoId, name);
726
+ }
727
+ requireBranch(repoId, name) {
728
+ return this.getBranch(repoId, name) ?? notFound("Branch not found");
729
+ }
730
+ listBranches(repoId) {
731
+ return this.db.prepare("SELECT * FROM branches WHERE repo_id = ? ORDER BY name ASC").all(repoId);
732
+ }
733
+ getFile(repoId, branch, path) {
734
+ return this.db.prepare("SELECT * FROM files WHERE repo_id = ? AND branch = ? AND path = ?").get(repoId, branch, path);
735
+ }
736
+ getLabel(repoId, name) {
737
+ return this.db.prepare("SELECT * FROM labels WHERE repo_id = ? AND name = ?").get(repoId, name);
738
+ }
739
+ listLabels(repoId) {
740
+ return this.db.prepare("SELECT * FROM labels WHERE repo_id = ? ORDER BY name ASC").all(repoId);
741
+ }
742
+ listIssuesRows(repoId) {
743
+ return this.db.prepare("SELECT * FROM issues WHERE repo_id = ? ORDER BY number ASC").all(repoId);
744
+ }
745
+ requireIssue(repoId, number) {
746
+ return this.db.prepare("SELECT * FROM issues WHERE repo_id = ? AND number = ?").get(repoId, number) ?? notFound("Issue not found");
747
+ }
748
+ listIssueLabels(repoId, issueNumber) {
749
+ return this.db
750
+ .prepare("SELECT labels.* FROM labels INNER JOIN issue_labels ON labels.repo_id = issue_labels.repo_id AND labels.name = issue_labels.label_name WHERE issue_labels.repo_id = ? AND issue_labels.issue_number = ? ORDER BY labels.name ASC")
751
+ .all(repoId, issueNumber);
752
+ }
753
+ listIssueAssignees(repoId, issueNumber) {
754
+ const rows = this.db.prepare("SELECT login FROM issue_assignees WHERE repo_id = ? AND issue_number = ? ORDER BY login ASC").all(repoId, issueNumber);
755
+ return rows.map((row) => row.login);
756
+ }
757
+ issueCommentCount(repoId, issueNumber) {
758
+ const row = this.db.prepare("SELECT COUNT(*) AS count FROM issue_comments WHERE repo_id = ? AND issue_number = ?").get(repoId, issueNumber);
759
+ return row.count;
760
+ }
761
+ listIssueCommentRows(repoId, issueNumber) {
762
+ return this.db.prepare("SELECT * FROM issue_comments WHERE repo_id = ? AND issue_number = ? ORDER BY id ASC").all(repoId, issueNumber);
763
+ }
764
+ hasCollaborator(repoId, login) {
765
+ return Boolean(this.db.prepare("SELECT 1 FROM collaborators WHERE repo_id = ? AND login = ?").get(repoId, login));
766
+ }
767
+ listPullRequestRows(repoId) {
768
+ return this.db.prepare("SELECT * FROM pull_requests WHERE repo_id = ? ORDER BY number ASC").all(repoId);
769
+ }
770
+ listPullRequestFileRows(repoId, pullNumber) {
771
+ return this.db.prepare("SELECT * FROM pull_request_files WHERE repo_id = ? AND pull_number = ? ORDER BY filename ASC").all(repoId, pullNumber);
772
+ }
773
+ listPullRequestReviewRows(repoId, pullNumber) {
774
+ return this.db.prepare("SELECT * FROM pull_request_reviews WHERE repo_id = ? AND pull_number = ? ORDER BY submitted_at ASC").all(repoId, pullNumber);
775
+ }
776
+ listPullRequestReviewCommentRows(repoId, pullNumber) {
777
+ return this.db.prepare("SELECT * FROM pull_request_review_comments WHERE repo_id = ? AND pull_number = ? ORDER BY id ASC").all(repoId, pullNumber);
778
+ }
779
+ requirePullRequest(repoId, number) {
780
+ return this.db.prepare("SELECT * FROM pull_requests WHERE repo_id = ? AND number = ?").get(repoId, number) ?? notFound("Pull request not found");
781
+ }
782
+ nextNumber(repoId) {
783
+ this.db.prepare("UPDATE repositories SET entity_counter = entity_counter + 1 WHERE id = ?").run(repoId);
784
+ const row = this.db.prepare("SELECT entity_counter AS next FROM repositories WHERE id = ?").get(repoId);
785
+ return row.next;
786
+ }
787
+ bumpEntityCounter(repoId, number) {
788
+ this.db.prepare("UPDATE repositories SET entity_counter = CASE WHEN entity_counter < ? THEN ? ELSE entity_counter END WHERE id = ?").run(number, number, repoId);
789
+ }
790
+ audit(action, repoFullName, payload) {
791
+ this.db.prepare("INSERT INTO audit_log (ts, action, repo_full_name, payload_json) VALUES (?, ?, ?, ?)").run(nowIso(), action, repoFullName, JSON.stringify(payload));
792
+ }
793
+ }
794
+ //# sourceMappingURL=github-domain.js.map