fix(athena): resolve 4 compatibility and correctness issues
- Use case-insensitive casing in duplicate name test to verify actual logic - Align permission type with SDK AgentConfig pattern (as AgentConfig["permission"]) - Move duplicate-name validation from schema to runtime for graceful fallback - Place skipped members details before 'end your turn' in council guard prompt
This commit is contained in:
@@ -330,8 +330,9 @@ describe("CouncilConfigSchema", () => {
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
|
||||
test("rejects council with duplicate member names", () => {
|
||||
//#given
|
||||
test("accepts council with duplicate member names for graceful runtime handling", () => {
|
||||
//#given - duplicate detection is handled at runtime by registerCouncilMemberAgents,
|
||||
// not at schema level, to allow graceful fallback instead of hard parse failure
|
||||
const config = {
|
||||
members: [
|
||||
{ model: "anthropic/claude-opus-4-6", name: "analyst" },
|
||||
@@ -343,11 +344,11 @@ describe("CouncilConfigSchema", () => {
|
||||
const result = CouncilConfigSchema.safeParse(config)
|
||||
|
||||
//#then
|
||||
expect(result.success).toBe(false)
|
||||
expect(result.success).toBe(true)
|
||||
})
|
||||
|
||||
test("rejects council with case-insensitive duplicate names", () => {
|
||||
//#given
|
||||
test("accepts council with case-insensitive duplicate names for graceful runtime handling", () => {
|
||||
//#given - case-insensitive dedup is handled at runtime by registerCouncilMemberAgents
|
||||
const config = {
|
||||
members: [
|
||||
{ model: "anthropic/claude-opus-4-6", name: "Claude" },
|
||||
@@ -359,7 +360,7 @@ describe("CouncilConfigSchema", () => {
|
||||
const result = CouncilConfigSchema.safeParse(config)
|
||||
|
||||
//#then
|
||||
expect(result.success).toBe(false)
|
||||
expect(result.success).toBe(true)
|
||||
})
|
||||
|
||||
test("accepts council with unique member names", () => {
|
||||
|
||||
@@ -20,13 +20,7 @@ export const CouncilMemberSchema = z.object({
|
||||
}).strict()
|
||||
|
||||
export const CouncilConfigSchema = z.object({
|
||||
members: z.array(CouncilMemberSchema).min(2).refine(
|
||||
(members) => {
|
||||
const names = members.map(m => m.name.toLowerCase())
|
||||
return new Set(names).size === names.length
|
||||
},
|
||||
{ message: "Council member names must be unique (case-insensitive)" },
|
||||
),
|
||||
members: z.array(CouncilMemberSchema).min(2),
|
||||
}).strict()
|
||||
|
||||
export type CouncilMemberConfig = z.infer<typeof CouncilMemberSchema>
|
||||
|
||||
Reference in New Issue
Block a user