Files
hermes-desktop/tests/server/profile-list-snapshot.test.ts
toor 01d9e301fc
Build / build (push) Canceled after 0s
Playwright / browser (push) Canceled after 0s
initialize Electron desktop app and remove unused files
2026-10-25 01:09:01 +08:00

45 lines
2.1 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from 'vitest'
import { mkdtemp, mkdir, rm, writeFile } from 'fs/promises'
import { tmpdir } from 'os'
import { join } from 'path'
import { performance } from 'perf_hooks'
vi.mock('../../packages/server/src/services/hermes/hermes-process', () => ({
execHermesWithBin: vi.fn(() => { throw new Error('Inventory must not invoke CLI') }),
spawnHermesWithBin: vi.fn(),
}))
import { listProfilesSnapshot } from '../../packages/server/src/services/hermes/hermes-cli'
import { execHermesWithBin } from '../../packages/server/src/services/hermes/hermes-process'
const originalHome = process.env.HERMES_HOME
let home: string | undefined
afterEach(async () => {
if (originalHome === undefined) delete process.env.HERMES_HOME
else process.env.HERMES_HOME = originalHome
if (home) await rm(home, { recursive: true, force: true })
})
describe('disk profile inventory', () => {
it('reads models and active selection for 20 profiles without scanning histories or skills', async () => {
home = await mkdtemp(join(tmpdir(), 'hermes-profile-snapshot-'))
process.env.HERMES_HOME = home
await writeFile(join(home, 'config.yaml'), 'model: default-model\n')
await writeFile(join(home, 'active_profile'), 'perf-19\n')
for (let index = 0; index < 20; index++) {
const dir = join(home, 'profiles', `perf-${index}`)
await mkdir(dir, { recursive: true })
await writeFile(join(dir, 'config.yaml'), `model:\n default: model-${index}\n`)
// These are deliberately invalid; inventory must not parse session history.
await writeFile(join(dir, 'state.db'), 'not a database')
}
const started = performance.now()
const profiles = listProfilesSnapshot()
console.info(`Disk inventory for 21 profiles: ${(performance.now() - started).toFixed(2)} ms`)
expect(profiles).toHaveLength(21)
expect(profiles.find(profile => profile.name === 'perf-19')).toMatchObject({ model: 'model-19', active: true })
expect(profiles[0]).toMatchObject({ name: 'default', model: 'default-model', active: false })
expect(execHermesWithBin).not.toHaveBeenCalled()
})
})