---
updatedAt: 2026-09-02T17:35:26.000Z
agentTools:
  projectIndex: https://docs.go.v7labs.com/llms.txt
---

# Add a property to a project

Adds a property to a project

**Note:** `project_id` is the same as `agent_id`

# OpenAPI definition

````json
{
  "components": {
    "schemas": {
      "Projects.DynamicSelectPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Dynamic select property configuration (hub_select or subject_select)",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "dynamic_options": {
            "description": "Whether options are dynamically loaded",
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "max_selected": {
            "$ref": "#/components/schemas/Projects.SelectMaxSelectedWithDefault"
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOptionResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "max_selected",
          "options",
          "default_option",
          "dynamic_options"
        ],
        "title": "Projects.DynamicSelectPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DynamicSelectPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.PropertyToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for AI tool behavior",
        "properties": {
          "auto_llm_config": {
            "$ref": "#/components/schemas/Projects.AutoLlmToolConfig"
          },
          "code_config": {
            "$ref": "#/components/schemas/Projects.CodeToolConfig"
          },
          "dependencies": {
            "deprecated": true,
            "description": "Deprecated: use code_config.dependencies instead",
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "go_agent_v2_config": {
            "$ref": "#/components/schemas/Projects.GoAgentV2ToolConfig"
          },
          "input_mode": {
            "default": "primary_and_extracted",
            "description": "How to handle input data: primary_only (default), extracted_only, primary_and_extracted",
            "enum": [
              "primary_only",
              "extracted_only",
              "primary_and_extracted"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "knowledge_graph_config": {
            "$ref": "#/components/schemas/Projects.KnowledgeGraphToolConfig"
          },
          "llm_config": {
            "$ref": "#/components/schemas/Projects.LlmToolConfig"
          },
          "thinking_effort": {
            "deprecated": true,
            "description": "Deprecated: use llm_config.thinking_effort instead",
            "enum": [
              "disabled",
              "minimal",
              "low",
              "medium",
              "high",
              "xhigh",
              "max",
              "auto"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "upsert_entity_config": {
            "$ref": "#/components/schemas/Projects.UpsertEntityToolConfig"
          }
        },
        "title": "Projects.PropertyToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyToolConfig",
        "x-validate": null
      },
      "Projects.SelectMaxSelected": {
        "description": "Maximum number of options that can be selected on any field.\n0 for unlimited.\n",
        "minimum": 0,
        "nullable": true,
        "title": "Projects.SelectMaxSelected",
        "type": "integer",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectMaxSelected",
        "x-validate": null
      },
      "Projects.PDFPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "PDF property configuration",
        "properties": {
          "splitter": {
            "enum": [
              "none",
              "page_split"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "subproject_config": {
            "$ref": "#/components/schemas/Projects.SubProjectPropertyConfigResponse"
          }
        },
        "required": [
          "splitter",
          "subproject_config"
        ],
        "title": "Projects.PDFPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PDFPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.AddPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.AddBasicPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddCollectionPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddFileCollectionPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddTimeseriesCollectionPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddDocumentPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddHubSelectPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddSubjectSelectPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddMultiSelectPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddNumberPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddReferencePropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddSlideshowPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddSingleSelectPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddUserSelectPropertyRequest"
          },
          {
            "$ref": "#/components/schemas/Projects.AddActionPropertyRequest"
          }
        ],
        "title": "Projects.AddPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddPropertyRequest",
        "x-validate": null
      },
      "Projects.AddSubjectSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.SubjectSelectPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "subject_select"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddSubjectSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddSubjectSelectPropertyRequest",
        "x-validate": null
      },
      "Projects.HubFilters": {
        "additionalProperties": false,
        "description": "Optional filters applied when resolving hub-based inputs.",
        "nullable": true,
        "properties": {
          "full_path_starts_with": {
            "default": [],
            "description": "Only include hub files whose full_path starts with one of these values.",
            "items": {
              "minLength": 1,
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.HubFilters",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.HubFilters",
        "x-validate": null
      },
      "Projects.PDFSplitMode": {
        "description": "For manual file_collection properties only.\nAllows to pick how uploaded PDF files should be split into collection items:\n- `:single_image` - split by pages and create a collection item for each page as image\n- `:semantic` - split into smaller PDFs of size of at most `pdf_split_size`, but with AI controlling actual split points for optimal content extraction\n- `:fixed_size` - split into smaller PDFs of size requested by `pdf_split_size`\n",
        "enum": [
          "semantic",
          "fixed_size",
          "single_image"
        ],
        "title": "Projects.PDFSplitMode",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PDFSplitMode",
        "x-validate": null
      },
      "Projects.DocumentPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Response for generated document property configuration",
        "properties": {
          "document_type": {
            "enum": [
              "docs",
              "slides",
              "charts"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "document_type"
        ],
        "title": "Projects.DocumentPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DocumentPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.PropertyRemoteOutputResponse": {
        "additionalProperties": false,
        "description": "A property remote output",
        "properties": {
          "active": {
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "project_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "property_id",
          "project_id",
          "active"
        ],
        "title": "Projects.PropertyRemoteOutputResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyRemoteOutputResponse",
        "x-validate": null
      },
      "Projects.EnabledSkill": {
        "additionalProperties": false,
        "description": "A skill enabled for a property with optional argument overrides",
        "properties": {
          "argument_overrides": {
            "default": [],
            "description": "Argument overrides for this skill",
            "items": {
              "$ref": "#/components/schemas/Projects.SkillArgumentOverride"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "skill_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "skill_id"
        ],
        "title": "Projects.EnabledSkill",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.EnabledSkill",
        "x-validate": null
      },
      "FieldSelectOptionValue": {
        "additionalProperties": false,
        "description": "Filter entities based on field's select value",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyAllOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_select_option_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldSelectOptionValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldSelectOptionValue",
        "x-validate": null
      },
      "Projects.UpdateNumberFormatCustom": {
        "additionalProperties": false,
        "description": "Custom number format",
        "nullable": true,
        "properties": {
          "decimal_places": {
            "oneOf": [
              {
                "maximum": 20,
                "minimum": 0,
                "type": "integer",
                "x-struct": null,
                "x-validate": null
              },
              {
                "default": "auto",
                "enum": [
                  "auto"
                ],
                "type": "string",
                "x-struct": null,
                "x-validate": null
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "negative_format": {
            "default": "minus",
            "enum": [
              "minus",
              "parentheses",
              "colored",
              "colored_parentheses"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "right_align": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "thousand_separator": {
            "default": "none",
            "enum": [
              "comma",
              "none"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.UpdateNumberFormatCustom",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.UpdateNumberFormatCustom",
        "x-validate": null
      },
      "PropertyAnyOfFieldStatus": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are in the values specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.ListEntities.FieldStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyAnyOfFieldStatus",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldStatus.PropertyAnyOf",
        "x-validate": null
      },
      "FieldTextValue": {
        "additionalProperties": false,
        "description": "Filter entities based on field's text value",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsNoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_text_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldTextValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldTextValue",
        "x-validate": null
      },
      "EntityId": {
        "additionalProperties": false,
        "description": "Filter entities based on entity id",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityFilters.EntityId.AnyOf"
              },
              {
                "$ref": "#/components/schemas/EntityFilters.EntityId.NoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "entity_id"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "EntityId",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityId",
        "x-validate": null
      },
      "Projects.SingleSelectPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Select property configuration",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOptionResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "options",
          "default_option"
        ],
        "title": "Projects.SingleSelectPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SingleSelectPropertyConfigResponse",
        "x-validate": null
      },
      "EntityFilters.ParentEntityId.NoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have none of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.ParentEntityId.NoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ParentEntityId.NoneOf",
        "x-validate": null
      },
      "Projects.MultiSelectPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Select property configuration",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "max_selected": {
            "$ref": "#/components/schemas/Projects.SelectMaxSelected"
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOptionResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "options",
          "max_selected",
          "default_option"
        ],
        "title": "Projects.MultiSelectPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.MultiSelectPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.AddCollectionPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.AddCollectionPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "collection"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddCollectionPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddCollectionPropertyRequest",
        "x-validate": null
      },
      "EntityFilters.ActivateViewId.NoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have none of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.ActivateViewId.NoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ActivateViewId.NoneOf",
        "x-validate": null
      },
      "Projects.AddFileCollectionPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for file collection property.",
        "properties": {
          "max_rows": {
            "$ref": "#/components/schemas/Projects.MaxRows"
          },
          "pdf_split_mode": {
            "$ref": "#/components/schemas/Projects.PDFSplitMode"
          },
          "pdf_split_size": {
            "$ref": "#/components/schemas/Projects.PDFSplitSize"
          },
          "properties": {
            "items": {
              "$ref": "#/components/schemas/Projects.CollectionSubproperty"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "properties"
        ],
        "title": "Projects.AddFileCollectionPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddFileCollectionPropertyConfig",
        "x-validate": null
      },
      "Projects.ViaReferencePropertyInput": {
        "additionalProperties": false,
        "description": "An input property in project referenced by a reference property (`via_property_id`).\n",
        "properties": {
          "entities_filter": {
            "$ref": "#/components/schemas/EntityFilters.NullableFilter"
          },
          "hub_filters": {
            "$ref": "#/components/schemas/Projects.HubFilters"
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "target": {
            "$ref": "#/components/schemas/Projects.PropertyInputTarget"
          },
          "target_filter": {
            "$ref": "#/components/schemas/Projects.PropertyInputTargetFilter"
          },
          "via_property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "property_id",
          "via_property_id"
        ],
        "title": "Projects.ViaReferencePropertyInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ViaReferencePropertyInput",
        "x-validate": null
      },
      "PropertyContainsNoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject contains the one specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_contains_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyContainsNoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldTextValue.PropertyContainsNoneOf",
        "x-validate": null
      },
      "ViewAllOfFieldStatuses": {
        "additionalProperties": false,
        "description": "Matches items in a view based on whether all of their field statuses are in the filter values",
        "properties": {
          "name": {
            "enum": [
              "view_all_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.ListEntities.FieldStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "name",
          "view_id",
          "values"
        ],
        "title": "ViewAllOfFieldStatuses",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityStatus.ViewAllOf",
        "x-validate": null
      },
      "Projects.UserSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Initial configuration for user-select property.\nAllows to provide initial users.\n",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "options": {
            "items": {
              "properties": {
                "color": {
                  "$ref": "#/components/schemas/Projects.SelectOptionColor"
                },
                "tool_fallback": {
                  "default": false,
                  "type": "boolean",
                  "x-struct": null,
                  "x-validate": null
                },
                "value": {
                  "type": "string",
                  "x-struct": null,
                  "x-validate": null
                }
              },
              "required": [
                "value"
              ],
              "type": "object",
              "x-struct": null,
              "x-validate": null
            },
            "maxItems": 1000,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.UserSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.UserSelectPropertyRequest",
        "x-validate": null
      },
      "Projects.AddTimeseriesCollectionPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.AddTimeseriesCollectionPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "timeseries_collection"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description"
        ],
        "title": "Projects.AddTimeseriesCollectionPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddTimeseriesCollectionPropertyRequest",
        "x-validate": null
      },
      "Projects.SubProjectPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Sub-project property configuration",
        "properties": {
          "child_project_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "primary_property_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          }
        },
        "required": [
          "child_project_id",
          "primary_property_id"
        ],
        "title": "Projects.SubProjectPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SubProjectPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.ThinkingEffort": {
        "description": "Level of thinking effort for AI tools",
        "enum": [
          "disabled",
          "minimal",
          "low",
          "medium",
          "high",
          "xhigh",
          "max",
          "auto"
        ],
        "title": "Projects.ThinkingEffort",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ThinkingEffort",
        "x-validate": null
      },
      "Projects.PropertyInputResponse": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.DirectHubInput"
          },
          {
            "$ref": "#/components/schemas/Projects.DataStoreInputResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.DirectFieldInput"
          },
          {
            "$ref": "#/components/schemas/Projects.ViaReferencePropertyInput"
          },
          {
            "$ref": "#/components/schemas/Projects.RelatedPropertyInput"
          }
        ],
        "title": "Projects.PropertyInputResponse",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyInputResponse",
        "x-validate": null
      },
      "PropertyAnyOfString": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are in the values specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyAnyOfString",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldSelectOptionValue.PropertyAnyOf",
        "x-validate": null
      },
      "Projects.DynamicArgumentOverrideFixed": {
        "additionalProperties": false,
        "description": "Override for a dynamic skill argument with fixed value",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "dynamic"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "description": "Any type allowed for dynamic fixed values",
            "x-struct": null,
            "x-validate": null
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_label": {
            "description": "Optional label for presentation/identification purposes. This is not part of the value in any way.",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value_type": {
            "enum": [
              "fixed"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.DynamicArgumentOverrideFixed",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DynamicArgumentOverrideFixed",
        "x-validate": null
      },
      "Projects.GenericPropertyInput": {
        "additionalProperties": false,
        "description": "A property input. If entity_id is null, the input will always be from current entity or entities\nfiltered by supplied `entities_filter` if any.\nAlternatively inputs can be filtered from a remote project by specifying `via_property_id` which\npoints to a `reference` property that acts as selector of entities from remote project.\n",
        "properties": {
          "entities_filter": {
            "$ref": "#/components/schemas/EntityFilters.NullableFilter"
          },
          "entity_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          },
          "hub_filters": {
            "$ref": "#/components/schemas/Projects.HubFilters"
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "target": {
            "$ref": "#/components/schemas/Projects.PropertyInputTarget"
          },
          "target_filter": {
            "$ref": "#/components/schemas/Projects.PropertyInputTargetFilter"
          },
          "via_property_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          }
        },
        "required": [
          "property_id"
        ],
        "title": "Projects.GenericPropertyInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.GenericPropertyInput",
        "x-validate": null
      },
      "EntityFilters.GroupFilter": {
        "additionalProperties": false,
        "description": "Groups `simple` or `group filters` together with `or`, `and` operators. You have to specify at least one `filter`.",
        "properties": {
          "conjunction": {
            "$ref": "#/components/schemas/EntityFilters.Conjunction"
          },
          "filters": {
            "description": "List of `simple` or `group` filters",
            "items": {
              "$ref": "#/components/schemas/EntityFilters.Filter"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "conjunction",
          "filters"
        ],
        "title": "EntityFilters.GroupFilter",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.GroupFilter",
        "x-validate": null
      },
      "Projects.DataStoreInputResponse": {
        "additionalProperties": false,
        "description": "A workspace Data Store this property uses, and the access the property is granted over it. Data Store contents are an untracked external dependency: mutations do not change the calculation hash or automatically recalculate dependent fields. Request a new calculation when fresh Data Store data is required.",
        "properties": {
          "data_store_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "mode": {
            "description": "Whether the property may only read the store, or also write to it.",
            "enum": [
              "read_only",
              "read_write"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "data_store_id",
          "mode"
        ],
        "title": "Projects.DataStoreInputResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DataStoreInputResponse",
        "x-validate": null
      },
      "FieldNumberValue": {
        "additionalProperties": false,
        "description": "Filter entities based on field's number value.\nFor all matches except `property_any_of` and `property_none_of` matchers,\nthe value can contain a unit which will be used to pre-filter values, i.e.\n`100 EUR` will find all entities with a number value greater/equal/less than `100`\nbut only for values with unit `EUR`.\n",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOf"
              },
              {
                "$ref": "#/components/schemas/PropertyGreaterThan"
              },
              {
                "$ref": "#/components/schemas/PropertyLessThan"
              },
              {
                "$ref": "#/components/schemas/PropertyGreaterThanOrEqualTo"
              },
              {
                "$ref": "#/components/schemas/PropertyLessThanOrEqualTo"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_number_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldNumberValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberValue",
        "x-validate": null
      },
      "Projects.AddFileCollectionPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.AddFileCollectionPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "file_collection"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description"
        ],
        "title": "Projects.AddFileCollectionPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddFileCollectionPropertyRequest",
        "x-validate": null
      },
      "Common.APIErrorDetails": {
        "description": "Additional structured error context. Shape varies by error code.\n\n- For conflict errors: contains a `conflicts` array with conflicting resources\n- For other errors: may contain arbitrary error-specific context",
        "nullable": true,
        "oneOf": [
          {
            "$ref": "#/components/schemas/Common.ConflictErrorDetails"
          },
          {
            "additionalProperties": true,
            "description": "Generic error details for non-conflict errors",
            "type": "object",
            "x-struct": null,
            "x-validate": null
          }
        ],
        "title": "Common.APIErrorDetails",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Common.APIErrorDetails",
        "x-validate": null
      },
      "Projects.FileListArgumentOverrideReference": {
        "additionalProperties": false,
        "description": "Override for a file list skill argument with input reference",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "file_list"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "$ref": "#/components/schemas/Projects.InputReference"
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "input_reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.FileListArgumentOverrideReference",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.FileListArgumentOverrideReference",
        "x-validate": null
      },
      "Projects.AddCollectionPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for collection property.",
        "properties": {
          "properties": {
            "items": {
              "$ref": "#/components/schemas/Projects.CollectionSubproperty"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "properties"
        ],
        "title": "Projects.AddCollectionPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddCollectionPropertyConfig",
        "x-validate": null
      },
      "Projects.FileCollectionPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "File collection property configuration",
        "properties": {
          "max_rows": {
            "default": 0,
            "type": "integer",
            "x-struct": null,
            "x-validate": null
          },
          "pdf_split_mode": {
            "$ref": "#/components/schemas/Projects.PDFSplitMode"
          },
          "pdf_split_size": {
            "default": 1,
            "type": "integer",
            "x-struct": null,
            "x-validate": null
          },
          "properties": {
            "items": {
              "$ref": "#/components/schemas/Projects.CollectionPropertyResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "subproject_config": {
            "$ref": "#/components/schemas/Projects.SubProjectPropertyConfigResponse"
          }
        },
        "required": [
          "subproject_config",
          "properties",
          "max_rows",
          "pdf_split_mode",
          "pdf_split_size"
        ],
        "title": "Projects.FileCollectionPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.FileCollectionPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.AddHubSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.HubSelectPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "hub_select"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddHubSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddHubSelectPropertyRequest",
        "x-validate": null
      },
      "Projects.PropertyResponse": {
        "additionalProperties": false,
        "description": "A property",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.PropertyConfigResponse"
          },
          "description": {
            "description": "Property description. Can contain input references in the format `@<input.reference_as>` or hub references in the format `@<hub.reference_as>`.\n\nThe `reference_as` field uniquely identifies an input or hub and follows these patterns:\n\n**Input References:**\n- `P<property_id>` - for value inputs from properties (target: value)\n- `P<property_id>:E<entity_id>` - for value inputs from library properties\n- `P<property_id>:T<input_target>` - for targeted inputs (e.g., metadata, sub-path extraction)\n- `P<property_id>:T<input_target>[key=val,...]` - for targeted inputs with dynamic filters\n- `P<property_id>:E<entity_id>:T<input_target>` - for targeted inputs from library properties\n\n**Sub-path Targets (for bundle properties):**\n- `:Tvalue.text` - extracts the text portion from a bundle as a text input\n- `:Tvalue.files` - extracts all files from a bundle as file inputs\n- `:Tvalue.files[category=output]` - extracts files filtered by category\n- `:Tvalue.files[filename=report.pdf]` - extracts files filtered by filename\n- `:Tvalue.files[category=output,filename=report.pdf]` - combined filter\n\n**Metadata Targets:**\n- `:Ttool_metadata.motivation` - extracts tool motivation metadata\n- `:Ttool_metadata.confidence` - extracts tool confidence metadata\n\n**Hub References:**\n- `H<hub_id>` - for direct hub references (static hubs, i.e. hubs not from hub select properties)\n- For hubs from hub select properties, use the property's `reference_as` (e.g., `P<property_id>`)\n\nExamples:\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f>` - reference to property value\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:E01i9w5n4-0g3b-5c6d-9f8e-2b3c4d5e6f7g>` - reference to library property value\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Ttool_metadata.motivation>` - reference to property metadata\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Tvalue.text>` - reference to bundle text extraction\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Tvalue.files[category=output]>` - reference to filtered bundle files\n- `@<H01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f>` - direct reference to a static hub by its ID\n",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "effective_tool": {
            "deprecated": true,
            "description": "Deprecated: always set to `tool`",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "default": [],
            "description": "List of MCP tools enabled for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "default": [],
            "description": "List of skills enabled for this property (only available for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hash": {
            "nullable": false,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "incomplete_collection_input_rows_behaviour": {
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInputResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "owner": {
            "enum": [
              "user",
              "system"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "parent_project_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          },
          "parent_property_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          },
          "remote_outputs": {
            "description": "List of all outputs for that property that are not located in current project.\n`active` field is set to true if that property fields will be recalculated or\nmarked as stale if fields of this property change. Generally, this should be almost\nalways the case, but sometimes you may see `active` set to false if property has\ntoo many dependencies.\n",
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyRemoteOutputResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "restore_warnings": {
            "description": "Present only on successful restore when stored references to removed properties were omitted.",
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyConfigurationRestoreWarning"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "reviewable": {
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "slug": {
            "pattern": "^[a-z_-][a-z0-9_-]*$",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "supported_indices": {
            "items": {
              "enum": [
                "semantic"
              ],
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfig"
          },
          "tool_version": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "type": {
            "$ref": "#/components/schemas/Projects.Common.PropertyType"
          },
          "visible_in_entity_sidebar": {
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "type",
          "tool",
          "is_grounded",
          "input_ids",
          "inputs",
          "owner",
          "hash",
          "skip_behaviour",
          "incomplete_collection_input_rows_behaviour",
          "tool_config",
          "visible_in_entity_sidebar",
          "reviewable",
          "remote_outputs",
          "enabled_skills",
          "enabled_mcp_tools"
        ],
        "title": "Projects.PropertyResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyResponse",
        "x-validate": null
      },
      "Projects.PropertyInputTargetFilter": {
        "additionalProperties": false,
        "description": "Dynamic filter for the input target. Only applicable when target is value.files. Allowed keys: category (string), filename (string).",
        "nullable": true,
        "properties": {
          "category": {
            "description": "Filter files by category",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "filename": {
            "description": "Filter files by filename",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.PropertyInputTargetFilter",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyInputTargetFilter",
        "x-validate": null
      },
      "FieldStatus": {
        "additionalProperties": false,
        "description": "Filter entities based on a fields status",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfFieldStatus"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfFieldStatus"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_status"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldStatus",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldStatus",
        "x-validate": null
      },
      "Projects.ReferenceEntityLimit": {
        "description": "Maximum number of matched entities to reference. 0 value will use default system limit (1000).",
        "maximum": 1000,
        "minimum": 0,
        "title": "Projects.ReferenceEntityLimit",
        "type": "integer",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ReferenceEntityLimit",
        "x-validate": null
      },
      "Projects.InputReference": {
        "description": "Input reference that can be used in property descriptions and skill argument overrides.\n\nCan contain input references in the format `@<input.reference_as>` or hub references in the format `@<hub.reference_as>`.\n\nThe `reference_as` field uniquely identifies an input or hub and follows these patterns:\n\n**Input References:**\n- `P<property_id>` - for value inputs from properties (target: value)\n- `P<property_id>:E<entity_id>` - for value inputs from library properties\n- `P<property_id>:T<input_target>` - for targeted inputs (e.g., metadata, sub-path extraction)\n- `P<property_id>:T<input_target>[key=val,...]` - for targeted inputs with dynamic filters\n- `P<property_id>:E<entity_id>:T<input_target>` - for targeted inputs from library properties\n\n**Sub-path Targets (for bundle properties):**\n- `:Tvalue.text` - extracts the text portion from a bundle as a text input\n- `:Tvalue.files` - extracts all files from a bundle as file inputs\n- `:Tvalue.files[category=output]` - extracts files filtered by category\n- `:Tvalue.files[filename=report.pdf]` - extracts files filtered by filename\n- `:Tvalue.files[category=output,filename=report.pdf]` - combined filter\n\n**Metadata Targets:**\n- `:Ttool_metadata.motivation` - extracts tool motivation metadata\n- `:Ttool_metadata.confidence` - extracts tool confidence metadata\n\n**Hub References:**\n- `H<hub_id>` - for direct hub references (static hubs, i.e. hubs not from hub select properties)\n- For hubs from hub select properties, use the property's `reference_as` (e.g., `P<property_id>`)\n\nExamples:\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f>` - reference to property value\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:E01i9w5n4-0g3b-5c6d-9f8e-2b3c4d5e6f7g>` - reference to library property value\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Ttool_metadata.motivation>` - reference to property metadata\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Tvalue.text>` - reference to bundle text extraction\n- `@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f:Tvalue.files[category=output]>` - reference to filtered bundle files\n- `@<H01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f>` - direct reference to a static hub by its ID\n",
        "example": "@<P01h8v4k3-9f2a-4b5c-8e7d-1a2b3c4d5e6f>",
        "pattern": "^@<[[:alnum:]_.:\\-\\[\\]=,]+>$",
        "title": "Projects.InputReference",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.InputReference",
        "x-validate": null
      },
      "Projects.PropertyInput": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.GenericPropertyInput"
          },
          {
            "$ref": "#/components/schemas/Projects.DirectHubInput"
          },
          {
            "$ref": "#/components/schemas/Projects.DataStoreInput"
          }
        ],
        "title": "Projects.PropertyInput",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyInput",
        "x-validate": null
      },
      "EntityFilters.ActivateViewId.AnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have any of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.ActivateViewId.AnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ActivateViewId.AnyOf",
        "x-validate": null
      },
      "Projects.CollectionPropertyResponse": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "type": {
            "enum": [
              "text",
              "json",
              "number"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type"
        ],
        "title": "Projects.CollectionPropertyResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.CollectionPropertyResponse",
        "x-validate": null
      },
      "Projects.ClientCertConfigSchema": {
        "additionalProperties": false,
        "description": "Client certificate configuration for mTLS connections",
        "properties": {
          "cert_secret_name": {
            "description": "Secret name for the certificate PEM",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "domain": {
            "description": "Target domain for mTLS",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "key_secret_name": {
            "description": "Secret name for the private key PEM",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "passphrase_secret_name": {
            "description": "Secret name for the private key passphrase",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.ClientCertConfigSchema",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ClientCertConfigSchema",
        "x-validate": null
      },
      "PropertyNoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the none of the values in the filter exist in the subject",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyNoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldFileName.PropertyNoneOf",
        "x-validate": null
      },
      "EntityFilters.EntityReviewStatus.NoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have none of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.Common.FieldReviewStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.EntityReviewStatus.NoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityReviewStatus.NoneOf",
        "x-validate": null
      },
      "Projects.ReferencePropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for reference property.\nAllows to provide source project and entity limit (0 for to use system maximum).\n",
        "properties": {
          "entity_limit": {
            "$ref": "#/components/schemas/Projects.ReferenceEntityLimit"
          },
          "project_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "entity_limit",
          "project_id"
        ],
        "title": "Projects.ReferencePropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ReferencePropertyConfig",
        "x-validate": null
      },
      "PropertyLessThan": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are less than the one specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "property_less_than"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "value"
        ],
        "title": "PropertyLessThan",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberValue.PropertyLessThan",
        "x-validate": null
      },
      "Projects.PropertyToolConfigUpsert": {
        "additionalProperties": false,
        "description": "Configuration for AI tool behavior (upsert)",
        "properties": {
          "auto_llm_config": {
            "$ref": "#/components/schemas/Projects.AutoLlmToolConfig"
          },
          "code_config": {
            "$ref": "#/components/schemas/Projects.CodeToolConfig"
          },
          "dependencies": {
            "deprecated": true,
            "description": "Deprecated: use code_config.dependencies instead",
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "go_agent_v2_config": {
            "$ref": "#/components/schemas/Projects.GoAgentV2ToolConfig"
          },
          "input_mode": {
            "description": "How to handle input data: primary_only (default), extracted_only, primary_and_extracted",
            "enum": [
              "primary_only",
              "extracted_only",
              "primary_and_extracted"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "knowledge_graph_config": {
            "$ref": "#/components/schemas/Projects.KnowledgeGraphToolConfig"
          },
          "llm_config": {
            "$ref": "#/components/schemas/Projects.LlmToolConfig"
          },
          "thinking_effort": {
            "deprecated": true,
            "description": "Deprecated: use llm_config.thinking_effort instead",
            "enum": [
              "disabled",
              "minimal",
              "low",
              "medium",
              "high",
              "xhigh",
              "max",
              "auto"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "upsert_entity_config": {
            "$ref": "#/components/schemas/Projects.UpsertEntityToolConfig"
          }
        },
        "title": "Projects.PropertyToolConfigUpsert",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyToolConfigUpsert",
        "x-validate": "Elixir.AgiDbWeb.Schemas.Projects.PropertyToolConfigUpsertValidator"
      },
      "Projects.AddTimeseriesCollectionPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for timeseries collection property.",
        "properties": {
          "properties": {
            "items": {
              "$ref": "#/components/schemas/Projects.CollectionSubproperty"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "properties"
        ],
        "title": "Projects.AddTimeseriesCollectionPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddTimeseriesCollectionPropertyConfig",
        "x-validate": null
      },
      "ActivateViewId": {
        "additionalProperties": false,
        "description": "Filter entities based on active view id",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityFilters.ActivateViewId.AnyOf"
              },
              {
                "$ref": "#/components/schemas/EntityFilters.ActivateViewId.NoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "active_view_id"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "ActivateViewId",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ActivateViewId",
        "x-validate": null
      },
      "Projects.ArgumentOverrideValueFormat": {
        "default": "default",
        "description": "Format for the value. Use :pipedream_raw to wrap the value in a PipedreamRawValue structure for Pipedream skills.",
        "enum": [
          "default",
          "pipedream_raw"
        ],
        "title": "Projects.ArgumentOverrideValueFormat",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ArgumentOverrideValueFormat",
        "x-validate": null
      },
      "PropertyNoneOfFieldStatus": {
        "additionalProperties": false,
        "description": "Matches items based on whether the none of the values in the filter exist in the subject",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.ListEntities.FieldStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyNoneOfFieldStatus",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldStatus.PropertyNoneOf",
        "x-validate": null
      },
      "EntityFilters.NullableOrEmptyObject": {
        "additionalProperties": false,
        "nullable": true,
        "properties": {},
        "title": "EntityFilters.NullableOrEmptyObject",
        "type": "object",
        "x-struct": null,
        "x-validate": null
      },
      "EntityStatus": {
        "additionalProperties": false,
        "description": "Filter entities based on their fields status",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ViewAnyOfFieldStatuses"
              },
              {
                "$ref": "#/components/schemas/ViewNoneOfFieldStatuses"
              },
              {
                "$ref": "#/components/schemas/ViewAllOfFieldStatuses"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "entity_status"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "EntityStatus",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityStatus",
        "x-validate": null
      },
      "FieldNumberUnit": {
        "additionalProperties": false,
        "description": "Filter entities based on field's number unit",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_number_unit"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldNumberUnit",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberUnit",
        "x-validate": null
      },
      "Projects.TriggerPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Response for trigger property configuration (system-created reference subtype)",
        "properties": {
          "entity_limit": {
            "minimum": 0,
            "type": "integer",
            "x-struct": null,
            "x-validate": null
          },
          "inbound_trigger_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "project_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "inbound_trigger_id",
          "entity_limit",
          "project_id"
        ],
        "title": "Projects.TriggerPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.TriggerPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.GoAgentV2ToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for go_agent_v2",
        "properties": {
          "model": {
            "description": "Concrete model for go_agent_v2. Both current and legacy frontend selections are accepted during migration.",
            "enum": [
              "claude_5_5_opus",
              "claude_5_opus",
              "claude_5_sonnet",
              "claude_4_5_haiku",
              "gemini_3_5_flash_lite",
              "gpt_5_6_sol",
              "gemini_3_1_pro",
              "claude_4_6_sonnet",
              "gpt_5_6_terra",
              "gemini_3_8_flash",
              "gpt_5_6_luna",
              "gpt_6_astra",
              "gpt_6_sol",
              "gpt_6_1_sol",
              "gpt_6_luna",
              "gpt_5_5",
              "gpt_5_4_mini",
              "claude_4_8_opus",
              "gemini_3_flash"
            ],
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.GoAgentV2ToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.GoAgentV2ToolConfig",
        "x-validate": null
      },
      "Projects.DirectFieldInput": {
        "additionalProperties": false,
        "description": "A direct field input. Refers to specific field in chosen entity.",
        "properties": {
          "entity_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "target": {
            "$ref": "#/components/schemas/Projects.PropertyInputTarget"
          },
          "target_filter": {
            "$ref": "#/components/schemas/Projects.PropertyInputTargetFilter"
          }
        },
        "required": [
          "property_id",
          "entity_id"
        ],
        "title": "Projects.DirectFieldInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DirectFieldInput",
        "x-validate": null
      },
      "Projects.BasicPropertyType": {
        "enum": [
          "text",
          "file",
          "json",
          "url",
          "datetime",
          "data",
          "bundle"
        ],
        "title": "Projects.BasicPropertyType",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.BasicPropertyType",
        "x-validate": null
      },
      "EntityFilters.EntityId.NoneOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have none of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.EntityId.NoneOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityId.NoneOf",
        "x-validate": null
      },
      "Projects.AddUserSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.UserSelectPropertyRequest"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "user_select"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddUserSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddUserSelectPropertyRequest",
        "x-validate": null
      },
      "EntityFilters.EntityId.AnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have any of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.EntityId.AnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityId.AnyOf",
        "x-validate": null
      },
      "Projects.JsonPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "JSON property configuration with optional JSON Schema constraint",
        "properties": {
          "json_schema": {
            "description": "A JSON Schema object constraining the output, or null for unrestricted",
            "nullable": true,
            "type": "object",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "json_schema"
        ],
        "title": "Projects.JsonPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.JsonPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.AddActionPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.ActionPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "json_action",
              "file_action"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddActionPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddActionPropertyRequest",
        "x-validate": null
      },
      "Projects.AddNumberPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.NumberPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "number"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddNumberPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddNumberPropertyRequest",
        "x-validate": null
      },
      "Common.APIError": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "example": "bad_request",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "details": {
            "$ref": "#/components/schemas/Common.APIErrorDetails"
          },
          "message": {
            "example": "Bad Request",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "Common.APIError",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Common.APIError",
        "x-validate": null
      },
      "Projects.AddReferencePropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.ReferencePropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddReferencePropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddReferencePropertyRequest",
        "x-validate": null
      },
      "Projects.PropertyConfigurationRestoreWarning": {
        "additionalProperties": false,
        "description": "A warning surfaced when a configuration restore could not replay every stored reference.\n\n`code` discriminates the `data` payload:\n  * `missing_input_property` — an input property was removed from the project after the\n    snapshot was recorded. `data.property_id` is the omitted input.\n  * `missing_tool_config_property` — a `tool_config.upsert_entity_config` property\n    reference no longer exists. `data` carries `property_id` and `field`.\n",
        "properties": {
          "code": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "data": {
            "type": "object",
            "x-struct": null,
            "x-validate": null
          },
          "message": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "Projects.PropertyConfigurationRestoreWarning",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyConfigurationRestoreWarning",
        "x-validate": null
      },
      "PropertyNoneOfString": {
        "additionalProperties": false,
        "description": "Matches items based on whether the none of the values in the filter exist in the subject",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyNoneOfString",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldSelectOptionValue.PropertyNoneOf",
        "x-validate": null
      },
      "PropertyContainsAnyOfString": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject contains the one specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_contains_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyContainsAnyOfString",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldMetadataFieldName.PropertyContainsAnyOf",
        "x-validate": null
      },
      "PropertyAnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are in the values specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyAnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldFileName.PropertyAnyOf",
        "x-validate": null
      },
      "Common.ConflictErrorDetails": {
        "additionalProperties": false,
        "description": "Details for conflict errors",
        "properties": {
          "conflicts": {
            "description": "List of conflicting resources",
            "items": {
              "additionalProperties": true,
              "type": "object",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "conflicts"
        ],
        "title": "Common.ConflictErrorDetails",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Common.ConflictErrorDetails",
        "x-validate": null
      },
      "Projects.EnabledMcpTool": {
        "additionalProperties": false,
        "description": "An MCP tool enabled for a property. Identifies a specific tool exposed by a\nuser-configured MCP integration.\n\n`template_slug` (when present) and `server_url` are portable matching keys for\ncloning/exporting properties across workspaces — `template_slug` is the\npreferred match (template-based connectors like \"linear\", \"notion\"), with\n`server_url` as the fallback for custom user-provided MCPs.\n\n`mcp_integration_id` is nullable: cloning carries every tool from the template\neven when the new owner has no matching integration in the target workspace\nyet. Direct property edits still require it to be set; the\n`mcp_compatibility` endpoint surfaces unresolved tools to the user.\n",
        "properties": {
          "mcp_integration_id": {
            "description": "ID of the user's MCP integration instance, or `null` if not yet resolved (e.g. just cloned)",
            "format": "uuid",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "run_as_user_id": {
            "description": "ID of the user whose credentials are used at runtime for this tool. Stamped from the integration owner.",
            "format": "uuid",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "server_url": {
            "description": "Universal identifier for the MCP server",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "template_slug": {
            "description": "Template slug when the integration came from a known MCP template (e.g. \"linear\", \"notion\"); nil for custom user-provided MCPs",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool_name": {
            "description": "Name of the specific tool exposed by the integration",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "tool_name",
          "server_url"
        ],
        "title": "Projects.EnabledMcpTool",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.EnabledMcpTool",
        "x-validate": null
      },
      "Projects.Common.PropertyType": {
        "enum": [
          "text",
          "file",
          "json",
          "collection",
          "url",
          "reference",
          "number",
          "datetime",
          "bundle",
          "single_select",
          "multi_select",
          "user_select",
          "hub_select",
          "subject_select",
          "data",
          "document",
          "slideshow",
          "file_action",
          "json_action",
          "trigger",
          "file_collection",
          "timeseries_collection"
        ],
        "title": "Projects.Common.PropertyType",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.Common.PropertyType",
        "x-validate": null
      },
      "FieldMetadataFieldName": {
        "additionalProperties": false,
        "description": "Filter entities based on field's custom field name",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsNoneOfString"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_metadata_field_name"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldMetadataFieldName",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldMetadataFieldName",
        "x-validate": null
      },
      "EntityFilters.ParentEntityId.AnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have any of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.ParentEntityId.AnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ParentEntityId.AnyOf",
        "x-validate": null
      },
      "Projects.FileArgumentOverrideReference": {
        "additionalProperties": false,
        "description": "Override for a file skill argument with input reference",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "file"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "$ref": "#/components/schemas/Projects.InputReference"
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "input_reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.FileArgumentOverrideReference",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.FileArgumentOverrideReference",
        "x-validate": null
      },
      "Projects.KnowledgeGraphToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for knowledge-graph-backed tools (e.g. kg_document_extraction)",
        "properties": {
          "knowledge_graph_id": {
            "description": "Knowledge graph this property belongs to",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.KnowledgeGraphToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.KnowledgeGraphToolConfig",
        "x-validate": null
      },
      "PropertyGreaterThan": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are greater than the one specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "property_greater_than"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "value"
        ],
        "title": "PropertyGreaterThan",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberValue.PropertyGreaterThan",
        "x-validate": null
      },
      "Projects.AddDocumentPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.DocumentPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "document"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddDocumentPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddDocumentPropertyRequest",
        "x-validate": null
      },
      "EntityFilters.EntityReviewStatus.AnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject have any of the values specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.Common.FieldReviewStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "values"
        ],
        "title": "EntityFilters.EntityReviewStatus.AnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityReviewStatus.AnyOf",
        "x-validate": null
      },
      "ParentEntityId": {
        "additionalProperties": false,
        "description": "Filter entities based on parent entity id",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityFilters.ParentEntityId.AnyOf"
              },
              {
                "$ref": "#/components/schemas/EntityFilters.ParentEntityId.NoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "parent_entity_id"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "ParentEntityId",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.ParentEntityId",
        "x-validate": null
      },
      "EntityReviewStatus": {
        "additionalProperties": false,
        "description": "Filter entities based on review status of their fields",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityFilters.EntityReviewStatus.AnyOf"
              },
              {
                "$ref": "#/components/schemas/EntityFilters.EntityReviewStatus.NoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "entity_review_status"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "EntityReviewStatus",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityReviewStatus",
        "x-validate": null
      },
      "Projects.LlmToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for LLM tools",
        "properties": {
          "stream_progress_updates": {
            "description": "Whether to stream progress updates during execution",
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "thinking_effort": {
            "$ref": "#/components/schemas/Projects.ThinkingEffort"
          }
        },
        "title": "Projects.LlmToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.LlmToolConfig",
        "x-validate": null
      },
      "TextValue": {
        "additionalProperties": false,
        "deprecated": true,
        "description": "DEPRECATED: Use FieldTextValue instead",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsNoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "text_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "TextValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.TextValue",
        "x-validate": null
      },
      "Projects.ActionPropertyConfig": {
        "additionalProperties": false,
        "description": "Configuration for action property (json_action, file_action)",
        "properties": {
          "action_type": {
            "description": "Type of action: execute single skill or skill chain",
            "enum": [
              "skill",
              "skill_chain"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "entrypoint_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "action_type",
          "entrypoint_id"
        ],
        "title": "Projects.ActionPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ActionPropertyConfig",
        "x-validate": null
      },
      "Projects.IntegrationArgumentOverrideTenant": {
        "additionalProperties": false,
        "description": "Override pinning a native integration to a stable Entra tenant GUID. Resolved to a concrete connection at calculation time.",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "integration"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "description": "Entra tenant GUID",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_label": {
            "description": "Optional human-friendly tenant name for presentation purposes.",
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value_type": {
            "enum": [
              "integration_tenant"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.IntegrationArgumentOverrideTenant",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.IntegrationArgumentOverrideTenant",
        "x-validate": null
      },
      "Projects.AddBasicPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "description": "Type-specific configuration (e.g. json_schema for JSON properties)",
            "nullable": true,
            "properties": {
              "json_schema": {
                "description": "A JSON Schema object constraining the output",
                "nullable": true,
                "type": "object",
                "x-struct": null,
                "x-validate": null
              }
            },
            "type": "object",
            "x-struct": null,
            "x-validate": null
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "$ref": "#/components/schemas/Projects.BasicPropertyType"
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description"
        ],
        "title": "Projects.AddBasicPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddBasicPropertyRequest",
        "x-validate": null
      },
      "Projects.SubjectSelectPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for subject-select property.\nOptions are always dynamically loaded from all subjects in the workspace.\n",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "max_selected": {
            "$ref": "#/components/schemas/Projects.SelectMaxSelectedWithDefault"
          },
          "options": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOption"
            },
            "maxItems": 1000,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.SubjectSelectPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SubjectSelectPropertyConfig",
        "x-validate": null
      },
      "Id": {
        "additionalProperties": false,
        "deprecated": true,
        "description": "DEPRECATED: Use EntityId instead",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EntityFilters.EntityId.AnyOf"
              },
              {
                "$ref": "#/components/schemas/EntityFilters.EntityId.NoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "id"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "Id",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.Id",
        "x-validate": null
      },
      "ViewNoneOfFieldStatuses": {
        "additionalProperties": false,
        "description": "Matches items in a view based on whether none of their field statuses are in the filter values",
        "properties": {
          "name": {
            "enum": [
              "view_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.ListEntities.FieldStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "name",
          "view_id",
          "values"
        ],
        "title": "ViewNoneOfFieldStatuses",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityStatus.ViewNoneOf",
        "x-validate": null
      },
      "Projects.CollectionPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Collection property configuration",
        "properties": {
          "properties": {
            "items": {
              "$ref": "#/components/schemas/Projects.CollectionPropertyResponse"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "subproject_config": {
            "$ref": "#/components/schemas/Projects.SubProjectPropertyConfigResponse"
          }
        },
        "required": [
          "subproject_config",
          "properties"
        ],
        "title": "Projects.CollectionPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.CollectionPropertyConfigResponse",
        "x-validate": null
      },
      "Status": {
        "additionalProperties": false,
        "deprecated": true,
        "description": "DEPRECATED: Use FieldStatus instead",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfFieldStatus"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfFieldStatus"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "status"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "Status",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.Status",
        "x-validate": null
      },
      "Projects.Common.PropertyTool": {
        "enum": [
          "manual",
          "dall_e_3",
          "imagen",
          "whisper",
          "brave_search",
          "exa_search",
          "jev",
          "apollo_search",
          "perplexity",
          "perplexity_search",
          "summary",
          "auto_llm",
          "kg_document_extraction",
          "ocr",
          "pdf_convert",
          "ask_pdf",
          "run_mcp_tool",
          "heic_convert",
          "askexcel",
          "askexcel_context",
          "legacy_excel_compat",
          "excel_formula_recalc",
          "file_split",
          "knowledge_graph_ledger_writer",
          "embedding",
          "reference_filter",
          "json_template",
          "url_scrape",
          "http",
          "code",
          "sandbox_agent",
          "agent_file_op",
          "go_agent_v2",
          "sandbox_chat",
          "subject_resolution",
          "upsert_entity",
          "aws_ocr",
          "gpt_4_1",
          "gpt_4_1_azure",
          "gpt_4_1_mini",
          "gpt_4_1_mini_azure",
          "gpt_4_1_nano",
          "gpt_4_1_nano_azure",
          "gpt_5",
          "gpt_5_mini",
          "gpt_5_nano",
          "gpt_5_1",
          "gpt_5_1_azure",
          "gpt_5_2",
          "gpt_5_2_azure",
          "gpt_5_4",
          "gpt_5_4_azure",
          "gpt_5_4_mini",
          "gpt_5_4_mini_azure",
          "gpt_5_5",
          "gpt_5_5_azure",
          "gpt_5_5_pro",
          "gpt_5_6_sol",
          "gpt_5_6_sol_azure",
          "gpt_5_6_terra",
          "gpt_5_6_terra_azure",
          "gpt_5_6_luna",
          "gpt_5_6_luna_azure",
          "gpt_6_astra",
          "gpt_6_astra_azure",
          "gpt_6_sol",
          "gpt_6_sol_azure",
          "gpt_6_1_sol",
          "gpt_6_1_sol_azure",
          "gpt_6_luna",
          "gpt_6_luna_azure",
          "gpt_5_azure",
          "gpt_5_mini_azure",
          "gpt_5_nano_azure",
          "gpt_4",
          "web_search",
          "gpt_4o",
          "gpt_4o_azure",
          "gpt_4o_mini",
          "gpt_4o_mini_azure",
          "o3",
          "o3_deep_research",
          "o3_mini",
          "o4_mini",
          "o4_mini_azure",
          "o4_mini_deep_research",
          "gpt_3_5",
          "gemini_2_5_pro",
          "gemini_2_5_flash",
          "gemini_2_5_flash_lite",
          "gemini_3_flash",
          "gemini_3_1_pro",
          "gemini_3_1_flash_lite",
          "gemini_3_5_flash",
          "gemini_3_5_flash_lite",
          "gemini_3_6_flash",
          "gemini_3_7_flash",
          "gemini_3_8_flash",
          "gemini_2_5_flash_image",
          "gemini_3_pro_image",
          "gemini_3_1_flash_image",
          "claude_4_sonnet",
          "claude_4_sonnet_vertex_ai",
          "claude_4_sonnet_aws_bedrock",
          "claude_4_opus",
          "claude_4_opus_vertex_ai",
          "claude_4_1_opus_aws_bedrock",
          "claude_4_5_opus",
          "claude_4_5_opus_vertex_ai",
          "claude_4_5_opus_aws_bedrock",
          "claude_4_6_opus",
          "claude_4_6_opus_vertex_ai",
          "claude_4_6_opus_aws_bedrock",
          "claude_4_7_opus",
          "claude_4_7_opus_vertex_ai",
          "claude_4_7_opus_aws_bedrock",
          "claude_4_8_opus",
          "claude_4_8_opus_vertex_ai",
          "claude_4_8_opus_aws_bedrock",
          "claude_5_opus",
          "claude_5_opus_vertex_ai",
          "claude_5_opus_aws_bedrock",
          "claude_5_5_opus",
          "claude_5_5_opus_vertex_ai",
          "claude_5_5_opus_aws_bedrock",
          "claude_4_5_haiku",
          "claude_4_5_haiku_vertex_ai",
          "claude_4_5_haiku_aws_bedrock",
          "claude_4_6_sonnet",
          "claude_4_6_sonnet_vertex_ai",
          "claude_4_6_sonnet_aws_bedrock",
          "claude_5_sonnet",
          "claude_5_sonnet_vertex_ai",
          "claude_5_sonnet_aws_bedrock",
          "claude_4_5_sonnet",
          "claude_4_5_sonnet_vertex_ai",
          "claude_4_5_sonnet_aws_bedrock",
          "qwen3_235b",
          "qwen3_next_80b_thinking",
          "deepseek_v3_2",
          "glm_5_2",
          "deepseek_v4_flash",
          "qwen_3_7_plus",
          "kimi_k3",
          "hub_search_py",
          "slides_py",
          "slides_preprocessing_py",
          "slides_generation_py",
          "auto_property_py",
          "agent_builder_py",
          "agent_fixer_py",
          "html_to_image",
          "skill_runner",
          "knowledge_graph_ledger_relationship_writer",
          "semantic_splitter",
          "semantic_indexer",
          "xlsx_to_xml",
          "claude_3_5_sonnet",
          "claude_3_5_sonnet_vertex_ai",
          "claude_3_5_sonnet_aws_bedrock",
          "gemini_pro",
          "gemini_pro_vision",
          "gemini_3_pro",
          "claude_3_opus",
          "claude_3_opus_vertex_ai",
          "claude_3_sonnet",
          "claude_3_sonnet_vertex_ai",
          "claude_3_haiku",
          "claude_3_haiku_vertex_ai",
          "o1",
          "o1_mini",
          "gemini_2_5_flash_thinking_genai",
          "gemini_2_5_flash_thinking",
          "claude_3_7_thinking",
          "claude_3_7_thinking_vertex_ai",
          "claude_4_sonnet_thinking",
          "claude_4_sonnet_thinking_vertex_ai",
          "slides_converter_import_py",
          "slides_converter_export_py",
          "gemini_2_5_pro_genai",
          "gemini_2_5_flash_genai",
          "gemini_2_5_flash_lite_genai",
          "gemini_2_0_flash_lite_genai",
          "gemini_2_0_flash",
          "gemini_2_0_flash_lite",
          "gpt_3_5_azure",
          "claude_3_5_haiku",
          "claude_3_5_haiku_aws_bedrock",
          "claude_3_5_haiku_vertex_ai",
          "claude_3_7_sonnet",
          "claude_3_7_sonnet_aws_bedrock",
          "claude_3_7_sonnet_vertex_ai",
          "gemini_1_5_flash",
          "gemini_1_5_pro"
        ],
        "title": "Projects.Common.PropertyTool",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.Common.PropertyTool",
        "x-validate": null
      },
      "Projects.HubSelectPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for hub-select property.\nAllows to provide initial hub options. If no options provided, all hubs in workspace are available.\n",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "max_selected": {
            "$ref": "#/components/schemas/Projects.SelectMaxSelectedWithDefault"
          },
          "options": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOption"
            },
            "maxItems": 1000,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.HubSelectPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.HubSelectPropertyConfig",
        "x-validate": null
      },
      "EntityFilters.SimpleFilter": {
        "description": "Simple filter specifies rule that subject has to fulfill. Each simple filter consist of `subject` and `matcher`. Subject is name of property you want to filter on. For example if you want to filter by entity id you should specify {subject: 'entity_id'}. Next you have to specify matcher which defines how you would like to filer. If you are interested in any of entities within array of entity ids you should specify: {matcher: {name: 'any_of', values: [list of entity ids]}}",
        "oneOf": [
          {
            "$ref": "#/components/schemas/ActivateViewId"
          },
          {
            "$ref": "#/components/schemas/EntityId"
          },
          {
            "$ref": "#/components/schemas/EntityStatus"
          },
          {
            "$ref": "#/components/schemas/FieldSelectOptionValue"
          },
          {
            "$ref": "#/components/schemas/FieldTextValue"
          },
          {
            "$ref": "#/components/schemas/ParentEntityId"
          },
          {
            "$ref": "#/components/schemas/EntityReviewStatus"
          },
          {
            "$ref": "#/components/schemas/FieldStatus"
          },
          {
            "$ref": "#/components/schemas/FieldFileName"
          },
          {
            "$ref": "#/components/schemas/FieldMetadataFieldName"
          },
          {
            "$ref": "#/components/schemas/FieldNumberValue"
          },
          {
            "$ref": "#/components/schemas/FieldDatetimeValue"
          },
          {
            "$ref": "#/components/schemas/FieldNumberUnit"
          },
          {
            "$ref": "#/components/schemas/Id"
          },
          {
            "$ref": "#/components/schemas/SelectOptionValue"
          },
          {
            "$ref": "#/components/schemas/TextValue"
          },
          {
            "$ref": "#/components/schemas/Status"
          }
        ],
        "title": "EntityFilters.SimpleFilter",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.SimpleFilter",
        "x-validate": null
      },
      "Projects.ReferencePropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Reference property configuration",
        "properties": {
          "entity_limit": {
            "$ref": "#/components/schemas/Projects.ReferenceEntityLimit"
          },
          "project_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          }
        },
        "required": [
          "entity_limit",
          "project_id"
        ],
        "title": "Projects.ReferencePropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ReferencePropertyConfigResponse",
        "x-validate": null
      },
      "PropertyContainsAnyOf": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject contains the one specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_contains_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyContainsAnyOf",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldTextValue.PropertyContainsAnyOf",
        "x-validate": null
      },
      "Projects.UpsertEntityToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for the upsert_entity tool.\n\nThis tool creates or updates entities in a target project. The decision between\ncreating a new entity vs updating an existing one is driven by the **reference input**\nspecified via `reference_source_property_id`. If that reference input resolves to an\nexisting entity, the tool updates it; otherwise (empty match or no reference), it creates\na new entity (when `allow_insert` is true).\n\n## How to configure\n\nEvery `upsert_entity` property needs at minimum:\n- `target_project_id` — the project to write entities into\n- `allow_insert` — whether creation of new entities is allowed\n\nThen, depending on the use case, you link source inputs via the config fields below.\nEach `*_property_id` field refers to a **source property** that must also be wired as\nan input on the property definition (via `inputs`).\n\n### Quick reference — config fields and their linked inputs\n\n```\n┌─────────────────────────────────────────┬──────────────────────────────┐\n│ Config field                            │ Expected input type          │\n├─────────────────────────────────────────┼──────────────────────────────┤\n│ reference_source_property_id            │ :reference (update selector) │\n│ json_input_property_id                  │ :json (free-form params)     │\n│ parent_entity_id_source_property_id     │ :reference (parent entity)   │\n│ property_mappings[].source_property_id  │ any typed (text, number, …)  │\n└─────────────────────────────────────────┴──────────────────────────────┘\n```\n\n## Scenario 1 — Create-only (no reference)\n\nUse case: always create a new entity in the target project. No reference input\nis needed — `reference_source_property_id` is null (or omitted) and there are no\nreference inputs wired. Every execution creates a fresh entity.\n\n```\nSource Project\n┌──────────────────────────────────────────────────┐\n│  Properties:                                     │\n│    [source_name]   type: text                    │\n│    [source_email]  type: text                    │\n│    [upsert_prop]   tool: upsert_entity           │\n│         inputs: [source_name, source_email]      │\n│         tool_config.upsert_entity_config:        │\n│           target_project_id: <TARGET_ID>         │\n│           allow_insert: true                     │\n│           reference_source_property_id: null      │\n│           property_mappings:                     │\n│             - target: <target_name.id>           │\n│               source: <source_name.id>           │\n│             - target: <target_email.id>          │\n│               source: <source_email.id>          │\n└──────────────────────────────────────────────────┘\n                     │\n                     ▼  always creates\nTarget Project\n┌──────────────────────────────────────────────────┐\n│  Properties:                                     │\n│    [target_name]   type: text                    │\n│    [target_email]  type: text                    │\n└──────────────────────────────────────────────────┘\n```\n\nInputs on the upsert_entity property:\n```json\n[\n  {\"property_id\": \"<source_name.id>\"},\n  {\"property_id\": \"<source_email.id>\"}\n]\n```\n\n## Scenario 2 — Update-only (no insert)\n\nUse case: sync field values into an existing entity matched by a reference.\n\n```\nSource Project (where the upsert_entity property lives)\n┌──────────────────────────────────────────────────┐\n│  Properties:                                     │\n│    [ref_to_target]  type: reference ──────────┐   │\n│    [source_name]    type: text                │   │\n│    [source_email]   type: text                │   │\n│    [upsert_prop]    tool: upsert_entity       │   │\n│         inputs: [ref_to_target,               │   │\n│                  source_name, source_email]    │   │\n│         tool_config.upsert_entity_config:     │   │\n│           target_project_id: <TARGET_ID>      │   │\n│           allow_insert: false                 │   │\n│           reference_source_property_id:       │   │\n│             <ref_to_target.id>  ◄── decides   │   │\n│                                    update/create  │\n│           property_mappings:                  │   │\n│             - target: <target_name.id>        │   │\n│               source: <source_name.id>        │   │\n│             - target: <target_email.id>       │   │\n│               source: <source_email.id>       │   │\n└──────────────────────────────────────┼────────┘   │\n                                       │            │\nTarget Project  ◄──────────────────────┘            │\n┌──────────────────────────────────────────────────┐\n│  Properties:                                     │\n│    [target_name]   type: text                    │\n│    [target_email]  type: text                    │\n└──────────────────────────────────────────────────┘\n```\n\nInputs on the upsert_entity property:\n```json\n[\n  {\"property_id\": \"<ref_to_target.id>\"},\n  {\"property_id\": \"<source_name.id>\"},\n  {\"property_id\": \"<source_email.id>\"}\n]\n```\n\n## Scenario 3 — Upsert (update if matched, create if not)\n\nSame as Scenario 2 but with `allow_insert: true`. When `reference_source_property_id`\nresolves to no entity, a new entity is created in the target project with the\nmapped field values.\n\n## Scenario 4 — Create into a collection sub-project\n\nUse case: create child entities under a parent entity in a collection.\n\n```\nParent Project\n┌──────────────────────────────────────────────────┐\n│  Properties:                                     │\n│    [ref_to_parent] type: reference ───┐           │\n│    [items_json]    type: json         │           │\n│    [upsert_prop]   tool: upsert_entity│           │\n│         inputs: [ref_to_parent,       │           │\n│                  items_json]           │           │\n│         tool_config.upsert_entity_config:         │\n│           target_project_id: <CHILD_PROJECT_ID>   │\n│           allow_insert: true                      │\n│           reference_source_property_id: null       │\n│             (no update, always create)             │\n│           json_input_property_id:                  │\n│             <items_json.id>                        │\n│           parent_entity_id_source_property_id:     │\n│             <ref_to_parent.id>  ◄── parent entity  │\n│           batch_entity_upsert: true                │\n└──────────────────────────────────────────────────┘\n          │                    │\n          ▼                    ▼\nParent Project (self-ref)    Child Sub-Project\n┌─────────────────┐          ┌─────────────────┐\n│  entity matched │          │  new entity      │\n│  by ref_to_parent│         │  created here    │\n│  becomes parent  │         │  with parent_id  │\n└─────────────────┘          └─────────────────┘\n```\n\n## Scenario 5 — Upsert into a collection sub-project\n\nCombines update-or-create with collection parenting:\n\n```\ntool_config.upsert_entity_config:\n  target_project_id: <CHILD_PROJECT_ID>\n  allow_insert: true\n  reference_source_property_id: <ref_to_child.id>\n  parent_entity_id_source_property_id: <ref_to_parent.id>\n  batch_entity_upsert: true\n  property_mappings:\n    - target: <child_name.id>, source: <source_name.id>\n```\n\nHere three reference inputs are needed:\n- `ref_to_child` → decides update vs create in the child project\n- `ref_to_parent` → supplies `parent_entity_id` for new child entities\n\n## Auto-discovery (fallback)\n\nWhen `reference_source_property_id` is null (not set), the tool falls back to\nauto-discovering the update reference by picking the first `:reference` input\nthat is not already consumed by `property_mappings`, `json_input_property_id`,\nor `parent_entity_id_source_property_id`. **For API integrations, explicit\nconfiguration via `reference_source_property_id` is strongly recommended** to\navoid ambiguity when multiple reference inputs exist.\n",
        "properties": {
          "allow_insert": {
            "description": "Whether to allow inserting new entities",
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "batch_entity_upsert": {
            "description": "When true, uses the batch entity creation path (AddEntities) instead of single (AddEntity). The batch path touches the parent collection hash after insert, which triggers recalculation of upstream properties that depend on the collection. Only has effect when parent_entity_id_source_property_id is also set.",
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "json_input_property_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Common.UUID"
              }
            ],
            "description": "Optional source property ID that provides free-form JSON params for upsert input",
            "nullable": true,
            "x-struct": null,
            "x-validate": null
          },
          "parent_entity_id_source_property_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Common.UUID"
              }
            ],
            "description": "Source property ID of a reference input whose matched entity ID is used as parent_entity_id when creating entities in collection sub-projects",
            "nullable": true,
            "x-struct": null,
            "x-validate": null
          },
          "property_mappings": {
            "description": "Maps target property IDs to source property IDs for field values",
            "items": {
              "properties": {
                "source_property_id": {
                  "$ref": "#/components/schemas/Common.UUID"
                },
                "target_property_id": {
                  "$ref": "#/components/schemas/Common.UUID"
                }
              },
              "required": [
                "target_property_id",
                "source_property_id"
              ],
              "type": "object",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "reference_source_property_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Common.UUID"
              }
            ],
            "description": "Source property ID of a reference input that decides whether to update or create. When the reference input resolves to a matched entity, that entity is updated; when it resolves to no entity (or is absent), a new entity is created (if allow_insert is true). When null, the tool auto-discovers the first non-consumed reference input.",
            "nullable": true,
            "x-struct": null,
            "x-validate": null
          },
          "target_project_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          }
        },
        "title": "Projects.UpsertEntityToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.UpsertEntityToolConfig",
        "x-validate": null
      },
      "Projects.SelectOptionResponse": {
        "additionalProperties": false,
        "description": "Response for a select option",
        "properties": {
          "color": {
            "$ref": "#/components/schemas/Projects.SelectOptionColor"
          },
          "tool_fallback": {
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "value",
          "tool_fallback"
        ],
        "title": "Projects.SelectOptionResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectOptionResponse",
        "x-validate": null
      },
      "Projects.SelectOption": {
        "additionalProperties": false,
        "properties": {
          "color": {
            "$ref": "#/components/schemas/Projects.SelectOptionColor"
          },
          "tool_fallback": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "value"
        ],
        "title": "Projects.SelectOption",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectOption",
        "x-validate": null
      },
      "Projects.SelectOptionColor": {
        "maxLength": 32,
        "nullable": true,
        "title": "Projects.SelectOptionColor",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectOptionColor",
        "x-validate": null
      },
      "Projects.CodeToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for code tools",
        "properties": {
          "client_certs": {
            "description": "Client certificate configurations for mTLS connections",
            "items": {
              "$ref": "#/components/schemas/Projects.ClientCertConfigSchema"
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "dependencies": {
            "description": "List of code dependencies",
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "unsafe_allow_network": {
            "description": "Whether network access is allowed in code execution",
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.CodeToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.CodeToolConfig",
        "x-validate": null
      },
      "EntityFilters.Filter": {
        "description": "Filter can be `simple` or `group`. If you want to filter by one `subject` eg. `item name`. You can specify `simple filter` for given `subject` and `matcher`. For more details please see details of `item name filter` or other simple filters. If you want to to filter item by more than one filter You need to use `group filter` which gives possibility to join `filters` using `and`, `or` operators.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/EntityFilters.GroupFilter"
          },
          {
            "$ref": "#/components/schemas/EntityFilters.SimpleFilter"
          }
        ],
        "title": "EntityFilters.Filter",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.Filter",
        "x-validate": null
      },
      "PropertyContainsNoneOfString": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject contains the one specified in the filter",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_contains_none_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyContainsNoneOfString",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldMetadataFieldName.PropertyContainsNoneOf",
        "x-validate": null
      },
      "Projects.IntegrationArgumentOverrideReference": {
        "additionalProperties": false,
        "description": "Override for an integration skill argument with input reference",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "integration"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "$ref": "#/components/schemas/Projects.InputReference"
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "input_reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.IntegrationArgumentOverrideReference",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.IntegrationArgumentOverrideReference",
        "x-validate": null
      },
      "Projects.AddSlideshowPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "description": "Type-specific configuration (e.g. json_schema for JSON properties)",
            "nullable": true,
            "properties": {
              "json_schema": {
                "description": "A JSON Schema object constraining the output",
                "nullable": true,
                "type": "object",
                "x-struct": null,
                "x-validate": null
              }
            },
            "type": "object",
            "x-struct": null,
            "x-validate": null
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "slideshow"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description"
        ],
        "title": "Projects.AddSlideshowPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddSlideshowPropertyRequest",
        "x-validate": null
      },
      "Projects.DocumentPropertyConfig": {
        "additionalProperties": false,
        "description": "Configuration for generated document property",
        "properties": {
          "document_type": {
            "description": "The type of document to generate",
            "enum": [
              "docs",
              "slides",
              "charts"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "document_type"
        ],
        "title": "Projects.DocumentPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DocumentPropertyConfig",
        "x-validate": null
      },
      "Projects.NumberPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Number property configuration",
        "properties": {
          "format": {
            "default": "auto",
            "enum": [
              "auto",
              "custom"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "format_custom": {
            "$ref": "#/components/schemas/Projects.NumberFormatCustomResponse"
          }
        },
        "required": [
          "format",
          "format_custom"
        ],
        "title": "Projects.NumberPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.NumberPropertyConfigResponse",
        "x-validate": null
      },
      "Projects.SelectMaxSelectedWithDefault": {
        "default": 0,
        "description": "Maximum number of options that can be selected on any field.\n0 for unlimited.\n",
        "minimum": 0,
        "nullable": true,
        "title": "Projects.SelectMaxSelectedWithDefault",
        "type": "integer",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectMaxSelectedWithDefault",
        "x-validate": null
      },
      "PropertyLessThanOrEqualTo": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are less than or equal to the one specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "property_less_than_or_equal_to"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "value"
        ],
        "title": "PropertyLessThanOrEqualTo",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberValue.PropertyLessThanOrEqualTo",
        "x-validate": null
      },
      "Projects.PDFSplitSize": {
        "description": "For manual file_collection properties only.\nControls PDF chunk extraction size. See `pdf_split_mode` for more details.\n",
        "minimum": 1,
        "title": "Projects.PDFSplitSize",
        "type": "integer",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PDFSplitSize",
        "x-validate": null
      },
      "Projects.DirectHubInput": {
        "additionalProperties": false,
        "description": "A direct reference to a Hub by its ID, optionally scoped to a specific file or folder.",
        "properties": {
          "direct_hub_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "hub_file_id": {
            "$ref": "#/components/schemas/Common.NullableUUID"
          },
          "hub_filters": {
            "$ref": "#/components/schemas/Projects.HubFilters"
          }
        },
        "required": [
          "direct_hub_id"
        ],
        "title": "Projects.DirectHubInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DirectHubInput",
        "x-validate": null
      },
      "Projects.SecretArgumentOverrideFixed": {
        "additionalProperties": false,
        "description": "Override for a secret skill argument with fixed value",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "secret"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "description": "Secret name (string only)",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "fixed"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.SecretArgumentOverrideFixed",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SecretArgumentOverrideFixed",
        "x-validate": null
      },
      "Projects.RelatedPropertyInput": {
        "additionalProperties": false,
        "description": "An input property in directly related project, like collection or simply current project.\n",
        "properties": {
          "entities_filter": {
            "$ref": "#/components/schemas/EntityFilters.NullableFilter"
          },
          "hub_filters": {
            "$ref": "#/components/schemas/Projects.HubFilters"
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "target": {
            "$ref": "#/components/schemas/Projects.PropertyInputTarget"
          },
          "target_filter": {
            "$ref": "#/components/schemas/Projects.PropertyInputTargetFilter"
          }
        },
        "required": [
          "property_id"
        ],
        "title": "Projects.RelatedPropertyInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.RelatedPropertyInput",
        "x-validate": null
      },
      "EntityFilters.NullableFilter": {
        "description": "Filter can be `simple` or `group`. If you want to filter by one `subject` eg. `item name`. You can specify `simple filter` for given `subject` and `matcher`. For more details please see details of `item name filter` or other simple filters. If you want to to filter item by more than one filter You need to use `group filter` which gives possibility to join `filters` using `and`, `or` operators.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/EntityFilters.GroupFilter"
          },
          {
            "$ref": "#/components/schemas/EntityFilters.SimpleFilter"
          },
          {
            "$ref": "#/components/schemas/EntityFilters.NullableOrEmptyObject"
          }
        ],
        "title": "EntityFilters.NullableFilter",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.NullableFilter",
        "x-validate": null
      },
      "Projects.SkillArgumentOverride": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.DynamicArgumentOverrideFixed"
          },
          {
            "$ref": "#/components/schemas/Projects.DynamicArgumentOverrideReference"
          },
          {
            "$ref": "#/components/schemas/Projects.SecretArgumentOverrideFixed"
          },
          {
            "$ref": "#/components/schemas/Projects.SecretArgumentOverrideReference"
          },
          {
            "$ref": "#/components/schemas/Projects.IntegrationArgumentOverrideFixed"
          },
          {
            "$ref": "#/components/schemas/Projects.IntegrationArgumentOverrideReference"
          },
          {
            "$ref": "#/components/schemas/Projects.IntegrationArgumentOverrideTenant"
          },
          {
            "$ref": "#/components/schemas/Projects.FileArgumentOverrideReference"
          },
          {
            "$ref": "#/components/schemas/Projects.FileListArgumentOverrideReference"
          }
        ],
        "title": "Projects.SkillArgumentOverride",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SkillArgumentOverride",
        "x-validate": null
      },
      "Projects.NumberPropertyConfig": {
        "additionalProperties": false,
        "description": "Configuration for number property",
        "properties": {
          "format": {
            "default": "auto",
            "enum": [
              "auto",
              "custom"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "format_custom": {
            "$ref": "#/components/schemas/Projects.UpdateNumberFormatCustom"
          }
        },
        "title": "Projects.NumberPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.NumberPropertyConfig",
        "x-validate": null
      },
      "Projects.SecretArgumentOverrideReference": {
        "additionalProperties": false,
        "description": "Override for a secret skill argument with input reference",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "secret"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "$ref": "#/components/schemas/Projects.InputReference"
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "input_reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.SecretArgumentOverrideReference",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SecretArgumentOverrideReference",
        "x-validate": null
      },
      "ViewAnyOfFieldStatuses": {
        "additionalProperties": false,
        "description": "Matches items in a view based on whether any of their field statuses are in the filter values",
        "properties": {
          "name": {
            "enum": [
              "view_any_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "$ref": "#/components/schemas/Projects.ListEntities.FieldStatus"
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "name",
          "view_id",
          "values"
        ],
        "title": "ViewAnyOfFieldStatuses",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.EntityStatus.ViewAnyOf",
        "x-validate": null
      },
      "Projects.MaxRows": {
        "description": "For manual file_collection properties only.\nControls maximum number of collection items extracted from uploaded file. 0 for unlimited.\n",
        "minimum": 0,
        "title": "Projects.MaxRows",
        "type": "integer",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.MaxRows",
        "x-validate": null
      },
      "Projects.PropertyInputTarget": {
        "default": "value",
        "description": "What data to extract from the field - value (default) or specific metadata field",
        "enum": [
          "value",
          "value.text",
          "value.files",
          "tool_metadata.motivation",
          "tool_metadata.confidence",
          "tool_metadata.external_sources",
          "tool_metadata.skill_results",
          "tool_metadata.skill_errors"
        ],
        "title": "Projects.PropertyInputTarget",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyInputTarget",
        "x-validate": null
      },
      "Projects.AutoLlmToolConfig": {
        "additionalProperties": false,
        "description": "Configuration for auto_llm tool",
        "properties": {
          "mode": {
            "description": "Model selection mode: fast (speed/cost optimized), balanced (default), smart (maximum capability)",
            "enum": [
              "fast",
              "balanced",
              "smart"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "title": "Projects.AutoLlmToolConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AutoLlmToolConfig",
        "x-validate": null
      },
      "Projects.AddSingleSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.SingleSelectPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "single_select"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddSingleSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddSingleSelectPropertyRequest",
        "x-validate": null
      },
      "Projects.CollectionSubproperty": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "minLength": 1,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "type": {
            "enum": [
              "text",
              "json",
              "number"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type"
        ],
        "title": "Projects.CollectionSubproperty",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.CollectionSubproperty",
        "x-validate": null
      },
      "FieldDatetimeValue": {
        "additionalProperties": false,
        "description": "Filter entities based on field's datetime value. All matchers support optional granularity for date_trunc truncation (year, quarter, month, day, hour, minute, second).",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOf"
              },
              {
                "$ref": "#/components/schemas/PropertyGreaterThan"
              },
              {
                "$ref": "#/components/schemas/PropertyLessThan"
              },
              {
                "$ref": "#/components/schemas/PropertyGreaterThanOrEqualTo"
              },
              {
                "$ref": "#/components/schemas/PropertyLessThanOrEqualTo"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_datetime_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldDatetimeValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldDatetimeValue",
        "x-validate": null
      },
      "FieldFileName": {
        "additionalProperties": false,
        "description": "Filter entities based on field's file name",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOf"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsAnyOf"
              },
              {
                "$ref": "#/components/schemas/PropertyContainsNoneOf"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "field_file_name"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "FieldFileName",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldFileName",
        "x-validate": null
      },
      "Projects.MultiSelectPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for multi-select property.\nAllows to provide initial select options and how many of them\nis allowed to be selected in each field (with 'max_selected').\n",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "max_selected": {
            "$ref": "#/components/schemas/Projects.SelectMaxSelectedWithDefault"
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOption"
            },
            "maxItems": 1000,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "options"
        ],
        "title": "Projects.MultiSelectPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.MultiSelectPropertyConfig",
        "x-validate": null
      },
      "Projects.AddMultiSelectPropertyRequest": {
        "additionalProperties": false,
        "description": "Add property request",
        "properties": {
          "config": {
            "$ref": "#/components/schemas/Projects.MultiSelectPropertyConfig"
          },
          "default_view_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "description": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_mcp_tools": {
            "description": "List of MCP tools to enable for this property",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledMcpTool"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "enabled_skills": {
            "description": "List of skills to enable for this property (only applicable for non-manual properties)",
            "items": {
              "$ref": "#/components/schemas/Projects.EnabledSkill"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "group": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "hub_inputs": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyHubInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "incomplete_collection_input_rows_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "drop_on_any_errors",
              "drop_any_incomplete",
              "drop_on_any_entity_errors"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "input_ids": {
            "deprecated": true,
            "items": {
              "$ref": "#/components/schemas/Common.UUID"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "inputs": {
            "items": {
              "$ref": "#/components/schemas/Projects.PropertyInput"
            },
            "nullable": true,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          },
          "is_grounded": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "skip_behaviour": {
            "default": "never",
            "enum": [
              "never",
              "on_unsupported_input",
              "on_all_unsupported_inputs"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "tool": {
            "$ref": "#/components/schemas/Projects.Common.PropertyTool"
          },
          "tool_config": {
            "$ref": "#/components/schemas/Projects.PropertyToolConfigUpsert"
          },
          "type": {
            "enum": [
              "multi_select"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "visible_in_entity_sidebar": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "type",
          "tool",
          "description",
          "config"
        ],
        "title": "Projects.AddMultiSelectPropertyRequest",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.AddMultiSelectPropertyRequest",
        "x-validate": null
      },
      "Projects.IntegrationArgumentOverrideFixed": {
        "additionalProperties": false,
        "description": "Override for a Pipedream-authenticated integration skill argument with a fixed connection owner email. Not accepted for native integrations - pin those to an Entra tenant with the integration_tenant override instead.",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "integration"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "description": "Pipedream connection owner email (string only)",
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "fixed"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.IntegrationArgumentOverrideFixed",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.IntegrationArgumentOverrideFixed",
        "x-validate": null
      },
      "EntityFilters.Conjunction": {
        "description": "Use to join filters together. It is possible to join simple or group filters with `and`, `or` operators",
        "enum": [
          "and",
          "or"
        ],
        "title": "EntityFilters.Conjunction",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.Conjunction",
        "x-validate": null
      },
      "Projects.PropertyConfigResponse": {
        "nullable": true,
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.SingleSelectPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.MultiSelectPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.DynamicSelectPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.PDFPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.CollectionPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.FileCollectionPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.ReferencePropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.NumberPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.DocumentPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.ActionPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.TriggerPropertyConfigResponse"
          },
          {
            "$ref": "#/components/schemas/Projects.JsonPropertyConfigResponse"
          }
        ],
        "title": "Projects.PropertyConfigResponse",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyConfigResponse",
        "x-validate": null
      },
      "PropertyAllOfString": {
        "additionalProperties": false,
        "description": "Matches items based on whether the all the values in the filter exist in the subject",
        "properties": {
          "case_sensitive": {
            "default": true,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "name": {
            "enum": [
              "property_all_of"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "values": {
            "items": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "minItems": 1,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "values"
        ],
        "title": "PropertyAllOfString",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldSelectOptionValue.PropertyAllOf",
        "x-validate": null
      },
      "Projects.PropertyHubInput": {
        "description": "A property hub input. Points directly to a hub (project).\n",
        "oneOf": [
          {
            "$ref": "#/components/schemas/Projects.DirectHubInput"
          }
        ],
        "title": "Projects.PropertyHubInput",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.PropertyHubInput",
        "x-validate": null
      },
      "PropertyGreaterThanOrEqualTo": {
        "additionalProperties": false,
        "description": "Matches items based on whether the values from the subject are greater than or equal to the one specified in the filter",
        "properties": {
          "name": {
            "enum": [
              "property_greater_than_or_equal_to"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "property_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "reference_support_via_property_id": {
            "nullable": true,
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "name",
          "property_id",
          "value"
        ],
        "title": "PropertyGreaterThanOrEqualTo",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.FieldNumberValue.PropertyGreaterThanOrEqualTo",
        "x-validate": null
      },
      "Projects.Common.FieldReviewStatus": {
        "enum": [
          "pending",
          "approved",
          "rejected"
        ],
        "title": "Projects.Common.FieldReviewStatus",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.Common.FieldReviewStatus",
        "x-validate": null
      },
      "SelectOptionValue": {
        "additionalProperties": false,
        "deprecated": true,
        "description": "DEPRECATED: Use FieldSelectOptionValue instead",
        "properties": {
          "matcher": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PropertyAnyOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyAllOfString"
              },
              {
                "$ref": "#/components/schemas/PropertyNoneOfString"
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "subject": {
            "enum": [
              "select_option_value"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "subject",
          "matcher"
        ],
        "title": "SelectOptionValue",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.EntityFilters.SelectOptionValue",
        "x-validate": null
      },
      "Projects.ActionPropertyConfigResponse": {
        "additionalProperties": false,
        "description": "Response for action property configuration",
        "properties": {
          "action_type": {
            "enum": [
              "skill",
              "skill_chain"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "entrypoint_id": {
            "$ref": "#/components/schemas/Common.UUID"
          }
        },
        "required": [
          "action_type",
          "entrypoint_id"
        ],
        "title": "Projects.ActionPropertyConfigResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ActionPropertyConfigResponse",
        "x-validate": null
      },
      "Common.NullableUUID": {
        "example": "e23ff3f3-8f77-4e78-9e81-fdb25abfb781",
        "format": "uuid",
        "nullable": true,
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
        "title": "Common.NullableUUID",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Common.NullableUUID",
        "x-validate": null
      },
      "Common.UUID": {
        "example": "e23ff3f3-8f77-4e78-9e81-fdb25abfb781",
        "format": "uuid",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
        "title": "Common.UUID",
        "type": "string",
        "x-struct": null,
        "x-validate": null
      },
      "Projects.ListEntities.FieldStatus": {
        "enum": [
          "idle",
          "uploading",
          "waiting",
          "computing",
          "complete",
          "error",
          "skip"
        ],
        "title": "Projects.ListEntities.FieldStatus",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.ListEntities.FieldStatus",
        "x-validate": null
      },
      "Projects.SingleSelectPropertyConfig": {
        "additionalProperties": false,
        "description": "Initial configuration for single-select property.\nAllows to provide initial select options.\n",
        "properties": {
          "default_option": {
            "$ref": "#/components/schemas/Projects.SelectDefaultOption"
          },
          "options": {
            "items": {
              "$ref": "#/components/schemas/Projects.SelectOption"
            },
            "maxItems": 1000,
            "type": "array",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "options"
        ],
        "title": "Projects.SingleSelectPropertyConfig",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SingleSelectPropertyConfig",
        "x-validate": null
      },
      "Projects.DataStoreInput": {
        "additionalProperties": false,
        "description": "A workspace Data Store this property uses, and the access the property is granted over it. Data Store contents are an untracked external dependency: mutations do not change the calculation hash or automatically recalculate dependent fields. Request a new calculation when fresh Data Store data is required.",
        "properties": {
          "data_store_id": {
            "$ref": "#/components/schemas/Common.UUID"
          },
          "mode": {
            "default": "read_only",
            "description": "Whether the property may only read the store, or also write to it.",
            "enum": [
              "read_only",
              "read_write"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "data_store_id"
        ],
        "title": "Projects.DataStoreInput",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DataStoreInput",
        "x-validate": null
      },
      "Projects.NumberFormatCustomResponse": {
        "additionalProperties": false,
        "description": "Custom number format",
        "nullable": true,
        "properties": {
          "decimal_places": {
            "oneOf": [
              {
                "maximum": 20,
                "minimum": 0,
                "type": "integer",
                "x-struct": null,
                "x-validate": null
              },
              {
                "default": "auto",
                "enum": [
                  "auto"
                ],
                "type": "string",
                "x-struct": null,
                "x-validate": null
              }
            ],
            "x-struct": null,
            "x-validate": null
          },
          "negative_format": {
            "default": "minus",
            "enum": [
              "minus",
              "parentheses",
              "colored",
              "colored_parentheses"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "right_align": {
            "default": false,
            "type": "boolean",
            "x-struct": null,
            "x-validate": null
          },
          "thousand_separator": {
            "default": "none",
            "enum": [
              "comma",
              "none"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "decimal_places",
          "negative_format",
          "thousand_separator",
          "right_align"
        ],
        "title": "Projects.NumberFormatCustomResponse",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.NumberFormatCustomResponse",
        "x-validate": null
      },
      "Projects.DynamicArgumentOverrideReference": {
        "additionalProperties": false,
        "description": "Override for a dynamic skill argument with input reference",
        "properties": {
          "arg_name": {
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "arg_type": {
            "enum": [
              "dynamic"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          },
          "value": {
            "$ref": "#/components/schemas/Projects.InputReference"
          },
          "value_format": {
            "$ref": "#/components/schemas/Projects.ArgumentOverrideValueFormat"
          },
          "value_type": {
            "enum": [
              "input_reference"
            ],
            "type": "string",
            "x-struct": null,
            "x-validate": null
          }
        },
        "required": [
          "arg_name",
          "arg_type",
          "value_type",
          "value"
        ],
        "title": "Projects.DynamicArgumentOverrideReference",
        "type": "object",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.DynamicArgumentOverrideReference",
        "x-validate": null
      },
      "Projects.SelectDefaultOption": {
        "description": "Default select option.\nIf the value doesn't exist, it will be ignored.\n",
        "nullable": true,
        "title": "Projects.SelectDefaultOption",
        "type": "string",
        "x-struct": "Elixir.AgiDbWeb.Schemas.Projects.SelectDefaultOption",
        "x-validate": null
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "in": "header",
        "name": "X-API-KEY",
        "type": "apiKey"
      },
      "BearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "title": "V7 Go API",
    "version": "0.1.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/api/workspaces/{workspace_id}/projects/{project_id}/properties": {
      "post": {
        "callbacks": {},
        "description": "Adds a property to a project",
        "operationId": "project-add-property",
        "parameters": [
          {
            "description": "",
            "in": "path",
            "name": "workspace_id",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Common.UUID"
            }
          },
          {
            "description": "",
            "in": "path",
            "name": "project_id",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Common.UUID"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Projects.AddPropertyRequest"
              }
            }
          },
          "description": "Projects.AddPropertyRequest",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Projects.PropertyResponse"
                }
              }
            },
            "description": "Projects.PropertyResponse"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Common.APIError"
                }
              }
            },
            "description": "Common.APIError"
          }
        },
        "summary": "Add a property to a project",
        "tags": [
          "Projects"
        ]
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    },
    {
      "ApiKeyAuth": []
    }
  ],
  "servers": [
    {
      "description": "EU",
      "url": "https://go.v7labs.com",
      "variables": {}
    },
    {
      "description": "US",
      "url": "https://go.us.v7labs.com",
      "variables": {}
    },
    {
      "description": "UAE",
      "url": "https://go.uae.v7labs.com",
      "variables": {}
    }
  ]
}
````