mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-23 16:36:23 +00:00
Add a "keep computer awake" toggle (Claude-style) for long/overnight runs:
the renderer owns the device-local pref and mirrors it to the Electron main
process, which holds a single `powerSaveBlocker('prevent-app-suspension')` —
the same authority split as translucency. Surfaced as a statusbar quick-toggle
and a Settings row.
Introduce a dedicated System settings section (device-local machine prefs) and
de-crowd Appearance by moving Window Translucency + UI Scale into it (both are
main-process/window-owned, not visual theme). Give Haptic Feedback its first
Settings home there too (the titlebar quick-toggle stays). Relocated i18n copy
into `settings.system` across en/zh/zh-hant/ja; wired the `system` route into
the SettingsView union + allowlist + nav.
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
import { createKeepAwake, type PowerSaveBlockerLike } from './power-save'
|
|
|
|
function fakeBlocker() {
|
|
let next = 1
|
|
const started = new Set<number>()
|
|
|
|
const blocker: PowerSaveBlockerLike = {
|
|
isStarted: id => started.has(id),
|
|
start: vi.fn(() => {
|
|
const id = next++
|
|
started.add(id)
|
|
|
|
return id
|
|
}),
|
|
stop: vi.fn(id => void started.delete(id))
|
|
}
|
|
|
|
return { blocker, started }
|
|
}
|
|
|
|
describe('createKeepAwake', () => {
|
|
it('starts once, is idempotent, and stops', () => {
|
|
const { blocker } = fakeBlocker()
|
|
const keepAwake = createKeepAwake(blocker)
|
|
|
|
expect(keepAwake.isActive()).toBe(false)
|
|
expect(keepAwake.set(true)).toBe(true)
|
|
keepAwake.set(true) // idempotent — no second blocker
|
|
expect(blocker.start).toHaveBeenCalledTimes(1)
|
|
expect(blocker.start).toHaveBeenCalledWith('prevent-app-suspension')
|
|
|
|
expect(keepAwake.set(false)).toBe(false)
|
|
keepAwake.set(false)
|
|
expect(blocker.stop).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it('re-arms after the OS dropped the blocker', () => {
|
|
const { blocker, started } = fakeBlocker()
|
|
const keepAwake = createKeepAwake(blocker)
|
|
|
|
keepAwake.set(true)
|
|
started.clear() // system released it out from under us
|
|
expect(keepAwake.isActive()).toBe(false)
|
|
|
|
keepAwake.set(true)
|
|
expect(blocker.start).toHaveBeenCalledTimes(2)
|
|
expect(keepAwake.isActive()).toBe(true)
|
|
})
|
|
|
|
it('honors a custom blocker type', () => {
|
|
const { blocker } = fakeBlocker()
|
|
createKeepAwake(blocker, 'prevent-display-sleep').set(true)
|
|
|
|
expect(blocker.start).toHaveBeenCalledWith('prevent-display-sleep')
|
|
})
|
|
})
|