test(sandbox-policy): record cache-safe policy context

This commit is contained in:
NI0317
2026-07-30 22:15:34 +08:00
parent 9c32620e4b
commit 1a4349be88
90 changed files with 2468 additions and 2411 deletions

View File

@@ -144,6 +144,21 @@ function assembledSystem(log: PersistedLog): string {
return system
}
function assembledPolicyContext(log: PersistedLog): string {
const contexts = log.content.trimEnd().split('\n').flatMap((line) => {
const event = JSON.parse(line) as {
type?: string
data?: { source?: { kind?: string; plugin?: string }; content?: Array<{ type?: string; text?: unknown }> }
}
if (event.type !== 'user/message'
|| event.data?.source?.kind !== 'plugin'
|| event.data.source.plugin !== '@deepseek-ai/dsh-system-prompt') return []
return event.data.content?.flatMap(block => block.type === 'text' && typeof block.text === 'string' ? [block.text] : []) ?? []
})
if (contexts.length !== 1) throw new Error(`session log has ${String(contexts.length)} runtime-context snapshots; expected one`)
return contexts[0] as string
}
function contextOf(logs: readonly { content: string; header: Record<string, unknown> }[], cwd: string): NormalizeContext {
return {
sessionIds: logs.flatMap(log => typeof log.header.id === 'string' ? [log.header.id] : []),
@@ -377,9 +392,11 @@ describe('TypeScript SDK snapshots over the jsonrpc runtime', () => {
if (scenario.policyContext !== undefined) {
const parent = ordered[0]
if (parent === undefined) throw new Error(`${scenario.name} has no parent session log`)
const context = assembledPolicyContext(parent)
for (const clause of scenario.policyContext.includes) expect(context).toContain(clause)
for (const clause of scenario.policyContext.excludes) expect(context).not.toContain(clause)
const system = assembledSystem(parent)
for (const clause of scenario.policyContext.includes) expect(system).toContain(clause)
for (const clause of scenario.policyContext.excludes) expect(system).not.toContain(clause)
for (const clause of scenario.policyContext.includes) expect(system).not.toContain(clause)
}
if (scenario.children > 0) {
expect(notifications.some(n => n.method === 'subagent.started')).toBe(true)