refactor(tasks): simplify admission configuration

This commit is contained in:
pku-xht
2026-08-11 17:12:53 +08:00
parent 9d173f8333
commit c98a4d0949
6 changed files with 58 additions and 36 deletions

View File

@@ -186,12 +186,24 @@ describe('dsh-acp-demo composition', () => {
const ctx = await mount({
provider: 'mock',
model: 'mock',
tasks: { maxConcurrentTasksPerOwner: 2 },
tasks: { maxConcurrentTasksPerOwner: 1 },
skills: await isolatedSkillsConfig(),
workspaceContext: false,
})
expect((ctx.tasks as unknown as { config: { maxConcurrentTasksPerOwner: number } })
.config.maxConcurrentTasksPerOwner).toBe(2)
let settle!: (outcome: { status: 'killed' }) => void
ctx.tasks.start({
kind: 'bash',
label: 'hold configured slot',
run: () => ({
cancel: () => { settle({ status: 'killed' }) },
done: new Promise((resolve) => { settle = resolve }),
}),
})
expect(() => ctx.tasks.start({
kind: 'bash',
label: 'blocked configured task',
run: () => ({ cancel: () => {}, done: Promise.resolve({ status: 'completed' }) }),
})).toThrow('(limit: 1)')
await ctx.fiber.dispose()
})

View File

@@ -10,7 +10,6 @@ import { agentEvents, type Agent } from '@deepseek-ai/dsh-agent'
import { SessionId } from '@deepseek-ai/dsh-session'
import LocalBashExecutor from '@deepseek-ai/dsh-bash-local'
import LocalFileSystem from '@deepseek-ai/dsh-fs-local'
import LocalTaskService from '@deepseek-ai/dsh-tasks-local'
import * as ToolFs from '@deepseek-ai/dsh-tool-fs'
import { MockAdapter, textResponse, toolCallResponse } from '../../../core/agent-loop/tests/mock-adapter.ts'
import {
@@ -158,7 +157,6 @@ describe('dsh-agent-spine-demo bundle', () => {
expect(ctx.get('skills')).toBeDefined()
expect(ctx.get('agents')).toBeDefined()
expect(ctx.get('tasks')).toBeDefined()
expect((ctx.tasks as LocalTaskService).config.maxConcurrentTasksPerOwner).toBe(10)
expect(ctx.get('invariants')).toBeDefined()
expect(ctx.get('agentLoop')).toBeDefined()
expect(ctx.get('goals')).toBeUndefined()
@@ -304,10 +302,23 @@ describe('dsh-agent-spine-demo bundle', () => {
it('forwards task admission config to the process-local provider', async () => {
const ctx = await mount({
tasks: { maxConcurrentTasksPerOwner: 3 },
tasks: { maxConcurrentTasksPerOwner: 1 },
workspaceContext: false,
})
expect((ctx.tasks as LocalTaskService).config.maxConcurrentTasksPerOwner).toBe(3)
let settle!: (outcome: { status: 'killed' }) => void
ctx.tasks.start({
kind: 'probe',
label: 'hold configured slot',
run: () => ({
cancel: () => { settle({ status: 'killed' }) },
done: new Promise((resolve) => { settle = resolve }),
}),
})
expect(() => ctx.tasks.start({
kind: 'probe',
label: 'blocked configured task',
run: () => ({ cancel: () => {}, done: Promise.resolve({ status: 'completed' }) }),
})).toThrow('(limit: 1)')
await ctx.fiber.dispose()
})