baxian 1.2.60 → 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 (212) 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 +11 -50
  17. package/dist/agent/dispatch-reconciler.js.map +1 -1
  18. package/dist/agent/manager.d.ts +208 -85
  19. package/dist/agent/manager.d.ts.map +1 -1
  20. package/dist/agent/manager.js +3027 -1441
  21. package/dist/agent/manager.js.map +1 -1
  22. package/dist/agent/pane-streamer.js +1 -1
  23. package/dist/agent/pane-streamer.js.map +1 -1
  24. package/dist/agent/phase-signal-watcher.d.ts +47 -2
  25. package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
  26. package/dist/agent/phase-signal-watcher.js +318 -49
  27. package/dist/agent/phase-signal-watcher.js.map +1 -1
  28. package/dist/agent/phase-signal.d.ts +11 -7
  29. package/dist/agent/phase-signal.d.ts.map +1 -1
  30. package/dist/agent/phase-signal.js +67 -9
  31. package/dist/agent/phase-signal.js.map +1 -1
  32. package/dist/agent/preflight.d.ts +23 -1
  33. package/dist/agent/preflight.d.ts.map +1 -1
  34. package/dist/agent/preflight.js +223 -24
  35. package/dist/agent/preflight.js.map +1 -1
  36. package/dist/agent/prompt.d.ts +16 -0
  37. package/dist/agent/prompt.d.ts.map +1 -1
  38. package/dist/agent/prompt.js +71 -11
  39. package/dist/agent/prompt.js.map +1 -1
  40. package/dist/agent/repo-store.d.ts +6 -1
  41. package/dist/agent/repo-store.d.ts.map +1 -1
  42. package/dist/agent/repo-store.js +44 -11
  43. package/dist/agent/repo-store.js.map +1 -1
  44. package/dist/agent/review-transport.d.ts +20 -1
  45. package/dist/agent/review-transport.d.ts.map +1 -1
  46. package/dist/agent/review-transport.js +68 -20
  47. package/dist/agent/review-transport.js.map +1 -1
  48. package/dist/api/config.d.ts.map +1 -1
  49. package/dist/api/config.js +20 -11
  50. package/dist/api/config.js.map +1 -1
  51. package/dist/api/hosts.d.ts.map +1 -1
  52. package/dist/api/hosts.js +3 -2
  53. package/dist/api/hosts.js.map +1 -1
  54. package/dist/api/platform-guard.d.ts +10 -2
  55. package/dist/api/platform-guard.d.ts.map +1 -1
  56. package/dist/api/platform-guard.js +112 -10
  57. package/dist/api/platform-guard.js.map +1 -1
  58. package/dist/api/projects.d.ts.map +1 -1
  59. package/dist/api/projects.js +87 -11
  60. package/dist/api/projects.js.map +1 -1
  61. package/dist/api/tasks.d.ts.map +1 -1
  62. package/dist/api/tasks.js +22 -14
  63. package/dist/api/tasks.js.map +1 -1
  64. package/dist/app.d.ts +4 -4
  65. package/dist/app.d.ts.map +1 -1
  66. package/dist/cli.d.ts.map +1 -1
  67. package/dist/cli.js +7 -0
  68. package/dist/cli.js.map +1 -1
  69. package/dist/config/hot-reload.d.ts +11 -2
  70. package/dist/config/hot-reload.d.ts.map +1 -1
  71. package/dist/config/hot-reload.js +43 -8
  72. package/dist/config/hot-reload.js.map +1 -1
  73. package/dist/config/loader.js +1 -1
  74. package/dist/config/loader.js.map +1 -1
  75. package/dist/config/validator.d.ts +3 -1
  76. package/dist/config/validator.d.ts.map +1 -1
  77. package/dist/config/validator.js +57 -28
  78. package/dist/config/validator.js.map +1 -1
  79. package/dist/event/handlers.d.ts.map +1 -1
  80. package/dist/event/handlers.js +616 -1067
  81. package/dist/event/handlers.js.map +1 -1
  82. package/dist/event/log.d.ts.map +1 -1
  83. package/dist/event/log.js +17 -2
  84. package/dist/event/log.js.map +1 -1
  85. package/dist/event/server-handlers.d.ts.map +1 -1
  86. package/dist/event/server-handlers.js +667 -440
  87. package/dist/event/server-handlers.js.map +1 -1
  88. package/dist/index.d.ts +4 -1
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +55 -79
  91. package/dist/index.js.map +1 -1
  92. package/dist/platform/command-renderer.d.ts +1 -0
  93. package/dist/platform/command-renderer.d.ts.map +1 -1
  94. package/dist/platform/command-renderer.js +16 -2
  95. package/dist/platform/command-renderer.js.map +1 -1
  96. package/dist/platform/comment-cursor.d.ts +9 -0
  97. package/dist/platform/comment-cursor.d.ts.map +1 -1
  98. package/dist/platform/comment-cursor.js +63 -5
  99. package/dist/platform/comment-cursor.js.map +1 -1
  100. package/dist/platform/driver-host.d.ts.map +1 -1
  101. package/dist/platform/driver-host.js +0 -2
  102. package/dist/platform/driver-host.js.map +1 -1
  103. package/dist/platform/driver-spec.d.ts.map +1 -1
  104. package/dist/platform/driver-spec.js +50 -6
  105. package/dist/platform/driver-spec.js.map +1 -1
  106. package/dist/platform/feedback.d.ts.map +1 -1
  107. package/dist/platform/feedback.js +0 -9
  108. package/dist/platform/feedback.js.map +1 -1
  109. package/dist/platform/git-driver.d.ts +10 -1
  110. package/dist/platform/git-driver.d.ts.map +1 -1
  111. package/dist/platform/git-driver.js +78 -5
  112. package/dist/platform/git-driver.js.map +1 -1
  113. package/dist/platform/platform-poller.d.ts +26 -5
  114. package/dist/platform/platform-poller.d.ts.map +1 -1
  115. package/dist/platform/platform-poller.js +362 -34
  116. package/dist/platform/platform-poller.js.map +1 -1
  117. package/dist/platform/plugin-registry.d.ts.map +1 -1
  118. package/dist/platform/plugin-registry.js +14 -2
  119. package/dist/platform/plugin-registry.js.map +1 -1
  120. package/dist/platform/plugins/github/baxian-plugin.json +1 -1
  121. package/dist/platform/plugins/github/driver.json +17 -3
  122. package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +21 -11
  123. package/dist/platform/plugins/github/skills/baxian-cli-gh/agents/openai.yaml +2 -0
  124. package/dist/platform/pr-binding.d.ts.map +1 -1
  125. package/dist/platform/pr-binding.js +0 -2
  126. package/dist/platform/pr-binding.js.map +1 -1
  127. package/dist/{github → platform}/pr-conversation-cache.d.ts +11 -4
  128. package/dist/platform/pr-conversation-cache.d.ts.map +1 -0
  129. package/dist/platform/pr-conversation-cache.js +199 -0
  130. package/dist/platform/pr-conversation-cache.js.map +1 -0
  131. package/dist/platform/preflight-exec.d.ts +21 -0
  132. package/dist/platform/preflight-exec.d.ts.map +1 -0
  133. package/dist/platform/preflight-exec.js +62 -0
  134. package/dist/platform/preflight-exec.js.map +1 -0
  135. package/dist/platform/review-timeline.d.ts +16 -0
  136. package/dist/platform/review-timeline.d.ts.map +1 -0
  137. package/dist/platform/review-timeline.js +195 -0
  138. package/dist/platform/review-timeline.js.map +1 -0
  139. package/dist/platform/row-schema.d.ts.map +1 -1
  140. package/dist/platform/row-schema.js +1 -0
  141. package/dist/platform/row-schema.js.map +1 -1
  142. package/dist/platform/startup.d.ts +34 -2
  143. package/dist/platform/startup.d.ts.map +1 -1
  144. package/dist/platform/startup.js +107 -4
  145. package/dist/platform/startup.js.map +1 -1
  146. package/dist/platform/types.d.ts +4 -0
  147. package/dist/platform/types.d.ts.map +1 -1
  148. package/dist/platform/types.js +6 -4
  149. package/dist/platform/types.js.map +1 -1
  150. package/dist/platform/verdict-engine.d.ts.map +1 -1
  151. package/dist/platform/verdict-engine.js +0 -2
  152. package/dist/platform/verdict-engine.js.map +1 -1
  153. package/dist/shared/git-url.d.ts +1 -0
  154. package/dist/shared/git-url.d.ts.map +1 -1
  155. package/dist/shared/git-url.js +3 -0
  156. package/dist/shared/git-url.js.map +1 -1
  157. package/dist/shared/types.d.ts +90 -9
  158. package/dist/shared/types.d.ts.map +1 -1
  159. package/dist/shared/types.js.map +1 -1
  160. package/dist/skill/registry.d.ts +9 -2
  161. package/dist/skill/registry.d.ts.map +1 -1
  162. package/dist/skill/registry.js +88 -54
  163. package/dist/skill/registry.js.map +1 -1
  164. package/dist/skills/baxian-pr-feedback/SKILL.md +5 -11
  165. package/dist/skills/baxian-pr-recheck/SKILL.md +4 -43
  166. package/dist/skills/baxian-pr-review/SKILL.md +5 -42
  167. package/dist/skills/baxian-research/SKILL.md +1 -1
  168. package/dist/skills/baxian-server-feedback/SKILL.md +7 -5
  169. package/dist/skills/baxian-signals/SKILL.md +21 -8
  170. package/dist/skills/baxian-task-check/SKILL.md +5 -5
  171. package/dist/state/agent-store.d.ts.map +1 -1
  172. package/dist/state/agent-store.js +25 -2
  173. package/dist/state/agent-store.js.map +1 -1
  174. package/dist/state/review-store.d.ts +21 -1
  175. package/dist/state/review-store.d.ts.map +1 -1
  176. package/dist/state/review-store.js +132 -0
  177. package/dist/state/review-store.js.map +1 -1
  178. package/dist/state/task-store.d.ts +6 -0
  179. package/dist/state/task-store.d.ts.map +1 -1
  180. package/dist/state/task-store.js +262 -21
  181. package/dist/state/task-store.js.map +1 -1
  182. package/dist/terminal/attach.d.ts.map +1 -1
  183. package/dist/terminal/attach.js +7 -6
  184. package/dist/terminal/attach.js.map +1 -1
  185. package/dist/web/assets/{index-CwYBVTyn.css → index-BPv6vv3U.css} +1 -1
  186. package/dist/web/assets/index-BXfgaFNm.js +18 -0
  187. package/dist/web/index.html +2 -2
  188. package/package.json +1 -1
  189. package/dist/github/mapper.d.ts +0 -9
  190. package/dist/github/mapper.d.ts.map +0 -1
  191. package/dist/github/mapper.js +0 -25
  192. package/dist/github/mapper.js.map +0 -1
  193. package/dist/github/poller.d.ts +0 -73
  194. package/dist/github/poller.d.ts.map +0 -1
  195. package/dist/github/poller.js +0 -556
  196. package/dist/github/poller.js.map +0 -1
  197. package/dist/github/pr-conversation-cache.d.ts.map +0 -1
  198. package/dist/github/pr-conversation-cache.js +0 -105
  199. package/dist/github/pr-conversation-cache.js.map +0 -1
  200. package/dist/github/pr-conversation.d.ts +0 -7
  201. package/dist/github/pr-conversation.d.ts.map +0 -1
  202. package/dist/github/pr-conversation.js +0 -175
  203. package/dist/github/pr-conversation.js.map +0 -1
  204. package/dist/github/resolver.d.ts +0 -8
  205. package/dist/github/resolver.d.ts.map +0 -1
  206. package/dist/github/resolver.js +0 -28
  207. package/dist/github/resolver.js.map +0 -1
  208. package/dist/state/post-approve-store.d.ts +0 -23
  209. package/dist/state/post-approve-store.d.ts.map +0 -1
  210. package/dist/state/post-approve-store.js +0 -82
  211. package/dist/state/post-approve-store.js.map +0 -1
  212. package/dist/web/assets/index-DtnDvjOU.js +0 -16
@@ -1,12 +1,13 @@
1
- import type { AfterDone, BaxianConfig, AgentConfig, AgentBindingFacts, HostConfig, ProjectConfig, ReviewMode, ReviewPhase, SpecDocument, TaskState, TaskStatus } from '../shared/index.js';
2
- import type { GitDriver } from '../platform/git-driver.js';
1
+ import { type AgentGitPreflight } from './preflight.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
+ import { GitDriver } from '../platform/git-driver.js';
3
4
  import type { PluginRegistry } from '../platform/plugin-registry.js';
4
5
  import type { NormalizedRow } from '../platform/row-schema.js';
5
6
  import { type PrRejection } from '../platform/pr-binding.js';
6
7
  import { type PendingFeedbackResult } from '../platform/feedback.js';
8
+ import { type PlatformBindingMismatch } from '../platform/startup.js';
7
9
  import type { AgentStore } from '../state/agent-store.js';
8
10
  import type { TaskStore } from '../state/task-store.js';
9
- import { PostApproveStore, type PostApproveCompletion } from '../state/post-approve-store.js';
10
11
  import type { LockManager } from '../state/lock.js';
11
12
  import type { EventBus } from '../event/bus.js';
12
13
  import type { ErrorRecordStore } from '../state/error-record-store.js';
@@ -16,11 +17,11 @@ import { type LineageViolation } from './lineage.js';
16
17
  import { type TmuxSessionRef, type PaneRef } from './tmux.js';
17
18
  import { RepoStore, type RepoStoreCache } from './repo-store.js';
18
19
  import type { PaneStreamerManager } from './pane-streamer-manager.js';
19
- import { PhaseSignalWatcher } from './phase-signal-watcher.js';
20
+ import { PhaseSignalWatcher, type NeedInputCommitIntent, type NeedInputCommitResult } from './phase-signal-watcher.js';
20
21
  import type { PhaseSignalKind } from './phase-signal.js';
21
22
  import { ReviewTransport } from './review-transport.js';
22
- import type { ReviewStore } from '../state/review-store.js';
23
- import { type PostMergeCleanupContext } from './prompt.js';
23
+ import { type ReviewStore } from '../state/review-store.js';
24
+ import { type PostMergeCleanupContext, type PlatformCliDescriptor, type ServerFeedbackCorrectionPrompt } from './prompt.js';
24
25
  export interface EnsureSessionResult {
25
26
  ok: true;
26
27
  createdSession: boolean;
@@ -107,8 +108,8 @@ export interface AgentManagerDeps {
107
108
  imageStagingRoot?: string;
108
109
  repoStoreFactory?: (runner: CommandRunner, repoSlug: string, mode: AgentConfig['mode'], host: HostConfig | undefined, cache: RepoStoreCache, agentId: string, workdir?: string) => RepoStore;
109
110
  paneStreamerManager?: PaneStreamerManager;
110
- postApproveStore?: PostApproveStore;
111
111
  pluginRegistry?: PluginRegistry;
112
+ platformDefaultBranchOf?: (projectId: string) => string | undefined;
112
113
  phaseSignalWatcher?: PhaseSignalWatcher;
113
114
  errorRecordStore?: ErrorRecordStore;
114
115
  reviewStore?: ReviewStore;
@@ -118,15 +119,13 @@ export interface AgentManagerDeps {
118
119
  greeting?: number;
119
120
  };
120
121
  dispatchAckTimeoutMs?: number;
122
+ needInputRetryIntervalMs?: number;
121
123
  dispatchSettleTimeoutMs?: number;
122
124
  }
123
- export declare class PlatformCloseError extends Error {
124
- readonly step: 'close' | 'deleteBranch';
125
- constructor(step: 'close' | 'deleteBranch', cause: unknown);
126
- }
127
125
  export declare class PlatformMergeRecheckError extends Error {
126
+ readonly kind: 'pending-feedback' | 'provenance-invalid';
128
127
  readonly reason: string;
129
- constructor(reason: string);
128
+ constructor(kind: 'pending-feedback' | 'provenance-invalid', reason: string);
130
129
  }
131
130
  export interface TransitionResult {
132
131
  task: TaskState;
@@ -148,6 +147,8 @@ interface SessionDispatchOpts {
148
147
  total: number;
149
148
  };
150
149
  serverPriorFindings?: string;
150
+ serverFindingsDigest?: string;
151
+ serverFeedbackCorrection?: ServerFeedbackCorrectionPrompt;
151
152
  serverPriorResponse?: string;
152
153
  specDocuments?: readonly SpecDocument[];
153
154
  armBeforeInject?: (ctx: DispatchArmContext) => Promise<boolean>;
@@ -155,6 +156,7 @@ interface SessionDispatchOpts {
155
156
  interface StartSessionOpts extends SessionDispatchOpts {
156
157
  preserveBindingOnFailure?: boolean;
157
158
  dispatchPassToken?: string;
159
+ dispatchReviewLease?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken' | 'headSha' | 'passToken' | 'failToken' | 'effectiveRound' | 'qaPhase'>;
158
160
  dispatchPendingBudget?: {
159
161
  since: number;
160
162
  budgetAlerted?: boolean;
@@ -162,6 +164,7 @@ interface StartSessionOpts extends SessionDispatchOpts {
162
164
  }
163
165
  export interface ContinueSessionOpts extends SessionDispatchOpts {
164
166
  postApproveRedispatchCount?: number;
167
+ postApproveEpisode?: PostApproveEpisodeKey;
165
168
  serverAfterDone?: {
166
169
  kind: 'branch' | 'pr';
167
170
  branch: string;
@@ -182,6 +185,12 @@ export interface MergePrOpts {
182
185
  matchHeadSha?: string;
183
186
  humanOverride?: boolean;
184
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'>;
185
194
  export type CodeInterdiffResult = {
186
195
  ok: true;
187
196
  diff: string;
@@ -193,8 +202,12 @@ export type CodeInterdiffResult = {
193
202
  reason: 'released';
194
203
  };
195
204
  export interface ServerReviewDriver {
196
- dispatchCodeReview(task: TaskState): Promise<boolean>;
197
- 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>;
198
211
  }
199
212
  export declare function canDispatchWithBinding(binding: AgentBindingFacts | null | undefined): boolean;
200
213
  export declare const RECOVERABLE_QA_DISPATCH_HOLD_PHASES: Set<string>;
@@ -207,6 +220,14 @@ export interface PendingDispatchRetry {
207
220
  since: number;
208
221
  budgetAlerted?: boolean;
209
222
  }
223
+ export interface PostApproveCompletion {
224
+ token: string;
225
+ approvedHeadSha: string;
226
+ generation: string;
227
+ updatedAt: string;
228
+ redispatchCount?: number;
229
+ pendingRedispatch?: boolean;
230
+ }
210
231
  export declare class AgentManager {
211
232
  private config;
212
233
  protected agentStore: AgentStore;
@@ -218,8 +239,8 @@ export declare class AgentManager {
218
239
  protected repoStoreFactory?: AgentManagerDeps['repoStoreFactory'];
219
240
  protected repoCache: RepoStoreCache;
220
241
  protected paneStreamerManager?: PaneStreamerManager;
221
- protected postApproveStore: PostApproveStore;
222
242
  protected pluginRegistry?: PluginRegistry;
243
+ private platformDefaultBranchOf?;
223
244
  private readonly platformDriverExec;
224
245
  protected phaseSignalWatcher?: PhaseSignalWatcher;
225
246
  protected errorRecordStore?: ErrorRecordStore;
@@ -227,9 +248,11 @@ export declare class AgentManager {
227
248
  private reviewTransportInstance?;
228
249
  private serverReviewDriver?;
229
250
  protected dispatchAckTimeoutMs: number;
251
+ private readonly needInputRetryIntervalMs;
230
252
  protected dispatchSettleTimeoutMs: number;
231
253
  protected dispatchAckResendIntervalMs: number;
232
254
  private taskMutationQueue;
255
+ private agentOperationQueues;
233
256
  private agentIndex;
234
257
  private platformRunner;
235
258
  private imageStagingRoot;
@@ -242,6 +265,7 @@ export declare class AgentManager {
242
265
  protected manualCompactWaitMs: number;
243
266
  protected runtimeLivenessProbeMs: number;
244
267
  protected cleanComposerWaitMs: number;
268
+ protected platformVerificationRetryDelayMs: number;
245
269
  protected readyStableSamples: number;
246
270
  protected readyStableSpacingMs: number;
247
271
  private pendingDispatchRetryByTask;
@@ -255,8 +279,10 @@ export declare class AgentManager {
255
279
  private divergedAgents;
256
280
  private deletionGeneration;
257
281
  private compactInFlight;
282
+ private configInterventionKeys;
258
283
  constructor(deps: AgentManagerDeps);
259
284
  private withTaskLock;
285
+ private withAgentOperationLease;
260
286
  private resolveTaskLockToken;
261
287
  private assertTaskLockOwner;
262
288
  private assertTaskGeneration;
@@ -265,12 +291,22 @@ export declare class AgentManager {
265
291
  effectiveReviewMode(projectId: string): ReviewMode;
266
292
  resolveAfterDone(task: TaskState): AfterDone;
267
293
  private coerceAfterDone;
294
+ commitServerAfterDone(taskId: string): Promise<AfterDone>;
268
295
  getReviewTransport(): ReviewTransport;
269
296
  private prepareDispatchArtifacts;
270
297
  private bindingWorkdirCache;
271
298
  refreshWorkdirCacheFor(agentId: string): Promise<string | undefined>;
272
299
  private safeEmit;
273
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>;
274
310
  private recordError;
275
311
  replaceConfig(validated: BaxianConfig): void;
276
312
  getConfig(): BaxianConfig;
@@ -280,6 +316,14 @@ export declare class AgentManager {
280
316
  tryClaimDeletion(agentIds: readonly string[]): string | null;
281
317
  scanActiveThenClaimDeletion(targets: readonly string[]): Promise<DeletionClaimOutcome>;
282
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
+ }>>;
283
327
  bumpDeletionGeneration(agentId: string): void;
284
328
  deletionGenerationOf(agentId: string): number;
285
329
  private deletionGateOpen;
@@ -289,6 +333,7 @@ export declare class AgentManager {
289
333
  expectedGeneration?: number;
290
334
  }): Promise<EnsureSessionResult>;
291
335
  private ensureSessionLocked;
336
+ private agentSkillScope;
292
337
  private provisionRepoSkills;
293
338
  private sessionLifecycleChain;
294
339
  private adoptGeneration;
@@ -336,6 +381,8 @@ export declare class AgentManager {
336
381
  clearAwaitingHuman?: boolean;
337
382
  fromCancelCleanup?: boolean;
338
383
  expectedTask?: Pick<TaskState, 'status' | 'phase' | 'signalToken'>;
384
+ expectedReviewDispatch?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken'>;
385
+ expectedPostApproveEpisode?: PostApproveEpisodeKey;
339
386
  expectedHold?: {
340
387
  phase: string | undefined;
341
388
  since: string | undefined;
@@ -347,10 +394,31 @@ export declare class AgentManager {
347
394
  private clearBranchLocalCleaned;
348
395
  private releaseAgentIfBound;
349
396
  reconcileTaskBranches(): Promise<void>;
350
- private setAgentNeedInput;
397
+ private readonly needInputRetry;
398
+ private readonly needInputRetryInFlight;
399
+ private readonly gitReviewQaConfigAlerted;
400
+ private readonly needInputWritesInFlight;
401
+ private needInputWriteSeq;
402
+ private readonly needInputArmLocks;
403
+ private needInputRetryTimer;
404
+ private needInputRetryKey;
405
+ private parseNeedInputRetryKey;
406
+ commitNeedInputWatermark(intent: NeedInputCommitIntent): Promise<NeedInputCommitResult>;
407
+ private writeNeedInputWatermark;
408
+ private enqueueNeedInputRetry;
409
+ private settleNeedInputRetry;
410
+ private clearNeedInputRetryFor;
411
+ private ensureNeedInputRetryTimer;
412
+ private needInputRetryPass;
413
+ private collectSameEpochNeedInput;
414
+ private collectPredecessorNeedInputDelta;
415
+ private withNeedInputArmLock;
416
+ private bumpNeedInputEpochForArm;
351
417
  private startPhaseSignalWatch;
418
+ private confirmNeedInputAnswered;
352
419
  notifyHumanTerminalInput(agentId: string): Promise<void>;
353
420
  clearAwaitingHuman(agentId: string, opts?: {
421
+ expectedTaskId?: string;
354
422
  expectedHold?: {
355
423
  phase?: string;
356
424
  since?: string;
@@ -382,7 +450,11 @@ export declare class AgentManager {
382
450
  private markPaneCancelClearing;
383
451
  private claimCancelCleanup;
384
452
  private releaseCancelCleanup;
385
- 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>;
386
458
  failTasksForAgent(agentId: string, reason: string, opts?: {
387
459
  deferPartnerCleanup?: boolean;
388
460
  }): Promise<{
@@ -398,10 +470,11 @@ export declare class AgentManager {
398
470
  phase: string | undefined;
399
471
  since: string | undefined;
400
472
  nonce: string | undefined;
401
- }): Promise<boolean>;
473
+ }, extraCurrent?: (fresh: TaskState) => Promise<boolean>): Promise<boolean>;
474
+ private runRotatedReplay;
402
475
  redispatchTaskPromptAfterReplRestart(agentId: string, taskId: string): Promise<boolean>;
403
476
  private replayApprovedHolderAfterReplRestart;
404
- private rebuildPostApproveCompletion;
477
+ private holdIncompleteGitPostApproveEpisode;
405
478
  prepareRemoveTargets(agentId: string): {
406
479
  targets: string[];
407
480
  };
@@ -415,26 +488,23 @@ export declare class AgentManager {
415
488
  projectId: string;
416
489
  }>;
417
490
  getProjectConfig(projectId: string): ProjectConfig | undefined;
418
- getProjectByRepo(repo: string): ProjectConfig | undefined;
419
- getProjectByRepoIdentity(repoKey: string): ProjectConfig | undefined;
420
491
  platformDriverFor(projectId: string): GitDriver | undefined;
421
492
  private findAgentGroup;
422
493
  private longestDevWorkdirInProject;
423
494
  getTask(taskId: string): Promise<TaskState | null>;
424
495
  getAgentState(agentId: string): Promise<AgentBindingFacts | null>;
425
496
  getPostApproveCompletion(taskId: string): Promise<PostApproveCompletion | null>;
426
- private gitCompletionOf;
427
- private stripGitCompletionFields;
428
- setPostApproveCompletion(taskId: string, value: {
429
- token: string;
430
- approvedHeadSha: string;
431
- redispatchCount?: number;
432
- pendingRedispatch?: boolean;
433
- }, opts?: {
434
- clearRevocation?: boolean;
497
+ private completionOf;
498
+ private postApproveEpisodeMatches;
499
+ armGitPostApproveEpisode(taskId: string, expected: PostApproveEpisodeKey, opts?: {
500
+ recovered?: boolean;
435
501
  }): Promise<boolean>;
436
- confirmPostApprovePromptDelivered(taskId: string, token: string): Promise<void>;
437
- 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>;
438
508
  clearPostApproveCompletion(taskId: string): Promise<void>;
439
509
  updatePostApproveCompletionIfToken(taskId: string, expectedToken: string, patch: {
440
510
  redispatchCount?: number;
@@ -444,13 +514,16 @@ export declare class AgentManager {
444
514
  key: string;
445
515
  versionTime: number;
446
516
  };
517
+ expectedGeneration?: string;
518
+ expectedHeadSha?: string;
447
519
  }): Promise<boolean>;
448
520
  revokePostApproveCompletion(taskId: string, reason: 'request-changes' | 'redispatch-cap', opts?: {
449
521
  expectedToken?: string;
450
522
  expectedHeadSha?: string;
523
+ expectedGeneration?: string;
451
524
  }): Promise<boolean>;
452
- clearPostApproveCompletionIfMatches(taskId: string, token: string): Promise<boolean>;
453
- completeApprovedPassToMergeReady(taskId: string, expectedToken: string): Promise<{
525
+ clearPostApproveCompletionIfMatches(taskId: string, expected: string | PostApproveEpisodeKey): Promise<boolean>;
526
+ completeApprovedPassToMergeReady(taskId: string, expected: string | PostApproveEpisodeKey): Promise<{
454
527
  task: TaskState;
455
528
  } | {
456
529
  refused: 'stale' | 'pending';
@@ -462,6 +535,7 @@ export declare class AgentManager {
462
535
  rearmPostApproveSignal(taskId: string, opts?: {
463
536
  skipSnapshot?: boolean;
464
537
  }): Promise<boolean>;
538
+ ensurePluginSkillPools(next: BaxianConfig): Promise<void>;
465
539
  guardGitConfigCommit(current: BaxianConfig, next: BaxianConfig, scan: (manager: AgentManager, current: BaxianConfig, next: BaxianConfig) => Promise<Array<{
466
540
  projectId: string;
467
541
  taskIds: string[];
@@ -474,10 +548,43 @@ export declare class AgentManager {
474
548
  taskIds: string[];
475
549
  }>;
476
550
  }>;
477
- flushGitOutbox(): Promise<void>;
478
- 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>;
479
586
  retryPendingGitReviewDispatches(): Promise<void>;
480
- retryGitRemoteBranchCleanup(): Promise<void>;
587
+ retryGitRemoteCleanupIntents(): Promise<void>;
481
588
  consumeGitFeedbackRevision(taskId: string, consume: {
482
589
  key: string;
483
590
  versionTime: number;
@@ -489,30 +596,26 @@ export declare class AgentManager {
489
596
  kind: 'returned' | 'pending';
490
597
  task: TaskState;
491
598
  }>;
492
- returnMergeReadyToApproved(taskId: string, consume: {
493
- key: string;
494
- versionTime: number;
495
- }): Promise<TaskState | null>;
496
599
  setupRecoveredPostApproveSignals(): Promise<void>;
497
600
  setupRecoveredSpecSignals(): Promise<void>;
601
+ private recoverServerSignalRecovery;
498
602
  private setupRecoveredWatcherForMapping;
499
- prHasDevReplySince(taskId: string, sinceIso: string): Promise<boolean>;
500
- private ghCreatedAt;
501
- fetchPrHeadSha(taskId: string): Promise<string>;
502
603
  verifyPaneSignalPrNumber(taskId: string, prNumber: number): Promise<{
503
604
  headRefName: string;
504
605
  headSha: string;
505
- } | undefined>;
506
- fetchPrHeadRef(prNumber: number, projectId: string): Promise<{
507
- headRefName: string;
508
- headSha: string;
509
- body: string;
606
+ targetBranch: string;
510
607
  } | undefined>;
511
608
  platformBindingFields(projectId: string): Partial<TaskState>;
609
+ private platformBindingFor;
610
+ agentGitPreflightContext(projectId: string): AgentGitPreflight | undefined;
611
+ platformCliContextOf(task: TaskState): PlatformCliDescriptor | undefined;
612
+ ensureGitBaseSnapshot(task: TaskState, phase: string): Promise<TaskState>;
613
+ noteReviewConversationRevision(taskId: string): Promise<void>;
512
614
  private assertPlatformBinding;
513
615
  private platformTaskAndDriver;
514
616
  listActiveGitTasks(projectId?: string): Promise<TaskState[]>;
515
617
  platformFetchPrView(taskId: string): Promise<NormalizedRow>;
618
+ platformFetchPrHeadSha(taskId: string): Promise<string>;
516
619
  platformVerifyPrBinding(taskId: string, prNumber: number, opts?: {
517
620
  branchOverride?: string;
518
621
  }): Promise<{
@@ -526,15 +629,19 @@ export declare class AgentManager {
526
629
  prBranch?: string;
527
630
  }>;
528
631
  stopPhaseSignalWatcherAgent(taskId: string, agentId: string): void;
529
- platformClosePr(taskId: string, opts: {
530
- deleteBranch: boolean;
531
- }): Promise<void>;
632
+ private mutateRemoteCleanup;
633
+ private recordRemoteCleanupFailure;
634
+ private markRemoteCleanupManual;
635
+ processGitRemoteCleanup(taskId: string, expectedGeneration?: string): Promise<void>;
532
636
  private platformScanComments;
533
637
  platformVerifyAcceptedPass(taskId: string): Promise<{
534
- ok: true;
638
+ kind: 'valid';
535
639
  pendingCount: number;
536
640
  } | {
537
- ok: false;
641
+ kind: 'retryable';
642
+ reason: string;
643
+ } | {
644
+ kind: 'provenance-invalid';
538
645
  reason: string;
539
646
  }>;
540
647
  platformPendingFeedback(taskId: string): Promise<PendingFeedbackResult>;
@@ -546,17 +653,34 @@ export declare class AgentManager {
546
653
  passToken: string;
547
654
  failToken: string;
548
655
  };
549
- listTasksByProject(projectId: string): Promise<TaskState[]>;
656
+ private taskBelongsToPlatformEntry;
657
+ listTasksForPlatformEntry(projectId: string): Promise<TaskState[]>;
550
658
  findTaskByBranch(branch: string, projectId: string): Promise<TaskState | undefined>;
551
- listTasksByPrNumber(prNumber: number, projectId?: string): Promise<TaskState[]>;
552
- updateTaskStatus(taskId: string, status: TaskStatus): Promise<void>;
553
- 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>;
554
676
  updateTask(taskId: string, updates: Partial<TaskState>): Promise<void>;
555
677
  transitionTaskStatus(taskId: string, toStatus: TaskStatus, guard: {
556
678
  fromStatus: TaskStatus[];
557
679
  expectSignalToken?: string;
558
- }, 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>;
559
- 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>;
560
684
  private createRunnerFor;
561
685
  private createRepoStore;
562
686
  private ensureWorkdir;
@@ -630,6 +754,8 @@ export declare class AgentManager {
630
754
  allowAwaitingHuman?: boolean;
631
755
  clearAwaitingHuman?: boolean;
632
756
  expectedTask?: Pick<TaskState, 'status' | 'phase' | 'signalToken'>;
757
+ expectedReviewDispatch?: Pick<ReviewDispatchLease, 'generation' | 'claimId' | 'signalToken'>;
758
+ expectedPostApproveEpisode?: PostApproveEpisodeKey;
633
759
  expectedHold?: {
634
760
  phase: string | undefined;
635
761
  since: string | undefined;
@@ -650,22 +776,32 @@ export declare class AgentManager {
650
776
  description: string;
651
777
  preferredAgentId: string;
652
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>;
653
789
  dispatchReviewToQa(taskId: string, opts?: {
654
790
  fromStatus?: TaskStatus[];
655
791
  bumpRound?: boolean;
656
792
  expectSignalToken?: string;
793
+ expectPhase?: TaskPhase;
657
794
  qaPhase?: 'review' | 'recheck';
658
795
  pendingBudget?: {
659
796
  since: number;
660
797
  budgetAlerted?: boolean;
661
798
  };
662
- expectReviewDispatchPending?: boolean;
663
799
  onPassArmed?: (armedToken: string) => void;
800
+ onQaAcquired?: (lockToken: string) => void;
801
+ confirmUncertainNotDelivered?: boolean;
664
802
  }): Promise<TaskState>;
665
803
  private runManualServerReview;
666
804
  continueDevRound(taskId: string): Promise<TaskState>;
667
- private rollbackDispatchReviewPhase1;
668
- private tearDownWatcherIfTaskTerminal;
669
805
  private devInitialSignalKinds;
670
806
  private resolveInitialDispatch;
671
807
  private mapTaskStateToExpectedWatchers;
@@ -676,7 +812,6 @@ export declare class AgentManager {
676
812
  replaceScope?: 'task' | 'agent';
677
813
  tokenOverride?: string;
678
814
  }): Promise<boolean>;
679
- private emitManualReviewDevParkedQaFailedIntervention;
680
815
  retryTask(taskId: string): Promise<TaskState>;
681
816
  editTask(taskId: string, patch: {
682
817
  title?: string;
@@ -708,29 +843,13 @@ export declare class AgentManager {
708
843
  rearmGitReconciliationWatcher(taskId: string, opts?: {
709
844
  skipSnapshot?: boolean;
710
845
  }): Promise<void>;
711
- 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<{
712
850
  token: string;
713
851
  armed: boolean;
714
852
  }>;
715
- rollbackVerdictArmFailure(taskId: string, restore: {
716
- status: TaskStatus;
717
- signalToken?: string;
718
- reviewHeadAnchorSha?: string;
719
- reviewDispatchedAt?: string;
720
- reviewRoundPending?: boolean;
721
- passToken?: string;
722
- failToken?: string;
723
- restorePair?: boolean;
724
- }, opts?: {
725
- expect?: {
726
- status: TaskStatus;
727
- signalToken?: string;
728
- };
729
- rearmSkipSnapshot?: boolean;
730
- }): Promise<boolean>;
731
- rearmPhaseSignalForCurrentPass(taskId: string, opts?: {
732
- skipSnapshot?: boolean;
733
- }): Promise<void>;
734
853
  parkTaskAtSpecReady(taskId: string, opts?: {
735
854
  specReviewRound?: number;
736
855
  }): Promise<TaskState | null>;
@@ -748,6 +867,7 @@ export declare class AgentManager {
748
867
  phase: ReviewPhase;
749
868
  recheck?: boolean;
750
869
  continuation?: boolean;
870
+ bumpRound?: boolean;
751
871
  content: string;
752
872
  interdiff?: string;
753
873
  diffstat?: string;
@@ -760,8 +880,11 @@ export declare class AgentManager {
760
880
  priorFindingsJson?: string;
761
881
  priorResponseJson?: string;
762
882
  reviewHeadAnchorSha?: string;
883
+ callerOwnsConsumedSignalFailure?: boolean;
884
+ }): Promise<TaskState | null>;
885
+ dispatchServerFixToDev(taskId: string, _findingsJson: string, opts?: {
886
+ callerOwnsConsumedSignalFailure?: boolean;
763
887
  }): Promise<TaskState | null>;
764
- dispatchServerFixToDev(taskId: string, findingsJson: string): Promise<TaskState | null>;
765
888
  private projectRepoKey;
766
889
  computeCodeInterdiff(taskId: string, round: number): Promise<CodeInterdiffResult>;
767
890
  findLineageViolation(taskId: string, baseSha?: string): Promise<LineageViolation | null>;