@cat-factory/orchestration 0.193.0 → 0.195.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 (121) hide show
  1. package/dist/container/dependencies.d.ts +17 -1
  2. package/dist/container/dependencies.d.ts.map +1 -1
  3. package/dist/container/module-shapes.d.ts +5 -0
  4. package/dist/container/module-shapes.d.ts.map +1 -1
  5. package/dist/container/platform-modules.d.ts.map +1 -1
  6. package/dist/container/platform-modules.js +14 -1
  7. package/dist/container/platform-modules.js.map +1 -1
  8. package/dist/container.d.ts +20 -2
  9. package/dist/container.d.ts.map +1 -1
  10. package/dist/container.js +14 -0
  11. package/dist/container.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/modules/board/BoardService.d.ts +2 -0
  17. package/dist/modules/board/BoardService.d.ts.map +1 -1
  18. package/dist/modules/board/BoardService.js +4 -0
  19. package/dist/modules/board/BoardService.js.map +1 -1
  20. package/dist/modules/board/publicBoardReads.d.ts +12 -0
  21. package/dist/modules/board/publicBoardReads.d.ts.map +1 -1
  22. package/dist/modules/board/publicBoardReads.js +19 -4
  23. package/dist/modules/board/publicBoardReads.js.map +1 -1
  24. package/dist/modules/debug/RunDebugService.d.ts +27 -1
  25. package/dist/modules/debug/RunDebugService.d.ts.map +1 -1
  26. package/dist/modules/debug/RunDebugService.js +24 -2
  27. package/dist/modules/debug/RunDebugService.js.map +1 -1
  28. package/dist/modules/debug/debug.logic.d.ts +3 -3
  29. package/dist/modules/debug/debug.logic.d.ts.map +1 -1
  30. package/dist/modules/debug/debug.logic.js +4 -1
  31. package/dist/modules/debug/debug.logic.js.map +1 -1
  32. package/dist/modules/execution/AgentDispatchController.d.ts +115 -0
  33. package/dist/modules/execution/AgentDispatchController.d.ts.map +1 -0
  34. package/dist/modules/execution/AgentDispatchController.js +307 -0
  35. package/dist/modules/execution/AgentDispatchController.js.map +1 -0
  36. package/dist/modules/execution/ExecutionService.d.ts +18 -105
  37. package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
  38. package/dist/modules/execution/ExecutionService.js +77 -589
  39. package/dist/modules/execution/ExecutionService.js.map +1 -1
  40. package/dist/modules/execution/ExecutionServiceDependencies.d.ts +6 -0
  41. package/dist/modules/execution/ExecutionServiceDependencies.d.ts.map +1 -1
  42. package/dist/modules/execution/IterationCapController.d.ts +57 -0
  43. package/dist/modules/execution/IterationCapController.d.ts.map +1 -0
  44. package/dist/modules/execution/IterationCapController.js +141 -0
  45. package/dist/modules/execution/IterationCapController.js.map +1 -0
  46. package/dist/modules/execution/MergeResolver.d.ts +14 -2
  47. package/dist/modules/execution/MergeResolver.d.ts.map +1 -1
  48. package/dist/modules/execution/MergeResolver.js +83 -30
  49. package/dist/modules/execution/MergeResolver.js.map +1 -1
  50. package/dist/modules/execution/PrVerificationReportController.d.ts +23 -0
  51. package/dist/modules/execution/PrVerificationReportController.d.ts.map +1 -1
  52. package/dist/modules/execution/PrVerificationReportController.js +18 -0
  53. package/dist/modules/execution/PrVerificationReportController.js.map +1 -1
  54. package/dist/modules/execution/RunDispatcher.d.ts +31 -195
  55. package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
  56. package/dist/modules/execution/RunDispatcher.js +47 -313
  57. package/dist/modules/execution/RunDispatcher.js.map +1 -1
  58. package/dist/modules/execution/RunDispatcherDependencies.d.ts +142 -0
  59. package/dist/modules/execution/RunDispatcherDependencies.d.ts.map +1 -0
  60. package/dist/modules/execution/RunDispatcherDependencies.js +27 -0
  61. package/dist/modules/execution/RunDispatcherDependencies.js.map +1 -0
  62. package/dist/modules/execution/RunLifecycleController.d.ts +154 -0
  63. package/dist/modules/execution/RunLifecycleController.d.ts.map +1 -0
  64. package/dist/modules/execution/RunLifecycleController.js +507 -0
  65. package/dist/modules/execution/RunLifecycleController.js.map +1 -0
  66. package/dist/modules/execution/RunStateMachine.d.ts.map +1 -1
  67. package/dist/modules/execution/RunStateMachine.js +27 -14
  68. package/dist/modules/execution/RunStateMachine.js.map +1 -1
  69. package/dist/modules/execution/StepDecisionController.d.ts +20 -0
  70. package/dist/modules/execution/StepDecisionController.d.ts.map +1 -1
  71. package/dist/modules/execution/StepDecisionController.js +30 -0
  72. package/dist/modules/execution/StepDecisionController.js.map +1 -1
  73. package/dist/modules/execution/policy-types.d.ts +14 -1
  74. package/dist/modules/execution/policy-types.d.ts.map +1 -1
  75. package/dist/modules/execution/prReport.commands.d.ts +54 -0
  76. package/dist/modules/execution/prReport.commands.d.ts.map +1 -0
  77. package/dist/modules/execution/prReport.commands.js +316 -0
  78. package/dist/modules/execution/prReport.commands.js.map +1 -0
  79. package/dist/modules/execution/prReport.environments.d.ts +11 -0
  80. package/dist/modules/execution/prReport.environments.d.ts.map +1 -1
  81. package/dist/modules/execution/prReport.environments.js +9 -1
  82. package/dist/modules/execution/prReport.environments.js.map +1 -1
  83. package/dist/modules/execution/prReport.logic.d.ts.map +1 -1
  84. package/dist/modules/execution/prReport.logic.js +23 -2
  85. package/dist/modules/execution/prReport.logic.js.map +1 -1
  86. package/dist/modules/execution/reproductionProof.logic.js +1 -1
  87. package/dist/modules/execution/reproductionProof.logic.js.map +1 -1
  88. package/dist/modules/execution/retry.logic.d.ts +3 -2
  89. package/dist/modules/execution/retry.logic.d.ts.map +1 -1
  90. package/dist/modules/execution/retry.logic.js +14 -2
  91. package/dist/modules/execution/retry.logic.js.map +1 -1
  92. package/dist/modules/execution/run-action-controllers.d.ts +18 -0
  93. package/dist/modules/execution/run-action-controllers.d.ts.map +1 -0
  94. package/dist/modules/execution/run-action-controllers.js +19 -0
  95. package/dist/modules/execution/run-action-controllers.js.map +1 -0
  96. package/dist/modules/execution/runMode.logic.d.ts +78 -0
  97. package/dist/modules/execution/runMode.logic.d.ts.map +1 -0
  98. package/dist/modules/execution/runMode.logic.js +78 -0
  99. package/dist/modules/execution/runMode.logic.js.map +1 -0
  100. package/dist/modules/execution/runStartOptions.d.ts +16 -1
  101. package/dist/modules/execution/runStartOptions.d.ts.map +1 -1
  102. package/dist/modules/merge/RiskPolicyService.d.ts.map +1 -1
  103. package/dist/modules/merge/RiskPolicyService.js +4 -0
  104. package/dist/modules/merge/RiskPolicyService.js.map +1 -1
  105. package/dist/modules/observability/LlmObservabilityService.d.ts +35 -4
  106. package/dist/modules/observability/LlmObservabilityService.d.ts.map +1 -1
  107. package/dist/modules/observability/LlmObservabilityService.js +43 -7
  108. package/dist/modules/observability/LlmObservabilityService.js.map +1 -1
  109. package/dist/modules/observability/observability.logic.d.ts +12 -2
  110. package/dist/modules/observability/observability.logic.d.ts.map +1 -1
  111. package/dist/modules/observability/observability.logic.js +31 -2
  112. package/dist/modules/observability/observability.logic.js.map +1 -1
  113. package/dist/modules/tutorial/TutorialProgressService.d.ts +51 -0
  114. package/dist/modules/tutorial/TutorialProgressService.d.ts.map +1 -0
  115. package/dist/modules/tutorial/TutorialProgressService.js +111 -0
  116. package/dist/modules/tutorial/TutorialProgressService.js.map +1 -0
  117. package/dist/modules/tutorial/TutorialTelemetryService.d.ts +47 -0
  118. package/dist/modules/tutorial/TutorialTelemetryService.d.ts.map +1 -0
  119. package/dist/modules/tutorial/TutorialTelemetryService.js +67 -0
  120. package/dist/modules/tutorial/TutorialTelemetryService.js.map +1 -0
  121. package/package.json +11 -11
@@ -1,5 +1,6 @@
1
1
  import { parseMergeAssessment } from '@cat-factory/contracts';
2
- import { resolveMergeClassRule } from '@cat-factory/kernel';
2
+ import { resolveRoleScopedMergeClassRule } from '@cat-factory/kernel';
3
+ import { isDryRun } from './runMode.logic.js';
3
4
  /** Format a 0..1 score as a rounded percentage for notification copy. */
4
5
  function pct(score) {
5
6
  return `${Math.round(score * 100)}%`;
@@ -60,7 +61,20 @@ export class MergeResolver {
60
61
  changeClass: 'unknown',
61
62
  fileCount: 0,
62
63
  };
63
- const classRule = resolveMergeClassRule(preset.classRules, classification.changeClass);
64
+ // The class rule, then that rule NARROWED by the tier the run was admitted under. Narrowing is
65
+ // subtractive by construction (see `narrowMergeClassRule`), so this can only ever move the
66
+ // decision toward review — it cannot hand a role something the preset withholds, and a run
67
+ // with no pinned role comes back exactly as it did before role scoping existed.
68
+ const { base: classRule, effective: effectiveRule, narrowedByRole, } = resolveRoleScopedMergeClassRule({
69
+ rules: preset.classRules,
70
+ byRole: preset.classRulesByRole,
71
+ role: instance.initiatedByRole,
72
+ changeClass: classification.changeClass,
73
+ });
74
+ // Whether this run may land ANYTHING. Read off the run rather than re-derived from the preset:
75
+ // the mode was settled and pinned at start, so a preset edited mid-flight cannot un-sandbox a
76
+ // run a human is already reviewing (nor sandbox one that has been merging all along).
77
+ const dryRun = isDryRun(instance.mode);
64
78
  const thresholds = {
65
79
  presetName: preset.name,
66
80
  maxComplexity: preset.maxComplexity,
@@ -68,6 +82,10 @@ export class MergeResolver {
68
82
  maxImpact: preset.maxImpact,
69
83
  autoMergeEnabled: preset.autoMergeEnabled,
70
84
  ...(classRule !== 'thresholds' ? { classRule } : {}),
85
+ ...(instance.initiatedByRole ? { initiatorRole: instance.initiatedByRole } : {}),
86
+ // Recorded only when the role CHANGED the outcome, so its presence always means "this
87
+ // would have gone differently for someone else" rather than "a role was involved".
88
+ ...(narrowedByRole ? { roleRule: effectiveRule } : {}),
71
89
  };
72
90
  const base = {
73
91
  assessment: assessment ?? undefined,
@@ -83,15 +101,21 @@ export class MergeResolver {
83
101
  const credible = assessment !== null && assessment.rationale.trim() !== '';
84
102
  const exceededAxes = assessment ? exceededAxesOf(assessment, preset) : [];
85
103
  // Auto-merge precedence, most-significant first:
86
- // 1. `autoMergeEnabled: false` — the master switch. "Manual review only" stays manual and
104
+ // 1. A DRY RUN merges nothing, whatever else says. It outranks even `autoMergeEnabled`
105
+ // because it is a property of the RUN rather than of the policy: the person who started
106
+ // it was never authorised to land this work, so no preset can consent on their behalf.
107
+ // 2. `autoMergeEnabled: false` — the master switch. "Manual review only" stays manual and
87
108
  // a class rule can NEVER override it.
88
- // 2. The class rule: `always` merges regardless of the scores (and regardless of the
89
- // rationale backstop — an explicit operator policy keyed on a DETERMINISTIC backend
90
- // classification outranks the agent's self-report); `never` always routes to a human.
91
- // 3. The existing credibility + threshold comparison.
92
- const within = preset.autoMergeEnabled &&
93
- (classRule === 'always' || (classRule !== 'never' && credible && exceededAxes.length === 0));
94
- const mergeReason = classRule === 'always' ? 'class_auto_merge' : 'within_thresholds';
109
+ // 3. The class rule AS NARROWED BY THE INITIATOR'S ROLE: `always` merges regardless of the
110
+ // scores (and regardless of the rationale backstop — an explicit operator policy keyed on
111
+ // a DETERMINISTIC backend classification outranks the agent's self-report); `never`
112
+ // always routes to a human. A role entry can only push this arm toward `never`.
113
+ // 4. The existing credibility + threshold comparison.
114
+ const within = !dryRun &&
115
+ preset.autoMergeEnabled &&
116
+ (effectiveRule === 'always' ||
117
+ (effectiveRule !== 'never' && credible && exceededAxes.length === 0));
118
+ const mergeReason = effectiveRule === 'always' ? 'class_auto_merge' : 'within_thresholds';
95
119
  const record = (decision) => this.deps.mergeTrackRecord?.recordDecision(workspaceId, {
96
120
  block,
97
121
  executionId: instance.id,
@@ -121,6 +145,7 @@ export class MergeResolver {
121
145
  await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, {
122
146
  changeClass: classification.changeClass,
123
147
  recordId: pending?.id,
148
+ dryRun,
124
149
  });
125
150
  return { ...base, outcome: 'awaiting_review', reason: 'merge_failed', exceededAxes };
126
151
  }
@@ -129,24 +154,42 @@ export class MergeResolver {
129
154
  await this.raiseReviewAndBlock(workspaceId, instance, block, assessment, {
130
155
  changeClass: classification.changeClass,
131
156
  recordId: pending?.id,
157
+ dryRun,
132
158
  });
133
- // Classify WHY review is needed, most-specific first, so the banner is precise. A
134
- // missing/unparseable assessment (`no_assessment`) is distinct from one that returned
135
- // scores but no rationale (`no_rationale`): the latter DID produce visible scores, so
136
- // the banner must not claim there was no assessment at all. The class rule sits just under
137
- // the master switch, matching the precedence the auto-merge branch above applies.
138
- const reason = !preset.autoMergeEnabled
139
- ? 'auto_merge_disabled'
140
- : classRule === 'never'
141
- ? 'class_requires_review'
142
- : assessment === null
143
- ? 'no_assessment'
144
- : !credible
145
- ? 'no_rationale'
146
- : 'exceeded_thresholds';
159
+ // Classify WHY review is needed, most-specific first, so the banner is precise, in the SAME
160
+ // order the auto-merge branch above applies. A missing/unparseable assessment
161
+ // (`no_assessment`) is distinct from one that returned scores but no rationale
162
+ // (`no_rationale`): the latter DID produce visible scores, so the banner must not claim there
163
+ // was no assessment at all.
164
+ //
165
+ // `dry_run` tops the ladder for the reason it tops the precedence: a sandboxed run's scores
166
+ // were never consulted, so reporting it as `exceeded_thresholds` (or as `auto_merge_disabled`,
167
+ // on a preset that would happily have merged it) sends someone to edit a ceiling that had no
168
+ // part in the outcome. `role_requires_review` is likewise kept apart from
169
+ // `class_requires_review` even though both mean "the rule says never": one is fixed by editing
170
+ // the class rule, the other by a teammate on a higher tier merging the PR as it stands.
171
+ const reason = dryRun
172
+ ? 'dry_run'
173
+ : !preset.autoMergeEnabled
174
+ ? 'auto_merge_disabled'
175
+ : effectiveRule === 'never'
176
+ ? narrowedByRole
177
+ ? 'role_requires_review'
178
+ : 'class_requires_review'
179
+ : assessment === null
180
+ ? 'no_assessment'
181
+ : !credible
182
+ ? 'no_rationale'
183
+ : 'exceeded_thresholds';
147
184
  return { ...base, outcome: 'awaiting_review', reason, exceededAxes };
148
185
  }
149
- /** The track-record context a review card carries so the human can tag in the same tap. */
186
+ /**
187
+ * The track-record context a review card carries so the human can tag in the same tap.
188
+ *
189
+ * Takes only what it PROJECTS. `dryRun` rides the same {@link ReviewCardContext} the callers
190
+ * thread, but it changes the card's WORDING rather than its track-record link, so naming it
191
+ * here would advertise an input this function has no use for.
192
+ */
150
193
  trackContext = (ctx) => ({
151
194
  ...(ctx.changeClass !== 'unknown' ? { changeClass: ctx.changeClass } : {}),
152
195
  ...(ctx.recordId ? { mergeTrackRecordId: ctx.recordId } : {}),
@@ -175,11 +218,21 @@ export class MergeResolver {
175
218
  async raiseMergeReview(workspaceId, instance, block, assessment, track) {
176
219
  if (!this.deps.notificationService)
177
220
  return;
178
- const body = assessment
179
- ? `The merger scored this PR outside the task's auto-merge thresholds ` +
180
- `(complexity ${pct(assessment.complexity)}, risk ${pct(assessment.risk)}, ` +
181
- `impact ${pct(assessment.impact)}). ${assessment.rationale}`
182
- : `The merger could not produce a valid assessment for this PR. Review and merge manually.`;
221
+ // A sandboxed run's card must not describe the scores as the thing holding the PR back: they
222
+ // were never consulted, and a card blaming them sends the reader to edit a ceiling that had
223
+ // no part in the outcome. Report the assessment as the INFORMATION it is on a dry run, and
224
+ // say plainly why nothing merged.
225
+ const scores = assessment
226
+ ? `complexity ${pct(assessment.complexity)}, risk ${pct(assessment.risk)}, ` +
227
+ `impact ${pct(assessment.impact)}`
228
+ : null;
229
+ const body = track.dryRun
230
+ ? `This was a dry run, so its PR was left open for a human regardless of the assessment.` +
231
+ (scores && assessment ? ` The merger scored it ${scores}. ${assessment.rationale}` : '')
232
+ : assessment
233
+ ? `The merger scored this PR outside the task's auto-merge thresholds ` +
234
+ `(${scores}). ${assessment.rationale}`
235
+ : `The merger could not produce a valid assessment for this PR. Review and merge manually.`;
183
236
  await this.deps.notificationService.raise(workspaceId, {
184
237
  type: 'merge_review',
185
238
  blockId: block.id,
@@ -1 +1 @@
1
- {"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MergeResolver.js","sourceRoot":"","sources":["../../../src/modules/execution/MergeResolver.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,17 @@ export interface PrVerificationReportControllerDeps {
56
56
  * (better than emitting a link to nowhere).
57
57
  */
58
58
  appBaseUrl?: string;
59
+ /**
60
+ * Optional: this deployment's own externally-reachable BACKEND base URL (`PUBLIC_URL` on Node,
61
+ * `WORKER_PUBLIC_URL` on the Worker), used to build direct links to the bytes of the artifacts
62
+ * the report lists. Absent ⇒ the rows carry their artifact ids and no link.
63
+ *
64
+ * Deliberately separate from {@link appBaseUrl}: the two are the same origin on a same-origin
65
+ * deployment and different ones the moment the SPA is served from its own host, and a link built
66
+ * from the wrong one is worse than no link. They also answer different questions — the app URL
67
+ * opens a panel a human browses, this one returns bytes to anything holding a credential.
68
+ */
69
+ apiBaseUrl?: string;
59
70
  /**
60
71
  * Optional structured logger for the best-effort failure path. Wire it: publishing is the
61
72
  * one part of the run that is DESIGNED to fail silently, so without a log a revoked token or
@@ -159,6 +170,18 @@ export declare class PrVerificationReportController {
159
170
  * are values that narrow parser knows: adding a third means teaching it the view first, or
160
171
  * the link silently degrades to "the right board, no panel".
161
172
  */
173
+ /**
174
+ * The direct link to ONE stored artifact's bytes, on this deployment's authenticated blob
175
+ * endpoint (`GET /workspaces/:ws/artifacts/:id/blob`), or null when no public backend URL is
176
+ * configured.
177
+ *
178
+ * This is what turns a captured screenshot from an opaque id into something a reviewer can open
179
+ * and a downstream tool can fetch. The endpoint is authenticated, which is the point: the bytes
180
+ * are workspace-scoped, and a report on a public repository must never carry an unguessable-URL
181
+ * bypass of that. A reader without access gets a 401 rather than the image — the honest outcome,
182
+ * and the same one the app deep link beside it produces.
183
+ */
184
+ private artifactUrl;
162
185
  private deepLink;
163
186
  }
164
187
  //# sourceMappingURL=PrVerificationReportController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrVerificationReportController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,KAAK,EACL,iBAAiB,EACjB,MAAM,EAEN,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EAErB,cAAc,EACd,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAuB5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kCAAkC;IACjD,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,KAAK,CAAA;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,6BAA6B,CAAA;IACzC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAA;IACzD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAA;IACnE;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,8BAA8B;IA2B7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IA1BjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAE1D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C,YAA6B,IAAI,EAAE,kCAAkC,EAAI;IAEzE;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnF;IAED,2FAA2F;IAC3F,OAAO,CAAC,QAAQ;IAUhB;;;;OAIG;YACW,iBAAiB;IAO/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;YACW,WAAW;IA8BzB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,YAAY;YAUN,YAAY;IAY1B;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IAiChC;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;CAmBjB"}
1
+ {"version":3,"file":"PrVerificationReportController.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,KAAK,EACL,iBAAiB,EACjB,MAAM,EAEN,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EAErB,cAAc,EACd,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAuB5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,kCAAkC;IACjD,eAAe,EAAE,eAAe,CAAA;IAChC,KAAK,EAAE,KAAK,CAAA;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,6BAA6B,CAAA;IACzC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAA;IACzD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAA;IACnE;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,8BAA8B;IA2B7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IA1BjC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAE1D;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAE9C,YAA6B,IAAI,EAAE,kCAAkC,EAAI;IAEzE;;;OAGG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDnF;IAED,2FAA2F;IAC3F,OAAO,CAAC,QAAQ;IAUhB;;;;OAIG;YACW,iBAAiB;IAO/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;YACW,WAAW;IA8BzB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D,OAAO,CAAC,YAAY;YAUN,YAAY;IAY1B;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IAiChC;;;;;;;;;OASG;IACH;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;CAmBjB"}
@@ -78,6 +78,7 @@ export class PrVerificationReportController {
78
78
  environments: {
79
79
  provisioning: await this.provisioningEvents(workspaceId, instance),
80
80
  evidenceUrl: this.deepLink(workspaceId, instance, 'test-evidence'),
81
+ artifactUrl: (artifactId) => this.artifactUrl(workspaceId, artifactId),
81
82
  },
82
83
  now: this.deps.clock.now(),
83
84
  }));
@@ -257,6 +258,23 @@ export class PrVerificationReportController {
257
258
  * are values that narrow parser knows: adding a third means teaching it the view first, or
258
259
  * the link silently degrades to "the right board, no panel".
259
260
  */
261
+ /**
262
+ * The direct link to ONE stored artifact's bytes, on this deployment's authenticated blob
263
+ * endpoint (`GET /workspaces/:ws/artifacts/:id/blob`), or null when no public backend URL is
264
+ * configured.
265
+ *
266
+ * This is what turns a captured screenshot from an opaque id into something a reviewer can open
267
+ * and a downstream tool can fetch. The endpoint is authenticated, which is the point: the bytes
268
+ * are workspace-scoped, and a report on a public repository must never carry an unguessable-URL
269
+ * bypass of that. A reader without access gets a 401 rather than the image — the honest outcome,
270
+ * and the same one the app deep link beside it produces.
271
+ */
272
+ artifactUrl(workspaceId, artifactId) {
273
+ const base = this.deps.apiBaseUrl?.trim();
274
+ if (!base)
275
+ return null;
276
+ return `${base.replace(/\/$/, '')}/workspaces/${encodeURIComponent(workspaceId)}/artifacts/${encodeURIComponent(artifactId)}/blob`;
277
+ }
260
278
  deepLink(workspaceId, instance, view) {
261
279
  const base = this.deps.appBaseUrl?.trim();
262
280
  if (!base)
@@ -1 +1 @@
1
- {"version":3,"file":"PrVerificationReportController.js","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C;;;;;;;;;;;;GAYG;AACH,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAmEpC,MAAM,OAAO,8BAA8B;IA2BZ,IAAI;IA1BjC;;;;;;;;;;;;;;OAcG;IACc,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE1D;;;;;;OAMG;IACK,MAAM,CAAU,gBAAgB,GAAG,GAAG,CAAA;IAE9C,YAA6B,IAAwC;oBAAxC,IAAI;IAAuC,CAAC;IAEzE;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,QAA2B;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBAAE,OAAM;YACxD,0FAA0F;YAC1F,qFAAqF;YACrF,wFAAwF;YACxF,4DAA4D;YAC5D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC3E,IAAI,CAAC,MAAM;gBAAE,OAAM;YAEnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;YAChF,yFAAyF;YACzF,IAAI,CAAC,KAAK;gBAAE,OAAM;YAElB,MAAM,OAAO,GAAG,0BAA0B,CACxC,2BAA2B,CAAC,QAAQ,EAAE;gBACpC,KAAK;gBACL,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC;gBAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC;gBAC7D,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC9E,YAAY,EAAE;oBACZ,YAAY,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;oBAClE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC;iBACnE;gBACD,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;aAC3B,CAAC,CACH,CAAA;YACD,sFAAsF;YACtF,wEAAwE;YACxE,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAA;YACjF,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,WAAW;gBAAE,OAAM;YAC/D,MAAM,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wFAAwF;YACxF,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,8CAA8C,EAAE;gBACrE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC;gBACzB,WAAW,EAAE,QAAQ,CAAC,EAAE;gBACxB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,WAAW;aACZ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,2FAA2F;IACnF,QAAQ,CAAC,WAAmB,EAAE,WAAmB;QACvD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,8BAA8B,CAAC,gBAAgB,EAAE,CAAC;YACjF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YAC/C,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAK;YACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAA;QAClD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,0BAA0B,CAAA;QAC5E,OAAO,QAAQ,CAAC,2BAA2B,CAAA;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACK,KAAK,CAAC,WAAW,CACvB,WAAmB,EACnB,QAA2B,EAC3B,QAAmC;QAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAA;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAA;QACzB,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAC/D,CAAA;QACD,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAA;QACvC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;YACxD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAA;YACrB,wFAAwF;YACxF,uFAAuF;YACvF,6CAA6C;YAC7C,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;YACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YAC5C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,uFAAuF;YACvF,gFAAgF;YAChF,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,2EAA2E;IAC1D,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEtD,YAAY,CAAC,WAAmB,EAAE,IAAoB;QAC5D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,8BAA8B,CAAC,gBAAgB,EAAE,CAAC;YAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,MAAM,CAAC,IAAI;gBAAE,MAAK;YACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,WAAmB,EAAE,OAAe;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAA;QACrC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAA;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC,CAAA;IACL,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,kBAAkB,CAC9B,WAAmB,EACnB,QAA2B;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAA;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,mBAAmB,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAA;QACtC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC1C,SAAS,EAAE,aAAa;gBACxB,WAAW,EAAE,QAAQ,CAAC,EAAE;gBACxB,KAAK,EAAE,wBAAwB;aAChC,CAAC,CAAA;YACF,0FAA0F;YAC1F,kFAAkF;YAClF,IAAI,MAAM,CAAC,MAAM,IAAI,wBAAwB;gBAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;YAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mFAAmF;YACnF,qFAAqF;YACrF,oFAAoF;YACpF,4EAA4E;YAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,uDAAuD,EAAE;gBAC9E,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC;gBACzB,WAAW,EAAE,QAAQ,CAAC,EAAE;gBACxB,WAAW;aACZ,CAAC,CAAA;YACF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;QACjC,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,QAAQ,CACd,WAAmB,EACnB,QAA2B,EAC3B,IAAuC;QAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAA;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,yFAAyF;QACzF,yEAAyE;QACzE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,EAAE,EAAE,WAAW;YACf,KAAK,EAAE,QAAQ,CAAC,OAAO;YACvB,GAAG,EAAE,QAAQ,CAAC,EAAE;YAChB,IAAI;SACL,CAAC;aACC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC5D,IAAI,CAAC,GAAG,CAAC,CAAA;QACZ,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAA;IAC/C,CAAC;CACF"}
1
+ {"version":3,"file":"PrVerificationReportController.js","sourceRoot":"","sources":["../../../src/modules/execution/PrVerificationReportController.ts"],"names":[],"mappings":"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"}
@@ -1,128 +1,24 @@
1
- import type { AgentExecutor, AgentRunContext, AgentRunResult, Block, BlockRepository, BrainstormSession, ChallengePrReviewFindingInput, ChooseForkInput, ClarityReview, Clock, ExecutionEventPublisher, ExecutionInstance, ExecutionRepository, FollowUpsStepState, ForkChatRequestInput, ForkDecisionStepState, GateDefinition, GateOutcomeRepository, GateRegistry, IdGenerator, IssueWritebackProvider, JudgeAssessor, JudgeDefinition, JudgeRegistry, JudgeStepState, Logger, PipelineStep, PrReviewStepState, ProviderCapabilities, ProviderRegistry, RequirementConcernLevel, RequirementReview, ResolveJudgeInput, ResolvePrReviewInput, ResolveRunRepoContext, RunInitiatorScope, StepGating, StepResolverRegistry, TicketTrackerProvider, WorkRunner } from '@cat-factory/kernel';
2
- import type { AgentKindRegistry } from '@cat-factory/agents';
3
- import type { BugIntakeService, EnvironmentProvisioningService } from '@cat-factory/integrations';
4
- import { AgentContextBuilder, type FragmentBodyResolver } from './AgentContextBuilder.js';
5
- import { CompanionController } from './CompanionController.js';
6
- import { HumanTestController } from './HumanTestController.js';
7
- import { MergeResolver } from './MergeResolver.js';
8
- import { ReviewGateController, type ReviewKind } from './ReviewGateController.js';
9
- import { ForkDecisionController } from './ForkDecisionController.js';
10
- import { PrReviewController } from './PrReviewController.js';
11
- import type { PrVerificationReportController } from './PrVerificationReportController.js';
12
- import type { InterviewGateController } from './InterviewGateController.js';
13
- import { RunStateMachine } from './RunStateMachine.js';
14
- import { StepGraph } from './StepGraph.js';
15
- import { TesterController } from './TesterController.js';
16
- import { RalphController } from './RalphController.js';
17
- import { VisualConfirmationController } from './VisualConfirmationController.js';
1
+ import type { AgentRunContext, AgentRunResult, ChallengePrReviewFindingInput, ChooseForkInput, ExecutionInstance, FollowUpsStepState, ForkChatRequestInput, ForkDecisionStepState, GateDefinition, JudgeDefinition, JudgeStepState, PipelineStep, PrReviewStepState, ResolveJudgeInput, ResolvePrReviewInput } from '@cat-factory/kernel';
18
2
  import { type StepHandlerContext } from './step-handler-registry.js';
19
3
  import type { AdvanceOptions, AdvanceResult } from './advance.js';
20
- import type { NotificationService } from '../notifications/NotificationService.js';
21
- import type { InitiativeService } from '../initiative/InitiativeService.js';
22
- import type { SpendService } from '@cat-factory/spend';
23
- import type { BlueprintReconciler } from './ExecutionService.js';
4
+ import { type RunDispatcherDeps } from './RunDispatcherDependencies.js';
5
+ export type { ResolvedRiskPolicy, RunDispatcherDeps } from './RunDispatcherDependencies.js';
24
6
  /**
25
- * The task's fully-resolved merge-threshold preset (block pin → workspace default →
26
- * built-in). The dispatcher only reads the gate-relevant fields; the full shape is kept so
27
- * a gate's `attemptBudget(preset)` sees every knob. Mirrors {@link ExecutionService.resolveRiskPolicy}.
7
+ * The per-step dispatch + completion spine of the execution engine. It owns the four
8
+ * registries (step handlers, completion interceptors, post-completion / terminal resolvers,
9
+ * polling gates), the completion hub (`recordStepResult` / `handleAgentStep`), the gate
10
+ * machinery (`evaluateGate` / `dispatchGateHelper` / `pollGate` / `resolveGatePollExhaustion`),
11
+ * the deterministic `deployer` / `tracker` steps, the registered pre/post-op cluster, the
12
+ * structured-artifact ingest helpers, and the follow-up companion gate + its human-action API.
13
+ *
14
+ * Extracted out of `ExecutionService` so the handlers depend on a cohesive surface rather than
15
+ * a fat per-callback bag. It composes the existing collaborators ({@link RunStateMachine} /
16
+ * {@link StepGraph} / the five gate controllers / {@link MergeResolver}); the merge/auto-start
17
+ * subgraph deliberately STAYS on the engine, reached only through the injected
18
+ * `resolveRiskPolicy` callback + the {@link MergeResolver} (which itself closes over the
19
+ * engine's `finalizeMerge`). `ExecutionService.stepInstance` / `pollAgentJob` / `pollGate`
20
+ * delegate here; no behaviour changes in the move.
28
21
  */
29
- type ResolvedRiskPolicy = {
30
- maxComplexity: number;
31
- maxRisk: number;
32
- maxImpact: number;
33
- ciMaxAttempts: number;
34
- maxRequirementIterations: number;
35
- maxRequirementConcernAllowed: RequirementConcernLevel;
36
- judgeMinScore: number;
37
- judgeMaxBounces: number;
38
- releaseWatchWindowMinutes: number;
39
- releaseMaxAttempts: number;
40
- humanReviewGraceMinutes: number;
41
- forkDecision?: StepGating | null;
42
- };
43
- /** Collaborators + leaf dependencies the {@link RunDispatcher} needs. */
44
- export interface RunDispatcherDeps {
45
- blockRepository: BlockRepository;
46
- executionRepository: ExecutionRepository;
47
- agentExecutor: AgentExecutor;
48
- /** App-owned agent-kind registry: a registered kind's step spec + pre/post-op hooks. */
49
- agentKindRegistry: AgentKindRegistry;
50
- /** App-owned polling-gate registry (built-ins installed by the facade via `registerBuiltinGates`). */
51
- gateRegistry: GateRegistry;
52
- /**
53
- * The app-owned JUDGE registry (the fourth step-taxonomy bucket) the composition root
54
- * injected, plus the verdict producer. An absent / disabled assessor makes every judge step
55
- * a pass-through, which is exactly what a deployment with no model wired (and the
56
- * conformance/e2e suites) gets. See `docs/initiatives/judge-registry.md`.
57
- */
58
- judgeRegistry: JudgeRegistry;
59
- judgeAssessor?: JudgeAssessor;
60
- /**
61
- * The prompt-fragment library, used by the judge driver for ONE thing: resolving a rubric's
62
- * per-workspace override body (see `JudgeRubric.fragmentId`). Absent ⇒ the registration's
63
- * default rubric.
64
- */
65
- fragmentResolver?: FragmentBodyResolver;
66
- /** App-owned step-completion-resolver registry (deployment-registered resolvers). */
67
- stepResolverRegistry: StepResolverRegistry;
68
- /** App-owned provider registry the gate machine's {@link GateContext} reads (gate data sources). */
69
- providerRegistry: ProviderRegistry;
70
- workRunner: WorkRunner;
71
- events: ExecutionEventPublisher;
72
- idGenerator: IdGenerator;
73
- clock: Clock;
74
- /**
75
- * Where the dispatcher's best-effort hooks (issue writeback, lease release, repo ops) report
76
- * their drops. Absent ⇒ `noopLogger`, which is what the engine unit tests construct with.
77
- */
78
- logger?: Logger;
79
- /**
80
- * Optional settled-gate projection: the gate machine records each terminal verdict into it
81
- * for the operator dashboard's attempt statistics. Absent ⇒ nothing is recorded.
82
- */
83
- gateOutcomeRepository?: GateOutcomeRepository;
84
- spend: SpendService;
85
- stepGraph: StepGraph;
86
- runStateMachine: RunStateMachine;
87
- contextBuilder: AgentContextBuilder;
88
- mergeResolver: MergeResolver;
89
- companionController: CompanionController;
90
- testerController: TesterController;
91
- ralphController: RalphController;
92
- humanTestController: HumanTestController;
93
- visualConfirmationController: VisualConfirmationController;
94
- reviewGate: ReviewGateController;
95
- forkDecisionController: ForkDecisionController;
96
- prReviewController: PrReviewController;
97
- requirementsKind: ReviewKind<RequirementReview>;
98
- clarityKind: ReviewKind<ClarityReview>;
99
- requirementsBrainstormKind: ReviewKind<BrainstormSession>;
100
- architectureBrainstormKind: ReviewKind<BrainstormSession>;
101
- /**
102
- * The interactive-interviewer gates wired for this deployment (initiative-planning, document
103
- * interview, …). Each rides the shared {@link InterviewGateController} spine and is routed by
104
- * the `interview-gate` TRAIT, keyed on its own `agentKind` — so adding a new interviewer wires
105
- * its controller here, with no new dispatch branch. Absent/unwired kinds pass through.
106
- */
107
- interviewControllers?: InterviewGateController<unknown>[];
108
- /** Keeps the run's verification report current on its PR; a no-op with no publisher wired. */
109
- prVerificationReport: PrVerificationReportController;
110
- runInitiatorScope: RunInitiatorScope;
111
- environmentProvisioning?: EnvironmentProvisioningService;
112
- ticketTrackerProvider?: TicketTrackerProvider;
113
- issueWriteback?: IssueWritebackProvider;
114
- /** The recurring `bug-intake` step's read-and-claim helper; absent → the step is a no-op. */
115
- bugIntakeService?: BugIntakeService;
116
- notificationService?: NotificationService;
117
- blueprintReconciler?: BlueprintReconciler;
118
- initiativeService?: InitiativeService;
119
- resolveRunRepoContext?: ResolveRunRepoContext;
120
- resolveProviderCapabilities?: (workspaceId: string, initiatedBy?: string | null, modelPresetId?: string) => Promise<ProviderCapabilities>;
121
- /** Resolve a task's merge preset (stays on the engine, shared with the merge subgraph). */
122
- resolveRiskPolicy: (workspaceId: string, block: Block) => Promise<ResolvedRiskPolicy>;
123
- /** Whether a resolved model id incurs metered monetary cost (the start gate's predicate). */
124
- modelIdIsMetered: (id: string | undefined, caps: ProviderCapabilities) => boolean;
125
- }
126
22
  export declare class RunDispatcher {
127
23
  private readonly blockRepository;
128
24
  private readonly executionRepository;
@@ -158,10 +54,7 @@ export declare class RunDispatcher {
158
54
  private readonly notificationService?;
159
55
  private readonly blueprintReconciler?;
160
56
  private readonly initiativeService?;
161
- private readonly resolveRunRepoContext?;
162
- private readonly resolveProviderCapabilities?;
163
57
  private readonly resolveRiskPolicy;
164
- private readonly modelIdIsMetered;
165
58
  /**
166
59
  * The deterministic `deployer` step family (the multi-frame provision fan-out, the async
167
60
  * deploy-job poll, and the environment projection env-aware steps surface), extracted to
@@ -176,6 +69,13 @@ export declare class RunDispatcher {
176
69
  private readonly pollCompletion;
177
70
  /** The RUNNING half of the poll branch tree — the sibling of {@link pollCompletion}. */
178
71
  private readonly pollRunning;
72
+ /**
73
+ * The DISPATCH side of a step — the other side of the park from the two poll controllers above:
74
+ * context build, registered pre-ops, the async start-and-park / inline call, and the facts only a
75
+ * dispatch can record (resolved model, job attribution, investigation diagnostics). The public
76
+ * methods below are thin pass-throughs the execution service and the step registries re-export.
77
+ */
78
+ private readonly agentDispatch;
179
79
  /** The one-shot engine steps (`tracker` / `bug-intake` / `initiative-committer`). */
180
80
  private readonly oneShot;
181
81
  /**
@@ -222,72 +122,16 @@ export declare class RunDispatcher {
222
122
  * retry); every other error propagates so real failures still fail the run.
223
123
  */
224
124
  private redriveOnContention;
225
- /**
226
- * The generic container/inline-agent step — the lowest-priority StepHandler, claiming
227
- * every step no more-specific handler did (coder, architect, spec-writer, merger,
228
- * task-estimator, the container-backed companions, …). Builds the agent context, runs the
229
- * kind's pre-ops, then either dispatches an async container job and parks (the durable
230
- * driver polls between sleeps) or runs the inline LLM call and records the result. This is
231
- * what the dispatch chain falls through to; all the deterministic / gate / inline-review
232
- * kinds are claimed earlier by their own handlers (see {@link buildStepHandlerRegistry}).
233
- */
125
+ /** @see AgentDispatchController.handleAgentStep */
234
126
  private handleAgentStep;
235
- /**
236
- * Stamp the run's investigation diagnostics from a container dispatch (the `lastDispatch`
237
- * block + the control-plane host). Mutates `instance` in place; the caller upserts. Reflects
238
- * the MOST RECENT dispatch — a run's failure is almost always in its latest step, and keeping
239
- * one block (not a per-step history) keeps the record small. `executionBackend` is left for the
240
- * first poll to fill (the transport reports it). Never carries a token/secret.
241
- */
242
- private recordDispatchDiagnostics;
243
- /**
244
- * Fill in `diagnostics.lastDispatch.executionBackend` from the transport-reported backend on
245
- * the first poll that carries it (native host process vs. sandboxed container — the datum that
246
- * is otherwise indistinguishable after the fact). Idempotent: a no-op once set, or when the
247
- * update carries no backend / the dispatch block is missing. Returns whether it changed
248
- * anything (so the caller can skip a redundant upsert).
249
- */
127
+ /** @see AgentDispatchController.recordBackendDiagnostics */
250
128
  private recordBackendDiagnostics;
251
- /**
252
- * Preview the model a step will run (`provider:model`) ahead of the work, so the
253
- * board can show it during the inline query / container cold-boot rather than only
254
- * once the result or job handle lands. Best-effort: the executor may not implement
255
- * a preview, and a resolution failure (e.g. an unwired container kind that fails at
256
- * dispatch anyway) must never break the run — both yield undefined.
257
- */
129
+ /** @see AgentDispatchController.previewStepModel */
258
130
  previewStepModel(context: AgentRunContext): Promise<string | undefined>;
259
- /**
260
- * Whether the current step incurs NO metered monetary LLM cost, so the spend gate can
261
- * let it proceed even when the budget is exhausted. Two non-metered cases:
262
- * - a flat-rate SUBSCRIPTION (quota) model — Claude Code / Codex on a pooled token;
263
- * resolved through the executor (the authority on "subscriptions always win").
264
- * - a LOCAL-runner model (Ollama / LM Studio / …) — keyless, runs on the user's own
265
- * endpoint, so it costs the deployment nothing; detected off the resolved model id.
266
- * This is what makes a `0` budget mean "no PAID spend" without bricking a workspace that
267
- * deliberately runs only local models or subscriptions (see the spend-budget docs).
268
- *
269
- * Once the executor resolves the step's concrete model id, the metered/non-metered
270
- * decision is delegated to the SAME {@link modelIdIsMetered} predicate the up-front
271
- * {@link assertBudgetAllowsPipeline} gate uses, so the two gates can't classify a model
272
- * differently (a divergence would let a run pass the start gate then immediately pause,
273
- * or vice versa). The executor's `isQuotaBased` is still consulted first as the
274
- * authoritative subscription-routing signal; the shared predicate covers local-runner +
275
- * subscription-by-capability + Cloudflare classification identically to the start gate.
276
- * Falls back to a bare local-id check when no capability resolver is wired.
277
- *
278
- * Best-effort and side-effect-free: an executor without the capability, a missing block,
279
- * or any resolution error all report false (treated as budget-metered, the prior
280
- * behaviour). Only consulted on the over-budget path, so it never touches the happy path.
281
- */
282
- currentStepIsNonMetered(workspaceId: string, instance: ExecutionInstance, step: ExecutionInstance['steps'][number]): Promise<boolean>;
283
- /**
284
- * Resolve the reviewed PR's head sha at review-START, stamped onto `step.prReview` when the
285
- * `pr-reviewer` first dispatches. The `post` resolution later re-reads the PR head and folds
286
- * every finding into the summary when it moved (the frozen line numbers may have drifted). Best
287
- * effort: null on any failure, no PR number, or a client without the `pullRequestHeadSha`
288
- * capability — the drift check then simply doesn't run (posting falls back to per-line filtering).
289
- */
290
- private resolveReviewedHeadSha;
131
+ /** @see AgentDispatchController.currentStepIsNonMetered */
132
+ currentStepIsNonMetered(workspaceId: string, instance: ExecutionInstance, step: PipelineStep): Promise<boolean>;
133
+ /** @see AgentDispatchController.runAgent */
134
+ runAgent(context: AgentRunContext, options?: AdvanceOptions): Promise<AgentRunResult>;
291
135
  /**
292
136
  * Poll the asynchronous job a parked step dispatched. Returns `awaiting_job`
293
137
  * while it runs (the driver keeps polling), records the result and advances on
@@ -475,13 +319,6 @@ export declare class RunDispatcher {
475
319
  answerFollowUp(workspaceId: string, executionId: string, itemId: string, answer: string): Promise<FollowUpsStepState>;
476
320
  /** @see FollowUpGateController.dismissFollowUp */
477
321
  dismissFollowUp(workspaceId: string, executionId: string, itemId: string): Promise<FollowUpsStepState>;
478
- /**
479
- * Invoke the agent for an already-built context. Failures are swallowed into the
480
- * step output so a run never wedges — unless `rethrowAgentErrors` is set (the
481
- * durable path), in which case the error propagates so the driver's per-step
482
- * retry can take over.
483
- */
484
- runAgent(context: AgentRunContext, options?: AdvanceOptions): Promise<AgentRunResult>;
485
322
  /**
486
323
  * Strictly parse a Blueprinter step's tree and reconcile it onto the board. The
487
324
  * blueprint maps the whole repository, so it is reconciled onto the run block's
@@ -499,5 +336,4 @@ export declare class RunDispatcher {
499
336
  */
500
337
  private ingestSpec;
501
338
  }
502
- export {};
503
339
  //# sourceMappingURL=RunDispatcher.d.ts.map