@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.
- package/LICENSE +191 -0
- package/dist/auth/api-key.d.ts +63 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +102 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/github-oauth.d.ts +29 -0
- package/dist/auth/github-oauth.d.ts.map +1 -0
- package/dist/auth/github-oauth.js +136 -0
- package/dist/auth/github-oauth.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/jwt.d.ts +34 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +74 -0
- package/dist/auth/jwt.js.map +1 -0
- package/dist/auth/middleware.d.ts +43 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +101 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +295 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +733 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +174 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +30 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +173 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +4 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +32 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +92 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +31 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +89 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/routes/agents.d.ts +7 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +78 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/dispatch.d.ts +8 -0
- package/dist/routes/dispatch.d.ts.map +1 -0
- package/dist/routes/dispatch.js +46 -0
- package/dist/routes/dispatch.js.map +1 -0
- package/dist/routes/events.d.ts +14 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/events.js +240 -0
- package/dist/routes/events.js.map +1 -0
- package/dist/routes/health.d.ts +14 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +132 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +36 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +34 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/integrations.d.ts +34 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +81 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/metrics.d.ts +31 -0
- package/dist/routes/metrics.d.ts.map +1 -0
- package/dist/routes/metrics.js +157 -0
- package/dist/routes/metrics.js.map +1 -0
- package/dist/routes/pr-webhooks.d.ts +15 -0
- package/dist/routes/pr-webhooks.d.ts.map +1 -0
- package/dist/routes/pr-webhooks.js +114 -0
- package/dist/routes/pr-webhooks.js.map +1 -0
- package/dist/routes/queue.d.ts +7 -0
- package/dist/routes/queue.d.ts.map +1 -0
- package/dist/routes/queue.js +94 -0
- package/dist/routes/queue.js.map +1 -0
- package/dist/routes/webhooks.d.ts +15 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +117 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/routes/workflows.d.ts +7 -0
- package/dist/routes/workflows.d.ts.map +1 -0
- package/dist/routes/workflows.js +138 -0
- package/dist/routes/workflows.js.map +1 -0
- package/dist/server.d.ts +35 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +264 -0
- package/dist/server.js.map +1 -0
- package/dist/services/agent-registry.d.ts +89 -0
- package/dist/services/agent-registry.d.ts.map +1 -0
- package/dist/services/agent-registry.js +173 -0
- package/dist/services/agent-registry.js.map +1 -0
- package/dist/services/epic-completion-monitor-service.d.ts +69 -0
- package/dist/services/epic-completion-monitor-service.d.ts.map +1 -0
- package/dist/services/epic-completion-monitor-service.js +200 -0
- package/dist/services/epic-completion-monitor-service.js.map +1 -0
- package/dist/services/identity.d.ts +41 -0
- package/dist/services/identity.d.ts.map +1 -0
- package/dist/services/identity.js +91 -0
- package/dist/services/identity.js.map +1 -0
- package/dist/services/index.d.ts +13 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +13 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/label-monitor-service.d.ts +95 -0
- package/dist/services/label-monitor-service.d.ts.map +1 -0
- package/dist/services/label-monitor-service.js +414 -0
- package/dist/services/label-monitor-service.js.map +1 -0
- package/dist/services/label-sync-service.d.ts +76 -0
- package/dist/services/label-sync-service.d.ts.map +1 -0
- package/dist/services/label-sync-service.js +108 -0
- package/dist/services/label-sync-service.js.map +1 -0
- package/dist/services/phase-tracker-service.d.ts +32 -0
- package/dist/services/phase-tracker-service.d.ts.map +1 -0
- package/dist/services/phase-tracker-service.js +82 -0
- package/dist/services/phase-tracker-service.js.map +1 -0
- package/dist/services/pr-feedback-monitor-service.d.ts +86 -0
- package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -0
- package/dist/services/pr-feedback-monitor-service.js +423 -0
- package/dist/services/pr-feedback-monitor-service.js.map +1 -0
- package/dist/services/queue-service.d.ts +62 -0
- package/dist/services/queue-service.d.ts.map +1 -0
- package/dist/services/queue-service.js +147 -0
- package/dist/services/queue-service.js.map +1 -0
- package/dist/services/redis-queue-adapter.d.ts +35 -0
- package/dist/services/redis-queue-adapter.d.ts.map +1 -0
- package/dist/services/redis-queue-adapter.js +218 -0
- package/dist/services/redis-queue-adapter.js.map +1 -0
- package/dist/services/smee-receiver.d.ts +87 -0
- package/dist/services/smee-receiver.d.ts.map +1 -0
- package/dist/services/smee-receiver.js +225 -0
- package/dist/services/smee-receiver.js.map +1 -0
- package/dist/services/webhook-setup-service.d.ts +253 -0
- package/dist/services/webhook-setup-service.d.ts.map +1 -0
- package/dist/services/webhook-setup-service.js +369 -0
- package/dist/services/webhook-setup-service.js.map +1 -0
- package/dist/services/worker-dispatcher.d.ts +57 -0
- package/dist/services/worker-dispatcher.d.ts.map +1 -0
- package/dist/services/worker-dispatcher.js +211 -0
- package/dist/services/worker-dispatcher.js.map +1 -0
- package/dist/services/workflow-service.d.ts +65 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +164 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/sse/events.d.ts +50 -0
- package/dist/sse/events.d.ts.map +1 -0
- package/dist/sse/events.js +152 -0
- package/dist/sse/events.js.map +1 -0
- package/dist/sse/index.d.ts +4 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +7 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/sse/stream.d.ts +109 -0
- package/dist/sse/stream.d.ts.map +1 -0
- package/dist/sse/stream.js +239 -0
- package/dist/sse/stream.js.map +1 -0
- package/dist/sse/subscriptions.d.ts +91 -0
- package/dist/sse/subscriptions.d.ts.map +1 -0
- package/dist/sse/subscriptions.js +299 -0
- package/dist/sse/subscriptions.js.map +1 -0
- package/dist/types/api.d.ts +651 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +169 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/monitor.d.ts +243 -0
- package/dist/types/monitor.d.ts.map +1 -0
- package/dist/types/monitor.js +2 -0
- package/dist/types/monitor.js.map +1 -0
- package/dist/types/problem-details.d.ts +63 -0
- package/dist/types/problem-details.d.ts.map +1 -0
- package/dist/types/problem-details.js +37 -0
- package/dist/types/problem-details.js.map +1 -0
- package/dist/types/sse.d.ts +224 -0
- package/dist/types/sse.d.ts.map +1 -0
- package/dist/types/sse.js +103 -0
- package/dist/types/sse.js.map +1 -0
- package/dist/types/webhook.d.ts +59 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +2 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/utils/correlation.d.ts +30 -0
- package/dist/utils/correlation.d.ts.map +1 -0
- package/dist/utils/correlation.js +34 -0
- package/dist/utils/correlation.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shutdown.d.ts +28 -0
- package/dist/utils/shutdown.d.ts.map +1 -0
- package/dist/utils/shutdown.js +86 -0
- package/dist/utils/shutdown.js.map +1 -0
- package/dist/worker/claude-cli-worker.d.ts +61 -0
- package/dist/worker/claude-cli-worker.d.ts.map +1 -0
- package/dist/worker/claude-cli-worker.js +330 -0
- package/dist/worker/claude-cli-worker.js.map +1 -0
- package/dist/worker/cli-spawner.d.ts +42 -0
- package/dist/worker/cli-spawner.d.ts.map +1 -0
- package/dist/worker/cli-spawner.js +183 -0
- package/dist/worker/cli-spawner.js.map +1 -0
- package/dist/worker/config.d.ts +76 -0
- package/dist/worker/config.d.ts.map +1 -0
- package/dist/worker/config.js +39 -0
- package/dist/worker/config.js.map +1 -0
- package/dist/worker/epic-post-tasks.d.ts +73 -0
- package/dist/worker/epic-post-tasks.d.ts.map +1 -0
- package/dist/worker/epic-post-tasks.js +266 -0
- package/dist/worker/epic-post-tasks.js.map +1 -0
- package/dist/worker/gate-checker.d.ts +22 -0
- package/dist/worker/gate-checker.d.ts.map +1 -0
- package/dist/worker/gate-checker.js +41 -0
- package/dist/worker/gate-checker.js.map +1 -0
- package/dist/worker/index.d.ts +13 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +19 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/label-manager.d.ts +89 -0
- package/dist/worker/label-manager.d.ts.map +1 -0
- package/dist/worker/label-manager.js +200 -0
- package/dist/worker/label-manager.js.map +1 -0
- package/dist/worker/output-capture.d.ts +58 -0
- package/dist/worker/output-capture.d.ts.map +1 -0
- package/dist/worker/output-capture.js +153 -0
- package/dist/worker/output-capture.js.map +1 -0
- package/dist/worker/phase-loop.d.ts +64 -0
- package/dist/worker/phase-loop.d.ts.map +1 -0
- package/dist/worker/phase-loop.js +185 -0
- package/dist/worker/phase-loop.js.map +1 -0
- package/dist/worker/phase-resolver.d.ts +62 -0
- package/dist/worker/phase-resolver.d.ts.map +1 -0
- package/dist/worker/phase-resolver.js +144 -0
- package/dist/worker/phase-resolver.js.map +1 -0
- package/dist/worker/pr-feedback-handler.d.ts +105 -0
- package/dist/worker/pr-feedback-handler.d.ts.map +1 -0
- package/dist/worker/pr-feedback-handler.js +391 -0
- package/dist/worker/pr-feedback-handler.js.map +1 -0
- package/dist/worker/pr-linker.d.ts +69 -0
- package/dist/worker/pr-linker.d.ts.map +1 -0
- package/dist/worker/pr-linker.js +108 -0
- package/dist/worker/pr-linker.js.map +1 -0
- package/dist/worker/pr-manager.d.ts +61 -0
- package/dist/worker/pr-manager.d.ts.map +1 -0
- package/dist/worker/pr-manager.js +140 -0
- package/dist/worker/pr-manager.js.map +1 -0
- package/dist/worker/repo-checkout.d.ts +63 -0
- package/dist/worker/repo-checkout.d.ts.map +1 -0
- package/dist/worker/repo-checkout.js +160 -0
- package/dist/worker/repo-checkout.js.map +1 -0
- package/dist/worker/stage-comment-manager.d.ts +34 -0
- package/dist/worker/stage-comment-manager.d.ts.map +1 -0
- package/dist/worker/stage-comment-manager.js +114 -0
- package/dist/worker/stage-comment-manager.js.map +1 -0
- package/dist/worker/types.d.ts +192 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +53 -0
- package/dist/worker/types.js.map +1 -0
- 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"}
|