Skip to content

TtyReadable

Defined in: packages/core/src/kernel/types.ts:894

A terminal-backed Readable with tab-completion registration.

Implement on any Readable that represents a terminal (ldisc-backed stdin) and wants to accept tab-completion providers from the shell.

The shell checks isTtyReadable(proc.stdin) at startup and calls setCompletionProvider() to wire its own completer in — self-discovery instead of boot-path injection.

import type { TtyReadable, CompletionProvider } from '@fishnet/core'
let provider: CompletionProvider | undefined
const stdin: TtyReadable = {
isTty: true,
setCompletionProvider(p) { provider = p },
async read() { return new Uint8Array(0) },
async *[Symbol.asyncIterator]() { yield '' },
}
  • Readable

readonly isTty: true

Defined in: packages/core/src/kernel/types.ts:895

True when this stream is backed by a terminal device (line discipline). Shell uses this to decide whether to write PS1 prompt itself.

Readable.isTty

[asyncIterator](): AsyncIterator<string>

Defined in: packages/core/src/kernel/types.ts:840

AsyncIterator<string>

Readable.[asyncIterator]


read(count?, signal?): Promise<Uint8Array<ArrayBufferLike>>

Defined in: packages/core/src/kernel/types.ts:841

number

AbortSignal

Promise<Uint8Array<ArrayBufferLike>>

Readable.read


setCompletionProvider(provider): void

Defined in: packages/core/src/kernel/types.ts:902

Register a completion provider. Called by the shell at startup.

CompletionProvider

void

Replaces any previously registered provider — only one provider is active at a time; last caller wins


optional tryRead(count?): Uint8Array

Defined in: packages/core/src/kernel/types.ts:860

Return immediately with buffered data, or empty Uint8Array if nothing available. Synchronous — no waiting.

Semantics:

  • Returns whatever is currently buffered, up to count bytes
  • May return fewer than count bytes (partial data is normal)
  • Empty Uint8Array (byteLength === 0) means “nothing buffered right now” — this is NOT EOF. EOF is signaled by read() resolving to empty.
  • Never blocks, never waits for I/O

Implementation note: intended for platform adapters (nodeTty). Kernel-internal Readable implementations (pipe-backed, fd-backed) SHOULD NOT implement this — doing so would cause readAllStdin to drain pipe content before the WASM program can process it incrementally.

Adapters SHOULD return empty in line mode and only return buffered data in raw mode.

number

Uint8Array

Readable.tryRead