@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,97 @@
1
+ /**
2
+ * Zod input schemas for the seven cockpit MCP tools.
3
+ *
4
+ * `AWAIT_EVENTS_DEFAULTS` is the single source of truth for the long-poll /
5
+ * coalesce / batch-size defaults — referenced by Zod defaults on
6
+ * `AwaitEventsInputSchema` AND by the SC-006 fixture assertion. Do not fork.
7
+ */
8
+ import { z } from 'zod';
9
+ import { listGates } from '../gate-vocabulary.js';
10
+ /** Structured issue/epic reference. */
11
+ export const IssueRefObjectSchema = z
12
+ .object({
13
+ owner: z
14
+ .string()
15
+ .min(1)
16
+ .regex(/^[^/\s]+$/),
17
+ repo: z
18
+ .string()
19
+ .min(1)
20
+ .regex(/^[^/\s#]+$/),
21
+ number: z.number().int().positive(),
22
+ })
23
+ .strict();
24
+ /** String form of the ref — passed to `resolveIssueContext` for normalization. */
25
+ export const IssueRefStringSchema = z.string().min(1);
26
+ /** Accepted `issue` input for every mutation tool. */
27
+ export const IssueRefInputSchema = z.union([IssueRefObjectSchema, IssueRefStringSchema]);
28
+ /** Alias — `EpicRefInput` is shape-identical to `IssueRefInput`. */
29
+ export const EpicRefInputSchema = IssueRefInputSchema;
30
+ const gateNames = listGates();
31
+ /**
32
+ * Gate-name schema built at import time from the gate vocabulary. Unknown
33
+ * gate names are rejected at the MCP boundary with `class: "unknown-gate"`.
34
+ */
35
+ export const GateNameInputSchema = z.enum(gateNames);
36
+ /** Concrete defaults for the long-poll event tool. Locked by SC-006 fixture. */
37
+ export const AWAIT_EVENTS_DEFAULTS = Object.freeze({
38
+ maxWaitMs: 55_000,
39
+ coalesceWindowMs: 3_000,
40
+ maxBatchSize: 256,
41
+ });
42
+ export const AwaitEventsInputSchema = z
43
+ .object({
44
+ epic: EpicRefInputSchema,
45
+ cursor: z.string().optional(),
46
+ maxWaitMs: z.number().int().min(0).max(300_000).default(AWAIT_EVENTS_DEFAULTS.maxWaitMs),
47
+ coalesceWindowMs: z
48
+ .number()
49
+ .int()
50
+ .min(0)
51
+ .max(60_000)
52
+ .default(AWAIT_EVENTS_DEFAULTS.coalesceWindowMs),
53
+ maxBatchSize: z
54
+ .number()
55
+ .int()
56
+ .positive()
57
+ .max(4_096)
58
+ .default(AWAIT_EVENTS_DEFAULTS.maxBatchSize),
59
+ })
60
+ .strict();
61
+ /** Per-tool input schemas — thin wrappers around the primitives. */
62
+ export const CockpitStatusInputSchema = z.object({ epic: EpicRefInputSchema }).strict();
63
+ export const CockpitContextInputSchema = z.object({ issue: IssueRefInputSchema }).strict();
64
+ export const CockpitAdvanceInputSchema = z
65
+ .object({ issue: IssueRefInputSchema, gate: GateNameInputSchema })
66
+ .strict();
67
+ export const CockpitResumeInputSchema = z.object({ issue: IssueRefInputSchema }).strict();
68
+ /**
69
+ * #935 — `cockpit_queue` accepts either the phase form (existing) or a new
70
+ * single-issue form. Discriminated union at Zod level so TypeScript consumers
71
+ * of the tool see both variants explicitly.
72
+ */
73
+ export const CockpitQueueInputSchema = z.union([
74
+ z.object({ epic: EpicRefInputSchema, phase: z.string().min(1) }).strict(),
75
+ z.object({ issue: IssueRefInputSchema }).strict(),
76
+ ]);
77
+ /** #935 — scope-mutation tool schemas. */
78
+ export const CockpitScopeAddInputSchema = z
79
+ .object({ scope: EpicRefInputSchema, issue: IssueRefInputSchema })
80
+ .strict();
81
+ export const CockpitScopeRemoveInputSchema = z
82
+ .object({ scope: EpicRefInputSchema, issue: IssueRefInputSchema })
83
+ .strict();
84
+ /**
85
+ * #928 — `cockpit_merge` accepts an **issue ref** (matching the CLI verb),
86
+ * with an optional `pr: <number>` escape hatch mirroring CLI `--pr <number>`.
87
+ * Field name change from `pr` (old, inverted) to `issue`; the old-field-name
88
+ * redirection message is emitted at the tool handler when a `pr` key with a
89
+ * non-numeric value is seen (per clarifications Q5 → B).
90
+ */
91
+ export const CockpitMergeInputSchema = z
92
+ .object({
93
+ issue: IssueRefInputSchema,
94
+ pr: z.number().int().positive().optional(),
95
+ })
96
+ .strict();
97
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/mcp/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,uCAAuC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,KAAK,CAAC,WAAW,CAAC;IACrB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,KAAK,CAAC,YAAY,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtD,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAGzF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAGtD,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,SAAkC,CAAC,CAAC;AAG9E,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,MAAM;IACjB,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,GAAG;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC;IACxF,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,MAAM,CAAC;SACX,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;IAClD,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,GAAG,CAAC,KAAK,CAAC;SACV,OAAO,CAAC,qBAAqB,CAAC,YAAY,CAAC;CAC/C,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACxF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;KACjE,MAAM,EAAE,CAAC;AACZ,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC1F;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACzE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;CAClD,CAAC,CAAC;AAGH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;KACjE,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;KACjE,MAAM,EAAE,CAAC;AAEZ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,KAAK,EAAE,mBAAmB;IAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Build the `@modelcontextprotocol/sdk` MCP server exposing the seven cockpit
3
+ * tools over stdio. Tools call the same internal `run<Verb>()` functions the
4
+ * CLI uses (spec § Design invariant #1).
5
+ *
6
+ * Each handler returns `ToolResult<T>` — either `{status:"ok", data}` or
7
+ * `{status:"error", class, detail}`. That envelope is serialized as
8
+ * `structuredContent` so callers can dispatch on `status` without parsing
9
+ * text.
10
+ */
11
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
+ import type { CommandRunner } from '@generacy-ai/cockpit';
13
+ export interface BuildMcpServerDeps {
14
+ runner?: CommandRunner;
15
+ }
16
+ export declare function buildMcpServer(deps?: BuildMcpServerDeps): McpServer;
17
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwB1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAUD,wBAAgB,cAAc,CAAC,IAAI,GAAE,kBAAuB,GAAG,SAAS,CAgGvE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Build the `@modelcontextprotocol/sdk` MCP server exposing the seven cockpit
3
+ * tools over stdio. Tools call the same internal `run<Verb>()` functions the
4
+ * CLI uses (spec § Design invariant #1).
5
+ *
6
+ * Each handler returns `ToolResult<T>` — either `{status:"ok", data}` or
7
+ * `{status:"error", class, detail}`. That envelope is serialized as
8
+ * `structuredContent` so callers can dispatch on `status` without parsing
9
+ * text.
10
+ */
11
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
12
+ import { cockpitStatus } from './tools/cockpit_status.js';
13
+ import { cockpitContext } from './tools/cockpit_context.js';
14
+ import { cockpitAdvance } from './tools/cockpit_advance.js';
15
+ import { cockpitResume } from './tools/cockpit_resume.js';
16
+ import { cockpitQueue } from './tools/cockpit_queue.js';
17
+ import { cockpitMerge } from './tools/cockpit_merge.js';
18
+ import { cockpitAwaitEvents } from './tools/cockpit_await_events.js';
19
+ import { cockpitScopeAdd } from './tools/cockpit_scope_add.js';
20
+ import { cockpitScopeRemove } from './tools/cockpit_scope_remove.js';
21
+ import { CockpitStatusInputSchema, CockpitContextInputSchema, CockpitAdvanceInputSchema, CockpitResumeInputSchema, CockpitQueueInputSchema, CockpitMergeInputSchema, CockpitScopeAddInputSchema, CockpitScopeRemoveInputSchema, AwaitEventsInputSchema, } from './schemas.js';
22
+ function toCallToolResult(result) {
23
+ return {
24
+ content: [{ type: 'text', text: JSON.stringify(result) }],
25
+ structuredContent: result,
26
+ isError: result.status === 'error',
27
+ };
28
+ }
29
+ export function buildMcpServer(deps = {}) {
30
+ const server = new McpServer({
31
+ name: 'cockpit',
32
+ version: '1.0.0',
33
+ });
34
+ server.registerTool('cockpit_status', {
35
+ description: "Print a one-shot snapshot of every ref in the epic body's phases. Read-only.",
36
+ inputSchema: CockpitStatusInputSchema,
37
+ }, async (args) => toCallToolResult(await cockpitStatus(args, deps)));
38
+ server.registerTool('cockpit_context', {
39
+ description: 'Classify the current waiting-for:* gate for one issue and emit its bundle.',
40
+ inputSchema: CockpitContextInputSchema,
41
+ }, async (args) => toCallToolResult(await cockpitContext(args, deps)));
42
+ server.registerTool('cockpit_advance', {
43
+ description: 'Manually flip waiting-for:<gate> → completed:<gate> on one issue. Posts an audit comment.',
44
+ inputSchema: CockpitAdvanceInputSchema,
45
+ }, async (args) => toCallToolResult(await cockpitAdvance(args, deps)));
46
+ server.registerTool('cockpit_resume', {
47
+ description: 'Re-arm a failed phase in place: clears failed:<phase>/agent:error, applies waiting-for/completed pair for the preceding gate.',
48
+ inputSchema: CockpitResumeInputSchema,
49
+ }, async (args) => toCallToolResult(await cockpitResume(args, deps)));
50
+ server.registerTool('cockpit_queue', {
51
+ description: 'Enqueue eligible refs under a phase heading to the cluster pipeline (unconfirmed — no interactive prompt).',
52
+ inputSchema: CockpitQueueInputSchema,
53
+ }, async (args) => toCallToolResult(await cockpitQueue(args, deps)));
54
+ server.registerTool('cockpit_merge', {
55
+ description: 'Merge a PR once its required checks are green. Never merges on red.',
56
+ inputSchema: CockpitMergeInputSchema,
57
+ }, async (args) => toCallToolResult(await cockpitMerge(args, deps)));
58
+ server.registerTool('cockpit_scope_add', {
59
+ description: "Append a task-list ref to a scope (epic or tracking) issue's body. Concurrency-safe with bounded retry.",
60
+ inputSchema: CockpitScopeAddInputSchema,
61
+ }, async (args) => toCallToolResult(await cockpitScopeAdd(args, deps)));
62
+ server.registerTool('cockpit_scope_remove', {
63
+ description: "Remove a task-list ref line from a scope issue's body. Concurrency-safe with bounded retry.",
64
+ inputSchema: CockpitScopeRemoveInputSchema,
65
+ }, async (args) => toCallToolResult(await cockpitScopeRemove(args, deps)));
66
+ server.registerTool('cockpit_await_events', {
67
+ description: 'Long-poll for cockpit stream events (label changes, phase transitions, epic-complete). Returns a coalesced batch; caller re-arms with the returned cursor.',
68
+ inputSchema: AwaitEventsInputSchema,
69
+ }, async (args) => toCallToolResult(await cockpitAwaitEvents(args, deps)));
70
+ return server;
71
+ }
72
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/cli/commands/cockpit/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `cockpit_advance` MCP tool handler.
3
+ *
4
+ * Wraps `runAdvance` (which throws `CockpitExit` on refusal / parse error /
5
+ * transport failure). `wrapToolBoundary` maps thrown `CockpitExit` to a
6
+ * typed `ToolErrorResult` via the exit-code table.
7
+ *
8
+ * Idempotent no-op (advance.ts:122-127): when `completed:<gate>` already
9
+ * present, `runAdvance` returns without throwing but writes a stdout line
10
+ * that starts with "already advanced". Represent this as
11
+ * `{status: "ok", data: {..., noop: true, action: "already-advanced"}}`.
12
+ */
13
+ import type { CommandRunner, GhWrapper } from '@generacy-ai/cockpit';
14
+ import { type AdvanceCommandDeps } from '../../advance.js';
15
+ import { type ToolResult } from '../errors.js';
16
+ import { type IssueRefInput, type GateNameInput } from '../schemas.js';
17
+ export interface CockpitAdvanceInput {
18
+ issue: IssueRefInput;
19
+ gate: GateNameInput;
20
+ }
21
+ export interface CockpitAdvanceData {
22
+ ref: {
23
+ owner: string;
24
+ repo: string;
25
+ number: number;
26
+ nwo: string;
27
+ };
28
+ gate: string;
29
+ action: 'advanced' | 'already-advanced';
30
+ completedLabel: string;
31
+ commentUrl?: string;
32
+ noop?: true;
33
+ }
34
+ export interface CockpitAdvanceDeps {
35
+ runner?: CommandRunner;
36
+ gh?: GhWrapper;
37
+ loadConfig?: AdvanceCommandDeps['loadConfig'];
38
+ env?: NodeJS.ProcessEnv;
39
+ now?: () => Date;
40
+ }
41
+ export declare function cockpitAdvance(input: CockpitAdvanceInput, deps?: CockpitAdvanceDeps): Promise<ToolResult<CockpitAdvanceData>>;
42
+ //# sourceMappingURL=cockpit_advance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_advance.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_advance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,EAC1B,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CA0EzC"}
@@ -0,0 +1,73 @@
1
+ import { runAdvance } from '../../advance.js';
2
+ import { normalizeIssueRef } from '../ref-input.js';
3
+ import { GATES } from '../../gate-vocabulary.js';
4
+ import { wrapToolBoundary } from '../errors.js';
5
+ import { CockpitAdvanceInputSchema, } from '../schemas.js';
6
+ export function cockpitAdvance(input, deps = {}) {
7
+ return wrapToolBoundary(async () => {
8
+ const parsed = CockpitAdvanceInputSchema.safeParse(input);
9
+ if (!parsed.success) {
10
+ const detail = parsed.error.issues.map((i) => i.message).join('; ');
11
+ const cls = /Invalid enum value|invalid_enum_value/i.test(detail)
12
+ ? 'unknown-gate'
13
+ : 'invalid-args';
14
+ return { status: 'error', class: cls, detail };
15
+ }
16
+ const normalized = await normalizeIssueRef(parsed.data.issue, {
17
+ expects: 'issue',
18
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
19
+ ...(deps.gh != null ? { gh: deps.gh } : {}),
20
+ });
21
+ if (!normalized.ok)
22
+ return normalized.error;
23
+ const gateDef = GATES.get(parsed.data.gate);
24
+ if (!gateDef) {
25
+ return {
26
+ status: 'error',
27
+ class: 'unknown-gate',
28
+ detail: `unknown gate "${parsed.data.gate}"`,
29
+ };
30
+ }
31
+ const captured = [];
32
+ const stderrLines = [];
33
+ const advanceDeps = {
34
+ gh: deps.gh ?? normalized.value.gh,
35
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
36
+ ...(deps.loadConfig != null ? { loadConfig: deps.loadConfig } : {}),
37
+ ...(deps.env != null ? { env: deps.env } : {}),
38
+ ...(deps.now != null ? { now: deps.now } : {}),
39
+ stdout: (line) => captured.push(line),
40
+ stderr: (line) => stderrLines.push(line),
41
+ };
42
+ const issueArg = `${normalized.value.ref.nwo}#${normalized.value.ref.number}`;
43
+ await runAdvance(issueArg, { gate: parsed.data.gate }, advanceDeps);
44
+ const noop = captured.some((l) => l.startsWith('already advanced'));
45
+ if (noop) {
46
+ return {
47
+ status: 'ok',
48
+ data: {
49
+ ref: normalized.value.ref,
50
+ gate: gateDef.name,
51
+ action: 'already-advanced',
52
+ completedLabel: gateDef.completedLabel,
53
+ noop: true,
54
+ },
55
+ };
56
+ }
57
+ const commentMatch = captured
58
+ .map((l) => /\(comment: (https?:\/\/[^)]+)\)/.exec(l))
59
+ .find((m) => m != null);
60
+ const commentUrl = commentMatch ? commentMatch[1] : undefined;
61
+ return {
62
+ status: 'ok',
63
+ data: {
64
+ ref: normalized.value.ref,
65
+ gate: gateDef.name,
66
+ action: 'advanced',
67
+ completedLabel: gateDef.completedLabel,
68
+ ...(commentUrl ? { commentUrl } : {}),
69
+ },
70
+ };
71
+ });
72
+ }
73
+ //# sourceMappingURL=cockpit_advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_advance.js","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_advance.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAA2B,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,yBAAyB,GAG1B,MAAM,eAAe,CAAC;AAwBvB,MAAM,UAAU,cAAc,CAC5B,KAA0B,EAC1B,OAA2B,EAAE;IAE7B,OAAO,gBAAgB,CAAqB,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,GAAG,GAAoC,wCAAwC,CAAC,IAAI,CACxF,MAAM,CACP;gBACC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,cAAc,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACjD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;YAC5D,OAAO,EAAE,OAAO;YAChB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC;QAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG;aAC7C,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,WAAW,GAAuB;YACtC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;YAClC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;SACjD,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9E,MAAM,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE;oBACJ,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG;oBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;oBACtC,IAAI,EAAE,IAAI;iBACX;aACF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9D,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE;gBACJ,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG;gBACzB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,UAAU;gBAClB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtC;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * `cockpit_await_events` MCP tool handler.
3
+ *
4
+ * Long-poll for cockpit stream events for a given epic. Cursor-based;
5
+ * coalesces bursts within `coalesceWindowMs`; soft-cap at `maxBatchSize`
6
+ * (returned cursor is the continuation).
7
+ *
8
+ * Cursor classes:
9
+ * - malformed / never-issued / wrong-epic → typed `invalid-cursor` error
10
+ * - expired → silent reset to head with `resetFrom: "expired"`
11
+ * - discarded → silent reset to head with `resetFrom: "discarded"`
12
+ * (nonce missing, cross-instance, or bus evicted)
13
+ * - valid → normal path
14
+ */
15
+ import type { CommandRunner } from '@generacy-ai/cockpit';
16
+ import type { CockpitStreamEvent } from '../../watch/stream-event.js';
17
+ import { type ToolResult } from '../errors.js';
18
+ import { type Acquired } from '../event-bus-registry.js';
19
+ export interface CockpitAwaitEventsData {
20
+ events: CockpitStreamEvent[];
21
+ cursor: string;
22
+ resetFrom?: 'expired' | 'discarded';
23
+ }
24
+ export interface CockpitAwaitEventsDeps {
25
+ runner?: CommandRunner;
26
+ /**
27
+ * Test seam: provide a pre-built acquired bus. Bypasses the registry
28
+ * (poll loop not started). Handler will NOT call `release` on it.
29
+ */
30
+ acquired?: Acquired;
31
+ intervalMs?: number;
32
+ }
33
+ export declare function cockpitAwaitEvents(input: unknown, deps?: CockpitAwaitEventsDeps): Promise<ToolResult<CockpitAwaitEventsData>>;
34
+ //# sourceMappingURL=cockpit_await_events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_await_events.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_await_events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAsC7C"}
@@ -0,0 +1,115 @@
1
+ import { normalizeIssueRef } from '../ref-input.js';
2
+ import { wrapToolBoundary } from '../errors.js';
3
+ import { AwaitEventsInputSchema } from '../schemas.js';
4
+ import { acquireEpicBus } from '../event-bus-registry.js';
5
+ import { encodeCursor, INSTANCE_NONCE } from '../event-bus.js';
6
+ export function cockpitAwaitEvents(input, deps = {}) {
7
+ return wrapToolBoundary(async () => {
8
+ const parsed = AwaitEventsInputSchema.safeParse(input);
9
+ if (!parsed.success) {
10
+ return {
11
+ status: 'error',
12
+ class: 'invalid-args',
13
+ detail: parsed.error.issues.map((i) => i.message).join('; '),
14
+ };
15
+ }
16
+ const args = parsed.data;
17
+ let acquired;
18
+ let releaseAfter = true;
19
+ if (deps.acquired != null) {
20
+ acquired = deps.acquired;
21
+ releaseAfter = false;
22
+ }
23
+ else {
24
+ const normalized = await normalizeIssueRef(args.epic, {
25
+ expects: 'issue',
26
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
27
+ });
28
+ if (!normalized.ok)
29
+ return normalized.error;
30
+ const epicRef = `${normalized.value.ref.nwo}#${normalized.value.ref.number}`;
31
+ acquired = await acquireEpicBus({
32
+ epicRef,
33
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
34
+ gh: normalized.value.gh,
35
+ ...(deps.intervalMs != null ? { intervalMs: deps.intervalMs } : {}),
36
+ });
37
+ }
38
+ try {
39
+ return await drainOrWait(acquired.bus, args);
40
+ }
41
+ finally {
42
+ if (releaseAfter)
43
+ acquired.release();
44
+ }
45
+ });
46
+ }
47
+ async function drainOrWait(bus, args) {
48
+ const parseResult = bus.parseCursor(args.cursor);
49
+ let resetFrom;
50
+ let sinceCursor;
51
+ switch (parseResult.kind) {
52
+ case 'malformed':
53
+ return {
54
+ status: 'error',
55
+ class: 'invalid-cursor',
56
+ detail: 'cursor is malformed (expected base64-encoded position)',
57
+ hint: 'cursor tokens are opaque; pass verbatim from a prior await_events result',
58
+ };
59
+ case 'never-issued':
60
+ return {
61
+ status: 'error',
62
+ class: 'invalid-cursor',
63
+ detail: `cursor position was never issued for epic ${bus.epic}`,
64
+ hint: 'start with cursor=undefined for a fresh subscription',
65
+ };
66
+ case 'wrong-epic':
67
+ return {
68
+ status: 'error',
69
+ class: 'invalid-cursor',
70
+ detail: `cursor was issued for epic ${parseResult.requestedEpic}, not ${parseResult.boundEpic}`,
71
+ };
72
+ case 'expired':
73
+ resetFrom = 'expired';
74
+ sinceCursor = 0;
75
+ break;
76
+ case 'discarded':
77
+ resetFrom = 'discarded';
78
+ sinceCursor = 0;
79
+ break;
80
+ case 'valid':
81
+ sinceCursor = parseResult.position;
82
+ break;
83
+ }
84
+ const result = await bus.waitFor({
85
+ sinceCursor,
86
+ maxWaitMs: args.maxWaitMs,
87
+ coalesceWindowMs: args.coalesceWindowMs,
88
+ maxBatchSize: args.maxBatchSize,
89
+ });
90
+ if (result.entries.length === 0) {
91
+ // When we reset (expired/discarded), always issue a fresh nonce-carrying
92
+ // cursor rather than echoing the caller's invalid token.
93
+ const cursorStr = resetFrom == null && args.cursor != null
94
+ ? args.cursor
95
+ : encodeCursor(bus.epic, sinceCursor, INSTANCE_NONCE, bus.busNonce);
96
+ return {
97
+ status: 'ok',
98
+ data: {
99
+ events: [],
100
+ cursor: cursorStr,
101
+ ...(resetFrom != null ? { resetFrom } : {}),
102
+ },
103
+ };
104
+ }
105
+ const last = result.entries[result.entries.length - 1];
106
+ return {
107
+ status: 'ok',
108
+ data: {
109
+ events: result.entries.map((e) => e.event),
110
+ cursor: encodeCursor(bus.epic, last.cursor, INSTANCE_NONCE, bus.busNonce),
111
+ ...(resetFrom != null ? { resetFrom } : {}),
112
+ },
113
+ };
114
+ }
115
+ //# sourceMappingURL=cockpit_await_events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_await_events.js","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_await_events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `cockpit_context` MCP tool handler.
3
+ *
4
+ * Wraps `runContext` — the internal function already returns the bundle
5
+ * object directly (in addition to writing the JSON line to stdout). We
6
+ * capture stdout to keep it off the MCP transport but use the return value
7
+ * as `data`.
8
+ */
9
+ import type { CommandRunner, GhWrapper } from '@generacy-ai/cockpit';
10
+ import { type ContextBundle } from '../../context.js';
11
+ import { type ToolResult } from '../errors.js';
12
+ import { type IssueRefInput } from '../schemas.js';
13
+ export interface CockpitContextInput {
14
+ issue: IssueRefInput;
15
+ }
16
+ export interface CockpitContextDeps {
17
+ runner?: CommandRunner;
18
+ gh?: GhWrapper;
19
+ }
20
+ export declare function cockpitContext(input: CockpitContextInput, deps?: CockpitContextDeps): Promise<ToolResult<ContextBundle>>;
21
+ //# sourceMappingURL=cockpit_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_context.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,EAAE,CAAC,EAAE,SAAS,CAAC;CAChB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,mBAAmB,EAC1B,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CA+BpC"}
@@ -0,0 +1,35 @@
1
+ import { runContext } from '../../context.js';
2
+ import { normalizeIssueRef } from '../ref-input.js';
3
+ import { wrapToolBoundary } from '../errors.js';
4
+ import { CockpitContextInputSchema, } from '../schemas.js';
5
+ export function cockpitContext(input, deps = {}) {
6
+ return wrapToolBoundary(async () => {
7
+ const parsed = CockpitContextInputSchema.safeParse(input);
8
+ if (!parsed.success) {
9
+ return {
10
+ status: 'error',
11
+ class: 'invalid-args',
12
+ detail: parsed.error.issues.map((i) => i.message).join('; '),
13
+ };
14
+ }
15
+ const normalized = await normalizeIssueRef(parsed.data.issue, {
16
+ expects: 'issue',
17
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
18
+ ...(deps.gh != null ? { gh: deps.gh } : {}),
19
+ });
20
+ if (!normalized.ok)
21
+ return normalized.error;
22
+ const captured = [];
23
+ const stderrLines = [];
24
+ const contextDeps = {
25
+ gh: deps.gh ?? normalized.value.gh,
26
+ ...(deps.runner != null ? { runner: deps.runner } : {}),
27
+ stdout: (line) => captured.push(line),
28
+ stderr: (line) => stderrLines.push(line),
29
+ };
30
+ const issueArg = `${normalized.value.ref.nwo}#${normalized.value.ref.number}`;
31
+ const bundle = await runContext(issueArg, contextDeps);
32
+ return { status: 'ok', data: bundle };
33
+ });
34
+ }
35
+ //# sourceMappingURL=cockpit_context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_context.js","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_context.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAA+C,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,yBAAyB,GAE1B,MAAM,eAAe,CAAC;AAWvB,MAAM,UAAU,cAAc,CAC5B,KAA0B,EAC1B,OAA2B,EAAE;IAE7B,OAAO,gBAAgB,CAAC,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aAC7D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;YAC5D,OAAO,EAAE,OAAO;YAChB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC;QAE5C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,WAAW,GAAuB;YACtC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;YAClC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;SACjD,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `cockpit_merge` MCP tool handler.
3
+ *
4
+ * Wraps `runMerge` (or `runMergeWithExplicitPr` when `pr` is supplied). Takes
5
+ * an issue ref, resolves it to a linked PR, and squash-merges IFF the PR is
6
+ * green and the issue carries `completed:validate`. Fully symmetric with the
7
+ * CLI verb `cockpit merge <issue>` — the same contract on both transports.
8
+ *
9
+ * If the caller's `issue` resolves to a *PR* node (rather than an issue), the
10
+ * resolver returns `{ kind: 'pr-number' }` and the CLI emits exit-2 with
11
+ * `reason: 'pr-number'`. `toMcpResult` maps that to `class: 'wrong-kind'`
12
+ * with the guidance hint carried over verbatim.
13
+ *
14
+ * Optional `pr: <number>` mirrors the CLI's `--pr <number>` escape hatch:
15
+ * skips resolution but keeps every safety precondition (linkage verification,
16
+ * completed:validate, checks green). Never a resolution bypass of safety.
17
+ */
18
+ import type { CommandRunner, GhWrapper } from '@generacy-ai/cockpit';
19
+ import { type ToolResult } from '../errors.js';
20
+ import { type IssueRefInput } from '../schemas.js';
21
+ export interface CockpitMergeInput {
22
+ issue: IssueRefInput;
23
+ pr?: number;
24
+ }
25
+ export interface CockpitMergeData {
26
+ pr: {
27
+ owner: string;
28
+ repo: string;
29
+ number: number;
30
+ url: string;
31
+ };
32
+ action: 'merged' | 'blocked';
33
+ checksState: 'success' | 'failure' | 'pending' | 'none';
34
+ mergeCommitSha?: string;
35
+ reason?: string;
36
+ raw?: unknown;
37
+ }
38
+ export interface CockpitMergeDeps {
39
+ runner?: CommandRunner;
40
+ gh?: GhWrapper;
41
+ }
42
+ export declare function cockpitMerge(input: CockpitMergeInput, deps?: CockpitMergeDeps): Promise<ToolResult<CockpitMergeData>>;
43
+ //# sourceMappingURL=cockpit_merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit_merge.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/commands/cockpit/mcp/tools/cockpit_merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIrE,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,EAAE,CAAC,EAAE,SAAS,CAAC;CAChB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAmFvC"}