fix(app): terminal no longer hangs on exit or ctrl + D and closes the pane (#9506)

This commit is contained in:
Rahul A Mistry
2026-01-20 21:12:20 +05:30
committed by GitHub
parent ac7e674a87
commit 01b12949e3
3 changed files with 31 additions and 0 deletions

View File

@@ -38,6 +38,21 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, sess
}),
)
sdk.event.on("pty.exited", (event) => {
const id = event.properties.id
if (!store.all.some((x) => x.id === id)) return
batch(() => {
setStore(
"all",
store.all.filter((x) => x.id !== id),
)
if (store.active === id) {
const remaining = store.all.filter((x) => x.id !== id)
setStore("active", remaining[0]?.id)
}
})
})
return {
ready,
all: createMemo(() => Object.values(store.all)),

View File

@@ -385,6 +385,19 @@ export default function Page() {
terminal.new()
})
createEffect(
on(
() => terminal.all().length,
(count, prevCount) => {
if (prevCount !== undefined && prevCount > 0 && count === 0) {
if (view().terminal.opened()) {
view().terminal.toggle()
}
}
},
),
)
createEffect(
on(
() => visibleUserMessages().at(-1)?.id,

View File

@@ -147,6 +147,9 @@ export namespace Pty {
log.info("session exited", { id, exitCode })
session.info.status = "exited"
Bus.publish(Event.Exited, { id, exitCode })
for (const ws of session.subscribers) {
ws.close()
}
state().delete(id)
})
Bus.publish(Event.Created, { info })