58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
|
|
import { tmpdir } from 'node:os'
|
|
import { join } from 'node:path'
|
|
import { expect, it } from 'vitest'
|
|
import type {} from '@deepseek-ai/dsh-skill'
|
|
import { launchWebScaffold, type WebScaffold } from './scaffold.ts'
|
|
|
|
async function writeSkill(root: string, name: string): Promise<void> {
|
|
const bundle = join(root, name)
|
|
await mkdir(bundle, { recursive: true })
|
|
await writeFile(join(bundle, 'SKILL.md'), `---
|
|
name: ${name}
|
|
description: Must not enter the Web replay scaffold
|
|
---
|
|
|
|
Ambient host state.
|
|
`)
|
|
}
|
|
|
|
it('isolates replay skill discovery from every ambient host root', async () => {
|
|
const ambient = await mkdtemp(join(tmpdir(), 'dsh-web-ambient-skills-'))
|
|
const dshHome = join(ambient, 'dsh-home')
|
|
const agentsHome = join(ambient, 'agents-home')
|
|
const bundled = join(ambient, 'bundled')
|
|
await Promise.all([
|
|
writeSkill(join(dshHome, 'skills'), 'ambient-dsh'),
|
|
writeSkill(join(agentsHome, 'skills'), 'ambient-agents'),
|
|
writeSkill(bundled, 'ambient-bundled'),
|
|
])
|
|
|
|
const originalDshHome = process.env.DSH_HOME
|
|
const originalAgentsHome = process.env.DSH_AGENTS_HOME
|
|
const originalBundled = process.env.DSH_BUNDLED_SKILL_DIR
|
|
process.env.DSH_HOME = dshHome
|
|
process.env.DSH_AGENTS_HOME = agentsHome
|
|
process.env.DSH_BUNDLED_SKILL_DIR = bundled
|
|
let scaffold: WebScaffold | undefined
|
|
try {
|
|
scaffold = await launchWebScaffold()
|
|
const names = (await scaffold.ctx.skills.list({ cwd: scaffold.workspaceCwd })).map(skill => skill.name)
|
|
expect(names).not.toContain('ambient-dsh')
|
|
expect(names).not.toContain('ambient-agents')
|
|
expect(names).not.toContain('ambient-bundled')
|
|
} finally {
|
|
try {
|
|
await scaffold?.close()
|
|
} finally {
|
|
if (originalDshHome === undefined) delete process.env.DSH_HOME
|
|
else process.env.DSH_HOME = originalDshHome
|
|
if (originalAgentsHome === undefined) delete process.env.DSH_AGENTS_HOME
|
|
else process.env.DSH_AGENTS_HOME = originalAgentsHome
|
|
if (originalBundled === undefined) delete process.env.DSH_BUNDLED_SKILL_DIR
|
|
else process.env.DSH_BUNDLED_SKILL_DIR = originalBundled
|
|
await rm(ambient, { recursive: true, force: true })
|
|
}
|
|
}
|
|
})
|