@generacy-ai/orchestrator 0.0.0-preview-20260304013206

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 (274) hide show
  1. package/LICENSE +191 -0
  2. package/dist/auth/api-key.d.ts +63 -0
  3. package/dist/auth/api-key.d.ts.map +1 -0
  4. package/dist/auth/api-key.js +102 -0
  5. package/dist/auth/api-key.js.map +1 -0
  6. package/dist/auth/github-oauth.d.ts +29 -0
  7. package/dist/auth/github-oauth.d.ts.map +1 -0
  8. package/dist/auth/github-oauth.js +136 -0
  9. package/dist/auth/github-oauth.js.map +1 -0
  10. package/dist/auth/index.d.ts +5 -0
  11. package/dist/auth/index.d.ts.map +1 -0
  12. package/dist/auth/index.js +9 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/jwt.d.ts +34 -0
  15. package/dist/auth/jwt.d.ts.map +1 -0
  16. package/dist/auth/jwt.js +74 -0
  17. package/dist/auth/jwt.js.map +1 -0
  18. package/dist/auth/middleware.d.ts +43 -0
  19. package/dist/auth/middleware.d.ts.map +1 -0
  20. package/dist/auth/middleware.js +101 -0
  21. package/dist/auth/middleware.js.map +1 -0
  22. package/dist/config/index.d.ts +3 -0
  23. package/dist/config/index.d.ts.map +1 -0
  24. package/dist/config/index.js +5 -0
  25. package/dist/config/index.js.map +1 -0
  26. package/dist/config/loader.d.ts +21 -0
  27. package/dist/config/loader.d.ts.map +1 -0
  28. package/dist/config/loader.js +295 -0
  29. package/dist/config/loader.js.map +1 -0
  30. package/dist/config/schema.d.ts +733 -0
  31. package/dist/config/schema.d.ts.map +1 -0
  32. package/dist/config/schema.js +174 -0
  33. package/dist/config/schema.js.map +1 -0
  34. package/dist/index.d.ts +24 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +33 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/middleware/error-handler.d.ts +30 -0
  39. package/dist/middleware/error-handler.d.ts.map +1 -0
  40. package/dist/middleware/error-handler.js +173 -0
  41. package/dist/middleware/error-handler.js.map +1 -0
  42. package/dist/middleware/index.d.ts +4 -0
  43. package/dist/middleware/index.d.ts.map +1 -0
  44. package/dist/middleware/index.js +4 -0
  45. package/dist/middleware/index.js.map +1 -0
  46. package/dist/middleware/rate-limit.d.ts +32 -0
  47. package/dist/middleware/rate-limit.d.ts.map +1 -0
  48. package/dist/middleware/rate-limit.js +92 -0
  49. package/dist/middleware/rate-limit.js.map +1 -0
  50. package/dist/middleware/request-logger.d.ts +31 -0
  51. package/dist/middleware/request-logger.d.ts.map +1 -0
  52. package/dist/middleware/request-logger.js +89 -0
  53. package/dist/middleware/request-logger.js.map +1 -0
  54. package/dist/routes/agents.d.ts +7 -0
  55. package/dist/routes/agents.d.ts.map +1 -0
  56. package/dist/routes/agents.js +78 -0
  57. package/dist/routes/agents.js.map +1 -0
  58. package/dist/routes/dispatch.d.ts +8 -0
  59. package/dist/routes/dispatch.d.ts.map +1 -0
  60. package/dist/routes/dispatch.js +46 -0
  61. package/dist/routes/dispatch.js.map +1 -0
  62. package/dist/routes/events.d.ts +14 -0
  63. package/dist/routes/events.d.ts.map +1 -0
  64. package/dist/routes/events.js +240 -0
  65. package/dist/routes/events.js.map +1 -0
  66. package/dist/routes/health.d.ts +14 -0
  67. package/dist/routes/health.d.ts.map +1 -0
  68. package/dist/routes/health.js +132 -0
  69. package/dist/routes/health.js.map +1 -0
  70. package/dist/routes/index.d.ts +36 -0
  71. package/dist/routes/index.d.ts.map +1 -0
  72. package/dist/routes/index.js +34 -0
  73. package/dist/routes/index.js.map +1 -0
  74. package/dist/routes/integrations.d.ts +34 -0
  75. package/dist/routes/integrations.d.ts.map +1 -0
  76. package/dist/routes/integrations.js +81 -0
  77. package/dist/routes/integrations.js.map +1 -0
  78. package/dist/routes/metrics.d.ts +31 -0
  79. package/dist/routes/metrics.d.ts.map +1 -0
  80. package/dist/routes/metrics.js +157 -0
  81. package/dist/routes/metrics.js.map +1 -0
  82. package/dist/routes/pr-webhooks.d.ts +15 -0
  83. package/dist/routes/pr-webhooks.d.ts.map +1 -0
  84. package/dist/routes/pr-webhooks.js +114 -0
  85. package/dist/routes/pr-webhooks.js.map +1 -0
  86. package/dist/routes/queue.d.ts +7 -0
  87. package/dist/routes/queue.d.ts.map +1 -0
  88. package/dist/routes/queue.js +94 -0
  89. package/dist/routes/queue.js.map +1 -0
  90. package/dist/routes/webhooks.d.ts +15 -0
  91. package/dist/routes/webhooks.d.ts.map +1 -0
  92. package/dist/routes/webhooks.js +117 -0
  93. package/dist/routes/webhooks.js.map +1 -0
  94. package/dist/routes/workflows.d.ts +7 -0
  95. package/dist/routes/workflows.d.ts.map +1 -0
  96. package/dist/routes/workflows.js +138 -0
  97. package/dist/routes/workflows.js.map +1 -0
  98. package/dist/server.d.ts +35 -0
  99. package/dist/server.d.ts.map +1 -0
  100. package/dist/server.js +264 -0
  101. package/dist/server.js.map +1 -0
  102. package/dist/services/agent-registry.d.ts +89 -0
  103. package/dist/services/agent-registry.d.ts.map +1 -0
  104. package/dist/services/agent-registry.js +173 -0
  105. package/dist/services/agent-registry.js.map +1 -0
  106. package/dist/services/epic-completion-monitor-service.d.ts +69 -0
  107. package/dist/services/epic-completion-monitor-service.d.ts.map +1 -0
  108. package/dist/services/epic-completion-monitor-service.js +200 -0
  109. package/dist/services/epic-completion-monitor-service.js.map +1 -0
  110. package/dist/services/identity.d.ts +41 -0
  111. package/dist/services/identity.d.ts.map +1 -0
  112. package/dist/services/identity.js +91 -0
  113. package/dist/services/identity.js.map +1 -0
  114. package/dist/services/index.d.ts +13 -0
  115. package/dist/services/index.d.ts.map +1 -0
  116. package/dist/services/index.js +13 -0
  117. package/dist/services/index.js.map +1 -0
  118. package/dist/services/label-monitor-service.d.ts +95 -0
  119. package/dist/services/label-monitor-service.d.ts.map +1 -0
  120. package/dist/services/label-monitor-service.js +414 -0
  121. package/dist/services/label-monitor-service.js.map +1 -0
  122. package/dist/services/label-sync-service.d.ts +76 -0
  123. package/dist/services/label-sync-service.d.ts.map +1 -0
  124. package/dist/services/label-sync-service.js +108 -0
  125. package/dist/services/label-sync-service.js.map +1 -0
  126. package/dist/services/phase-tracker-service.d.ts +32 -0
  127. package/dist/services/phase-tracker-service.d.ts.map +1 -0
  128. package/dist/services/phase-tracker-service.js +82 -0
  129. package/dist/services/phase-tracker-service.js.map +1 -0
  130. package/dist/services/pr-feedback-monitor-service.d.ts +86 -0
  131. package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -0
  132. package/dist/services/pr-feedback-monitor-service.js +423 -0
  133. package/dist/services/pr-feedback-monitor-service.js.map +1 -0
  134. package/dist/services/queue-service.d.ts +62 -0
  135. package/dist/services/queue-service.d.ts.map +1 -0
  136. package/dist/services/queue-service.js +147 -0
  137. package/dist/services/queue-service.js.map +1 -0
  138. package/dist/services/redis-queue-adapter.d.ts +35 -0
  139. package/dist/services/redis-queue-adapter.d.ts.map +1 -0
  140. package/dist/services/redis-queue-adapter.js +218 -0
  141. package/dist/services/redis-queue-adapter.js.map +1 -0
  142. package/dist/services/smee-receiver.d.ts +87 -0
  143. package/dist/services/smee-receiver.d.ts.map +1 -0
  144. package/dist/services/smee-receiver.js +225 -0
  145. package/dist/services/smee-receiver.js.map +1 -0
  146. package/dist/services/webhook-setup-service.d.ts +253 -0
  147. package/dist/services/webhook-setup-service.d.ts.map +1 -0
  148. package/dist/services/webhook-setup-service.js +369 -0
  149. package/dist/services/webhook-setup-service.js.map +1 -0
  150. package/dist/services/worker-dispatcher.d.ts +57 -0
  151. package/dist/services/worker-dispatcher.d.ts.map +1 -0
  152. package/dist/services/worker-dispatcher.js +211 -0
  153. package/dist/services/worker-dispatcher.js.map +1 -0
  154. package/dist/services/workflow-service.d.ts +65 -0
  155. package/dist/services/workflow-service.d.ts.map +1 -0
  156. package/dist/services/workflow-service.js +164 -0
  157. package/dist/services/workflow-service.js.map +1 -0
  158. package/dist/sse/events.d.ts +50 -0
  159. package/dist/sse/events.d.ts.map +1 -0
  160. package/dist/sse/events.js +152 -0
  161. package/dist/sse/events.js.map +1 -0
  162. package/dist/sse/index.d.ts +4 -0
  163. package/dist/sse/index.d.ts.map +1 -0
  164. package/dist/sse/index.js +7 -0
  165. package/dist/sse/index.js.map +1 -0
  166. package/dist/sse/stream.d.ts +109 -0
  167. package/dist/sse/stream.d.ts.map +1 -0
  168. package/dist/sse/stream.js +239 -0
  169. package/dist/sse/stream.js.map +1 -0
  170. package/dist/sse/subscriptions.d.ts +91 -0
  171. package/dist/sse/subscriptions.d.ts.map +1 -0
  172. package/dist/sse/subscriptions.js +299 -0
  173. package/dist/sse/subscriptions.js.map +1 -0
  174. package/dist/types/api.d.ts +651 -0
  175. package/dist/types/api.d.ts.map +1 -0
  176. package/dist/types/api.js +169 -0
  177. package/dist/types/api.js.map +1 -0
  178. package/dist/types/index.d.ts +6 -0
  179. package/dist/types/index.d.ts.map +1 -0
  180. package/dist/types/index.js +27 -0
  181. package/dist/types/index.js.map +1 -0
  182. package/dist/types/monitor.d.ts +243 -0
  183. package/dist/types/monitor.d.ts.map +1 -0
  184. package/dist/types/monitor.js +2 -0
  185. package/dist/types/monitor.js.map +1 -0
  186. package/dist/types/problem-details.d.ts +63 -0
  187. package/dist/types/problem-details.d.ts.map +1 -0
  188. package/dist/types/problem-details.js +37 -0
  189. package/dist/types/problem-details.js.map +1 -0
  190. package/dist/types/sse.d.ts +224 -0
  191. package/dist/types/sse.d.ts.map +1 -0
  192. package/dist/types/sse.js +103 -0
  193. package/dist/types/sse.js.map +1 -0
  194. package/dist/types/webhook.d.ts +59 -0
  195. package/dist/types/webhook.d.ts.map +1 -0
  196. package/dist/types/webhook.js +2 -0
  197. package/dist/types/webhook.js.map +1 -0
  198. package/dist/utils/correlation.d.ts +30 -0
  199. package/dist/utils/correlation.d.ts.map +1 -0
  200. package/dist/utils/correlation.js +34 -0
  201. package/dist/utils/correlation.js.map +1 -0
  202. package/dist/utils/index.d.ts +3 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +3 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/shutdown.d.ts +28 -0
  207. package/dist/utils/shutdown.d.ts.map +1 -0
  208. package/dist/utils/shutdown.js +86 -0
  209. package/dist/utils/shutdown.js.map +1 -0
  210. package/dist/worker/claude-cli-worker.d.ts +61 -0
  211. package/dist/worker/claude-cli-worker.d.ts.map +1 -0
  212. package/dist/worker/claude-cli-worker.js +330 -0
  213. package/dist/worker/claude-cli-worker.js.map +1 -0
  214. package/dist/worker/cli-spawner.d.ts +42 -0
  215. package/dist/worker/cli-spawner.d.ts.map +1 -0
  216. package/dist/worker/cli-spawner.js +183 -0
  217. package/dist/worker/cli-spawner.js.map +1 -0
  218. package/dist/worker/config.d.ts +76 -0
  219. package/dist/worker/config.d.ts.map +1 -0
  220. package/dist/worker/config.js +39 -0
  221. package/dist/worker/config.js.map +1 -0
  222. package/dist/worker/epic-post-tasks.d.ts +73 -0
  223. package/dist/worker/epic-post-tasks.d.ts.map +1 -0
  224. package/dist/worker/epic-post-tasks.js +266 -0
  225. package/dist/worker/epic-post-tasks.js.map +1 -0
  226. package/dist/worker/gate-checker.d.ts +22 -0
  227. package/dist/worker/gate-checker.d.ts.map +1 -0
  228. package/dist/worker/gate-checker.js +41 -0
  229. package/dist/worker/gate-checker.js.map +1 -0
  230. package/dist/worker/index.d.ts +13 -0
  231. package/dist/worker/index.d.ts.map +1 -0
  232. package/dist/worker/index.js +19 -0
  233. package/dist/worker/index.js.map +1 -0
  234. package/dist/worker/label-manager.d.ts +89 -0
  235. package/dist/worker/label-manager.d.ts.map +1 -0
  236. package/dist/worker/label-manager.js +200 -0
  237. package/dist/worker/label-manager.js.map +1 -0
  238. package/dist/worker/output-capture.d.ts +58 -0
  239. package/dist/worker/output-capture.d.ts.map +1 -0
  240. package/dist/worker/output-capture.js +153 -0
  241. package/dist/worker/output-capture.js.map +1 -0
  242. package/dist/worker/phase-loop.d.ts +64 -0
  243. package/dist/worker/phase-loop.d.ts.map +1 -0
  244. package/dist/worker/phase-loop.js +185 -0
  245. package/dist/worker/phase-loop.js.map +1 -0
  246. package/dist/worker/phase-resolver.d.ts +62 -0
  247. package/dist/worker/phase-resolver.d.ts.map +1 -0
  248. package/dist/worker/phase-resolver.js +144 -0
  249. package/dist/worker/phase-resolver.js.map +1 -0
  250. package/dist/worker/pr-feedback-handler.d.ts +105 -0
  251. package/dist/worker/pr-feedback-handler.d.ts.map +1 -0
  252. package/dist/worker/pr-feedback-handler.js +391 -0
  253. package/dist/worker/pr-feedback-handler.js.map +1 -0
  254. package/dist/worker/pr-linker.d.ts +69 -0
  255. package/dist/worker/pr-linker.d.ts.map +1 -0
  256. package/dist/worker/pr-linker.js +108 -0
  257. package/dist/worker/pr-linker.js.map +1 -0
  258. package/dist/worker/pr-manager.d.ts +61 -0
  259. package/dist/worker/pr-manager.d.ts.map +1 -0
  260. package/dist/worker/pr-manager.js +140 -0
  261. package/dist/worker/pr-manager.js.map +1 -0
  262. package/dist/worker/repo-checkout.d.ts +63 -0
  263. package/dist/worker/repo-checkout.d.ts.map +1 -0
  264. package/dist/worker/repo-checkout.js +160 -0
  265. package/dist/worker/repo-checkout.js.map +1 -0
  266. package/dist/worker/stage-comment-manager.d.ts +34 -0
  267. package/dist/worker/stage-comment-manager.d.ts.map +1 -0
  268. package/dist/worker/stage-comment-manager.js +114 -0
  269. package/dist/worker/stage-comment-manager.js.map +1 -0
  270. package/dist/worker/types.d.ts +192 -0
  271. package/dist/worker/types.d.ts.map +1 -0
  272. package/dist/worker/types.js +53 -0
  273. package/dist/worker/types.js.map +1 -0
  274. package/package.json +64 -0
@@ -0,0 +1,76 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Gate definition schema for pausing workflow at review checkpoints
4
+ */
5
+ export declare const GateDefinitionSchema: z.ZodObject<{
6
+ /** Phase that triggers gate check */
7
+ phase: z.ZodEnum<["specify", "clarify", "plan", "tasks", "implement", "validate"]>;
8
+ /** Label to add when gate is active */
9
+ gateLabel: z.ZodString;
10
+ /** When to activate the gate */
11
+ condition: z.ZodEnum<["always", "on-questions", "on-failure"]>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
14
+ gateLabel: string;
15
+ condition: "always" | "on-questions" | "on-failure";
16
+ }, {
17
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
18
+ gateLabel: string;
19
+ condition: "always" | "on-questions" | "on-failure";
20
+ }>;
21
+ /**
22
+ * Worker configuration schema
23
+ */
24
+ export declare const WorkerConfigSchema: z.ZodObject<{
25
+ /** Timeout per phase in milliseconds */
26
+ phaseTimeoutMs: z.ZodDefault<z.ZodNumber>;
27
+ /** Base directory for repo checkouts */
28
+ workspaceDir: z.ZodDefault<z.ZodString>;
29
+ /** Grace period for shutdown in milliseconds */
30
+ shutdownGracePeriodMs: z.ZodDefault<z.ZodNumber>;
31
+ /** Command to run during the validate phase */
32
+ validateCommand: z.ZodDefault<z.ZodString>;
33
+ /** Maximum Claude CLI turns per phase */
34
+ maxTurns: z.ZodDefault<z.ZodNumber>;
35
+ /** Gate definitions keyed by issue label */
36
+ gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
37
+ /** Phase that triggers gate check */
38
+ phase: z.ZodEnum<["specify", "clarify", "plan", "tasks", "implement", "validate"]>;
39
+ /** Label to add when gate is active */
40
+ gateLabel: z.ZodString;
41
+ /** When to activate the gate */
42
+ condition: z.ZodEnum<["always", "on-questions", "on-failure"]>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
45
+ gateLabel: string;
46
+ condition: "always" | "on-questions" | "on-failure";
47
+ }, {
48
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
49
+ gateLabel: string;
50
+ condition: "always" | "on-questions" | "on-failure";
51
+ }>, "many">>>;
52
+ }, "strip", z.ZodTypeAny, {
53
+ phaseTimeoutMs: number;
54
+ workspaceDir: string;
55
+ shutdownGracePeriodMs: number;
56
+ validateCommand: string;
57
+ maxTurns: number;
58
+ gates: Record<string, {
59
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
60
+ gateLabel: string;
61
+ condition: "always" | "on-questions" | "on-failure";
62
+ }[]>;
63
+ }, {
64
+ phaseTimeoutMs?: number | undefined;
65
+ workspaceDir?: string | undefined;
66
+ shutdownGracePeriodMs?: number | undefined;
67
+ validateCommand?: string | undefined;
68
+ maxTurns?: number | undefined;
69
+ gates?: Record<string, {
70
+ phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
71
+ gateLabel: string;
72
+ condition: "always" | "on-questions" | "on-failure";
73
+ }[]> | undefined;
74
+ }>;
75
+ export type WorkerConfig = z.infer<typeof WorkerConfigSchema>;
76
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B,qCAAqC;;IAErC,uCAAuC;;IAEvC,gCAAgC;;;;;;;;;;EAEhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,wCAAwC;;IAExC,wCAAwC;;IAExC,gDAAgD;;IAEhD,+CAA+C;;IAE/C,yCAAyC;;IAEzC,4CAA4C;;QAtB5C,qCAAqC;;QAErC,uCAAuC;;QAEvC,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BhC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Gate definition schema for pausing workflow at review checkpoints
4
+ */
5
+ export const GateDefinitionSchema = z.object({
6
+ /** Phase that triggers gate check */
7
+ phase: z.enum(['specify', 'clarify', 'plan', 'tasks', 'implement', 'validate']),
8
+ /** Label to add when gate is active */
9
+ gateLabel: z.string(),
10
+ /** When to activate the gate */
11
+ condition: z.enum(['always', 'on-questions', 'on-failure']),
12
+ });
13
+ /**
14
+ * Worker configuration schema
15
+ */
16
+ export const WorkerConfigSchema = z.object({
17
+ /** Timeout per phase in milliseconds */
18
+ phaseTimeoutMs: z.number().int().min(60_000).default(600_000),
19
+ /** Base directory for repo checkouts */
20
+ workspaceDir: z.string().default('/tmp/orchestrator-workspaces'),
21
+ /** Grace period for shutdown in milliseconds */
22
+ shutdownGracePeriodMs: z.number().int().min(1000).default(5000),
23
+ /** Command to run during the validate phase */
24
+ validateCommand: z.string().default('pnpm test && pnpm build'),
25
+ /** Maximum Claude CLI turns per phase */
26
+ maxTurns: z.number().int().min(10).default(100),
27
+ /** Gate definitions keyed by issue label */
28
+ gates: z.record(z.string(), z.array(GateDefinitionSchema)).default({
29
+ 'speckit-feature': [
30
+ { phase: 'clarify', gateLabel: 'waiting-for:clarification', condition: 'always' },
31
+ ],
32
+ 'speckit-bugfix': [],
33
+ 'speckit-epic': [
34
+ { phase: 'clarify', gateLabel: 'waiting-for:clarification', condition: 'always' },
35
+ { phase: 'tasks', gateLabel: 'waiting-for:tasks-review', condition: 'always' },
36
+ ],
37
+ }),
38
+ });
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,qCAAqC;IACrC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAA6C,CAAC;IAC3H,uCAAuC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,gCAAgC;IAChC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;CAC5D,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,wCAAwC;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7D,wCAAwC;IACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,8BAA8B,CAAC;IAChE,gDAAgD;IAChD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/D,+CAA+C;IAC/C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAC9D,yCAAyC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC/C,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,iBAAiB,EAAE;YACjB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,2BAA2B,EAAE,SAAS,EAAE,QAAQ,EAAE;SAClF;QACD,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE;YACd,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,2BAA2B,EAAE,SAAS,EAAE,QAAQ,EAAE;YACjF,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,SAAS,EAAE,QAAQ,EAAE;SAC/E;KACF,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { TasksToIssuesOutput } from '@generacy-ai/workflow-engine';
2
+ import type { WorkerContext, Logger } from './types.js';
3
+ /**
4
+ * Result returned by EpicPostTasks.execute()
5
+ */
6
+ export interface EpicPostTasksResult {
7
+ /** Issue numbers of successfully created or already-existing child issues */
8
+ childIssues: number[];
9
+ /** Whether all post-tasks steps completed successfully */
10
+ success: boolean;
11
+ /** Output from the tasks-to-issues operation */
12
+ tasksToIssuesOutput?: TasksToIssuesOutput;
13
+ }
14
+ /**
15
+ * Handles post-tasks steps for epic workflows.
16
+ *
17
+ * This class is invoked after the phase loop completes for `speckit-epic`
18
+ * workflows (i.e., after specify → clarify → plan → tasks). It replaces
19
+ * the standard completion flow (markReadyForReview, onWorkflowComplete)
20
+ * with epic-specific child issue creation and dispatch.
21
+ */
22
+ export declare class EpicPostTasks {
23
+ private readonly logger;
24
+ constructor(logger: Logger);
25
+ /**
26
+ * Execute all post-tasks steps for an epic workflow.
27
+ *
28
+ * Steps:
29
+ * 1. Parse tasks.md → create child GitHub issues (idempotent)
30
+ * 2. Dispatch children (add trigger labels, assign to agent)
31
+ * 3. Post tasks summary comment on epic
32
+ * 4. Add `waiting-for:children-complete` label
33
+ */
34
+ execute(context: WorkerContext): Promise<EpicPostTasksResult>;
35
+ /**
36
+ * Step 1: Parse tasks.md and create child GitHub issues.
37
+ *
38
+ * Calls executeTasksToIssues() directly — this is the same function
39
+ * used by the speckit.tasks_to_issues workflow-engine action.
40
+ */
41
+ private createChildIssues;
42
+ /**
43
+ * Step 2: Dispatch children by assigning to agent and adding dispatched label.
44
+ *
45
+ * This mirrors the logic in DispatchChildrenAction but operates directly
46
+ * via the GitHub client, avoiding the need for a full ActionContext with
47
+ * workflow/phase/step definitions.
48
+ */
49
+ private dispatchChildren;
50
+ /**
51
+ * Step 3: Post a summary comment on the epic issue listing all child issues.
52
+ */
53
+ private postTasksSummary;
54
+ /**
55
+ * Resolve the feature directory for this epic.
56
+ * Looks in the specs/ directory for a folder matching the issue number.
57
+ */
58
+ private resolveFeatureDir;
59
+ /**
60
+ * Resolve the epic branch name.
61
+ * The epic branch is the current working branch (created during specify phase).
62
+ */
63
+ private resolveEpicBranch;
64
+ /**
65
+ * Build a minimal ActionContext compatible with the workflow-engine's
66
+ * executeTasksToIssues() function.
67
+ *
68
+ * The function only uses `context.workdir` and `context.logger`, so we
69
+ * provide those and stub the rest.
70
+ */
71
+ private buildActionContext;
72
+ }
73
+ //# sourceMappingURL=epic-post-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epic-post-tasks.d.ts","sourceRoot":"","sources":["../../src/worker/epic-post-tasks.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAWD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAiFnE;;;;;OAKG;YACW,iBAAiB;IAmC/B;;;;;;OAMG;YACW,gBAAgB;IA8C9B;;OAEG;YACW,gBAAgB;IA+C9B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;OAGG;YACW,iBAAiB;IAwB/B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;CAsB3B"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Epic post-tasks handler.
3
+ *
4
+ * After the tasks phase completes for an epic workflow, this handler:
5
+ * 1. Parses tasks.md and creates child GitHub issues (via executeTasksToIssues)
6
+ * 2. Dispatches children by adding trigger labels and assigning to agent
7
+ * 3. Posts a tasks summary comment on the epic issue
8
+ * 4. Adds `waiting-for:children-complete` label to pause the epic
9
+ *
10
+ * All operations are deterministic — no Claude CLI is needed.
11
+ */
12
+ import { readdirSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ import { executeTasksToIssues, } from '@generacy-ai/workflow-engine';
15
+ /** Default trigger label applied to child issues */
16
+ const DEFAULT_TRIGGER_LABEL = 'process:speckit-feature';
17
+ /** Label applied to dispatched child issues */
18
+ const DISPATCHED_LABEL = 'agent:dispatched';
19
+ /** Default agent account to assign child issues to */
20
+ const DEFAULT_AGENT_ACCOUNT = 'generacy-bot';
21
+ /**
22
+ * Handles post-tasks steps for epic workflows.
23
+ *
24
+ * This class is invoked after the phase loop completes for `speckit-epic`
25
+ * workflows (i.e., after specify → clarify → plan → tasks). It replaces
26
+ * the standard completion flow (markReadyForReview, onWorkflowComplete)
27
+ * with epic-specific child issue creation and dispatch.
28
+ */
29
+ export class EpicPostTasks {
30
+ logger;
31
+ constructor(logger) {
32
+ this.logger = logger;
33
+ }
34
+ /**
35
+ * Execute all post-tasks steps for an epic workflow.
36
+ *
37
+ * Steps:
38
+ * 1. Parse tasks.md → create child GitHub issues (idempotent)
39
+ * 2. Dispatch children (add trigger labels, assign to agent)
40
+ * 3. Post tasks summary comment on epic
41
+ * 4. Add `waiting-for:children-complete` label
42
+ */
43
+ async execute(context) {
44
+ const { item, github } = context;
45
+ const { owner, repo, issueNumber } = item;
46
+ this.logger.info({ owner, repo, issueNumber }, 'Starting epic post-tasks: creating child issues and dispatching');
47
+ // 1. Create child issues from tasks.md
48
+ let tasksOutput;
49
+ try {
50
+ tasksOutput = await this.createChildIssues(context);
51
+ }
52
+ catch (error) {
53
+ this.logger.error({ error: String(error), issueNumber }, 'Failed to create child issues from tasks.md');
54
+ return { childIssues: [], success: false };
55
+ }
56
+ // Collect all child issue numbers (created + already existing)
57
+ const childIssues = [
58
+ ...tasksOutput.created_issues.map((i) => i.issue_number),
59
+ ...tasksOutput.skipped_issues.map((i) => i.issue_number),
60
+ ];
61
+ if (childIssues.length === 0 && tasksOutput.total_tasks > 0) {
62
+ this.logger.error({ failedTasks: tasksOutput.failed_tasks.length, totalTasks: tasksOutput.total_tasks }, 'All tasks failed to create issues — aborting post-tasks');
63
+ return { childIssues: [], success: false, tasksToIssuesOutput: tasksOutput };
64
+ }
65
+ // 2. Dispatch children (add trigger labels and assign to agent)
66
+ if (tasksOutput.created_issues.length > 0) {
67
+ try {
68
+ await this.dispatchChildren(context, tasksOutput.created_issues.map((i) => i.issue_number));
69
+ }
70
+ catch (error) {
71
+ this.logger.warn({ error: String(error), issueNumber }, 'Failed to dispatch some children — continuing with remaining steps');
72
+ }
73
+ }
74
+ // 3. Post tasks summary comment on epic
75
+ try {
76
+ await this.postTasksSummary(context, tasksOutput);
77
+ }
78
+ catch (error) {
79
+ this.logger.warn({ error: String(error), issueNumber }, 'Failed to post tasks summary comment — continuing');
80
+ }
81
+ // 4. Add waiting-for:children-complete label
82
+ try {
83
+ await github.addLabels(owner, repo, issueNumber, ['waiting-for:children-complete']);
84
+ this.logger.info({ issueNumber }, 'Added waiting-for:children-complete label to epic');
85
+ }
86
+ catch (error) {
87
+ this.logger.error({ error: String(error), issueNumber }, 'Failed to add waiting-for:children-complete label');
88
+ // This is a critical step — if we can't pause the epic, report failure
89
+ return { childIssues, success: false, tasksToIssuesOutput: tasksOutput };
90
+ }
91
+ this.logger.info({ childIssues, created: tasksOutput.created_issues.length, skipped: tasksOutput.skipped_issues.length }, 'Epic post-tasks complete');
92
+ return { childIssues, success: true, tasksToIssuesOutput: tasksOutput };
93
+ }
94
+ /**
95
+ * Step 1: Parse tasks.md and create child GitHub issues.
96
+ *
97
+ * Calls executeTasksToIssues() directly — this is the same function
98
+ * used by the speckit.tasks_to_issues workflow-engine action.
99
+ */
100
+ async createChildIssues(context) {
101
+ const { item } = context;
102
+ // Resolve the feature directory path from the specs directory
103
+ const featureDir = this.resolveFeatureDir(context);
104
+ // Resolve the epic branch name (the branch the epic is working on)
105
+ const epicBranch = await this.resolveEpicBranch(context);
106
+ // Build a minimal ActionContext for the workflow-engine function
107
+ const actionContext = this.buildActionContext(context);
108
+ const output = await executeTasksToIssues({
109
+ feature_dir: featureDir,
110
+ epic_issue_number: item.issueNumber,
111
+ epic_branch: epicBranch,
112
+ trigger_label: DEFAULT_TRIGGER_LABEL,
113
+ }, actionContext);
114
+ this.logger.info({
115
+ created: output.created_issues.length,
116
+ skipped: output.skipped_issues.length,
117
+ failed: output.failed_tasks.length,
118
+ total: output.total_tasks,
119
+ }, 'Tasks-to-issues operation complete');
120
+ return output;
121
+ }
122
+ /**
123
+ * Step 2: Dispatch children by assigning to agent and adding dispatched label.
124
+ *
125
+ * This mirrors the logic in DispatchChildrenAction but operates directly
126
+ * via the GitHub client, avoiding the need for a full ActionContext with
127
+ * workflow/phase/step definitions.
128
+ */
129
+ async dispatchChildren(context, childIssueNumbers) {
130
+ const { github, item } = context;
131
+ const { owner, repo } = item;
132
+ const agentAccount = process.env.GENERACY_AGENT_ACCOUNT ?? DEFAULT_AGENT_ACCOUNT;
133
+ this.logger.info({ children: childIssueNumbers.length, agentAccount }, 'Dispatching child issues');
134
+ let dispatched = 0;
135
+ let failed = 0;
136
+ for (const childNumber of childIssueNumbers) {
137
+ try {
138
+ // Assign to agent account
139
+ await github.updateIssue(owner, repo, childNumber, {
140
+ assignees: [agentAccount],
141
+ });
142
+ // Add dispatched label
143
+ await github.addLabels(owner, repo, childNumber, [DISPATCHED_LABEL]);
144
+ dispatched++;
145
+ this.logger.debug({ childNumber }, `Dispatched child #${childNumber}`);
146
+ }
147
+ catch (error) {
148
+ failed++;
149
+ this.logger.warn({ error: String(error), childNumber }, `Failed to dispatch child #${childNumber}`);
150
+ }
151
+ }
152
+ this.logger.info({ dispatched, failed, total: childIssueNumbers.length }, 'Child dispatch complete');
153
+ }
154
+ /**
155
+ * Step 3: Post a summary comment on the epic issue listing all child issues.
156
+ */
157
+ async postTasksSummary(context, tasksOutput) {
158
+ const { github, item } = context;
159
+ const { owner, repo, issueNumber } = item;
160
+ const allIssues = [
161
+ ...tasksOutput.created_issues.map((i) => ({
162
+ number: i.issue_number,
163
+ title: i.title,
164
+ taskId: i.task_id,
165
+ status: 'created',
166
+ })),
167
+ ...tasksOutput.skipped_issues.map((i) => ({
168
+ number: i.issue_number,
169
+ title: i.title,
170
+ taskId: i.task_id,
171
+ status: 'existing',
172
+ })),
173
+ ];
174
+ const issueRows = allIssues
175
+ .map((i) => `| ${i.taskId} | #${i.number} | ${i.title} | ${i.status === 'created' ? 'New' : 'Existing'} |`)
176
+ .join('\n');
177
+ const failedRows = tasksOutput.failed_tasks
178
+ .map((f) => `| ${f.task_id} | ${f.title} | ${f.reason} |`)
179
+ .join('\n');
180
+ let body = `<!-- epic-children-summary -->\n## Child Issues Created\n\n`;
181
+ body += `| Task | Issue | Title | Status |\n|------|-------|-------|--------|\n${issueRows}\n\n`;
182
+ if (tasksOutput.failed_tasks.length > 0) {
183
+ body += `### Failed Tasks\n\n| Task | Title | Reason |\n|------|-------|--------|\n${failedRows}\n\n`;
184
+ }
185
+ body += `**Total**: ${tasksOutput.total_tasks} tasks, ${tasksOutput.created_issues.length} created, ${tasksOutput.skipped_issues.length} existing, ${tasksOutput.failed_tasks.length} failed\n`;
186
+ await github.addIssueComment(owner, repo, issueNumber, body);
187
+ this.logger.info({ issueNumber, childCount: allIssues.length }, 'Posted tasks summary comment on epic');
188
+ }
189
+ /**
190
+ * Resolve the feature directory for this epic.
191
+ * Looks in the specs/ directory for a folder matching the issue number.
192
+ */
193
+ resolveFeatureDir(context) {
194
+ const { item, checkoutPath } = context;
195
+ const { issueNumber } = item;
196
+ // Convention: specs/{issueNumber}-{short-name}/
197
+ const specsDir = join(checkoutPath, 'specs');
198
+ try {
199
+ const dirs = readdirSync(specsDir);
200
+ const match = dirs.find((d) => d.startsWith(`${issueNumber}-`));
201
+ if (match) {
202
+ return join(specsDir, match);
203
+ }
204
+ }
205
+ catch {
206
+ // specs directory may not exist
207
+ }
208
+ // Fallback: use the issue number directly
209
+ return join(checkoutPath, 'specs', `${issueNumber}`);
210
+ }
211
+ /**
212
+ * Resolve the epic branch name.
213
+ * The epic branch is the current working branch (created during specify phase).
214
+ */
215
+ async resolveEpicBranch(context) {
216
+ const { github, item } = context;
217
+ try {
218
+ return await github.getCurrentBranch();
219
+ }
220
+ catch {
221
+ // Fall through to branch lookup
222
+ }
223
+ // Fallback: find branch by issue number prefix
224
+ try {
225
+ const branches = await github.listBranches(item.owner, item.repo);
226
+ const epicBranch = branches.find((b) => b.startsWith(`${item.issueNumber}-`));
227
+ if (epicBranch) {
228
+ return epicBranch;
229
+ }
230
+ }
231
+ catch {
232
+ // Fall through to last resort
233
+ }
234
+ // Last resort: construct from issue number
235
+ return `${item.issueNumber}-epic`;
236
+ }
237
+ /**
238
+ * Build a minimal ActionContext compatible with the workflow-engine's
239
+ * executeTasksToIssues() function.
240
+ *
241
+ * The function only uses `context.workdir` and `context.logger`, so we
242
+ * provide those and stub the rest.
243
+ */
244
+ buildActionContext(context) {
245
+ // Adapt the orchestrator logger to the workflow-engine logger interface
246
+ const logger = {
247
+ info: (msg) => this.logger.info(msg),
248
+ warn: (msg) => this.logger.warn(msg),
249
+ error: (msg) => this.logger.error(msg),
250
+ debug: (msg) => this.logger.debug(msg),
251
+ };
252
+ return {
253
+ workdir: context.checkoutPath,
254
+ logger,
255
+ // These fields are required by ActionContext but not used by executeTasksToIssues
256
+ workflow: {},
257
+ phase: {},
258
+ step: {},
259
+ inputs: {},
260
+ stepOutputs: new Map(),
261
+ env: {},
262
+ signal: context.signal,
263
+ };
264
+ }
265
+ }
266
+ //# sourceMappingURL=epic-post-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epic-post-tasks.js","sourceRoot":"","sources":["../../src/worker/epic-post-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { WorkflowPhase, GateDefinition, Logger } from './types.js';
2
+ import type { WorkerConfig } from './config.js';
3
+ /**
4
+ * Checks configuration-driven review gates after each phase completes.
5
+ *
6
+ * Gates allow workflows to pause at specific phases for human review,
7
+ * clarification, or failure handling before proceeding to the next phase.
8
+ */
9
+ export declare class GateChecker {
10
+ private readonly logger;
11
+ constructor(logger: Logger);
12
+ /**
13
+ * Check if a gate should be activated after the given phase completes.
14
+ * Returns the GateDefinition if a gate is active, or null if no gate.
15
+ *
16
+ * @param phase - The phase that just completed
17
+ * @param workflowName - The workflow type (e.g., 'speckit-feature', 'speckit-bugfix')
18
+ * @param config - Worker configuration containing gate definitions
19
+ */
20
+ checkGate(phase: WorkflowPhase, workflowName: string, config: WorkerConfig): GateDefinition | null;
21
+ }
22
+ //# sourceMappingURL=gate-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-checker.d.ts","sourceRoot":"","sources":["../../src/worker/gate-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;GAKG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;OAOG;IACH,SAAS,CACP,KAAK,EAAE,aAAa,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GACnB,cAAc,GAAG,IAAI;CAqCzB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Checks configuration-driven review gates after each phase completes.
3
+ *
4
+ * Gates allow workflows to pause at specific phases for human review,
5
+ * clarification, or failure handling before proceeding to the next phase.
6
+ */
7
+ export class GateChecker {
8
+ logger;
9
+ constructor(logger) {
10
+ this.logger = logger;
11
+ }
12
+ /**
13
+ * Check if a gate should be activated after the given phase completes.
14
+ * Returns the GateDefinition if a gate is active, or null if no gate.
15
+ *
16
+ * @param phase - The phase that just completed
17
+ * @param workflowName - The workflow type (e.g., 'speckit-feature', 'speckit-bugfix')
18
+ * @param config - Worker configuration containing gate definitions
19
+ */
20
+ checkGate(phase, workflowName, config) {
21
+ const workflowGates = config.gates[workflowName];
22
+ if (!workflowGates || workflowGates.length === 0) {
23
+ this.logger.debug({ phase, workflowName }, 'No gates configured for workflow');
24
+ return null;
25
+ }
26
+ const gate = workflowGates.find((g) => g.phase === phase);
27
+ if (!gate) {
28
+ this.logger.debug({ phase, workflowName }, 'No gate defined for phase');
29
+ return null;
30
+ }
31
+ if (gate.condition === 'always') {
32
+ this.logger.info({ phase, workflowName, gateLabel: gate.gateLabel, condition: gate.condition }, 'Gate activated: condition is always');
33
+ return gate;
34
+ }
35
+ // For 'on-questions' and 'on-failure', return the gate definition
36
+ // and let the caller evaluate whether the condition is actually met.
37
+ this.logger.info({ phase, workflowName, gateLabel: gate.gateLabel, condition: gate.condition }, 'Gate found: caller will evaluate condition');
38
+ return gate;
39
+ }
40
+ }
41
+ //# sourceMappingURL=gate-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-checker.js","sourceRoot":"","sources":["../../src/worker/gate-checker.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;;;;;OAOG;IACH,SAAS,CACP,KAAoB,EACpB,YAAoB,EACpB,MAAoB;QAEpB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAEjD,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,kCAAkC,CACnC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,2BAA2B,CAC5B,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAC7E,qCAAqC,CACtC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kEAAkE;QAClE,qEAAqE;QACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAC7E,4CAA4C,CAC7C,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ export { type WorkflowPhase, type StageType, type GateDefinition, type PhaseResult, type OutputChunk, type CliSpawnOptions, type StageCommentData, type WorkerContext, type ProcessFactory, type ChildProcessHandle, type Logger, PHASE_SEQUENCE, PHASE_TO_COMMAND, PHASE_TO_STAGE, STAGE_MARKERS, } from './types.js';
2
+ export { WorkerConfigSchema, type WorkerConfig } from './config.js';
3
+ export { PhaseResolver } from './phase-resolver.js';
4
+ export { LabelManager } from './label-manager.js';
5
+ export { StageCommentManager } from './stage-comment-manager.js';
6
+ export { GateChecker } from './gate-checker.js';
7
+ export { OutputCapture, type SSEEventEmitter } from './output-capture.js';
8
+ export { CliSpawner } from './cli-spawner.js';
9
+ export { RepoCheckout } from './repo-checkout.js';
10
+ export { PhaseLoop, type PhaseLoopDeps, type PhaseLoopResult } from './phase-loop.js';
11
+ export { ClaudeCliWorker, type ClaudeCliWorkerDeps } from './claude-cli-worker.js';
12
+ export { EpicPostTasks, type EpicPostTasksResult } from './epic-post-tasks.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,19 @@
1
+ // Worker types
2
+ export { PHASE_SEQUENCE, PHASE_TO_COMMAND, PHASE_TO_STAGE, STAGE_MARKERS, } from './types.js';
3
+ // Worker config
4
+ export { WorkerConfigSchema } from './config.js';
5
+ // Core components
6
+ export { PhaseResolver } from './phase-resolver.js';
7
+ export { LabelManager } from './label-manager.js';
8
+ export { StageCommentManager } from './stage-comment-manager.js';
9
+ export { GateChecker } from './gate-checker.js';
10
+ export { OutputCapture } from './output-capture.js';
11
+ // Process management
12
+ export { CliSpawner } from './cli-spawner.js';
13
+ export { RepoCheckout } from './repo-checkout.js';
14
+ // Phase loop and assembly
15
+ export { PhaseLoop } from './phase-loop.js';
16
+ export { ClaudeCliWorker } from './claude-cli-worker.js';
17
+ // Epic workflow handlers
18
+ export { EpicPostTasks } from './epic-post-tasks.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAYL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAEpE,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAE1E,qBAAqB;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,0BAA0B;AAC1B,OAAO,EAAE,SAAS,EAA4C,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,eAAe,EAA4B,MAAM,wBAAwB,CAAC;AAEnF,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAA4B,MAAM,sBAAsB,CAAC"}