Wire the desktop app onto the pm store for real distribution: - MSIX bundle: electron-builder config, appx assets, manifest, copilot key + deep-link routing, App Installer + Windows Store variant (sign only the msix; inner binaries covered by the package block map) - Rust CLI shim (apps/desktop/shim) — bundled builds run from the store python + shim, never the venv; payload symlinks relativized so the relocatable venv survives relocation - Cloudflare R2 release pipeline: publish binaries + update feeds, nightly channels/tags, stamp-first version resolution - Update system: gate, uninstall steward, boot bootstrap, release channels, update receipts - install.ps1 reduced to a 361-line stage-protocol bootstrapper (heavy deps are pm's job); darwin updater + update-channel mirror ripped - doctor: main's re-landed TCC anchor kept, termux branches removed Rebuilt from ethie/pm onto the pm-store stack. 22 hot files hand-merged; uv.lock + package-lock.json keep main's newer dep tree; test_engines reads the pm/lock.json pin; lazy_deps.py deleted (all 222 importers migrated to pm in the foundation commit).
63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
export interface BootstrapMarkerLike {
|
|
pinnedCommit?: unknown
|
|
schemaVersion?: unknown
|
|
}
|
|
|
|
export interface ActiveRuntimeState {
|
|
hasValidMarker: boolean
|
|
shouldUseActiveRuntime: boolean
|
|
usabilityReason: 'usable' | 'unusable'
|
|
/** The canonical-root install stamp (written by the bootstrap), when the
|
|
* active runtime was desktop-installed. Populated by the caller
|
|
* (main.ts activeRuntimeState); undefined when never set. */
|
|
canonicalInstallStamp?: { source?: unknown; commit?: unknown; branch?: unknown } | null
|
|
}
|
|
|
|
export function hasValidBootstrapMarker(
|
|
marker: BootstrapMarkerLike | null | undefined,
|
|
schemaVersion: number
|
|
): boolean {
|
|
if (!marker || typeof marker !== 'object') {
|
|
return false
|
|
}
|
|
|
|
if (marker.schemaVersion !== schemaVersion) {
|
|
return false
|
|
}
|
|
|
|
if (typeof marker.pinnedCommit !== 'string' || marker.pinnedCommit.length < 7) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// The active install at ~/.hermes/hermes-agent can be real and runnable even if
|
|
// Desktop never wrote its first-run bootstrap marker (for example when Hermes
|
|
// was installed by the CLI first, or when a past desktop build forgot the
|
|
// marker). Runtime usability is authoritative for "can we launch local Hermes
|
|
// right now?"; the marker is only provenance about how that install was
|
|
// created. A missing/stale marker must never force a healthy local install into
|
|
// the first-run bootstrap UI.
|
|
export function classifyActiveRuntime(
|
|
marker: BootstrapMarkerLike | null | undefined,
|
|
schemaVersion: number,
|
|
runtimeUsable: boolean
|
|
): ActiveRuntimeState {
|
|
const hasValidMarker = hasValidBootstrapMarker(marker, schemaVersion)
|
|
|
|
if (!runtimeUsable) {
|
|
return {
|
|
hasValidMarker,
|
|
shouldUseActiveRuntime: false,
|
|
usabilityReason: 'unusable'
|
|
}
|
|
}
|
|
|
|
return {
|
|
hasValidMarker,
|
|
shouldUseActiveRuntime: true,
|
|
usabilityReason: 'usable'
|
|
}
|
|
}
|