Files
bare-operating-system/packages/bare-os-protocol/lib/kernel-capability-wire.js
T
Raven Scott f13e2db689 feat(protocol)!: kernel capability wire v2 and ctx capability maps
Replace top-level seed/proc bits (bits, bits2, … bits11) with
kernelCapabilityWords (semantic camelCase keys), kernelCapabilityWireVersion,
and helpers in kernel-capability-wire.js. Bump bare-os-protocol to 0.9.0 and
BARE_OS_KERNEL_FEATURE_BITS_DOC to 15.

Booter: emit/consume v2 on bare_os.capabilities, /proc/bare_os_features, debug
proc, offline LKG seedCapabilityInfo; BARE_OS_SEED_CAP_STRICT walks semantic
keys. Guest ctx exposes frozen bareOsAdvertisedKernelCapabilityWords and
bareOsSeedKernelCapabilityWords; remove per-word bareOsAdvertisedKernelCapabilities*
and bareOsSeedCapability* (BARE_OS_CTX_API_VERSION 1.22.0).

Kernel boot policy (stock init.js + seeder copy) reads advertised/seed words
via those maps. Update bare-os-ctx.d.ts, CI verifiers, compatibility matrix,
capability-words docs, ADR 001, and changelogs.

Fix duplicate re-exports of EXTENDED_SEEDING_PLATFORM and RLIMITS_DELEGATES_SHELL
in bare-os-protocol/index.js (Pear/Bare duplicate export error).
2026-04-04 07:19:46 -04:00

124 lines
4.7 KiB
JavaScript

/**
* Seed RPC `bare_os.capabilities` and `/proc/bare_os_features` wire format v2:
* all eleven capability masks live under one JSON object `kernelCapabilityWords`
* (semantic camelCase keys). Numeric masks and bit positions are unchanged from v1;
* only the JSON shape changed.
*/
export const BARE_OS_KERNEL_CAPABILITY_WIRE_VERSION = 2
/** Top-level key on capabilities / features JSON. */
export const BARE_OS_KERNEL_CAPABILITY_WORDS_JSON_KEY = 'kernelCapabilityWords'
export const BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY = 'primary'
export const BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM =
'extendedSeedingPlatform'
export const BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL =
'rlimitsDelegatesShell'
export const BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS =
'offlineNetExtensions'
export const BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES =
'hostTransportDelegates'
export const BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE =
'replicationOperatorSurface'
export const BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC =
'pearCorestoreHrpc'
export const BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX =
'bareRuntimeProtoMux'
export const BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING =
'bareModuleCryptoStaging'
export const BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS =
'pearInspectLoggerTls'
export const BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE =
'hypercorePackHrpcLifecycle'
/** Ordered keys matching stock mask word order (primary → eleventh). */
export const BARE_OS_KERNEL_CAPABILITY_WORD_KEYS = Object.freeze([
BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY,
BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM,
BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL,
BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS,
BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES,
BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE,
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC,
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX,
BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING,
BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS,
BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE
])
/**
* @param {number} primary
* @param {number} extendedSeedingPlatform
* @param {number} rlimitsDelegatesShell
* @param {number} offlineNetExtensions
* @param {number} hostTransportDelegates
* @param {number} replicationOperatorSurface
* @param {number} pearCorestoreHrpc
* @param {number} bareRuntimeProtoMux
* @param {number} bareModuleCryptoStaging
* @param {number} pearInspectLoggerTls
* @param {number} hypercorePackHrpcLifecycle
*/
export function buildKernelCapabilityWordsObject(
primary,
extendedSeedingPlatform,
rlimitsDelegatesShell,
offlineNetExtensions,
hostTransportDelegates,
replicationOperatorSurface,
pearCorestoreHrpc,
bareRuntimeProtoMux,
bareModuleCryptoStaging,
pearInspectLoggerTls,
hypercorePackHrpcLifecycle
) {
return Object.freeze({
[BARE_OS_KERNEL_CAPABILITY_KEY_PRIMARY]: primary >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_EXTENDED_SEEDING_PLATFORM]:
extendedSeedingPlatform >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_RLIMITS_DELEGATES_SHELL]:
rlimitsDelegatesShell >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_OFFLINE_NET_EXTENSIONS]:
offlineNetExtensions >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_HOST_TRANSPORT_DELEGATES]:
hostTransportDelegates >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_REPLICATION_OPERATOR_SURFACE]:
replicationOperatorSurface >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_CORESTORE_HRPC]:
pearCorestoreHrpc >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_BARE_RUNTIME_PROTO_MUX]:
bareRuntimeProtoMux >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_BARE_MODULE_CRYPTO_STAGING]:
bareModuleCryptoStaging >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_PEAR_INSPECT_LOGGER_TLS]:
pearInspectLoggerTls >>> 0,
[BARE_OS_KERNEL_CAPABILITY_KEY_HYPERCORE_PACK_HRPC_LIFECYCLE]:
hypercorePackHrpcLifecycle >>> 0
})
}
/**
* @param {unknown} cap
* @returns {Record<string, number> | null}
*/
export function getKernelCapabilityWords(cap) {
if (!cap || typeof cap !== 'object') return null
const raw = /** @type {Record<string, unknown>} */ (cap)[
BARE_OS_KERNEL_CAPABILITY_WORDS_JSON_KEY
]
if (!raw || typeof raw !== 'object') return null
return /** @type {Record<string, number>} */ (raw)
}
/**
* @param {Record<string, number> | null | undefined} words
* @param {string} key
* @returns {number}
*/
export function readKernelCapabilityWord(words, key) {
if (!words || typeof words !== 'object') return 0
const v = words[key]
return typeof v === 'number' ? v >>> 0 : 0
}