mirror of
https://github.com/stablyai/orca.git
synced 2026-09-23 08:02:31 +00:00
* docs: design SSH relay PTY backpressure * fix(ssh): bound relay frame decoding * fix(relay): bound PTY output publication * fix(ssh): bound PTY model admission * fix(ssh): settle closed model admissions * feat(ssh): negotiate bounded PTY consumer sessions * fix(ssh): fence exit on renderer settlement * feat(ssh): track PTY source credit end to end * fix(ssh): recover bounded PTY output across reconnect * feat(ssh): complete relay PTY output backpressure * fix(ssh): close final PTY source credit races * docs(ssh): record final backpressure validation * feat(ssh): complete relay PTY source-credit lifecycle * test(ssh): complete provider notification fixture * fix(ssh): preserve terminal source credit across rotation * fix(ssh): fail closed on recovery cancellation * fix(ssh): prioritize mux control writes after drain * fix(ssh): retire canceled relay restore deliveries * fix(ssh): order exit cancellation cleanup * fix(ssh): gate provisional source activation * test(ssh): register mux drain-priority coverage * fix(ssh): type stale owner recovery mismatches * fix(ssh): close projection replacement races * fix(relay): contain streaming edge failures * fix(ssh): secure relay endpoint credentials * docs(ssh): reconcile final backpressure lifecycle * fix(ssh): bound main IPC output lifecycle * fix(ssh): close recovery ownership gaps * docs(ssh): record exact artifact validation * fix(ssh): reject reclaimed snapshot replacements * fix(ssh): fence model admission across reconnect * fix(ssh): contain migration failure per PTY * docs(ssh): record final exact-head validation * test(ssh): align deploy fixtures with credential publication * feat(ssh): add per-target bounded output setting * fix(ssh): close source recovery review gaps * fix(ssh): latch source credit environment override * feat(ssh): make PTY source credit the default * docs(ssh): record always-on relay validation * docs(ssh): bind validation to current main * test(ssh): grant source credit in IPC fixture * test(ssh): grant source credit in fake relay --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import type { TerminalOutputSourceRange } from '../../../src/shared/terminal-output-source-range'
|
|
import { TerminalSourceRangeLedger } from '../../../src/main/runtime/rpc/terminal-source-range-ledger'
|
|
|
|
export type RemoteTerminalContractTopology = 'headed-desktop-server' | 'headless-serve'
|
|
|
|
export function createRemoteTerminalSourceRangeContractFixture(
|
|
topology: RemoteTerminalContractTopology
|
|
) {
|
|
const settled: TerminalOutputSourceRange[] = []
|
|
const transferred: TerminalOutputSourceRange[] = []
|
|
let generationCounter = 0
|
|
let active:
|
|
| {
|
|
generation: string
|
|
ledger: TerminalSourceRangeLedger
|
|
}
|
|
| undefined
|
|
|
|
return {
|
|
topology,
|
|
evidence: 'deterministic-contract-fixture' as const,
|
|
hostPtyIdentity: 'host-owned-pty',
|
|
connect() {
|
|
const generation = `${topology}:stream:${++generationCounter}`
|
|
active = { generation, ledger: new TerminalSourceRangeLedger(generation) }
|
|
return generation
|
|
},
|
|
accept(encodedBytes: number, ranges: readonly TerminalOutputSourceRange[]) {
|
|
const displayLength =
|
|
ranges.length > 0 ? ranges.at(-1)!.displayEnd - ranges[0]!.displayStart : 0
|
|
return active?.ledger.accept(encodedBytes, displayLength, ranges) ?? null
|
|
},
|
|
acknowledge(generation: string, ackedEndByte: number) {
|
|
if (!active) {
|
|
throw new Error('remote_terminal_fixture_disconnected')
|
|
}
|
|
const result = active.ledger.acknowledge(generation, ackedEndByte)
|
|
if (result.status === 'accepted') {
|
|
settled.push(...result.settled)
|
|
}
|
|
return result
|
|
},
|
|
detach() {
|
|
if (!active) {
|
|
return
|
|
}
|
|
const transfer = active.ledger.beginTransfer()
|
|
transferred.push(...transfer.frames.flatMap((frame) => frame.sourceRanges))
|
|
transfer.commit()
|
|
active = undefined
|
|
},
|
|
snapshot() {
|
|
return {
|
|
settled: settled.slice(),
|
|
transferred: transferred.slice(),
|
|
active: active?.ledger.getDebugSnapshot() ?? null
|
|
}
|
|
}
|
|
}
|
|
}
|