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).
124 lines
4.7 KiB
JavaScript
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
|
|
}
|