{
	"$id": "https://raw.githubusercontent.com/breadboard-ai/breadboard/@breadboard-ai/manifest@0.10.0/packages/manifest/bbm.schema.json",
	"$ref": "#/definitions/BreadboardManifest",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"definitions": {
		"Asset": {
			"additionalProperties": false,
			"properties": {
				"data": {
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						},
						{
							"type": "null"
						},
						{
							"items": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "array"
						},
						{
							"$ref": "#/definitions/Capability"
						},
						{
							"additionalProperties": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "object"
						}
					],
					"description": "Must be LLMContent[], but is typed as NodeValue because for some reason, GraphDescriptor doesn't like LLMContent[] here."
				},
				"metadata": {
					"$ref": "#/definitions/AssetMetadata"
				}
			},
			"type": "object"
		},
		"AssetMetadata": {
			"additionalProperties": false,
			"properties": {
				"description": {
					"type": "string"
				},
				"subType": {
					"type": "string"
				},
				"title": {
					"type": "string"
				},
				"type": {
					"$ref": "#/definitions/AssetType"
				},
				"visual": {
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						},
						{
							"type": "null"
						},
						{
							"items": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "array"
						},
						{
							"$ref": "#/definitions/Capability"
						},
						{
							"additionalProperties": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "object"
						}
					]
				}
			},
			"required": [
				"title",
				"type"
			],
			"type": "object"
		},
		"AssetType": {
			"description": "Provides information on the structure of the data stored in the asset. All data is stored as LLMContent[], but this field allows us to better identify what is stored.\n\n- \"content\" -- the typical LLMContent[], should be editable in asset   viewer as if the configuration port of a component.\n- \"file\" -- user-uploaded file. In this case, the data must be:   - a single inlineData part with the right mimeType   - of a single LLMContent item\n- \"connector\" -- a [connector](https://github.com/breadboard-ai/breadboard/wiki/Connectors)",
			"enum": [
				"connector",
				"content",
				"file"
			],
			"type": "string"
		},
		"Board": {
			"$ref": "https://raw.githubusercontent.com/breadboard-ai/breadboard/@google-labs/breadboard-schema@1.14.0/packages/schema/breadboard.schema.json#/definitions/GraphDescriptor",
			"description": "A reference to the BGL schema GraphDescriptor type.",
			"type": "object"
		},
		"BoardReference": {
			"anyOf": [
				{
					"$ref": "#/definitions/ResourceReference"
				},
				{
					"$ref": "#/definitions/Board"
				}
			],
			"description": "Union of  {@link  ResourceReference }  and  {@link  Board }"
		},
		"BreadboardManifest": {
			"additionalProperties": false,
			"description": "A Breadboard Manifest.\n\nContains references to boards and other manifests.",
			"examples": [
				{
					"title": "Empty Manifest"
				},
				{
					"boards": [],
					"manifests": [],
					"title": "Manifest with empty lists"
				},
				{
					"boards": [
						{
							"title": "My First Board",
							"url": "https://gist.githubusercontent.com/user/SOME_ID/raw/board.bgl.json",
							"version": "1.0.0"
						},
						{
							"title": "My Second Board",
							"url": "./boards/board.bgl.json"
						}
					],
					"manifests": [
						{
							"title": "Gist Manifest",
							"url": "https://gist.githubusercontent.com/user/SOME_ID/raw/manifest.bbm.json"
						}
					]
				},
				{
					"boards": [
						{
							"edges": [],
							"nodes": [],
							"title": "My First Board"
						}
					],
					"title": "Manifest with concrete boards"
				}
			],
			"properties": {
				"$schema": {
					"$ref": "#/definitions/Reference"
				},
				"boards": {
					"items": {
						"$ref": "#/definitions/BoardReference"
					},
					"type": "array"
				},
				"manifests": {
					"items": {
						"$ref": "#/definitions/ManifestReference"
					},
					"type": "array"
				},
				"reference": {
					"$ref": "#/definitions/Reference"
				},
				"tags": {
					"$ref": "#/definitions/Tags"
				},
				"title": {
					"$ref": "#/definitions/Title"
				}
			},
			"type": "object"
		},
		"Capability": {
			"additionalProperties": false,
			"properties": {
				"kind": {
					"type": "string"
				}
			},
			"required": [
				"kind"
			],
			"type": "object"
		},
		"CommentNode": {
			"additionalProperties": false,
			"properties": {
				"id": {
					"$ref": "#/definitions/NodeIdentifier",
					"description": "Unique id of the comment node in graph metadata."
				},
				"metadata": {
					"$ref": "#/definitions/NodeMetadata",
					"description": "The metadata of the comment node. Use this to provide additional information about the comment node."
				},
				"text": {
					"description": "The text content of the comment.",
					"type": "string"
				}
			},
			"required": [
				"id",
				"text"
			],
			"type": "object"
		},
		"DataStoreHandle": {
			"type": "string"
		},
		"Edge": {
			"additionalProperties": false,
			"description": "Represents an edge in a graph.",
			"properties": {
				"constant": {
					"description": "If true, this edge acts as a constant: the data that passes through it remains available even after the node has consumed it.",
					"type": "boolean"
				},
				"from": {
					"$ref": "#/definitions/NodeIdentifier",
					"description": "The node that the edge is coming from."
				},
				"in": {
					"$ref": "#/definitions/InputIdentifier",
					"description": "The input of the `to` node. If this value is undefined, then the then no data is passed as output of the `from` node."
				},
				"metadata": {
					"$ref": "#/definitions/EdgeMetadata",
					"description": "The metadata of the edge. Use this provide additional information about the edge."
				},
				"optional": {
					"description": "If true, this edge is optional: the data that passes through it is not considered a required input to the node.",
					"type": "boolean"
				},
				"out": {
					"$ref": "#/definitions/OutputIdentifier",
					"description": "The output of the `from` node. If this value is \"*\", then all outputs of the `from` node are passed to the `to` node. If this value is undefined, then no data is passed to any inputs of the `to` node."
				},
				"to": {
					"$ref": "#/definitions/NodeIdentifier",
					"description": "The node that the edge is going to."
				}
			},
			"required": [
				"from",
				"to"
			],
			"type": "object"
		},
		"EdgeMetadata": {
			"additionalProperties": false,
			"description": "Represents metadata of an edge. This is an optional part of the `Edge` that can be used to provide additional information about the node.",
			"properties": {
				"visual": {
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						},
						{
							"type": "null"
						},
						{
							"items": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "array"
						},
						{
							"$ref": "#/definitions/Capability"
						},
						{
							"additionalProperties": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "object"
						}
					],
					"description": "Metadata that conveys visual information about the edge. Can be used by visual editors to store information about the edge's appearance, current position, etc."
				}
			},
			"type": "object"
		},
		"GraphDescriptor": {
			"additionalProperties": false,
			"description": "A union type of both declarative and imperative graphs. Represents a graph that is either declarative (defined by nodes and edges) or imperative (backed by code).",
			"properties": {
				"$schema": {
					"description": "The schema of the graph.",
					"type": "string"
				},
				"args": {
					"$ref": "#/definitions/InputValues",
					"description": "Arguments that are passed to the graph, useful to bind values to graphs."
				},
				"assets": {
					"$ref": "#/definitions/Record%3CAssetPath%2CAsset%3E",
					"description": "An optional collection of assets associated with the graph. Each asset is an array of LLM Content items."
				},
				"describer": {
					"description": "The URL of the graph that will act as the describer for this graph. Can be a relative URL and refer to a sub-graph within this graph.\n\nThe describers in the format of \"module:name\" will be interpreted as \"use the `describe` export of the module named `name` to describe this graph\".",
					"type": "string"
				},
				"description": {
					"description": "The description of the graph.",
					"type": "string"
				},
				"edges": {
					"description": "The collection of all edges in the graph.",
					"items": {
						"$ref": "#/definitions/Edge"
					},
					"type": "array"
				},
				"expectedLabels": {
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use.",
					"items": {
						"items": {
							"type": "string"
						},
						"type": "array"
					},
					"type": "array"
				},
				"explanation": {
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use.",
					"type": "string"
				},
				"exports": {
					"description": "The modules and sub-graphs that this graph declares as \"exports\": they themselves are usable declarative or imperative graphs. When the \"exports\" property exist, this graph is actually a Kit declaration: it can be used to distributed multiple graphs.",
					"items": {
						"anyOf": [
							{
								"$ref": "#/definitions/ModuleIdentifier"
							},
							{
								"type": "string"
							}
						]
					},
					"type": "array"
				},
				"graphs": {
					"$ref": "#/definitions/SubGraphs",
					"description": "Sub-graphs that are also described by this graph representation."
				},
				"imports": {
					"$ref": "#/definitions/Record%3CImportIdentifier%2CImport%3E",
					"description": "An optional collection of imports, or known GraphDescriptors that this GraphDescriptor uses. Imports are spiritually similar to `dependencies` in npm or import maps in Web Platform. In addition to specifying the depenency, they provide a short identifier that can be used to refer to the import."
				},
				"inputs": {
					"$ref": "#/definitions/InputValues",
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use."
				},
				"kits": {
					"description": "All the kits (collections of node handlers) that are used by the graph.",
					"items": {
						"$ref": "#/definitions/KitDescriptor"
					},
					"type": "array"
				},
				"main": {
					"$ref": "#/definitions/ModuleIdentifier",
					"description": "The id of the Module that is used as an entry point for this graph. If this value is set, the graph is a \"module graph\": it is backed by code rather than by nodes and edges."
				},
				"metadata": {
					"$ref": "#/definitions/GraphMetadata",
					"description": "Metadata associated with the graph."
				},
				"modules": {
					"$ref": "#/definitions/Modules",
					"description": "Modules that are included as part of this graph."
				},
				"nodes": {
					"description": "The collection of all nodes in the graph.",
					"items": {
						"$ref": "#/definitions/NodeDescriptor"
					},
					"type": "array"
				},
				"outputs": {
					"anyOf": [
						{
							"$ref": "#/definitions/OutputValues"
						},
						{
							"items": {
								"$ref": "#/definitions/OutputValues"
							},
							"type": "array"
						}
					],
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use."
				},
				"safe": {
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use.",
					"type": "boolean"
				},
				"sequence": {
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use.",
					"items": {
						"$ref": "#/definitions/NodeIdentifier"
					},
					"type": "array"
				},
				"start": {
					"$ref": "#/definitions/NodeIdentifier",
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use."
				},
				"throws": {
					"deprecated": "For internal testing only. Do not use.",
					"description": "For internal testing only. Do not use.",
					"type": "boolean"
				},
				"title": {
					"description": "The title of the graph.",
					"type": "string"
				},
				"url": {
					"description": "The URL pointing to the location of the graph. This URL is used to resolve relative paths in the graph. If not specified, the paths are assumed to be relative to the current working directory.",
					"type": "string"
				},
				"version": {
					"description": "Version of the graph. [semver](https://semver.org/) format is encouraged.",
					"type": "string"
				},
				"virtual": {
					"const": true,
					"description": "An optional property that indicates that this graph is \"virtual\": it can not be represented by a static list of edges and nodes, and is instead more of a representation of something that's \"graph-like\". Modules, when they invoke capabilities, are \"virtual\" graphs: they don't have a defined topology and instead, this topology is discovered through imperative code execution",
					"type": "boolean"
				}
			},
			"required": [
				"edges",
				"nodes"
			],
			"type": "object"
		},
		"GraphMetadata": {
			"additionalProperties": {
				"$ref": "#/definitions/NodeValue"
			},
			"description": "Represents graph metadata.",
			"properties": {
				"comments": {
					"items": {
						"$ref": "#/definitions/CommentNode"
					},
					"type": "array"
				},
				"describer": {
					"description": "The URL of the graph that will act as the describer for this graph. Can be a relative URL and refer to a sub-graph within this graph.\n\nThe describers in the format of \"module:name\" will be interpreted as \"use the `describe` export of the module named `name` to describe this graph\".",
					"type": "string"
				},
				"help": {
					"additionalProperties": false,
					"description": "The documentation for the graph, expressed as a URL and optional description.",
					"properties": {
						"description": {
							"type": "string"
						},
						"url": {
							"type": "string"
						}
					},
					"required": [
						"url"
					],
					"type": "object"
				},
				"icon": {
					"description": "The icon that identifies the graph. Can be a URL or a Material Design id.",
					"type": "string"
				},
				"intent": {
					"description": "The overall intent or goal of the application.",
					"type": "string"
				},
				"order": {
					"description": "Allows specifying relative order of this graph when it is represented as a component in any menu. Currently used when populating the quick access menu.",
					"type": "number"
				},
				"parameters": {
					"$ref": "#/definitions/Record%3Cstring%2CParameterMetadata%3E",
					"description": "Provides a way to store metadata about parameters See https://github.com/breadboard-ai/breadboard/wiki/Parameters-Design"
				},
				"revision_intents": {
					"description": "Followups to the original intent.",
					"items": {
						"type": "string"
					},
					"type": "array"
				},
				"tags": {
					"description": "Tags associated with the graph.",
					"items": {
						"$ref": "#/definitions/GraphTag"
					},
					"type": "array"
				},
				"userModified": {
					"description": "If true, the title/description have been modified by the user.",
					"type": "boolean"
				},
				"visual": {
					"additionalProperties": false,
					"description": "The metadata associated with the visual representation of the graph.",
					"properties": {
						"minimized": {
							"description": "Whether or not the graph is minimized. Generally only applies to subgraphs as they carry that control in the Visual Editor.",
							"type": "boolean"
						},
						"presentation": {
							"additionalProperties": false,
							"properties": {
								"author": {
									"type": "string"
								},
								"description": {
									"type": "string"
								},
								"icon": {
									"type": "string"
								},
								"linkToSource": {
									"type": "string"
								},
								"splashScreen": {
									"$ref": "#/definitions/InlineDataCapabilityPart"
								},
								"template": {
									"type": "string"
								},
								"templateAdditionalOptions": {
									"$ref": "#/definitions/Record%3Cstring%2Cstring%3E"
								},
								"theme": {
									"description": "The collection of themes and the chosen theme for this graph.",
									"type": "string"
								},
								"themeColors": {
									"$ref": "#/definitions/Record%3Cstring%2Cstring%3E"
								},
								"themes": {
									"$ref": "#/definitions/Record%3Cstring%2CGraphTheme%3E"
								},
								"title": {
									"type": "string"
								}
							},
							"type": "object"
						},
						"window": {
							"additionalProperties": false,
							"description": "Last known position of the graph in the editor.",
							"properties": {
								"height": {
									"type": "number"
								},
								"width": {
									"type": "number"
								},
								"x": {
									"type": "number"
								},
								"y": {
									"type": "number"
								}
							},
							"required": [
								"height",
								"width",
								"x",
								"y"
							],
							"type": "object"
						}
					},
					"type": "object"
				}
			},
			"type": "object"
		},
		"GraphTag": {
			"description": "A tag that can be associated with a graph.\n- `published`: The graph is published (as opposed to a draft). It may be    used in production and shared with others.\n- `tool`: The graph is intended to be a tool.\n- `experimental`: The graph is experimental and may not be stable.\n- `component`: The graph is intended to be a component.\n- `core`: The graph represents a component that provides \"core\"    functionality, like control flow, input/output, etc.\n- `generative`: The graph represents a component that uses an LLM\n- `quick-access`: The graph represents a component that is featured in quick    access menu.\n- `private`: Accessing the graph requires authentication (like a server    API key)\n- `connector`: The graph represents a connector.\n- `connector-singleton`: This connector is a singleton: only one instance    can be created.\n- `connector-configure`: The graph provides configuration of a connector.\n- `connector-load`: The graph provides loading capability of a connector.\n- `connector-save`: The graph provides saving capability of a connector.\n- `connector-tools`: The graph provides tool discovery and calling    capability of a connector.",
			"enum": [
				"component",
				"connector",
				"connector-configure",
				"connector-load",
				"connector-save",
				"connector-singleton",
				"connector-tools",
				"core",
				"deprecated",
				"experimental",
				"featured",
				"generative",
				"private",
				"published",
				"quick-access",
				"tool"
			],
			"type": "string"
		},
		"GraphTheme": {
			"additionalProperties": false,
			"properties": {
				"splashScreen": {
					"$ref": "#/definitions/StoredDataCapabilityPart"
				},
				"template": {
					"type": "string"
				},
				"templateAdditionalOptions": {
					"$ref": "#/definitions/Record%3Cstring%2Cstring%3E"
				},
				"themeColors": {
					"$ref": "#/definitions/Record%3Cstring%2Cstring%3E"
				}
			},
			"type": "object"
		},
		"Import": {
			"additionalProperties": false,
			"description": "A declaration of an import.",
			"properties": {
				"url": {
					"description": "The URL of the import. Must point to a valid `GraphDescriptor`. Can be relative or absolute. When relative, the URL will be evaluated relative to the value of the `url` property of this `GraphDescriptor`.",
					"type": "string"
				}
			},
			"required": [
				"url"
			],
			"type": "object"
		},
		"InlineDataCapabilityPart": {
			"additionalProperties": false,
			"description": "Represents inline data, encoded as a base64 string.",
			"properties": {
				"inlineData": {
					"additionalProperties": false,
					"properties": {
						"data": {
							"type": "string"
						},
						"mimeType": {
							"type": "string"
						}
					},
					"required": [
						"data",
						"mimeType"
					],
					"type": "object"
				}
			},
			"required": [
				"inlineData"
			],
			"type": "object"
		},
		"InputIdentifier": {
			"description": "Unique identifier of a node's input.",
			"type": "string"
		},
		"InputValues": {
			"$ref": "#/definitions/Record%3CInputIdentifier%2CNodeValue%3E",
			"description": "Values that are supplied as inputs to the `NodeHandler`."
		},
		"KitDescriptor": {
			"additionalProperties": false,
			"properties": {
				"description": {
					"description": "The description of the kit.",
					"type": "string"
				},
				"tags": {
					"description": "Tags, associated with the kit.",
					"items": {
						"$ref": "#/definitions/KitTag"
					},
					"type": "array"
				},
				"title": {
					"description": "The title of the kit.",
					"type": "string"
				},
				"url": {
					"description": "The URL pointing to the location of the kit.",
					"type": "string"
				},
				"version": {
					"description": "Version of the kit. [semver](https://semver.org/) format is encouraged.",
					"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
					"type": "string"
				}
			},
			"required": [
				"url"
			],
			"type": "object"
		},
		"KitTag": {
			"description": "Represents various tags that can be associated with a kit.\n- `deprecated`: The kit is deprecated and should not be used.\n- `experimental`: The kit is experimental and may not be stable.",
			"enum": [
				"deprecated",
				"experimental"
			],
			"type": "string"
		},
		"ManifestReference": {
			"anyOf": [
				{
					"$ref": "#/definitions/ResourceReference"
				},
				{
					"$ref": "#/definitions/BreadboardManifest"
				}
			],
			"description": "Union of  {@link  ResourceReference }  and  {@link  BreadboardManifest }"
		},
		"Module": {
			"additionalProperties": false,
			"properties": {
				"code": {
					"$ref": "#/definitions/ModuleCode",
					"description": "The code for this module."
				},
				"metadata": {
					"$ref": "#/definitions/ModuleMetadata",
					"description": "Metadata associated with the graph."
				}
			},
			"required": [
				"code"
			],
			"type": "object"
		},
		"ModuleCode": {
			"description": "The code for this module, which should include a describer, an invoker, and any other relevant information to power the module.",
			"type": "string"
		},
		"ModuleIdentifier": {
			"description": "Unique identifier of a module.",
			"type": "string"
		},
		"ModuleLanguage": {
			"type": "string"
		},
		"ModuleMetadata": {
			"additionalProperties": false,
			"properties": {
				"description": {
					"description": "The description for the module.",
					"type": "string"
				},
				"help": {
					"additionalProperties": false,
					"description": "The documentation for the module, expressed as a URL and optional description.",
					"properties": {
						"description": {
							"type": "string"
						},
						"url": {
							"type": "string"
						}
					},
					"required": [
						"url"
					],
					"type": "object"
				},
				"icon": {
					"description": "The icon for the module.",
					"type": "string"
				},
				"runnable": {
					"description": "Whether the module should be presented as a runnable item to runModule.",
					"type": "boolean"
				},
				"source": {
					"additionalProperties": false,
					"description": "The pre-compiled source for this module.",
					"properties": {
						"code": {
							"$ref": "#/definitions/ModuleCode"
						},
						"language": {
							"$ref": "#/definitions/ModuleLanguage"
						}
					},
					"required": [
						"code",
						"language"
					],
					"type": "object"
				},
				"tags": {
					"description": "Tags associated with the module. At this moment, free-form strings.",
					"items": {
						"$ref": "#/definitions/ModuleTag"
					},
					"type": "array"
				},
				"title": {
					"description": "The title for the module.",
					"type": "string"
				},
				"url": {
					"description": "The source file for the module, if relevant.",
					"type": "string"
				}
			},
			"type": "object"
		},
		"ModuleTag": {
			"description": "A tag that can be associated with a graph.\n- `published`: The module is published (as opposed to a draft). It may be    used in production and shared with others.\n- `experimental`: The graph is experimental and may not be stable.",
			"enum": [
				"experimental",
				"published"
			],
			"type": "string"
		},
		"Modules": {
			"$ref": "#/definitions/Record%3CModuleIdentifier%2CModule%3E"
		},
		"NodeConfiguration": {
			"$ref": "#/definitions/Record%3Cstring%2CNodeValue%3E",
			"description": "Values that are supplied as part of the graph. These values are merged with the `InputValues` and supplied as inputs to the `NodeHandler`."
		},
		"NodeDescriptor": {
			"additionalProperties": false,
			"description": "Represents a node in a graph.",
			"properties": {
				"configuration": {
					"$ref": "#/definitions/NodeConfiguration",
					"description": "Configuration of the node."
				},
				"id": {
					"$ref": "#/definitions/NodeIdentifier",
					"description": "Unique id of the node in graph."
				},
				"metadata": {
					"$ref": "#/definitions/NodeMetadata",
					"description": "The metadata of the node. Use this provide additional information about the node."
				},
				"type": {
					"$ref": "#/definitions/NodeTypeIdentifier",
					"description": "Type of the node. Used to look up the handler for the node."
				}
			},
			"required": [
				"id",
				"type"
			],
			"type": "object"
		},
		"NodeIdentifier": {
			"description": "Unique identifier of a node in a graph.",
			"type": "string"
		},
		"NodeMetadata": {
			"additionalProperties": false,
			"description": "Represents metadata of a node. This is an optional part of the `NodeDescriptor` that can be used to provide additional information about the node.",
			"properties": {
				"description": {
					"description": "A more detailed description of the node.",
					"type": "string"
				},
				"icon": {
					"description": "The icon for the node.",
					"type": "string"
				},
				"logLevel": {
					"description": "Logging level.",
					"enum": [
						"debug",
						"info"
					],
					"type": "string"
				},
				"tags": {
					"description": "Tags associated with the node. Can be either a string or a structured tag, like a `StartTag`.",
					"items": {
						"$ref": "#/definitions/NodeTag"
					},
					"type": "array"
				},
				"title": {
					"description": "The title of the node.",
					"type": "string"
				},
				"userModified": {
					"description": "If true, the title/description have been modified by the user.",
					"type": "boolean"
				},
				"visual": {
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						},
						{
							"type": "null"
						},
						{
							"items": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "array"
						},
						{
							"$ref": "#/definitions/Capability"
						},
						{
							"additionalProperties": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "object"
						}
					],
					"description": "Metadata that conveys visual information about the node. Can be used by visual editors to store information about the node's appearance, current position, etc."
				}
			},
			"type": "object"
		},
		"NodeTag": {
			"description": "Represents a tag that can be associated with a node.",
			"type": "string"
		},
		"NodeTypeIdentifier": {
			"description": "Unique identifier of a node's type.",
			"type": "string"
		},
		"NodeValue": {
			"anyOf": [
				{
					"type": "string"
				},
				{
					"type": "number"
				},
				{
					"type": "boolean"
				},
				{
					"type": "null"
				},
				{
					"not": {}
				},
				{
					"items": {
						"$ref": "#/definitions/NodeValue"
					},
					"type": "array"
				},
				{
					"$ref": "#/definitions/Capability"
				},
				{
					"additionalProperties": {
						"$ref": "#/definitions/NodeValue"
					},
					"type": "object"
				}
			],
			"description": "A type representing a valid JSON value."
		},
		"OutputIdentifier": {
			"description": "Unique identifier of a node's output.",
			"type": "string"
		},
		"OutputValues": {
			"$ref": "#/definitions/Record%3COutputIdentifier%2CNodeValue%3E",
			"description": "Values that the `NodeHandler` outputs."
		},
		"ParameterMetadata": {
			"additionalProperties": false,
			"description": "Metadata about a parameter",
			"properties": {
				"description": {
					"type": "string"
				},
				"modality": {
					"description": "A list of modality hints that define the kind of content the parameter may contain.",
					"items": {
						"type": "string"
					},
					"type": "array"
				},
				"sample": {
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						},
						{
							"type": "null"
						},
						{
							"items": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "array"
						},
						{
							"$ref": "#/definitions/Capability"
						},
						{
							"additionalProperties": {
								"$ref": "#/definitions/NodeValue"
							},
							"type": "object"
						}
					],
					"description": "Sample value that will be provided as part of the user input Must be LLMContent[], but is typed as NodeValue because for some reason, GraphDescriptor doesn't like LLMContent[] here."
				},
				"title": {
					"type": "string"
				},
				"usedIn": {
					"description": "The list of nodes where the parameter is currently used. Can be empty, which indicates that this metadata is not attached to any existing parameter.",
					"items": {
						"$ref": "#/definitions/NodeIdentifier"
					},
					"type": "array"
				}
			},
			"required": [
				"title",
				"usedIn"
			],
			"type": "object"
		},
		"Record<AssetPath,Asset>": {
			"additionalProperties": {
				"$ref": "#/definitions/Asset"
			},
			"type": "object"
		},
		"Record<GraphIdentifier,GraphDescriptor>": {
			"additionalProperties": {
				"$ref": "#/definitions/GraphDescriptor"
			},
			"propertyNames": {
				"description": "Unique identifier of a graph."
			},
			"type": "object"
		},
		"Record<ImportIdentifier,Import>": {
			"additionalProperties": {
				"$ref": "#/definitions/Import"
			},
			"propertyNames": {
				"description": "An identifier to use for imports."
			},
			"type": "object"
		},
		"Record<InputIdentifier,NodeValue>": {
			"additionalProperties": {
				"$ref": "#/definitions/NodeValue"
			},
			"propertyNames": {
				"description": "Unique identifier of a node's input."
			},
			"type": "object"
		},
		"Record<ModuleIdentifier,Module>": {
			"additionalProperties": {
				"$ref": "#/definitions/Module"
			},
			"propertyNames": {
				"description": "Unique identifier of a module."
			},
			"type": "object"
		},
		"Record<OutputIdentifier,NodeValue>": {
			"additionalProperties": {
				"$ref": "#/definitions/NodeValue"
			},
			"propertyNames": {
				"description": "Unique identifier of a node's output."
			},
			"type": "object"
		},
		"Record<string,GraphTheme>": {
			"additionalProperties": {
				"$ref": "#/definitions/GraphTheme"
			},
			"type": "object"
		},
		"Record<string,NodeValue>": {
			"additionalProperties": {
				"$ref": "#/definitions/NodeValue"
			},
			"type": "object"
		},
		"Record<string,ParameterMetadata>": {
			"additionalProperties": {
				"$ref": "#/definitions/ParameterMetadata"
			},
			"type": "object"
		},
		"Record<string,string>": {
			"additionalProperties": {
				"type": "string"
			},
			"type": "object"
		},
		"Reference": {
			"anyOf": [
				{
					"$ref": "#/definitions/UriReference"
				},
				{
					"$ref": "#/definitions/RelativeReference"
				}
			],
			"description": "A reference to a resource."
		},
		"RelativeReference": {
			"description": "A reference to a resource relative to the Uri of the parent resource.",
			"examples": [
				"../boards/board.bgl.json",
				"../manifests/manifest.bbm.json",
				"./board.bgl.json",
				"./manifest.bbm.json",
				"board.bgl.json",
				"manifest.bbm.json"
			],
			"pattern": "^(\\.\\/|\\.\\.\\/|[a-zA-Z0-9_.-]+\\/)*[a-zA-Z0-9_.-]+$",
			"type": "string"
		},
		"ResourceReference": {
			"additionalProperties": false,
			"description": "A resource that definitely has a reference.\n\nAlso has a title.",
			"properties": {
				"reference": {
					"$ref": "#/definitions/Reference"
				},
				"tags": {
					"$ref": "#/definitions/Tags"
				},
				"title": {
					"$ref": "#/definitions/Title"
				}
			},
			"required": [
				"reference"
			],
			"type": "object"
		},
		"StoredDataCapabilityPart": {
			"additionalProperties": false,
			"description": "Represents data that is stored by a DataStoreProvider.",
			"properties": {
				"storedData": {
					"additionalProperties": false,
					"properties": {
						"handle": {
							"$ref": "#/definitions/DataStoreHandle"
						},
						"mimeType": {
							"type": "string"
						}
					},
					"required": [
						"handle",
						"mimeType"
					],
					"type": "object"
				}
			},
			"required": [
				"storedData"
			],
			"type": "object"
		},
		"SubGraphs": {
			"$ref": "#/definitions/Record%3CGraphIdentifier%2CGraphDescriptor%3E",
			"description": "Represents a collection of sub-graphs. The key is the identifier of the sub-graph. The value is the descriptor of the sub-graph."
		},
		"Tags": {
			"description": "The tags for this board",
			"items": {
				"type": "string"
			},
			"type": "array"
		},
		"Title": {
			"examples": [
				"Gist Manifest",
				"My First Board"
			],
			"type": "string"
		},
		"UriReference": {
			"description": "A URI reference.",
			"examples": [
				"file:///path/to/board.bgl.json",
				"file:///path/to/manifest.bbm.json",
				"https://example.com/board.bgl.json",
				"https://example.com/manifest.bbm.json",
				"https://example.com/manifests/manifest.bbm.json"
			],
			"format": "uri-reference",
			"type": "string"
		}
	}
}