feat(athena): add bulk_launch config for council launch strategy

New config: agents.athena.bulk_launch (boolean, default false)
- false: launch members one-by-one via task() for TUI inspectability
- true: launch all members at once via athena_council tool

Prompt uses {BULK_LAUNCH_STEP_5_2} placeholder injected at runtime
based on config value. Schema, caller, and tests updated.
This commit is contained in:
ismeth
2026-03-03 17:00:09 +01:00
committed by YeonGyu-Kim
parent febffeebb1
commit 5e71d84a69
4 changed files with 78 additions and 10 deletions
+72
View File
@@ -693,3 +693,75 @@ describe("AthenaConfigSchema — non-interactive fields", () => {
})
})
})
describe("AthenaConfigSchema — bulk_launch field", () => {
const validCouncil = {
members: [
{ model: "openai/gpt-5.3-codex", name: "council-opus" },
{ model: "anthropic/claude-opus-4-6", name: "council-gpt" },
],
}
describe("#given bulk_launch field", () => {
describe("#when parsed with true", () => {
it("#then accepts the value", () => {
//#given
const config = { council: validCouncil, bulk_launch: true }
//#when
const result = AthenaConfigSchema.safeParse(config)
//#then
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.bulk_launch).toBe(true)
}
})
})
describe("#when parsed with false", () => {
it("#then accepts the value", () => {
//#given
const config = { council: validCouncil, bulk_launch: false }
//#when
const result = AthenaConfigSchema.safeParse(config)
//#then
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.bulk_launch).toBe(false)
}
})
})
describe("#when parsed without bulk_launch", () => {
it("#then defaults to false", () => {
//#given
const config = { council: validCouncil }
//#when
const result = AthenaConfigSchema.safeParse(config)
//#then
expect(result.success).toBe(true)
if (result.success) {
expect(result.data.bulk_launch).toBe(false)
}
})
})
describe("#when parsed with a non-boolean value", () => {
it("#then rejects the value", () => {
//#given
const config = { council: validCouncil, bulk_launch: "yes" }
//#when
const result = AthenaConfigSchema.safeParse(config)
//#then
expect(result.success).toBe(false)
})
})
})
})
+1
View File
@@ -34,6 +34,7 @@ export type CouncilConfig = z.infer<typeof CouncilConfigSchema>
export const AthenaConfigSchema = z.object({
council: CouncilConfigSchema,
bulk_launch: z.boolean().default(false).optional(),
non_interactive_mode: z.enum(["delegation", "solo"]).default("delegation").optional(),
non_interactive_members: z.enum(["all", "custom"]).default("all").optional(),
non_interactive_member_list: z.array(z.string()).optional(),