baxian 1.2.61 → 2.0.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 (178) hide show
  1. package/README.md +7 -4
  2. package/README.zh-CN.md +7 -4
  3. package/dist/agent/bootstrap-poller.d.ts +1 -1
  4. package/dist/agent/bootstrap-poller.d.ts.map +1 -1
  5. package/dist/agent/bootstrap-poller.js.map +1 -1
  6. package/dist/agent/bootstrap.d.ts +1 -1
  7. package/dist/agent/bootstrap.d.ts.map +1 -1
  8. package/dist/agent/bootstrap.js +6 -2
  9. package/dist/agent/bootstrap.js.map +1 -1
  10. package/dist/agent/branch.d.ts +1 -2
  11. package/dist/agent/branch.d.ts.map +1 -1
  12. package/dist/agent/branch.js +2 -2
  13. package/dist/agent/branch.js.map +1 -1
  14. package/dist/agent/dispatch-reconciler.d.ts +0 -1
  15. package/dist/agent/dispatch-reconciler.d.ts.map +1 -1
  16. package/dist/agent/dispatch-reconciler.js +5 -44
  17. package/dist/agent/dispatch-reconciler.js.map +1 -1
  18. package/dist/agent/manager.d.ts +175 -82
  19. package/dist/agent/manager.d.ts.map +1 -1
  20. package/dist/agent/manager.js +2453 -1447
  21. package/dist/agent/manager.js.map +1 -1
  22. package/dist/agent/phase-signal-watcher.d.ts +5 -1
  23. package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
  24. package/dist/agent/phase-signal-watcher.js +22 -11
  25. package/dist/agent/phase-signal-watcher.js.map +1 -1
  26. package/dist/agent/phase-signal.d.ts +2 -7
  27. package/dist/agent/phase-signal.d.ts.map +1 -1
  28. package/dist/agent/phase-signal.js +4 -4
  29. package/dist/agent/phase-signal.js.map +1 -1
  30. package/dist/agent/preflight.d.ts +4 -1
  31. package/dist/agent/preflight.d.ts.map +1 -1
  32. package/dist/agent/preflight.js +46 -45
  33. package/dist/agent/preflight.js.map +1 -1
  34. package/dist/agent/prompt.d.ts +8 -0
  35. package/dist/agent/prompt.d.ts.map +1 -1
  36. package/dist/agent/prompt.js +30 -13
  37. package/dist/agent/prompt.js.map +1 -1
  38. package/dist/agent/repo-store.d.ts +4 -0
  39. package/dist/agent/repo-store.d.ts.map +1 -1
  40. package/dist/agent/repo-store.js +37 -8
  41. package/dist/agent/repo-store.js.map +1 -1
  42. package/dist/agent/review-transport.d.ts +20 -1
  43. package/dist/agent/review-transport.d.ts.map +1 -1
  44. package/dist/agent/review-transport.js +68 -20
  45. package/dist/agent/review-transport.js.map +1 -1
  46. package/dist/api/config.d.ts.map +1 -1
  47. package/dist/api/config.js +12 -11
  48. package/dist/api/config.js.map +1 -1
  49. package/dist/api/hosts.d.ts.map +1 -1
  50. package/dist/api/hosts.js +3 -2
  51. package/dist/api/hosts.js.map +1 -1
  52. package/dist/api/platform-guard.d.ts +10 -2
  53. package/dist/api/platform-guard.d.ts.map +1 -1
  54. package/dist/api/platform-guard.js +112 -10
  55. package/dist/api/platform-guard.js.map +1 -1
  56. package/dist/api/projects.d.ts.map +1 -1
  57. package/dist/api/projects.js +34 -9
  58. package/dist/api/projects.js.map +1 -1
  59. package/dist/api/tasks.d.ts.map +1 -1
  60. package/dist/api/tasks.js +21 -36
  61. package/dist/api/tasks.js.map +1 -1
  62. package/dist/app.d.ts +4 -4
  63. package/dist/app.d.ts.map +1 -1
  64. package/dist/config/hot-reload.d.ts +11 -2
  65. package/dist/config/hot-reload.d.ts.map +1 -1
  66. package/dist/config/hot-reload.js +43 -8
  67. package/dist/config/hot-reload.js.map +1 -1
  68. package/dist/config/loader.js +1 -1
  69. package/dist/config/loader.js.map +1 -1
  70. package/dist/config/validator.d.ts +3 -1
  71. package/dist/config/validator.d.ts.map +1 -1
  72. package/dist/config/validator.js +53 -31
  73. package/dist/config/validator.js.map +1 -1
  74. package/dist/event/handlers.d.ts.map +1 -1
  75. package/dist/event/handlers.js +616 -1067
  76. package/dist/event/handlers.js.map +1 -1
  77. package/dist/event/server-handlers.d.ts.map +1 -1
  78. package/dist/event/server-handlers.js +667 -440
  79. package/dist/event/server-handlers.js.map +1 -1
  80. package/dist/index.d.ts +4 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +54 -79
  83. package/dist/index.js.map +1 -1
  84. package/dist/platform/command-renderer.d.ts +1 -0
  85. package/dist/platform/command-renderer.d.ts.map +1 -1
  86. package/dist/platform/command-renderer.js +16 -2
  87. package/dist/platform/command-renderer.js.map +1 -1
  88. package/dist/platform/comment-cursor.d.ts +9 -0
  89. package/dist/platform/comment-cursor.d.ts.map +1 -1
  90. package/dist/platform/comment-cursor.js +63 -5
  91. package/dist/platform/comment-cursor.js.map +1 -1
  92. package/dist/platform/driver-host.d.ts.map +1 -1
  93. package/dist/platform/driver-host.js +0 -2
  94. package/dist/platform/driver-host.js.map +1 -1
  95. package/dist/platform/driver-spec.d.ts.map +1 -1
  96. package/dist/platform/driver-spec.js +17 -6
  97. package/dist/platform/driver-spec.js.map +1 -1
  98. package/dist/platform/feedback.d.ts.map +1 -1
  99. package/dist/platform/feedback.js +0 -9
  100. package/dist/platform/feedback.js.map +1 -1
  101. package/dist/platform/git-driver.d.ts +3 -0
  102. package/dist/platform/git-driver.d.ts.map +1 -1
  103. package/dist/platform/git-driver.js +45 -3
  104. package/dist/platform/git-driver.js.map +1 -1
  105. package/dist/platform/platform-poller.d.ts +18 -5
  106. package/dist/platform/platform-poller.d.ts.map +1 -1
  107. package/dist/platform/platform-poller.js +282 -33
  108. package/dist/platform/platform-poller.js.map +1 -1
  109. package/dist/platform/plugins/github/baxian-plugin.json +1 -1
  110. package/dist/platform/plugins/github/driver.json +14 -3
  111. package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +7 -6
  112. package/dist/platform/plugins/github/skills/baxian-cli-gh/agents/openai.yaml +2 -0
  113. package/dist/platform/pr-binding.d.ts.map +1 -1
  114. package/dist/platform/pr-binding.js +0 -2
  115. package/dist/platform/pr-binding.js.map +1 -1
  116. package/dist/platform/pr-conversation-cache.d.ts.map +1 -0
  117. package/dist/platform/pr-conversation-cache.js.map +1 -0
  118. package/dist/platform/row-schema.d.ts.map +1 -1
  119. package/dist/platform/row-schema.js +1 -0
  120. package/dist/platform/row-schema.js.map +1 -1
  121. package/dist/platform/startup.d.ts +29 -1
  122. package/dist/platform/startup.d.ts.map +1 -1
  123. package/dist/platform/startup.js +82 -4
  124. package/dist/platform/startup.js.map +1 -1
  125. package/dist/platform/types.d.ts +2 -0
  126. package/dist/platform/types.d.ts.map +1 -1
  127. package/dist/platform/types.js +6 -4
  128. package/dist/platform/types.js.map +1 -1
  129. package/dist/platform/verdict-engine.d.ts.map +1 -1
  130. package/dist/platform/verdict-engine.js +0 -2
  131. package/dist/platform/verdict-engine.js.map +1 -1
  132. package/dist/shared/types.d.ts +73 -5
  133. package/dist/shared/types.d.ts.map +1 -1
  134. package/dist/shared/types.js.map +1 -1
  135. package/dist/skills/baxian-pr-feedback/SKILL.md +4 -12
  136. package/dist/skills/baxian-pr-recheck/SKILL.md +3 -44
  137. package/dist/skills/baxian-pr-review/SKILL.md +4 -43
  138. package/dist/skills/baxian-server-feedback/SKILL.md +7 -5
  139. package/dist/skills/baxian-signals/SKILL.md +5 -7
  140. package/dist/skills/baxian-task-check/SKILL.md +3 -5
  141. package/dist/state/agent-store.js +0 -2
  142. package/dist/state/agent-store.js.map +1 -1
  143. package/dist/state/review-store.d.ts +21 -1
  144. package/dist/state/review-store.d.ts.map +1 -1
  145. package/dist/state/review-store.js +132 -0
  146. package/dist/state/review-store.js.map +1 -1
  147. package/dist/state/task-store.d.ts +6 -0
  148. package/dist/state/task-store.d.ts.map +1 -1
  149. package/dist/state/task-store.js +259 -18
  150. package/dist/state/task-store.js.map +1 -1
  151. package/dist/web/assets/index-BXfgaFNm.js +18 -0
  152. package/dist/web/index.html +1 -1
  153. package/package.json +1 -1
  154. package/dist/github/mapper.d.ts +0 -9
  155. package/dist/github/mapper.d.ts.map +0 -1
  156. package/dist/github/mapper.js +0 -25
  157. package/dist/github/mapper.js.map +0 -1
  158. package/dist/github/poller.d.ts +0 -73
  159. package/dist/github/poller.d.ts.map +0 -1
  160. package/dist/github/poller.js +0 -556
  161. package/dist/github/poller.js.map +0 -1
  162. package/dist/github/pr-conversation-cache.d.ts.map +0 -1
  163. package/dist/github/pr-conversation-cache.js.map +0 -1
  164. package/dist/github/pr-conversation.d.ts +0 -7
  165. package/dist/github/pr-conversation.d.ts.map +0 -1
  166. package/dist/github/pr-conversation.js +0 -175
  167. package/dist/github/pr-conversation.js.map +0 -1
  168. package/dist/github/resolver.d.ts +0 -8
  169. package/dist/github/resolver.d.ts.map +0 -1
  170. package/dist/github/resolver.js +0 -28
  171. package/dist/github/resolver.js.map +0 -1
  172. package/dist/state/post-approve-store.d.ts +0 -23
  173. package/dist/state/post-approve-store.d.ts.map +0 -1
  174. package/dist/state/post-approve-store.js +0 -82
  175. package/dist/state/post-approve-store.js.map +0 -1
  176. package/dist/web/assets/index-CUJtd0bC.js +0 -16
  177. /package/dist/{github → platform}/pr-conversation-cache.d.ts +0 -0
  178. /package/dist/{github → platform}/pr-conversation-cache.js +0 -0
@@ -1,13 +1,13 @@
1
1
  import { type AgentGitPreflight } from './preflight.js';
2
- import type { AfterDone, BaxianConfig, AgentConfig, AgentBindingFacts, HostConfig, ProjectConfig, ReviewMode, ReviewPhase, SpecDocument, TaskState, TaskStatus } from '../shared/index.js';
2
+ import type { AfterDone, BaxianConfig, AgentConfig, AgentBindingFacts, HostConfig, ProjectConfig, ReviewMode, ReviewDispatchLease, ReviewPhase, ServerSignalKind, ServerSignalRecovery, ServerSignalRecoveryReason, SpecDocument, TaskPhase, TaskState, TaskStatus } from '../shared/index.js';
3
3
  import { GitDriver } from '../platform/git-driver.js';
4
4
  import type { PluginRegistry } from '../platform/plugin-registry.js';
5
5
  import type { NormalizedRow } from '../platform/row-schema.js';
6
6
  import { type PrRejection } from '../platform/pr-binding.js';
7
7
  import { type PendingFeedbackResult } from '../platform/feedback.js';
8
+ import { type PlatformBindingMismatch } from '../platform/startup.js';
8
9
  import type { AgentStore } from '../state/agent-store.js';
9
10
  import type { TaskStore } from '../state/task-store.js';
10
- import { PostApproveStore, type PostApproveCompletion } from '../state/post-approve-store.js';
11
11
  import type { LockManager } from '../state/lock.js';
12
12
  import type { EventBus } from '../event/bus.js';
13
13
  import type { ErrorRecordStore } from '../state/error-record-store.js';
@@ -20,8 +20,8 @@ import type { PaneStreamerManager } from './pane-streamer-manager.js';
20
20
  import { PhaseSignalWatcher, type NeedInputCommitIntent, type NeedInputCommitResult } from './phase-signal-watcher.js';
21
21
  import type { PhaseSignalKind } from './phase-signal.js';
22
22
  import { ReviewTransport } from './review-transport.js';
23
- import type { ReviewStore } from '../state/review-store.js';
24
- import { type PostMergeCleanupContext, type PlatformCliDescriptor } from './prompt.js';
23
+ import { type ReviewStore } from '../state/review-store.js';
24
+ import { type PostMergeCleanupContext, type PlatformCliDescriptor, type ServerFeedbackCorrectionPrompt } from './prompt.js';
25
25
  export interface EnsureSessionResult {
26
26
  ok: true;
27
27
  createdSession: boolean;
@@ -108,7 +108,6 @@ export interface AgentManagerDeps {
108
108
  imageStagingRoot?: string;
109
109
  repoStoreFactory?: (runner: CommandRunner, repoSlug: string, mode: AgentConfig['mode'], host: HostConfig | undefined, cache: RepoStoreCache, agentId: string, workdir?: string) => RepoStore;
110
110
  paneStreamerManager?: PaneStreamerManager;
111
- postApproveStore?: PostApproveStore;
112
111
  pluginRegistry?: PluginRegistry;
113
112
  platformDefaultBranchOf?: (projectId: string) => string | undefined;
114
113
  phaseSignalWatcher?: PhaseSignalWatcher;
@@ -123,13 +122,10 @@ export interface AgentManagerDeps {
123
122
  needInputRetryIntervalMs?: number;
124
123
  dispatchSettleTimeoutMs?: number;
125
124
  }
126
- export declare class PlatformCloseError extends Error {
127
- readonly step: 'close' | 'deleteBranch';
128
- constructor(step: 'close' | 'deleteBranch', cause: unknown);
129
- }
130
125
  export declare class PlatformMergeRecheckError extends Error {
126
+ readonly kind: 'pending-feedback' | 'provenance-invalid';
131
127
  readonly reason: string;
132
- constructor(reason: string);
128
+ constructor(kind: 'pending-feedback' | 'provenance-invalid', reason: string);
133
129
  }
134
130
  export interface TransitionResult {
135
131
  task: TaskState;
@@ -151,6 +147,8 @@ interface SessionDispatchOpts {
151
147
  total: number;
152
148
  };
153
149
  serverPriorFindings?: string;
150
+ serverFindingsDigest?: string;
151
+ serverFeedbackCorrection?: ServerFeedbackCorrectionPrompt;
154
152
  serverPriorResponse?: string;
155
153
  specDocuments?: readonly SpecDocument[];
156
154
  armBeforeInject?: (ctx: DispatchArmContext) => Promise<boolean>;
@@ -158,6 +156,7 @@ interface SessionDispatchOpts {
158
156
  interface StartSessionOpts extends SessionDispatchOpts {
159
157
  preserveBindingOnFailure?: boolean;
160
158
  dispatchPassToken?: string;
159
+ dispatchReviewLease?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken' | 'headSha' | 'passToken' | 'failToken' | 'effectiveRound' | 'qaPhase'>;
161
160
  dispatchPendingBudget?: {
162
161
  since: number;
163
162
  budgetAlerted?: boolean;
@@ -165,6 +164,7 @@ interface StartSessionOpts extends SessionDispatchOpts {
165
164
  }
166
165
  export interface ContinueSessionOpts extends SessionDispatchOpts {
167
166
  postApproveRedispatchCount?: number;
167
+ postApproveEpisode?: PostApproveEpisodeKey;
168
168
  serverAfterDone?: {
169
169
  kind: 'branch' | 'pr';
170
170
  branch: string;
@@ -185,6 +185,12 @@ export interface MergePrOpts {
185
185
  matchHeadSha?: string;
186
186
  humanOverride?: boolean;
187
187
  }
188
+ export interface PostApproveEpisodeKey {
189
+ generation: string;
190
+ token: string;
191
+ headSha: string;
192
+ }
193
+ type ReviewDispatchFence = Pick<ReviewDispatchLease, 'generation' | 'signalToken' | 'headSha' | 'passToken' | 'failToken' | 'effectiveRound' | 'qaPhase'>;
188
194
  export type CodeInterdiffResult = {
189
195
  ok: true;
190
196
  diff: string;
@@ -196,8 +202,12 @@ export type CodeInterdiffResult = {
196
202
  reason: 'released';
197
203
  };
198
204
  export interface ServerReviewDriver {
199
- dispatchCodeReview(task: TaskState): Promise<boolean>;
200
- dispatchSpecReview(task: TaskState): Promise<boolean>;
205
+ dispatchCodeReview(task: TaskState, opts?: {
206
+ bumpRound?: boolean;
207
+ }): Promise<boolean>;
208
+ dispatchSpecReview(task: TaskState, opts?: {
209
+ bumpRound?: boolean;
210
+ }): Promise<boolean>;
201
211
  }
202
212
  export declare function canDispatchWithBinding(binding: AgentBindingFacts | null | undefined): boolean;
203
213
  export declare const RECOVERABLE_QA_DISPATCH_HOLD_PHASES: Set<string>;
@@ -210,6 +220,14 @@ export interface PendingDispatchRetry {
210
220
  since: number;
211
221
  budgetAlerted?: boolean;
212
222
  }
223
+ export interface PostApproveCompletion {
224
+ token: string;
225
+ approvedHeadSha: string;
226
+ generation: string;
227
+ updatedAt: string;
228
+ redispatchCount?: number;
229
+ pendingRedispatch?: boolean;
230
+ }
213
231
  export declare class AgentManager {
214
232
  private config;
215
233
  protected agentStore: AgentStore;
@@ -221,7 +239,6 @@ export declare class AgentManager {
221
239
  protected repoStoreFactory?: AgentManagerDeps['repoStoreFactory'];
222
240
  protected repoCache: RepoStoreCache;
223
241
  protected paneStreamerManager?: PaneStreamerManager;
224
- protected postApproveStore: PostApproveStore;
225
242
  protected pluginRegistry?: PluginRegistry;
226
243
  private platformDefaultBranchOf?;
227
244
  private readonly platformDriverExec;
@@ -235,6 +252,7 @@ export declare class AgentManager {
235
252
  protected dispatchSettleTimeoutMs: number;
236
253
  protected dispatchAckResendIntervalMs: number;
237
254
  private taskMutationQueue;
255
+ private agentOperationQueues;
238
256
  private agentIndex;
239
257
  private platformRunner;
240
258
  private imageStagingRoot;
@@ -247,6 +265,7 @@ export declare class AgentManager {
247
265
  protected manualCompactWaitMs: number;
248
266
  protected runtimeLivenessProbeMs: number;
249
267
  protected cleanComposerWaitMs: number;
268
+ protected platformVerificationRetryDelayMs: number;
250
269
  protected readyStableSamples: number;
251
270
  protected readyStableSpacingMs: number;
252
271
  private pendingDispatchRetryByTask;
@@ -260,8 +279,10 @@ export declare class AgentManager {
260
279
  private divergedAgents;
261
280
  private deletionGeneration;
262
281
  private compactInFlight;
282
+ private configInterventionKeys;
263
283
  constructor(deps: AgentManagerDeps);
264
284
  private withTaskLock;
285
+ private withAgentOperationLease;
265
286
  private resolveTaskLockToken;
266
287
  private assertTaskLockOwner;
267
288
  private assertTaskGeneration;
@@ -270,12 +291,22 @@ export declare class AgentManager {
270
291
  effectiveReviewMode(projectId: string): ReviewMode;
271
292
  resolveAfterDone(task: TaskState): AfterDone;
272
293
  private coerceAfterDone;
294
+ commitServerAfterDone(taskId: string): Promise<AfterDone>;
273
295
  getReviewTransport(): ReviewTransport;
274
296
  private prepareDispatchArtifacts;
275
297
  private bindingWorkdirCache;
276
298
  refreshWorkdirCacheFor(agentId: string): Promise<string | undefined>;
277
299
  private safeEmit;
278
300
  private emitIntervention;
301
+ emitConfigIntervention(projectId: string, data: Record<string, unknown> & {
302
+ phase: string;
303
+ }): Promise<void>;
304
+ configInterventionKey(projectId: string, data: Record<string, unknown> & {
305
+ phase: string;
306
+ }): string;
307
+ platformBindingInterventionKey(task: TaskState, mismatch: PlatformBindingMismatch): string;
308
+ retainConfigInterventionKeys(keys: ReadonlySet<string>): void;
309
+ emitPlatformBindingIntervention(task: TaskState, mismatch: PlatformBindingMismatch): Promise<void>;
279
310
  private recordError;
280
311
  replaceConfig(validated: BaxianConfig): void;
281
312
  getConfig(): BaxianConfig;
@@ -285,6 +316,14 @@ export declare class AgentManager {
285
316
  tryClaimDeletion(agentIds: readonly string[]): string | null;
286
317
  scanActiveThenClaimDeletion(targets: readonly string[]): Promise<DeletionClaimOutcome>;
287
318
  releaseDeletionClaim(agentIds: readonly string[]): void;
319
+ listActiveParticipantSeats(): Promise<Array<{
320
+ taskId: string;
321
+ projectId: string;
322
+ participants: Array<{
323
+ agentId: string;
324
+ expectedRole?: AgentConfig['role'];
325
+ }>;
326
+ }>>;
288
327
  bumpDeletionGeneration(agentId: string): void;
289
328
  deletionGenerationOf(agentId: string): number;
290
329
  private deletionGateOpen;
@@ -342,6 +381,8 @@ export declare class AgentManager {
342
381
  clearAwaitingHuman?: boolean;
343
382
  fromCancelCleanup?: boolean;
344
383
  expectedTask?: Pick<TaskState, 'status' | 'phase' | 'signalToken'>;
384
+ expectedReviewDispatch?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken'>;
385
+ expectedPostApproveEpisode?: PostApproveEpisodeKey;
345
386
  expectedHold?: {
346
387
  phase: string | undefined;
347
388
  since: string | undefined;
@@ -355,6 +396,7 @@ export declare class AgentManager {
355
396
  reconcileTaskBranches(): Promise<void>;
356
397
  private readonly needInputRetry;
357
398
  private readonly needInputRetryInFlight;
399
+ private readonly gitReviewQaConfigAlerted;
358
400
  private readonly needInputWritesInFlight;
359
401
  private needInputWriteSeq;
360
402
  private readonly needInputArmLocks;
@@ -376,6 +418,7 @@ export declare class AgentManager {
376
418
  private confirmNeedInputAnswered;
377
419
  notifyHumanTerminalInput(agentId: string): Promise<void>;
378
420
  clearAwaitingHuman(agentId: string, opts?: {
421
+ expectedTaskId?: string;
379
422
  expectedHold?: {
380
423
  phase?: string;
381
424
  since?: string;
@@ -407,7 +450,11 @@ export declare class AgentManager {
407
450
  private markPaneCancelClearing;
408
451
  private claimCancelCleanup;
409
452
  private releaseCancelCleanup;
410
- failTaskForDispatchError(taskId: string, phase: string, agentId: string, err: DispatchTerminalError): Promise<void>;
453
+ failTaskForDispatchError(taskId: string, phase: string, agentId: string, err: DispatchTerminalError, opts?: {
454
+ expectedPostApproveEpisode?: PostApproveEpisodeKey;
455
+ expectedReviewDispatch?: ReviewDispatchFence;
456
+ expectedLockToken?: string;
457
+ }): Promise<void>;
411
458
  failTasksForAgent(agentId: string, reason: string, opts?: {
412
459
  deferPartnerCleanup?: boolean;
413
460
  }): Promise<{
@@ -423,10 +470,11 @@ export declare class AgentManager {
423
470
  phase: string | undefined;
424
471
  since: string | undefined;
425
472
  nonce: string | undefined;
426
- }): Promise<boolean>;
473
+ }, extraCurrent?: (fresh: TaskState) => Promise<boolean>): Promise<boolean>;
474
+ private runRotatedReplay;
427
475
  redispatchTaskPromptAfterReplRestart(agentId: string, taskId: string): Promise<boolean>;
428
476
  private replayApprovedHolderAfterReplRestart;
429
- private rebuildPostApproveCompletion;
477
+ private holdIncompleteGitPostApproveEpisode;
430
478
  prepareRemoveTargets(agentId: string): {
431
479
  targets: string[];
432
480
  };
@@ -440,26 +488,23 @@ export declare class AgentManager {
440
488
  projectId: string;
441
489
  }>;
442
490
  getProjectConfig(projectId: string): ProjectConfig | undefined;
443
- getProjectByRepo(repo: string): ProjectConfig | undefined;
444
- getProjectByRepoIdentity(repoKey: string): ProjectConfig | undefined;
445
491
  platformDriverFor(projectId: string): GitDriver | undefined;
446
492
  private findAgentGroup;
447
493
  private longestDevWorkdirInProject;
448
494
  getTask(taskId: string): Promise<TaskState | null>;
449
495
  getAgentState(agentId: string): Promise<AgentBindingFacts | null>;
450
496
  getPostApproveCompletion(taskId: string): Promise<PostApproveCompletion | null>;
451
- private gitCompletionOf;
452
- private stripGitCompletionFields;
453
- setPostApproveCompletion(taskId: string, value: {
454
- token: string;
455
- approvedHeadSha: string;
456
- redispatchCount?: number;
457
- pendingRedispatch?: boolean;
458
- }, opts?: {
459
- clearRevocation?: boolean;
497
+ private completionOf;
498
+ private postApproveEpisodeMatches;
499
+ armGitPostApproveEpisode(taskId: string, expected: PostApproveEpisodeKey, opts?: {
500
+ recovered?: boolean;
460
501
  }): Promise<boolean>;
461
- confirmPostApprovePromptDelivered(taskId: string, token: string): Promise<void>;
462
- markPostApproveSignalReceived(taskId: string, token: string): Promise<void>;
502
+ rotateGitPostApproveEpisode(taskId: string, expected: PostApproveEpisodeKey, redispatchCount: number): Promise<PostApproveEpisodeKey | null>;
503
+ private stripPostApproveFields;
504
+ private stripPostApproveEpisodeFields;
505
+ private stripGitStatusScopedState;
506
+ confirmPostApprovePromptDelivered(taskId: string, expected: string | PostApproveEpisodeKey): Promise<void>;
507
+ markPostApproveSignalReceived(taskId: string, expected: string | PostApproveEpisodeKey): Promise<void>;
463
508
  clearPostApproveCompletion(taskId: string): Promise<void>;
464
509
  updatePostApproveCompletionIfToken(taskId: string, expectedToken: string, patch: {
465
510
  redispatchCount?: number;
@@ -469,13 +514,16 @@ export declare class AgentManager {
469
514
  key: string;
470
515
  versionTime: number;
471
516
  };
517
+ expectedGeneration?: string;
518
+ expectedHeadSha?: string;
472
519
  }): Promise<boolean>;
473
520
  revokePostApproveCompletion(taskId: string, reason: 'request-changes' | 'redispatch-cap', opts?: {
474
521
  expectedToken?: string;
475
522
  expectedHeadSha?: string;
523
+ expectedGeneration?: string;
476
524
  }): Promise<boolean>;
477
- clearPostApproveCompletionIfMatches(taskId: string, token: string): Promise<boolean>;
478
- completeApprovedPassToMergeReady(taskId: string, expectedToken: string): Promise<{
525
+ clearPostApproveCompletionIfMatches(taskId: string, expected: string | PostApproveEpisodeKey): Promise<boolean>;
526
+ completeApprovedPassToMergeReady(taskId: string, expected: string | PostApproveEpisodeKey): Promise<{
479
527
  task: TaskState;
480
528
  } | {
481
529
  refused: 'stale' | 'pending';
@@ -500,10 +548,43 @@ export declare class AgentManager {
500
548
  taskIds: string[];
501
549
  }>;
502
550
  }>;
503
- flushGitOutbox(): Promise<void>;
504
- clearReviewDispatchPending(taskId: string, expectedToken: string): Promise<void>;
551
+ flushTaskOutboxes(): Promise<void>;
552
+ private gitReviewLeaseMatches;
553
+ private gitReviewQaConfigUsable;
554
+ beginGitReviewPass(taskId: string, opts: {
555
+ fromStatus: TaskStatus[];
556
+ headSha: string;
557
+ bumpRound: boolean;
558
+ qaPhase?: 'review' | 'recheck';
559
+ expectSignalToken?: string;
560
+ expectPhase?: TaskPhase;
561
+ allowDuringComplete?: boolean;
562
+ patch?: Partial<Pick<TaskState, 'prNumber' | 'prUrl' | 'latestHeadSha' | 'branch' | 'baseBranch' | 'replyActorId' | 'replyActorStatus' | 'pendingPrSignalToken'>>;
563
+ }): Promise<TransitionResult | null>;
564
+ claimGitReviewDispatch(taskId: string, expectedGeneration?: string): Promise<{
565
+ task: TaskState;
566
+ lease: ReviewDispatchLease & {
567
+ phase: 'claimed';
568
+ claimId: string;
569
+ claimedAt: string;
570
+ };
571
+ } | null>;
572
+ approveGitReviewPass(taskId: string, opts: {
573
+ expectedSignalToken: string;
574
+ headSha: string;
575
+ reviewRound: number;
576
+ prNumber?: number;
577
+ prUrl?: string;
578
+ provenance: NonNullable<TaskState['passProvenance']>;
579
+ }): Promise<TaskState | null>;
580
+ private resetGitReviewDispatchClaim;
581
+ private markGitReviewDispatchUncertain;
582
+ private confirmUncertainGitReviewDispatch;
583
+ private completeGitReviewDispatch;
584
+ private recoverPendingGitReviewDispatchHold;
585
+ recoverClaimedGitReviewDispatches(): Promise<void>;
505
586
  retryPendingGitReviewDispatches(): Promise<void>;
506
- retryGitRemoteBranchCleanup(): Promise<void>;
587
+ retryGitRemoteCleanupIntents(): Promise<void>;
507
588
  consumeGitFeedbackRevision(taskId: string, consume: {
508
589
  key: string;
509
590
  versionTime: number;
@@ -515,26 +596,17 @@ export declare class AgentManager {
515
596
  kind: 'returned' | 'pending';
516
597
  task: TaskState;
517
598
  }>;
518
- returnMergeReadyToApproved(taskId: string, consume: {
519
- key: string;
520
- versionTime: number;
521
- }): Promise<TaskState | null>;
522
599
  setupRecoveredPostApproveSignals(): Promise<void>;
523
600
  setupRecoveredSpecSignals(): Promise<void>;
601
+ private recoverServerSignalRecovery;
524
602
  private setupRecoveredWatcherForMapping;
525
- prHasDevReplySince(taskId: string, sinceIso: string): Promise<boolean>;
526
- private ghCreatedAt;
527
- fetchPrHeadSha(taskId: string): Promise<string>;
528
603
  verifyPaneSignalPrNumber(taskId: string, prNumber: number): Promise<{
529
604
  headRefName: string;
530
605
  headSha: string;
531
- } | undefined>;
532
- fetchPrHeadRef(prNumber: number, projectId: string): Promise<{
533
- headRefName: string;
534
- headSha: string;
535
- body: string;
606
+ targetBranch: string;
536
607
  } | undefined>;
537
608
  platformBindingFields(projectId: string): Partial<TaskState>;
609
+ private platformBindingFor;
538
610
  agentGitPreflightContext(projectId: string): AgentGitPreflight | undefined;
539
611
  platformCliContextOf(task: TaskState): PlatformCliDescriptor | undefined;
540
612
  ensureGitBaseSnapshot(task: TaskState, phase: string): Promise<TaskState>;
@@ -543,6 +615,7 @@ export declare class AgentManager {
543
615
  private platformTaskAndDriver;
544
616
  listActiveGitTasks(projectId?: string): Promise<TaskState[]>;
545
617
  platformFetchPrView(taskId: string): Promise<NormalizedRow>;
618
+ platformFetchPrHeadSha(taskId: string): Promise<string>;
546
619
  platformVerifyPrBinding(taskId: string, prNumber: number, opts?: {
547
620
  branchOverride?: string;
548
621
  }): Promise<{
@@ -556,15 +629,19 @@ export declare class AgentManager {
556
629
  prBranch?: string;
557
630
  }>;
558
631
  stopPhaseSignalWatcherAgent(taskId: string, agentId: string): void;
559
- platformClosePr(taskId: string, opts: {
560
- deleteBranch: boolean;
561
- }): Promise<void>;
632
+ private mutateRemoteCleanup;
633
+ private recordRemoteCleanupFailure;
634
+ private markRemoteCleanupManual;
635
+ processGitRemoteCleanup(taskId: string, expectedGeneration?: string): Promise<void>;
562
636
  private platformScanComments;
563
637
  platformVerifyAcceptedPass(taskId: string): Promise<{
564
- ok: true;
638
+ kind: 'valid';
565
639
  pendingCount: number;
566
640
  } | {
567
- ok: false;
641
+ kind: 'retryable';
642
+ reason: string;
643
+ } | {
644
+ kind: 'provenance-invalid';
568
645
  reason: string;
569
646
  }>;
570
647
  platformPendingFeedback(taskId: string): Promise<PendingFeedbackResult>;
@@ -576,17 +653,34 @@ export declare class AgentManager {
576
653
  passToken: string;
577
654
  failToken: string;
578
655
  };
579
- listTasksByProject(projectId: string): Promise<TaskState[]>;
656
+ private taskBelongsToPlatformEntry;
657
+ listTasksForPlatformEntry(projectId: string): Promise<TaskState[]>;
580
658
  findTaskByBranch(branch: string, projectId: string): Promise<TaskState | undefined>;
581
- listTasksByPrNumber(prNumber: number, projectId?: string): Promise<TaskState[]>;
582
- updateTaskStatus(taskId: string, status: TaskStatus): Promise<void>;
583
- updateTaskIfStatus(taskId: string, expectedStatus: TaskStatus, updates: Partial<TaskState>, alsoExpect?: Partial<Pick<TaskState, 'signalToken' | 'reviewRound'>>): Promise<boolean>;
659
+ adoptServerPr(taskId: string, pr: {
660
+ prNumber: number;
661
+ prUrl?: string;
662
+ headSha?: string;
663
+ targetBranch?: string;
664
+ }): Promise<boolean>;
665
+ updateTaskIfStatus(taskId: string, expectedStatus: TaskStatus, updates: Partial<TaskState>, alsoExpect?: Partial<Pick<TaskState, 'signalToken' | 'phase' | 'reviewRound' | 'specReviewRound'>>): Promise<boolean>;
666
+ claimServerSignalRecovery(taskAtEntry: TaskState, agentId: string, signalKind: ServerSignalKind, input: Omit<ServerSignalRecovery, 'signalKind' | 'sourceToken' | 'createdAt'>): Promise<TaskState | null>;
667
+ holdConsumedServerSignal(taskAtEntry: TaskState, agentId: string, signalKind: ServerSignalKind, input: {
668
+ phase: 'spec' | 'code';
669
+ round: number;
670
+ reason: ServerSignalRecoveryReason;
671
+ failurePhase: string;
672
+ }): Promise<TaskState | null>;
673
+ setServerSignalRecoveryMode(taskId: string, successorToken: string, mode: 'correct-response' | 'hold'): Promise<TaskState | null>;
674
+ holdServerSignalRecovery(taskId: string, agentId: string, successorToken: string, holdPhase: string, reason: string): Promise<TaskState | null>;
675
+ dispatchServerFeedbackCorrection(taskId: string, findingsJson: string): Promise<boolean>;
584
676
  updateTask(taskId: string, updates: Partial<TaskState>): Promise<void>;
585
677
  transitionTaskStatus(taskId: string, toStatus: TaskStatus, guard: {
586
678
  fromStatus: TaskStatus[];
587
679
  expectSignalToken?: string;
588
- }, patch?: Partial<Pick<TaskState, 'reviewRound' | 'agentId' | 'prNumber' | 'prUrl' | 'qaAgentId' | 'latestHeadSha' | 'reviewHeadAnchorSha' | 'reviewDispatchedAt' | 'fixDispatchedAt' | 'specReviewRound' | 'signalToken' | 'passToken' | 'failToken' | 'reviewRoundPending' | 'reviewDispatchPending' | 'phase' | 'batchIndex' | 'batchTotal' | 'branch' | 'maxRoundsContinues'>>): Promise<TransitionResult | null>;
589
- consumeReviewRoundIntent(taskId: string, expectedToken: string): Promise<void>;
680
+ expectPhase?: TaskPhase;
681
+ expectPostApproveEpisode?: PostApproveEpisodeKey;
682
+ expectReviewDispatch?: ReviewDispatchFence;
683
+ }, patch?: Partial<Pick<TaskState, 'reviewRound' | 'agentId' | 'prNumber' | 'prUrl' | 'qaAgentId' | 'latestHeadSha' | 'reviewHeadAnchorSha' | 'reviewDispatchedAt' | 'fixDispatchedAt' | 'specReviewRound' | 'signalToken' | 'passToken' | 'failToken' | 'reviewRoundPending' | 'reviewDispatch' | 'phase' | 'batchIndex' | 'batchTotal' | 'branch' | 'maxRoundsContinues'>>): Promise<TransitionResult | null>;
590
684
  private createRunnerFor;
591
685
  private createRepoStore;
592
686
  private ensureWorkdir;
@@ -660,6 +754,8 @@ export declare class AgentManager {
660
754
  allowAwaitingHuman?: boolean;
661
755
  clearAwaitingHuman?: boolean;
662
756
  expectedTask?: Pick<TaskState, 'status' | 'phase' | 'signalToken'>;
757
+ expectedReviewDispatch?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken'>;
758
+ expectedPostApproveEpisode?: PostApproveEpisodeKey;
663
759
  expectedHold?: {
664
760
  phase: string | undefined;
665
761
  since: string | undefined;
@@ -680,22 +776,32 @@ export declare class AgentManager {
680
776
  description: string;
681
777
  preferredAgentId: string;
682
778
  }): Promise<void>;
779
+ private gitReviewClaimMatches;
780
+ private gitReviewDispatchMatches;
781
+ dispatchGitReviewLease(taskId: string, opts?: {
782
+ expectedGeneration?: string;
783
+ pendingBudget?: {
784
+ since: number;
785
+ budgetAlerted?: boolean;
786
+ };
787
+ onQaAcquired?: (lockToken: string) => void;
788
+ }): Promise<TaskState>;
683
789
  dispatchReviewToQa(taskId: string, opts?: {
684
790
  fromStatus?: TaskStatus[];
685
791
  bumpRound?: boolean;
686
792
  expectSignalToken?: string;
793
+ expectPhase?: TaskPhase;
687
794
  qaPhase?: 'review' | 'recheck';
688
795
  pendingBudget?: {
689
796
  since: number;
690
797
  budgetAlerted?: boolean;
691
798
  };
692
- expectReviewDispatchPending?: boolean;
693
799
  onPassArmed?: (armedToken: string) => void;
800
+ onQaAcquired?: (lockToken: string) => void;
801
+ confirmUncertainNotDelivered?: boolean;
694
802
  }): Promise<TaskState>;
695
803
  private runManualServerReview;
696
804
  continueDevRound(taskId: string): Promise<TaskState>;
697
- private rollbackDispatchReviewPhase1;
698
- private tearDownWatcherIfTaskTerminal;
699
805
  private devInitialSignalKinds;
700
806
  private resolveInitialDispatch;
701
807
  private mapTaskStateToExpectedWatchers;
@@ -706,7 +812,6 @@ export declare class AgentManager {
706
812
  replaceScope?: 'task' | 'agent';
707
813
  tokenOverride?: string;
708
814
  }): Promise<boolean>;
709
- private emitManualReviewDevParkedQaFailedIntervention;
710
815
  retryTask(taskId: string): Promise<TaskState>;
711
816
  editTask(taskId: string, patch: {
712
817
  title?: string;
@@ -738,29 +843,13 @@ export declare class AgentManager {
738
843
  rearmGitReconciliationWatcher(taskId: string, opts?: {
739
844
  skipSnapshot?: boolean;
740
845
  }): Promise<void>;
741
- rotateAndSetupPhaseSignal(taskId: string, agentId: string, expectedKinds: PhaseSignalKind | readonly PhaseSignalKind[]): Promise<{
846
+ rotateAndSetupPhaseSignal(taskId: string, agentId: string, expectedKinds: PhaseSignalKind | readonly PhaseSignalKind[], guard?: {
847
+ expectedStatus: TaskStatus;
848
+ expectedToken?: string;
849
+ }): Promise<{
742
850
  token: string;
743
851
  armed: boolean;
744
852
  }>;
745
- rollbackVerdictArmFailure(taskId: string, restore: {
746
- status: TaskStatus;
747
- signalToken?: string;
748
- reviewHeadAnchorSha?: string;
749
- reviewDispatchedAt?: string;
750
- reviewRoundPending?: boolean;
751
- passToken?: string;
752
- failToken?: string;
753
- restorePair?: boolean;
754
- }, opts?: {
755
- expect?: {
756
- status: TaskStatus;
757
- signalToken?: string;
758
- };
759
- rearmSkipSnapshot?: boolean;
760
- }): Promise<boolean>;
761
- rearmPhaseSignalForCurrentPass(taskId: string, opts?: {
762
- skipSnapshot?: boolean;
763
- }): Promise<void>;
764
853
  parkTaskAtSpecReady(taskId: string, opts?: {
765
854
  specReviewRound?: number;
766
855
  }): Promise<TaskState | null>;
@@ -778,6 +867,7 @@ export declare class AgentManager {
778
867
  phase: ReviewPhase;
779
868
  recheck?: boolean;
780
869
  continuation?: boolean;
870
+ bumpRound?: boolean;
781
871
  content: string;
782
872
  interdiff?: string;
783
873
  diffstat?: string;
@@ -790,8 +880,11 @@ export declare class AgentManager {
790
880
  priorFindingsJson?: string;
791
881
  priorResponseJson?: string;
792
882
  reviewHeadAnchorSha?: string;
883
+ callerOwnsConsumedSignalFailure?: boolean;
884
+ }): Promise<TaskState | null>;
885
+ dispatchServerFixToDev(taskId: string, _findingsJson: string, opts?: {
886
+ callerOwnsConsumedSignalFailure?: boolean;
793
887
  }): Promise<TaskState | null>;
794
- dispatchServerFixToDev(taskId: string, findingsJson: string): Promise<TaskState | null>;
795
888
  private projectRepoKey;
796
889
  computeCodeInterdiff(taskId: string, round: number): Promise<CodeInterdiffResult>;
797
890
  findLineageViolation(taskId: string, baseSha?: string): Promise<LineageViolation | null>;