@pome-sh/cli 0.8.0 → 0.10.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-identity.js +7 -2
  3. package/dist/src/cli/agent-resolver.d.ts +3 -0
  4. package/dist/src/cli/agent-resolver.js +10 -0
  5. package/dist/src/cli/checks-add.d.ts +32 -0
  6. package/dist/src/cli/checks-add.js +236 -0
  7. package/dist/src/cli/checks.d.ts +21 -0
  8. package/dist/src/cli/checks.js +150 -0
  9. package/dist/src/cli/compile-seeds.js +51 -5
  10. package/dist/src/cli/main.js +49 -11
  11. package/dist/src/cli/project-config.d.ts +8 -0
  12. package/dist/src/cli/project-config.js +18 -0
  13. package/dist/src/cli/register.d.ts +15 -0
  14. package/dist/src/cli/register.js +26 -3
  15. package/dist/src/cli/session.d.ts +10 -0
  16. package/dist/src/cli/session.js +28 -2
  17. package/dist/src/fix-prompt/index.d.ts +1 -1
  18. package/dist/src/fix-prompt/index.js +2 -2
  19. package/dist/src/fix-prompt/prompt.d.ts +2 -2
  20. package/dist/src/fix-prompt/prompt.js +9 -9
  21. package/dist/src/hosted/client.d.ts +8 -2
  22. package/dist/src/hosted/client.js +108 -26
  23. package/dist/src/hosted/errors.d.ts +14 -0
  24. package/dist/src/hosted/errors.js +22 -0
  25. package/dist/src/hosted/evalResultCache.d.ts +4 -4
  26. package/dist/src/hosted/evalResultCache.js +10 -3
  27. package/dist/src/recorder/artifacts.d.ts +1 -1
  28. package/dist/src/recorder/artifacts.js +8 -1
  29. package/dist/src/runner/runTask.d.ts +10 -10
  30. package/dist/src/runner/runTaskHosted.js +9 -2
  31. package/dist/src/runner/runTrialGroup.js +4 -1
  32. package/dist/src/task/insertCriterion.d.ts +15 -0
  33. package/dist/src/task/insertCriterion.js +62 -0
  34. package/dist/src/task/parseTask.d.ts +5 -0
  35. package/dist/src/task/parseTask.js +11 -0
  36. package/dist/src/task/taskSchema.d.ts +4 -4
  37. package/node_modules/@pome-sh/sdk/dist/checks.d.ts +54 -0
  38. package/node_modules/@pome-sh/sdk/dist/checks.js +143 -0
  39. package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -0
  40. package/node_modules/@pome-sh/sdk/package.json +7 -3
  41. package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
  42. package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +21 -0
  43. package/node_modules/@pome-sh/twin-github/dist/src/checks.js +90 -0
  44. package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -0
  45. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.d.ts +153 -0
  46. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js +66 -0
  47. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js.map +1 -0
  48. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.d.ts +567 -0
  49. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js +198 -0
  50. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js.map +1 -0
  51. package/node_modules/@pome-sh/twin-github/dist/src/{domain.d.ts → domain/github-domain.d.ts} +340 -71
  52. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js +794 -0
  53. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js.map +1 -0
  54. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.d.ts +5 -0
  55. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js +15 -0
  56. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js.map +1 -0
  57. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.d.ts +2 -0
  58. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js +5 -0
  59. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js.map +1 -0
  60. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.d.ts +545 -0
  61. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js +272 -0
  62. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js.map +1 -0
  63. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.d.ts +816 -0
  64. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js +256 -0
  65. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js.map +1 -0
  66. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.d.ts +160 -0
  67. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js +63 -0
  68. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js.map +1 -0
  69. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.d.ts +219 -0
  70. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js +131 -0
  71. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js.map +1 -0
  72. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.d.ts +252 -0
  73. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js +83 -0
  74. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js.map +1 -0
  75. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.d.ts +15 -0
  76. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js +2 -0
  77. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js.map +1 -0
  78. package/node_modules/@pome-sh/twin-github/dist/src/index.d.ts +2 -1
  79. package/node_modules/@pome-sh/twin-github/dist/src/index.js +1 -1
  80. package/node_modules/@pome-sh/twin-github/dist/src/index.js.map +1 -1
  81. package/node_modules/@pome-sh/twin-github/dist/src/routes.d.ts +1 -1
  82. package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
  83. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +3 -3
  84. package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +188 -188
  85. package/node_modules/@pome-sh/twin-github/dist/src/twin.d.ts +1 -1
  86. package/node_modules/@pome-sh/twin-github/dist/src/twin.js +1 -1
  87. package/node_modules/@pome-sh/twin-github/dist/src/twin.js.map +1 -1
  88. package/node_modules/@pome-sh/twin-github/package.json +4 -4
  89. package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/package.json +2 -2
  90. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  91. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  92. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  93. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  94. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  95. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  96. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  97. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  98. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  99. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  100. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  101. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  102. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  103. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  104. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  105. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  106. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  107. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  108. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  109. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  110. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  111. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  112. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  113. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  114. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  115. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  116. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  117. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  118. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  119. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  120. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  121. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  122. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  123. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  124. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  125. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  126. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  127. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  128. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  129. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  130. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  131. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  132. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  133. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  134. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  135. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  136. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  137. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  138. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/package.json +54 -0
  139. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
  140. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
  141. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
  142. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
  143. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
  144. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
  145. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
  146. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
  147. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
  148. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
  149. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/package.json +2 -1
  150. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
  151. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  152. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  153. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  154. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  155. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  156. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  157. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  158. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  159. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  160. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  161. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  162. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  163. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  164. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  165. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  166. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  167. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  168. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  169. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  170. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  171. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  172. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  173. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  174. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  175. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  176. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  177. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  178. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  179. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  180. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  181. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  182. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  183. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  184. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  185. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  186. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  187. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  188. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  189. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  190. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  191. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  192. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  193. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  194. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  195. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  196. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  197. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  198. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  199. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +54 -0
  200. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  201. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  202. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  203. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  204. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  205. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  206. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  207. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  208. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  209. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  210. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  211. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  212. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  213. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  214. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  215. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  216. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  217. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  218. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  219. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  220. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  221. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  222. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  223. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  224. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  225. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  226. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  227. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  228. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  229. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  230. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  231. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  232. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  233. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  234. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  235. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  236. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  237. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  238. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  239. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  240. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  241. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  242. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  243. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  244. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  245. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  246. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  247. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  248. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +54 -0
  249. package/package.json +3 -3
  250. package/tasks/00-default-seed.md +1 -1
  251. package/tasks/01-bug-happy-path.md +1 -1
  252. package/tasks/03-already-triaged.md +1 -1
  253. package/tasks/06-mislabeled-needs-fix.md +1 -1
  254. package/tasks/17-in-scope-injection.md +1 -1
  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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "pome-sh",
3
- "version": "0.8.0",
4
- "git_sha": "a0a02905d653d8527558dd2bd64ad5eaded24d07",
5
- "build_time": "2026-07-24T22:05:00.539Z"
3
+ "version": "0.10.0",
4
+ "git_sha": "14613c1a69d37441adc719248f0a506d7db76da9",
5
+ "build_time": "2026-07-28T23:09:18.070Z"
6
6
  }
@@ -13,7 +13,7 @@ import { dirname } from "node:path";
13
13
  import { postAgentResolver, resolveSeams, } from "./agent-resolver.js";
14
14
  import { resolveCredentials } from "./credentials.js";
15
15
  import { ensurePomeGitignored, readLinkCache, resolveCachedAgentId, writeLinkCache, } from "./link-cache.js";
16
- import { readManifest } from "./project-config.js";
16
+ import { normalizeManifestTwins, readManifest } from "./project-config.js";
17
17
  export async function resolveRunAgentIdentity(input) {
18
18
  const manifestRead = await readManifest(input.startDir);
19
19
  if (!manifestRead) {
@@ -38,13 +38,18 @@ export async function resolveRunAgentIdentity(input) {
38
38
  if (cachedId) {
39
39
  return { ...base, agentId: cachedId };
40
40
  }
41
- // Silent re-resolution — a run never prompts for a near-miss.
41
+ // Silent re-resolution — a run never prompts for a near-miss. Send the
42
+ // manifest's twins so a fork / first `pome run` that auto-creates the agent
43
+ // enables the declared services instead of the server's `github` default
44
+ // (F-926); the server merges additively, so this is safe when the agent
45
+ // already exists.
42
46
  const resolved = await postAgentResolver(creds, {
43
47
  name: agent.name ?? agent.slug,
44
48
  slug: agent.slug,
45
49
  description: agent.description,
46
50
  version: agent.version,
47
51
  framework: agent.framework,
52
+ twins: normalizeManifestTwins(manifestRead.manifest.twins),
48
53
  }, resolveSeams({ stdinIsTTY: false }));
49
54
  if (creds.teamId) {
50
55
  await writeLinkCache(projectDir, { agent_id: resolved.id, team_id: creds.teamId });
@@ -4,6 +4,9 @@ import type { ResolvedCredentials } from "./credentials.js";
4
4
  export interface InteractiveSeams {
5
5
  stdinIsTTY?: boolean;
6
6
  confirm?: (question: string) => Promise<boolean>;
7
+ /** Free-text prompt. Added by F-1074: picking a check from a numbered list and
8
+ * filling its typed parameters needs an answer, not a yes/no. */
9
+ ask?: (question: string) => Promise<string>;
7
10
  }
8
11
  /** The manifest identity fields POSTed to the resolver. */
9
12
  export interface AgentPostBody {
@@ -11,6 +11,7 @@ export function resolveSeams(opts) {
11
11
  return {
12
12
  stdinIsTTY: opts.stdinIsTTY ?? Boolean(process.stdin.isTTY),
13
13
  confirm: opts.confirm ?? promptYesNo,
14
+ ask: opts.ask ?? promptLine,
14
15
  };
15
16
  }
16
17
  async function requestAgent(creds, body) {
@@ -119,3 +120,12 @@ async function promptYesNo(question) {
119
120
  rl.close();
120
121
  }
121
122
  }
123
+ async function promptLine(question) {
124
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
125
+ try {
126
+ return (await new Promise((resolve) => rl.question(question, resolve))).trim();
127
+ }
128
+ finally {
129
+ rl.close();
130
+ }
131
+ }
@@ -0,0 +1,32 @@
1
+ import { type InteractiveSeams } from "./agent-resolver.js";
2
+ export interface RemoteChecks {
3
+ twin: string;
4
+ digest: string;
5
+ checks: Array<{
6
+ id: string;
7
+ template: string;
8
+ substrate: string;
9
+ }>;
10
+ }
11
+ export type HandshakeResult = {
12
+ kind: "match";
13
+ } | {
14
+ kind: "skew";
15
+ message: string;
16
+ } | {
17
+ kind: "unverified";
18
+ note: string;
19
+ };
20
+ export declare function parseArgFlags(pairs: string[]): Record<string, string> | {
21
+ error: string;
22
+ };
23
+ export declare function handshake(twin: string, fetchRemote: (twin: string) => Promise<RemoteChecks>): Promise<HandshakeResult>;
24
+ export interface ChecksAddOptions extends InteractiveSeams {
25
+ check?: string;
26
+ arg: string[];
27
+ apiBaseUrl?: string;
28
+ /** Test seam — defaults to the live GET /v1/checks handshake. */
29
+ fetchRemote?: (twin: string) => Promise<RemoteChecks>;
30
+ credentialsPath?: string;
31
+ }
32
+ export declare function runChecksAddCommand(file: string, opts: ChecksAddOptions): Promise<void>;
@@ -0,0 +1,236 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * `pome checks add <file>` — pick a declared check, fill its typed parameters,
4
+ * and let pome write the English into the task file. The author never types the
5
+ * sentence, so it cannot fail to bind.
6
+ *
7
+ * The digest handshake: this CLI resolves declarations from its own npm pin and
8
+ * the cloud resolves them from a different one. Before writing, ask the cloud
9
+ * for the vocabulary it GRADES against and compare digests.
10
+ * equal → write, silently
11
+ * different → REFUSE, and name which check moved
12
+ * unreachable → write from the local pin with a named note on stderr
13
+ * Offline authoring is real, and the degraded path's worst case is bounded: a
14
+ * stale sentence that keeps a template's literal segments fails at finalize as
15
+ * `corrupted_check_instance:<id>` — named, not a silent unmatched.
16
+ */
17
+ import { readFile, writeFile } from "node:fs/promises";
18
+ import { renderCheck, templateSlots } from "@pome-sh/sdk/checks";
19
+ import { DuplicateCriterionError, MissingCriteriaSectionError, insertCriterion, } from "../task/insertCriterion.js";
20
+ import { readConfigTwins } from "../task/parseTask.js";
21
+ import { resolveSeams } from "./agent-resolver.js";
22
+ import { SUBSTRATE_HELP, checksFor, displaySentence, findCheck, localDigest, pinnedVersion, twinOf, } from "./checks.js";
23
+ import { resolveCredentials } from "./credentials.js";
24
+ export function parseArgFlags(pairs) {
25
+ const args = {};
26
+ for (const pair of pairs) {
27
+ const eq = pair.indexOf("=");
28
+ if (eq <= 0)
29
+ return { error: `--arg must be key=value, got ${JSON.stringify(pair)}` };
30
+ args[pair.slice(0, eq)] = pair.slice(eq + 1);
31
+ }
32
+ return args;
33
+ }
34
+ export async function handshake(twin, fetchRemote) {
35
+ const pin = pinnedVersion(`@pome-sh/twin-${twin}`);
36
+ let remote;
37
+ try {
38
+ remote = await fetchRemote(twin);
39
+ }
40
+ catch (err) {
41
+ return {
42
+ kind: "unverified",
43
+ note: `Not verified against the cloud (${err instanceof Error ? err.message : "unreachable"}). ` +
44
+ `Writing from the local pin: @pome-sh/twin-${twin} ${pin}.`,
45
+ };
46
+ }
47
+ if (localDigest(twin) === remote.digest)
48
+ return { kind: "match" };
49
+ const here = new Map(checksFor(twin).map((check) => [check.id, check.template]));
50
+ const there = new Map(remote.checks.map((check) => [check.id, check.template]));
51
+ const moved = [];
52
+ for (const [id, template] of here) {
53
+ if (!there.has(id))
54
+ moved.push(`${id} — this CLI has it, the cloud does not`);
55
+ else if (there.get(id) !== template) {
56
+ moved.push(`${id} — the sentence differs\n here: ${template}\n cloud: ${there.get(id)}`);
57
+ }
58
+ }
59
+ for (const id of there.keys()) {
60
+ if (!here.has(id))
61
+ moved.push(`${id} — the cloud has it, this CLI does not`);
62
+ }
63
+ return {
64
+ kind: "skew",
65
+ message: `Refusing to write: this CLI and the cloud disagree about ${twin}'s vocabulary, so a ` +
66
+ `sentence written here might not be graded there.\n` +
67
+ moved.map((line) => ` - ${line}`).join("\n") +
68
+ `\n\n local @pome-sh/twin-${twin} ${pin}` +
69
+ `\n Update with \`npm i -g @pome-sh/cli@latest\`. If this CLI is already current, the ` +
70
+ `cloud is behind — that is a deploy, not something you can fix here.`,
71
+ };
72
+ }
73
+ async function liveFetch(creds, twin) {
74
+ const res = await fetch(`${creds.apiBaseUrl}/v1/checks?twin=${encodeURIComponent(twin)}`, {
75
+ headers: { "x-api-key": creds.apiKey },
76
+ });
77
+ if (!res.ok)
78
+ throw new Error(`GET /v1/checks returned ${res.status}`);
79
+ return (await res.json());
80
+ }
81
+ async function pickInteractively(source, seams) {
82
+ // CI is not interactive even when stdin happens to be a TTY — the same guard
83
+ // as agent-resolver's, so a pipeline gets a named refusal, never a hang.
84
+ if (!seams.stdinIsTTY || process.env.CI) {
85
+ console.error("Not an interactive terminal. Pass `--check <id> --arg key=value` " +
86
+ "(run `pome checks <twin>` to see both).");
87
+ process.exitCode = 2;
88
+ return undefined;
89
+ }
90
+ const twins = readConfigTwins(source);
91
+ const available = twins.flatMap((twin) => [...checksFor(twin)]);
92
+ if (available.length === 0) {
93
+ console.error(`No declared checks for this task's twins (${twins.join(", ")}). ` +
94
+ `Use a [model] criterion, or run \`pome checks\` to see which twins declare one.`);
95
+ process.exitCode = 2;
96
+ return undefined;
97
+ }
98
+ console.log("Which check?");
99
+ available.forEach((def, i) => {
100
+ console.log(` ${i + 1}) ${displaySentence(def)}`);
101
+ console.log(` ${def.description}`);
102
+ console.log(` needs: ${SUBSTRATE_HELP[def.substrate] ?? def.substrate}`);
103
+ console.log("");
104
+ });
105
+ const answer = await seams.ask("> ");
106
+ const index = Number.parseInt(answer, 10);
107
+ const picked = Number.isInteger(index) ? available[index - 1] : undefined;
108
+ if (!picked) {
109
+ console.error(`"${answer}" is not one of 1-${available.length}.`);
110
+ process.exitCode = 2;
111
+ return undefined;
112
+ }
113
+ return picked;
114
+ }
115
+ async function promptArgs(def, seams) {
116
+ const args = {};
117
+ for (const name of templateSlots(def.template).params) {
118
+ const type = def.params[name];
119
+ // The example, never the pattern. A regex source is not a prompt.
120
+ const valid = new RegExp(`^${type.pattern}$`);
121
+ for (let attempt = 0; attempt < 3; attempt += 1) {
122
+ const value = await seams.ask(`${name} (e.g. ${type.example})\n> `);
123
+ if (valid.test(value)) {
124
+ args[name] = value;
125
+ break;
126
+ }
127
+ console.error(` not a valid ${name} — it should look like ${type.example}`);
128
+ }
129
+ if (args[name] === undefined)
130
+ return { error: `Gave up on \`${name}\` after three tries.` };
131
+ }
132
+ return args;
133
+ }
134
+ export async function runChecksAddCommand(file, opts) {
135
+ let source;
136
+ try {
137
+ source = await readFile(file, "utf8");
138
+ }
139
+ catch {
140
+ console.error(`Could not read ${file}.`);
141
+ process.exitCode = 2;
142
+ return;
143
+ }
144
+ const seams = resolveSeams(opts);
145
+ let picked;
146
+ if (opts.check) {
147
+ picked = findCheck(opts.check);
148
+ if (!picked) {
149
+ console.error(`Unknown check "${opts.check}". Run \`pome checks <twin>\` to see the declared set; ` +
150
+ `github declares: ${checksFor("github")
151
+ .map((c) => c.id)
152
+ .join(", ")}.`);
153
+ process.exitCode = 2;
154
+ return;
155
+ }
156
+ }
157
+ else {
158
+ picked = await pickInteractively(source, seams);
159
+ if (!picked)
160
+ return; // already reported why
161
+ }
162
+ const parsed = opts.check ? parseArgFlags(opts.arg) : await promptArgs(picked, seams);
163
+ if ("error" in parsed) {
164
+ console.error(parsed.error);
165
+ process.exitCode = 2;
166
+ return;
167
+ }
168
+ const args = parsed;
169
+ const slots = templateSlots(picked.template).params;
170
+ for (const name of slots) {
171
+ const type = picked.params[name];
172
+ const value = args[name];
173
+ if (value === undefined) {
174
+ console.error(`${picked.id} needs a \`${name}\` — add \`--arg ${name}=${type.example}\`.`);
175
+ process.exitCode = 2;
176
+ return;
177
+ }
178
+ if (!new RegExp(`^${type.pattern}$`).test(value)) {
179
+ console.error(`\`${name}\` = ${JSON.stringify(value)} is not valid for ${picked.id}. ` +
180
+ `Example: ${type.example}`);
181
+ process.exitCode = 2;
182
+ return;
183
+ }
184
+ }
185
+ const extra = Object.keys(args).filter((key) => !slots.includes(key));
186
+ if (extra.length > 0) {
187
+ console.error(`${picked.id} does not declare: ${extra.join(", ")}. It takes: ${slots.join(", ")}.`);
188
+ process.exitCode = 2;
189
+ return;
190
+ }
191
+ const twin = twinOf(picked.id);
192
+ const fetchRemote = opts.fetchRemote ??
193
+ (async (t) => liveFetch(await resolveCredentials({
194
+ apiBaseUrl: opts.apiBaseUrl,
195
+ credentialsPath: opts.credentialsPath,
196
+ }), t));
197
+ const gate = await handshake(twin, fetchRemote);
198
+ if (gate.kind === "skew") {
199
+ console.error(gate.message);
200
+ process.exitCode = 2;
201
+ return;
202
+ }
203
+ if (gate.kind === "unverified")
204
+ console.error(gate.note);
205
+ const tagged = readConfigTwins(source).length > 1;
206
+ const line = `- [code${tagged ? `:${twin}` : ""}] ${renderCheck(picked, args)}`;
207
+ if (!opts.check) {
208
+ console.log("");
209
+ console.log("Appending to ## Success Criteria:");
210
+ console.log("");
211
+ console.log(` ${line}`);
212
+ console.log("");
213
+ if (!(await seams.confirm(`Write it? ${line} [Y/n] `))) {
214
+ console.log("Nothing written.");
215
+ return;
216
+ }
217
+ }
218
+ let next;
219
+ try {
220
+ next = insertCriterion(source, line, file);
221
+ }
222
+ catch (err) {
223
+ if (err instanceof MissingCriteriaSectionError || err instanceof DuplicateCriterionError) {
224
+ console.error(err.message);
225
+ process.exitCode = 2;
226
+ return;
227
+ }
228
+ throw err;
229
+ }
230
+ await writeFile(file, next, "utf8");
231
+ console.log(`Wrote ${file}:`);
232
+ console.log(` ${line}`);
233
+ console.log(picked.polarity(args) === "negative"
234
+ ? " negative — this should PASS on an untouched seed; only the examinee can break it."
235
+ : " positive — this should FAIL on an untouched seed; the examinee has to make it true.");
236
+ }
@@ -0,0 +1,21 @@
1
+ import { type CheckDefinition } from "@pome-sh/sdk/checks";
2
+ export type DeclaredCheck = CheckDefinition<unknown, Record<string, string>>;
3
+ export declare function twinsWithChecks(): string[];
4
+ export declare function checksFor(twin: string): readonly DeclaredCheck[];
5
+ export declare function findCheck(id: string): DeclaredCheck | undefined;
6
+ export declare function twinOf(id: string): string | undefined;
7
+ export declare function isKnownTwin(twin: string): boolean;
8
+ /** `` No new labels were created in `<repo>` `` — every slot shown as its own
9
+ * name. Derived from the template, so no `title` field has to exist. */
10
+ export declare function displaySentence(def: DeclaredCheck): string;
11
+ export declare function localDigest(twin: string): string;
12
+ /** Read the pin from OUR OWN manifest. The twin's exports map sends
13
+ * `./package.json` through its `"./*"` wildcard and fails to resolve — and the
14
+ * pin we control is the one that matters anyway. */
15
+ export declare function pinnedVersion(pkg: string): string;
16
+ export declare const SUBSTRATE_HELP: Record<string, string>;
17
+ export declare function argFlagsFor(def: DeclaredCheck): string;
18
+ export interface ChecksCommandOptions {
19
+ json?: boolean;
20
+ }
21
+ export declare function runChecksCommand(twinArg: string | undefined, opts: ChecksCommandOptions): Promise<void>;
@@ -0,0 +1,150 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * `pome checks` — the assertable vocabulary a twin declares.
4
+ *
5
+ * Discovery is offline, like `pome tasks`: the declaration comes from the twin
6
+ * package this CLI is pinned to. That is a SECOND resolution point (pome-cloud's
7
+ * `resolveDeclaredChecks` is the first), accepted so authoring works without a
8
+ * network, and gated by the digest handshake in `checks-add.ts` — which refuses
9
+ * to write a sentence when the two pins disagree.
10
+ */
11
+ import { readFileSync } from "node:fs";
12
+ import { join } from "node:path";
13
+ import { checksDigest, templateSlots } from "@pome-sh/sdk/checks";
14
+ import { GITHUB_CHECKS } from "@pome-sh/twin-github/checks";
15
+ import { resolvePackageRoot } from "./resolve-package-root.js";
16
+ const REGISTRIES = {
17
+ github: GITHUB_CHECKS,
18
+ };
19
+ // Twins that EXIST but declare nothing yet. Listed separately so `pome checks
20
+ // slack` answers "not migrated yet" instead of "no such twin" — a typo and an
21
+ // empty vocabulary are different facts.
22
+ const TWINS_WITHOUT_CHECKS = ["slack", "stripe", "gmail", "linear"];
23
+ export function twinsWithChecks() {
24
+ return Object.keys(REGISTRIES).sort();
25
+ }
26
+ export function checksFor(twin) {
27
+ return REGISTRIES[twin] ?? [];
28
+ }
29
+ export function findCheck(id) {
30
+ for (const checks of Object.values(REGISTRIES)) {
31
+ const hit = checks.find((check) => check.id === id);
32
+ if (hit)
33
+ return hit;
34
+ }
35
+ return undefined;
36
+ }
37
+ export function twinOf(id) {
38
+ for (const [twin, checks] of Object.entries(REGISTRIES)) {
39
+ if (checks.some((check) => check.id === id))
40
+ return twin;
41
+ }
42
+ return undefined;
43
+ }
44
+ export function isKnownTwin(twin) {
45
+ return twinsWithChecks().includes(twin) || TWINS_WITHOUT_CHECKS.includes(twin);
46
+ }
47
+ /** `` No new labels were created in `<repo>` `` — every slot shown as its own
48
+ * name. Derived from the template, so no `title` field has to exist. */
49
+ export function displaySentence(def) {
50
+ const { literals, params } = templateSlots(def.template);
51
+ return params.reduce((out, param, i) => `${out}<${param}>${literals[i + 1]}`, literals[0]);
52
+ }
53
+ export function localDigest(twin) {
54
+ return checksDigest(checksFor(twin));
55
+ }
56
+ /** Read the pin from OUR OWN manifest. The twin's exports map sends
57
+ * `./package.json` through its `"./*"` wildcard and fails to resolve — and the
58
+ * pin we control is the one that matters anyway. */
59
+ export function pinnedVersion(pkg) {
60
+ const root = resolvePackageRoot(import.meta.url);
61
+ if (!root)
62
+ return "unknown";
63
+ try {
64
+ const manifest = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
65
+ return manifest.dependencies?.[pkg] ?? "unknown";
66
+ }
67
+ catch {
68
+ return "unknown";
69
+ }
70
+ }
71
+ export const SUBSTRATE_HELP = {
72
+ final: "the final state",
73
+ "seed+final": "the seed and the final state",
74
+ tape: "the recorded call tape",
75
+ };
76
+ function useColor() {
77
+ return Boolean(process.stdout.isTTY && !process.env.NO_COLOR);
78
+ }
79
+ function dim(s) {
80
+ return useColor() ? `\x1b[2m${s}\x1b[0m` : s;
81
+ }
82
+ function bold(s) {
83
+ return useColor() ? `\x1b[1m${s}\x1b[0m` : s;
84
+ }
85
+ export function argFlagsFor(def) {
86
+ return templateSlots(def.template)
87
+ .params.map((name) => `--arg ${name}=${def.params[name].example}`)
88
+ .join(" ");
89
+ }
90
+ function jsonView(twin) {
91
+ return {
92
+ twin,
93
+ digest: localDigest(twin),
94
+ checks: checksFor(twin).map((def) => ({
95
+ id: def.id,
96
+ template: def.template,
97
+ description: def.description,
98
+ substrate: def.substrate,
99
+ params: templateSlots(def.template).params.map((name) => ({
100
+ name,
101
+ pattern: def.params[name].pattern,
102
+ example: def.params[name].example,
103
+ })),
104
+ })),
105
+ };
106
+ }
107
+ export async function runChecksCommand(twinArg, opts) {
108
+ if (!twinArg) {
109
+ if (opts.json) {
110
+ console.log(JSON.stringify({ twins: twinsWithChecks() }, null, 2));
111
+ return;
112
+ }
113
+ console.log(bold("Pome checks"));
114
+ console.log(dim("Twins that declare an assertable vocabulary."));
115
+ console.log("");
116
+ for (const twin of twinsWithChecks()) {
117
+ console.log(` ${bold(twin)} ${dim(`(${checksFor(twin).length} checks)`)}`);
118
+ }
119
+ console.log("");
120
+ console.log(dim("Run `pome checks <twin>` to list them."));
121
+ return;
122
+ }
123
+ const twin = twinArg.trim();
124
+ if (!isKnownTwin(twin)) {
125
+ console.error(`Unknown twin "${twin}". Twins that declare checks: ${twinsWithChecks().join(", ")}.`);
126
+ process.exitCode = 2;
127
+ return;
128
+ }
129
+ if (opts.json) {
130
+ console.log(JSON.stringify(jsonView(twin), null, 2));
131
+ return;
132
+ }
133
+ const checks = checksFor(twin);
134
+ if (checks.length === 0) {
135
+ console.log(bold(`${twin} — no declared checks yet`));
136
+ console.log(dim(`Its vocabulary has not been migrated. Use [model] criteria for ${twin} for now.`));
137
+ return;
138
+ }
139
+ console.log(`${bold(`${twin} — ${checks.length} declared check${checks.length === 1 ? "" : "s"}`)} ` +
140
+ dim(`(@pome-sh/twin-${twin} ${pinnedVersion(`@pome-sh/twin-${twin}`)})`));
141
+ console.log("");
142
+ for (const def of checks) {
143
+ console.log(` ${bold(def.id)}`);
144
+ console.log(` ${displaySentence(def)}`);
145
+ console.log(` ${dim(def.description)}`);
146
+ console.log(` ${dim(`needs: ${SUBSTRATE_HELP[def.substrate] ?? def.substrate}`)}`);
147
+ console.log(` ${dim(`pome checks add <file> --check ${def.id} ${argFlagsFor(def)}`)}`);
148
+ console.log("");
149
+ }
150
+ }
@@ -18,6 +18,17 @@ import { compileSeedHosted } from "../task/seed-compiler-hosted.js";
18
18
  import { verifySeedWithTwin } from "../task/seed-verifier.js";
19
19
  import { exitCodeFor } from "../hosted/errors.js";
20
20
  const SIDECAR_META_VERSION = 1;
21
+ /**
22
+ * Sidecars written by hand rather than by the compiler mark themselves with
23
+ * this sentinel. It is a statement of provenance, not a cache state: the seeds
24
+ * that carry it encode adversarial setups (a backdoored PR, a fabricated green
25
+ * CI status, an exfiltration lure) that a recompile would quietly rewrite,
26
+ * changing what the task tests while the run still reports normally. So it
27
+ * outranks even `--force`; to recompile one, delete the sidecar or drop its
28
+ * `_meta` first.
29
+ */
30
+ const HAND_AUTHORED_MARKER = "hand-authored";
31
+ const HAND_AUTHORED_SOURCE_HASH = `sha256:${HAND_AUTHORED_MARKER}`;
21
32
  export async function runCompileSeeds(target, opts) {
22
33
  const files = await resolveTaskFiles(target ?? "tasks");
23
34
  if (files.length === 0) {
@@ -56,15 +67,20 @@ async function compileOne(taskPath, opts) {
56
67
  if (seedText.length === 0) {
57
68
  return { path: taskPath, status: "skipped-no-seed", message: "no ## Seed State section" };
58
69
  }
59
- // Stripe scenarios use a different schema; v1 only supports github. Check
60
- // twin first so Stripe scenarios are silently skipped without surfacing
61
- // misleading "still on inline JSON" warnings.
70
+ // Other twins use a different schema; v1 only emits a flat github seed. Check
71
+ // twin first so those tasks are silently skipped without surfacing misleading
72
+ // "still on inline JSON" warnings.
73
+ //
74
+ // A task naming github *alongside* another twin is seeded from a per-twin
75
+ // envelope (`{ github: {...}, linear: {...} }`), so compiling it would replace
76
+ // the envelope with a github-only seed and drop the other twin's half.
62
77
  const twins = readTwinsFromConfig(markdown);
63
- if (twins.length > 0 && !twins.includes("github")) {
78
+ const githubOnly = twins.length === 1 && twins[0] === "github";
79
+ if (twins.length > 0 && !githubOnly) {
64
80
  return {
65
81
  path: taskPath,
66
82
  status: "skipped-unsupported-twin",
67
- message: `twins=${twins.join(",")} not supported yet`
83
+ message: `twins=${twins.join(",")} only single-twin github tasks are supported yet`
68
84
  };
69
85
  }
70
86
  // Heuristic: if the section is a fenced JSON block, this scenario is still
@@ -79,6 +95,16 @@ async function compileOne(taskPath, opts) {
79
95
  }
80
96
  const sidecarPath = sidecarPathFor(taskPath);
81
97
  const proseHash = hashProse(seedText);
98
+ // Checked ahead of `--force` and ahead of the cache: this is authorship, not
99
+ // staleness. The sentinel can never equal a real sha256, so without this the
100
+ // cache always misses and the hand-authored seed is silently overwritten.
101
+ if (existsSync(sidecarPath) && (await isHandAuthored(sidecarPath))) {
102
+ return {
103
+ path: taskPath,
104
+ status: "skipped-hand-authored",
105
+ message: `hand-authored seed left untouched (${sidecarPath}) — delete it or drop its _meta to recompile`
106
+ };
107
+ }
82
108
  // Cache check only applies to local compile — hosted callers may have
83
109
  // different model versions than the locally-pinned COMPILER_MODEL, and the
84
110
  // cloud has its own edge cache to avoid duplicate work anyway.
@@ -186,6 +212,24 @@ async function readSidecarMeta(path) {
186
212
  return null;
187
213
  }
188
214
  }
215
+ /**
216
+ * Deliberately more lenient than `sidecarMetaSchema`: a hand-edited sidecar may
217
+ * carry only the sentinel and omit `version`/`compiled_at`. Failing that parse
218
+ * would fall through to a recompile — the exact overwrite this guards against —
219
+ * so any `_meta` bearing either sentinel field counts.
220
+ */
221
+ async function isHandAuthored(path) {
222
+ try {
223
+ const raw = await readFile(path, "utf8");
224
+ const meta = JSON.parse(raw)._meta;
225
+ if (!meta)
226
+ return false;
227
+ return meta.model === HAND_AUTHORED_MARKER || meta.source_hash === HAND_AUTHORED_SOURCE_HASH;
228
+ }
229
+ catch {
230
+ return false;
231
+ }
232
+ }
189
233
  async function resolveTaskFiles(target) {
190
234
  const abs = resolve(target);
191
235
  if (!existsSync(abs))
@@ -202,6 +246,8 @@ function statusStamp(status) {
202
246
  return "OK ";
203
247
  case "skipped-cached":
204
248
  return "skip";
249
+ case "skipped-hand-authored":
250
+ return "keep";
205
251
  case "skipped-no-seed":
206
252
  return "skip";
207
253
  case "skipped-unsupported-twin":