Fix remaining PTY and bundle watch races

Keep inherited child prompt markers bounded by the normal silence fallback. Stage web-plugin rescans atomically and retain missing watch state until a successful rebuild.
This commit is contained in:
Tianyi Cui
2026-07-25 00:33:33 +08:00
parent f9a638b8a6
commit 1d066e0f74
9 changed files with 158 additions and 37 deletions
+16 -1
View File
@@ -298,7 +298,7 @@ describe('LocalPtySession readiness and output', () => {
void operation.done.then(() => { settled = true })
inspector.pgid = 789
terminal.emitData('\x1b]133;D;0\x07dsh> ')
await vi.advanceTimersByTimeAsync(60)
await vi.advanceTimersByTimeAsync(40)
expect(settled).toBe(false)
inspector.pgid = 456
@@ -306,6 +306,21 @@ describe('LocalPtySession readiness and output', () => {
expect(settled).toBe(true)
expect((await operation.done).waitReason).toBe('stdin_read')
})
it('falls back to inferred idle when a foreground child emits an inherited prompt marker', async () => {
vi.useFakeTimers()
const terminal = new FakeTerminal()
const inspector = new FakeInspector()
const session = new LocalPtySession(terminal.asPty(), inspector, config())
await initialize(session, terminal)
const operation = session.startSend({ text: 'bash -i', submit: true })
inspector.pgid = 789
terminal.emitData('\x1b]133;D;0\x07child> ')
await vi.advanceTimersByTimeAsync(100)
expect((await operation.done).waitReason).toBe('inferred_idle')
})
})
describe('LocalPtySession bounds, signals, and teardown', () => {