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:
ismeth
2026-02-20 20:13:02 +01:00
committed by YeonGyu-Kim
parent 0205601b6c
commit 15b2fe2534
5 changed files with 20 additions and 21 deletions
+7 -6
View File
@@ -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", () => {
+1 -7
View File
@@ -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>