@generacy-ai/generacy 0.3.4 → 0.5.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 (247) hide show
  1. package/README.md +153 -0
  2. package/dist/cli/commands/cluster/scaffolder.d.ts.map +1 -1
  3. package/dist/cli/commands/cluster/scaffolder.js +2 -0
  4. package/dist/cli/commands/cluster/scaffolder.js.map +1 -1
  5. package/dist/cli/commands/cockpit/advance.d.ts +42 -0
  6. package/dist/cli/commands/cockpit/advance.d.ts.map +1 -0
  7. package/dist/cli/commands/cockpit/advance.js +136 -0
  8. package/dist/cli/commands/cockpit/advance.js.map +1 -0
  9. package/dist/cli/commands/cockpit/clarification-comment-finder.d.ts +13 -0
  10. package/dist/cli/commands/cockpit/clarification-comment-finder.d.ts.map +1 -0
  11. package/dist/cli/commands/cockpit/clarification-comment-finder.js +31 -0
  12. package/dist/cli/commands/cockpit/clarification-comment-finder.js.map +1 -0
  13. package/dist/cli/commands/cockpit/code-references.d.ts +27 -0
  14. package/dist/cli/commands/cockpit/code-references.d.ts.map +1 -0
  15. package/dist/cli/commands/cockpit/code-references.js +48 -0
  16. package/dist/cli/commands/cockpit/code-references.js.map +1 -0
  17. package/dist/cli/commands/cockpit/context.d.ts +90 -0
  18. package/dist/cli/commands/cockpit/context.d.ts.map +1 -0
  19. package/dist/cli/commands/cockpit/context.js +280 -0
  20. package/dist/cli/commands/cockpit/context.js.map +1 -0
  21. package/dist/cli/commands/cockpit/exit.d.ts +12 -0
  22. package/dist/cli/commands/cockpit/exit.d.ts.map +1 -0
  23. package/dist/cli/commands/cockpit/exit.js +18 -0
  24. package/dist/cli/commands/cockpit/exit.js.map +1 -0
  25. package/dist/cli/commands/cockpit/gate-vocabulary.d.ts +48 -0
  26. package/dist/cli/commands/cockpit/gate-vocabulary.d.ts.map +1 -0
  27. package/dist/cli/commands/cockpit/gate-vocabulary.js +96 -0
  28. package/dist/cli/commands/cockpit/gate-vocabulary.js.map +1 -0
  29. package/dist/cli/commands/cockpit/index.d.ts +20 -0
  30. package/dist/cli/commands/cockpit/index.d.ts.map +1 -0
  31. package/dist/cli/commands/cockpit/index.js +42 -0
  32. package/dist/cli/commands/cockpit/index.js.map +1 -0
  33. package/dist/cli/commands/cockpit/manual-advance-marker.d.ts +18 -0
  34. package/dist/cli/commands/cockpit/manual-advance-marker.d.ts.map +1 -0
  35. package/dist/cli/commands/cockpit/manual-advance-marker.js +43 -0
  36. package/dist/cli/commands/cockpit/manual-advance-marker.js.map +1 -0
  37. package/dist/cli/commands/cockpit/mcp/errors.d.ts +54 -0
  38. package/dist/cli/commands/cockpit/mcp/errors.d.ts.map +1 -0
  39. package/dist/cli/commands/cockpit/mcp/errors.js +190 -0
  40. package/dist/cli/commands/cockpit/mcp/errors.js.map +1 -0
  41. package/dist/cli/commands/cockpit/mcp/event-bus-registry.d.ts +59 -0
  42. package/dist/cli/commands/cockpit/mcp/event-bus-registry.d.ts.map +1 -0
  43. package/dist/cli/commands/cockpit/mcp/event-bus-registry.js +305 -0
  44. package/dist/cli/commands/cockpit/mcp/event-bus-registry.js.map +1 -0
  45. package/dist/cli/commands/cockpit/mcp/event-bus.d.ts +82 -0
  46. package/dist/cli/commands/cockpit/mcp/event-bus.d.ts.map +1 -0
  47. package/dist/cli/commands/cockpit/mcp/event-bus.js +230 -0
  48. package/dist/cli/commands/cockpit/mcp/event-bus.js.map +1 -0
  49. package/dist/cli/commands/cockpit/mcp/index.d.ts +17 -0
  50. package/dist/cli/commands/cockpit/mcp/index.d.ts.map +1 -0
  51. package/dist/cli/commands/cockpit/mcp/index.js +37 -0
  52. package/dist/cli/commands/cockpit/mcp/index.js.map +1 -0
  53. package/dist/cli/commands/cockpit/mcp/ref-input.d.ts +52 -0
  54. package/dist/cli/commands/cockpit/mcp/ref-input.d.ts.map +1 -0
  55. package/dist/cli/commands/cockpit/mcp/ref-input.js +132 -0
  56. package/dist/cli/commands/cockpit/mcp/ref-input.js.map +1 -0
  57. package/dist/cli/commands/cockpit/mcp/schemas.d.ts +422 -0
  58. package/dist/cli/commands/cockpit/mcp/schemas.d.ts.map +1 -0
  59. package/dist/cli/commands/cockpit/mcp/schemas.js +97 -0
  60. package/dist/cli/commands/cockpit/mcp/schemas.js.map +1 -0
  61. package/dist/cli/commands/cockpit/mcp/server.d.ts +17 -0
  62. package/dist/cli/commands/cockpit/mcp/server.d.ts.map +1 -0
  63. package/dist/cli/commands/cockpit/mcp/server.js +72 -0
  64. package/dist/cli/commands/cockpit/mcp/server.js.map +1 -0
  65. package/dist/cli/commands/cockpit/mcp/tools/cockpit_advance.d.ts +42 -0
  66. package/dist/cli/commands/cockpit/mcp/tools/cockpit_advance.d.ts.map +1 -0
  67. package/dist/cli/commands/cockpit/mcp/tools/cockpit_advance.js +73 -0
  68. package/dist/cli/commands/cockpit/mcp/tools/cockpit_advance.js.map +1 -0
  69. package/dist/cli/commands/cockpit/mcp/tools/cockpit_await_events.d.ts +34 -0
  70. package/dist/cli/commands/cockpit/mcp/tools/cockpit_await_events.d.ts.map +1 -0
  71. package/dist/cli/commands/cockpit/mcp/tools/cockpit_await_events.js +115 -0
  72. package/dist/cli/commands/cockpit/mcp/tools/cockpit_await_events.js.map +1 -0
  73. package/dist/cli/commands/cockpit/mcp/tools/cockpit_context.d.ts +21 -0
  74. package/dist/cli/commands/cockpit/mcp/tools/cockpit_context.d.ts.map +1 -0
  75. package/dist/cli/commands/cockpit/mcp/tools/cockpit_context.js +35 -0
  76. package/dist/cli/commands/cockpit/mcp/tools/cockpit_context.js.map +1 -0
  77. package/dist/cli/commands/cockpit/mcp/tools/cockpit_merge.d.ts +43 -0
  78. package/dist/cli/commands/cockpit/mcp/tools/cockpit_merge.d.ts.map +1 -0
  79. package/dist/cli/commands/cockpit/mcp/tools/cockpit_merge.js +99 -0
  80. package/dist/cli/commands/cockpit/mcp/tools/cockpit_merge.js.map +1 -0
  81. package/dist/cli/commands/cockpit/mcp/tools/cockpit_queue.d.ts +59 -0
  82. package/dist/cli/commands/cockpit/mcp/tools/cockpit_queue.d.ts.map +1 -0
  83. package/dist/cli/commands/cockpit/mcp/tools/cockpit_queue.js +106 -0
  84. package/dist/cli/commands/cockpit/mcp/tools/cockpit_queue.js.map +1 -0
  85. package/dist/cli/commands/cockpit/mcp/tools/cockpit_resume.d.ts +38 -0
  86. package/dist/cli/commands/cockpit/mcp/tools/cockpit_resume.d.ts.map +1 -0
  87. package/dist/cli/commands/cockpit/mcp/tools/cockpit_resume.js +79 -0
  88. package/dist/cli/commands/cockpit/mcp/tools/cockpit_resume.js.map +1 -0
  89. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_add.d.ts +31 -0
  90. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_add.d.ts.map +1 -0
  91. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_add.js +81 -0
  92. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_add.js.map +1 -0
  93. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_remove.d.ts +30 -0
  94. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_remove.d.ts.map +1 -0
  95. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_remove.js +80 -0
  96. package/dist/cli/commands/cockpit/mcp/tools/cockpit_scope_remove.js.map +1 -0
  97. package/dist/cli/commands/cockpit/mcp/tools/cockpit_status.d.ts +21 -0
  98. package/dist/cli/commands/cockpit/mcp/tools/cockpit_status.d.ts.map +1 -0
  99. package/dist/cli/commands/cockpit/mcp/tools/cockpit_status.js +59 -0
  100. package/dist/cli/commands/cockpit/mcp/tools/cockpit_status.js.map +1 -0
  101. package/dist/cli/commands/cockpit/merge.d.ts +42 -0
  102. package/dist/cli/commands/cockpit/merge.d.ts.map +1 -0
  103. package/dist/cli/commands/cockpit/merge.js +360 -0
  104. package/dist/cli/commands/cockpit/merge.js.map +1 -0
  105. package/dist/cli/commands/cockpit/plan-dependency-extractor.d.ts +30 -0
  106. package/dist/cli/commands/cockpit/plan-dependency-extractor.d.ts.map +1 -0
  107. package/dist/cli/commands/cockpit/plan-dependency-extractor.js +135 -0
  108. package/dist/cli/commands/cockpit/plan-dependency-extractor.js.map +1 -0
  109. package/dist/cli/commands/cockpit/queue.d.ts +100 -0
  110. package/dist/cli/commands/cockpit/queue.d.ts.map +1 -0
  111. package/dist/cli/commands/cockpit/queue.js +551 -0
  112. package/dist/cli/commands/cockpit/queue.js.map +1 -0
  113. package/dist/cli/commands/cockpit/resolver.d.ts +70 -0
  114. package/dist/cli/commands/cockpit/resolver.d.ts.map +1 -0
  115. package/dist/cli/commands/cockpit/resolver.js +117 -0
  116. package/dist/cli/commands/cockpit/resolver.js.map +1 -0
  117. package/dist/cli/commands/cockpit/resume.d.ts +38 -0
  118. package/dist/cli/commands/cockpit/resume.d.ts.map +1 -0
  119. package/dist/cli/commands/cockpit/resume.js +167 -0
  120. package/dist/cli/commands/cockpit/resume.js.map +1 -0
  121. package/dist/cli/commands/cockpit/scope/errors.d.ts +21 -0
  122. package/dist/cli/commands/cockpit/scope/errors.d.ts.map +1 -0
  123. package/dist/cli/commands/cockpit/scope/errors.js +17 -0
  124. package/dist/cli/commands/cockpit/scope/errors.js.map +1 -0
  125. package/dist/cli/commands/cockpit/scope/retry.d.ts +24 -0
  126. package/dist/cli/commands/cockpit/scope/retry.d.ts.map +1 -0
  127. package/dist/cli/commands/cockpit/scope/retry.js +52 -0
  128. package/dist/cli/commands/cockpit/scope/retry.js.map +1 -0
  129. package/dist/cli/commands/cockpit/scope/writer.d.ts +21 -0
  130. package/dist/cli/commands/cockpit/scope/writer.d.ts.map +1 -0
  131. package/dist/cli/commands/cockpit/scope/writer.js +141 -0
  132. package/dist/cli/commands/cockpit/scope/writer.js.map +1 -0
  133. package/dist/cli/commands/cockpit/scope.d.ts +22 -0
  134. package/dist/cli/commands/cockpit/scope.d.ts.map +1 -0
  135. package/dist/cli/commands/cockpit/scope.js +110 -0
  136. package/dist/cli/commands/cockpit/scope.js.map +1 -0
  137. package/dist/cli/commands/cockpit/shared/classify-issue.d.ts +12 -0
  138. package/dist/cli/commands/cockpit/shared/classify-issue.d.ts.map +1 -0
  139. package/dist/cli/commands/cockpit/shared/classify-issue.js +10 -0
  140. package/dist/cli/commands/cockpit/shared/classify-issue.js.map +1 -0
  141. package/dist/cli/commands/cockpit/shared/failing-check-json.d.ts +53 -0
  142. package/dist/cli/commands/cockpit/shared/failing-check-json.d.ts.map +1 -0
  143. package/dist/cli/commands/cockpit/shared/failing-check-json.js +170 -0
  144. package/dist/cli/commands/cockpit/shared/failing-check-json.js.map +1 -0
  145. package/dist/cli/commands/cockpit/shared/identity.d.ts +54 -0
  146. package/dist/cli/commands/cockpit/shared/identity.d.ts.map +1 -0
  147. package/dist/cli/commands/cockpit/shared/identity.js +65 -0
  148. package/dist/cli/commands/cockpit/shared/identity.js.map +1 -0
  149. package/dist/cli/commands/cockpit/shared/is-done-snapshot.d.ts +16 -0
  150. package/dist/cli/commands/cockpit/shared/is-done-snapshot.d.ts.map +1 -0
  151. package/dist/cli/commands/cockpit/shared/is-done-snapshot.js +17 -0
  152. package/dist/cli/commands/cockpit/shared/is-done-snapshot.js.map +1 -0
  153. package/dist/cli/commands/cockpit/shared/pagination.d.ts +17 -0
  154. package/dist/cli/commands/cockpit/shared/pagination.d.ts.map +1 -0
  155. package/dist/cli/commands/cockpit/shared/pagination.js +50 -0
  156. package/dist/cli/commands/cockpit/shared/pagination.js.map +1 -0
  157. package/dist/cli/commands/cockpit/shared/pr-link.d.ts +8 -0
  158. package/dist/cli/commands/cockpit/shared/pr-link.d.ts.map +1 -0
  159. package/dist/cli/commands/cockpit/shared/pr-link.js +15 -0
  160. package/dist/cli/commands/cockpit/shared/pr-link.js.map +1 -0
  161. package/dist/cli/commands/cockpit/shared/required-checks.d.ts +17 -0
  162. package/dist/cli/commands/cockpit/shared/required-checks.d.ts.map +1 -0
  163. package/dist/cli/commands/cockpit/shared/required-checks.js +38 -0
  164. package/dist/cli/commands/cockpit/shared/required-checks.js.map +1 -0
  165. package/dist/cli/commands/cockpit/shared/review-context-json.d.ts +29 -0
  166. package/dist/cli/commands/cockpit/shared/review-context-json.d.ts.map +1 -0
  167. package/dist/cli/commands/cockpit/shared/review-context-json.js +28 -0
  168. package/dist/cli/commands/cockpit/shared/review-context-json.js.map +1 -0
  169. package/dist/cli/commands/cockpit/status/color.d.ts +11 -0
  170. package/dist/cli/commands/cockpit/status/color.d.ts.map +1 -0
  171. package/dist/cli/commands/cockpit/status/color.js +33 -0
  172. package/dist/cli/commands/cockpit/status/color.js.map +1 -0
  173. package/dist/cli/commands/cockpit/status/group.d.ts +10 -0
  174. package/dist/cli/commands/cockpit/status/group.d.ts.map +1 -0
  175. package/dist/cli/commands/cockpit/status/group.js +50 -0
  176. package/dist/cli/commands/cockpit/status/group.js.map +1 -0
  177. package/dist/cli/commands/cockpit/status/render-table.d.ts +24 -0
  178. package/dist/cli/commands/cockpit/status/render-table.d.ts.map +1 -0
  179. package/dist/cli/commands/cockpit/status/render-table.js +71 -0
  180. package/dist/cli/commands/cockpit/status/render-table.js.map +1 -0
  181. package/dist/cli/commands/cockpit/status/row.d.ts +18 -0
  182. package/dist/cli/commands/cockpit/status/row.d.ts.map +1 -0
  183. package/dist/cli/commands/cockpit/status/row.js +17 -0
  184. package/dist/cli/commands/cockpit/status/row.js.map +1 -0
  185. package/dist/cli/commands/cockpit/status.d.ts +18 -0
  186. package/dist/cli/commands/cockpit/status.d.ts.map +1 -0
  187. package/dist/cli/commands/cockpit/status.js +153 -0
  188. package/dist/cli/commands/cockpit/status.js.map +1 -0
  189. package/dist/cli/commands/cockpit/watch/actionable.d.ts +15 -0
  190. package/dist/cli/commands/cockpit/watch/actionable.d.ts.map +1 -0
  191. package/dist/cli/commands/cockpit/watch/actionable.js +32 -0
  192. package/dist/cli/commands/cockpit/watch/actionable.js.map +1 -0
  193. package/dist/cli/commands/cockpit/watch/aggregate-emit.d.ts +107 -0
  194. package/dist/cli/commands/cockpit/watch/aggregate-emit.d.ts.map +1 -0
  195. package/dist/cli/commands/cockpit/watch/aggregate-emit.js +41 -0
  196. package/dist/cli/commands/cockpit/watch/aggregate-emit.js.map +1 -0
  197. package/dist/cli/commands/cockpit/watch/aggregate.d.ts +25 -0
  198. package/dist/cli/commands/cockpit/watch/aggregate.d.ts.map +1 -0
  199. package/dist/cli/commands/cockpit/watch/aggregate.js +67 -0
  200. package/dist/cli/commands/cockpit/watch/aggregate.js.map +1 -0
  201. package/dist/cli/commands/cockpit/watch/check-rollup.d.ts +9 -0
  202. package/dist/cli/commands/cockpit/watch/check-rollup.d.ts.map +1 -0
  203. package/dist/cli/commands/cockpit/watch/check-rollup.js +22 -0
  204. package/dist/cli/commands/cockpit/watch/check-rollup.js.map +1 -0
  205. package/dist/cli/commands/cockpit/watch/diff.d.ts +33 -0
  206. package/dist/cli/commands/cockpit/watch/diff.d.ts.map +1 -0
  207. package/dist/cli/commands/cockpit/watch/diff.js +93 -0
  208. package/dist/cli/commands/cockpit/watch/diff.js.map +1 -0
  209. package/dist/cli/commands/cockpit/watch/emit.d.ts +58 -0
  210. package/dist/cli/commands/cockpit/watch/emit.d.ts.map +1 -0
  211. package/dist/cli/commands/cockpit/watch/emit.js +30 -0
  212. package/dist/cli/commands/cockpit/watch/emit.js.map +1 -0
  213. package/dist/cli/commands/cockpit/watch/poll-loop.d.ts +29 -0
  214. package/dist/cli/commands/cockpit/watch/poll-loop.d.ts.map +1 -0
  215. package/dist/cli/commands/cockpit/watch/poll-loop.js +81 -0
  216. package/dist/cli/commands/cockpit/watch/poll-loop.js.map +1 -0
  217. package/dist/cli/commands/cockpit/watch/pr-state.d.ts +17 -0
  218. package/dist/cli/commands/cockpit/watch/pr-state.d.ts.map +1 -0
  219. package/dist/cli/commands/cockpit/watch/pr-state.js +33 -0
  220. package/dist/cli/commands/cockpit/watch/pr-state.js.map +1 -0
  221. package/dist/cli/commands/cockpit/watch/snapshot.d.ts +33 -0
  222. package/dist/cli/commands/cockpit/watch/snapshot.d.ts.map +1 -0
  223. package/dist/cli/commands/cockpit/watch/snapshot.js +30 -0
  224. package/dist/cli/commands/cockpit/watch/snapshot.js.map +1 -0
  225. package/dist/cli/commands/cockpit/watch/stream-event.d.ts +82 -0
  226. package/dist/cli/commands/cockpit/watch/stream-event.d.ts.map +1 -0
  227. package/dist/cli/commands/cockpit/watch/stream-event.js +9 -0
  228. package/dist/cli/commands/cockpit/watch/stream-event.js.map +1 -0
  229. package/dist/cli/commands/cockpit/watch.d.ts +22 -0
  230. package/dist/cli/commands/cockpit/watch.d.ts.map +1 -0
  231. package/dist/cli/commands/cockpit/watch.js +186 -0
  232. package/dist/cli/commands/cockpit/watch.js.map +1 -0
  233. package/dist/cli/commands/setup/build.d.ts.map +1 -1
  234. package/dist/cli/commands/setup/build.js +59 -0
  235. package/dist/cli/commands/setup/build.js.map +1 -1
  236. package/dist/cli/index.d.ts.map +1 -1
  237. package/dist/cli/index.js +2 -0
  238. package/dist/cli/index.js.map +1 -1
  239. package/dist/config/schema.d.ts +788 -0
  240. package/dist/config/schema.d.ts.map +1 -1
  241. package/dist/config/schema.js +12 -1
  242. package/dist/config/schema.js.map +1 -1
  243. package/dist/index.d.ts +2 -0
  244. package/dist/index.d.ts.map +1 -1
  245. package/dist/index.js +2 -0
  246. package/dist/index.js.map +1 -1
  247. package/package.json +12 -6
package/README.md CHANGED
@@ -202,6 +202,159 @@ The worker handles SIGTERM and SIGINT for graceful shutdown:
202
202
  4. Unregisters from orchestrator
203
203
  5. Closes health server
204
204
 
205
+ ## `cockpit watch` — stream grammar
206
+
207
+ `generacy cockpit watch <epic-ref>` streams one NDJSON event per line to stdout. Every emitted line is a JSON object with a `type` field equal to exactly one of the three values below. Consumers dispatching on `type` see 100% of the stream.
208
+
209
+ | `type` | Fields | Emitted when |
210
+ |--------------------|-----------------------------------------------------------------------------------------------------|--------------|
211
+ | `issue-transition` | `type`, `ts`, `repo`, `kind`, `number`, `from`, `to`, `sourceLabel`, `url`, `event`, `labels`, `initial?` | Per-issue or per-PR state transition surfaced by the poll loop's diff step. |
212
+ | `phase-complete` | `type`, `phase`, `epicRepo`, `epicNumber`, `ts`, `initial?` | Every ref in a phase is CLOSED (fires once per transition into fully-closed). |
213
+ | `epic-complete` | `type`, `epicRepo`, `epicNumber`, `ts`, `initial?` | Every ref in the epic is CLOSED. |
214
+
215
+ `initial: true` (optional, all three types) marks lines emitted during the startup sweep — see [Startup sweep](#startup-sweep).
216
+
217
+ ### `issue-transition`
218
+
219
+ ```json
220
+ {"type":"issue-transition","ts":"2026-07-09T14:20:03.111Z","repo":"o/r","kind":"issue","number":123,"from":"pending","to":"active","sourceLabel":"phase:plan","url":"https://github.com/o/r/issues/123","event":"label-change","labels":["phase:plan"]}
221
+ ```
222
+
223
+ - `event` — the reason for the transition: `label-change`, `issue-closed`, `pr-merged`, `pr-closed`, or `pr-checks`.
224
+ - `from` / `to` — cockpit-state values; `null` on the initial sweep (`from`) or on a terminal close (`to`).
225
+ - `sourceLabel` — the label that determined `to`, or `null`.
226
+ - `kind` — `issue` for GitHub issues; `pr` for pull requests (`pr-*` events).
227
+ - Legacy consumers dispatching on `event` are unchanged; the `event` field is retained with the same enum values and semantics.
228
+
229
+ ### `phase-complete`
230
+
231
+ Fires once per transition into a fully-closed phase (last open issue in the phase closes; `not_planned` closures count as done).
232
+
233
+ ```json
234
+ {"type":"phase-complete","phase":"P1 — Foundation","epicRepo":"generacy-ai/generacy","epicNumber":885,"ts":"2026-07-09T14:23:11.041Z"}
235
+ ```
236
+
237
+ - `phase` — the phase heading text, verbatim.
238
+ - After a reopen that regresses the phase, re-completion fires the event again.
239
+ - Empty phase (heading with `refs.length === 0`) never fires `phase-complete`. One stderr warning is emitted at watch startup instead: `cockpit watch: phase "<heading>" has no issue refs; treated as complete`.
240
+ - Issues in the `(no phase)` bucket are excluded from `phase-complete`.
241
+ - Phase-less epic (no phase headings) never fires `phase-complete`.
242
+
243
+ ### `epic-complete`
244
+
245
+ Fires once when every ref in the epic is CLOSED, regardless of phase structure. Empty phases contribute nothing to the ref set, so they don't block the epic edge.
246
+
247
+ ```json
248
+ {"type":"epic-complete","epicRepo":"generacy-ai/generacy","epicNumber":885,"ts":"2026-07-09T14:25:03.782Z"}
249
+ ```
250
+
251
+ ### Startup sweep
252
+
253
+ If per-issue state, a fully-closed phase, or a fully-closed epic is already the truth at watch start, the corresponding events fire immediately with `"initial": true` so consumers can distinguish "this just happened" from "this was already true when I attached":
254
+
255
+ ```json
256
+ {"type":"issue-transition","ts":"…","repo":"o/r","kind":"issue","number":123,"from":null,"to":"active","sourceLabel":"phase:plan","url":"…","event":"label-change","labels":["phase:plan"],"initial":true}
257
+ {"type":"phase-complete","phase":"P1 — Foundation","epicRepo":"o/r","epicNumber":1,"ts":"…","initial":true}
258
+ {"type":"epic-complete","epicRepo":"o/r","epicNumber":1,"ts":"…","initial":true}
259
+ ```
260
+
261
+ Per-issue startup-sweep semantics were introduced in #839; aggregate startup-sweep semantics in #885. Both are covered by the single shape above: `initial: true` on the first appearance.
262
+
263
+ ### `--exit-on-epic-complete`
264
+
265
+ Boolean flag (default false). When set, watch drains stdout and exits `0` after emitting the `epic-complete` line. That line is guaranteed to be the final line ever written. Consumers on `stdin` see clean EOF after it.
266
+
267
+ ```bash
268
+ generacy cockpit watch owner/repo#123 --exit-on-epic-complete | jq -c .
269
+ ```
270
+
271
+ ### Ordering within a poll cycle
272
+
273
+ When a single poll produces multiple events, ordering is deterministic:
274
+
275
+ 1. All `issue-transition` events in existing order.
276
+ 2. All `phase-complete` events in body order.
277
+ 3. `epic-complete` last if firing.
278
+
279
+ This guarantees cause precedes effect (the last `issue-closed` is always visible before the `phase-complete` it triggered) and — with `--exit-on-epic-complete` — that `epic-complete` is the final line on stdout before the process exits.
280
+
281
+ ### Payload discipline
282
+
283
+ `phase-complete` and `epic-complete` carry `epicRepo` and `epicNumber` for correlation. They do **not** carry `closedRefs`, `totalCount`, `suggestion`, or any per-issue field (`repo`, `kind`, `number`, `url`, `labels`, `sourceLabel`, `from`, `to`, `event`). Human-readable prose (celebration lines, next-step suggestions) is the watch plugin's responsibility, derived from the payload — not the engine's.
284
+
285
+ ### Programmatic parsing
286
+
287
+ ```ts
288
+ import { CockpitStreamEventSchema } from '@generacy-ai/generacy';
289
+
290
+ for await (const line of readLines(childStdout)) {
291
+ const evt = CockpitStreamEventSchema.parse(JSON.parse(line));
292
+ // switch on evt.type — full type narrowing available
293
+ }
294
+ ```
295
+
296
+ ## `cockpit resume` — re-arm a failed phase
297
+
298
+ `generacy cockpit resume <issue>` is the engine-owned re-arm operation for a failed phase. On an issue carrying `failed:<phase>`, it applies the same label triple a naturally-paused-then-completed gate would have — the label monitor's next poll enqueues the issue, and the worker's phase resolver walks the preserved `completed:<earlier-phase>` chain to pick `<phase>` as the start phase. Failed-issue recovery becomes a one-liner instead of by-hand label surgery.
299
+
300
+ ### Accepted ref forms
301
+
302
+ Same as every other cockpit verb (see [#822/#850](https://github.com/generacy-ai/generacy/pull/850) unified issue-ref grammar):
303
+
304
+ - bare number: `42` — requires a resolvable GitHub `origin` in cwd
305
+ - `owner/repo#N`: `generacy-ai/generacy#42`
306
+ - full URL: `https://github.com/generacy-ai/generacy/issues/42`
307
+
308
+ ### Options
309
+
310
+ | Flag | Description |
311
+ |---|---|
312
+ | `--workflow <name>` | Workflow-name override. Defaults to the issue's `workflow:<name>` label, or `speckit-feature` if absent. |
313
+
314
+ ### Exit codes
315
+
316
+ | Code | Meaning |
317
+ |---|---|
318
+ | `0` | Happy path (labels mutated) OR no-op (nothing to re-arm). |
319
+ | `1` | Remote/transport failure — `gh` API call error mid-sequence. |
320
+ | `2` | Argument error — missing `<issue>`, malformed ref, unresolvable bare number. |
321
+ | `3` | Refusal — ambiguous or non-re-armable state. Stderr names the offending labels. |
322
+
323
+ ### Labels added / removed (happy path)
324
+
325
+ **Added** (single API call, in order):
326
+ - `waiting-for:<preceding-gate>`
327
+ - `completed:<preceding-gate>`
328
+ - `agent:paused`
329
+
330
+ **Removed** (single API call, defensive):
331
+ - `failed:<phase>` — always
332
+ - `agent:error` — only if present
333
+ - `phase:<phase>` — only if present
334
+
335
+ `<preceding-gate>` is derived (not hardcoded) by inverting `GATE_MAPPING` from the orchestrator. For `speckit-feature` today: `failed:validate → implementation-review`, `failed:implement → tasks-review`, `failed:tasks → plan-review`, `failed:clarify → spec-review`. `failed:specify` and `failed:plan` have no preceding gate and fall to the refusal path.
336
+
337
+ ### Idempotency
338
+
339
+ - No-op on non-failed issues: single-line stdout, zero mutations, exit 0.
340
+ - Running `resume` twice on the same issue is safe — the second call either takes the no-op branch (if the failed set is already gone) or repeats the additions (GitHub's label add is idempotent).
341
+
342
+ ### Refusal semantics (all exit 3, zero mutations)
343
+
344
+ | Branch | Trigger |
345
+ |---|---|
346
+ | Multiple failed labels | Fetched set contains ≥2 `failed:*` labels. |
347
+ | Unknown phase | `failed:<phase>` where `<phase>` is not a workflow phase. |
348
+ | No preceding gate | `<phase>` has no gate in the effective gate mapping — evidence points at `process:<workflow>` re-queue. |
349
+ | Conflicting waiting | Existing `waiting-for:<other>` ≠ derived `<preceding-gate>`. |
350
+
351
+ ### Example
352
+
353
+ ```bash
354
+ $ generacy cockpit resume generacy-ai/generacy#42
355
+ resumed generacy-ai/generacy#42: re-armed phase=validate via preceding-gate=implementation-review; added=[waiting-for:implementation-review,completed:implementation-review,agent:paused] removed=[failed:validate,agent:error,phase:validate]
356
+ ```
357
+
205
358
  ## License
206
359
 
207
360
  MIT
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cluster/scaffolder.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,uBAAuB,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,uBAAuB,CAAC;IAClD,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUlF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAYtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAoMpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAkD1E"}
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cluster/scaffolder.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,uBAAuB,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,GAAG,uBAAuB,CAAC;IAClD,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUlF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAYtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAsMpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAkD1E"}
@@ -156,6 +156,7 @@ export function scaffoldDockerCompose(dir, input) {
156
156
  `DEPLOYMENT_MODE=${deploymentMode}`,
157
157
  `CLUSTER_VARIANT=${variant}`,
158
158
  'GENERACY_INITIAL_WORKERS=${WORKER_COUNT}',
159
+ 'GENERACY_CLUSTER_ROLE=orchestrator',
159
160
  ],
160
161
  env_file: envFile,
161
162
  healthcheck: {
@@ -187,6 +188,7 @@ export function scaffoldDockerCompose(dir, input) {
187
188
  'HEALTH_PORT=9001',
188
189
  `DEPLOYMENT_MODE=${deploymentMode}`,
189
190
  `CLUSTER_VARIANT=${variant}`,
191
+ 'GENERACY_CLUSTER_ROLE=worker',
190
192
  ],
191
193
  env_file: envFile,
192
194
  healthcheck: {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../../src/cli/commands/cluster/scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../../../src/cli/commands/cluster/scaffolder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA+ClD;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,SAAiB;IACxE,MAAM,OAAO,GAAG,IAAI;SACjB,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,IAAI,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACzD,OAAO,YAAY,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAiB;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACzD,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAA+B;IAC9E,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,OAAO,GAA2B;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;IACF,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC5C,CAAC;IACD,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAA+B;IAC9E,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,KAA2B;IAC5E,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,OAAO,CAAC;IACvD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,4EAA4E;IAC5E,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,kBAAkB,GACtB,gBAAgB,KAAK,MAAM;QACzB,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,uCAAuC,CAAC;IAE9C,qDAAqD;IACrD,MAAM,iBAAiB,GACrB,cAAc,KAAK,OAAO;QACxB,CAAC,CAAC,CAAC,iCAAiC,CAAC;QACrC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;IAErC,yEAAyE;IACzE,qCAAqC;IACrC,EAAE;IACF,qEAAqE;IACrE,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,aAAa,GAAG;QACpB,kBAAkB;QAClB,kCAAkC;QAClC,2BAA2B;QAC3B,iCAAiC;QACjC,oEAAoE;QACpE,yEAAyE;QACzE,2EAA2E;QAC3E,wEAAwE;QACxE,4DAA4D;QAC5D,yCAAyC;KAC1C,CAAC;IAEF,oEAAoE;IACpE,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,4EAA4E;IAC5E,EAAE;IACF,6EAA6E;IAC7E,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,mBAAmB,GAAG;QAC1B,uBAAuB;QACvB,GAAG,aAAa;QAChB,kCAAkC;QAClC,gDAAgD;QAChD,yCAAyC;QACzC,uDAAuD;KACxD,CAAC;IAEF,MAAM,aAAa,GAAG;QACpB,GAAG,aAAa;QAChB,qCAAqC;QACrC,0DAA0D;KAC3D,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,mCAAmC;QACnC,sCAAsC;QACtC,sDAAsD;KACvD,CAAC;IAEF,MAAM,OAAO,GAAG;QACd,EAAE,IAAI,EAAE,MAAM,EAAE;QAChB,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;KACxC,CAAC;IAEF,MAAM,OAAO,GAA4B;QACvC,IAAI,EAAE,0BAA0B,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;QACpE,QAAQ,EAAE;YACR,YAAY,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE,gBAAgB;gBACzB,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE;oBACX,8BAA8B;oBAC9B,kBAAkB;oBAClB,mBAAmB,cAAc,EAAE;oBACnC,mBAAmB,OAAO,EAAE;oBAC5B,0CAA0C;oBAC1C,oCAAoC;iBACrC;gBACD,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE;oBACX,IAAI,EAAE,CAAC,WAAW,EAAE,gDAAgD,CAAC;oBACrE,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC;oBACV,YAAY,EAAE,KAAK;iBACpB;gBACD,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;iBACxC;gBACD,iBAAiB,EAAE,KAAK;gBACxB,WAAW,EAAE,CAAC,mCAAmC,CAAC;gBAClD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;aAC9B;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,OAAO,EAAE,qCAAqC;gBAC9C,OAAO,EAAE,gBAAgB;gBACzB,MAAM,EAAE;oBACN,QAAQ,EAAE,oBAAoB;iBAC/B;gBACD,OAAO,EAAE,aAAa;gBACtB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE;oBACX,8BAA8B;oBAC9B,kBAAkB;oBAClB,kBAAkB;oBAClB,mBAAmB,cAAc,EAAE;oBACnC,mBAAmB,OAAO,EAAE;oBAC5B,8BAA8B;iBAC/B;gBACD,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE;oBACX,IAAI,EAAE,CAAC,WAAW,EAAE,gDAAgD,CAAC;oBACrE,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC;oBACV,YAAY,EAAE,KAAK;iBACpB;gBACD,UAAU,EAAE;oBACV,YAAY,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;iBAC/C;gBACD,iBAAiB,EAAE,KAAK;gBACxB,WAAW,EAAE,CAAC,mCAAmC,CAAC;gBAClD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;aAC9B;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,gBAAgB;gBACzB,WAAW,EAAE;oBACX,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;oBAClC,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC;iBACX;gBACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAC7B,QAAQ,EAAE,CAAC,iBAAiB,CAAC;aAC9B;SACF;QACD,OAAO,EAAE;YACP,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,IAAI;YACrB,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,IAAI;YACvB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,IAAI;YACxB,YAAY,EAAE,IAAI;YAClB,0BAA0B,EAAE,IAAI;SACjC;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE;gBACjB,MAAM,EAAE,QAAQ;aACjB;SACF;KACF,CAAC;IAEF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAE5E,IAAI,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,uEAAuE;YACvE,+DAA+D;YAC/D,IAAI,CAAC;gBACH,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAI,GAAyC,EAAE,IAAI,CAAC;gBAC/D,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5C,SAAS,EAAE,CAAC,IAAI,CACd,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,EACrC,mDAAmD,CACpD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAuB;IAClE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAE5C,MAAM,KAAK,GAAG;QACZ,oDAAoD;QACpD,uBAAuB,KAAK,CAAC,SAAS,EAAE;QACxC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,uBAAuB,KAAK,CAAC,SAAS,EAAE;QACxC,mBAAmB,KAAK,CAAC,KAAK,EAAE;QAChC,oBAAoB,MAAM,EAAE;QAC5B,sBAAsB,QAAQ,EAAE;QAChC,EAAE;QACF,WAAW;QACX,gBAAgB,WAAW,EAAE;QAC7B,YAAY,OAAO,EAAE;QACrB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,oBAAoB,OAAO,EAAE;QAC7B,gBAAgB,OAAO,EAAE;QACzB,EAAE;QACF,mBAAmB;QACnB,qBAAqB,IAAI,EAAE;QAC3B,4BAA4B;QAC5B,4BAA4B;QAC5B,2BAA2B;QAC3B,mBAAmB;QACnB,EAAE;QACF,wDAAwD;QACxD,mFAAmF;QACnF,gCAAgC;QAChC,EAAE;QACF,GAAG,CAAC,KAAK,CAAC,qBAAqB;YAC7B,CAAC,CAAC;gBACE,6EAA6E;gBAC7E,oEAAoE;gBACpE,qCAAqC,KAAK,CAAC,qBAAqB,EAAE;gBAClE,EAAE;aACH;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `generacy cockpit advance <issue> --gate <name>` — manually flip a gate.
3
+ *
4
+ * Label-pair invariant (see #845):
5
+ * Poll-path resume detection in label-monitor-service.ts requires BOTH
6
+ * `waiting-for:<gate>` AND `completed:<gate>` to be present on the issue
7
+ * for the monitor to emit a resume event. The worker owns clearing
8
+ * `waiting-for:*`, `completed:*`, and `agent:paused` on the resume path —
9
+ * this command MUST NOT remove `waiting-for:<gate>` here, or poll-only
10
+ * clusters (no webhook delivery) strand the issue indefinitely at
11
+ * {completed:<gate>, agent:in-progress, agent:paused}.
12
+ *
13
+ * Side effects (in order):
14
+ * 1. gh issue comment (post manual-advance marker)
15
+ * 2. gh issue edit --add-label completed:<gate>
16
+ *
17
+ * Idempotent (AD-6): if `completed:<gate>` is already on the issue, exits 0
18
+ * with `already advanced …` and posts nothing.
19
+ *
20
+ * Refusal (AD-4): if the active `waiting-for:*` ≠ requested gate, exits 3
21
+ * without side effects. No `--force` in v1.
22
+ */
23
+ import { Command } from 'commander';
24
+ import { loadCockpitConfig, type CommandRunner, type GhWrapper } from '@generacy-ai/cockpit';
25
+ import { type GateDefinition } from './gate-vocabulary.js';
26
+ export interface AdvanceCommandDeps {
27
+ runner?: CommandRunner;
28
+ gh?: GhWrapper;
29
+ loadConfig?: typeof loadCockpitConfig;
30
+ env?: NodeJS.ProcessEnv;
31
+ now?: () => Date;
32
+ stdout?: (line: string) => void;
33
+ stderr?: (line: string) => void;
34
+ }
35
+ export interface AdvanceOptions {
36
+ gate?: string;
37
+ helpGates?: boolean;
38
+ }
39
+ export declare function advanceCommand(deps?: AdvanceCommandDeps): Command;
40
+ export declare function runAdvance(issue: string | undefined, opts: AdvanceOptions, deps: AdvanceCommandDeps): Promise<void>;
41
+ export type { GateDefinition };
42
+ //# sourceMappingURL=advance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/advance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK7E,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAoBrE;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAwGf;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * `generacy cockpit advance <issue> --gate <name>` — manually flip a gate.
3
+ *
4
+ * Label-pair invariant (see #845):
5
+ * Poll-path resume detection in label-monitor-service.ts requires BOTH
6
+ * `waiting-for:<gate>` AND `completed:<gate>` to be present on the issue
7
+ * for the monitor to emit a resume event. The worker owns clearing
8
+ * `waiting-for:*`, `completed:*`, and `agent:paused` on the resume path —
9
+ * this command MUST NOT remove `waiting-for:<gate>` here, or poll-only
10
+ * clusters (no webhook delivery) strand the issue indefinitely at
11
+ * {completed:<gate>, agent:in-progress, agent:paused}.
12
+ *
13
+ * Side effects (in order):
14
+ * 1. gh issue comment (post manual-advance marker)
15
+ * 2. gh issue edit --add-label completed:<gate>
16
+ *
17
+ * Idempotent (AD-6): if `completed:<gate>` is already on the issue, exits 0
18
+ * with `already advanced …` and posts nothing.
19
+ *
20
+ * Refusal (AD-4): if the active `waiting-for:*` ≠ requested gate, exits 3
21
+ * without side effects. No `--force` in v1.
22
+ */
23
+ import { Command, Option } from 'commander';
24
+ import { loadCockpitConfig, } from '@generacy-ai/cockpit';
25
+ import { getLogger } from '../../utils/logger.js';
26
+ import { resolveIssueContext } from './resolver.js';
27
+ import { GATES, listGates } from './gate-vocabulary.js';
28
+ import { formatManualAdvanceComment } from './manual-advance-marker.js';
29
+ import { CockpitExit, isCockpitExit } from './exit.js';
30
+ import { resolveCockpitIdentity } from './shared/identity.js';
31
+ export function advanceCommand(deps = {}) {
32
+ const cmd = new Command('advance');
33
+ cmd
34
+ .description('Manually advance a gated issue.')
35
+ .argument('[issue]', 'Issue ref — <number>, <owner>/<repo>#<n>, or full URL.')
36
+ .addOption(new Option('--gate <name>', 'Gate name (e.g. "clarification", "plan-review").'))
37
+ .addOption(new Option('--help-gates', 'Print the list of valid gate names and exit 0.'))
38
+ .action(async (issue, opts) => {
39
+ try {
40
+ await runAdvance(issue, opts, deps);
41
+ }
42
+ catch (err) {
43
+ if (isCockpitExit(err)) {
44
+ const stderr = deps.stderr ?? ((line) => process.stderr.write(`${line}\n`));
45
+ stderr(err.message);
46
+ process.exit(err.code);
47
+ }
48
+ throw err;
49
+ }
50
+ });
51
+ return cmd;
52
+ }
53
+ export async function runAdvance(issue, opts, deps) {
54
+ const log = getLogger();
55
+ const print = deps.stdout ?? ((line) => process.stdout.write(`${line}\n`));
56
+ if (opts.helpGates) {
57
+ for (const name of listGates())
58
+ print(name);
59
+ return;
60
+ }
61
+ if (issue == null || issue.trim() === '') {
62
+ throw new CockpitExit(2, 'Error: cockpit advance: missing required argument <issue>');
63
+ }
64
+ if (opts.gate == null || opts.gate.trim() === '') {
65
+ throw new CockpitExit(2, 'Error: cockpit advance: missing required option --gate');
66
+ }
67
+ const gateDef = GATES.get(opts.gate);
68
+ if (!gateDef) {
69
+ throw new CockpitExit(2, `Error: cockpit advance: unknown gate "${opts.gate}". Valid gates: ${listGates().join(', ')}`);
70
+ }
71
+ const loaded = await (deps.loadConfig ?? loadCockpitConfig)({});
72
+ for (const w of loaded.warnings)
73
+ log.warn(w);
74
+ let ref;
75
+ let gh;
76
+ try {
77
+ const resolvedCtx = await resolveIssueContext({ issue, runner: deps.runner });
78
+ ref = resolvedCtx.ref;
79
+ gh = deps.gh ?? resolvedCtx.gh;
80
+ }
81
+ catch (err) {
82
+ throw new CockpitExit(2, `Error: cockpit advance: ${err.message}`);
83
+ }
84
+ let labels;
85
+ try {
86
+ labels = (await gh.fetchIssueLabels(ref.nwo, ref.number)).labels;
87
+ }
88
+ catch (err) {
89
+ throw new CockpitExit(1, `Error: cockpit advance: gh issue view: ${err.message}`);
90
+ }
91
+ // Idempotency check (AD-6): if completed:<gate> is already present, no-op.
92
+ if (labels.includes(gateDef.completedLabel)) {
93
+ print(`already advanced ${ref.nwo}#${ref.number}: ${gateDef.completedLabel} is present (no-op)`);
94
+ return;
95
+ }
96
+ // Refusal (AD-4): the issue must currently be waiting on this gate.
97
+ const activeWaitingLabel = labels.find((l) => l.startsWith('waiting-for:')) ?? null;
98
+ const activeGate = activeWaitingLabel?.slice('waiting-for:'.length) ?? null;
99
+ if (activeGate !== gateDef.name) {
100
+ print(`refusing to advance gate "${gateDef.name}": active waiting gate is ` +
101
+ `${activeGate == null ? 'none' : `"${activeGate}"`}`);
102
+ throw new CockpitExit(3, `Error: cockpit advance: gate refusal: issue ${ref.nwo}#${ref.number} is ` +
103
+ `${activeGate == null ? 'not in any waiting gate' : `waiting on "${activeGate}"`}`);
104
+ }
105
+ // Happy path. Resolve actor via the shared identity helper. Optional mode
106
+ // means an unresolvable identity is cosmetic degradation — the label/gate
107
+ // transition still happens (FR-003).
108
+ const { login: actor } = await resolveCockpitIdentity({
109
+ flag: undefined,
110
+ configAssignee: loaded.config.assignee,
111
+ gh,
112
+ logger: log,
113
+ verb: 'advance',
114
+ mode: 'optional',
115
+ env: deps.env,
116
+ });
117
+ const ts = (deps.now ?? (() => new Date()))().toISOString();
118
+ const body = formatManualAdvanceComment({ gate: gateDef.name, actor, ts });
119
+ let commentUrl;
120
+ try {
121
+ commentUrl = (await gh.postIssueComment(ref.nwo, ref.number, body)).url;
122
+ }
123
+ catch (err) {
124
+ throw new CockpitExit(1, `Error: cockpit advance: gh issue comment: ${err.message}`);
125
+ }
126
+ try {
127
+ await gh.addLabel(ref.nwo, ref.number, gateDef.completedLabel);
128
+ }
129
+ catch (err) {
130
+ throw new CockpitExit(1, `Error: cockpit advance: gh issue edit (add ${gateDef.completedLabel}): ${err.message}`);
131
+ }
132
+ print(`advanced ${ref.nwo}#${ref.number}: ${gateDef.completedLabel} added — ` +
133
+ `${gateDef.waitingLabel} left in place for the worker to clear on resume` +
134
+ (commentUrl ? ` (comment: ${commentUrl})` : ''));
135
+ }
136
+ //# sourceMappingURL=advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.js","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/advance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `findClarificationComment` — implements AD-3 / D-R1:
3
+ *
4
+ * 1. Walk `gh api repos/{o}/{r}/issues/{n}/timeline` for the most-recent event
5
+ * `event === 'labeled'` with `label.name === 'waiting-for:clarification'`.
6
+ * 2. Take its `created_at` timestamp.
7
+ * 3. Fetch `gh issue view --json comments` and return the first comment whose
8
+ * `createdAt >= labelEventTs`.
9
+ * 4. Return `null` if no qualifying comment exists.
10
+ */
11
+ import type { GhWrapper, IssueComment } from '@generacy-ai/cockpit';
12
+ export declare function findClarificationComment(gh: GhWrapper, repo: string, number: number): Promise<IssueComment | null>;
13
+ //# sourceMappingURL=clarification-comment-finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification-comment-finder.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/clarification-comment-finder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUpE,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0B9B"}
@@ -0,0 +1,31 @@
1
+ const WAITING_CLARIFICATION = 'waiting-for:clarification';
2
+ export async function findClarificationComment(gh, repo, number) {
3
+ const timeline = (await gh.fetchIssueTimeline(repo, number));
4
+ let latestLabelTs = null;
5
+ for (const event of timeline) {
6
+ if (event.event !== 'labeled')
7
+ continue;
8
+ if (event.label?.name !== WAITING_CLARIFICATION)
9
+ continue;
10
+ if (event.created_at == null)
11
+ continue;
12
+ if (latestLabelTs == null || event.created_at > latestLabelTs) {
13
+ latestLabelTs = event.created_at;
14
+ }
15
+ }
16
+ if (latestLabelTs == null)
17
+ return null;
18
+ const labelTime = Date.parse(latestLabelTs);
19
+ if (Number.isNaN(labelTime))
20
+ return null;
21
+ const comments = await gh.fetchIssueComments(repo, number);
22
+ const sorted = [...comments].sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
23
+ for (const c of sorted) {
24
+ const ct = Date.parse(c.createdAt);
25
+ if (!Number.isNaN(ct) && ct >= labelTime) {
26
+ return c;
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ //# sourceMappingURL=clarification-comment-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification-comment-finder.js","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/clarification-comment-finder.ts"],"names":[],"mappings":"AAYA,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAQ1D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAa,EACb,IAAY,EACZ,MAAc;IAEd,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAyB,CAAC;IAErF,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,SAAS;QACxC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,qBAAqB;YAAE,SAAS;QAC1D,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;YAAE,SAAS;QACvC,IAAI,aAAa,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC;YAC9D,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `gatherCodeReferences` — collects `{ touchedFiles, prUrl, prDiffSummary }`
3
+ * for the in-flight branch.
4
+ *
5
+ * - `prUrl` — open PR for `repo:branch`, or `null`
6
+ * - `touchedFiles` — `gh pr diff --name-only` when PR exists, else
7
+ * `git diff --name-only <base>...<head>` against the
8
+ * configured `baseBranch`. Empty array (never null) when
9
+ * no diffs.
10
+ * - `prDiffSummary` — first 4 KiB of `gh pr diff --patch` plus optional
11
+ * `…[truncated]` suffix. `null` when no PR.
12
+ *
13
+ * Returns `null` when not on a feature branch (i.e. branch matches the base).
14
+ */
15
+ import type { CommandRunner, GhWrapper } from '@generacy-ai/cockpit';
16
+ export interface CodeReferences {
17
+ touchedFiles: string[];
18
+ prUrl: string | null;
19
+ prDiffSummary: string | null;
20
+ }
21
+ export interface GatherCodeReferencesInput {
22
+ repo: string;
23
+ branch: string;
24
+ baseBranch: string;
25
+ }
26
+ export declare function gatherCodeReferences(input: GatherCodeReferencesInput, gh: GhWrapper, runner: CommandRunner): Promise<CodeReferences | null>;
27
+ //# sourceMappingURL=code-references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-references.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/code-references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA+BhC"}
@@ -0,0 +1,48 @@
1
+ const TRUNCATE_SUFFIX = '…[truncated]';
2
+ const TRUNCATE_AT = 4096;
3
+ export async function gatherCodeReferences(input, gh, runner) {
4
+ if (input.branch === '' || input.branch === input.baseBranch) {
5
+ return null;
6
+ }
7
+ const pr = await gh.findOpenPrForBranch(input.repo, input.branch);
8
+ let touchedFiles = [];
9
+ let prDiffSummary = null;
10
+ if (pr) {
11
+ try {
12
+ touchedFiles = await gh.prDiffNames(input.repo, pr.number);
13
+ }
14
+ catch {
15
+ touchedFiles = [];
16
+ }
17
+ try {
18
+ const patch = await gh.prDiffPatch(input.repo, pr.number);
19
+ prDiffSummary = truncate(patch);
20
+ }
21
+ catch {
22
+ prDiffSummary = null;
23
+ }
24
+ }
25
+ else {
26
+ touchedFiles = await gitDiffNames(runner, input.baseBranch, input.branch);
27
+ }
28
+ return {
29
+ touchedFiles,
30
+ prUrl: pr?.url ?? null,
31
+ prDiffSummary,
32
+ };
33
+ }
34
+ function truncate(patch) {
35
+ if (patch.length <= TRUNCATE_AT)
36
+ return patch;
37
+ return patch.slice(0, TRUNCATE_AT) + TRUNCATE_SUFFIX;
38
+ }
39
+ async function gitDiffNames(runner, base, head) {
40
+ const res = await runner('git', ['diff', '--name-only', `${base}...${head}`]);
41
+ if (res.exitCode !== 0)
42
+ return [];
43
+ return res.stdout
44
+ .split('\n')
45
+ .map((s) => s.trim())
46
+ .filter((s) => s.length > 0);
47
+ }
48
+ //# sourceMappingURL=code-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-references.js","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/code-references.ts"],"names":[],"mappings":"AA4BA,MAAM,eAAe,GAAG,cAAc,CAAC;AACvC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAgC,EAChC,EAAa,EACb,MAAqB;IAErB,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAElE,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC1D,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,IAAI;QACtB,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAAqB,EACrB,IAAY,EACZ,IAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,GAAG,CAAC,MAAM;SACd,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC"}