feat(background-task): add spawn limit config fields
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -3678,6 +3678,16 @@
|
|||||||
"minimum": 0
|
"minimum": 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"maxDepth": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 9007199254740991
|
||||||
|
},
|
||||||
|
"maxDescendants": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 9007199254740991
|
||||||
|
},
|
||||||
"staleTimeoutMs": {
|
"staleTimeoutMs": {
|
||||||
"type": "number",
|
"type": "number",
|
||||||
"minimum": 60000
|
"minimum": 60000
|
||||||
|
|||||||
@@ -3,6 +3,54 @@ import { ZodError } from "zod/v4"
|
|||||||
import { BackgroundTaskConfigSchema } from "./background-task"
|
import { BackgroundTaskConfigSchema } from "./background-task"
|
||||||
|
|
||||||
describe("BackgroundTaskConfigSchema", () => {
|
describe("BackgroundTaskConfigSchema", () => {
|
||||||
|
describe("maxDepth", () => {
|
||||||
|
describe("#given valid maxDepth (3)", () => {
|
||||||
|
test("#when parsed #then returns correct value", () => {
|
||||||
|
const result = BackgroundTaskConfigSchema.parse({ maxDepth: 3 })
|
||||||
|
|
||||||
|
expect(result.maxDepth).toBe(3)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("#given maxDepth below minimum (0)", () => {
|
||||||
|
test("#when parsed #then throws ZodError", () => {
|
||||||
|
let thrownError: unknown
|
||||||
|
|
||||||
|
try {
|
||||||
|
BackgroundTaskConfigSchema.parse({ maxDepth: 0 })
|
||||||
|
} catch (error) {
|
||||||
|
thrownError = error
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(thrownError).toBeInstanceOf(ZodError)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("maxDescendants", () => {
|
||||||
|
describe("#given valid maxDescendants (50)", () => {
|
||||||
|
test("#when parsed #then returns correct value", () => {
|
||||||
|
const result = BackgroundTaskConfigSchema.parse({ maxDescendants: 50 })
|
||||||
|
|
||||||
|
expect(result.maxDescendants).toBe(50)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("#given maxDescendants below minimum (0)", () => {
|
||||||
|
test("#when parsed #then throws ZodError", () => {
|
||||||
|
let thrownError: unknown
|
||||||
|
|
||||||
|
try {
|
||||||
|
BackgroundTaskConfigSchema.parse({ maxDescendants: 0 })
|
||||||
|
} catch (error) {
|
||||||
|
thrownError = error
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(thrownError).toBeInstanceOf(ZodError)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe("syncPollTimeoutMs", () => {
|
describe("syncPollTimeoutMs", () => {
|
||||||
describe("#given valid syncPollTimeoutMs (120000)", () => {
|
describe("#given valid syncPollTimeoutMs (120000)", () => {
|
||||||
test("#when parsed #then returns correct value", () => {
|
test("#when parsed #then returns correct value", () => {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ export const BackgroundTaskConfigSchema = z.object({
|
|||||||
defaultConcurrency: z.number().min(1).optional(),
|
defaultConcurrency: z.number().min(1).optional(),
|
||||||
providerConcurrency: z.record(z.string(), z.number().min(0)).optional(),
|
providerConcurrency: z.record(z.string(), z.number().min(0)).optional(),
|
||||||
modelConcurrency: z.record(z.string(), z.number().min(0)).optional(),
|
modelConcurrency: z.record(z.string(), z.number().min(0)).optional(),
|
||||||
|
maxDepth: z.number().int().min(1).optional(),
|
||||||
|
maxDescendants: z.number().int().min(1).optional(),
|
||||||
/** Stale timeout in milliseconds - interrupt tasks with no activity for this duration (default: 180000 = 3 minutes, minimum: 60000 = 1 minute) */
|
/** Stale timeout in milliseconds - interrupt tasks with no activity for this duration (default: 180000 = 3 minutes, minimum: 60000 = 1 minute) */
|
||||||
staleTimeoutMs: z.number().min(60000).optional(),
|
staleTimeoutMs: z.number().min(60000).optional(),
|
||||||
/** Timeout for tasks that never received any progress update, falling back to startedAt (default: 600000 = 10 minutes, minimum: 60000 = 1 minute) */
|
/** Timeout for tasks that never received any progress update, falling back to startedAt (default: 600000 = 10 minutes, minimum: 60000 = 1 minute) */
|
||||||
|
|||||||
Reference in New Issue
Block a user