855 lines
31 KiB
TypeScript
855 lines
31 KiB
TypeScript
/**
|
||
* Stable shapes for custom kernels and `/bin` utilities (best-effort; full `ctx` is assembled in `index.js`).
|
||
* Match `BARE_OS_CTX_API_VERSION` in `bare-os-ctx-api.js` (stock **1.57.0**).
|
||
*/
|
||
|
||
export interface BareOsAbortOpts {
|
||
signal?: AbortSignal | null
|
||
timeoutMs?: number | null
|
||
}
|
||
|
||
export interface BareOsResourceStatus {
|
||
ctxApiVersion: string
|
||
pipeline: {
|
||
maxStages: number
|
||
maxBytes: number
|
||
maxLines: number
|
||
}
|
||
execMaxDepth: number
|
||
ipc: Record<string, unknown>
|
||
session: {
|
||
execLineCount: number
|
||
pipelineBytesTotal: number
|
||
execLineWallMsTotal?: number
|
||
}
|
||
peers: number
|
||
}
|
||
|
||
export interface BareOsIpc {
|
||
create(name: string): void
|
||
has(name: string): boolean
|
||
list(): string[]
|
||
remove(name: string): void
|
||
push(name: string, buf: Uint8Array | ArrayBuffer): void
|
||
take(name: string): Promise<Uint8Array>
|
||
pushJson(
|
||
name: string,
|
||
obj: Record<string, unknown>,
|
||
pushOpts?: { token?: string }
|
||
): void
|
||
takeJson(name: string): Promise<Record<string, unknown>>
|
||
fanoutPublish(name: string, buf: Uint8Array | ArrayBuffer): void
|
||
fanoutSubscribe(name: string): {
|
||
take: () => Promise<Uint8Array>
|
||
dispose: () => void
|
||
}
|
||
fanoutSubscriberCount(name: string): number
|
||
stats(): {
|
||
channelCount: number
|
||
queuedBytesTotal: number
|
||
fanoutTopicCount: number
|
||
fanoutSubscribersTotal: number
|
||
}
|
||
createDuplexBridge(baseName: string): {
|
||
left: {
|
||
push: (buf: Uint8Array | ArrayBuffer) => void
|
||
take: () => Promise<Uint8Array>
|
||
}
|
||
right: {
|
||
push: (buf: Uint8Array | ArrayBuffer) => void
|
||
take: () => Promise<Uint8Array>
|
||
}
|
||
}
|
||
duplexJsonRoundTrip(
|
||
baseName: string,
|
||
payload: Record<string, unknown>,
|
||
opts?: { timeoutMs?: number }
|
||
): Promise<Record<string, unknown>>
|
||
}
|
||
|
||
export interface BareOsHostStats {
|
||
hostname: string
|
||
loadavg: number[]
|
||
cpus: unknown[]
|
||
networkInterfaces: Record<string, unknown>
|
||
}
|
||
|
||
/** Minimal `ctx` surface for typing `run(ctx, argv)` and `start(ctx)`. */
|
||
/** Eleven `uint32` capability words keyed by wire v2 semantic names (`primary`, `extendedSeedingPlatform`, …). */
|
||
export type BareOsKernelCapabilityWordMap = Readonly<Record<string, number>>
|
||
|
||
export interface BareOsKernelContext {
|
||
bareOsCtxApiVersion: string
|
||
/** Frozen stock-derived masks this session advertises (guest VFS / policy); keys match `kernelCapabilityWords` on the seed wire. */
|
||
bareOsAdvertisedKernelCapabilityWords?: BareOsKernelCapabilityWordMap
|
||
/** Last seed handshake words, or `null` when unavailable / error; same key layout as `bareOsAdvertisedKernelCapabilityWords`. */
|
||
bareOsSeedKernelCapabilityWords?: BareOsKernelCapabilityWordMap | null
|
||
bareOsBooterPackageVersion?: string
|
||
bareOsProtocolPackageVersion?: string
|
||
bareOsPearRuntimeVersion?: string
|
||
bareOsBareRuntimeVersion?: string
|
||
bareOsSystemRevision?: Readonly<{
|
||
currentId: string
|
||
pendingId: string
|
||
slot: string
|
||
}>
|
||
bareOsRegisterSuspendHook(fn: () => void | Promise<void>): () => void
|
||
bareOsRegisterResumeHook(fn: () => void | Promise<void>): () => void
|
||
bareOsInvokeSuspendHooks(): Promise<void>
|
||
bareOsInvokeResumeHooks(): Promise<void>
|
||
bareOsRequestKernelReload(): void
|
||
bareOsRequestKernelProfileReload?(): void
|
||
bareOsRunImageScript?(path: string): Promise<void>
|
||
bareOsRuntimeCaps: Readonly<Record<string, unknown>>
|
||
env: Record<string, string>
|
||
vfs: {
|
||
readFile(
|
||
path: string,
|
||
abortOpts?: BareOsAbortOpts
|
||
): Promise<Uint8Array | null>
|
||
writeFile(
|
||
path: string,
|
||
buf: Uint8Array,
|
||
opts?: { executable?: boolean } & BareOsAbortOpts
|
||
): Promise<unknown>
|
||
[key: string]: unknown
|
||
}
|
||
console: Console
|
||
b4a: { toString(buf: Uint8Array, enc?: string): string }
|
||
exitCode?: number
|
||
execLine(line: string, opts?: BareOsAbortOpts): Promise<string>
|
||
readLine(
|
||
prompt?: string,
|
||
opts?: BareOsAbortOpts & { mask?: boolean }
|
||
): Promise<string | null>
|
||
runBinCommand(argv: string[], opts?: BareOsAbortOpts): Promise<unknown>
|
||
/**
|
||
* Set by the shell when this **`/bin`** command’s stdout is **captured** (pipeline to the next stage, or **`>`** / **`>>`** on the last stage).
|
||
* Utilities may emit **one record per line** instead of multi-column text (e.g. **`ls`**).
|
||
*/
|
||
bareOsStdoutCaptured?: boolean
|
||
/**
|
||
* When true (SSH PTY child contexts), utilities that raw-write **`replStdout`** should emit CRLF newlines like **`bareOpensshWritePtyConsoleLine`** so streaming output (e.g. **`agent`**) displays line-by-line.
|
||
*/
|
||
bareOsPtyStdoutCrlf?: boolean
|
||
/** Optional raw output hook for NUL/binary (e.g. **`printenv -0`**, **`find -print0`**) when **`process.stdout.write`** is unavailable. */
|
||
bareOsBinWrite?(chunk: Uint8Array | string): void
|
||
bareOsIpc?: BareOsIpc
|
||
bareOsGetResourceStatus(): BareOsResourceStatus
|
||
bareOsReadProcMetricsLive(): Record<string, unknown>
|
||
/** Swarm chat (`bare-os-chat-v1`); host booter when `BARE_OS_PROTOMUX_CHAT_CHANNEL` is on. */
|
||
bareOsChatSend?(line: string): { ok: boolean; reason?: string }
|
||
/** Subscribe to decoded chat events (see `bare-os-chat-service`). */
|
||
bareOsChatSubscribe?(
|
||
fn: (ev: Record<string, unknown>) => void
|
||
): () => void
|
||
/** Recent decoded chat events (ring buffer on host; optional max length 1–10000, default 512). */
|
||
bareOsChatHistory?(limit?: number): Record<string, unknown>[]
|
||
/** Best-effort presence map (extensible). */
|
||
bareOsChatPresence?(): Record<string, unknown>
|
||
/** Room id list (v1: `general` only). */
|
||
bareOsChatRooms?(): string[]
|
||
/** Same payload as `/proc/bare_os/chat.json` without a VFS read (host booter). */
|
||
bareOsChatProcSnapshot?(): Record<string, unknown>
|
||
/** Meshdrop frame send over dedicated `bare-os-meshdrop-v1` channel. */
|
||
bareOsMeshdropSend?(frame: Record<string, unknown>): {
|
||
ok: boolean
|
||
reason?: string
|
||
}
|
||
/** Subscribe to meshdrop envelopes. */
|
||
bareOsMeshdropSubscribe?(
|
||
fn: (ev: Record<string, unknown>) => void
|
||
): () => void
|
||
/** Recent meshdrop envelopes (ring buffer on host; optional max length). */
|
||
bareOsMeshdropHistory?(limit?: number): Record<string, unknown>[]
|
||
bareOsReadReplicationOperatorJson?(): Promise<Record<string, unknown> | null>
|
||
bareOsInvalidateWarmReadCaches?(
|
||
reason?: string
|
||
): { ok: boolean; reason: string }
|
||
bareOsInvalidateWarmReadCachesFromBareManifestJson?(
|
||
buf: Uint8Array | ArrayBuffer
|
||
): { ok: boolean }
|
||
/**
|
||
* Set by fish readline when the TTY editor is active; reloads **`~/.bare/repl_history_<USER>`** after **`login`/`logout`**.
|
||
*/
|
||
bareOsReloadFishHistoryForIdentity?(): Promise<void>
|
||
/** Optional Hyperbee2 index operator hint (P2P metadata; host/extension scoped). */
|
||
bareOsHyperbeeGuestHint?(): Record<string, unknown>
|
||
/**
|
||
* Optional batch `/proc/bare_os/*` read for baretop(1); keys match baretop-snapshot preamble.
|
||
*/
|
||
bareOsReadBareTopSnapshot?(): Promise<{
|
||
atMs: number
|
||
files: Record<string, string>
|
||
}>
|
||
bareOsRegisterVirtualFile(
|
||
name: string,
|
||
reader:
|
||
| (() => string | Uint8Array | Promise<string | Uint8Array>)
|
||
| { read: () => string | Uint8Array | Promise<string | Uint8Array> },
|
||
opts?: { etag?: string; mime?: string; ttlMs?: number }
|
||
): void
|
||
bareOsInvalidateVirtualFile(name: string): void
|
||
bareOsUpdateVirtualFileMeta(
|
||
name: string,
|
||
patch: { etag?: string; version?: number }
|
||
): void
|
||
bareOsRegisterBootStepHook(
|
||
step: string,
|
||
fn: (ev: Record<string, unknown>) => void | Promise<void>
|
||
): () => void
|
||
/** @deprecated Use bareOsRegisterBootStepHook */
|
||
bareOsRegisterBootPhaseHook(
|
||
phase: string,
|
||
fn: (ev: Record<string, unknown>) => void | Promise<void>
|
||
): () => void
|
||
bareOsInvokeBootStepHooks(ev: Record<string, unknown>): Promise<void>
|
||
/** @deprecated Use bareOsInvokeBootStepHooks */
|
||
bareOsInvokeBootPhaseHooks(ev: Record<string, unknown>): Promise<void>
|
||
bareOsSandboxRunScript(
|
||
source: string,
|
||
argv?: string[],
|
||
opts?: BareOsAbortOpts
|
||
): Promise<void>
|
||
bareOsBootFileSha256Hex(buf: Uint8Array | ArrayBuffer): string
|
||
bareOsVerifyBootManifestSignature(
|
||
manifestBytes: Uint8Array | ArrayBuffer | null | undefined,
|
||
signatureBytes: Uint8Array | ArrayBuffer | null | undefined,
|
||
publicKeyHex?: string
|
||
): boolean
|
||
bareOsVerifyPathCapabilityEnvelope(envelope: unknown):
|
||
| { ok: true; payload: { prefix: string; ops: string[]; expMs: number | null } }
|
||
| { ok: false; reason: string }
|
||
bareOsVerifyPathCapabilityEnvelopeTrusted?(envelope: unknown):
|
||
| { ok: true; payload: { prefix: string; ops: string[]; expMs: number | null } }
|
||
| { ok: false; reason: string }
|
||
bareOsRequestMirror(opts?: {
|
||
key?: string
|
||
label?: string
|
||
}): Promise<{ ok: boolean; hint: string }>
|
||
bareOsExportPersonalSnapshot(opts?: {
|
||
label?: string
|
||
}): Promise<{ ok: boolean; hint: string }>
|
||
bareOsPearIpcEmit(channel: string, payload: Record<string, unknown>): boolean
|
||
bareOsEmitBlindPeerHint?(payload?: Record<string, unknown>): {
|
||
ok: boolean
|
||
}
|
||
bareOsPearUpdaterDelegate?(
|
||
opts?: Record<string, unknown>
|
||
): Promise<{
|
||
ok: boolean
|
||
code?: string
|
||
phase?: string
|
||
source?: string
|
||
note?: string
|
||
snapshot?: Record<string, unknown>
|
||
error?: string
|
||
version?: string
|
||
[key: string]: unknown
|
||
}>
|
||
bareOsEmitHyperdhtBootstrapRefresh?(addrs?: string[]): boolean
|
||
bareOsEmitBundlebeeHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitStructuredCloneCap?(opts?: {
|
||
maxDepth?: number
|
||
maxKeys?: number
|
||
}): boolean
|
||
bareOsProtomuxChannelAlias?(
|
||
logicalName: string,
|
||
actualName: string
|
||
): boolean
|
||
bareOsProtomuxAliasRegistrySnapshot?(): Record<string, unknown>
|
||
bareOsRunCurlCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunWgetCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunOpensslCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunSshCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunSshKeygenCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunTarCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunSystemctlCli?(argv: string[]): Promise<unknown>
|
||
bareOsRunHolesailCli?(argv: string[]): Promise<unknown>
|
||
bareOsRegisterBareDiagnosticsTap?(
|
||
fn: (ev: Record<string, unknown>) => void
|
||
): () => void
|
||
bareOsEmitPearStageHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsBareModuleResolveProbe?(
|
||
spec?: string
|
||
): { ok: boolean; note?: string }
|
||
bareOsBareCryptoCapProbe?(): {
|
||
version: string | null
|
||
note?: string
|
||
}
|
||
bareOsPearUpdaterChannel?(): { channel: string; note?: string }
|
||
bareOsEmitDriveResolveHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsRegisterBareDiagnosticsTapV2?(
|
||
fn: (ev: Record<string, unknown>) => void
|
||
): () => void
|
||
bareOsEmitPearMessageSketch?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitTrybootSlot?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitMultisigPointer?(payload?: Record<string, unknown>): boolean
|
||
bareOsBareStorageHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitPearDoctorHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsPearInspectProbe?(payload?: {
|
||
depth?: number
|
||
}): { ok: boolean; depth?: number; note?: string }
|
||
bareOsEmitBareBootStepHint?(payload?: Record<string, unknown>): boolean
|
||
/** @deprecated Use bareOsEmitBareBootStepHint */
|
||
bareOsEmitBareBootPhaseHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsBareRpcCapProbe?(): { ok: boolean; note?: string }
|
||
bareOsEmitPearStampPointer?(payload?: Record<string, unknown>): boolean
|
||
bareOsRegisterBareLoggerTap?(
|
||
fn: (ev: Record<string, unknown>) => void
|
||
): () => void
|
||
bareOsEmitAutobaseDiscoveryHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitBlindPairingSketch?(payload?: Record<string, unknown>): boolean
|
||
bareOsBareStreamBackpressureHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsPearTerminalCapsProbe?(): { ok: boolean; note?: string }
|
||
bareOsEmitHypercoreReplicateBudget?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitDriveVersionGraph?(payload?: Record<string, unknown>): boolean
|
||
bareOsEmitProtomuxBackpressure?(payload?: Record<string, unknown>): boolean
|
||
bareOsPearRuntimeMatrixProbe?(): { ok: boolean; note?: string }
|
||
bareOsBundlePreloadHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsAutopassRotationSketch?(payload?: Record<string, unknown>): boolean
|
||
bareOsHrpcAllowlistProbe?(): { ok: boolean; note?: string }
|
||
bareOsSidecarResourceCap?(payload?: Record<string, unknown>): boolean
|
||
bareOsGitLfsBudgetProbe?(): { ok: boolean; note?: string }
|
||
bareOsNetQosClass?(payload?: Record<string, unknown>): boolean
|
||
bareOsStorageTierHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsIndexerCatchupProbe?(): { ok: boolean; note?: string }
|
||
bareOsMultisigQuorumPointer?(payload?: Record<string, unknown>): boolean
|
||
bareOsRelayGeoHint?(payload?: Record<string, unknown>): boolean
|
||
bareOsBarePackCacheProbe?(): { ok: boolean; note?: string }
|
||
bareOsBareAddonPolicyProbe?(): { ok: boolean; note?: string }
|
||
bareOsBareSignalsProfile?(payload?: Record<string, unknown>): boolean
|
||
bareOsBareTimersHistogram?(payload?: Record<string, unknown>): boolean
|
||
/** Session `HOSTNAME` / `COMPUTERNAME` when `BARE_OS_HOSTNAME_SET=1`. */
|
||
bareOsSetSessionHostname?(name: string): { ok: true; hostname: string }
|
||
bareOsHrpcRequest?(
|
||
service: string,
|
||
method: string,
|
||
payload?: Record<string, unknown>
|
||
): Promise<unknown>
|
||
bareOsHostCapability?(name: string): boolean
|
||
/** Namespaced kernel event bus (subscribe before boot phases if needed). */
|
||
bareOsSubscribeKernelEvent?(
|
||
fn: (ev: Record<string, unknown>) => void | Promise<void>
|
||
): () => void
|
||
/** Emit structured kernel events to subscribers and diagnostics taps. */
|
||
bareOsEmitKernelEvent?(ev: Record<string, unknown>): void
|
||
bareOsSwarmConnectionManager?: {
|
||
noteProbe(peerKey: string, ok: boolean): void
|
||
score(peerKey: string): number
|
||
snapshot(): Record<string, unknown>
|
||
}
|
||
bareOsSubscribeEventBus?(
|
||
fn: (ev: Record<string, unknown>) => void | Promise<void>
|
||
): () => void
|
||
bareOsEmitEventBus?(ev: Record<string, unknown>): void
|
||
/** Opaque key-handle registry (TTL / max uses); no raw key bytes in guest. */
|
||
bareOsAcquireKeyHandle?(hint?: {
|
||
purpose?: string
|
||
algorithm?: string
|
||
ttlMs?: number
|
||
scopes?: string[]
|
||
maxUses?: number
|
||
}): {
|
||
handle: string
|
||
algorithm: string
|
||
atMs: number
|
||
ttlMs: number | null
|
||
scopes: string[]
|
||
zeroizeAfterMs: number | null
|
||
}
|
||
bareOsReleaseKeyHandle?(handleId: string): void
|
||
bareOsTouchKeyHandle?(handleId: string): boolean
|
||
bareOsAuditLogAppend?(
|
||
entry: Record<string, unknown>
|
||
): { seq: number; entryHash: string; prevHash: string | null } | null
|
||
bareOsAuditLogAppendBatch?(
|
||
entries: Record<string, unknown>[]
|
||
): { seq: number; entryHash: string; prevHash: string | null } | null
|
||
bareOsAclEvaluate?(
|
||
subject: { user?: string; groups?: string[]; caps?: string[] },
|
||
resource: { path?: string; pathClass?: string },
|
||
rules: Array<{
|
||
id?: string
|
||
effect: 'allow' | 'deny'
|
||
users?: string[]
|
||
groups?: string[]
|
||
caps?: string[]
|
||
pathPrefix?: string
|
||
pathClass?: string
|
||
}>
|
||
): Record<string, unknown>
|
||
bareOsMetricInc?(name: string, delta?: number): void
|
||
bareOsHostCapabilityProfile?(): Record<string, unknown>
|
||
bareOsReadProcessTable?(): Record<string, unknown>
|
||
bareOsAppendLoggerRecord?(rec: Record<string, unknown>): Promise<void>
|
||
bareOsSendSignal?(
|
||
target: number | string,
|
||
signal?: string
|
||
): {
|
||
ok: boolean
|
||
pid: number
|
||
signal: string
|
||
delivered: boolean
|
||
exists?: boolean
|
||
ignored?: boolean
|
||
atMs?: number
|
||
}
|
||
/** Logical nice (-20..19) for synthetic PIDs; surfaced on `process_table.json`. */
|
||
bareOsRenice?(
|
||
pid: number,
|
||
delta?: number
|
||
): {
|
||
ok: boolean
|
||
pid: number
|
||
delta: number
|
||
nice: number
|
||
previousNice: number
|
||
atMs: number
|
||
}
|
||
/** FD → logical VFS/IPC target; see `/proc/bare_os/syscalls.json` fdModel. */
|
||
bareOsLogicalFds?: Record<string, string>
|
||
/** `fcntl` F_SETFL bits (O_APPEND | O_NONBLOCK) per decimal fd key. */
|
||
bareOsLogicalFdFlags?: Record<string, number>
|
||
/** Shell `trap` COMMAND → SIGNAL map (logical; delivery is synthetic). */
|
||
shellTrapHandlers?: Record<string, string>
|
||
bareOsLogicalSigaction?: Record<string, string>
|
||
bareOsHostSubprocessJobs?: Record<string, unknown>[]
|
||
bareOsAppendVaultRotationCheckpoint?(
|
||
row: Record<string, unknown>
|
||
): Promise<void>
|
||
/**
|
||
* Host child bridge; kernel-runner may honor `BARE_OS_BARE_SUBPROCESS_BRIDGE` and
|
||
* default timeouts from `BARE_OS_BARE_SUBPROCESS_TIMEOUT_MS` for `runBin` when unset.
|
||
*/
|
||
bareOsTrySpawnHostSubprocess?(
|
||
argv: string[],
|
||
opts?: Record<string, unknown>
|
||
): Promise<
|
||
| { ok: true; child: unknown; backend?: string }
|
||
| {
|
||
ok: false
|
||
reason: string
|
||
errorCode?: string
|
||
causeName?: string
|
||
}
|
||
>
|
||
bareOsRegisterLogicalFd?(fd: number, target: string): void
|
||
bareOsUnregisterLogicalFd?(fd: number): void
|
||
bareOsPosixFdSimEnabled?(): boolean
|
||
bareOsPosixFdSimPipe?(): {
|
||
readFd: number
|
||
writeFd: number
|
||
pairId: number
|
||
} | null
|
||
bareOsPosixFdSimDup?(fd: number): number | null
|
||
bareOsPosixFdSimWrite?(
|
||
writeFd: number,
|
||
data: string | Uint8Array
|
||
): { ok: boolean; bytes?: number; reason?: string }
|
||
bareOsPosixFdSimRead?(
|
||
readFd: number,
|
||
maxBytes?: number
|
||
): { ok: boolean; data?: string; eof?: boolean; reason?: string }
|
||
bareOsPosixPollProbe?(spec?: {
|
||
fds?: Array<{ fd: number; events?: string }>
|
||
timeoutMs?: number
|
||
}): {
|
||
ok: true
|
||
ready: Array<{ fd: number; revents: string }>
|
||
waitedMs: number
|
||
}
|
||
bareOsPosixPoll?(spec?: {
|
||
fds?: Array<{ fd: number; events?: string }>
|
||
timeoutMs?: number
|
||
}): Promise<{
|
||
ok: true
|
||
ready: Array<{ fd: number; revents: string }>
|
||
waitedMs: number
|
||
timedOut?: boolean
|
||
pollClock?: 'monotonic_hrtime' | 'Date_now'
|
||
}>
|
||
bareOsSigaction?(
|
||
signal: string,
|
||
mode: 'IGNORE' | 'DEFAULT' | 'IGN' | 'DEF'
|
||
): { ok: boolean; signal: string; mode: string }
|
||
bareOsPathconf?(path: string, name: string): number
|
||
/** Dynamic **`_SC_*`** values for **`getconf`** (e.g. **`_SC_NPROCESSORS_ONLN`** from **`BARE_OS_NPROC`**). */
|
||
bareOsGetconfSysconf?(name: string): string | number | null
|
||
bareOsSyscall?(
|
||
op: string,
|
||
args?: Record<string, unknown>
|
||
): Promise<unknown>
|
||
bareOsTelnetConnect?(
|
||
host: string,
|
||
port: number,
|
||
opts?: { family?: number; connectTimeoutMs?: number }
|
||
): unknown
|
||
bareOsSummonEval?(code: string, sandbox?: Record<string, unknown>): unknown
|
||
bareOsTlsConnect?(
|
||
host: string,
|
||
port: number,
|
||
opts?: {
|
||
family?: number
|
||
connectTimeoutMs?: number
|
||
servername?: string
|
||
rejectUnauthorized?: boolean
|
||
connect?: (opts: Record<string, unknown>) => unknown
|
||
}
|
||
): unknown
|
||
bareOsIrcHostAllowed?(host: string): { ok: boolean; reason?: string }
|
||
bareOsIrcPlaintextAllowed?(
|
||
host: string,
|
||
opts?: { tls?: boolean; insecurePlain?: boolean }
|
||
): { ok: boolean; reason?: string }
|
||
bareOsIrcPresencePublish?(rec: Record<string, unknown>): boolean
|
||
bareOsIrcShadowOpen?(name: string): { ok: boolean; name: string }
|
||
bareOsEvaluatePeerAdmission?(
|
||
peerKeyHex: string,
|
||
meta?: { dhtAddressClass?: string; caps?: string[] }
|
||
): Record<string, unknown>
|
||
/** Non-secret Pear runtime snapshot from **`BARE_OS_PEAR_RUNTIME_SNAPSHOT_JSON`** (parse errors → **`null`**). */
|
||
bareOsReadPearRuntimeSnapshotJson?(): Record<string, unknown> | null
|
||
bareOsPrioritizeReplicationPaths?(paths: string[]): string[]
|
||
bareOsVfsBatchWrite?(
|
||
puts: {
|
||
path: string
|
||
buf: Uint8Array | ArrayBuffer
|
||
opts?: Record<string, unknown>
|
||
}[]
|
||
): Promise<void>
|
||
bareOsHyperdriveDiffCollect?(
|
||
a: unknown,
|
||
b: unknown,
|
||
opts?: { maxEntries?: number; diffOpts?: Record<string, unknown> }
|
||
): Promise<{
|
||
ok: boolean
|
||
entries?: unknown[]
|
||
truncated?: boolean
|
||
error?: string
|
||
}>
|
||
bareOsEvalPathCapabilityLabel?(logicalPath: string): {
|
||
path: string
|
||
pathClass: string
|
||
labels: string[]
|
||
}
|
||
bareOsMirrorDriveExportSketch?(): { schema: number; note: string }
|
||
bareOsCorestoreSnapshotHint?(): Record<string, unknown>
|
||
bareOsReadHrtimeSnapshot?(): Record<string, unknown>
|
||
bareOsListMirrorMounts?(): {
|
||
schema: number
|
||
count: number
|
||
mounts: Array<{ path: string; index: number; readOnly: boolean }>
|
||
mirrorDriveHint?: { schema: number; note: string; dedupOperatorEnv?: string }
|
||
atMs: number
|
||
}
|
||
/** Corestore snapshot-style hints (same object as `/proc/bare_os/snapshot_hints.json`). */
|
||
bareOsReadSnapshotHintsJson?(): Record<string, unknown>
|
||
/** Protomux extension registry mirror (`/proc/bare_os/protomux_extensions.json`); gated by env. */
|
||
bareOsReadProtomuxExtensionsJson?(): Record<string, unknown>
|
||
bareOsVaultAuditSummary?(): {
|
||
schema: number
|
||
identityState: string
|
||
hasPublicKey: boolean
|
||
atMs: number
|
||
}
|
||
bareOsWasmKernelCompile?(
|
||
buf: Uint8Array | ArrayBuffer,
|
||
opts?: { maxBytes?: number }
|
||
): Promise<{
|
||
ok: boolean
|
||
reason?: string
|
||
exportNames?: string[]
|
||
}>
|
||
bareOsWasmKernelInstantiate?(
|
||
buf: Uint8Array | ArrayBuffer,
|
||
opts?: {
|
||
maxBytes?: number
|
||
memoryInitialPages?: number
|
||
memoryMaxPages?: number
|
||
timeoutMs?: number
|
||
}
|
||
): Promise<{
|
||
ok: boolean
|
||
reason?: string
|
||
exportNames?: string[]
|
||
instance?: WebAssembly.Instance
|
||
memory?: WebAssembly.Memory
|
||
memoryInitialPages?: number
|
||
memoryMaxPages?: number
|
||
/** Set when `BARE_OS_WASM_KERNEL_MONOTONIC_MS` wires `env.bare_os_monotonic_ms`. */
|
||
wasmMonotonicMsImport?: boolean
|
||
}>
|
||
bareOsRegisterKernelExtensionRecord?(rec: {
|
||
dropin: string
|
||
script: string
|
||
semver?: string
|
||
capabilities?: string[]
|
||
id?: string
|
||
dependsOn?: string[]
|
||
signaturePointer?: string
|
||
/** Wall ms for script execution (schema 9 `/proc/bare_os/extensions.json`). */
|
||
loadMs?: number
|
||
}): void
|
||
bareOsReadDelegateFairnessSnapshot?(): Record<string, unknown>
|
||
bareOsReadSubprocessBridgeJobs?(): unknown[]
|
||
bareOsReadSubprocessBridgeSnapshot?(): Record<string, unknown>
|
||
bareOsIsCtxMethodAllowed?(name: string): boolean
|
||
bareOsEmitIpcAudit?(ev: Record<string, unknown>): void
|
||
bareOsRequestPearReload(opts?: { persistRequest?: boolean }): Promise<{
|
||
requested: boolean
|
||
hint: string
|
||
env: string[]
|
||
}>
|
||
bareOsHostStats?: Readonly<BareOsHostStats>
|
||
/**
|
||
* Local QVAC (QuantumVerse Automatic Computer) bridge — in-process `@qvac/sdk` on Bare.
|
||
* Disabled when `BARE_OS_SKIP_QVAC=1`. Used by `/bin/agent` when `backend` is `qvac`.
|
||
*/
|
||
bareOsQvacAvailable?(): boolean
|
||
bareOsQvacStatus?(): {
|
||
available: boolean
|
||
status: string
|
||
modelId: string | null
|
||
loadedModelKey: string | null
|
||
lastError: string | null
|
||
skip: boolean
|
||
activeRequestId: string | null
|
||
/** Host GGUF cache (`$BARE_OS_HOST_DATA/qvac/models`). */
|
||
cacheDir?: string
|
||
/** Guest HDMS path for durable models. */
|
||
hdmsPath?: string
|
||
}
|
||
bareOsQvacLoadModel?(opts: {
|
||
modelSrc: string
|
||
tools?: boolean
|
||
ctxSize?: number
|
||
device?: string
|
||
mainGpu?: string | number
|
||
gpuLayers?: number
|
||
onProgress?: (p: unknown) => void
|
||
}): Promise<{
|
||
ok: boolean
|
||
modelId?: string | null
|
||
reused?: boolean
|
||
device?: string
|
||
fellBackToCpu?: boolean
|
||
gpuError?: string
|
||
}>
|
||
bareOsQvacUnloadModel?(): Promise<{ ok: boolean }>
|
||
bareOsQvacComplete?(opts: {
|
||
history: unknown[]
|
||
tools?: unknown[]
|
||
stream?: boolean
|
||
captureThinking?: boolean
|
||
modelSrc?: string
|
||
toolsEnabled?: boolean
|
||
ctxSize?: number
|
||
device?: string
|
||
mainGpu?: string | number
|
||
gpuLayers?: number
|
||
onProgress?: (p: unknown) => void
|
||
onEvent?: (e: Record<string, unknown>) => void
|
||
signal?: AbortSignal | null
|
||
}): Promise<{ ok: boolean; final?: unknown }>
|
||
/**
|
||
* Host-resolved (and optional drive-bundled) Holepunch-style modules; absent when `BARE_OS_BARE_MODULES=0`.
|
||
* Includes `discordJS` (vendored `bare-discord-js` / official discord.js) when the Bare host can load it.
|
||
*/
|
||
bare?: Readonly<Record<string, unknown>>
|
||
/** Pear development surface (build, bundle, init helpers etc.). Populated from the pear tier of the manifest when bare modules are enabled. */
|
||
pear?: Readonly<Record<string, unknown>>
|
||
httpFetch?: typeof fetch
|
||
/**
|
||
* First-party guest TUI framework (`ctx.tui`). Absent when `BARE_OS_TUI=0` or attach fails.
|
||
* Raw JS only — guest scripts must not import modules.
|
||
*/
|
||
tui?: Readonly<{
|
||
version: string
|
||
isTTY(opts?: Record<string, unknown>): boolean
|
||
size(opts?: Record<string, unknown>): { width: number; height: number }
|
||
ansi: Record<string, unknown>
|
||
key: {
|
||
matches: (msg: unknown, ...chords: unknown[]) => boolean
|
||
binding: (opts?: { keys?: string[]; help?: unknown }) => {
|
||
keys: string[]
|
||
help: unknown
|
||
}
|
||
}
|
||
decode: (chunk: unknown) => unknown[]
|
||
createDecoder: () => {
|
||
push: (chunk: unknown) => void
|
||
take: () => unknown[]
|
||
flushEscape: () => unknown
|
||
pending: () => number
|
||
}
|
||
acquire: (opts?: Record<string, unknown>) => unknown
|
||
release: (opts?: Record<string, unknown>) => unknown
|
||
withSession: (
|
||
fn: () => unknown,
|
||
opts?: Record<string, unknown>
|
||
) => Promise<unknown>
|
||
screen: {
|
||
enter: (opts?: Record<string, unknown>) => void
|
||
leave: (opts?: Record<string, unknown>) => void
|
||
}
|
||
style: ((...args: unknown[]) => {
|
||
bold: (v?: boolean) => unknown
|
||
foreground: (c: unknown) => unknown
|
||
background: (c: unknown) => unknown
|
||
padding: (...n: number[]) => unknown
|
||
border: (chars: unknown, ...sides: unknown[]) => unknown
|
||
render: (text: string) => string
|
||
[key: string]: unknown
|
||
}) & {
|
||
borders: Record<string, unknown>
|
||
position: Record<string, number>
|
||
joinHorizontal: (...args: unknown[]) => string
|
||
joinVertical: (...args: unknown[]) => string
|
||
width: (s: string) => number
|
||
height: (s: string) => number
|
||
truncate: (s: string, w: number) => string
|
||
stripAnsi: (s: string) => string
|
||
}
|
||
theme: (opts?: Record<string, unknown>) => {
|
||
name: string
|
||
noColor: boolean
|
||
depth: string
|
||
tokens: Record<string, string>
|
||
}
|
||
buffer: {
|
||
create: (rows: number, cols: number) => unknown
|
||
fill: (grid: unknown, text: string) => unknown
|
||
blit: (grid: unknown, row: number, col: number, text: string) => unknown
|
||
plain: (grid: unknown) => string[]
|
||
}
|
||
run: (model: unknown, opts?: Record<string, unknown>) => Promise<unknown>
|
||
create: (model: unknown, opts?: Record<string, unknown>) => {
|
||
run: () => Promise<unknown>
|
||
send: (msg: unknown) => void
|
||
quit: () => void
|
||
setOverlay: (id: string, spec: unknown) => void
|
||
clearOverlay: (id?: string) => void
|
||
model: unknown
|
||
}
|
||
send: (msg: unknown) => void
|
||
quit: () => { type: 'quit' }
|
||
tick: (ms: number, fn?: (d: Date) => unknown) => () => Promise<unknown>
|
||
every: (ms: number, fn?: (d: Date) => unknown) => () => Promise<unknown>
|
||
batch: (...cmds: unknown[]) => unknown[]
|
||
sequence: (...cmds: unknown[]) => { __seq: unknown[] }
|
||
suspend: (fn: () => unknown) => { __suspend: unknown }
|
||
spinner: { create: (opts?: Record<string, unknown>) => unknown }
|
||
textinput: { create: (opts?: Record<string, unknown>) => unknown }
|
||
autocomplete: { create: (opts?: Record<string, unknown>) => unknown }
|
||
textarea: { create: (opts?: Record<string, unknown>) => unknown }
|
||
viewport: { create: (opts?: Record<string, unknown>) => unknown }
|
||
list: { create: (opts?: Record<string, unknown>) => unknown }
|
||
table: { create: (opts?: Record<string, unknown>) => unknown }
|
||
help: { create: () => unknown }
|
||
progress: { create: (opts?: Record<string, unknown>) => unknown }
|
||
paginator: { create: (opts?: Record<string, unknown>) => unknown }
|
||
stopwatch: { create: (opts?: Record<string, unknown>) => unknown }
|
||
timer: { create: (opts?: Record<string, unknown>) => unknown }
|
||
checkbox: { create: (opts?: Record<string, unknown>) => unknown }
|
||
radio: { create: (opts?: Record<string, unknown>) => unknown }
|
||
select: { create: (opts?: Record<string, unknown>) => unknown }
|
||
focus: { create: (opts?: Record<string, unknown>) => unknown }
|
||
filepicker: {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
mock: (
|
||
tree: Record<string, unknown>,
|
||
opts?: Record<string, unknown>
|
||
) => { vfs: unknown; root: string }
|
||
}
|
||
form: {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
run: (form: unknown, opts?: Record<string, unknown>) => Promise<unknown>
|
||
text: (opts?: Record<string, unknown>) => unknown
|
||
textarea: (opts?: Record<string, unknown>) => unknown
|
||
number: (opts?: Record<string, unknown>) => unknown
|
||
select: (opts?: Record<string, unknown>) => unknown
|
||
radio: (opts?: Record<string, unknown>) => unknown
|
||
confirm: (opts?: Record<string, unknown>) => unknown
|
||
}
|
||
confirm: ((opts?: Record<string, unknown>) => Promise<boolean>) & {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
}
|
||
prompt: ((opts?: Record<string, unknown>) => Promise<string | null>) & {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
}
|
||
choose: ((opts?: Record<string, unknown>) => Promise<unknown>) & {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
}
|
||
tabs: { create: (opts?: Record<string, unknown>) => unknown }
|
||
modal: { create: (opts?: Record<string, unknown>) => unknown }
|
||
dialog: { create: (opts?: Record<string, unknown>) => unknown }
|
||
tree: { create: (opts?: Record<string, unknown>) => unknown }
|
||
statusbar: { create: (opts?: Record<string, unknown>) => unknown }
|
||
split: { create: (opts?: Record<string, unknown>) => unknown }
|
||
toast: { create: (opts?: Record<string, unknown>) => unknown }
|
||
markdown: {
|
||
create: (opts?: Record<string, unknown>) => unknown
|
||
render: (src: string) => string
|
||
}
|
||
}>
|
||
/** App-authoring facade (`ctx.sdk`); `sdk.tui` is the same object as `ctx.tui`. */
|
||
sdk?: Readonly<{
|
||
tui: BareOsKernelContext['tui']
|
||
theme: {
|
||
name: (opts?: Record<string, unknown>) => string
|
||
tokens: (opts?: Record<string, unknown>) => Record<string, string>
|
||
apply: (name?: string) => Promise<unknown>
|
||
}
|
||
env: {
|
||
get: (key: string) => string
|
||
has: (key: string) => boolean
|
||
term: () => string
|
||
colorDepth: () => string
|
||
noColor: () => boolean
|
||
}
|
||
proc: {
|
||
read: (name: string) => Promise<string | null>
|
||
}
|
||
ipc: {
|
||
pushJson: (name: string, obj: Record<string, unknown>) => boolean
|
||
takeJson: (name: string) => Promise<unknown>
|
||
}
|
||
app: {
|
||
run: (model: unknown, opts?: Record<string, unknown>) => Promise<unknown>
|
||
confirm: (opts?: Record<string, unknown>) => Promise<boolean>
|
||
prompt: (opts?: Record<string, unknown>) => Promise<string | null>
|
||
select: (opts?: Record<string, unknown>) => Promise<unknown>
|
||
form: (
|
||
spec: Record<string, unknown>,
|
||
opts?: Record<string, unknown>
|
||
) => Promise<unknown>
|
||
}
|
||
vfs: {
|
||
list: (path: string) => Promise<unknown>
|
||
readText: (path: string) => Promise<string | null>
|
||
writeText: (path: string, text: string) => Promise<boolean>
|
||
}
|
||
tty: {
|
||
isTTY(opts?: Record<string, unknown>): boolean
|
||
size(opts?: Record<string, unknown>): { width: number; height: number }
|
||
acquire: (opts?: Record<string, unknown>) => unknown
|
||
release: (opts?: Record<string, unknown>) => unknown
|
||
withSession: (
|
||
fn: () => unknown,
|
||
opts?: Record<string, unknown>
|
||
) => Promise<unknown>
|
||
}
|
||
}>
|
||
[key: string]: unknown
|
||
}
|
||
|
||
export type BareOsBinRun = (
|
||
ctx: BareOsKernelContext,
|
||
argv: string[]
|
||
) => void | Promise<void>
|
||
|
||
export type BareOsKernelStart = (
|
||
ctx: BareOsKernelContext
|
||
) => void | Promise<void>
|