mirror of
https://github.com/stablyai/orca.git
synced 2026-10-08 16:02:37 +00:00
* perf(renderer): stop full durable-state save on every top-level view switch (#9002) Persist activeView in a tiny profile-scoped sidecar instead of mutating the monolithic recovery snapshot. Active-view-only updates now bypass the broad UI normalization and durable save scheduler, while a 100ms atomic writer coalesces rapid switches and a synchronous shutdown checkpoint closes the immediate-exit race. Legacy state remains a migration and downgrade fallback. Coordinate renderer shutdown capture through one guarded checkpoint so workspace sessions and the active-view preference both survive graceful reloads, restarts, and quit cancellation. Add a persistence-boundary test proving the sidecar stays below 64 bytes while orca-data.json remains byte-for-byte unchanged, plus repeated Windows Electron restart coverage and a path-normalization-safe restart fixture. * harden active-view sidecar: prototype-safe validator, race-free async swap, independent shutdown flush - isTopLevelView uses Object.hasOwn so a corrupt sidecar can't smuggle inherited keys (constructor/__proto__) through as a valid view. - writeAsync guards the generation check and rename synchronously (renameSync) so a shutdown flushOrThrow can no longer interleave and let a stale async rename clobber the freshly-written view. - shutdown checkpoint flushes the durable store and the active-view sidecar in independent try/catch blocks so one store's failure can't skip the other. Added regression tests for all three. Co-authored-by: Orca <help@stably.ai> --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com> Co-authored-by: Orca <help@stably.ai>
21 lines
707 B
TypeScript
21 lines
707 B
TypeScript
import type { TopLevelView } from './types'
|
|
|
|
// Record keys are exhaustive so adding a top-level view also updates every
|
|
// persistence boundary that validates values loaded from disk or IPC.
|
|
const TOP_LEVEL_VIEW_LOOKUP: Record<TopLevelView, true> = {
|
|
terminal: true,
|
|
settings: true,
|
|
tasks: true,
|
|
activity: true,
|
|
automations: true,
|
|
space: true,
|
|
skills: true,
|
|
mobile: true
|
|
}
|
|
|
|
export function isTopLevelView(value: unknown): value is TopLevelView {
|
|
// Why: hasOwn (not `in`) so inherited keys like "constructor"/"__proto__" from a
|
|
// corrupt sidecar can't pass as a view and leave the main surface blank.
|
|
return typeof value === 'string' && Object.hasOwn(TOP_LEVEL_VIEW_LOOKUP, value)
|
|
}
|