cloving 0.3.20 → 1.1.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 (515) hide show
  1. package/{LICENSE.md → LICENSE} +1 -1
  2. package/README.md +606 -182
  3. package/dist/src/authority/budgets.d.ts +12 -0
  4. package/dist/src/authority/budgets.js +42 -0
  5. package/dist/src/authority/commands.d.ts +7 -0
  6. package/dist/src/authority/commands.js +271 -0
  7. package/dist/src/authority/details.d.ts +28 -0
  8. package/dist/src/authority/details.js +33 -0
  9. package/dist/src/authority/dispatch-decision.d.ts +40 -0
  10. package/dist/src/authority/dispatch-decision.js +47 -0
  11. package/dist/src/authority/effect-requests.d.ts +2 -0
  12. package/dist/src/authority/effect-requests.js +139 -0
  13. package/dist/src/authority/effect-results.d.ts +4 -0
  14. package/dist/src/authority/effect-results.js +236 -0
  15. package/dist/src/authority/events.d.ts +2 -0
  16. package/dist/src/authority/events.js +45 -0
  17. package/dist/src/authority/gate-reduction.d.ts +8 -0
  18. package/dist/src/authority/gate-reduction.js +109 -0
  19. package/dist/src/authority/gates.d.ts +48 -0
  20. package/dist/src/authority/gates.js +77 -0
  21. package/dist/src/authority/history-state.d.ts +15 -0
  22. package/dist/src/authority/history-state.js +61 -0
  23. package/dist/src/authority/history.d.ts +13 -0
  24. package/dist/src/authority/history.js +37 -0
  25. package/dist/src/authority/instants.d.ts +3 -0
  26. package/dist/src/authority/instants.js +38 -0
  27. package/dist/src/authority/leases.d.ts +15 -0
  28. package/dist/src/authority/leases.js +113 -0
  29. package/dist/src/authority/operations.d.ts +101 -0
  30. package/dist/src/authority/operations.js +75 -0
  31. package/dist/src/authority/reconciliation.d.ts +29 -0
  32. package/dist/src/authority/reconciliation.js +156 -0
  33. package/dist/src/authority/reducer.d.ts +41 -0
  34. package/dist/src/authority/reducer.js +139 -0
  35. package/dist/src/authority/reduction-state.d.ts +36 -0
  36. package/dist/src/authority/reduction-state.js +68 -0
  37. package/dist/src/authority/reduction.d.ts +6 -0
  38. package/dist/src/authority/reduction.js +160 -0
  39. package/dist/src/authority/status-closure.d.ts +4 -0
  40. package/dist/src/authority/status-closure.js +57 -0
  41. package/dist/src/authority/status-effects.d.ts +17 -0
  42. package/dist/src/authority/status-effects.js +43 -0
  43. package/dist/src/authority/status-input.d.ts +45 -0
  44. package/dist/src/authority/status-input.js +9 -0
  45. package/dist/src/authority/status.d.ts +32 -0
  46. package/dist/src/authority/status.js +256 -0
  47. package/dist/src/authority/stop-sequence.d.ts +37 -0
  48. package/dist/src/authority/stop-sequence.js +91 -0
  49. package/dist/src/authority/transitions.d.ts +63 -0
  50. package/dist/src/authority/transitions.js +124 -0
  51. package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
  52. package/dist/src/broker/actor/adapter-calls.js +34 -0
  53. package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
  54. package/dist/src/broker/actor/adapter-outcomes.js +80 -0
  55. package/dist/src/broker/actor/authority-actor.d.ts +25 -0
  56. package/dist/src/broker/actor/authority-actor.js +169 -0
  57. package/dist/src/broker/actor/authority-changes.d.ts +31 -0
  58. package/dist/src/broker/actor/authority-changes.js +46 -0
  59. package/dist/src/broker/actor/authority-connection.d.ts +15 -0
  60. package/dist/src/broker/actor/authority-connection.js +44 -0
  61. package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
  62. package/dist/src/broker/actor/authority-conversion.js +72 -0
  63. package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
  64. package/dist/src/broker/actor/authority-delivery.js +162 -0
  65. package/dist/src/broker/actor/authority-logger.d.ts +2 -0
  66. package/dist/src/broker/actor/authority-logger.js +19 -0
  67. package/dist/src/broker/actor/authority-policy.d.ts +9 -0
  68. package/dist/src/broker/actor/authority-policy.js +11 -0
  69. package/dist/src/broker/actor/authority-queries.d.ts +45 -0
  70. package/dist/src/broker/actor/authority-queries.js +85 -0
  71. package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
  72. package/dist/src/broker/actor/authority-receipts.js +84 -0
  73. package/dist/src/broker/actor/authority-release.d.ts +13 -0
  74. package/dist/src/broker/actor/authority-release.js +69 -0
  75. package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
  76. package/dist/src/broker/actor/authority-runtime.js +204 -0
  77. package/dist/src/broker/actor/authority-session.d.ts +67 -0
  78. package/dist/src/broker/actor/authority-session.js +251 -0
  79. package/dist/src/broker/actor/authority-settings.d.ts +33 -0
  80. package/dist/src/broker/actor/authority-settings.js +63 -0
  81. package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
  82. package/dist/src/broker/actor/authority-upgrades.js +12 -0
  83. package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
  84. package/dist/src/broker/actor/authority-watchdog.js +41 -0
  85. package/dist/src/broker/actor/authority.d.ts +14 -0
  86. package/dist/src/broker/actor/authority.js +115 -0
  87. package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
  88. package/dist/src/broker/actor/delivery-intents.js +77 -0
  89. package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
  90. package/dist/src/broker/actor/delivery-plan.js +109 -0
  91. package/dist/src/broker/actor/delivery-results.d.ts +11 -0
  92. package/dist/src/broker/actor/delivery-results.js +63 -0
  93. package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
  94. package/dist/src/broker/actor/effect-delivery.js +118 -0
  95. package/dist/src/broker/actor/effect-plan.d.ts +41 -0
  96. package/dist/src/broker/actor/effect-plan.js +173 -0
  97. package/dist/src/broker/actor/effect-queries.d.ts +27 -0
  98. package/dist/src/broker/actor/effect-queries.js +80 -0
  99. package/dist/src/broker/actor/effect-turn.d.ts +25 -0
  100. package/dist/src/broker/actor/effect-turn.js +84 -0
  101. package/dist/src/broker/actor/pin-check.d.ts +6 -0
  102. package/dist/src/broker/actor/pin-check.js +12 -0
  103. package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
  104. package/dist/src/broker/actor/runtime-parts.js +34 -0
  105. package/dist/src/broker/actor/stop-plan.d.ts +20 -0
  106. package/dist/src/broker/actor/stop-plan.js +46 -0
  107. package/dist/src/broker/actor/stop-turn.d.ts +17 -0
  108. package/dist/src/broker/actor/stop-turn.js +42 -0
  109. package/dist/src/broker/actor/turn-draft.d.ts +31 -0
  110. package/dist/src/broker/actor/turn-draft.js +138 -0
  111. package/dist/src/broker/actor/turn-plan.d.ts +17 -0
  112. package/dist/src/broker/actor/turn-plan.js +136 -0
  113. package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
  114. package/dist/src/broker/actor/turn-refusals.js +35 -0
  115. package/dist/src/broker/actor/turn-staging.d.ts +78 -0
  116. package/dist/src/broker/actor/turn-staging.js +34 -0
  117. package/dist/src/broker/actor/turn-state.d.ts +34 -0
  118. package/dist/src/broker/actor/turn-state.js +208 -0
  119. package/dist/src/broker/authority-admission.d.ts +21 -0
  120. package/dist/src/broker/authority-admission.js +70 -0
  121. package/dist/src/broker/authority-restore.d.ts +30 -0
  122. package/dist/src/broker/authority-restore.js +165 -0
  123. package/dist/src/broker/decision-restore.d.ts +16 -0
  124. package/dist/src/broker/decision-restore.js +158 -0
  125. package/dist/src/broker/decision-upgrade.d.ts +3 -0
  126. package/dist/src/broker/decision-upgrade.js +12 -0
  127. package/dist/src/broker/effect-restore.d.ts +20 -0
  128. package/dist/src/broker/effect-restore.js +111 -0
  129. package/dist/src/broker/effect-upgrade.d.ts +3 -0
  130. package/dist/src/broker/effect-upgrade.js +9 -0
  131. package/dist/src/broker/operation-digest.d.ts +1 -0
  132. package/dist/src/broker/operation-digest.js +4 -0
  133. package/dist/src/broker/socket-address.d.ts +9 -0
  134. package/dist/src/broker/socket-address.js +14 -0
  135. package/dist/src/broker/workflow-pin.d.ts +2 -0
  136. package/dist/src/broker/workflow-pin.js +5 -0
  137. package/dist/src/chats/analysis-batches.d.ts +24 -0
  138. package/dist/src/chats/analysis-batches.js +83 -0
  139. package/dist/src/chats/analysis-contract.d.ts +80 -0
  140. package/dist/src/chats/analysis-contract.js +16 -0
  141. package/dist/src/chats/analysis-data.d.ts +3 -0
  142. package/dist/src/chats/analysis-data.js +85 -0
  143. package/dist/src/chats/analysis-input.d.ts +12 -0
  144. package/dist/src/chats/analysis-input.js +83 -0
  145. package/dist/src/chats/analysis-links.d.ts +2 -0
  146. package/dist/src/chats/analysis-links.js +25 -0
  147. package/dist/src/chats/analysis-prompt.d.ts +10 -0
  148. package/dist/src/chats/analysis-prompt.js +16 -0
  149. package/dist/src/chats/analysis-proposal.d.ts +2 -0
  150. package/dist/src/chats/analysis-proposal.js +32 -0
  151. package/dist/src/chats/analysis-provenance.d.ts +4 -0
  152. package/dist/src/chats/analysis-provenance.js +99 -0
  153. package/dist/src/chats/analysis-shape.d.ts +3 -0
  154. package/dist/src/chats/analysis-shape.js +228 -0
  155. package/dist/src/chats/analysis.d.ts +3 -0
  156. package/dist/src/chats/analysis.js +42 -0
  157. package/dist/src/chats/corpus-input.d.ts +5 -0
  158. package/dist/src/chats/corpus-input.js +288 -0
  159. package/dist/src/chats/destination.d.ts +4 -0
  160. package/dist/src/chats/destination.js +96 -0
  161. package/dist/src/chats/import.d.ts +15 -0
  162. package/dist/src/chats/import.js +243 -0
  163. package/dist/src/chats/input-file.d.ts +3 -0
  164. package/dist/src/chats/input-file.js +32 -0
  165. package/dist/src/chats/normalize.d.ts +29 -0
  166. package/dist/src/chats/normalize.js +155 -0
  167. package/dist/src/chats/previous-import.d.ts +5 -0
  168. package/dist/src/chats/previous-import.js +34 -0
  169. package/dist/src/chats/reader.d.ts +21 -0
  170. package/dist/src/chats/reader.js +118 -0
  171. package/dist/src/chats/redact-import.d.ts +14 -0
  172. package/dist/src/chats/redact-import.js +141 -0
  173. package/dist/src/chats/redaction.d.ts +41 -0
  174. package/dist/src/chats/redaction.js +161 -0
  175. package/dist/src/chats/revision-input.d.ts +3 -0
  176. package/dist/src/chats/revision-input.js +180 -0
  177. package/dist/src/chats/revision.d.ts +48 -0
  178. package/dist/src/chats/revision.js +94 -0
  179. package/dist/src/chats/selection.d.ts +25 -0
  180. package/dist/src/chats/selection.js +109 -0
  181. package/dist/src/chats/source.d.ts +23 -0
  182. package/dist/src/chats/source.js +135 -0
  183. package/dist/src/chats/structure.d.ts +57 -0
  184. package/dist/src/chats/structure.js +216 -0
  185. package/dist/src/cli/arguments.d.ts +31 -0
  186. package/dist/src/cli/arguments.js +235 -0
  187. package/dist/src/cli/client.d.ts +16 -0
  188. package/dist/src/cli/client.js +159 -0
  189. package/dist/src/cli/commands.d.ts +17 -0
  190. package/dist/src/cli/commands.js +271 -0
  191. package/dist/src/cli/main.d.ts +2 -0
  192. package/dist/src/cli/main.js +127 -0
  193. package/dist/src/cli/render.d.ts +10 -0
  194. package/dist/src/cli/render.js +254 -0
  195. package/dist/src/cli/runtime-arguments.d.ts +73 -0
  196. package/dist/src/cli/runtime-arguments.js +248 -0
  197. package/dist/src/cli/runtime-directory.d.ts +4 -0
  198. package/dist/src/cli/runtime-directory.js +25 -0
  199. package/dist/src/cli/toolchain.d.ts +3 -0
  200. package/dist/src/cli/toolchain.js +74 -0
  201. package/dist/src/cli/usage-render.d.ts +3 -0
  202. package/dist/src/cli/usage-render.js +28 -0
  203. package/dist/src/cli/usage.d.ts +5 -0
  204. package/dist/src/cli/usage.js +156 -0
  205. package/dist/src/cli/validate.d.ts +38 -0
  206. package/dist/src/cli/validate.js +116 -0
  207. package/dist/src/cli/watch-actions.d.ts +10 -0
  208. package/dist/src/cli/watch-actions.js +58 -0
  209. package/dist/src/cli/watch-board-view.d.ts +54 -0
  210. package/dist/src/cli/watch-board-view.js +201 -0
  211. package/dist/src/cli/watch-board.d.ts +15 -0
  212. package/dist/src/cli/watch-board.js +179 -0
  213. package/dist/src/cli/watch-card-client.d.ts +1 -0
  214. package/dist/src/cli/watch-card-client.js +44 -0
  215. package/dist/src/cli/watch-card-forms.d.ts +2 -0
  216. package/dist/src/cli/watch-card-forms.js +33 -0
  217. package/dist/src/cli/watch-card-reply.d.ts +5 -0
  218. package/dist/src/cli/watch-card-reply.js +34 -0
  219. package/dist/src/cli/watch-card-view.d.ts +40 -0
  220. package/dist/src/cli/watch-card-view.js +86 -0
  221. package/dist/src/cli/watch-client.d.ts +1 -0
  222. package/dist/src/cli/watch-client.js +118 -0
  223. package/dist/src/cli/watch-element.d.ts +11 -0
  224. package/dist/src/cli/watch-element.js +6 -0
  225. package/dist/src/cli/watch-model.d.ts +29 -0
  226. package/dist/src/cli/watch-model.js +278 -0
  227. package/dist/src/cli/watch-navigation.d.ts +9 -0
  228. package/dist/src/cli/watch-navigation.js +40 -0
  229. package/dist/src/cli/watch-page.d.ts +1 -0
  230. package/dist/src/cli/watch-page.js +258 -0
  231. package/dist/src/cli/watch-paths.d.ts +2 -0
  232. package/dist/src/cli/watch-paths.js +52 -0
  233. package/dist/src/cli/watch-phases.d.ts +7 -0
  234. package/dist/src/cli/watch-phases.js +148 -0
  235. package/dist/src/cli/watch-pr-board.d.ts +3 -0
  236. package/dist/src/cli/watch-pr-board.js +26 -0
  237. package/dist/src/cli/watch-pr-command.d.ts +15 -0
  238. package/dist/src/cli/watch-pr-command.js +37 -0
  239. package/dist/src/cli/watch-pr-identity.d.ts +20 -0
  240. package/dist/src/cli/watch-pr-identity.js +62 -0
  241. package/dist/src/cli/watch-pr-observer.d.ts +19 -0
  242. package/dist/src/cli/watch-pr-observer.js +108 -0
  243. package/dist/src/cli/watch-pr-settings.d.ts +8 -0
  244. package/dist/src/cli/watch-pr-settings.js +47 -0
  245. package/dist/src/cli/watch-reads.d.ts +28 -0
  246. package/dist/src/cli/watch-reads.js +248 -0
  247. package/dist/src/cli/watch-render.d.ts +153 -0
  248. package/dist/src/cli/watch-render.js +102 -0
  249. package/dist/src/cli/watch-run-input.d.ts +14 -0
  250. package/dist/src/cli/watch-run-input.js +49 -0
  251. package/dist/src/cli/watch-server.d.ts +13 -0
  252. package/dist/src/cli/watch-server.js +214 -0
  253. package/dist/src/cli/watch-start-view.d.ts +18 -0
  254. package/dist/src/cli/watch-start-view.js +77 -0
  255. package/dist/src/cli/watch-stream.d.ts +11 -0
  256. package/dist/src/cli/watch-stream.js +128 -0
  257. package/dist/src/cli/watch-turn.d.ts +30 -0
  258. package/dist/src/cli/watch-turn.js +135 -0
  259. package/dist/src/cli/watch-usage.d.ts +6 -0
  260. package/dist/src/cli/watch-usage.js +65 -0
  261. package/dist/src/cli/watch-view.d.ts +54 -0
  262. package/dist/src/cli/watch-view.js +267 -0
  263. package/dist/src/cli.d.ts +2 -0
  264. package/dist/src/cli.js +104 -0
  265. package/dist/src/daemon/analysis-launch.d.ts +5 -0
  266. package/dist/src/daemon/analysis-launch.js +81 -0
  267. package/dist/src/daemon/analysis-token.d.ts +6 -0
  268. package/dist/src/daemon/analysis-token.js +88 -0
  269. package/dist/src/daemon/analysis-worker.d.ts +22 -0
  270. package/dist/src/daemon/analysis-worker.js +219 -0
  271. package/dist/src/daemon/chats-files.d.ts +15 -0
  272. package/dist/src/daemon/chats-files.js +113 -0
  273. package/dist/src/daemon/chats-worker.d.ts +12 -0
  274. package/dist/src/daemon/chats-worker.js +200 -0
  275. package/dist/src/daemon/claude-turn.d.ts +38 -0
  276. package/dist/src/daemon/claude-turn.js +216 -0
  277. package/dist/src/daemon/claude-worker.d.ts +29 -0
  278. package/dist/src/daemon/claude-worker.js +276 -0
  279. package/dist/src/daemon/codex-stream.d.ts +4 -0
  280. package/dist/src/daemon/codex-stream.js +129 -0
  281. package/dist/src/daemon/daemon.d.ts +49 -0
  282. package/dist/src/daemon/daemon.js +195 -0
  283. package/dist/src/daemon/delivery-router.d.ts +10 -0
  284. package/dist/src/daemon/delivery-router.js +34 -0
  285. package/dist/src/daemon/github-calls.d.ts +29 -0
  286. package/dist/src/daemon/github-calls.js +127 -0
  287. package/dist/src/daemon/github-issue-methods.d.ts +3 -0
  288. package/dist/src/daemon/github-issue-methods.js +99 -0
  289. package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
  290. package/dist/src/daemon/github-issue-privacy.js +131 -0
  291. package/dist/src/daemon/github-merge.d.ts +18 -0
  292. package/dist/src/daemon/github-merge.js +259 -0
  293. package/dist/src/daemon/github-methods.d.ts +5 -0
  294. package/dist/src/daemon/github-methods.js +202 -0
  295. package/dist/src/daemon/github-operation.d.ts +38 -0
  296. package/dist/src/daemon/github-operation.js +57 -0
  297. package/dist/src/daemon/github-ticket-status.d.ts +3 -0
  298. package/dist/src/daemon/github-ticket-status.js +268 -0
  299. package/dist/src/daemon/github-worker.d.ts +17 -0
  300. package/dist/src/daemon/github-worker.js +281 -0
  301. package/dist/src/daemon/host-environment.d.ts +8 -0
  302. package/dist/src/daemon/host-environment.js +14 -0
  303. package/dist/src/daemon/issue-queue.d.ts +10 -0
  304. package/dist/src/daemon/issue-queue.js +254 -0
  305. package/dist/src/daemon/notify-message.d.ts +14 -0
  306. package/dist/src/daemon/notify-message.js +48 -0
  307. package/dist/src/daemon/notify.d.ts +12 -0
  308. package/dist/src/daemon/notify.js +161 -0
  309. package/dist/src/daemon/operation-journal.d.ts +43 -0
  310. package/dist/src/daemon/operation-journal.js +55 -0
  311. package/dist/src/daemon/retrying-turn.d.ts +9 -0
  312. package/dist/src/daemon/retrying-turn.js +185 -0
  313. package/dist/src/daemon/ticket-registration.d.ts +33 -0
  314. package/dist/src/daemon/ticket-registration.js +177 -0
  315. package/dist/src/daemon/ticket-source.d.ts +17 -0
  316. package/dist/src/daemon/ticket-source.js +36 -0
  317. package/dist/src/daemon/work-tree.d.ts +26 -0
  318. package/dist/src/daemon/work-tree.js +206 -0
  319. package/dist/src/effect-authorization.d.ts +21 -0
  320. package/dist/src/effect-authorization.js +14 -0
  321. package/dist/src/execution-pin.d.ts +4 -0
  322. package/dist/src/execution-pin.js +68 -0
  323. package/dist/src/host/start-delivery.d.ts +41 -0
  324. package/dist/src/host/start-delivery.js +68 -0
  325. package/dist/src/host/step-bridge-host.d.ts +79 -0
  326. package/dist/src/host/step-bridge-host.js +205 -0
  327. package/dist/src/host/step-claims.d.ts +31 -0
  328. package/dist/src/host/step-claims.js +85 -0
  329. package/dist/src/host/world-host.d.ts +21 -0
  330. package/dist/src/host/world-host.js +51 -0
  331. package/dist/src/host/world-reconciliation.d.ts +39 -0
  332. package/dist/src/host/world-reconciliation.js +81 -0
  333. package/dist/src/host/world-runs.d.ts +14 -0
  334. package/dist/src/host/world-runs.js +69 -0
  335. package/dist/src/operation-identity.d.ts +7 -0
  336. package/dist/src/operation-identity.js +59 -0
  337. package/dist/src/protocol.d.ts +35 -0
  338. package/dist/src/protocol.js +64 -0
  339. package/dist/src/resource-files.d.ts +1 -0
  340. package/dist/src/resource-files.js +29 -0
  341. package/dist/src/service/changes.d.ts +11 -0
  342. package/dist/src/service/changes.js +32 -0
  343. package/dist/src/service/decision-handler.d.ts +9 -0
  344. package/dist/src/service/decision-handler.js +233 -0
  345. package/dist/src/service/event-handler.d.ts +10 -0
  346. package/dist/src/service/event-handler.js +70 -0
  347. package/dist/src/service/expiry.d.ts +13 -0
  348. package/dist/src/service/expiry.js +53 -0
  349. package/dist/src/service/gateway.d.ts +21 -0
  350. package/dist/src/service/gateway.js +120 -0
  351. package/dist/src/service/registry.d.ts +40 -0
  352. package/dist/src/service/registry.js +13 -0
  353. package/dist/src/service/replies.d.ts +26 -0
  354. package/dist/src/service/replies.js +56 -0
  355. package/dist/src/service/run-handlers.d.ts +4 -0
  356. package/dist/src/service/run-handlers.js +263 -0
  357. package/dist/src/service/service.d.ts +58 -0
  358. package/dist/src/service/service.js +212 -0
  359. package/dist/src/service/submission-handler.d.ts +4 -0
  360. package/dist/src/service/submission-handler.js +206 -0
  361. package/dist/src/service/transport.d.ts +16 -0
  362. package/dist/src/service/transport.js +141 -0
  363. package/dist/src/service/worker-port.d.ts +85 -0
  364. package/dist/src/service/worker-port.js +126 -0
  365. package/dist/src/service/worker-totals.d.ts +3 -0
  366. package/dist/src/service/worker-totals.js +28 -0
  367. package/dist/src/step-bridge.d.ts +57 -0
  368. package/dist/src/step-bridge.js +4 -0
  369. package/dist/src/steps/decision-gate.d.ts +2 -0
  370. package/dist/src/steps/decision-gate.js +8 -0
  371. package/dist/src/steps/load-cycle.d.ts +10 -0
  372. package/dist/src/steps/load-cycle.js +11 -0
  373. package/dist/src/steps/protected-effect.d.ts +2 -0
  374. package/dist/src/steps/protected-effect.js +8 -0
  375. package/dist/src/storage/decision-rows.d.ts +54 -0
  376. package/dist/src/storage/decision-rows.js +72 -0
  377. package/dist/src/storage/decision-snapshots.d.ts +17 -0
  378. package/dist/src/storage/decision-snapshots.js +25 -0
  379. package/dist/src/storage/domain-changes.d.ts +48 -0
  380. package/dist/src/storage/domain-changes.js +213 -0
  381. package/dist/src/storage/domain-rows.d.ts +85 -0
  382. package/dist/src/storage/domain-rows.js +129 -0
  383. package/dist/src/storage/domain-schema.d.ts +32 -0
  384. package/dist/src/storage/domain-schema.js +193 -0
  385. package/dist/src/storage/effect-changes.d.ts +5 -0
  386. package/dist/src/storage/effect-changes.js +105 -0
  387. package/dist/src/storage/effect-rows.d.ts +67 -0
  388. package/dist/src/storage/effect-rows.js +74 -0
  389. package/dist/src/storage/effect-schema.d.ts +1 -0
  390. package/dist/src/storage/effect-schema.js +59 -0
  391. package/dist/src/storage/statements.d.ts +9 -0
  392. package/dist/src/storage/statements.js +8 -0
  393. package/dist/src/submission.d.ts +42 -0
  394. package/dist/src/submission.js +71 -0
  395. package/dist/src/ticket-status.d.ts +8 -0
  396. package/dist/src/ticket-status.js +45 -0
  397. package/dist/src/token-prices.d.ts +19 -0
  398. package/dist/src/token-prices.js +76 -0
  399. package/dist/src/turn-profile.d.ts +13 -0
  400. package/dist/src/turn-profile.js +100 -0
  401. package/dist/src/worker-usage.d.ts +22 -0
  402. package/dist/src/worker-usage.js +44 -0
  403. package/dist/src/workflow-admission.d.ts +45 -0
  404. package/dist/src/workflow-admission.js +151 -0
  405. package/dist/src/workflow-candidate.d.ts +29 -0
  406. package/dist/src/workflow-candidate.js +59 -0
  407. package/dist/src/workflow-contracts.d.ts +29 -0
  408. package/dist/src/workflow-contracts.js +110 -0
  409. package/dist/src/workflow-declaration.d.ts +11 -0
  410. package/dist/src/workflow-declaration.js +59 -0
  411. package/dist/src/workflow-resources.d.ts +8 -0
  412. package/dist/src/workflow-resources.js +14 -0
  413. package/dist/src/workflows.d.ts +6 -0
  414. package/dist/src/workflows.js +4 -0
  415. package/dist/tools/compile-workflows.d.ts +1 -0
  416. package/dist/tools/compile-workflows.js +33 -0
  417. package/dist/tools/self-host-processes.d.ts +10 -0
  418. package/dist/tools/self-host-processes.js +156 -0
  419. package/dist/tools/self-host-workflows.d.ts +15 -0
  420. package/dist/tools/self-host-workflows.js +78 -0
  421. package/dist/tools/self-host.d.ts +1 -0
  422. package/dist/tools/self-host.js +261 -0
  423. package/dist/tools/self-update-host.d.ts +13 -0
  424. package/dist/tools/self-update-host.js +88 -0
  425. package/dist/tools/self-update.d.ts +11 -0
  426. package/dist/tools/self-update.js +177 -0
  427. package/dist/tools/workflow-manifest.d.ts +3 -0
  428. package/dist/tools/workflow-manifest.js +34 -0
  429. package/dist/workflows/analyze-chats.d.ts +10 -0
  430. package/dist/workflows/analyze-chats.declaration.json +9 -0
  431. package/dist/workflows/analyze-chats.js +73 -0
  432. package/dist/workflows/develop-prd.d.ts +7 -0
  433. package/dist/workflows/develop-prd.js +97 -0
  434. package/dist/workflows/develop-ticket.d.ts +9 -0
  435. package/dist/workflows/develop-ticket.js +202 -0
  436. package/dist/workflows/issue-labels.d.ts +16 -0
  437. package/dist/workflows/issue-labels.js +70 -0
  438. package/dist/workflows/ticket-prompts.d.ts +35 -0
  439. package/dist/workflows/ticket-prompts.js +133 -0
  440. package/package.json +84 -75
  441. package/dist/abstract_gpt/index.js +0 -55
  442. package/dist/cloving_gpt/adapters/Adapter.js +0 -2
  443. package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
  444. package/dist/cloving_gpt/adapters/claude.js +0 -128
  445. package/dist/cloving_gpt/adapters/gemini.js +0 -135
  446. package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
  447. package/dist/cloving_gpt/adapters/index.js +0 -2
  448. package/dist/cloving_gpt/adapters/mistral.js +0 -128
  449. package/dist/cloving_gpt/adapters/ollama.js +0 -128
  450. package/dist/cloving_gpt/adapters/openai.js +0 -100
  451. package/dist/cloving_gpt/index.js +0 -192
  452. package/dist/commands/analyze.js +0 -47
  453. package/dist/commands/chat.js +0 -14
  454. package/dist/commands/check.js +0 -7
  455. package/dist/commands/commit.js +0 -44
  456. package/dist/commands/config.js +0 -167
  457. package/dist/commands/describe.js +0 -235
  458. package/dist/commands/generate/code.js +0 -21
  459. package/dist/commands/generate/commit.js +0 -11
  460. package/dist/commands/generate/context.js +0 -82
  461. package/dist/commands/generate/docs.js +0 -11
  462. package/dist/commands/generate/documentation.js +0 -11
  463. package/dist/commands/generate/fizzbuzz.js +0 -35
  464. package/dist/commands/generate/init.js +0 -15
  465. package/dist/commands/generate/review.js +0 -11
  466. package/dist/commands/generate/sh.js +0 -95
  467. package/dist/commands/generate/shell.js +0 -11
  468. package/dist/commands/generate/unit_tests.js +0 -11
  469. package/dist/commands/init.js +0 -13
  470. package/dist/commands/models.js +0 -22
  471. package/dist/commands/project/build.js +0 -88
  472. package/dist/commands/project/complete.js +0 -12
  473. package/dist/commands/project/init.js +0 -82
  474. package/dist/commands/project/plan.js +0 -108
  475. package/dist/commands/proxy.js +0 -11
  476. package/dist/commands/review.js +0 -50
  477. package/dist/commands/tokens.js +0 -75
  478. package/dist/commands/unit_tests.js +0 -150
  479. package/dist/commands/update.js +0 -7
  480. package/dist/file2.js +0 -4
  481. package/dist/index.js +0 -136
  482. package/dist/managers/BlockManager.js +0 -120
  483. package/dist/managers/ChatManager.js +0 -653
  484. package/dist/managers/ChunkManager.js +0 -32
  485. package/dist/managers/CodeManager.js +0 -185
  486. package/dist/managers/CommitManager.js +0 -78
  487. package/dist/managers/DocsManager.js +0 -88
  488. package/dist/managers/DocumentationManager.js +0 -114
  489. package/dist/managers/InitManager.js +0 -230
  490. package/dist/managers/ProxyManager.js +0 -210
  491. package/dist/managers/ReviewManager.js +0 -131
  492. package/dist/managers/ShellManager.js +0 -163
  493. package/dist/managers/StreamManager.js +0 -308
  494. package/dist/managers/UnitTestManager.js +0 -243
  495. package/dist/managers/src/managers/ProxyManager.js +0 -1
  496. package/dist/newfile.js +0 -2
  497. package/dist/package.json +0 -86
  498. package/dist/utils/command_utils.js +0 -384
  499. package/dist/utils/config_utils.js +0 -249
  500. package/dist/utils/gitUtils.js +0 -42
  501. package/dist/utils/git_utils.js +0 -217
  502. package/dist/utils/modelUtils.js +0 -7
  503. package/dist/utils/model_utils.js +0 -7
  504. package/dist/utils/prompt_utils.js +0 -333
  505. package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
  506. package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
  507. package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
  508. package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
  509. package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
  510. package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
  511. package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
  512. package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
  513. package/dist/utils/prompts/index.js +0 -27
  514. package/dist/utils/string_utils.js +0 -505
  515. package/dist/utils/types.js +0 -2
@@ -0,0 +1,259 @@
1
+ import { existsSync } from "node:fs";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { readRecord, writeRecord } from "./operation-journal.js";
4
+ import { changeChecked, defaultBranch, existingTree, field, githubTiming, removeWorktree, repositoryPath, } from "./github-operation.js";
5
+ import { treePlace } from "./work-tree.js";
6
+ function commitOf(value, name) {
7
+ if (typeof value !== "object" || value === null)
8
+ throw new Error("github-call-failed");
9
+ const commit = Reflect.get(value, name);
10
+ if (typeof commit !== "string")
11
+ throw new Error("github-call-failed");
12
+ return commit;
13
+ }
14
+ async function knownMerge(operation, expected) {
15
+ const pull = JSON.parse(await operation.calls.gh([
16
+ "api",
17
+ `${repositoryPath}/pulls/${String(expected.number)}`,
18
+ ]));
19
+ const head = commitOf(field(pull, "head"), "sha");
20
+ if (field(pull, "merged") !== true)
21
+ return { head, merged: undefined };
22
+ if (head !== expected.commit && head !== expected.updated)
23
+ throw new Error("merged-other-commit");
24
+ return { head, merged: commitOf(pull, "merge_commit_sha") };
25
+ }
26
+ async function abortMerge(operation, tree) {
27
+ const path = (await operation.calls.git(tree.path, [
28
+ "rev-parse",
29
+ "--git-path",
30
+ "MERGE_HEAD",
31
+ ])).trim();
32
+ if (existsSync(path))
33
+ await operation.calls.git(tree.path, ["merge", "--abort"]);
34
+ }
35
+ async function restored(operation, place) {
36
+ await abortMerge(operation, place.tree);
37
+ await clean(operation, place.tree);
38
+ if ((await headOf(operation, place.tree)) === place.commit)
39
+ return;
40
+ await operation.calls.git(place.tree.path, ["reset", "--hard", place.commit]);
41
+ }
42
+ async function clean(operation, tree) {
43
+ const status = await operation.calls.git(tree.path, [
44
+ "status",
45
+ "--porcelain",
46
+ "--untracked-files=no",
47
+ ]);
48
+ if (status.trim() !== "")
49
+ throw new Error("uncommitted-change");
50
+ }
51
+ async function headOf(operation, tree) {
52
+ return (await operation.calls.git(tree.path, ["rev-parse", "HEAD"])).trim();
53
+ }
54
+ async function fetched(operation, base) {
55
+ const { calls, settings } = operation;
56
+ await calls.git(settings.repository, ["fetch", "--quiet", "origin"]);
57
+ return (await calls.git(settings.repository, ["rev-parse", `origin/${base}`])).trim();
58
+ }
59
+ async function updatedTree(operation, place) {
60
+ const { calls } = operation;
61
+ const ancestor = (await calls.git(place.tree.path, ["merge-base", "HEAD", place.base])).trim();
62
+ if (ancestor === place.base)
63
+ return;
64
+ try {
65
+ await calls.git(place.tree.path, [
66
+ "merge",
67
+ "--no-ff",
68
+ "--no-edit",
69
+ place.base,
70
+ ]);
71
+ }
72
+ catch {
73
+ const conflicts = await calls.git(place.tree.path, [
74
+ "diff",
75
+ "--name-only",
76
+ "--diff-filter=U",
77
+ ]);
78
+ await calls.git(place.tree.path, ["merge", "--abort"]);
79
+ throw new Error("merge-conflict", { cause: conflicts.trim() });
80
+ }
81
+ }
82
+ async function checked(operation, place) {
83
+ await changeChecked(operation, place);
84
+ const head = await headOf(operation, place.tree);
85
+ if (operation.settings.check !== undefined)
86
+ await operation.calls.run(operation.settings.check, place.tree.path);
87
+ await clean(operation, place.tree);
88
+ if ((await headOf(operation, place.tree)) !== head)
89
+ throw new Error("uncommitted-change");
90
+ if (head !== place.commit && operation.settings.check === undefined)
91
+ throw new Error("check-required");
92
+ return head;
93
+ }
94
+ async function refreshed(operation, place) {
95
+ await restored(operation, {
96
+ tree: place.tree,
97
+ commit: place.recorded ?? place.commit,
98
+ });
99
+ const base = await defaultBranch(operation);
100
+ let newest = await fetched(operation, base);
101
+ if (place.recorded !== undefined &&
102
+ (await operation.calls.git(place.tree.path, [
103
+ "merge-base",
104
+ place.recorded,
105
+ newest,
106
+ ])).trim() === newest)
107
+ return place.recorded;
108
+ for (let attempt = 0; attempt < 3; attempt += 1) {
109
+ await updatedTree(operation, { tree: place.tree, base: newest });
110
+ const head = await checked(operation, { ...place, base });
111
+ const latest = await fetched(operation, base);
112
+ if (latest === newest)
113
+ return head;
114
+ newest = latest;
115
+ }
116
+ throw new Error("base-moved");
117
+ }
118
+ async function mergedNow(operation, pull) {
119
+ const reply = JSON.parse(await operation.calls.gh([
120
+ "api",
121
+ "-X",
122
+ "PUT",
123
+ `${repositoryPath}/pulls/${String(pull.number)}/merge`,
124
+ "-f",
125
+ "merge_method=merge",
126
+ "-f",
127
+ `sha=${pull.commit}`,
128
+ ]));
129
+ return commitOf(reply, "sha");
130
+ }
131
+ async function waitForHead(operation, pull) {
132
+ const timing = operation.settings.timing ?? githubTiming;
133
+ for (let attempt = 0; attempt < 30; attempt += 1) {
134
+ if (attempt > 0)
135
+ await delay(timing.pollMilliseconds, undefined, {
136
+ signal: operation.signal,
137
+ });
138
+ const current = JSON.parse(await operation.calls.gh([
139
+ "api",
140
+ `${repositoryPath}/pulls/${String(pull.number)}`,
141
+ ]));
142
+ if (commitOf(field(current, "head"), "sha") === pull.commit)
143
+ return;
144
+ }
145
+ throw new Error("head-not-updated");
146
+ }
147
+ async function mergeUpdated(operation, pull) {
148
+ const timing = operation.settings.timing ?? githubTiming;
149
+ for (let attempt = 0;; attempt += 1) {
150
+ await waitForHead(operation, pull);
151
+ try {
152
+ return await mergedNow(operation, pull);
153
+ }
154
+ catch (error) {
155
+ const status = field(error, "status");
156
+ if (attempt === 2 || (status !== 405 && status !== 409))
157
+ throw error;
158
+ await delay(timing.pollMilliseconds, undefined, {
159
+ signal: operation.signal,
160
+ });
161
+ }
162
+ }
163
+ }
164
+ async function removed(operation, place) {
165
+ const { settings, calls } = operation;
166
+ await calls
167
+ .gh([
168
+ "api",
169
+ "-X",
170
+ "DELETE",
171
+ `${repositoryPath}/git/refs/heads/${place.branch}`,
172
+ ])
173
+ .catch(() => undefined);
174
+ await removeWorktree(operation, place);
175
+ await calls.git(settings.repository, [
176
+ "update-ref",
177
+ "-d",
178
+ `refs/remotes/origin/${place.branch}`,
179
+ ]);
180
+ }
181
+ async function recordedHead(operation, commit) {
182
+ const record = await readRecord(operation.folder, "updated-head.json");
183
+ if (record === undefined)
184
+ return undefined;
185
+ const updated = field(record, "updated");
186
+ if (field(record, "commit") !== commit ||
187
+ typeof updated !== "string" ||
188
+ !/^[0-9a-f]{40,64}$/.test(updated))
189
+ throw new Error("git-call-failed");
190
+ return updated;
191
+ }
192
+ async function readyHead(operation, pull) {
193
+ const tree = existingTree(operation);
194
+ const updated = await refreshed(operation, {
195
+ tree,
196
+ commit: pull.commit,
197
+ recorded: pull.recorded,
198
+ });
199
+ if (updated === pull.commit)
200
+ return updated;
201
+ if (pull.recorded !== updated)
202
+ await writeRecord(operation.folder, {
203
+ name: "updated-head.json",
204
+ value: { commit: pull.commit, updated },
205
+ });
206
+ if (pull.remote !== updated)
207
+ await operation.calls.git(tree.path, [
208
+ "push",
209
+ "--quiet",
210
+ "origin",
211
+ `${updated}:refs/heads/${tree.branch}`,
212
+ ]);
213
+ return updated;
214
+ }
215
+ function checkOutput(cause) {
216
+ return ["stdout", "stderr"]
217
+ .map((name) => {
218
+ const value = field(cause, name);
219
+ return typeof value === "string" ? value : "";
220
+ })
221
+ .join("")
222
+ .slice(-6_000);
223
+ }
224
+ export async function merge(operation, pull) {
225
+ try {
226
+ return await completedMerge(operation, pull);
227
+ }
228
+ catch (error) {
229
+ operation.signal.throwIfAborted();
230
+ if (!(error instanceof Error))
231
+ throw error;
232
+ const reason = error.message;
233
+ if (reason !== "check-failed" && reason !== "merge-conflict")
234
+ throw error;
235
+ const conflicts = typeof error.cause === "string" ? error.cause : "";
236
+ return {
237
+ reason,
238
+ output: reason === "check-failed" ? checkOutput(error.cause) : conflicts,
239
+ };
240
+ }
241
+ }
242
+ async function completedMerge(operation, pull) {
243
+ const place = treePlace({
244
+ worktrees: operation.settings.worktrees,
245
+ target: operation.target,
246
+ });
247
+ const recorded = await recordedHead(operation, pull.commit);
248
+ const known = await knownMerge(operation, {
249
+ ...pull,
250
+ updated: recorded ?? pull.commit,
251
+ });
252
+ const updated = known.merged === undefined
253
+ ? await readyHead(operation, { ...pull, recorded, remote: known.head })
254
+ : (recorded ?? pull.commit);
255
+ const mergeCall = updated === pull.commit ? mergedNow : mergeUpdated;
256
+ const merged = known.merged ?? (await mergeCall(operation, { ...pull, commit: updated }));
257
+ await removed(operation, place);
258
+ return { number: pull.number, commit: pull.commit, updated, merged };
259
+ }
@@ -0,0 +1,5 @@
1
+ import { type Operation } from "./github-operation.ts";
2
+ export type { GithubTiming, MethodSettings } from "./github-operation.ts";
3
+ export declare const methodReasons: ReadonlySet<string>;
4
+ export type Method = (operation: Operation) => Promise<unknown>;
5
+ export declare const methods: ReadonlyMap<string, Method>;
@@ -0,0 +1,202 @@
1
+ import { setTimeout as delay } from "node:timers/promises";
2
+ import { findingsOf, scoreOf } from "./github-calls.js";
3
+ import { closeIssue, partialIssue } from "./github-ticket-status.js";
4
+ import { merge } from "./github-merge.js";
5
+ import { createIssue, discard } from "./github-issue-methods.js";
6
+ import { existingTree, defaultBranch, changeChecked, field, githubTiming, repositoryPath, text, } from "./github-operation.js";
7
+ import { workTree } from "./work-tree.js";
8
+ const triggerText = "@greptileai";
9
+ export const methodReasons = new Set([
10
+ "draft-not-available",
11
+ "invalid-draft",
12
+ "post-uncertain",
13
+ "private-texts-not-set",
14
+ "github-call-failed",
15
+ "github-issue-conflict",
16
+ "git-call-failed",
17
+ "check-failed",
18
+ "merge-conflict",
19
+ "check-required",
20
+ "base-moved",
21
+ "head-not-updated",
22
+ "uncommitted-change",
23
+ "invalid-payload",
24
+ "merged-other-commit",
25
+ "no-change",
26
+ "private-path-in-change",
27
+ "review-not-received",
28
+ "work-tree-not-available",
29
+ ]);
30
+ function integer(operation, name) {
31
+ const value = operation.payload[name];
32
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 1)
33
+ throw new Error("invalid-payload");
34
+ return value;
35
+ }
36
+ async function prepare(operation) {
37
+ const { settings, calls, target, signal } = operation;
38
+ await calls.git(settings.repository, ["fetch", "--quiet", "origin"]);
39
+ const base = await defaultBranch(operation);
40
+ const tree = await workTree({
41
+ repository: settings.repository,
42
+ worktrees: settings.worktrees,
43
+ target,
44
+ signal,
45
+ base: `origin/${base}`,
46
+ }).catch(() => {
47
+ throw new Error("work-tree-not-available");
48
+ });
49
+ return {
50
+ branch: tree.branch,
51
+ worktree: tree.path,
52
+ base,
53
+ startCommit: tree.startCommit,
54
+ };
55
+ }
56
+ function labels(operation, name) {
57
+ const value = operation.payload[name];
58
+ if (!Array.isArray(value))
59
+ throw new Error("invalid-payload");
60
+ return value.map((label) => {
61
+ if (typeof label !== "string" || label.trim() === "")
62
+ throw new Error("invalid-payload");
63
+ return label;
64
+ });
65
+ }
66
+ async function label(operation) {
67
+ const repository = `${text(operation, "owner")}/${text(operation, "repository")}`;
68
+ const number = integer(operation, "number");
69
+ if (!/^[\w.-]+\/[\w.-]+$/.test(repository) || !Number.isSafeInteger(number))
70
+ throw new Error("invalid-payload");
71
+ const added = labels(operation, "add");
72
+ const removed = labels(operation, "remove");
73
+ for (const name of new Set([...added, ...removed]))
74
+ await operation.calls.gh([
75
+ "label",
76
+ "create",
77
+ name,
78
+ "--repo",
79
+ repository,
80
+ "--color",
81
+ "ededed",
82
+ "--force",
83
+ ]);
84
+ await operation.calls.gh([
85
+ "issue",
86
+ "edit",
87
+ String(number),
88
+ "--repo",
89
+ repository,
90
+ ...added.flatMap((name) => ["--add-label", name]),
91
+ ...removed.flatMap((name) => ["--remove-label", name]),
92
+ ]);
93
+ return { number };
94
+ }
95
+ async function pullOf(operation, branch) {
96
+ const listed = JSON.parse(await operation.calls.gh([
97
+ "pr",
98
+ "list",
99
+ "--head",
100
+ branch,
101
+ "--state",
102
+ "open",
103
+ "--json",
104
+ "number,url",
105
+ ]));
106
+ const first = Array.isArray(listed) ? listed[0] : undefined;
107
+ if (first === undefined)
108
+ return undefined;
109
+ return {
110
+ number: Number(field(first, "number")),
111
+ url: String(field(first, "url")),
112
+ };
113
+ }
114
+ async function created(operation, place) {
115
+ const printed = await operation.calls.gh([
116
+ "pr",
117
+ "create",
118
+ "--head",
119
+ place.tree.branch,
120
+ "--base",
121
+ place.base,
122
+ "--title",
123
+ text(operation, "title"),
124
+ "--body",
125
+ text(operation, "body"),
126
+ ]);
127
+ const url = printed.trim().split("\n").at(-1) ?? "";
128
+ const number = Number(/\/pull\/(\d+)$/.exec(url)?.[1]);
129
+ if (!Number.isInteger(number))
130
+ throw new Error("github-call-failed");
131
+ return { number, url };
132
+ }
133
+ async function openPull(operation) {
134
+ const tree = existingTree(operation);
135
+ const base = await defaultBranch(operation);
136
+ await changeChecked(operation, { tree, base });
137
+ await operation.calls.git(tree.path, [
138
+ "push",
139
+ "--quiet",
140
+ "origin",
141
+ `HEAD:refs/heads/${tree.branch}`,
142
+ ]);
143
+ const commit = (await operation.calls.git(tree.path, ["rev-parse", "HEAD"])).trim();
144
+ const pull = (await pullOf(operation, tree.branch)) ??
145
+ (await created(operation, { tree, base }));
146
+ return { number: pull.number, url: pull.url, commit };
147
+ }
148
+ async function reviewed(operation, pull) {
149
+ const { number, commit } = pull;
150
+ const read = async (path) => {
151
+ const value = JSON.parse(await operation.calls.gh(["api", `${repositoryPath}/${path}`]));
152
+ return value;
153
+ };
154
+ const scored = scoreOf(await read(`issues/${String(number)}/comments?per_page=100`), commit);
155
+ if (scored === undefined)
156
+ return undefined;
157
+ const lines = await read(`pulls/${String(number)}/comments?per_page=100`);
158
+ return { number, commit, ...scored, findings: findingsOf(lines, commit) };
159
+ }
160
+ async function waitReview(operation) {
161
+ const pull = {
162
+ number: integer(operation, "number"),
163
+ commit: text(operation, "commit"),
164
+ };
165
+ const timing = operation.settings.timing ?? githubTiming;
166
+ const startedAt = Date.now();
167
+ let triggered = false;
168
+ for (;;) {
169
+ const review = await reviewed(operation, pull).catch(() => undefined);
170
+ if (review !== undefined)
171
+ return review;
172
+ const waited = Date.now() - startedAt;
173
+ if (waited >= timing.limitMilliseconds)
174
+ throw new Error("review-not-received");
175
+ if (!triggered && waited >= timing.triggerMilliseconds) {
176
+ triggered = true;
177
+ await operation.calls
178
+ .gh(["pr", "comment", String(pull.number), "--body", triggerText])
179
+ .catch(() => undefined);
180
+ }
181
+ await delay(timing.pollMilliseconds, undefined, {
182
+ signal: operation.signal,
183
+ });
184
+ }
185
+ }
186
+ export const methods = new Map([
187
+ ["prepare", prepare],
188
+ ["close-issue", closeIssue],
189
+ ["partial-issue", partialIssue],
190
+ ["label", label],
191
+ ["create-issue", createIssue],
192
+ ["discard", discard],
193
+ ["open-pr", openPull],
194
+ ["wait-review", waitReview],
195
+ [
196
+ "merge",
197
+ (operation) => merge(operation, {
198
+ number: integer(operation, "number"),
199
+ commit: text(operation, "commit"),
200
+ }),
201
+ ],
202
+ ]);
@@ -0,0 +1,38 @@
1
+ import type { CallSettings, Calls } from "./github-calls.ts";
2
+ export interface GithubTiming {
3
+ readonly pollMilliseconds: number;
4
+ readonly triggerMilliseconds: number;
5
+ readonly limitMilliseconds: number;
6
+ }
7
+ export declare const githubTiming: GithubTiming;
8
+ export interface MethodSettings extends CallSettings {
9
+ readonly worktrees: string;
10
+ readonly timing?: GithubTiming;
11
+ readonly check?: readonly string[];
12
+ }
13
+ export interface Operation {
14
+ readonly settings: MethodSettings;
15
+ readonly calls: Calls;
16
+ readonly target: string;
17
+ readonly payload: Readonly<Record<string, unknown>>;
18
+ readonly signal: AbortSignal;
19
+ readonly folder: string;
20
+ }
21
+ export interface Place {
22
+ readonly path: string;
23
+ readonly branch: string;
24
+ }
25
+ export interface Pull {
26
+ readonly number: number;
27
+ readonly url: string;
28
+ }
29
+ export declare const repositoryPath = "repos/{owner}/{repo}";
30
+ export declare function text(operation: Operation, name: string): string;
31
+ export declare function field(value: unknown, name: string): unknown;
32
+ export declare function existingTree(operation: Operation): Place;
33
+ export declare function removeWorktree(operation: Operation, place: Place): Promise<void>;
34
+ export declare function defaultBranch(operation: Operation): Promise<string>;
35
+ export declare function changeChecked(operation: Operation, place: {
36
+ readonly tree: Place;
37
+ readonly base: string;
38
+ }): Promise<void>;
@@ -0,0 +1,57 @@
1
+ import { homedir } from "node:os";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { treePlace } from "./work-tree.js";
5
+ export const githubTiming = {
6
+ pollMilliseconds: 30_000,
7
+ triggerMilliseconds: 300_000,
8
+ limitMilliseconds: 3_600_000,
9
+ };
10
+ export const repositoryPath = "repos/{owner}/{repo}";
11
+ export function text(operation, name) {
12
+ const value = operation.payload[name];
13
+ if (typeof value !== "string" || value === "")
14
+ throw new Error("invalid-payload");
15
+ return value;
16
+ }
17
+ export function field(value, name) {
18
+ return Reflect.get(Object(value), name);
19
+ }
20
+ export function existingTree(operation) {
21
+ const place = treePlace({
22
+ worktrees: operation.settings.worktrees,
23
+ target: operation.target,
24
+ });
25
+ if (!existsSync(join(place.path, ".git")))
26
+ throw new Error("work-tree-not-available");
27
+ return place;
28
+ }
29
+ export async function removeWorktree(operation, place) {
30
+ const repository = (parts) => operation.calls.git(operation.settings.repository, parts);
31
+ if (existsSync(join(place.path, ".git")))
32
+ await repository(["worktree", "remove", "--force", place.path]);
33
+ if ((await repository(["branch", "--list", place.branch])).trim() !== "")
34
+ await repository(["branch", "-D", place.branch]);
35
+ }
36
+ export async function defaultBranch(operation) {
37
+ const reference = await operation.calls.git(operation.settings.repository, [
38
+ "symbolic-ref",
39
+ "--short",
40
+ "refs/remotes/origin/HEAD",
41
+ ]);
42
+ return reference.trim().replace(/^origin[/]/, "");
43
+ }
44
+ export async function changeChecked(operation, place) {
45
+ const call = (parts) => operation.calls.git(place.tree.path, parts);
46
+ const range = `origin/${place.base}..HEAD`;
47
+ if (Number((await call(["rev-list", "--count", range])).trim()) === 0)
48
+ throw new Error("no-change");
49
+ const change = [
50
+ await call(["diff", `origin/${place.base}...HEAD`]),
51
+ await call(["log", "--format=%B", range]),
52
+ ].join("\n");
53
+ const privateTexts = [homedir(), ...(operation.settings.privateTexts ?? [])];
54
+ const lowered = change.toLowerCase();
55
+ if (privateTexts.some((item) => item !== "" && lowered.includes(item.toLowerCase())))
56
+ throw new Error("private-path-in-change");
57
+ }
@@ -0,0 +1,3 @@
1
+ import { type Operation } from "./github-operation.ts";
2
+ export declare function closeIssue(operation: Operation): Promise<unknown>;
3
+ export declare function partialIssue(operation: Operation): Promise<unknown>;