mirror of
https://github.com/stablyai/orca.git
synced 2026-10-21 00:03:46 +00:00
* fix(terminal): stop transient probe blips from erroring restored panes (STA-3536) terminal_pane_owner_unverified fired for every restored pane whenever one liveness probe answer went missing: a cold-start daemon draining an attach stampede misses the 2s getSize deadline, and a wedged superseded daemon (protocol upgrades leave them running) turns every unmapped fan-out probe null forever. - probePtyOwners now skips legacy daemons whose startup inventory listing succeeded: fresh sessions never route to them, so they provably don't own an unmapped id and one wedged zombie can't poison every pane's verdict. - attachStablePaneOwner retries the probe over a short backoff ladder before surfacing unverified, so a single missed deadline resolves to a verdict. - The renderer replaces the raw error code with actionable copy. * fix(terminal): stop retrying definitive owner probes * fix(terminal): recover live panes after renderer restart * refactor(terminal): share owner resolution abort guard
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
// Error classes shared across the daemon protocol boundary (client, server,
|
|
// host). Split from types.ts, which is capped for wire-shape declarations.
|
|
export class TerminalAttachCanceledError extends Error {
|
|
constructor(sessionId: string) {
|
|
super(`Attach canceled for session ${sessionId}`)
|
|
this.name = 'TerminalAttachCanceledError'
|
|
}
|
|
}
|
|
|
|
export class DaemonProtocolError extends Error {
|
|
constructor(message: string) {
|
|
super(message)
|
|
this.name = 'DaemonProtocolError'
|
|
}
|
|
}
|
|
|
|
export class SessionNotFoundError extends Error {
|
|
constructor(sessionId: string) {
|
|
super(`Session not found: ${sessionId}`)
|
|
this.name = 'SessionNotFoundError'
|
|
}
|
|
}
|
|
|
|
export class TerminalSessionOwnerUnverifiedError extends Error {
|
|
constructor(sessionId: string) {
|
|
super(`Terminal session owner could not be verified: ${sessionId}`)
|
|
this.name = 'TerminalSessionOwnerUnverifiedError'
|
|
}
|
|
}
|
|
|
|
export function decodeDaemonResponseError(message: string): Error {
|
|
const prefix = 'Session not found: '
|
|
return message.startsWith(prefix)
|
|
? new SessionNotFoundError(message.slice(prefix.length))
|
|
: new DaemonProtocolError(message)
|
|
}
|