baxian 1.2.60 → 1.2.61

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 (117) hide show
  1. package/dist/agent/dispatch-reconciler.js +6 -6
  2. package/dist/agent/dispatch-reconciler.js.map +1 -1
  3. package/dist/agent/manager.d.ts +34 -4
  4. package/dist/agent/manager.d.ts.map +1 -1
  5. package/dist/agent/manager.js +628 -48
  6. package/dist/agent/manager.js.map +1 -1
  7. package/dist/agent/pane-streamer.js +1 -1
  8. package/dist/agent/pane-streamer.js.map +1 -1
  9. package/dist/agent/phase-signal-watcher.d.ts +43 -2
  10. package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
  11. package/dist/agent/phase-signal-watcher.js +301 -43
  12. package/dist/agent/phase-signal-watcher.js.map +1 -1
  13. package/dist/agent/phase-signal.d.ts +9 -0
  14. package/dist/agent/phase-signal.d.ts.map +1 -1
  15. package/dist/agent/phase-signal.js +63 -5
  16. package/dist/agent/phase-signal.js.map +1 -1
  17. package/dist/agent/preflight.d.ts +20 -1
  18. package/dist/agent/preflight.d.ts.map +1 -1
  19. package/dist/agent/preflight.js +217 -19
  20. package/dist/agent/preflight.js.map +1 -1
  21. package/dist/agent/prompt.d.ts +8 -0
  22. package/dist/agent/prompt.d.ts.map +1 -1
  23. package/dist/agent/prompt.js +45 -2
  24. package/dist/agent/prompt.js.map +1 -1
  25. package/dist/agent/repo-store.d.ts +2 -1
  26. package/dist/agent/repo-store.d.ts.map +1 -1
  27. package/dist/agent/repo-store.js +7 -3
  28. package/dist/agent/repo-store.js.map +1 -1
  29. package/dist/api/config.d.ts.map +1 -1
  30. package/dist/api/config.js +8 -0
  31. package/dist/api/config.js.map +1 -1
  32. package/dist/api/projects.d.ts.map +1 -1
  33. package/dist/api/projects.js +55 -4
  34. package/dist/api/projects.js.map +1 -1
  35. package/dist/api/tasks.d.ts.map +1 -1
  36. package/dist/api/tasks.js +26 -3
  37. package/dist/api/tasks.js.map +1 -1
  38. package/dist/cli.d.ts.map +1 -1
  39. package/dist/cli.js +7 -0
  40. package/dist/cli.js.map +1 -1
  41. package/dist/config/validator.js +8 -1
  42. package/dist/config/validator.js.map +1 -1
  43. package/dist/event/log.d.ts.map +1 -1
  44. package/dist/event/log.js +17 -2
  45. package/dist/event/log.js.map +1 -1
  46. package/dist/github/pr-conversation-cache.d.ts +11 -4
  47. package/dist/github/pr-conversation-cache.d.ts.map +1 -1
  48. package/dist/github/pr-conversation-cache.js +101 -7
  49. package/dist/github/pr-conversation-cache.js.map +1 -1
  50. package/dist/github/pr-conversation.d.ts +2 -2
  51. package/dist/github/pr-conversation.d.ts.map +1 -1
  52. package/dist/github/pr-conversation.js.map +1 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +2 -1
  55. package/dist/index.js.map +1 -1
  56. package/dist/platform/driver-spec.d.ts.map +1 -1
  57. package/dist/platform/driver-spec.js +33 -0
  58. package/dist/platform/driver-spec.js.map +1 -1
  59. package/dist/platform/git-driver.d.ts +7 -1
  60. package/dist/platform/git-driver.d.ts.map +1 -1
  61. package/dist/platform/git-driver.js +33 -2
  62. package/dist/platform/git-driver.js.map +1 -1
  63. package/dist/platform/platform-poller.d.ts +8 -0
  64. package/dist/platform/platform-poller.d.ts.map +1 -1
  65. package/dist/platform/platform-poller.js +80 -1
  66. package/dist/platform/platform-poller.js.map +1 -1
  67. package/dist/platform/plugin-registry.d.ts.map +1 -1
  68. package/dist/platform/plugin-registry.js +14 -2
  69. package/dist/platform/plugin-registry.js.map +1 -1
  70. package/dist/platform/plugins/github/driver.json +3 -0
  71. package/dist/platform/plugins/github/skills/baxian-cli-gh/SKILL.md +16 -7
  72. package/dist/platform/preflight-exec.d.ts +21 -0
  73. package/dist/platform/preflight-exec.d.ts.map +1 -0
  74. package/dist/platform/preflight-exec.js +62 -0
  75. package/dist/platform/preflight-exec.js.map +1 -0
  76. package/dist/platform/review-timeline.d.ts +16 -0
  77. package/dist/platform/review-timeline.d.ts.map +1 -0
  78. package/dist/platform/review-timeline.js +195 -0
  79. package/dist/platform/review-timeline.js.map +1 -0
  80. package/dist/platform/startup.d.ts +5 -1
  81. package/dist/platform/startup.d.ts.map +1 -1
  82. package/dist/platform/startup.js +25 -0
  83. package/dist/platform/startup.js.map +1 -1
  84. package/dist/platform/types.d.ts +2 -0
  85. package/dist/platform/types.d.ts.map +1 -1
  86. package/dist/platform/types.js +1 -1
  87. package/dist/platform/types.js.map +1 -1
  88. package/dist/shared/git-url.d.ts +1 -0
  89. package/dist/shared/git-url.d.ts.map +1 -1
  90. package/dist/shared/git-url.js +3 -0
  91. package/dist/shared/git-url.js.map +1 -1
  92. package/dist/shared/types.d.ts +19 -6
  93. package/dist/shared/types.d.ts.map +1 -1
  94. package/dist/shared/types.js.map +1 -1
  95. package/dist/skill/registry.d.ts +9 -2
  96. package/dist/skill/registry.d.ts.map +1 -1
  97. package/dist/skill/registry.js +88 -54
  98. package/dist/skill/registry.js.map +1 -1
  99. package/dist/skills/baxian-pr-feedback/SKILL.md +2 -0
  100. package/dist/skills/baxian-pr-recheck/SKILL.md +2 -0
  101. package/dist/skills/baxian-pr-review/SKILL.md +2 -0
  102. package/dist/skills/baxian-research/SKILL.md +1 -1
  103. package/dist/skills/baxian-signals/SKILL.md +19 -4
  104. package/dist/skills/baxian-task-check/SKILL.md +4 -2
  105. package/dist/state/agent-store.d.ts.map +1 -1
  106. package/dist/state/agent-store.js +27 -2
  107. package/dist/state/agent-store.js.map +1 -1
  108. package/dist/state/task-store.js +3 -3
  109. package/dist/state/task-store.js.map +1 -1
  110. package/dist/terminal/attach.d.ts.map +1 -1
  111. package/dist/terminal/attach.js +7 -6
  112. package/dist/terminal/attach.js.map +1 -1
  113. package/dist/web/assets/{index-CwYBVTyn.css → index-BPv6vv3U.css} +1 -1
  114. package/dist/web/assets/index-CUJtd0bC.js +16 -0
  115. package/dist/web/index.html +2 -2
  116. package/package.json +1 -1
  117. package/dist/web/assets/index-DtnDvjOU.js +0 -16
@@ -1,4 +1,4 @@
1
- import { scanNeedInputSignals, scanPhaseSignals, scanReadFileSignals, } from './phase-signal.js';
1
+ import { compactBoundaryIndex, scanAskAnswerSignals, scanPhaseSignals, scanReadFileSignals, } from './phase-signal.js';
2
2
  const MATCH_BUFFER_CHARS = 1024;
3
3
  const KIND_TO_EVENT_TYPE = {
4
4
  'spec-fixed': 'server.spec.fix.submitted',
@@ -24,9 +24,16 @@ function normalizeKinds(input) {
24
24
  function entryKey(taskId, agentId) {
25
25
  return `${taskId}:${agentId}`;
26
26
  }
27
+ const ARM_FENCE_CAP = 4096;
27
28
  export class PhaseSignalWatcher {
28
29
  deps;
29
30
  entries = new Map();
31
+ armFences = new Map();
32
+ // Arms that claimed ownership but have not installed yet (their subscribe is in
33
+ // flight). The own-token fence must see them, or a stale replay would evict a
34
+ // current-token pass whose watcher is merely slow to attach.
35
+ pendingArms = new Map();
36
+ armCounter = 0;
30
37
  constructor(deps) {
31
38
  this.deps = deps;
32
39
  }
@@ -41,10 +48,31 @@ export class PhaseSignalWatcher {
41
48
  return this.taskEntries(args.taskId);
42
49
  }
43
50
  async start(args) {
44
- if (args.onlyReplaceOwnToken
45
- && this.replaceTargets(args).some(entry => entry.expectedToken !== args.token)) {
46
- return false;
51
+ // Everything up to the first await is one atomic section with the caller's epoch bump.
52
+ const key = entryKey(args.taskId, args.agentId);
53
+ const predecessor = this.entries.get(key);
54
+ // The predecessor keeps consuming pane data while we subscribe: hand it this arm's
55
+ // generation now, or answers it consumes in that window fence against the store.
56
+ if (args.needInput !== undefined && args.needInputInherit
57
+ && predecessor?.expectedToken === args.token) {
58
+ this.migrateEntryGeneration(predecessor, args.needInput, true);
47
59
  }
60
+ // Our caller bumped the store before calling us, so any rejection leaves the store
61
+ // ahead of the installed entry. Rescue it — but only when it is still the very entry
62
+ // this arm started against: a successor installed meanwhile owns a newer generation
63
+ // and adopting ours would drag it back to a superseded watermark.
64
+ const rejectArm = () => {
65
+ if (args.needInput !== undefined && predecessor && this.entries.get(key) === predecessor) {
66
+ this.migrateEntryGeneration(predecessor, args.needInput, args.needInputInherit === true && predecessor.expectedToken === args.token);
67
+ }
68
+ return false;
69
+ };
70
+ if (this.hasForeignTokenOwner(args, args.armClaimId))
71
+ return rejectArm();
72
+ // Fence bookkeeping happens on ENTRY, before any await: even an arm that later
73
+ // fails to subscribe leaves its generation/arrival behind to fence older stragglers.
74
+ const armSeq = ++this.armCounter;
75
+ this.touchArmFence(key, armSeq, args.needInput?.epoch);
48
76
  // The old entry keeps consuming until the replacement subscription exists; a failed start must not orphan the signal.
49
77
  const expectedKinds = normalizeKinds(args.expectedKinds);
50
78
  const kindsLabel = [...expectedKinds].join(',');
@@ -57,7 +85,7 @@ export class PhaseSignalWatcher {
57
85
  agentId: args.agentId,
58
86
  phase: `signal-setup-no-agent:${kindsLabel}`,
59
87
  });
60
- return false;
88
+ return rejectArm();
61
89
  }
62
90
  const streamer = this.deps.paneStreamerManager.ensure(agent);
63
91
  const entry = {
@@ -68,8 +96,13 @@ export class PhaseSignalWatcher {
68
96
  expectedToken: args.token,
69
97
  ...(args.onReadFile ? { onReadFile: args.onReadFile } : {}),
70
98
  seenReadFile: new Set(),
71
- ...(args.onNeedInput ? { onNeedInput: args.onNeedInput } : {}),
72
- needInputFired: false,
99
+ askSeq: args.needInput?.askSeq ?? 0,
100
+ answeredSeq: args.needInput?.answeredSeq ?? 0,
101
+ epoch: args.needInput?.epoch ?? 0,
102
+ snapshotReconcile: args.needInputInherit === true
103
+ && args.needInput !== undefined
104
+ && args.needInputSnapshotBlind !== true,
105
+ commitEnabled: args.needInput !== undefined,
73
106
  needInputBuffer: '',
74
107
  recovered: args.recovered ?? false,
75
108
  buffer: '',
@@ -92,28 +125,153 @@ export class PhaseSignalWatcher {
92
125
  phase: `signal-setup-failed:${kindsLabel}`,
93
126
  error: err instanceof Error ? err.message : String(err),
94
127
  });
95
- return false;
128
+ return rejectArm();
96
129
  }
97
- // A successor may have armed while the subscription was in flight.
130
+ // ---- Fences first: every rejection must happen BEFORE any raced entry is dropped,
131
+ // or a doomed stale arm would tear down a live sibling watcher on its way out.
98
132
  const raced = this.replaceTargets(args);
99
- if (raced.length > 0) {
100
- if (args.onlyReplaceOwnToken && raced.some(existing => existing.expectedToken !== args.token)) {
101
- try {
102
- sub.unsubscribe();
103
- }
104
- catch { }
105
- return false;
133
+ const rejectAfterSubscribe = () => {
134
+ try {
135
+ sub.unsubscribe();
106
136
  }
107
- for (const existing of raced)
108
- this.dropEntry(existing);
137
+ catch { }
138
+ return rejectArm();
139
+ };
140
+ if (this.hasForeignTokenOwner(args, args.armClaimId))
141
+ return rejectAfterSubscribe();
142
+ const own = this.entries.get(key);
143
+ // Generation-monotonic install: the bump order IS the arm order, so a smaller epoch
144
+ // identifies a late arrival that must not demote the persisted generation. The fence
145
+ // record (not the live entry) carries this across subscribe failures and exits.
146
+ if (own?.commitEnabled && args.needInput !== undefined && own.epoch > args.needInput.epoch) {
147
+ return rejectAfterSubscribe();
148
+ }
149
+ const fence = this.armFences.get(key);
150
+ if (args.needInput !== undefined && (fence?.highWater ?? 0) > args.needInput.epoch) {
151
+ return rejectAfterSubscribe();
152
+ }
153
+ // Arrival-order fence covers what epochs cannot: a degraded successor (no generation)
154
+ // must still win over an older arm whose subscription settled after it.
155
+ if (fence !== undefined && fence.latestSeq !== armSeq) {
156
+ return rejectAfterSubscribe();
157
+ }
158
+ // ---- Install: merge, evict, subscribe hand-off.
159
+ if (args.needInput === undefined && own) {
160
+ // Degraded arm (bump failed): keep watching signals on the surviving entry's
161
+ // generation, but honour the wm-null contract — no badge commits, and only a
162
+ // restore intent may carry the ordinals (a fresh replay restarts at 1).
163
+ entry.epoch = own.epoch;
164
+ entry.commitEnabled = false;
165
+ if (args.needInputInherit) {
166
+ entry.askSeq = Math.max(entry.askSeq, own.askSeq);
167
+ entry.answeredSeq = Math.max(entry.answeredSeq, own.answeredSeq);
168
+ }
169
+ }
170
+ // Same-token restore transfer merges the predecessor's in-memory watermark: seqs it
171
+ // advanced but never persisted (error'd commits) must survive the swap.
172
+ const prior = args.needInputInherit
173
+ ? raced.find(existing => existing.taskId === args.taskId
174
+ && existing.agentId === args.agentId
175
+ && existing.expectedToken === args.token)
176
+ : undefined;
177
+ if (prior) {
178
+ entry.askSeq = Math.max(entry.askSeq, prior.askSeq);
179
+ entry.answeredSeq = Math.max(entry.answeredSeq, prior.answeredSeq);
109
180
  }
181
+ for (const existing of raced)
182
+ this.dropEntry(existing);
110
183
  entry.unsubscribe = sub.unsubscribe;
111
- this.entries.set(entryKey(args.taskId, args.agentId), entry);
184
+ this.entries.set(key, entry);
185
+ // A merged watermark ahead of the bump write (the predecessor's error'd commits, whose
186
+ // retry intents the arm just cleared) must reach the new generation's persistence now,
187
+ // or a cleared badge could stay lit in the store forever.
188
+ if (args.needInput !== undefined
189
+ && (entry.askSeq > args.needInput.askSeq || entry.answeredSeq > args.needInput.answeredSeq)) {
190
+ this.commitWatermark(entry);
191
+ }
112
192
  if (!args.skipSnapshot) {
113
193
  this.onPaneData(entry, sub.snapshot.data, true);
114
194
  }
115
195
  return true;
116
196
  }
197
+ touchArmFence(key, armSeq, epoch) {
198
+ const cur = this.armFences.get(key);
199
+ const next = {
200
+ highWater: Math.max(cur?.highWater ?? 0, epoch ?? 0),
201
+ latestSeq: Math.max(cur?.latestSeq ?? 0, armSeq),
202
+ };
203
+ this.armFences.delete(key);
204
+ this.armFences.set(key, next);
205
+ if (this.armFences.size > ARM_FENCE_CAP) {
206
+ const oldest = this.armFences.keys().next().value;
207
+ if (oldest !== undefined)
208
+ this.armFences.delete(oldest);
209
+ }
210
+ }
211
+ hasForeignTokenOwner(args, selfArmId) {
212
+ if (!args.onlyReplaceOwnToken)
213
+ return false;
214
+ const installed = this.replaceTargets({
215
+ taskId: args.taskId,
216
+ agentId: args.agentId,
217
+ ...(args.replaceScope ? { replaceScope: args.replaceScope } : {}),
218
+ });
219
+ if (installed.some(entry => entry.expectedToken !== args.token))
220
+ return true;
221
+ for (const [id, arm] of this.pendingArms) {
222
+ if (id === selfArmId)
223
+ continue;
224
+ if (arm.taskId !== args.taskId)
225
+ continue;
226
+ if (args.replaceScope === 'agent' && arm.agentId !== args.agentId)
227
+ continue;
228
+ if (arm.token !== args.token)
229
+ return true;
230
+ }
231
+ return false;
232
+ }
233
+ // Read-only ownership probe (no claim) — the fence a would-be arm faces right now.
234
+ wouldRejectOwnTokenArm(args) {
235
+ return this.hasForeignTokenOwner(args);
236
+ }
237
+ // Atomic decide-and-claim, called before the caller's epoch bump: a rejected arm must
238
+ // not bump (it would fence the owner), and a claimed arm must be visible to every
239
+ // later ownership probe until it installs or fails.
240
+ claimArm(args) {
241
+ if (this.hasForeignTokenOwner(args))
242
+ return null;
243
+ const armId = ++this.armCounter;
244
+ this.pendingArms.set(armId, { taskId: args.taskId, agentId: args.agentId, token: args.token });
245
+ return armId;
246
+ }
247
+ releaseArm(armId) {
248
+ if (armId != null)
249
+ this.pendingArms.delete(armId);
250
+ }
251
+ // Monotonic: never demote a generation a successor already owns. An in-memory lead
252
+ // (seqs the entry advanced but could not persist) is written out immediately.
253
+ migrateEntryGeneration(entry, wm, inherit) {
254
+ if (entry.commitEnabled && entry.epoch >= wm.epoch)
255
+ return;
256
+ entry.epoch = wm.epoch;
257
+ entry.commitEnabled = true;
258
+ this.touchArmFence(entryKey(entry.taskId, entry.agentId), 0, wm.epoch);
259
+ if (!inherit) {
260
+ // A fresh generation superseded whatever was open: adopt its stripped ordinals
261
+ // instead of re-committing the old question into it.
262
+ entry.askSeq = wm.askSeq;
263
+ entry.answeredSeq = wm.answeredSeq;
264
+ entry.snapshotReconcile = false;
265
+ return;
266
+ }
267
+ const leads = entry.askSeq > wm.askSeq || entry.answeredSeq > wm.answeredSeq;
268
+ // The watermark may lead the entry too (queue/ledger merges): adopt it, or the entry
269
+ // would answer a question it does not know is open.
270
+ entry.askSeq = Math.max(entry.askSeq, wm.askSeq);
271
+ entry.answeredSeq = Math.max(entry.answeredSeq, wm.answeredSeq);
272
+ if (leads)
273
+ this.commitWatermark(entry);
274
+ }
117
275
  dropEntry(entry) {
118
276
  this.entries.delete(entryKey(entry.taskId, entry.agentId));
119
277
  try {
@@ -200,36 +358,135 @@ export class PhaseSignalWatcher {
200
358
  .catch(() => finish('session-gone'));
201
359
  });
202
360
  }
203
- // Re-arm takes effect immediately: dropping the need-input tail window means the
204
- // consumed literal cannot re-fire off the echo of the user's answer, while a
205
- // follow-up ask (arriving as new bytes) fires even when it comes right away.
206
- rearmNeedInput(agentId) {
361
+ commitWatermark(entry) {
362
+ const commit = this.deps.commitNeedInputWatermark;
363
+ if (!commit || !entry.commitEnabled)
364
+ return;
365
+ // Fire-and-forget by design: memory seqs never roll back on a failed write —
366
+ // the manager-side retry queue owns persistence convergence.
367
+ void commit({
368
+ agentId: entry.agentId,
369
+ taskId: entry.taskId,
370
+ epoch: entry.epoch,
371
+ askSeq: entry.askSeq,
372
+ answeredSeq: entry.answeredSeq,
373
+ }).catch(() => undefined);
374
+ }
375
+ markAnswered(entry) {
376
+ if (entry.askSeq <= entry.answeredSeq)
377
+ return false;
378
+ entry.answeredSeq = entry.askSeq;
379
+ return true;
380
+ }
381
+ // The user submitted input through baxian's own channel — the open question
382
+ // (if any) counts as answered. Returns whether any entry watches this agent:
383
+ // when one does, the store fallback must NOT run (it would re-read a moving
384
+ // watermark and could confirm an ask that arrived after this input).
385
+ // Returns the tasks whose watermark actually absorbed this input. Entries are settled
386
+ // synchronously, before any await: a question printed while this runs must not be
387
+ // swallowed as if it had been answered.
388
+ async rearmNeedInput(agentId) {
389
+ const handled = new Set();
390
+ const commits = [];
207
391
  for (const entry of this.entries.values()) {
208
392
  if (entry.agentId !== agentId)
209
393
  continue;
210
- if (!entry.needInputFired)
394
+ // A commit-disabled (degraded) entry cannot persist the answer, so it must not
395
+ // count as handled — the store fallback has to run instead.
396
+ if (entry.commitEnabled)
397
+ handled.add(entry.taskId);
398
+ if (!this.markAnswered(entry))
211
399
  continue;
212
- entry.needInputFired = false;
213
- entry.needInputBuffer = '';
400
+ const commit = this.deps.commitNeedInputWatermark;
401
+ if (!commit || !entry.commitEnabled)
402
+ continue;
403
+ commits.push(commit({
404
+ agentId: entry.agentId,
405
+ taskId: entry.taskId,
406
+ epoch: entry.epoch,
407
+ askSeq: entry.askSeq,
408
+ answeredSeq: entry.answeredSeq,
409
+ }).catch(() => 'error'));
214
410
  }
411
+ await Promise.all(commits);
412
+ return handled;
215
413
  }
216
- scanNeedInput(entry, chunk, isSnapshot) {
217
- if (!entry.onNeedInput)
414
+ onAskSignal(entry, sig) {
415
+ if (sig.seq !== undefined) {
416
+ if (sig.seq <= entry.askSeq)
417
+ return;
418
+ entry.askSeq = sig.seq;
419
+ }
420
+ else {
421
+ // Bare legacy ask: trust it only when no question is open (idempotent while lit).
422
+ if (entry.askSeq > entry.answeredSeq)
423
+ return;
424
+ entry.askSeq += 1;
425
+ }
426
+ this.commitWatermark(entry);
427
+ }
428
+ onAnswerSignal(entry, sig) {
429
+ if (entry.askSeq <= entry.answeredSeq)
218
430
  return;
219
- // Snapshot content is ignored entirely (not even buffered). The persisted binding
220
- // flag alone carries pre-restart state: marking a scrollback literal as fired would
221
- // permanently swallow the next same-token ask when the user had already answered
222
- // before the restart, and a stale-but-still-open ask re-badges idempotently anyway.
223
- if (isSnapshot)
431
+ if (sig.seq !== undefined && sig.seq < entry.askSeq)
224
432
  return;
433
+ if (this.markAnswered(entry))
434
+ this.commitWatermark(entry);
435
+ }
436
+ scanNeedInput(entry, chunk, isSnapshot) {
437
+ // Snapshot asks and BARE answers stay blind (replaying them would relight or clear
438
+ // ambiguously), but a seq'd answer proves its numbered question was answered no
439
+ // matter when it was printed — this recovers a reply given while the server was
440
+ // down, which nothing else can carry (no ledger, no fallback, no live edge).
441
+ if (isSnapshot) {
442
+ // Seed the tail so a literal torn across the snapshot/live boundary still matches;
443
+ // the old/new region split keeps the seeded bytes from being applied twice.
444
+ entry.needInputBuffer = chunk.slice(-MATCH_BUFFER_CHARS);
445
+ if (!entry.snapshotReconcile)
446
+ return;
447
+ // A snapshot is a serialized framebuffer, not an output log: a TUI redraw can put
448
+ // later output on an earlier row, so screen position says nothing about time.
449
+ // Ordinals do — within one generation each question is asked once and confirmed
450
+ // once, so a literal's mere presence is the fact, wherever it sits.
451
+ let maxAsk = 0;
452
+ let maxAnswer = 0;
453
+ for (const sig of scanAskAnswerSignals(chunk)) {
454
+ if (sig.token !== entry.expectedToken || sig.seq === undefined)
455
+ continue;
456
+ if (sig.kind === 'ask')
457
+ maxAsk = Math.max(maxAsk, sig.seq);
458
+ else
459
+ maxAnswer = Math.max(maxAnswer, sig.seq);
460
+ }
461
+ const askSeq = Math.max(entry.askSeq, maxAsk);
462
+ const answeredSeq = Math.min(askSeq, Math.max(entry.answeredSeq, maxAnswer));
463
+ if (askSeq === entry.askSeq && answeredSeq === entry.answeredSeq)
464
+ return;
465
+ entry.askSeq = askSeq;
466
+ entry.answeredSeq = answeredSeq;
467
+ this.commitWatermark(entry);
468
+ return;
469
+ }
470
+ // Matches that end inside the old tail are rescans of already-processed bytes:
471
+ // applying them again would let a swallowed answer clear a later ask, while
472
+ // clearing the buffer instead would drop a torn next-ask prefix. Skipping them
473
+ // keeps both; genuinely new literals (even replayed by a redraw as fresh bytes)
474
+ // land in the new region and are handled by the seq watermark. The boundary is
475
+ // mapped through the COMBINED compact transform — compacting the tail on its own
476
+ // would misplace it whenever an escape/whitespace run straddles the chunk seam.
225
477
  const combined = entry.needInputBuffer + chunk;
478
+ const oldRegionLen = compactBoundaryIndex(combined, entry.needInputBuffer.length);
226
479
  entry.needInputBuffer = combined.slice(-MATCH_BUFFER_CHARS);
227
- if (entry.needInputFired)
228
- return;
229
- if (!scanNeedInputSignals(combined).some(s => s.token === entry.expectedToken))
230
- return;
231
- entry.needInputFired = true;
232
- entry.onNeedInput(true);
480
+ for (const sig of scanAskAnswerSignals(combined)) {
481
+ if (sig.token !== entry.expectedToken)
482
+ continue;
483
+ if (sig.index + sig.raw.length <= oldRegionLen)
484
+ continue;
485
+ if (sig.kind === 'ask')
486
+ this.onAskSignal(entry, sig);
487
+ else
488
+ this.onAnswerSignal(entry, sig);
489
+ }
233
490
  }
234
491
  onPaneData(entry, chunk, isSnapshot = false) {
235
492
  if (this.entries.get(entryKey(entry.taskId, entry.agentId)) !== entry)
@@ -259,9 +516,9 @@ export class PhaseSignalWatcher {
259
516
  entry.unsubscribe();
260
517
  }
261
518
  catch { }
262
- // Unconditional: a recovered watch may not have rebuilt needInputFired even though
263
- // the persisted badge is set — the phase signal ends the dispatch either way.
264
- entry.onNeedInput?.(false);
519
+ // The phase signal ends the dispatch: whatever question was open counts as closed.
520
+ if (this.markAnswered(entry))
521
+ this.commitWatermark(entry);
265
522
  const verdictAction = signal.kind === 'pr-approved' ? 'APPROVE'
266
523
  : signal.kind === 'pr-changes-requested' ? 'REQUEST_CHANGES'
267
524
  : undefined;
@@ -308,7 +565,8 @@ export class PhaseSignalWatcher {
308
565
  this.entries.delete(entryKey(entry.taskId, entry.agentId));
309
566
  if (entry.fired)
310
567
  return;
311
- entry.onNeedInput?.(false);
568
+ if (this.markAnswered(entry))
569
+ this.commitWatermark(entry);
312
570
  const kindsLabel = [...entry.expectedKinds].join(',');
313
571
  void this.emitInterventionFireAndForget({
314
572
  taskId: entry.taskId,
@@ -1 +1 @@
1
- {"version":3,"file":"phase-signal-watcher.js","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phase-signal-watcher.js","sourceRoot":"","sources":["../../src/agent/phase-signal-watcher.ts"],"names":[],"mappings":"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"}
@@ -52,9 +52,18 @@ export declare function decodeSignalActorId(actorB64: string): string | undefine
52
52
  export declare function scanPhaseSignals(text: string): PhaseSignal[];
53
53
  export interface NeedInputSignal {
54
54
  token: string;
55
+ seq?: number;
55
56
  raw: string;
57
+ index: number;
56
58
  }
59
+ export interface AskAnswerSignal extends NeedInputSignal {
60
+ kind: 'ask' | 'answer';
61
+ }
62
+ export declare function compactSignalText(text: string): string;
63
+ export declare function compactBoundaryIndex(text: string, rawBoundary: number): number;
57
64
  export declare function scanNeedInputSignals(text: string): NeedInputSignal[];
65
+ export declare function scanInputReceivedSignals(text: string): NeedInputSignal[];
66
+ export declare function scanAskAnswerSignals(text: string): AskAnswerSignal[];
58
67
  export interface ReadFileSignal {
59
68
  file: string;
60
69
  startLine: number;
@@ -1 +1 @@
1
- {"version":3,"file":"phase-signal.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,sBAAsB,GACtB,UAAU,GACV,gBAAgB,GAChB,WAAW,GACX,eAAe,GACf,WAAW,GACX,eAAe,GACf,YAAY,GACZ,YAAY,GACZ,UAAU,CAAC;AAEf,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAc/C,CAAC;AAEX,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,YAAY,GAAG,YAAY,CAAC,EAC3D,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC;AAqBV,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYxE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CA4B5D;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAOpE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAUlE"}
1
+ {"version":3,"file":"phase-signal.d.ts","sourceRoot":"","sources":["../../src/agent/phase-signal.ts"],"names":[],"mappings":"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"}
@@ -92,15 +92,73 @@ export function scanPhaseSignals(text) {
92
92
  found.sort((a, b) => a.index - b.index);
93
93
  return found.map(f => f.signal);
94
94
  }
95
- const NEED_INPUT_RE = new RegExp(`\\[bx:need-input:(${TOKEN_RANGE})\\]`, 'g');
96
- export function scanNeedInputSignals(text) {
97
- const compact = stripSignalAnsi(text).replace(/\s+/g, '');
95
+ const NEED_INPUT_RE = new RegExp(`\\[bx:need-input:(${TOKEN_RANGE})(?::(\\d{1,4}))?\\]`, 'g');
96
+ const INPUT_RECEIVED_RE = new RegExp(`\\[bx:input-received:(${TOKEN_RANGE})(?::(\\d{1,4}))?\\]`, 'g');
97
+ // The exact transform scans run on — exported so callers can convert raw-buffer
98
+ // boundaries into scan-text coordinates (old/new-region split in the watcher).
99
+ export function compactSignalText(text) {
100
+ return stripSignalAnsi(text).replace(/\s+/g, '');
101
+ }
102
+ function trackBoundaryThroughStrip(text, boundary, pattern) {
103
+ let out = '';
104
+ let mapped = boundary;
105
+ let last = 0;
106
+ for (const m of text.matchAll(pattern)) {
107
+ const start = m.index ?? 0;
108
+ const end = start + m[0].length;
109
+ out += text.slice(last, start);
110
+ if (boundary >= end)
111
+ mapped -= m[0].length;
112
+ else if (boundary > start)
113
+ mapped -= boundary - start;
114
+ last = end;
115
+ }
116
+ out += text.slice(last);
117
+ return { text: out, boundary: mapped };
118
+ }
119
+ // Maps a raw offset of `text` into compactSignalText(text) coordinates by tracking
120
+ // every stripped span. Compacting the prefix on its own would misplace the boundary
121
+ // whenever an ANSI/OSC escape or whitespace run straddles it (the joined text strips
122
+ // what the prefix alone cannot), and a shifted boundary misclassifies brand-new
123
+ // literals as already-scanned tail.
124
+ export function compactBoundaryIndex(text, rawBoundary) {
125
+ let state = { text, boundary: Math.max(0, Math.min(rawBoundary, text.length)) };
126
+ state = trackBoundaryThroughStrip(state.text, state.boundary, OSC_PATTERN);
127
+ state = trackBoundaryThroughStrip(state.text, state.boundary, ANSI_PATTERN);
128
+ state = trackBoundaryThroughStrip(state.text, state.boundary, /\s+/g);
129
+ return state.boundary;
130
+ }
131
+ function scanAskAnswer(text, re) {
132
+ const compact = compactSignalText(text);
98
133
  const out = [];
99
- for (const m of compact.matchAll(NEED_INPUT_RE)) {
100
- out.push({ token: m[1], raw: m[0] });
134
+ for (const m of compact.matchAll(re)) {
135
+ if (m[2] !== undefined) {
136
+ const seq = Number.parseInt(m[2], 10);
137
+ if (!Number.isFinite(seq) || seq < 1)
138
+ continue;
139
+ out.push({ token: m[1], seq, raw: m[0], index: m.index ?? 0 });
140
+ }
141
+ else {
142
+ out.push({ token: m[1], raw: m[0], index: m.index ?? 0 });
143
+ }
101
144
  }
102
145
  return out;
103
146
  }
147
+ export function scanNeedInputSignals(text) {
148
+ return scanAskAnswer(text, NEED_INPUT_RE);
149
+ }
150
+ export function scanInputReceivedSignals(text) {
151
+ return scanAskAnswer(text, INPUT_RECEIVED_RE);
152
+ }
153
+ // Document order matters across the two families: an answer swallowed while idle must
154
+ // not out-of-order clear an ask that appears after it in the same window.
155
+ export function scanAskAnswerSignals(text) {
156
+ const merged = [
157
+ ...scanNeedInputSignals(text).map(s => ({ ...s, kind: 'ask' })),
158
+ ...scanInputReceivedSignals(text).map(s => ({ ...s, kind: 'answer' })),
159
+ ];
160
+ return merged.sort((a, b) => a.index - b.index);
161
+ }
104
162
  const READ_FILE_RE = /\[bx:read-file:([^:\]]{1,512}):(\d{1,7})-(\d{1,7})\]/g;
105
163
  export function scanReadFileSignals(text) {
106
164
  const compact = stripSignalAnsi(text).replace(/\s+/g, '');