@generacy-ai/orchestrator 0.7.0 → 0.9.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 (145) hide show
  1. package/dist/config/loader.d.ts.map +1 -1
  2. package/dist/config/loader.js +47 -1
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/config/schema.d.ts +459 -0
  5. package/dist/config/schema.d.ts.map +1 -1
  6. package/dist/config/schema.js +13 -1
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/launcher/agent-launcher.d.ts +15 -16
  13. package/dist/launcher/agent-launcher.d.ts.map +1 -1
  14. package/dist/launcher/agent-launcher.js +54 -23
  15. package/dist/launcher/agent-launcher.js.map +1 -1
  16. package/dist/launcher/constants.d.ts +5 -0
  17. package/dist/launcher/constants.d.ts.map +1 -0
  18. package/dist/launcher/constants.js +5 -0
  19. package/dist/launcher/constants.js.map +1 -0
  20. package/dist/launcher/errors.d.ts +15 -0
  21. package/dist/launcher/errors.d.ts.map +1 -0
  22. package/dist/launcher/errors.js +25 -0
  23. package/dist/launcher/errors.js.map +1 -0
  24. package/dist/launcher/generic-subprocess-plugin.d.ts +1 -0
  25. package/dist/launcher/generic-subprocess-plugin.d.ts.map +1 -1
  26. package/dist/launcher/generic-subprocess-plugin.js +2 -0
  27. package/dist/launcher/generic-subprocess-plugin.js.map +1 -1
  28. package/dist/launcher/index.d.ts +2 -1
  29. package/dist/launcher/index.d.ts.map +1 -1
  30. package/dist/launcher/index.js +1 -0
  31. package/dist/launcher/index.js.map +1 -1
  32. package/dist/launcher/types.d.ts +81 -4
  33. package/dist/launcher/types.d.ts.map +1 -1
  34. package/dist/routes/health.d.ts +7 -0
  35. package/dist/routes/health.d.ts.map +1 -1
  36. package/dist/routes/health.js +5 -0
  37. package/dist/routes/health.js.map +1 -1
  38. package/dist/routes/internal-relay-events.d.ts +2 -2
  39. package/dist/routes/internal-relay-events.d.ts.map +1 -1
  40. package/dist/routes/internal-relay-events.js +12 -0
  41. package/dist/routes/internal-relay-events.js.map +1 -1
  42. package/dist/routes/retained-tunnel-event.d.ts +20 -0
  43. package/dist/routes/retained-tunnel-event.d.ts.map +1 -0
  44. package/dist/routes/retained-tunnel-event.js +67 -0
  45. package/dist/routes/retained-tunnel-event.js.map +1 -0
  46. package/dist/server.d.ts.map +1 -1
  47. package/dist/server.js +168 -27
  48. package/dist/server.js.map +1 -1
  49. package/dist/services/adaptive-poll-controller.d.ts +75 -0
  50. package/dist/services/adaptive-poll-controller.d.ts.map +1 -0
  51. package/dist/services/adaptive-poll-controller.js +96 -0
  52. package/dist/services/adaptive-poll-controller.js.map +1 -0
  53. package/dist/services/clarification-answer-monitor-service.d.ts +71 -0
  54. package/dist/services/clarification-answer-monitor-service.d.ts.map +1 -0
  55. package/dist/services/clarification-answer-monitor-service.js +366 -0
  56. package/dist/services/clarification-answer-monitor-service.js.map +1 -0
  57. package/dist/services/failure-fingerprint-tracker.d.ts +28 -0
  58. package/dist/services/failure-fingerprint-tracker.d.ts.map +1 -0
  59. package/dist/services/failure-fingerprint-tracker.js +38 -0
  60. package/dist/services/failure-fingerprint-tracker.js.map +1 -0
  61. package/dist/services/index.d.ts +1 -0
  62. package/dist/services/index.d.ts.map +1 -1
  63. package/dist/services/index.js +3 -0
  64. package/dist/services/index.js.map +1 -1
  65. package/dist/services/label-monitor-service.d.ts +2 -2
  66. package/dist/services/label-monitor-service.d.ts.map +1 -1
  67. package/dist/services/label-monitor-service.js +33 -16
  68. package/dist/services/label-monitor-service.js.map +1 -1
  69. package/dist/services/merge-conflict-monitor-service.d.ts +1 -1
  70. package/dist/services/merge-conflict-monitor-service.d.ts.map +1 -1
  71. package/dist/services/merge-conflict-monitor-service.js +33 -13
  72. package/dist/services/merge-conflict-monitor-service.js.map +1 -1
  73. package/dist/services/post-activation-retry.d.ts +3 -0
  74. package/dist/services/post-activation-retry.d.ts.map +1 -1
  75. package/dist/services/post-activation-retry.js +34 -2
  76. package/dist/services/post-activation-retry.js.map +1 -1
  77. package/dist/services/pr-feedback-monitor-service.d.ts +1 -1
  78. package/dist/services/pr-feedback-monitor-service.d.ts.map +1 -1
  79. package/dist/services/pr-feedback-monitor-service.js +33 -16
  80. package/dist/services/pr-feedback-monitor-service.js.map +1 -1
  81. package/dist/services/relay-bridge.d.ts +1 -0
  82. package/dist/services/relay-bridge.d.ts.map +1 -1
  83. package/dist/services/relay-bridge.js +21 -0
  84. package/dist/services/relay-bridge.js.map +1 -1
  85. package/dist/services/smee-channel-resolver.d.ts +60 -0
  86. package/dist/services/smee-channel-resolver.d.ts.map +1 -0
  87. package/dist/services/smee-channel-resolver.js +177 -0
  88. package/dist/services/smee-channel-resolver.js.map +1 -0
  89. package/dist/services/webhook-setup-service.d.ts +115 -111
  90. package/dist/services/webhook-setup-service.d.ts.map +1 -1
  91. package/dist/services/webhook-setup-service.js +377 -209
  92. package/dist/services/webhook-setup-service.js.map +1 -1
  93. package/dist/types/api.d.ts +3 -0
  94. package/dist/types/api.d.ts.map +1 -1
  95. package/dist/types/api.js +1 -0
  96. package/dist/types/api.js.map +1 -1
  97. package/dist/types/monitor.d.ts +15 -2
  98. package/dist/types/monitor.d.ts.map +1 -1
  99. package/dist/worker/clarification-markers.d.ts +62 -0
  100. package/dist/worker/clarification-markers.d.ts.map +1 -1
  101. package/dist/worker/clarification-markers.js +101 -0
  102. package/dist/worker/clarification-markers.js.map +1 -1
  103. package/dist/worker/clarification-poster.d.ts +102 -6
  104. package/dist/worker/clarification-poster.d.ts.map +1 -1
  105. package/dist/worker/clarification-poster.js +299 -89
  106. package/dist/worker/clarification-poster.js.map +1 -1
  107. package/dist/worker/claude-cli-worker.d.ts +7 -0
  108. package/dist/worker/claude-cli-worker.d.ts.map +1 -1
  109. package/dist/worker/claude-cli-worker.js +7 -3
  110. package/dist/worker/claude-cli-worker.js.map +1 -1
  111. package/dist/worker/cli-spawner.d.ts.map +1 -1
  112. package/dist/worker/cli-spawner.js +2 -0
  113. package/dist/worker/cli-spawner.js.map +1 -1
  114. package/dist/worker/config.d.ts +396 -0
  115. package/dist/worker/config.d.ts.map +1 -1
  116. package/dist/worker/config.js +142 -0
  117. package/dist/worker/config.js.map +1 -1
  118. package/dist/worker/failure-fingerprint.d.ts +41 -0
  119. package/dist/worker/failure-fingerprint.d.ts.map +1 -0
  120. package/dist/worker/failure-fingerprint.js +75 -0
  121. package/dist/worker/failure-fingerprint.js.map +1 -0
  122. package/dist/worker/label-manager.d.ts +42 -0
  123. package/dist/worker/label-manager.d.ts.map +1 -1
  124. package/dist/worker/label-manager.js +108 -4
  125. package/dist/worker/label-manager.js.map +1 -1
  126. package/dist/worker/phase-loop.d.ts +30 -0
  127. package/dist/worker/phase-loop.d.ts.map +1 -1
  128. package/dist/worker/phase-loop.js +158 -27
  129. package/dist/worker/phase-loop.js.map +1 -1
  130. package/dist/worker/pr-feedback-handler.d.ts +13 -0
  131. package/dist/worker/pr-feedback-handler.d.ts.map +1 -1
  132. package/dist/worker/pr-feedback-handler.js +58 -3
  133. package/dist/worker/pr-feedback-handler.js.map +1 -1
  134. package/dist/worker/stage-comment-manager.d.ts +5 -0
  135. package/dist/worker/stage-comment-manager.d.ts.map +1 -1
  136. package/dist/worker/stage-comment-manager.js +8 -1
  137. package/dist/worker/stage-comment-manager.js.map +1 -1
  138. package/dist/worker/terminal-label-op-error.d.ts +1 -1
  139. package/dist/worker/terminal-label-op-error.d.ts.map +1 -1
  140. package/dist/worker/terminal-label-op-error.js.map +1 -1
  141. package/dist/worker/types.d.ts +51 -0
  142. package/dist/worker/types.d.ts.map +1 -1
  143. package/dist/worker/types.js +11 -0
  144. package/dist/worker/types.js.map +1 -1
  145. package/package.json +11 -7
@@ -1,6 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import type { OrchestratorSettings } from '@generacy-ai/config';
3
3
  import type { WorkflowPhase } from './types.js';
4
+ /**
5
+ * Built-in provider fallback used by `resolveAgentForPhase` when no tier of
6
+ * the precedence chain (config, repo `defaults.agent`, or env) supplies a
7
+ * provider name.
8
+ */
9
+ export declare const DEFAULT_PROVIDER = "claude-code";
4
10
  /**
5
11
  * Gate definition schema for pausing workflow at review checkpoints
6
12
  */
@@ -94,6 +100,289 @@ export declare const WorkerConfigSchema: z.ZodObject<{
94
100
  maxImplementRetries: z.ZodDefault<z.ZodNumber>;
95
101
  /** Credential role from .generacy/config.yaml defaults.role — when set, credentials are populated on launch requests */
96
102
  credentialRole: z.ZodOptional<z.ZodString>;
103
+ /**
104
+ * Per-workflow-phase `{ provider, model }` selection. See `AgentsConfigSchema`
105
+ * for the shape. Repo-level overrides from `.generacy/config.yaml` are merged
106
+ * onto this via `applyRepoAgentOverrides`.
107
+ */
108
+ agents: z.ZodOptional<z.ZodObject<{
109
+ default: z.ZodOptional<z.ZodObject<{
110
+ provider: z.ZodOptional<z.ZodString>;
111
+ model: z.ZodOptional<z.ZodString>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ provider?: string | undefined;
114
+ model?: string | undefined;
115
+ }, {
116
+ provider?: string | undefined;
117
+ model?: string | undefined;
118
+ }>>;
119
+ workflows: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
120
+ default: z.ZodOptional<z.ZodObject<{
121
+ provider: z.ZodOptional<z.ZodString>;
122
+ model: z.ZodOptional<z.ZodString>;
123
+ }, "strip", z.ZodTypeAny, {
124
+ provider?: string | undefined;
125
+ model?: string | undefined;
126
+ }, {
127
+ provider?: string | undefined;
128
+ model?: string | undefined;
129
+ }>>;
130
+ phases: z.ZodOptional<z.ZodObject<{
131
+ specify: z.ZodOptional<z.ZodObject<{
132
+ provider: z.ZodOptional<z.ZodString>;
133
+ model: z.ZodOptional<z.ZodString>;
134
+ }, "strip", z.ZodTypeAny, {
135
+ provider?: string | undefined;
136
+ model?: string | undefined;
137
+ }, {
138
+ provider?: string | undefined;
139
+ model?: string | undefined;
140
+ }>>;
141
+ clarify: z.ZodOptional<z.ZodObject<{
142
+ provider: z.ZodOptional<z.ZodString>;
143
+ model: z.ZodOptional<z.ZodString>;
144
+ }, "strip", z.ZodTypeAny, {
145
+ provider?: string | undefined;
146
+ model?: string | undefined;
147
+ }, {
148
+ provider?: string | undefined;
149
+ model?: string | undefined;
150
+ }>>;
151
+ plan: z.ZodOptional<z.ZodObject<{
152
+ provider: z.ZodOptional<z.ZodString>;
153
+ model: z.ZodOptional<z.ZodString>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ provider?: string | undefined;
156
+ model?: string | undefined;
157
+ }, {
158
+ provider?: string | undefined;
159
+ model?: string | undefined;
160
+ }>>;
161
+ tasks: z.ZodOptional<z.ZodObject<{
162
+ provider: z.ZodOptional<z.ZodString>;
163
+ model: z.ZodOptional<z.ZodString>;
164
+ }, "strip", z.ZodTypeAny, {
165
+ provider?: string | undefined;
166
+ model?: string | undefined;
167
+ }, {
168
+ provider?: string | undefined;
169
+ model?: string | undefined;
170
+ }>>;
171
+ implement: z.ZodOptional<z.ZodObject<{
172
+ provider: z.ZodOptional<z.ZodString>;
173
+ model: z.ZodOptional<z.ZodString>;
174
+ }, "strip", z.ZodTypeAny, {
175
+ provider?: string | undefined;
176
+ model?: string | undefined;
177
+ }, {
178
+ provider?: string | undefined;
179
+ model?: string | undefined;
180
+ }>>;
181
+ validate: z.ZodOptional<z.ZodObject<{
182
+ provider: z.ZodOptional<z.ZodString>;
183
+ model: z.ZodOptional<z.ZodString>;
184
+ }, "strip", z.ZodTypeAny, {
185
+ provider?: string | undefined;
186
+ model?: string | undefined;
187
+ }, {
188
+ provider?: string | undefined;
189
+ model?: string | undefined;
190
+ }>>;
191
+ }, "strip", z.ZodTypeAny, {
192
+ specify?: {
193
+ provider?: string | undefined;
194
+ model?: string | undefined;
195
+ } | undefined;
196
+ clarify?: {
197
+ provider?: string | undefined;
198
+ model?: string | undefined;
199
+ } | undefined;
200
+ plan?: {
201
+ provider?: string | undefined;
202
+ model?: string | undefined;
203
+ } | undefined;
204
+ tasks?: {
205
+ provider?: string | undefined;
206
+ model?: string | undefined;
207
+ } | undefined;
208
+ implement?: {
209
+ provider?: string | undefined;
210
+ model?: string | undefined;
211
+ } | undefined;
212
+ validate?: {
213
+ provider?: string | undefined;
214
+ model?: string | undefined;
215
+ } | undefined;
216
+ }, {
217
+ specify?: {
218
+ provider?: string | undefined;
219
+ model?: string | undefined;
220
+ } | undefined;
221
+ clarify?: {
222
+ provider?: string | undefined;
223
+ model?: string | undefined;
224
+ } | undefined;
225
+ plan?: {
226
+ provider?: string | undefined;
227
+ model?: string | undefined;
228
+ } | undefined;
229
+ tasks?: {
230
+ provider?: string | undefined;
231
+ model?: string | undefined;
232
+ } | undefined;
233
+ implement?: {
234
+ provider?: string | undefined;
235
+ model?: string | undefined;
236
+ } | undefined;
237
+ validate?: {
238
+ provider?: string | undefined;
239
+ model?: string | undefined;
240
+ } | undefined;
241
+ }>>;
242
+ }, "strip", z.ZodTypeAny, {
243
+ default?: {
244
+ provider?: string | undefined;
245
+ model?: string | undefined;
246
+ } | undefined;
247
+ phases?: {
248
+ specify?: {
249
+ provider?: string | undefined;
250
+ model?: string | undefined;
251
+ } | undefined;
252
+ clarify?: {
253
+ provider?: string | undefined;
254
+ model?: string | undefined;
255
+ } | undefined;
256
+ plan?: {
257
+ provider?: string | undefined;
258
+ model?: string | undefined;
259
+ } | undefined;
260
+ tasks?: {
261
+ provider?: string | undefined;
262
+ model?: string | undefined;
263
+ } | undefined;
264
+ implement?: {
265
+ provider?: string | undefined;
266
+ model?: string | undefined;
267
+ } | undefined;
268
+ validate?: {
269
+ provider?: string | undefined;
270
+ model?: string | undefined;
271
+ } | undefined;
272
+ } | undefined;
273
+ }, {
274
+ default?: {
275
+ provider?: string | undefined;
276
+ model?: string | undefined;
277
+ } | undefined;
278
+ phases?: {
279
+ specify?: {
280
+ provider?: string | undefined;
281
+ model?: string | undefined;
282
+ } | undefined;
283
+ clarify?: {
284
+ provider?: string | undefined;
285
+ model?: string | undefined;
286
+ } | undefined;
287
+ plan?: {
288
+ provider?: string | undefined;
289
+ model?: string | undefined;
290
+ } | undefined;
291
+ tasks?: {
292
+ provider?: string | undefined;
293
+ model?: string | undefined;
294
+ } | undefined;
295
+ implement?: {
296
+ provider?: string | undefined;
297
+ model?: string | undefined;
298
+ } | undefined;
299
+ validate?: {
300
+ provider?: string | undefined;
301
+ model?: string | undefined;
302
+ } | undefined;
303
+ } | undefined;
304
+ }>>>;
305
+ }, "strip", z.ZodTypeAny, {
306
+ default?: {
307
+ provider?: string | undefined;
308
+ model?: string | undefined;
309
+ } | undefined;
310
+ workflows?: Record<string, {
311
+ default?: {
312
+ provider?: string | undefined;
313
+ model?: string | undefined;
314
+ } | undefined;
315
+ phases?: {
316
+ specify?: {
317
+ provider?: string | undefined;
318
+ model?: string | undefined;
319
+ } | undefined;
320
+ clarify?: {
321
+ provider?: string | undefined;
322
+ model?: string | undefined;
323
+ } | undefined;
324
+ plan?: {
325
+ provider?: string | undefined;
326
+ model?: string | undefined;
327
+ } | undefined;
328
+ tasks?: {
329
+ provider?: string | undefined;
330
+ model?: string | undefined;
331
+ } | undefined;
332
+ implement?: {
333
+ provider?: string | undefined;
334
+ model?: string | undefined;
335
+ } | undefined;
336
+ validate?: {
337
+ provider?: string | undefined;
338
+ model?: string | undefined;
339
+ } | undefined;
340
+ } | undefined;
341
+ }> | undefined;
342
+ }, {
343
+ default?: {
344
+ provider?: string | undefined;
345
+ model?: string | undefined;
346
+ } | undefined;
347
+ workflows?: Record<string, {
348
+ default?: {
349
+ provider?: string | undefined;
350
+ model?: string | undefined;
351
+ } | undefined;
352
+ phases?: {
353
+ specify?: {
354
+ provider?: string | undefined;
355
+ model?: string | undefined;
356
+ } | undefined;
357
+ clarify?: {
358
+ provider?: string | undefined;
359
+ model?: string | undefined;
360
+ } | undefined;
361
+ plan?: {
362
+ provider?: string | undefined;
363
+ model?: string | undefined;
364
+ } | undefined;
365
+ tasks?: {
366
+ provider?: string | undefined;
367
+ model?: string | undefined;
368
+ } | undefined;
369
+ implement?: {
370
+ provider?: string | undefined;
371
+ model?: string | undefined;
372
+ } | undefined;
373
+ validate?: {
374
+ provider?: string | undefined;
375
+ model?: string | undefined;
376
+ } | undefined;
377
+ } | undefined;
378
+ }> | undefined;
379
+ }>>;
380
+ /**
381
+ * Repo-level default provider from `.generacy/config.yaml` `defaults.agent`.
382
+ * Provider-only — `defaults.agent` is a single string, not an `AgentEntry`.
383
+ * Consumed by `resolveAgentForPhase` as the tier below `agents.default`.
384
+ */
385
+ defaultsAgent: z.ZodOptional<z.ZodString>;
97
386
  /** Gate definitions keyed by issue label */
98
387
  gates: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
99
388
  /** Phase that triggers gate check */
@@ -130,8 +419,85 @@ export declare const WorkerConfigSchema: z.ZodObject<{
130
419
  gateLabel: string;
131
420
  condition: "always" | "on-request" | "on-questions" | "on-failure" | "on-sibling-review" | "on-merge-conflict";
132
421
  }[]>;
422
+ agents?: {
423
+ default?: {
424
+ provider?: string | undefined;
425
+ model?: string | undefined;
426
+ } | undefined;
427
+ workflows?: Record<string, {
428
+ default?: {
429
+ provider?: string | undefined;
430
+ model?: string | undefined;
431
+ } | undefined;
432
+ phases?: {
433
+ specify?: {
434
+ provider?: string | undefined;
435
+ model?: string | undefined;
436
+ } | undefined;
437
+ clarify?: {
438
+ provider?: string | undefined;
439
+ model?: string | undefined;
440
+ } | undefined;
441
+ plan?: {
442
+ provider?: string | undefined;
443
+ model?: string | undefined;
444
+ } | undefined;
445
+ tasks?: {
446
+ provider?: string | undefined;
447
+ model?: string | undefined;
448
+ } | undefined;
449
+ implement?: {
450
+ provider?: string | undefined;
451
+ model?: string | undefined;
452
+ } | undefined;
453
+ validate?: {
454
+ provider?: string | undefined;
455
+ model?: string | undefined;
456
+ } | undefined;
457
+ } | undefined;
458
+ }> | undefined;
459
+ } | undefined;
133
460
  credentialRole?: string | undefined;
461
+ defaultsAgent?: string | undefined;
134
462
  }, {
463
+ agents?: {
464
+ default?: {
465
+ provider?: string | undefined;
466
+ model?: string | undefined;
467
+ } | undefined;
468
+ workflows?: Record<string, {
469
+ default?: {
470
+ provider?: string | undefined;
471
+ model?: string | undefined;
472
+ } | undefined;
473
+ phases?: {
474
+ specify?: {
475
+ provider?: string | undefined;
476
+ model?: string | undefined;
477
+ } | undefined;
478
+ clarify?: {
479
+ provider?: string | undefined;
480
+ model?: string | undefined;
481
+ } | undefined;
482
+ plan?: {
483
+ provider?: string | undefined;
484
+ model?: string | undefined;
485
+ } | undefined;
486
+ tasks?: {
487
+ provider?: string | undefined;
488
+ model?: string | undefined;
489
+ } | undefined;
490
+ implement?: {
491
+ provider?: string | undefined;
492
+ model?: string | undefined;
493
+ } | undefined;
494
+ validate?: {
495
+ provider?: string | undefined;
496
+ model?: string | undefined;
497
+ } | undefined;
498
+ } | undefined;
499
+ }> | undefined;
500
+ } | undefined;
135
501
  phaseTimeoutMs?: number | undefined;
136
502
  phaseTimeoutOverrides?: {
137
503
  specify?: number | undefined;
@@ -146,6 +512,7 @@ export declare const WorkerConfigSchema: z.ZodObject<{
146
512
  preValidateCommand?: string | undefined;
147
513
  maxImplementRetries?: number | undefined;
148
514
  credentialRole?: string | undefined;
515
+ defaultsAgent?: string | undefined;
149
516
  gates?: Record<string, {
150
517
  phase: "specify" | "clarify" | "plan" | "tasks" | "implement" | "validate";
151
518
  gateLabel: string;
@@ -173,4 +540,33 @@ export declare function applyRepoValidateOverrides(config: WorkerConfig, setting
173
540
  * if one is configured, otherwise the flat `phaseTimeoutMs` fallback.
174
541
  */
175
542
  export declare function resolvePhaseTimeoutMs(config: WorkerConfig, phase: Exclude<WorkflowPhase, 'validate'>): number;
543
+ /**
544
+ * Sibling of `applyRepoValidateOverrides` — merges the target repo's
545
+ * `orchestrator.agents` block onto the cluster-default `agents` block on
546
+ * `WorkerConfig`. Field-by-field so partial `{ provider }`-only or
547
+ * `{ model }`-only overrides preserve missing sibling fields from the base.
548
+ *
549
+ * Returns the original config unchanged when `settings.agents` is absent so
550
+ * callers can cheaply detect "no override" via reference equality.
551
+ */
552
+ export declare function applyRepoAgentOverrides(config: WorkerConfig, settings: OrchestratorSettings | null | undefined): WorkerConfig;
553
+ /**
554
+ * Resolve `{ provider, model }` for a phase within a workflow. Provider and
555
+ * model resolve INDEPENDENTLY over the same tier list — a phase override may
556
+ * set only `model` while `provider` falls through from a lower tier.
557
+ *
558
+ * Precedence:
559
+ * 1. `config.agents.workflows[workflowName].phases[phase]`
560
+ * 2. `config.agents.workflows[workflowName].default`
561
+ * 3. `config.agents.default` (cluster env folds into this tier via loader)
562
+ * 4. `config.defaultsAgent` (**provider only** — `defaults.agent` is a bare string)
563
+ * 5. Built-in `DEFAULT_PROVIDER = 'claude-code'` (**provider only**)
564
+ *
565
+ * The `model` walk terminates at tier 3 returning `undefined` (no built-in
566
+ * model default). The `provider` walk always returns a value.
567
+ */
568
+ export declare function resolveAgentForPhase(config: WorkerConfig, workflowName: string, phase: WorkflowPhase): {
569
+ provider: string;
570
+ model?: string;
571
+ };
176
572
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B,qCAAqC;;IAErC,uCAAuC;;IAEvC,gCAAgC;;;;;;;;;;EAEhC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;GAQ1B,CAAC;AACf,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,2FAA2F;;IAE3F,sDAAsD;;;;;;;;;;;;;;;;;;;;IAEtD,wCAAwC;;IAExC,gDAAgD;;IAEhD,+CAA+C;;IAE/C,sFAAsF;;IAMtF,4EAA4E;;IAE5E,wHAAwH;;IAExH,4CAA4C;;QA3D5C,qCAAqC;;QAErC,uCAAuC;;QAEvC,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EhC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAChD,YAAY,CAgBd;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,GACxC,MAAM,CAIR"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  import { z } from 'zod';
2
+ import { AgentsConfigSchema } from '@generacy-ai/config';
3
+ /**
4
+ * Built-in provider fallback used by `resolveAgentForPhase` when no tier of
5
+ * the precedence chain (config, repo `defaults.agent`, or env) supplies a
6
+ * provider name.
7
+ */
8
+ export const DEFAULT_PROVIDER = 'claude-code';
2
9
  /**
3
10
  * Gate definition schema for pausing workflow at review checkpoints
4
11
  */
@@ -57,6 +64,18 @@ export const WorkerConfigSchema = z.object({
57
64
  maxImplementRetries: z.number().int().min(0).max(5).default(2),
58
65
  /** Credential role from .generacy/config.yaml defaults.role — when set, credentials are populated on launch requests */
59
66
  credentialRole: z.string().optional(),
67
+ /**
68
+ * Per-workflow-phase `{ provider, model }` selection. See `AgentsConfigSchema`
69
+ * for the shape. Repo-level overrides from `.generacy/config.yaml` are merged
70
+ * onto this via `applyRepoAgentOverrides`.
71
+ */
72
+ agents: AgentsConfigSchema.optional(),
73
+ /**
74
+ * Repo-level default provider from `.generacy/config.yaml` `defaults.agent`.
75
+ * Provider-only — `defaults.agent` is a single string, not an `AgentEntry`.
76
+ * Consumed by `resolveAgentForPhase` as the tier below `agents.default`.
77
+ */
78
+ defaultsAgent: z.string().min(1).optional(),
60
79
  /** Gate definitions keyed by issue label */
61
80
  gates: z.record(z.string(), z.array(GateDefinitionSchema)).default({
62
81
  'speckit-feature': [
@@ -116,4 +135,127 @@ export function resolvePhaseTimeoutMs(config, phase) {
116
135
  // Zod and may omit phaseTimeoutOverrides entirely.
117
136
  return config.phaseTimeoutOverrides?.[phase] ?? config.phaseTimeoutMs;
118
137
  }
138
+ /**
139
+ * Field-by-field merge of two `AgentEntry` objects. Target-repo values overlay
140
+ * cluster-default values; missing fields on the target preserve the cluster
141
+ * default (`{ provider: 'X' }` on target keeps cluster's `model`).
142
+ */
143
+ function mergeAgentEntry(base, override) {
144
+ if (base === undefined)
145
+ return override;
146
+ if (override === undefined)
147
+ return base;
148
+ return {
149
+ ...(base.provider !== undefined || override.provider !== undefined
150
+ ? { provider: override.provider ?? base.provider }
151
+ : {}),
152
+ ...(base.model !== undefined || override.model !== undefined
153
+ ? { model: override.model ?? base.model }
154
+ : {}),
155
+ };
156
+ }
157
+ /**
158
+ * Deep merge two `AgentsConfig` values. Merge semantics:
159
+ * - `agents.default`: field-by-field on `{ provider, model }`.
160
+ * - `agents.workflows.<name>.default`: same field-by-field merge.
161
+ * - `agents.workflows.<name>.phases.<phase>`: same field-by-field merge.
162
+ * - Workflow names present only on the target pass through untouched; workflow
163
+ * names present only on the base survive when the target adds new ones.
164
+ */
165
+ function mergeAgentsConfig(base, override) {
166
+ if (base === undefined)
167
+ return override;
168
+ if (override === undefined)
169
+ return base;
170
+ const merged = {};
171
+ const mergedDefault = mergeAgentEntry(base.default, override.default);
172
+ if (mergedDefault !== undefined)
173
+ merged.default = mergedDefault;
174
+ const baseWorkflows = base.workflows ?? {};
175
+ const overrideWorkflows = override.workflows ?? {};
176
+ const workflowNames = new Set([
177
+ ...Object.keys(baseWorkflows),
178
+ ...Object.keys(overrideWorkflows),
179
+ ]);
180
+ if (workflowNames.size > 0) {
181
+ const workflows = {};
182
+ for (const name of workflowNames) {
183
+ const b = baseWorkflows[name];
184
+ const o = overrideWorkflows[name];
185
+ if (b === undefined && o !== undefined) {
186
+ workflows[name] = o;
187
+ continue;
188
+ }
189
+ if (o === undefined && b !== undefined) {
190
+ workflows[name] = b;
191
+ continue;
192
+ }
193
+ // Both defined — merge default + phases field-by-field
194
+ const mergedWorkflowDefault = mergeAgentEntry(b?.default, o?.default);
195
+ const phaseKeys = ['specify', 'clarify', 'plan', 'tasks', 'implement', 'validate'];
196
+ const mergedPhases = {};
197
+ let anyPhase = false;
198
+ for (const phase of phaseKeys) {
199
+ const bp = b?.phases?.[phase];
200
+ const op = o?.phases?.[phase];
201
+ const mp = mergeAgentEntry(bp, op);
202
+ if (mp !== undefined) {
203
+ mergedPhases[phase] = mp;
204
+ anyPhase = true;
205
+ }
206
+ }
207
+ const entry = {};
208
+ if (mergedWorkflowDefault !== undefined)
209
+ entry.default = mergedWorkflowDefault;
210
+ if (anyPhase)
211
+ entry.phases = mergedPhases;
212
+ workflows[name] = entry;
213
+ }
214
+ merged.workflows = workflows;
215
+ }
216
+ return merged;
217
+ }
218
+ /**
219
+ * Sibling of `applyRepoValidateOverrides` — merges the target repo's
220
+ * `orchestrator.agents` block onto the cluster-default `agents` block on
221
+ * `WorkerConfig`. Field-by-field so partial `{ provider }`-only or
222
+ * `{ model }`-only overrides preserve missing sibling fields from the base.
223
+ *
224
+ * Returns the original config unchanged when `settings.agents` is absent so
225
+ * callers can cheaply detect "no override" via reference equality.
226
+ */
227
+ export function applyRepoAgentOverrides(config, settings) {
228
+ if (settings == null || settings.agents === undefined) {
229
+ return config;
230
+ }
231
+ const merged = mergeAgentsConfig(config.agents, settings.agents);
232
+ return { ...config, agents: merged };
233
+ }
234
+ /**
235
+ * Resolve `{ provider, model }` for a phase within a workflow. Provider and
236
+ * model resolve INDEPENDENTLY over the same tier list — a phase override may
237
+ * set only `model` while `provider` falls through from a lower tier.
238
+ *
239
+ * Precedence:
240
+ * 1. `config.agents.workflows[workflowName].phases[phase]`
241
+ * 2. `config.agents.workflows[workflowName].default`
242
+ * 3. `config.agents.default` (cluster env folds into this tier via loader)
243
+ * 4. `config.defaultsAgent` (**provider only** — `defaults.agent` is a bare string)
244
+ * 5. Built-in `DEFAULT_PROVIDER = 'claude-code'` (**provider only**)
245
+ *
246
+ * The `model` walk terminates at tier 3 returning `undefined` (no built-in
247
+ * model default). The `provider` walk always returns a value.
248
+ */
249
+ export function resolveAgentForPhase(config, workflowName, phase) {
250
+ const workflowEntry = config.agents?.workflows?.[workflowName];
251
+ const tiers = [
252
+ workflowEntry?.phases?.[phase],
253
+ workflowEntry?.default,
254
+ config.agents?.default,
255
+ ];
256
+ const providerFromTiers = tiers.find((t) => t?.provider !== undefined)?.provider;
257
+ const provider = providerFromTiers ?? config.defaultsAgent ?? DEFAULT_PROVIDER;
258
+ const model = tiers.find((t) => t?.model !== undefined)?.model;
259
+ return model !== undefined ? { provider, model } : { provider };
260
+ }
119
261
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/worker/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE9C;;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,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;CACpH,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;CAC3D,CAAC;KACD,OAAO,CAAC,EAAE,CAAC,CAAC;AAGf;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,2FAA2F;IAC3F,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/D,sDAAsD;IACtD,qBAAqB,EAAE,2BAA2B;IAClD,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,sFAAsF;IACtF,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,OAAO,CACN,6IAA6I,CAC9I;IACH,4EAA4E;IAC5E,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,wHAAwH;IACxH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC;;;;OAIG;IACH,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC;;;;OAIG;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3C,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,cAAc,EAAE;YACvF,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,mCAAmC,EAAE,SAAS,EAAE,QAAQ,EAAE;YAC3F,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,4BAA4B,EAAE,SAAS,EAAE,mBAAmB,EAAE;YAC/F,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,6BAA6B,EAAE,SAAS,EAAE,mBAAmB,EAAE;YAChG,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,6BAA6B,EAAE,SAAS,EAAE,mBAAmB,EAAE;SAChG;QACD,gBAAgB,EAAE;YAChB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,2BAA2B,EAAE,SAAS,EAAE,cAAc,EAAE;YACvF,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,mCAAmC,EAAE,SAAS,EAAE,YAAY,EAAE;YAC/F,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,6BAA6B,EAAE,SAAS,EAAE,mBAAmB,EAAE;YAChG,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,6BAA6B,EAAE,SAAS,EAAE,mBAAmB,EAAE;SAChG;QACD,cAAc,EAAE;YACd,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,2BAA2B,EAAE,SAAS,EAAE,cAAc,EAAE;YACvF,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,SAAS,EAAE,QAAQ,EAAE;SAC/E;KACF,CAAC;CACH,CAAC,CAAC;AAIH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAoB,EACpB,QAAiD;IAEjD,IACE,QAAQ,IAAI,IAAI;QAChB,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS,IAAI,QAAQ,CAAC,kBAAkB,KAAK,SAAS,CAAC,EACrF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,kBAAkB,KAAK,SAAS;YAC3C,CAAC,CAAC,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,KAAyC;IAEzC,8EAA8E;IAC9E,mDAAmD;IACnD,OAAO,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,IAAyC,EACzC,QAA6C;IAE7C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAChE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YAC1D,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CACxB,IAA8B,EAC9B,QAAkC;IAElC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,aAAa,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC;IAEhE,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAC3C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC5B,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAClC,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAsH,EAAE,CAAC;QACxI,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,uDAAuD;YACvD,MAAM,qBAAqB,GAAG,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;YAC5F,MAAM,YAAY,GAA4C,EAAE,CAAC;YACjE,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACrB,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACzB,QAAQ,GAAG,IAAI,CAAC;gBAClB,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAmD,EAAE,CAAC;YACjE,IAAI,qBAAqB,KAAK,SAAS;gBAAE,KAAK,CAAC,OAAO,GAAG,qBAAqB,CAAC;YAC/E,IAAI,QAAQ;gBAAE,KAAK,CAAC,MAAM,GAAG,YAAwE,CAAC;YACtG,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,QAAiD;IAEjD,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAoB,EACpB,YAAoB,EACpB,KAAoB;IAEpB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,KAAK,GAA4C;QACrD,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC;QAC9B,aAAa,EAAE,OAAO;QACtB,MAAM,CAAC,MAAM,EAAE,OAAO;KACvB,CAAC;IACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,SAAS,CAAC,EAAE,QAAQ,CAAC;IACjF,MAAM,QAAQ,GAAG,iBAAiB,IAAI,MAAM,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC/E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC;IAC/D,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * #942: Failure fingerprint primitive.
3
+ *
4
+ * `computeFailureFingerprint({ phase, evidence })` returns a stable
5
+ * 16-char lowercase hex sha256 prefix that is byte-identical across worker
6
+ * invocations for the same underlying defect (same phase + classifier +
7
+ * reason text). It is the load-bearing invariant for repeat-failure detection.
8
+ *
9
+ * `parseFailureAlertMarker(commentBody)` reads line 1 of a previously-posted
10
+ * failure-alert comment and returns the fingerprint + occurrence when the v2
11
+ * sibling marker (`<!-- fp:HEX:N -->`) is present, or `null` when it's absent
12
+ * (v1 / pre-#942 comments). Never throws.
13
+ */
14
+ import type { CommandExitEvidence, FailureFingerprint, WorkflowPhase } from './types.js';
15
+ /** Q3→A: escalate on the 2nd same-fingerprint failure. */
16
+ export declare const REPEAT_FAILURE_THRESHOLD = 2;
17
+ /** Q1→B: hex prefix length. 16 chars = 64 bits — sufficient for per-issue scan. */
18
+ export declare const FINGERPRINT_HEX_LENGTH = 16;
19
+ export interface FailureFingerprintInput {
20
+ phase: WorkflowPhase | string;
21
+ evidence: CommandExitEvidence;
22
+ }
23
+ /**
24
+ * Compute the fingerprint per contract §Semantics.
25
+ *
26
+ * `sha256(phase + '\x00' + classifier + '\x00' + reasonText).slice(0, 16)`
27
+ * — hex, lowercase. Null-byte joiner prevents field-boundary collisions.
28
+ */
29
+ export declare function computeFailureFingerprint(input: FailureFingerprintInput): FailureFingerprint;
30
+ export interface ParsedFailureAlertMarker {
31
+ fingerprint: FailureFingerprint;
32
+ occurrence: number;
33
+ }
34
+ /**
35
+ * Parse the v2 marker on line 1 of a failure-alert comment body.
36
+ *
37
+ * Returns `null` for v1 (pre-#942) comments, malformed markers, or bodies
38
+ * where line 1 does not contain the v2 sibling marker. Never throws.
39
+ */
40
+ export declare function parseFailureAlertMarker(commentBody: string): ParsedFailureAlertMarker | null;
41
+ //# sourceMappingURL=failure-fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-fingerprint.d.ts","sourceRoot":"","sources":["../../src/worker/failure-fingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGzF,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAwBzC,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,GAC7B,kBAAkB,CAQpB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,wBAAwB,GAAG,IAAI,CAOjC"}