mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-08-29 04:26:38 +00:00
Merge origin/master into worktree/fix-question-drafts-session-switch
This commit is contained in:
@@ -465,10 +465,14 @@ export const LINK_MAP: Readonly<Record<string, string>> = {
|
||||
ContinuableStart: 'subagent.md',
|
||||
ContinuableStartSpec: 'subagent.md',
|
||||
CoordinatorMessageSource: 'subagent.md',
|
||||
SubagentCatalog: 'subagent.md',
|
||||
SubagentDescendantListEntry: 'subagent.md',
|
||||
SubagentFollowupOptions: 'subagent.md',
|
||||
SubagentInterruptAuthority: 'subagent.md',
|
||||
SubagentInterruptReceipt: 'subagent.md',
|
||||
SubagentListEntry: 'subagent.md',
|
||||
SubagentPromptReceipt: 'subagent.md',
|
||||
SubagentPromptRequest: 'subagent.md',
|
||||
SubagentProvider: 'subagent.md',
|
||||
SubagentReportDelivery: 'subagent.md',
|
||||
SubagentReportMessageSource: 'subagent.md',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/** Tests for the documentation website projection adapter. */
|
||||
|
||||
import { execFileSync } from 'node:child_process'
|
||||
import { existsSync, globSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
|
||||
import { existsSync, globSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { basename, dirname, join, resolve } from 'node:path'
|
||||
import { fromMarkdown } from 'mdast-util-from-markdown'
|
||||
@@ -9,6 +9,7 @@ import { gfmFromMarkdown } from 'mdast-util-gfm'
|
||||
import { gfm } from 'micromark-extension-gfm'
|
||||
import type { Nodes } from 'mdast'
|
||||
import { afterAll, afterEach, beforeAll, describe, expect, it } from 'vitest'
|
||||
import { cleanDocSiteOutput, docSiteBuildOptions } from '../website/build.ts'
|
||||
import { docsPages, landingLink, routeLink, sectionSpec, type DocsPage } from '../website/docs.ts'
|
||||
import {
|
||||
addProjectionFrontmatter, emitRawMarkdownPages, llmsTxt, projectedPageContent, publishableImage,
|
||||
@@ -70,6 +71,78 @@ describe('website source layout', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('documentation site build', () => {
|
||||
it.each([
|
||||
{ mode: 'SPA', mpa: false, expectedMpa: undefined },
|
||||
{ mode: 'MPA', mpa: true, expectedMpa: 'true' },
|
||||
])('$mode build removes stale output before writing', async ({ mpa, expectedMpa }) => {
|
||||
const root = mkdtempSync(join(tmpdir(), 'dsh-doc-build-'))
|
||||
roots.push(root)
|
||||
const outDir = join(root, '.dist')
|
||||
const stale = join(outDir, 'stale.md')
|
||||
mkdirSync(outDir)
|
||||
writeFileSync(stale, 'stale\n')
|
||||
|
||||
const options = docSiteBuildOptions(root, mpa)
|
||||
expect(options.mpa).toBe(expectedMpa)
|
||||
expect(existsSync(stale)).toBe(true)
|
||||
await options.onAfterConfigResolve?.({ outDir } as never)
|
||||
expect(existsSync(outDir)).toBe(false)
|
||||
})
|
||||
|
||||
it('refuses to remove the site root or an outside directory', () => {
|
||||
const root = mkdtempSync(join(tmpdir(), 'dsh-doc-build-root-'))
|
||||
const outside = mkdtempSync(join(tmpdir(), 'dsh-doc-build-outside-'))
|
||||
roots.push(root, outside)
|
||||
writeFileSync(join(root, 'keep'), 'root\n')
|
||||
writeFileSync(join(outside, 'keep'), 'outside\n')
|
||||
|
||||
expect(() => {
|
||||
cleanDocSiteOutput(root, root)
|
||||
}).toThrow('must be a child of site root')
|
||||
expect(() => {
|
||||
cleanDocSiteOutput(root, outside)
|
||||
}).toThrow('must be a child of site root')
|
||||
expect(readFileSync(join(root, 'keep'), 'utf8')).toBe('root\n')
|
||||
expect(readFileSync(join(outside, 'keep'), 'utf8')).toBe('outside\n')
|
||||
})
|
||||
|
||||
it('unlinks a link-shaped output without removing its target', () => {
|
||||
const root = mkdtempSync(join(tmpdir(), 'dsh-doc-build-link-root-'))
|
||||
const outside = mkdtempSync(join(tmpdir(), 'dsh-doc-build-link-target-'))
|
||||
roots.push(root, outside)
|
||||
const outDir = join(root, '.dist')
|
||||
const keep = join(outside, 'keep')
|
||||
writeFileSync(keep, 'outside\n')
|
||||
symlinkSync(outside, outDir, 'junction')
|
||||
|
||||
cleanDocSiteOutput(root, outDir)
|
||||
|
||||
expect(existsSync(outDir)).toBe(false)
|
||||
expect(readFileSync(keep, 'utf8')).toBe('outside\n')
|
||||
})
|
||||
|
||||
it('refuses output whose nearest existing parent resolves outside the site root', () => {
|
||||
const root = mkdtempSync(join(tmpdir(), 'dsh-doc-build-parent-link-root-'))
|
||||
const outside = mkdtempSync(join(tmpdir(), 'dsh-doc-build-parent-link-target-'))
|
||||
roots.push(root, outside)
|
||||
const linkedParent = join(root, 'linked')
|
||||
const outDir = join(linkedParent, 'missing', '.dist')
|
||||
const keep = join(outside, 'keep')
|
||||
writeFileSync(keep, 'outside\n')
|
||||
symlinkSync(outside, linkedParent, 'junction')
|
||||
|
||||
try {
|
||||
expect(() => {
|
||||
cleanDocSiteOutput(root, outDir)
|
||||
}).toThrow('must resolve inside site root')
|
||||
expect(readFileSync(keep, 'utf8')).toBe('outside\n')
|
||||
} finally {
|
||||
unlinkSync(linkedParent)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('publishableImage', () => {
|
||||
it('accepts a regular file inside the repository', () => {
|
||||
const { root } = fixture()
|
||||
|
||||
Reference in New Issue
Block a user