@proletariat/cli 0.3.94 → 0.3.96

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 (390) hide show
  1. package/dist/commands/agent/cleanup.d.ts +3 -4
  2. package/dist/commands/agent/cleanup.js +5 -4
  3. package/dist/commands/agent/cleanup.js.map +1 -1
  4. package/dist/commands/agent/gc.d.ts +3 -4
  5. package/dist/commands/agent/gc.js +5 -4
  6. package/dist/commands/agent/gc.js.map +1 -1
  7. package/dist/commands/agent/index.d.ts +3 -4
  8. package/dist/commands/agent/index.js +5 -4
  9. package/dist/commands/agent/index.js.map +1 -1
  10. package/dist/commands/agent/list.d.ts +3 -4
  11. package/dist/commands/agent/list.js +5 -4
  12. package/dist/commands/agent/list.js.map +1 -1
  13. package/dist/commands/agent/remove.d.ts +3 -4
  14. package/dist/commands/agent/remove.js +5 -4
  15. package/dist/commands/agent/remove.js.map +1 -1
  16. package/dist/commands/agent/staff/index.d.ts +3 -4
  17. package/dist/commands/agent/staff/index.js +5 -4
  18. package/dist/commands/agent/staff/index.js.map +1 -1
  19. package/dist/commands/agent/staff/remove.d.ts +3 -4
  20. package/dist/commands/agent/staff/remove.js +5 -4
  21. package/dist/commands/agent/staff/remove.js.map +1 -1
  22. package/dist/commands/agent/status.d.ts +3 -4
  23. package/dist/commands/agent/status.js +5 -4
  24. package/dist/commands/agent/status.js.map +1 -1
  25. package/dist/commands/agent/visit.d.ts +3 -4
  26. package/dist/commands/agent/visit.js +5 -4
  27. package/dist/commands/agent/visit.js.map +1 -1
  28. package/dist/commands/branch/create.js +1 -12
  29. package/dist/commands/branch/create.js.map +1 -1
  30. package/dist/commands/branch/list.d.ts +3 -4
  31. package/dist/commands/branch/list.js +5 -4
  32. package/dist/commands/branch/list.js.map +1 -1
  33. package/dist/commands/branch/validate.d.ts +3 -4
  34. package/dist/commands/branch/validate.js +6 -5
  35. package/dist/commands/branch/validate.js.map +1 -1
  36. package/dist/commands/branch/where.d.ts +3 -4
  37. package/dist/commands/branch/where.js +5 -4
  38. package/dist/commands/branch/where.js.map +1 -1
  39. package/dist/commands/commit.js +1 -1
  40. package/dist/commands/commit.js.map +1 -1
  41. package/dist/commands/config/index.js +1 -1
  42. package/dist/commands/config/index.js.map +1 -1
  43. package/dist/commands/db/backup.d.ts +16 -0
  44. package/dist/commands/db/backup.js +125 -0
  45. package/dist/commands/db/backup.js.map +1 -0
  46. package/dist/commands/db/repair.js +167 -45
  47. package/dist/commands/db/repair.js.map +1 -1
  48. package/dist/commands/execution/config.d.ts +3 -4
  49. package/dist/commands/execution/config.js +5 -4
  50. package/dist/commands/execution/config.js.map +1 -1
  51. package/dist/commands/execution/index.d.ts +3 -4
  52. package/dist/commands/execution/index.js +5 -4
  53. package/dist/commands/execution/index.js.map +1 -1
  54. package/dist/commands/execution/list.d.ts +3 -4
  55. package/dist/commands/execution/list.js +5 -4
  56. package/dist/commands/execution/list.js.map +1 -1
  57. package/dist/commands/execution/logs.d.ts +3 -4
  58. package/dist/commands/execution/logs.js +5 -4
  59. package/dist/commands/execution/logs.js.map +1 -1
  60. package/dist/commands/execution/stop.d.ts +3 -4
  61. package/dist/commands/execution/stop.js +5 -4
  62. package/dist/commands/execution/stop.js.map +1 -1
  63. package/dist/commands/execution/view.d.ts +3 -4
  64. package/dist/commands/execution/view.js +5 -4
  65. package/dist/commands/execution/view.js.map +1 -1
  66. package/dist/commands/gc.d.ts +13 -0
  67. package/dist/commands/gc.js +178 -0
  68. package/dist/commands/gc.js.map +1 -0
  69. package/dist/commands/hook/export.d.ts +3 -4
  70. package/dist/commands/hook/export.js +5 -4
  71. package/dist/commands/hook/export.js.map +1 -1
  72. package/dist/commands/hook/fire.d.ts +3 -4
  73. package/dist/commands/hook/fire.js +5 -4
  74. package/dist/commands/hook/fire.js.map +1 -1
  75. package/dist/commands/hook/list.d.ts +3 -4
  76. package/dist/commands/hook/list.js +5 -4
  77. package/dist/commands/hook/list.js.map +1 -1
  78. package/dist/commands/hook/preset.d.ts +3 -4
  79. package/dist/commands/hook/preset.js +5 -4
  80. package/dist/commands/hook/preset.js.map +1 -1
  81. package/dist/commands/orchestrate/index.d.ts +3 -4
  82. package/dist/commands/orchestrate/index.js +5 -4
  83. package/dist/commands/orchestrate/index.js.map +1 -1
  84. package/dist/commands/orchestrator/index.d.ts +3 -4
  85. package/dist/commands/orchestrator/index.js +5 -4
  86. package/dist/commands/orchestrator/index.js.map +1 -1
  87. package/dist/commands/pr/checks.d.ts +3 -4
  88. package/dist/commands/pr/checks.js +5 -4
  89. package/dist/commands/pr/checks.js.map +1 -1
  90. package/dist/commands/pr/merge.js +1 -1
  91. package/dist/commands/pr/merge.js.map +1 -1
  92. package/dist/commands/repo/add.d.ts +3 -4
  93. package/dist/commands/repo/add.js +5 -4
  94. package/dist/commands/repo/add.js.map +1 -1
  95. package/dist/commands/repo/create.d.ts +3 -4
  96. package/dist/commands/repo/create.js +5 -4
  97. package/dist/commands/repo/create.js.map +1 -1
  98. package/dist/commands/repo/fix-remotes.d.ts +3 -4
  99. package/dist/commands/repo/fix-remotes.js +5 -4
  100. package/dist/commands/repo/fix-remotes.js.map +1 -1
  101. package/dist/commands/repo/index.d.ts +3 -4
  102. package/dist/commands/repo/index.js +5 -4
  103. package/dist/commands/repo/index.js.map +1 -1
  104. package/dist/commands/repo/list.d.ts +3 -4
  105. package/dist/commands/repo/list.js +5 -4
  106. package/dist/commands/repo/list.js.map +1 -1
  107. package/dist/commands/session/attach.d.ts +3 -3
  108. package/dist/commands/session/attach.js +37 -79
  109. package/dist/commands/session/attach.js.map +1 -1
  110. package/dist/commands/session/cleanup.d.ts +3 -4
  111. package/dist/commands/session/cleanup.js +5 -4
  112. package/dist/commands/session/cleanup.js.map +1 -1
  113. package/dist/commands/session/create.d.ts +3 -4
  114. package/dist/commands/session/create.js +5 -4
  115. package/dist/commands/session/create.js.map +1 -1
  116. package/dist/commands/session/exec.d.ts +3 -4
  117. package/dist/commands/session/exec.js +6 -5
  118. package/dist/commands/session/exec.js.map +1 -1
  119. package/dist/commands/session/health.js +19 -1
  120. package/dist/commands/session/health.js.map +1 -1
  121. package/dist/commands/session/index.d.ts +3 -4
  122. package/dist/commands/session/index.js +9 -4
  123. package/dist/commands/session/index.js.map +1 -1
  124. package/dist/commands/session/inspect.d.ts +3 -4
  125. package/dist/commands/session/inspect.js +6 -5
  126. package/dist/commands/session/inspect.js.map +1 -1
  127. package/dist/commands/session/list.d.ts +4 -4
  128. package/dist/commands/session/list.js +129 -82
  129. package/dist/commands/session/list.js.map +1 -1
  130. package/dist/commands/session/peek.js +1 -1
  131. package/dist/commands/session/peek.js.map +1 -1
  132. package/dist/commands/session/poke.js +1 -1
  133. package/dist/commands/session/poke.js.map +1 -1
  134. package/dist/commands/session/prune.d.ts +3 -4
  135. package/dist/commands/session/prune.js +55 -15
  136. package/dist/commands/session/prune.js.map +1 -1
  137. package/dist/commands/session/report.d.ts +25 -5
  138. package/dist/commands/session/report.js +201 -5
  139. package/dist/commands/session/report.js.map +1 -1
  140. package/dist/commands/session/restart.d.ts +3 -4
  141. package/dist/commands/session/restart.js +6 -5
  142. package/dist/commands/session/restart.js.map +1 -1
  143. package/dist/commands/session/watch.d.ts +17 -0
  144. package/dist/commands/session/watch.js +139 -0
  145. package/dist/commands/session/watch.js.map +1 -0
  146. package/dist/commands/{action → sync}/index.d.ts +2 -6
  147. package/dist/commands/sync/index.js +68 -0
  148. package/dist/commands/sync/index.js.map +1 -0
  149. package/dist/commands/sync/pause.d.ts +10 -0
  150. package/dist/commands/sync/pause.js +35 -0
  151. package/dist/commands/sync/pause.js.map +1 -0
  152. package/dist/commands/sync/queue.d.ts +10 -0
  153. package/dist/commands/sync/queue.js +106 -0
  154. package/dist/commands/sync/queue.js.map +1 -0
  155. package/dist/commands/sync/resume.d.ts +10 -0
  156. package/dist/commands/sync/resume.js +34 -0
  157. package/dist/commands/sync/resume.js.map +1 -0
  158. package/dist/commands/sync/start.d.ts +11 -0
  159. package/dist/commands/sync/start.js +73 -0
  160. package/dist/commands/sync/start.js.map +1 -0
  161. package/dist/commands/sync/status.d.ts +10 -0
  162. package/dist/commands/sync/status.js +40 -0
  163. package/dist/commands/sync/status.js.map +1 -0
  164. package/dist/commands/sync/stop.d.ts +10 -0
  165. package/dist/commands/sync/stop.js +39 -0
  166. package/dist/commands/sync/stop.js.map +1 -0
  167. package/dist/commands/ticket/create.js +1 -1
  168. package/dist/commands/ticket/create.js.map +1 -1
  169. package/dist/commands/ticket/edit.js +1 -1
  170. package/dist/commands/ticket/edit.js.map +1 -1
  171. package/dist/commands/ticket/index.d.ts +3 -4
  172. package/dist/commands/ticket/index.js +5 -4
  173. package/dist/commands/ticket/index.js.map +1 -1
  174. package/dist/commands/ticket/list.js +1 -1
  175. package/dist/commands/ticket/list.js.map +1 -1
  176. package/dist/commands/ticket/update.js +1 -1
  177. package/dist/commands/ticket/update.js.map +1 -1
  178. package/dist/commands/web.d.ts +20 -0
  179. package/dist/commands/web.js +82 -0
  180. package/dist/commands/web.js.map +1 -0
  181. package/dist/commands/work/complete.js +1 -1
  182. package/dist/commands/work/complete.js.map +1 -1
  183. package/dist/commands/work/hooks/add.d.ts +3 -4
  184. package/dist/commands/work/hooks/add.js +5 -4
  185. package/dist/commands/work/hooks/add.js.map +1 -1
  186. package/dist/commands/work/hooks/list.d.ts +3 -4
  187. package/dist/commands/work/hooks/list.js +5 -4
  188. package/dist/commands/work/hooks/list.js.map +1 -1
  189. package/dist/commands/work/hooks/toggle.d.ts +3 -4
  190. package/dist/commands/work/hooks/toggle.js +5 -4
  191. package/dist/commands/work/hooks/toggle.js.map +1 -1
  192. package/dist/commands/work/peek.d.ts +3 -4
  193. package/dist/commands/work/peek.js +5 -4
  194. package/dist/commands/work/peek.js.map +1 -1
  195. package/dist/commands/work/propose.d.ts +23 -0
  196. package/dist/commands/work/propose.js +57 -0
  197. package/dist/commands/work/propose.js.map +1 -0
  198. package/dist/commands/work/ready.js +3 -3
  199. package/dist/commands/work/ready.js.map +1 -1
  200. package/dist/commands/work/rebase.d.ts +1 -1
  201. package/dist/commands/work/rebase.js +52 -49
  202. package/dist/commands/work/rebase.js.map +1 -1
  203. package/dist/commands/work/resolve.js +1 -1
  204. package/dist/commands/work/resolve.js.map +1 -1
  205. package/dist/commands/work/ship.d.ts +6 -0
  206. package/dist/commands/work/ship.js +218 -49
  207. package/dist/commands/work/ship.js.map +1 -1
  208. package/dist/commands/work/start.js +16 -90
  209. package/dist/commands/work/start.js.map +1 -1
  210. package/dist/commands/work/stop.d.ts +3 -4
  211. package/dist/commands/work/stop.js +5 -4
  212. package/dist/commands/work/stop.js.map +1 -1
  213. package/dist/hooks/init.js +11 -1
  214. package/dist/hooks/init.js.map +1 -1
  215. package/dist/lib/branch/index.d.ts +6 -5
  216. package/dist/lib/branch/index.js +8 -13
  217. package/dist/lib/branch/index.js.map +1 -1
  218. package/dist/lib/dashboard/data.js +1 -1
  219. package/dist/lib/dashboard/data.js.map +1 -1
  220. package/dist/lib/dashboard/html.d.ts +2 -1
  221. package/dist/lib/dashboard/html.js +150 -522
  222. package/dist/lib/dashboard/html.js.map +1 -1
  223. package/dist/lib/database/db-safety.d.ts +70 -9
  224. package/dist/lib/database/db-safety.js +395 -43
  225. package/dist/lib/database/db-safety.js.map +1 -1
  226. package/dist/lib/database/index.d.ts +1 -1
  227. package/dist/lib/database/index.js +1 -1
  228. package/dist/lib/database/index.js.map +1 -1
  229. package/dist/lib/database/migrations/0017_drop_agent_work_fk.d.ts +13 -0
  230. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js +85 -0
  231. package/dist/lib/database/migrations/0017_drop_agent_work_fk.js.map +1 -0
  232. package/dist/lib/database/migrations/0018_create_ticket_refs.d.ts +11 -0
  233. package/dist/lib/database/migrations/0018_create_ticket_refs.js +40 -0
  234. package/dist/lib/database/migrations/0018_create_ticket_refs.js.map +1 -0
  235. package/dist/lib/database/migrations/index.js +4 -0
  236. package/dist/lib/database/migrations/index.js.map +1 -1
  237. package/dist/lib/database/workspace.js +3 -1
  238. package/dist/lib/database/workspace.js.map +1 -1
  239. package/dist/lib/execution/devcontainer.js +1 -1
  240. package/dist/lib/execution/devcontainer.js.map +1 -1
  241. package/dist/lib/execution/runners/docker-management.d.ts +9 -0
  242. package/dist/lib/execution/runners/docker-management.js +14 -3
  243. package/dist/lib/execution/runners/docker-management.js.map +1 -1
  244. package/dist/lib/execution/runners/docker.js +8 -0
  245. package/dist/lib/execution/runners/docker.js.map +1 -1
  246. package/dist/lib/execution/runners/prompt-builder.js +24 -9
  247. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  248. package/dist/lib/execution/runners/shared.d.ts +1 -1
  249. package/dist/lib/execution/runners/shared.js +1 -1
  250. package/dist/lib/execution/runners/shared.js.map +1 -1
  251. package/dist/lib/execution/session-utils.d.ts +16 -0
  252. package/dist/lib/execution/session-utils.js +42 -0
  253. package/dist/lib/execution/session-utils.js.map +1 -1
  254. package/dist/lib/execution/spawner.js +4 -5
  255. package/dist/lib/execution/spawner.js.map +1 -1
  256. package/dist/lib/execution/storage.d.ts +29 -1
  257. package/dist/lib/execution/storage.js +79 -1
  258. package/dist/lib/execution/storage.js.map +1 -1
  259. package/dist/lib/execution/types.d.ts +17 -6
  260. package/dist/lib/execution/types.js +10 -7
  261. package/dist/lib/execution/types.js.map +1 -1
  262. package/dist/lib/external-issues/utils.d.ts +25 -0
  263. package/dist/lib/external-issues/utils.js +32 -0
  264. package/dist/lib/external-issues/utils.js.map +1 -0
  265. package/dist/lib/gc/index.d.ts +126 -0
  266. package/dist/lib/gc/index.js +410 -0
  267. package/dist/lib/gc/index.js.map +1 -0
  268. package/dist/lib/machine-config.d.ts +8 -0
  269. package/dist/lib/machine-config.js +37 -0
  270. package/dist/lib/machine-config.js.map +1 -1
  271. package/dist/lib/mcp/tools/action.js +1 -1
  272. package/dist/lib/mcp/tools/action.js.map +1 -1
  273. package/dist/lib/mcp/tools/ticket.js +1 -1
  274. package/dist/lib/mcp/tools/ticket.js.map +1 -1
  275. package/dist/lib/orchestrate/actions.js +30 -0
  276. package/dist/lib/orchestrate/actions.js.map +1 -1
  277. package/dist/lib/orchestrate/poller.d.ts +1 -1
  278. package/dist/lib/orchestrate/poller.js +4 -4
  279. package/dist/lib/orchestrate/poller.js.map +1 -1
  280. package/dist/lib/orchestrate/presets.js +2 -1
  281. package/dist/lib/orchestrate/presets.js.map +1 -1
  282. package/dist/lib/orchestrate/types.d.ts +1 -1
  283. package/dist/lib/orchestrate/types.js +1 -0
  284. package/dist/lib/orchestrate/types.js.map +1 -1
  285. package/dist/lib/pmo/index.js +1 -1
  286. package/dist/lib/pmo/index.js.map +1 -1
  287. package/dist/lib/pmo/markdown.js +1 -1
  288. package/dist/lib/pmo/markdown.js.map +1 -1
  289. package/dist/lib/pmo/schema.d.ts +3 -1
  290. package/dist/lib/pmo/schema.js +26 -2
  291. package/dist/lib/pmo/schema.js.map +1 -1
  292. package/dist/lib/pmo/storage/actions.js +1 -1
  293. package/dist/lib/pmo/storage/actions.js.map +1 -1
  294. package/dist/lib/pmo/storage/base.js +42 -18
  295. package/dist/lib/pmo/storage/base.js.map +1 -1
  296. package/dist/lib/pmo/storage/projects.js +2 -1
  297. package/dist/lib/pmo/storage/projects.js.map +1 -1
  298. package/dist/lib/pmo/storage/statuses.js +1 -1
  299. package/dist/lib/pmo/storage/statuses.js.map +1 -1
  300. package/dist/lib/pmo/storage/subtasks.js +1 -1
  301. package/dist/lib/pmo/storage/subtasks.js.map +1 -1
  302. package/dist/lib/pmo/storage/templates.js +1 -1
  303. package/dist/lib/pmo/storage/templates.js.map +1 -1
  304. package/dist/lib/pmo/storage/tickets.js +2 -1
  305. package/dist/lib/pmo/storage/tickets.js.map +1 -1
  306. package/dist/lib/pmo/storage/workflow-rules.js +1 -1
  307. package/dist/lib/pmo/storage/workflow-rules.js.map +1 -1
  308. package/dist/lib/pmo/utils.d.ts +6 -189
  309. package/dist/lib/pmo/utils.js +6 -306
  310. package/dist/lib/pmo/utils.js.map +1 -1
  311. package/dist/lib/providers/index.d.ts +1 -0
  312. package/dist/lib/providers/index.js +1 -0
  313. package/dist/lib/providers/index.js.map +1 -1
  314. package/dist/lib/providers/resolver.js +16 -0
  315. package/dist/lib/providers/resolver.js.map +1 -1
  316. package/dist/lib/providers/trello-provider.d.ts +28 -0
  317. package/dist/lib/providers/trello-provider.js +381 -0
  318. package/dist/lib/providers/trello-provider.js.map +1 -0
  319. package/dist/lib/session/heartbeat.d.ts +45 -0
  320. package/dist/lib/session/heartbeat.js +150 -0
  321. package/dist/lib/session/heartbeat.js.map +1 -0
  322. package/dist/lib/session/index.d.ts +7 -0
  323. package/dist/lib/session/index.js +8 -0
  324. package/dist/lib/session/index.js.map +1 -0
  325. package/dist/lib/session/watcher.d.ts +79 -0
  326. package/dist/lib/session/watcher.js +142 -0
  327. package/dist/lib/session/watcher.js.map +1 -0
  328. package/dist/lib/shipping/auto-merge.d.ts +57 -0
  329. package/dist/lib/shipping/auto-merge.js +311 -0
  330. package/dist/lib/shipping/auto-merge.js.map +1 -0
  331. package/dist/lib/shipping/github.d.ts +68 -0
  332. package/dist/lib/shipping/github.js +217 -0
  333. package/dist/lib/shipping/github.js.map +1 -0
  334. package/dist/lib/shipping/index.d.ts +13 -0
  335. package/dist/lib/shipping/index.js +11 -0
  336. package/dist/lib/shipping/index.js.map +1 -0
  337. package/dist/lib/shipping/rebase.d.ts +35 -0
  338. package/dist/lib/shipping/rebase.js +107 -0
  339. package/dist/lib/shipping/rebase.js.map +1 -0
  340. package/dist/lib/shipping/types.d.ts +181 -0
  341. package/dist/lib/shipping/types.js +9 -0
  342. package/dist/lib/shipping/types.js.map +1 -0
  343. package/dist/lib/sync/daemon-process.d.ts +9 -0
  344. package/dist/lib/sync/daemon-process.js +184 -0
  345. package/dist/lib/sync/daemon-process.js.map +1 -0
  346. package/dist/lib/sync/daemon.d.ts +39 -0
  347. package/dist/lib/sync/daemon.js +91 -0
  348. package/dist/lib/sync/daemon.js.map +1 -0
  349. package/dist/lib/sync/engine.d.ts +38 -0
  350. package/dist/lib/sync/engine.js +145 -0
  351. package/dist/lib/sync/engine.js.map +1 -0
  352. package/dist/lib/sync/merge-queue.d.ts +116 -0
  353. package/dist/lib/sync/merge-queue.js +321 -0
  354. package/dist/lib/sync/merge-queue.js.map +1 -0
  355. package/dist/lib/sync/reconciler.d.ts +44 -0
  356. package/dist/lib/sync/reconciler.js +88 -0
  357. package/dist/lib/sync/reconciler.js.map +1 -0
  358. package/dist/lib/trello/client.d.ts +1 -0
  359. package/dist/lib/trello/client.js +6 -0
  360. package/dist/lib/trello/client.js.map +1 -1
  361. package/dist/lib/utils/text.d.ts +44 -0
  362. package/dist/lib/utils/text.js +72 -0
  363. package/dist/lib/utils/text.js.map +1 -0
  364. package/dist/lib/work-lifecycle/post-execution.js +1 -1
  365. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  366. package/dist/lib/work-lifecycle/settings.d.ts +138 -0
  367. package/dist/lib/work-lifecycle/settings.js +213 -0
  368. package/dist/lib/work-lifecycle/settings.js.map +1 -0
  369. package/oclif.manifest.json +2549 -2901
  370. package/package.json +8 -8
  371. package/dist/commands/action/create.d.ts +0 -26
  372. package/dist/commands/action/create.js +0 -245
  373. package/dist/commands/action/create.js.map +0 -1
  374. package/dist/commands/action/delete.d.ts +0 -18
  375. package/dist/commands/action/delete.js +0 -78
  376. package/dist/commands/action/delete.js.map +0 -1
  377. package/dist/commands/action/index.js +0 -103
  378. package/dist/commands/action/index.js.map +0 -1
  379. package/dist/commands/action/list.d.ts +0 -15
  380. package/dist/commands/action/list.js +0 -90
  381. package/dist/commands/action/list.js.map +0 -1
  382. package/dist/commands/action/run.d.ts +0 -20
  383. package/dist/commands/action/run.js +0 -188
  384. package/dist/commands/action/run.js.map +0 -1
  385. package/dist/commands/action/show.d.ts +0 -17
  386. package/dist/commands/action/show.js +0 -78
  387. package/dist/commands/action/show.js.map +0 -1
  388. package/dist/commands/action/update.d.ts +0 -27
  389. package/dist/commands/action/update.js +0 -288
  390. package/dist/commands/action/update.js.map +0 -1
@@ -0,0 +1,217 @@
1
+ /**
2
+ * GitHub Git Provider & Auto-Merge Provider
3
+ *
4
+ * Implements the GitProvider interface for sibling rebase (PRLT-1143)
5
+ * and the AutoMergeProvider interface for auto-merge (PRLT-1144),
6
+ * both using the GitHub API via `gh` CLI.
7
+ */
8
+ import { execSync, spawnSync } from 'node:child_process';
9
+ import { listOpenPRs, getMergeableState, getGitHubRepo, rebasePRBranch, getPRByNumber, } from '../pr/index.js';
10
+ // =============================================================================
11
+ // GitHubProvider — Sibling Rebase (PRLT-1143)
12
+ // =============================================================================
13
+ /**
14
+ * GitHub implementation of GitProvider.
15
+ *
16
+ * Uses the `gh api` CLI for API-based operations where possible,
17
+ * falling back to local git operations when the API is unavailable.
18
+ */
19
+ export class GitHubProvider {
20
+ name = 'github';
21
+ listOpenPRs(cwd) {
22
+ return listOpenPRs(cwd);
23
+ }
24
+ getMergeableState(prNumber, cwd) {
25
+ return getMergeableState(prNumber, cwd);
26
+ }
27
+ /**
28
+ * Update a PR branch using GitHub's update-branch API.
29
+ *
30
+ * Uses: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
31
+ *
32
+ * This merges the base branch into the PR branch server-side,
33
+ * without requiring a local checkout or force-push.
34
+ *
35
+ * Falls back to local git rebase if the API call fails with a
36
+ * non-conflict error (e.g., permissions, network issues).
37
+ */
38
+ updatePRBranch(prNumber, cwd) {
39
+ const repo = getGitHubRepo(cwd);
40
+ if (!repo) {
41
+ return {
42
+ success: false,
43
+ prNumber,
44
+ headBranch: '',
45
+ error: 'Could not determine GitHub repository from git remote',
46
+ };
47
+ }
48
+ // Get PR info for the head branch name
49
+ let headBranch = '';
50
+ let baseBranch = '';
51
+ try {
52
+ const prJson = execSync(`gh pr view ${prNumber} --json headRefName,baseRefName`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
53
+ const prData = JSON.parse(prJson);
54
+ headBranch = prData.headRefName;
55
+ baseBranch = prData.baseRefName;
56
+ }
57
+ catch {
58
+ return {
59
+ success: false,
60
+ prNumber,
61
+ headBranch: '',
62
+ error: `Could not fetch PR #${prNumber} details`,
63
+ };
64
+ }
65
+ // Try API-based update-branch first
66
+ try {
67
+ execSync(`gh api repos/${repo}/pulls/${prNumber}/update-branch -X PUT -f expected_head_sha="$(gh pr view ${prNumber} --json headRefOid -q .headRefOid)"`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
68
+ return {
69
+ success: true,
70
+ prNumber,
71
+ headBranch,
72
+ };
73
+ }
74
+ catch (apiError) {
75
+ const errorMsg = apiError instanceof Error ? apiError.message : String(apiError);
76
+ // Check if the error indicates merge conflicts
77
+ if (errorMsg.includes('merge conflict') || errorMsg.includes('Merge conflict')) {
78
+ return {
79
+ success: false,
80
+ prNumber,
81
+ headBranch,
82
+ error: 'Merge conflicts detected — manual resolution required',
83
+ hasConflicts: true,
84
+ };
85
+ }
86
+ // API failed for non-conflict reason — fall back to local git rebase
87
+ const fallbackResult = rebasePRBranch(headBranch, baseBranch, cwd);
88
+ if (fallbackResult.success) {
89
+ return {
90
+ success: true,
91
+ prNumber,
92
+ headBranch,
93
+ };
94
+ }
95
+ // Check if fallback failure was due to conflicts
96
+ const fallbackError = fallbackResult.error || '';
97
+ const isConflict = fallbackError.includes('CONFLICT') ||
98
+ fallbackError.includes('conflict') ||
99
+ fallbackError.includes('could not apply');
100
+ return {
101
+ success: false,
102
+ prNumber,
103
+ headBranch,
104
+ error: fallbackResult.error || 'Rebase failed',
105
+ hasConflicts: isConflict,
106
+ };
107
+ }
108
+ }
109
+ /**
110
+ * Add a label to a GitHub PR.
111
+ */
112
+ addLabel(prNumber, label, cwd) {
113
+ try {
114
+ execSync(`gh pr edit ${prNumber} --add-label "${label}"`, {
115
+ cwd,
116
+ stdio: ['pipe', 'pipe', 'pipe'],
117
+ });
118
+ return true;
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Add a comment to a GitHub PR.
126
+ */
127
+ addComment(prNumber, body, cwd) {
128
+ try {
129
+ execSync(`gh pr comment ${prNumber} --body "${body.replace(/"/g, '\\"')}"`, {
130
+ cwd,
131
+ stdio: ['pipe', 'pipe', 'pipe'],
132
+ });
133
+ return true;
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ }
140
+ // =============================================================================
141
+ // GitHubAutoMergeProvider — Auto-Merge (PRLT-1144)
142
+ // =============================================================================
143
+ /**
144
+ * GitHub implementation of AutoMergeProvider.
145
+ *
146
+ * Uses GitHub's native auto-merge feature when available, which
147
+ * automatically merges a PR once all required status checks pass.
148
+ */
149
+ export class GitHubAutoMergeProvider {
150
+ name = 'github';
151
+ /**
152
+ * Enable GitHub's native auto-merge on a PR.
153
+ *
154
+ * Uses `gh pr merge --auto` which sets the PR to auto-merge once
155
+ * all required status checks pass and branch protections are satisfied.
156
+ *
157
+ * Requires: auto-merge must be enabled in the repository settings.
158
+ */
159
+ enableAutoMerge(prNumber, method, cwd) {
160
+ const args = ['pr', 'merge', String(prNumber), '--auto', `--${method}`];
161
+ const result = spawnSync('gh', args, {
162
+ cwd,
163
+ encoding: 'utf-8',
164
+ stdio: ['pipe', 'pipe', 'pipe'],
165
+ });
166
+ if (result.status !== 0) {
167
+ const stderr = result.stderr?.trim() || '';
168
+ // Check if auto-merge is already enabled
169
+ if (stderr.includes('already set to auto-merge') || stderr.includes('auto-merge is already enabled')) {
170
+ return {
171
+ success: true,
172
+ prNumber,
173
+ alreadyEnabled: true,
174
+ };
175
+ }
176
+ return {
177
+ success: false,
178
+ prNumber,
179
+ error: stderr || 'Failed to enable auto-merge',
180
+ };
181
+ }
182
+ return { success: true, prNumber };
183
+ }
184
+ /**
185
+ * Disable GitHub's native auto-merge on a PR.
186
+ *
187
+ * Uses `gh pr merge --disable-auto` to cancel auto-merge.
188
+ */
189
+ disableAutoMerge(prNumber, cwd) {
190
+ const result = spawnSync('gh', ['pr', 'merge', String(prNumber), '--disable-auto'], {
191
+ cwd,
192
+ encoding: 'utf-8',
193
+ stdio: ['pipe', 'pipe', 'pipe'],
194
+ });
195
+ if (result.status !== 0) {
196
+ const stderr = result.stderr?.trim() || '';
197
+ // Not an error if auto-merge wasn't enabled
198
+ if (stderr.includes('not set to auto-merge') || stderr.includes('auto-merge is not enabled')) {
199
+ return { success: true, prNumber };
200
+ }
201
+ return {
202
+ success: false,
203
+ prNumber,
204
+ error: stderr || 'Failed to disable auto-merge',
205
+ };
206
+ }
207
+ return { success: true, prNumber };
208
+ }
209
+ /**
210
+ * Check if a PR has been merged.
211
+ */
212
+ isPRMerged(prNumber, cwd) {
213
+ const prInfo = getPRByNumber(prNumber, cwd);
214
+ return prInfo?.state === 'MERGED';
215
+ }
216
+ }
217
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/lib/shipping/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shipping Module — Public API
3
+ *
4
+ * Provider-agnostic shipping operations: sibling PR rebase,
5
+ * conflict labeling, git provider abstraction, and auto-merge orchestration.
6
+ */
7
+ export type { GitProvider, GitProviderName, UpdateBranchResult, SiblingRebaseResult, RebaseSiblingOptions, } from './types.js';
8
+ export { GitHubProvider } from './github.js';
9
+ export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
10
+ export type { AutoMergeResult, AutoMergeProvider, WhenGreenOptions, WhenGreenResult, } from './types.js';
11
+ export { GitHubAutoMergeProvider } from './github.js';
12
+ export { watchAndShip } from './auto-merge.js';
13
+ export type { WatchAndShipDeps } from './auto-merge.js';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shipping Module — Public API
3
+ *
4
+ * Provider-agnostic shipping operations: sibling PR rebase,
5
+ * conflict labeling, git provider abstraction, and auto-merge orchestration.
6
+ */
7
+ export { GitHubProvider } from './github.js';
8
+ export { rebaseSiblingPRs, detectGitProvider } from './rebase.js';
9
+ export { GitHubAutoMergeProvider } from './github.js';
10
+ export { watchAndShip } from './auto-merge.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/shipping/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAUjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Sibling PR Rebase — Provider-Agnostic
3
+ *
4
+ * After a PR merges, the base branch advances. Other open PRs may become
5
+ * stale or conflicting. This module rebases sibling PRs using the git
6
+ * provider's API (e.g., GitHub's update-branch endpoint), falling back
7
+ * to local git rebase when the API is unavailable.
8
+ *
9
+ * On conflict, optionally labels the PR and adds a comment so the
10
+ * author knows manual resolution is needed.
11
+ */
12
+ import type { GitProvider, RebaseSiblingOptions, SiblingRebaseResult } from './types.js';
13
+ /**
14
+ * Detect the git provider for the current repository.
15
+ *
16
+ * Currently supports GitHub. Returns null if the provider cannot be detected.
17
+ * GitLab support can be added here by checking the remote URL.
18
+ */
19
+ export declare function detectGitProvider(cwd?: string): GitProvider | null;
20
+ /**
21
+ * Rebase all open sibling PRs after a merge.
22
+ *
23
+ * This is the main entry point for post-merge sibling rebase.
24
+ * It uses the git provider's API to update branches, which is cleaner
25
+ * than local git rebase + force-push because:
26
+ * - No local checkout needed
27
+ * - Works in CI/CD without full git history
28
+ * - Uses the provider's merge infrastructure
29
+ * - Avoids force-push permission issues
30
+ *
31
+ * @param options - Configuration for the rebase operation
32
+ * @param provider - Git provider to use (auto-detected if not provided)
33
+ * @returns Results of the rebase operation for each PR
34
+ */
35
+ export declare function rebaseSiblingPRs(options: RebaseSiblingOptions, provider?: GitProvider | null): SiblingRebaseResult;
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Sibling PR Rebase — Provider-Agnostic
3
+ *
4
+ * After a PR merges, the base branch advances. Other open PRs may become
5
+ * stale or conflicting. This module rebases sibling PRs using the git
6
+ * provider's API (e.g., GitHub's update-branch endpoint), falling back
7
+ * to local git rebase when the API is unavailable.
8
+ *
9
+ * On conflict, optionally labels the PR and adds a comment so the
10
+ * author knows manual resolution is needed.
11
+ */
12
+ import { GitHubProvider } from './github.js';
13
+ const CONFLICT_LABEL = 'rebase-conflict';
14
+ const CONFLICT_COMMENT = 'This PR has merge conflicts with the base branch after a recent merge. ' +
15
+ 'Please rebase or merge the base branch to resolve conflicts.';
16
+ /**
17
+ * Detect the git provider for the current repository.
18
+ *
19
+ * Currently supports GitHub. Returns null if the provider cannot be detected.
20
+ * GitLab support can be added here by checking the remote URL.
21
+ */
22
+ export function detectGitProvider(cwd) {
23
+ // For now, default to GitHub since it's the only implemented provider.
24
+ // When GitLab/Bitbucket providers are added, detect from the remote URL:
25
+ // git remote get-url origin → github.com = GitHub, gitlab.com = GitLab, etc.
26
+ return new GitHubProvider();
27
+ }
28
+ /**
29
+ * Rebase all open sibling PRs after a merge.
30
+ *
31
+ * This is the main entry point for post-merge sibling rebase.
32
+ * It uses the git provider's API to update branches, which is cleaner
33
+ * than local git rebase + force-push because:
34
+ * - No local checkout needed
35
+ * - Works in CI/CD without full git history
36
+ * - Uses the provider's merge infrastructure
37
+ * - Avoids force-push permission issues
38
+ *
39
+ * @param options - Configuration for the rebase operation
40
+ * @param provider - Git provider to use (auto-detected if not provided)
41
+ * @returns Results of the rebase operation for each PR
42
+ */
43
+ export function rebaseSiblingPRs(options, provider) {
44
+ const gitProvider = provider ?? detectGitProvider(options.cwd);
45
+ if (!gitProvider) {
46
+ return {
47
+ succeeded: [],
48
+ failed: [],
49
+ skipped: [],
50
+ totalChecked: 0,
51
+ };
52
+ }
53
+ const { excludePRNumber, cwd, onProgress, labelConflicts = true, commentOnConflicts = true, rebaseAll = false, } = options;
54
+ const openPRs = gitProvider.listOpenPRs(cwd);
55
+ const result = {
56
+ succeeded: [],
57
+ failed: [],
58
+ skipped: [],
59
+ totalChecked: 0,
60
+ };
61
+ for (const pr of openPRs) {
62
+ // Skip the PR that was just merged
63
+ if (pr.number === excludePRNumber)
64
+ continue;
65
+ result.totalChecked++;
66
+ // Check mergeable state unless rebaseAll is set
67
+ if (!rebaseAll) {
68
+ const state = gitProvider.getMergeableState(pr.number, cwd);
69
+ if (state === 'MERGEABLE') {
70
+ result.skipped.push({
71
+ success: true,
72
+ prNumber: pr.number,
73
+ headBranch: pr.headBranch,
74
+ });
75
+ continue;
76
+ }
77
+ // Skip UNKNOWN state PRs — we can't determine if they need rebase
78
+ if (state === 'UNKNOWN') {
79
+ result.skipped.push({
80
+ success: true,
81
+ prNumber: pr.number,
82
+ headBranch: pr.headBranch,
83
+ });
84
+ continue;
85
+ }
86
+ }
87
+ onProgress?.(`Updating PR #${pr.number} (${pr.headBranch})...`);
88
+ const updateResult = gitProvider.updatePRBranch(pr.number, cwd);
89
+ if (updateResult.success) {
90
+ result.succeeded.push(updateResult);
91
+ }
92
+ else {
93
+ result.failed.push(updateResult);
94
+ // Label and comment on conflict failures
95
+ if (updateResult.hasConflicts) {
96
+ if (labelConflicts) {
97
+ gitProvider.addLabel(pr.number, CONFLICT_LABEL, cwd);
98
+ }
99
+ if (commentOnConflicts) {
100
+ gitProvider.addComment(pr.number, CONFLICT_COMMENT, cwd);
101
+ }
102
+ }
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ //# sourceMappingURL=rebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebase.js","sourceRoot":"","sources":["../../../src/lib/shipping/rebase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Shipping Types — Git Provider Interface & Auto-Merge
3
+ *
4
+ * Provider-agnostic interface for git hosting operations needed by the
5
+ * shipping/rebase pipeline and auto-merge orchestration. Implementations
6
+ * exist for GitHub (via gh CLI) and can be added for GitLab, Bitbucket, etc.
7
+ */
8
+ import type { PRInfo, MergeableState } from '../pr/index.js';
9
+ /**
10
+ * Supported git hosting provider names.
11
+ */
12
+ export type GitProviderName = 'github' | 'gitlab';
13
+ /**
14
+ * Result of attempting to update (rebase) a PR branch via the provider API.
15
+ */
16
+ export interface UpdateBranchResult {
17
+ success: boolean;
18
+ /** PR number that was updated */
19
+ prNumber: number;
20
+ /** Head branch name */
21
+ headBranch: string;
22
+ /** Error message if the update failed */
23
+ error?: string;
24
+ /** Whether the failure was due to merge conflicts */
25
+ hasConflicts?: boolean;
26
+ }
27
+ /**
28
+ * Result of the full sibling rebase operation across all PRs.
29
+ */
30
+ export interface SiblingRebaseResult {
31
+ /** PRs that were successfully rebased */
32
+ succeeded: UpdateBranchResult[];
33
+ /** PRs that failed to rebase (conflicts or other errors) */
34
+ failed: UpdateBranchResult[];
35
+ /** PRs that were skipped (already up to date) */
36
+ skipped: UpdateBranchResult[];
37
+ /** Total open PRs checked */
38
+ totalChecked: number;
39
+ }
40
+ /**
41
+ * Options for the rebaseSiblingPRs operation.
42
+ */
43
+ export interface RebaseSiblingOptions {
44
+ /** PR number to exclude (the one that was just merged) */
45
+ excludePRNumber: number | null;
46
+ /** Working directory for git operations */
47
+ cwd?: string;
48
+ /** Callback for progress messages */
49
+ onProgress?: (msg: string) => void;
50
+ /** Whether to add a 'rebase-conflict' label on conflict failures */
51
+ labelConflicts?: boolean;
52
+ /** Whether to add a comment on conflict failures */
53
+ commentOnConflicts?: boolean;
54
+ /** Whether to attempt all PRs or just conflicting ones */
55
+ rebaseAll?: boolean;
56
+ }
57
+ /**
58
+ * Provider-agnostic interface for git hosting operations.
59
+ *
60
+ * Each provider (GitHub, GitLab, etc.) implements this interface to enable
61
+ * API-based branch updates instead of local git rebase + force-push.
62
+ *
63
+ * API-based updates are preferred because:
64
+ * - They don't require a local checkout
65
+ * - They work in CI/CD environments without full git history
66
+ * - They use the hosting provider's merge infrastructure
67
+ * - They avoid force-push permission issues
68
+ */
69
+ export interface GitProvider {
70
+ /** Which provider this is */
71
+ readonly name: GitProviderName;
72
+ /**
73
+ * List all open PRs/MRs in the repository.
74
+ */
75
+ listOpenPRs(cwd?: string): PRInfo[];
76
+ /**
77
+ * Get the mergeable state of a PR/MR.
78
+ */
79
+ getMergeableState(prNumber: number, cwd?: string): MergeableState;
80
+ /**
81
+ * Update a PR branch to include the latest changes from its base branch.
82
+ *
83
+ * GitHub: PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch
84
+ * GitLab: PUT /projects/{id}/merge_requests/{merge_request_iid}/rebase
85
+ *
86
+ * This is the API-based alternative to local git rebase + force-push.
87
+ * Falls back to local git rebase if the API call fails.
88
+ */
89
+ updatePRBranch(prNumber: number, cwd?: string): UpdateBranchResult;
90
+ /**
91
+ * Add a label to a PR/MR.
92
+ */
93
+ addLabel(prNumber: number, label: string, cwd?: string): boolean;
94
+ /**
95
+ * Add a comment to a PR/MR.
96
+ */
97
+ addComment(prNumber: number, body: string, cwd?: string): boolean;
98
+ }
99
+ /**
100
+ * Result of enabling or disabling auto-merge on a PR.
101
+ */
102
+ export interface AutoMergeResult {
103
+ success: boolean;
104
+ prNumber: number;
105
+ error?: string;
106
+ /** Whether auto-merge was already enabled when we tried to enable it */
107
+ alreadyEnabled?: boolean;
108
+ }
109
+ /**
110
+ * Configuration for the when-green watch loop.
111
+ */
112
+ export interface WhenGreenOptions {
113
+ /** PR number to watch */
114
+ prNumber: number;
115
+ /** Merge method (squash, merge, rebase) */
116
+ method: 'merge' | 'squash' | 'rebase';
117
+ /** Delete branch after merging */
118
+ deleteBranch: boolean;
119
+ /** Use admin privileges to bypass branch protections */
120
+ admin: boolean;
121
+ /** Fail on conflicts instead of auto-rebasing */
122
+ noRebase: boolean;
123
+ /** Working directory for git operations */
124
+ cwd?: string;
125
+ /** Head branch name */
126
+ headBranch: string;
127
+ /** Base branch name */
128
+ baseBranch: string;
129
+ /** Callback for progress messages */
130
+ onProgress?: (msg: string) => void;
131
+ /** Callback for warning messages */
132
+ onWarning?: (msg: string) => void;
133
+ /** Maximum time to wait in milliseconds (default: 60 minutes) */
134
+ timeoutMs?: number;
135
+ /** Poll interval in milliseconds (default: 30 seconds) */
136
+ pollIntervalMs?: number;
137
+ }
138
+ /**
139
+ * Result of the when-green watch loop.
140
+ */
141
+ export interface WhenGreenResult {
142
+ /** Whether the PR was successfully merged */
143
+ merged: boolean;
144
+ /** Whether native auto-merge was enabled as a safety net */
145
+ autoMergeEnabled: boolean;
146
+ /** Number of poll cycles completed */
147
+ pollCycles: number;
148
+ /** Whether a rebase was performed during the watch */
149
+ rebasePerformed: boolean;
150
+ /** Error message if the operation failed */
151
+ error?: string;
152
+ /** Error code for JSON output */
153
+ errorCode?: string;
154
+ }
155
+ /**
156
+ * Provider-agnostic interface for auto-merge operations.
157
+ *
158
+ * Each provider (GitHub, GitLab, etc.) implements these methods to enable
159
+ * native auto-merge functionality.
160
+ */
161
+ export interface AutoMergeProvider {
162
+ /** Which provider this is */
163
+ readonly name: 'github' | 'gitlab';
164
+ /**
165
+ * Enable native auto-merge on a PR.
166
+ *
167
+ * GitHub: `gh pr merge --auto --squash`
168
+ * GitLab: merge when pipeline succeeds API
169
+ */
170
+ enableAutoMerge(prNumber: number, method: 'merge' | 'squash' | 'rebase', cwd?: string): AutoMergeResult;
171
+ /**
172
+ * Disable native auto-merge on a PR.
173
+ *
174
+ * GitHub: `gh pr merge --disable-auto`
175
+ */
176
+ disableAutoMerge(prNumber: number, cwd?: string): AutoMergeResult;
177
+ /**
178
+ * Check if a PR has been merged (by auto-merge or manually).
179
+ */
180
+ isPRMerged(prNumber: number, cwd?: string): boolean;
181
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shipping Types — Git Provider Interface & Auto-Merge
3
+ *
4
+ * Provider-agnostic interface for git hosting operations needed by the
5
+ * shipping/rebase pipeline and auto-merge orchestration. Implementations
6
+ * exist for GitHub (via gh CLI) and can be added for GitLab, Bitbucket, etc.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/shipping/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Daemon Process
3
+ *
4
+ * This is the background process spawned by `prlt sync start`.
5
+ * It runs a sync cycle and merge queue cycle on a configurable interval.
6
+ *
7
+ * Args: [hqPath, intervalSeconds]
8
+ */
9
+ export {};