diff --git a/internal/util/gemini_schema.go b/internal/util/gemini_schema.go index 8617b846..c2a4474d 100644 --- a/internal/util/gemini_schema.go +++ b/internal/util/gemini_schema.go @@ -236,7 +236,7 @@ func addAdditionalPropertiesHints(jsonStr string) string { var unsupportedConstraints = []string{ "minLength", "maxLength", "exclusiveMinimum", "exclusiveMaximum", - "pattern", "minItems", "maxItems", "format", + "pattern", "minItems", "maxItems", "uniqueItems", "format", "default", "examples", // Claude rejects these in VALIDATED mode } diff --git a/internal/util/gemini_schema_test.go b/internal/util/gemini_schema_test.go index bb06e956..92bce013 100644 --- a/internal/util/gemini_schema_test.go +++ b/internal/util/gemini_schema_test.go @@ -1046,3 +1046,27 @@ func TestRemoveExtensionFields(t *testing.T) { }) } } + +// uniqueItems should be stripped and moved to description hint (#2123). +func TestCleanJSONSchemaForAntigravity_UniqueItemsStripped(t *testing.T) { + input := `{ + "type": "object", + "properties": { + "ids": { + "type": "array", + "description": "Unique identifiers", + "items": {"type": "string"}, + "uniqueItems": true + } + } + }` + + result := CleanJSONSchemaForAntigravity(input) + + if strings.Contains(result, `"uniqueItems"`) { + t.Errorf("uniqueItems should be removed from schema") + } + if !strings.Contains(result, "uniqueItems: true") { + t.Errorf("uniqueItems hint missing in description") + } +}