@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
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Extracts declared cross-issue dependencies from a spec's `plan.md` file.
3
+ *
4
+ * v1 heuristic (contracts/plan-dependency-warning.md §Extractor):
5
+ * - Trigger verbs: `must be merged`, `must merge first`, `depends on`, `depends-on`,
6
+ * `requires`, `extends`, `blocked by`, `prerequisite`.
7
+ * - Extract `#\d+` (bare) → `{ defaultOwner, defaultRepo, N }`
8
+ * - Extract `[\w-]+/[\w-]+#\d+` → cross-repo
9
+ * - Search the trigger line PLUS the immediately-following line (wrapping tolerance).
10
+ * - Skip fenced code blocks (` ``` `) and inline code (backticks).
11
+ * - De-duplicate by `owner/repo/number`, preserving first-occurrence order.
12
+ *
13
+ * `originatingText` is derived from the trigger line, bounded to 120 chars.
14
+ */
15
+ const TRIGGER_VERBS = [
16
+ 'must be merged',
17
+ 'must merge first',
18
+ 'depends on',
19
+ 'depends-on',
20
+ 'requires',
21
+ 'extends',
22
+ 'blocked by',
23
+ 'prerequisite',
24
+ ];
25
+ const CROSS_REPO_REF = /([A-Za-z0-9][\w-]*)\/([A-Za-z0-9][\w-]*)#(\d+)/g;
26
+ const BARE_REF = /#(\d+)/g;
27
+ const ORIGINATING_TEXT_MAX = 120;
28
+ /**
29
+ * Strip inline code spans (`...`) from a line so bare-ref regex doesn't match inside them.
30
+ *
31
+ * Handles the simple case of paired backticks; unpaired backticks are preserved.
32
+ */
33
+ function stripInlineCode(line) {
34
+ return line.replace(/`[^`\n]*`/g, '');
35
+ }
36
+ function boundOriginatingText(line) {
37
+ const trimmed = line.trim();
38
+ if (trimmed.length <= ORIGINATING_TEXT_MAX)
39
+ return trimmed;
40
+ return trimmed.slice(0, ORIGINATING_TEXT_MAX);
41
+ }
42
+ function lineHasTrigger(line) {
43
+ const lower = line.toLowerCase();
44
+ return TRIGGER_VERBS.some((v) => lower.includes(v));
45
+ }
46
+ /**
47
+ * Extract dependency refs from `plan.md` markdown.
48
+ *
49
+ * @param planMarkdown Raw markdown body.
50
+ * @param defaultOwner Owner for bare `#N` refs (typically the current issue's owner).
51
+ * @param defaultRepo Repo for bare `#N` refs (typically the current issue's repo).
52
+ */
53
+ export function extractPlanDependencies(planMarkdown, defaultOwner, defaultRepo) {
54
+ const lines = planMarkdown.split('\n');
55
+ const results = [];
56
+ const seen = new Set();
57
+ let inFence = false;
58
+ for (let i = 0; i < lines.length; i++) {
59
+ const rawLine = lines[i];
60
+ const trimmed = rawLine.trim();
61
+ // Toggle fenced-code-block state on ``` boundaries.
62
+ if (trimmed.startsWith('```')) {
63
+ inFence = !inFence;
64
+ continue;
65
+ }
66
+ if (inFence)
67
+ continue;
68
+ if (!lineHasTrigger(rawLine))
69
+ continue;
70
+ // Wrap tolerance: also scan the following non-fence line (if any).
71
+ const triggerLine = stripInlineCode(rawLine);
72
+ let followingLine = '';
73
+ if (i + 1 < lines.length) {
74
+ const nextRaw = lines[i + 1];
75
+ // Stop before a fenced-code boundary.
76
+ if (!nextRaw.trim().startsWith('```')) {
77
+ followingLine = stripInlineCode(nextRaw);
78
+ }
79
+ }
80
+ const searchSpan = `${triggerLine}\n${followingLine}`;
81
+ const originatingText = boundOriginatingText(rawLine);
82
+ // Cross-repo mentions first (they consume the trailing `#N`).
83
+ const crossRepoMatches = [];
84
+ CROSS_REPO_REF.lastIndex = 0;
85
+ let m;
86
+ while ((m = CROSS_REPO_REF.exec(searchSpan)) !== null) {
87
+ const num = Number.parseInt(m[3], 10);
88
+ if (Number.isFinite(num) && num > 0) {
89
+ crossRepoMatches.push({
90
+ owner: m[1],
91
+ repo: m[2],
92
+ number: num,
93
+ matchStart: m.index,
94
+ matchEnd: m.index + m[0].length,
95
+ });
96
+ }
97
+ }
98
+ for (const cr of crossRepoMatches) {
99
+ const key = `${cr.owner}/${cr.repo}#${cr.number}`;
100
+ if (!seen.has(key)) {
101
+ seen.add(key);
102
+ results.push({
103
+ owner: cr.owner,
104
+ repo: cr.repo,
105
+ number: cr.number,
106
+ originatingText,
107
+ });
108
+ }
109
+ }
110
+ // Bare `#N` — must not be part of a cross-repo match already consumed.
111
+ BARE_REF.lastIndex = 0;
112
+ while ((m = BARE_REF.exec(searchSpan)) !== null) {
113
+ const matchStart = m.index;
114
+ const matchEnd = matchStart + m[0].length;
115
+ const insideCrossRepo = crossRepoMatches.some((cr) => matchStart >= cr.matchStart && matchEnd <= cr.matchEnd);
116
+ if (insideCrossRepo)
117
+ continue;
118
+ const num = Number.parseInt(m[1], 10);
119
+ if (!Number.isFinite(num) || num <= 0)
120
+ continue;
121
+ const key = `${defaultOwner}/${defaultRepo}#${num}`;
122
+ if (seen.has(key))
123
+ continue;
124
+ seen.add(key);
125
+ results.push({
126
+ owner: defaultOwner,
127
+ repo: defaultRepo,
128
+ number: num,
129
+ originatingText,
130
+ });
131
+ }
132
+ }
133
+ return results;
134
+ }
135
+ //# sourceMappingURL=plan-dependency-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-dependency-extractor.js","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/plan-dependency-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * `generacy cockpit queue <epic-ref> <phase>` — enqueue every eligible ref
3
+ * listed under the matched `### <phase>` heading in the epic body.
4
+ *
5
+ * Pipeline:
6
+ * 1. resolveEpic(epicRef) → matchPhaseHeading(phase).
7
+ * 2. Per ref in the matched phase: gh issue view → classifyRow → eligible or [SKIP: …].
8
+ * 3. Print preview; if !--yes, prompt; on confirm, assign + label best-effort.
9
+ */
10
+ import { Command } from 'commander';
11
+ import { loadCockpitConfig, type CommandRunner, type GhWrapper, type IssueRef, type ParsedPhase, type ResolvedEpic } from '@generacy-ai/cockpit';
12
+ import { type DependencyRef } from './plan-dependency-extractor.js';
13
+ export interface QueueOptions {
14
+ label?: string;
15
+ repo?: string;
16
+ assignee?: string;
17
+ yes?: boolean;
18
+ /** #935: single-issue form — mutually exclusive with positional <epic-ref> <phase>. */
19
+ issue?: string;
20
+ }
21
+ export interface QueueIssueResult {
22
+ ref: IssueRef;
23
+ workflowLabel: string;
24
+ assignee: string;
25
+ row: QueueRow;
26
+ confirmed: boolean;
27
+ exitCode: 0 | 1 | 2;
28
+ }
29
+ export type EligibilityStatus = {
30
+ kind: 'eligible';
31
+ workflowLabel: string;
32
+ } | {
33
+ kind: 'skip';
34
+ reason: 'closed' | 'cross-repo' | 'already-labeled' | 'not-found';
35
+ };
36
+ export type MutationOutcome = {
37
+ kind: 'ok';
38
+ } | {
39
+ kind: 'already';
40
+ } | {
41
+ kind: 'error';
42
+ reason: string;
43
+ };
44
+ /** Warning state observed at queue time for a plan.md-declared dependency (#864). */
45
+ export type DependencyWarningState = 'unresolved' | 'closed-unmerged';
46
+ export interface DependencyWarning {
47
+ ref: DependencyRef;
48
+ state: DependencyWarningState;
49
+ }
50
+ export interface QueueRow {
51
+ ref: IssueRef;
52
+ title: string;
53
+ labels: string[];
54
+ assignees: string[];
55
+ eligibility: EligibilityStatus;
56
+ /**
57
+ * Present only when eligibility.kind === 'eligible', the phase heading matches
58
+ * /implement/i, and plan.md-declared prerequisites are not yet merged (#864).
59
+ */
60
+ dependencyWarnings?: DependencyWarning[];
61
+ assignResult?: MutationOutcome;
62
+ labelResult?: MutationOutcome;
63
+ }
64
+ export interface QueueResult {
65
+ epic: ResolvedEpic;
66
+ phase: ParsedPhase;
67
+ targetRepo: string;
68
+ workflowLabel: string;
69
+ assignee: string;
70
+ rows: QueueRow[];
71
+ confirmed: boolean;
72
+ exitCode: 0 | 1 | 2;
73
+ }
74
+ /**
75
+ * Fetches the raw `plan.md` for a given issue via the GitHub API.
76
+ * Returns `null` when the file (or spec directory) doesn't exist yet.
77
+ */
78
+ export type PlanFetcher = (ref: IssueRef) => Promise<string | null>;
79
+ export interface QueueCommandDeps {
80
+ runner?: CommandRunner;
81
+ gh?: GhWrapper;
82
+ cockpitGh?: GhWrapper;
83
+ loadConfig?: typeof loadCockpitConfig;
84
+ env?: NodeJS.ProcessEnv;
85
+ prompt?: (message: string) => Promise<boolean>;
86
+ stdout?: (line: string) => void;
87
+ stderr?: (line: string) => void;
88
+ /** Optional plan.md fetcher — defaults to a `gh api` call via `deps.runner`. */
89
+ fetchPlan?: PlanFetcher;
90
+ }
91
+ export declare function renderPreview(epic: ResolvedEpic, phase: ParsedPhase, targetRepo: string, workflowLabel: string, assignee: string, rows: QueueRow[]): string[];
92
+ export declare function renderSummary(rows: QueueRow[]): string[];
93
+ export declare function runQueue(epicRef: string | undefined, phaseArg: string | undefined, opts: QueueOptions, deps: QueueCommandDeps): Promise<QueueResult>;
94
+ /**
95
+ * Single-issue queue form (#935). Bypasses `resolveEpic` — the caller supplies
96
+ * one specific issue ref; classify and mutate as a single row.
97
+ */
98
+ export declare function runQueueSingleIssue(issueArg: string, opts: QueueOptions, deps: QueueCommandDeps): Promise<QueueIssueResult>;
99
+ export declare function queueCommand(deps?: QueueCommandDeps): Command;
100
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cockpit/queue.ts"],"names":[],"mappings":"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"}