From b1f5b0b63b945aba4c3df8dab88f8608bb9bf017 Mon Sep 17 00:00:00 2001 From: Timur Beletskii Date: Mon, 10 Nov 2025 16:47:38 -0500 Subject: [PATCH 01/12] Add user description field to DA datasource file. --- .../item/dataAgent/definition/dataSource/1.0.0/schema.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fabric/item/dataAgent/definition/dataSource/1.0.0/schema.json b/fabric/item/dataAgent/definition/dataSource/1.0.0/schema.json index 052d1e7e..60364aec 100644 --- a/fabric/item/dataAgent/definition/dataSource/1.0.0/schema.json +++ b/fabric/item/dataAgent/definition/dataSource/1.0.0/schema.json @@ -46,6 +46,13 @@ "mirrored_azure_databricks" ] }, + "userDescription": { + "type": [ + "string", + "null" + ], + "description": "The data source description." + }, "metadata": { "type": [ "object", From 3dae1470ed3717bc169ae7613592df47bea8e838 Mon Sep 17 00:00:00 2001 From: Andrew Garbuzov Date: Mon, 10 Nov 2025 18:25:00 -0800 Subject: [PATCH 02/12] Restoring a schema file, which was accidentally deleted. --- .../definitionProperties/2.0.0/schema.json | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 fabric/item/report/definitionProperties/2.0.0/schema.json diff --git a/fabric/item/report/definitionProperties/2.0.0/schema.json b/fabric/item/report/definitionProperties/2.0.0/schema.json new file mode 100644 index 00000000..53734071 --- /dev/null +++ b/fabric/item/report/definitionProperties/2.0.0/schema.json @@ -0,0 +1,81 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json", + "title": "ReportDefinition", + "description": "The ReportDefinition is stored as definition.pbir. It contains metadata about the overall file structure, holds core settings, and holds a reference to the semantic model used by this report. This file is required.", + "definitions": { + "DatasetReference": { + "title": "DatasetReference", + "description": "The DatasetReference defines the semantic model that is bound to this report. It is required to have exactly one of either the byPath or byConnection properties. The byConnection property would typically be used for LiveConnect scenarios whereas byPath would point at a local semantic model.", + "type": "object", + "additionalProperties": false, + "properties": { + "byPath": { + "$ref": "#/definitions/ReportDatasetReferenceByPath" + }, + "byConnection": { + "$ref": "#/definitions/ReportDatasetReferenceByConnection" + } + } + }, + "ReportDatasetReferenceByConnection": { + "title": "ByConnection", + "description": "Provides a reference to a remote semantic model using a connection string. The connection string must point to a semantic model hosted in the Microsoft Fabric service. Connections to other Analysis Services semantic models must use a byPath reference to a semantic model definition containing a modelReference.json file.", + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "connectionString": { + "title": "ConnectionString", + "description": "The connection string referring to the remote semantic model.", + "type": "string" + } + }, + "required": [ + "connectionString" + ] + }, + "ReportDatasetReferenceByPath": { + "title": "ByPath", + "description": "Provides a reference to a local dataset artifact definition.", + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "path": { + "title": "Path", + "description": "A relative path from this file to the target semantic model artifact folder. Uses ‘/’ as a directory separator.", + "type": "string" + } + }, + "required": [ + "path" + ] + } + }, + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string", + "pattern": "^https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.[0-9]+.[0-9]+/schema.json$" + }, + "version": { + "title": "Version", + "description": "Version of the report artifact file format. This also serves as the version number for the .pbir file format.", + "type": "string" + }, + "datasetReference": { + "$ref": "#/definitions/DatasetReference" + } + }, + "required": [ + "$schema", + "version", + "datasetReference" + ] +} \ No newline at end of file From 36653dd2bde09c7d167a197b86b9ce702298e1a0 Mon Sep 17 00:00:00 2001 From: "Michael Faber (he/him)" Date: Tue, 11 Nov 2025 10:03:08 -0600 Subject: [PATCH 03/12] [Report Definition] 25.11 version bumps --- fabric/item/report/README.md | 6 + .../visualContainer/2.4.0/schema.json | 309 ++++++++++++++++++ .../definition/visualContainer/CHANGELOG.md | 7 + 3 files changed, 322 insertions(+) create mode 100644 fabric/item/report/definition/visualContainer/2.4.0/schema.json diff --git a/fabric/item/report/README.md b/fabric/item/report/README.md index eb6a57af..658f79e0 100644 --- a/fabric/item/report/README.md +++ b/fabric/item/report/README.md @@ -1,5 +1,11 @@ # Releases +## November 2025 + +Documenting visual objects changes for new visuals and visual updates. + +- [visualContainer 2.4.0](./definition/visualContainer/CHANGELOG.md#2.4.0) + ## October 2025 Documenting visual objects changes for new visuals and visual updates. diff --git a/fabric/item/report/definition/visualContainer/2.4.0/schema.json b/fabric/item/report/definition/visualContainer/2.4.0/schema.json new file mode 100644 index 00000000..b004ec41 --- /dev/null +++ b/fabric/item/report/definition/visualContainer/2.4.0/schema.json @@ -0,0 +1,309 @@ +{ + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.4.0/schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visual container", + "description": "Defines a single visual or visual group on a report page.", + "type": "object", + "properties": { + "$schema": { + "description": "Defines the schema to use for an item.", + "type": "string", + "const": "https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.4.0/schema.json" + }, + "name": { + "description": "A unique identifier for the visual across the whole page.", + "maxLength": 50, + "type": "string" + }, + "position": { + "$ref": "#/definitions/VisualContainerPosition", + "description": "Defines where the visual is position on the page and how big it should be, along\nwith z-index (stacking) for that visual.\nAlso defines the order in which visuals are navigated when using just keyboard (tabOrder)." + }, + "visual": { + "description": "Defines a chart to be shown inside of this container.", + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json" + }, + "visualGroup": { + "description": "Defines that this container should be used as a grouping container.", + "$ref": "#/definitions/VisualGroupConfig" + }, + "parentGroupName": { + "description": "Name of the parent group (visual container), if it is part of one.", + "type": "string" + }, + "filterConfig": { + "description": "Filters that apply to all this visual - on top of the filters defined for the report and page.", + "$ref": "../../filterConfiguration/1.2.0/schema-embedded.json" + }, + "isHidden": { + "description": "Marks the visual as hidden.", + "type": "boolean" + }, + "annotations": { + "description": "Additional information to be saved (for example comments, readme, etc) for this visual.", + "type": "array", + "items": { + "$ref": "#/definitions/Annotation" + } + }, + "howCreated": { + "description": "Source of creation of this visual.", + "type": "string", + "anyOf": [ + { + "const": "Default", + "description": "Used when it doesn't fall in any of the buckets below." + }, + { + "const": "Copilot", + "description": "Created by copilot." + }, + { + "const": "CheckboxTickedInFieldList", + "description": "Selecting data from field list." + }, + { + "const": "DraggedToCanvas", + "description": "Dragging data from field list to the canvas." + }, + { + "const": "VisualTypeIconClicked", + "description": "Clicking a specific visual icon in visualizations list." + }, + { + "const": "DraggedToFieldWell", + "description": "Dragging data from field list to field wells." + }, + { + "const": "InsertVisualButton", + "description": "Clicking the \"Insert visual\" button in ribbon." + }, + { + "const": "WhatIfParameterControl", + "description": "Automatically by what-if parameter." + }, + { + "const": "QnaAppBar", + "description": "Ask a question in app bar." + }, + { + "const": "QnaDoubleClick", + "description": "Double clicking on the canvas to generate a Q&A visual." + }, + { + "const": "QnaKeyboardShortcut", + "description": "Use keyboard shortcut for Q&A visual." + }, + { + "const": "FieldParameterControl", + "description": "Automatically by field parameters." + }, + { + "const": "CanvasBackgroundContextMenu", + "description": "Using on-object context menu for the canvas." + }, + { + "const": "ContextMenuPaste", + "description": "By using paste from context manu." + }, + { + "const": "CopyPaste", + "description": "By using copy paste." + }, + { + "const": "SummarizeVisualContainer", + "description": "By using context menu Summarize." + } + ] + } + }, + "additionalProperties": false, + "required": [ + "$schema", + "name", + "position" + ], + "definitions": { + "VisualContainerPosition": { + "type": "object", + "properties": { + "x": { + "description": "Horizontal position of the left edge of the visual.\nShould be between 0 and width of the containing page.", + "type": "number" + }, + "y": { + "description": "Vertical position of the top edge of the visual.\nShould be between 0 and height of the containing page.", + "type": "number" + }, + "z": { + "description": "Defines the stacking order for the visual.\nHigher z-index visuals are shown on top of the lower ones.", + "type": "number" + }, + "height": { + "description": "Height of the visual.\ny + height should be less than the height of the containing page.", + "type": "number" + }, + "width": { + "description": "Width of the visual.\nx + width should be less than the width of the containing page.", + "type": "number" + }, + "tabOrder": { + "description": "Defines the selection order for this visual when using keyboard (tab key)\nto navigate the visuals on the containing page.", + "type": "number" + }, + "angle": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "height", + "width", + "x", + "y" + ] + }, + "VisualGroupConfig": { + "type": "object", + "properties": { + "displayName": { + "description": "Display name for the group.", + "type": "string" + }, + "groupMode": { + "$ref": "#/definitions/GroupLayoutMode", + "description": "Defines how the visuals are organized inside this group." + }, + "objects": { + "description": "Specifies the formatting to be set for different \"objects\" of this group.", + "$ref": "#/definitions/VisualGroupFormattingObjects" + } + }, + "additionalProperties": false, + "required": [ + "displayName", + "groupMode" + ] + }, + "GroupLayoutMode": { + "type": "string", + "anyOf": [ + { + "const": "ScaleMode", + "description": "Visuals are scaled as group resizes to preserve the aspect ratio and avoid scrolling." + }, + { + "const": "ScrollMode", + "description": "Visuals are not resized, if the containing box for group is smaller than the space\nneeded for visuals, then scrollbar is added." + } + ] + }, + "VisualGroupFormattingObjects": { + "type": "object", + "properties": { + "background": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json#/definitions/Background", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "lockAspect": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "../../visualConfiguration/2.2.0/schema-embedded.json#/definitions/LockAspect", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + }, + "general": { + "type": "array", + "items": { + "type": "object", + "properties": { + "selector": { + "description": "Defines the scope at which to apply the formatting for this object.\nCan also define rules for matching highlighted values and how multiple definitions for the same property should be ordered.", + "$ref": "../../formattingObjectDefinitions/1.4.0/schema.json#/definitions/Selector" + }, + "properties": { + "$ref": "#/definitions/VisualGroupGeneralFormattingObjects", + "description": "Describes the properties of the object to apply formatting changes to." + } + }, + "additionalProperties": false, + "required": [ + "properties" + ] + } + } + }, + "additionalProperties": false + }, + "VisualGroupGeneralFormattingObjects": { + "type": "object", + "properties": { + "x": {}, + "y": {}, + "width": {}, + "height": {}, + "altText": {} + }, + "additionalProperties": false + }, + "Annotation": { + "type": "object", + "properties": { + "name": { + "description": "Unique name for the annotation.", + "type": "string" + }, + "value": { + "description": "A value for this annotation.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name", + "value" + ] + } + }, + "oneOf": [ + { + "required": [ + "visual" + ] + }, + { + "required": [ + "visualGroup" + ] + } + ] +} \ No newline at end of file diff --git a/fabric/item/report/definition/visualContainer/CHANGELOG.md b/fabric/item/report/definition/visualContainer/CHANGELOG.md index b380be03..fc09dc49 100644 --- a/fabric/item/report/definition/visualContainer/CHANGELOG.md +++ b/fabric/item/report/definition/visualContainer/CHANGELOG.md @@ -1,5 +1,12 @@ # Visual Container Versions +### 2.4.0 + +Released in: November 2025
+Notes: +- Image visual improvements +- Azure maps custom markers + ### 2.3.0 Released in: October 2025
From 19961e560fcdae15efabfe4d16c766adcde08078 Mon Sep 17 00:00:00 2001 From: "Peter Ombwa (from Dev Box)" Date: Thu, 13 Nov 2025 09:26:37 -0800 Subject: [PATCH 04/12] feat: Add plugin manifest v2.4 schema. --- copilot/plugin/v2.4/schema.json | 832 ++++++++++++++++++++++++++++++++ 1 file changed, 832 insertions(+) create mode 100644 copilot/plugin/v2.4/schema.json diff --git a/copilot/plugin/v2.4/schema.json b/copilot/plugin/v2.4/schema.json new file mode 100644 index 00000000..8f462e30 --- /dev/null +++ b/copilot/plugin/v2.4/schema.json @@ -0,0 +1,832 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$comment": "This schema describes the constraints of a plugin manifest for third party developers to be deployed to Microsoft 365 Copilot", + "type": "object", + "title": "API Plugin manifest object", + "description": "The root of the plugin manifest document is a JSON object that contains members that describe the plugin.", + "properties": { + "schema_version": { + "type": "string", + "description": "The schema version. Previous versions are `v1`, `v2`, `v2.1`, `v2.2`, and `v2.3`.", + "const": "v2.4" + }, + "name_for_human": { + "type": "string", + "description": "A short, human-readable name for the plugin. It MUST contain at least one nonwhitespace character. Characters beyond 20 MAY be ignored. This property is localizable." + }, + "namespace": { + "type": "string", + "description": "An identifier used to prevent name conflicts between function names from different plugins that are used within the same execution context. The value MUST match the regex ^[A-Za-z0-9_]+ as defined by [RFC9485]. This is a required member.", + "pattern": "^[A-Za-z0-9_]+$" + }, + "description_for_model": { + "type": "string", + "description": "The description for the plugin that is provided to the model. This description should describe what the plugin is for, and in what circumstances its functions are relevant. Characters beyond 2048 MAY be ignored. This property is localizable." + }, + "description_for_human": { + "type": "string", + "description": "A human-readable description of the plugin. Characters beyond 100 MAY be ignored. This property is localizable." + }, + "logo_url": { + "format": "uri", + "description": "A URL used to fetch a logo that MAY be used by the orchestrator. Implementations MAY provide alternative methods to provide logos that meet their visual requirements. This property is localizable." + }, + "contact_email": { + "type": "string", + "description": "An email address of a contact for safety/moderation, support, and deactivation." + }, + "legal_info_url": { + "format": "uri", + "description": "An absolute URL that locates a document containing the terms of service for the plugin. This property is localizable." + }, + "privacy_policy_url": { + "format": "uri", + "description": "An absolute URL that locates a document containing the privacy policy for the plugin. This property is localizable." + }, + "functions": { + "type": "array", + "description": "A set of function objects describing the functions available to the plugin. Each function object name MUST be unique within the array. The order of the array isn't significant. If the `functions` property isn't present and there's an OpenAPI runtime, the functions are inferred from the OpenAPI operations.", + "items": { + "$ref": "#/$defs/function-object" + } + }, + "runtimes": { + "type": "array", + "description": "A list of runtime configurations that determine how functions are invoked.", + "items": { + "$ref": "#/$defs/runtime" + } + }, + "capabilities": { + "type": "object", + "title": "Plugin capabilities object", + "description": "Describes capabilities of the plugin.", + "properties": { + "conversation_starters": { + "type": "array", + "description": "Conversation starters that can be displayed to the user for suggestions on how to invoke the plugin.", + "items": { + "$ref": "#/$defs/conversation-starter" + } + } + }, + "propertyNames": { + "enum": [ + "conversation_starters" + ] + } + } + }, + "required": [ + "schema_version", + "name_for_human", + "namespace", + "description_for_human" + ], + "propertyNames": { + "enum": [ + "$schema", + "schema_version", + "name_for_human", + "namespace", + "description_for_model", + "description_for_human", + "logo_url", + "contact_email", + "legal_info_url", + "privacy_policy_url", + "functions", + "runtimes", + "capabilities" + ] + }, + "$defs": { + "function-object": { + "type": "object", + "title": "Function object", + "description": "Information related to how the model should interact with a function.", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string", + "description": "A string that uniquely identifies this function. Runtime objects MAY reference this identifier to bind the runtime to the function. When the function is bound to an OpenAPI runtime, the value must match an `operationId` value in the OpenAPI description.", + "pattern": "^[A-Za-z0-9_]+$" + }, + "description": { + "type": "string", + "description": "A description better tailored to the model, such as token context length considerations or keyword usage for improved plugin prompting." + }, + "parameters": { + "$ref": "#/$defs/function-parameters", + "description": "An object that contains members that describe the parameters of a function in a runtime agnostic way. It mirrors the shape of [json-schema][] but only supports a small subset of the JSON schema capabilities. If the `parameters` property isn't present, functions described by a runtime object of type `OpenApi` use the OpenAPI description to determine the parameters. Each member in the JSON object is a function parameter object that describes the semantics of the parameter." + }, + "returns": { + "oneOf": [ + { + "$ref": "#/$defs/function-return-type" + }, + { + "$ref": "#/$defs/function-rich-response-return-type" + } + ], + "description": "Describes the semantics of the value returned from the function." + }, + "states": { + "type": "object", + "title": "Function states object", + "description": "Defines state objects for orchestrator states.", + "properties": { + "reasoning": { + "$ref": "#/$defs/function-state-config", + "description": "The state in which the model can call functions and do computations." + }, + "responding": { + "$ref": "#/$defs/function-state-config", + "description": "The state in which the model can generate text that is shown to the user. The model can't invoke functions in the responding state." + } + }, + "propertyNames": { + "enum": [ + "reasoning", + "responding" + ] + } + }, + "capabilities": { + "type": "object", + "title": "Function capabilities object", + "description": "Contains a collection of data used to configure optional capabilities of the orchestrator while invoking the function.", + "properties": { + "confirmation": { + "$ref": "#/$defs/confirmation-object", + "description": "Describes a confirmation dialog that SHOULD be presented to the user before invoking the function." + }, + "response_semantics": { + "$ref": "#/$defs/response-semantics-object", + "description": "Describes how the orchestrator can interpret the response payload and provide a visual rendering." + }, + "security_info": { + "$ref": "#/$defs/security-info-object", + "description": "Describes the security information to be used to aid in determining the relative risk of invoking the function." + } + }, + "propertyNames": { + "enum": [ + "confirmation", + "response_semantics", + "security_info" + ] + } + } + }, + "required": [ + "name" + ], + "propertyNames": { + "enum": [ + "id", + "name", + "description", + "parameters", + "returns", + "states", + "capabilities" + ] + } + }, + "response-semantics-object": { + "type": "object", + "title": "Response semantics object", + "description": "Contains information to identify semantics of response payload and enable rendering that information in a rich visual experience using [adaptive cards](https://adaptivecards.io/).", + "properties": { + "data_path": { + "type": "string", + "description": "A JSONPath [RFC9535][] query that identifies a set of elements from the function response to be rendered using the template specified in each item." + }, + "properties": { + "type": "object", + "title": "Response semantics properties object", + "description": "Allows mapping of JSONPath queries to well-known data elements. Each JSONPath query is relative to a result value.", + "properties": { + "title": { + "type": "string", + "description": "Title of a citation for the result." + }, + "subtitle": { + "type": "string", + "description": "Subtitle of a citation for the result." + }, + "url": { + "type": "string", + "description": "URL of a citation for the result." + }, + "thumbnail_url": { + "type": "string", + "description": "URL of a thumbnail image for the result." + }, + "information_protection_label": { + "type": "string", + "description": "Data sensitivity indicator of the result contents." + }, + "template_selector": { + "type": "string", + "description": "A JSONPath query that returns an [Adaptive Card Template](https://learn.microsoft.com/adaptive-cards/templating/language) from the API response to be used for rendering the result." + } + }, + "propertyNames": { + "enum": [ + "title", + "subtitle", + "url", + "information_protection_label", + "thumbnail_url", + "template_selector" + ] + } + }, + "static_template": { + "type": "object", + "description": "A JSON object that conforms with the [Adaptive Card Schema](https://adaptivecards.io/schemas/adaptive-card.json) and templating language. This Adaptive Card instance is used to render a result from the plugin response. This value is used if the `template_selector` isn't present or fails to resolve to an adaptive card." + }, + "oauth_card_path": { + "type": "string", + "description": "A JSON string containing a JSONPath query that when applied to the response payload will return an [Adaptive Card Template](https://learn.microsoft.com/adaptive-cards/templating/language) that will be used to authenticate the user." + } + }, + "required": [ + "data_path" + ], + "propertyNames": { + "enum": [ + "data_path", + "properties", + "static_template", + "oauth_card_path" + ] + } + }, + "conversation-starter": { + "type": "object", + "title": "Conversation starter object", + "description": "An example of a question that the plugin can answer.", + "properties": { + "text": { + "type": "string", + "description": "The text of the conversation starter. This property is localizable." + }, + "title": { + "type": "string", + "description": "The title of the conversation starter. This property is localizable." + } + }, + "required": [ + "text" + ], + "propertyNames": { + "enum": [ + "text", + "title" + ] + } + }, + "runtime": { + "type": "object", + "description": "Defines how a specific runtime invokes functions, including auth and spec details.", + "required": [ + "type", + "auth", + "spec" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "OpenApi", + "LocalPlugin", + "RemoteMCPServer" + ], + "description": "The type of runtime. Must be 'OpenApi', 'LocalPlugin', or 'RemoteMCPServer'." + }, + "auth": { + "$ref": "#/$defs/auth-object" + }, + "run_for_functions": { + "type": "array", + "description": "The names of the functions that are available in this runtime. If this property is omitted, all functions described by the runtime are available. If a wildcard (\"*\") is specified as the only string, all functions are considered. More than one runtime MUST NOT declare support for the same function either implicitly or explicitly", + "items": { + "type": "string" + } + }, + "spec": { + "description": "Runtime-specific configuration object.", + "oneOf": [ + { + "$ref": "#/$defs/open-api-spec" + }, + { + "$ref": "#/$defs/local-plugin-spec" + }, + { + "$ref": "#/$defs/mcp-execution-spec" + } + ] + }, + "output_template": { + "type": "string", + "description": "A Liquid template used to transform the plugin response payload." + } + }, + "additionalProperties": false, + "patternProperties": { + "^x-": {} + } + }, + "auth-object": { + "type": "object", + "title": "Runtime authentication object", + "description": "Contains information used by the plugin to authenticate to the runtime.", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "description": "Specifies the type of authentication required to invoke a function.", + "enum": [ + "None", + "OAuthPluginVault", + "ApiKeyPluginVault" + ] + }, + "Type": { + "type": "string", + "description": "Specifies the type of authentication required to invoke a function.", + "enum": [ + "None", + "OAuthPluginVault", + "ApiKeyPluginVault" + ] + }, + "reference_id": { + "type": "string", + "description": "A value used when `type` is `OAuthPluginVault` or `ApiKeyPluginVault`. The `reference_id` value is acquired independently when providing the necessary authentication configuration values. This mechanism exists to prevent the need for storing secret values in the plugin manifest." + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "OAuthPluginVault" + } + } + }, + "then": { + "required": [ + "reference_id" + ] + } + }, + { + "if": { + "properties": { + "type": { + "const": "ApiKeyPluginVault" + } + } + }, + "then": { + "required": [ + "reference_id" + ] + } + } + ], + "additionalProperties": false, + "patternProperties": { + "^x-": {} + } + }, + "open-api-spec": { + "type": "object", + "description": "Configuration for invoking an OpenAPI-based runtime.", + "properties": { + "url": { + "type": "string", + "description": "The URL to the OpenAPI specification (ignored if api_description is present)." + }, + "api_description": { + "type": "string", + "description": "A string that contains an OpenAPI description. If this member is present, `url` isn't required and is ignored if present." + }, + "progress_style": { + "type": "string", + "description": "A JSON string that contains the progress style that will be used to display the progress of the function. The value MUST be one of the following values: None, ShowUsage, ShowUsageWithInput, ShowUsageWithInputAndOutput.", + "enum": [ + "None", + "ShowUsage", + "ShowUsageWithInput", + "ShowUsageWithInputAndOutput" + ] + } + }, + "anyOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "api_description" + ] + } + ], + "additionalProperties": false, + "patternProperties": { + "^x-": {} + } + }, + "local-plugin-spec": { + "type": "object", + "description": "Configuration for invoking a local plugin runtime.", + "required": [ + "local_endpoint" + ], + "properties": { + "local_endpoint": { + "type": "string", + "description": "A JSON string that represents a local runtime identifier that links to a specific function to invoke locally (e.g. in the case of Windows it will link to a particular app). In the case of an Office Addin that is implementing the function, the value MUST be the string Microsoft.Office.Addin.", + "enum": [ + "Microsoft.Office.Addin" + ] + }, + "allowed_host": { + "type": "array", + "description": "An optional JSON array of enumerated strings that can take values as mail, workbook, document or presentation. The value represent the host apps this LocalPlugin can run-in.", + "items": { + "type": "string", + "enum": [ + "mail", + "workbook", + "document", + "presentation" + ] + } + } + }, + "additionalProperties": false, + "patternProperties": { + "^x-": {} + } + }, + "mcp-execution-spec": { + "type": "object", + "description": "Configuration for invoking a remote MCP server runtime.", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "description": "A JSON string that represents the URL of the MCP server. This URL MUST be a valid absolute URL. This member is required when the type is RemoteMCPServer.", + "format": "uri" + }, + "mcp_tool_description": { + "type": "object", + "description": "A JSON object that contains either a reference to an external MCP tool description file or inline tool definitions. When present, this indicates that static tool definitions should be used instead of dynamic discovery. When absent, the runtime MUST use dynamic tool discovery by calling the MCP server's tools/list method.", + "oneOf": [ + { + "$ref": "#/$defs/mcp-tool-file-reference" + }, + { + "$ref": "#/$defs/mcp-tool-inline" + } + ] + } + }, + "additionalProperties": false, + "patternProperties": { + "^x-": {} + } + }, + "mcp-tool-file-reference": { + "type": "object", + "title": "MCP Tool File Reference", + "description": "A reference to an external MCP tool description file.", + "required": [ + "file" + ], + "properties": { + "file": { + "type": "string", + "description": "A string that identifies the relative path to the MCP tool description file within the app package. The file MUST be a valid JSON file that contains tool descriptions matching the format returned by the MCP server's tools/list method." + } + }, + "additionalProperties": false + }, + "mcp-tool-inline": { + "type": "object", + "title": "MCP Tool Inline Definitions", + "description": "Inline tool definitions matching the format returned by the MCP server's tools/list method." + }, + "function-parameters": { + "type": "object", + "title": "Function parameters object", + "description": "An object that is used to identify the set of parameters that can be passed to the function. This object is structured to mirror the shape of a JSON Schema object but it only supports a subset of JSON Schema keywords.", + "properties": { + "type": { + "type": "string", + "description": "The JSON Schema type.", + "const": "object" + }, + "properties": { + "type": "object", + "title": "Function parameters properties object", + "description": "An object that maps parameter names to their definitions.", + "patternProperties": { + "^[A-Za-z0-9_]+$": { + "$ref": "#/$defs/function-parameter", + "description": "The parameter definition that corresponds to the parameter that matches the property name." + } + } + }, + "required": { + "type": "array", + "description": "The names of properties that are required parameters. Unlike in JSON Schema, the values in this array MUST match the names listed in the `properties` property.", + "items": { + "type": "string" + } + } + }, + "required": [ + "properties" + ], + "propertyNames": { + "enum": [ + "type", + "properties", + "required" + ] + } + }, + "function-parameter": { + "type": "object", + "title": "Function parameter object", + "description": "An object that describes the semantics of a function parameter.", + "properties": { + "type": { + "type": "string", + "description": "Specifies the parameter's type.", + "enum": [ + "string", + "array", + "boolean", + "integer", + "number" + ] + }, + "items": { + "$ref": "#/$defs/simple-function-parameter", + "description": "A function parameter object that describes a single element in an array. MUST only be present when `type` is `array`." + }, + "enum": { + "type": "array", + "description": "An array of valid values for this parameter. MUST only be present when `type` is `string`.", + "items": { + "type": "string" + } + }, + "description": { + "type": "string", + "description": "A description of the parameter." + }, + "default": { + "type": [ + "string", + "boolean", + "integer", + "number", + "array" + ], + "description": "A value of the type specified by the `type` property that indicates the value the API uses when a value for an optional parameter isn't provided." + } + }, + "required": [ + "type" + ], + "propertyNames": { + "enum": [ + "type", + "items", + "enum", + "description", + "default" + ] + } + }, + "simple-function-parameter": { + "type": "object", + "title": "Simple function parameter object", + "description": "An object that describes the semantics of a simple function parameter.", + "properties": { + "type": { + "type": "string", + "description": "Specifies the parameter's type.", + "enum": [ + "string", + "boolean", + "integer", + "number" + ] + }, + "enum": { + "type": "array", + "description": "An array of valid values for this parameter. MUST only be present when `type` is `string`.", + "items": { + "type": "string" + } + }, + "description": { + "type": "string", + "description": "A description of the parameter." + }, + "default": { + "type": [ + "string", + "boolean", + "integer", + "number", + "array" + ], + "description": "A value of the type specified by the `type` property that indicates the value the API uses when a value for an optional parameter isn't provided." + } + }, + "required": [ + "type" + ], + "propertyNames": { + "enum": [ + "type", + "items", + "enum", + "description", + "default" + ] + } + }, + "function-return-type": { + "type": "object", + "title": "Return object", + "description": "Contains the semantics of the value returned from the function.", + "properties": { + "type": { + "type": "string", + "description": "Specifies the type of the value returned by the API.", + "enum": [ + "string" + ] + }, + "description": { + "type": "string", + "description": "A description of the value returned by the API." + } + }, + "required": [ + "type" + ], + "propertyNames": { + "enum": [ + "type", + "description" + ] + } + }, + "function-rich-response-return-type": { + "type": "object", + "title": "Rich return object", + "description": "Indicates that the function returns a response that is compatible with the Rich Responses protocol.", + "properties": { + "$ref": { + "type": "string", + "const": "https://copilot.microsoft.com/schemas/rich-response-v1.0.json" + } + }, + "required": [ + "$ref" + ], + "propertyNames": { + "enum": [ + "$ref" + ] + } + }, + "instruction": { + "type": [ + "string", + "array" + ], + "items": { + "type": "string" + } + }, + "example": { + "type": [ + "string", + "array" + ], + "items": { + "type": "string" + } + }, + "function-state-config": { + "type": "object", + "title": "State object", + "description": "Contains specific instructions for when a function is invoked in a specific orchestrator state.", + "properties": { + "description": { + "type": "string", + "description": "Describes the purpose of a function when used in a specific orchestrator state." + }, + "instructions": { + "$ref": "#/$defs/instruction", + "description": "A string or an array of strings that are used to provide instructions to the orchestrator on how to use this function while in a specific orchestrator state. Providing a single string indicates the intent to provide a complete set of instructions that would override any built-in function prompts. Providing an array of strings indicates the intent to augment the built-in function prompting mechanism." + }, + "examples": { + "$ref": "#/$defs/example", + "description": "A string or an array of strings that are used to provide examples to the orchestrator on how this function can be invoked." + } + }, + "propertyNames": { + "enum": [ + "description", + "instructions", + "examples" + ] + } + }, + "confirmation-object": { + "type": "object", + "title": "Confirmation object", + "description": "Describes how the orchestrator asks the user to confirm before calling a function.", + "properties": { + "type": { + "type": "string", + "description": "Specifies the type of confirmation.", + "enum": [ + "None", + "AdaptiveCard" + ] + }, + "title": { + "type": "string", + "description": "The title of the confirmation dialog. This property is localizable." + }, + "body": { + "type": "string", + "description": "The text of the confirmation dialog. This property is localizable." + }, + "isNonConsequential": { + "type": "boolean", + "description": "Indicates the function is non-consequential. If true users may choose Always Allow. Default false. For OpenAPI GET only and ignored if x-oai-isConsequential is present or method != GET.", + "default": false + } + }, + "propertyNames": { + "enum": [ + "type", + "title", + "body", + "isNonConsequential" + ] + } + }, + "security-info-object": { + "type": "object", + "title": "Security info object", + "description": "Describes the security information to be used to aid in determining the relative risk of invoking the function.", + "properties": { + "data_handling": { + "type": "array", + "description": "An array of strings that describe the data handling behavior of the plugin.", + "items": { + "type": "string", + "enum": [ + "GetPublicData", + "GetPrivateData", + "DataTransform", + "ResourceStateUpdate" + ] + } + } + }, + "propertyNames": { + "enum": [ + "data_handling" + ] + } + } + } +} From f21f76461f4c203b5cbe0b4c7a7a15859d35988e Mon Sep 17 00:00:00 2001 From: "Peter Ombwa (from Dev Box)" Date: Thu, 13 Nov 2025 09:48:59 -0800 Subject: [PATCH 05/12] chore: Add file to static_template. --- copilot/plugin/v2.4/schema.json | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/copilot/plugin/v2.4/schema.json b/copilot/plugin/v2.4/schema.json index 8f462e30..fe13d6f7 100644 --- a/copilot/plugin/v2.4/schema.json +++ b/copilot/plugin/v2.4/schema.json @@ -248,7 +248,28 @@ }, "static_template": { "type": "object", - "description": "A JSON object that conforms with the [Adaptive Card Schema](https://adaptivecards.io/schemas/adaptive-card.json) and templating language. This Adaptive Card instance is used to render a result from the plugin response. This value is used if the `template_selector` isn't present or fails to resolve to an adaptive card." + "description": "A JSON object that either: conforms with the [Adaptive Card Schema](https://adaptivecards.io/schemas/adaptive-card.json) and templating language, or contains a `file` property that references a file containing the Adaptive Card Schema. This Adaptive Card instance is used to render a result from the plugin response. This value is used if the `template_selector` isn't present or fails to resolve to an adaptive card. If using the file reference option, the value of `file` MUST be a relative path to a JSON file containing a valid Adaptive Card Schema. The path is relative to the location of the manifest document.", + "oneOf": [ + { + "description": "An inline Adaptive Card definition that conforms with the Adaptive Card Schema and templating language.", + "type": "object", + "not": { + "required": ["file"] + } + }, + { + "description": "A file reference to an Adaptive Card definition. The file property MUST contain a relative path to a JSON file containing a valid Adaptive Card Schema.", + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "A relative path to a JSON file containing a valid Adaptive Card Schema. The path is relative to the location of the manifest document." + } + }, + "required": ["file"], + "additionalProperties": false + } + ] }, "oauth_card_path": { "type": "string", @@ -314,7 +335,7 @@ }, "run_for_functions": { "type": "array", - "description": "The names of the functions that are available in this runtime. If this property is omitted, all functions described by the runtime are available. If a wildcard (\"*\") is specified as the only string, all functions are considered. More than one runtime MUST NOT declare support for the same function either implicitly or explicitly", + "description": "The names of the functions that are available in this runtime. A single wildcard (\"*\") value can be provided to enable all functions in the OpenAPI description. More than one runtime MUST NOT declare support for the same function either implicitly or explicitly.", "items": { "type": "string" } From 9a5907b5738a45999dfbb3a0193a8392eb9dc83e Mon Sep 17 00:00:00 2001 From: "Peter Ombwa (from Dev Box)" Date: Thu, 13 Nov 2025 10:31:13 -0800 Subject: [PATCH 06/12] feat: Add new features to DA v1.6. --- copilot/declarative-agent/v1.6/schema.json | 130 ++++++++++++++++++++- 1 file changed, 127 insertions(+), 3 deletions(-) diff --git a/copilot/declarative-agent/v1.6/schema.json b/copilot/declarative-agent/v1.6/schema.json index 1a50253c..4f21cd2b 100644 --- a/copilot/declarative-agent/v1.6/schema.json +++ b/copilot/declarative-agent/v1.6/schema.json @@ -80,6 +80,30 @@ } ] } + }, + "worker_agents": { + "type": "array", + "description": "Optional. A list of objects that identify declarative agents to act as worker agents.", + "minItems": 1, + "items": { + "oneOf": [ + { + "$ref": "#/$defs/worker-agent-object" + } + ] + } + }, + "user_overrides": { + "type": "array", + "description": "Optional. A list of objects that allow the DA author to specify capabilities that can be modified by users and the allowed actions.", + "minItems": 1, + "items": { + "oneOf": [ + { + "$ref": "#/$defs/user-override-object" + } + ] + } } }, "required": [ @@ -100,6 +124,8 @@ "behavior_overrides", "conversation_starters", "actions", + "worker_agents", + "user_overrides", "$schema" ] }, @@ -305,11 +331,16 @@ "name": { "const": "People", "description": "Required. Must be set to People." + }, + "include_related_content": { + "type": "boolean", + "description": "Boolean. If true, include related documents, emails, and Teams messages worked on by people in your organization when searching People data. If false or omitted, only basic org info (org charts, names, email addresses, skills). Default false." } }, "propertyNames": { "enum": [ - "name" + "name", + "include_related_content" ] } }, @@ -376,13 +407,22 @@ "shared_mailbox": { "type": "string", "description": "A JSON string that contains SMTP address of the shared mailbox. The presence of this field indicates that the DA constrain its search for relevant emails only to that mailbox. Emails from user's primary mailbox is not searched when this field is present." + }, + "group_mailboxes": { + "type": "array", + "description": "A JSON array of strings containing SMTP addresses of group mailboxes. The presence of this field indicates that the DA can search for relevant emails in the specified group mailboxes. A maximum of 25 mailboxes are supported.", + "maxItems": 25, + "items": { + "type": "string" + } } }, "propertyNames": { "enum": [ "name", "folders", - "shared_mailbox" + "shared_mailbox", + "group_mailboxes" ] }, "required": [ @@ -647,11 +687,44 @@ "name": { "const": "Meetings", "description": "Required. Must be set to Meetings." + }, + "items_by_id": { + "type": "array", + "description": "A JSON array of objects that identify meetings. This array constrains the DA content access to only the meetings specified by the members of each Meeting Identifier Object.", + "items": { + "$ref": "#/$defs/capabilities/meeting-identifier" + } } }, "propertyNames": { "enum": [ - "name" + "name", + "items_by_id" + ] + } + }, + "meeting-identifier": { + "type": "object", + "description": "A JSON object that identifies a meeting by its ICalUID.", + "properties": { + "id": { + "type": "string", + "description": "A JSON string that contains the ICalUID of a specific meeting. This member is required.", + "minLength": 1 + }, + "is_series": { + "type": "boolean", + "description": "A JSON boolean that indicates whether the meeting is a series. This member is required." + } + }, + "required": [ + "id", + "is_series" + ], + "propertyNames": { + "enum": [ + "id", + "is_series" ] } } @@ -775,6 +848,57 @@ ] } }, + "worker-agent-object": { + "type": "object", + "description": "A JSON object used to identify a declarative agent to act as a worker agent. Declarative agents can be referenced via their id (Agent Id).", + "properties": { + "id": { + "type": "string", + "description": "Required. Not localizable. A unique identifier for a declarative agent.", + "pattern": "^(?!\\[\\[)(.*?)(? Date: Fri, 14 Nov 2025 13:01:13 -0800 Subject: [PATCH 07/12] fix: Remove embedded_resource_snapshot_id from embedded-knowledge. --- copilot/declarative-agent/v1.6/schema.json | 33 ++-------------------- 1 file changed, 3 insertions(+), 30 deletions(-) diff --git a/copilot/declarative-agent/v1.6/schema.json b/copilot/declarative-agent/v1.6/schema.json index 4f21cd2b..a3bd5293 100644 --- a/copilot/declarative-agent/v1.6/schema.json +++ b/copilot/declarative-agent/v1.6/schema.json @@ -252,17 +252,12 @@ }, "embedded-knowledge": { "type": "object", - "description": "A JSON object whose presence indicates that the DA will be able to use files locally in the app package as knowledge. The object MUST contain either a files member or a embedded_resource_snapshot_id member, but not both.", + "description": "A JSON object whose presence indicates that the DA will be able to use files locally in the app package as knowledge.", "properties": { "name": { "const": "EmbeddedKnowledge", "description": "Required. Must be set to EmbeddedKnowledge." }, - "embedded_resource_snapshot_id": { - "type": "string", - "description": "A JSON string identifier provisioned by a an external file container storage service that can be used to locate the embedded knowledge files.", - "pattern": "^(?!\\[\\[)(.*?)(? Date: Wed, 19 Nov 2025 15:17:31 -0800 Subject: [PATCH 08/12] Fix schema URL in operations agent definition Updated the schema URL for the JSON schema. --- fabric/item/operationsAgents/definition/1.0.0/schema.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fabric/item/operationsAgents/definition/1.0.0/schema.json b/fabric/item/operationsAgents/definition/1.0.0/schema.json index 11aa6b24..23099f4d 100644 --- a/fabric/item/operationsAgents/definition/1.0.0/schema.json +++ b/fabric/item/operationsAgents/definition/1.0.0/schema.json @@ -1,6 +1,5 @@ { - "$id": "https://developer.microsoft.com/json-schemas/fabric/item/operationsAgents/definition/1.0.0/schema.json", - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://developer.microsoft.com/json-schemas/fabric/item/operationsAgents/definition/1.0.0/schema.json", "title": "Operations Agent", "description": "Artifact definition of Operations Agent.", "type": "object", From 05905b358d99da5a77eac3b584344ab5e1f6d5e1 Mon Sep 17 00:00:00 2001 From: Andrew Garbuzov Date: Thu, 20 Nov 2025 11:43:50 -0800 Subject: [PATCH 09/12] Copilot schemas into main. --- .../copilot/examplePrompts/1.0.0/schema.json | 28 ++ .../copilot/schema/1.0.0/schema.json | 299 ++++++++++++++++++ .../copilot/settings/1.0.0/schema.json | 20 ++ fabric/item/version/1.0.0/schema.json | 18 ++ 4 files changed, 365 insertions(+) create mode 100644 fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json create mode 100644 fabric/item/semanticModel/copilot/schema/1.0.0/schema.json create mode 100644 fabric/item/semanticModel/copilot/settings/1.0.0/schema.json create mode 100644 fabric/item/version/1.0.0/schema.json diff --git a/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json b/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json new file mode 100644 index 00000000..db1981be --- /dev/null +++ b/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string" + }, + "prompts": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 500 + }, + "maxItems": 10000 + } + }, + "required": [ + "$schema" + ] +} \ No newline at end of file diff --git a/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json b/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json new file mode 100644 index 00000000..119ed346 --- /dev/null +++ b/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json @@ -0,0 +1,299 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json", + "definitions": { + "CopilotSchemaColumn": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "string", + "null" + ], + "maxLength": 512 + }, + "name": { + "type": "string", + "maxLength": 512 + }, + "visibility": { + "type": "string", + "enum": [ + "Auto", + "Visible", + "Hidden" + ] + }, + "index": { + "type": "string", + "enum": [ + "Default", + "All", + "None" + ] + }, + "synonyms": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 1024 + }, + "maxItems": 1024 + } + }, + "required": [ + "name" + ] + }, + "CopilotSchemaHierarchy": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "string", + "null" + ], + "maxLength": 512 + }, + "name": { + "type": "string", + "maxLength": 512 + }, + "visibility": { + "type": "string", + "enum": [ + "Auto", + "Visible", + "Hidden" + ] + }, + "levels": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/CopilotSchemaLevel" + }, + "maxItems": 15999 + }, + "synonyms": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 1024 + }, + "maxItems": 1024 + } + }, + "required": [ + "name" + ] + }, + "CopilotSchemaLevel": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "string", + "null" + ], + "maxLength": 512 + }, + "name": { + "type": "string", + "maxLength": 512 + }, + "visibility": { + "type": "string", + "enum": [ + "Auto", + "Visible", + "Hidden" + ] + }, + "synonyms": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 1024 + }, + "maxItems": 1024 + } + }, + "required": [ + "name" + ] + }, + "CopilotSchemaMeasure": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "string", + "null" + ], + "maxLength": 512 + }, + "name": { + "type": "string", + "maxLength": 512 + }, + "visibility": { + "type": "string", + "enum": [ + "Auto", + "Visible", + "Hidden" + ] + }, + "synonyms": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 1024 + }, + "maxItems": 1024 + } + }, + "required": [ + "name" + ] + }, + "CopilotSchemaTable": { + "type": [ + "object", + "null" + ], + "additionalProperties": false, + "properties": { + "id": { + "type": [ + "string", + "null" + ], + "maxLength": 512 + }, + "name": { + "type": "string", + "maxLength": 512 + }, + "visibility": { + "type": "string", + "enum": [ + "Auto", + "Visible", + "Hidden" + ] + }, + "columns": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/CopilotSchemaColumn" + }, + "maxItems": 15999 + }, + "measures": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/CopilotSchemaMeasure" + }, + "maxItems": 15999 + }, + "hierarchies": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/CopilotSchemaHierarchy" + }, + "maxItems": 15999 + }, + "synonyms": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "string", + "null" + ], + "maxLength": 1024 + }, + "maxItems": 1024 + } + }, + "required": [ + "name" + ] + } + }, + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string" + }, + "tables": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/CopilotSchemaTable" + }, + "maxItems": 16000 + } + }, + "required": [ + "$schema" + ] +} \ No newline at end of file diff --git a/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json b/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json new file mode 100644 index 00000000..189b782d --- /dev/null +++ b/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string" + }, + "indexingEnabled": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "$schema" + ] +} \ No newline at end of file diff --git a/fabric/item/version/1.0.0/schema.json b/fabric/item/version/1.0.0/schema.json new file mode 100644 index 00000000..9aab8dd1 --- /dev/null +++ b/fabric/item/version/1.0.0/schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://developer.microsoft.com/json-schemas/fabric/item/version/1.0.0/schema.json", + "type": "object", + "additionalProperties": false, + "properties": { + "$schema": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "$schema", + "version" + ] +} \ No newline at end of file From c232df8eb96e22d7ae17f7d76dadfb5c628fbf22 Mon Sep 17 00:00:00 2001 From: Daniel Olumuyiwa <79334116+oolumuyiwa@users.noreply.github.com> Date: Tue, 25 Nov 2025 12:47:17 -0800 Subject: [PATCH 10/12] pp changes (#473) Co-authored-by: Tomiwa Muyiwa --- .../MicrosoftTeams.Localization.schema.json | 8 + teams/vDevPreview/MicrosoftTeams.schema.json | 311 +++++++++++++++++- 2 files changed, 317 insertions(+), 2 deletions(-) diff --git a/teams/vDevPreview/MicrosoftTeams.Localization.schema.json b/teams/vDevPreview/MicrosoftTeams.Localization.schema.json index 2523016a..c5a8f525 100644 --- a/teams/vDevPreview/MicrosoftTeams.Localization.schema.json +++ b/teams/vDevPreview/MicrosoftTeams.Localization.schema.json @@ -201,6 +201,14 @@ "type": "string", "maxLength": 32 }, + "^extensions\\[[0-9]\\]\\.runtimes\\[[1]?[0-9]\\]\\.customFunctions\\.enums\\[[0-9]\\]\\.values\\[[0-9]\\]\\.name$": { + "type": "string", + "maxLength": 256 + }, + "^extensions\\[[0-9]\\]\\.runtimes\\[[1]?[0-9]\\]\\.customFunctions\\.enums\\[[0-9]\\]\\.values\\[[0-9]\\]\\.tooltip$": { + "type": "string", + "maxLength": 256 + }, "^extensions\\[[0]\\]\\.keyboardShortcuts\\[[0-9]\\]\\.shortcuts\\[[0-9]\\]\\.key\\.default$": { "type": "string", "maxLength": 32 diff --git a/teams/vDevPreview/MicrosoftTeams.schema.json b/teams/vDevPreview/MicrosoftTeams.schema.json index fa14ee6d..721ef7d4 100644 --- a/teams/vDevPreview/MicrosoftTeams.schema.json +++ b/teams/vDevPreview/MicrosoftTeams.schema.json @@ -500,6 +500,11 @@ "description": "A value indicating whether the bot supports video calling.", "default": false }, + "supportsSessions": { + "type": "boolean", + "description": "A property set by developers to opt-in to sessions.", + "default": false + }, "scopes": { "type": "array", "description": "Specifies whether the bot offers an experience in the context of a channel in a team, in a group chat (groupChat), an experience scoped to an individual user alone (personal) OR within Copilot surfaces. These options are non-exclusive.", @@ -1497,6 +1502,20 @@ "required": [ "text" ] + }, + "functionsAs": { + "type": "string", + "enum": [ + "agentOnly", + "agenticUserOnly", + "agentOrAgenticUser" + ], + "default": "agentOnly", + "description": "Possible values: 'agenticUserOnly', 'agentOnly', or 'agentOrAgenticUser'. 'agenticUserOnly' means the customEngineAgent must be hired and cannot be installed as a regular agent. 'agentOrAgenticUser' means the customEngineAgent supports both being installed as a regular agent and being hired. 'agentOnly' means it supports being installed as a regular agent only (default)." + }, + "agenticUserTemplateId": { + "type": "string", + "description": "Unique identifier for the agentic user template. This id must match the id specified in an agentic user template in the agenticUserTemplates node" } }, "required": [ @@ -1523,6 +1542,15 @@ } ] }, + "agenticUserTemplates": { + "type": "array", + "description": "An array of agentic user templates references.", + "items": { + "$ref": "#/definitions/agenticUserTemplateRef" + }, + "minimum": 1, + "maxItems": 1 + }, "elementRelationshipSet": { "type": "object", "properties": { @@ -1575,6 +1603,175 @@ } }, "additionalProperties": false + }, + "agentConnectors": { + "type": "array", + "description": "A list of agent connector objects to included in the Unified App Manifest.", + "maxItems": 10, + "items": { + "type": "object", + "description": "An agent connector represents a mechanism to enable agents to access information from systems outside of Microsoft 365, often via an MCP Server. Other mechanisms include using OpenAPI descriptions for calling external HTTP APIs. The role of the agent connector is to provide the necessary configuration information to agents or other M365 applications to connect to these external systems. An agent connector can be provided for use by other elements described within the same Unified App Manifest, or as a standalone resource that can be referenced in the Unified App Manifest of other M365 applications.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the agent connector", + "maxLength": 64 + }, + "reusable": { + "type": "boolean", + "description": "Indicates whether this connector can be reused by other applications.", + "default": false + }, + "displayName": { + "type": "string", + "description": "A user-friendly name for the connector, which can be displayed in UIs.", + "maxLength": 128 + }, + "description": { + "type": "string", + "description": "A brief description of the connector's purpose and functionality.", + "maxLength": 4000 + }, + "toolSource": { + "type": "object", + "description": "Configuration details for connectors that provide tools for agents, either via a plugin, a remote MCP server or a local MCP server. One and only one of the above properties MUST be defined within a tool source object.", + "properties": { + "plugin": { + "type": "object", + "description": "Configuration details for connectors that leverage a Plugin Manifest. Either both id and file properties must be provided (for external plugin reference), or only the description property must be provided (for inline plugin manifest).", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the plugin that provides the tools.", + "maxLength": 64 + }, + "file": { + "$ref": "#/definitions/relativePath", + "description": "The relative path to the plugin manifest file within the app package." + }, + "description": { + "type": "object", + "description": "An inlined Plugin Manifest object for simple plugins that do not require a separate file. It should conform to the Plugin Manifest schema https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html ." + } + }, + "additionalProperties": false + }, + "remoteMcpServer": { + "type": "object", + "additionalProperties": false, + "properties": { + "mcpServerUrl": { + "$ref": "#/definitions/secureHttpUrl", + "description": "The URL of the remote MCP Server." + }, + "mcpToolDescription": { + "type": "object", + "description": "Configuration for MCP tool descriptions, either by file reference or inline content (but not both). When this property is present it indicates that dynamic discovery will not be used.", + "properties": { + "file": { + "$ref": "#/definitions/relativePath", + "description": "The relative path to the MCP tool description file within the app package." + }, + "description": { + "type": "object", + "description": "An inline JSON object containing the tool descriptions directly. The contents match the results of calling the 'tools/list' method on the MCP Server." + } + }, + "additionalProperties": false + }, + "authorization": { + "type": "object", + "description": "Authorization configuration for connecting to the local MCP server. The design mirrors that of Plugin Manifests https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": [ "None", "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ], + "description": "The type of authorization required to invoke the MCP server. Supported values are: 'None' (anonymous access), 'OAuthPluginVault' (OAuth flow with referenceId), 'ApiKeyPluginVault' (API Key with referenceId), 'DynamicClientRegistration' (dynamic client registration with referenceId)." + }, + "referenceId": { + "type": "string", + "maxLength": 128, + "description": "A reference identifier used when type is OAuthPluginVault, ApiKeyPluginVault, or DynamicClientRegistration. The referenceId value is acquired independently when providing the necessary authorization configuration values. This mechanism exists to prevent the need for storing secret values in the plugin manifest." + } + }, + "required": [ "type" ], + "if": { + "properties": { + "type": { + "enum": [ "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ] + } + } + }, + "then": { + "required": [ "referenceId" ] + } + } + }, + "required": [ "mcpServerUrl" ] + }, + "localMcpServer": { + "type": "object", + "additionalProperties": false, + "properties": { + "mcpServerIdentifier": { + "type": "string", + "maxLength": 128, + "description": "The unique identifier of the local MCP Server deployed via some secure mechanism to the user's desktop." + }, + "mcpToolDescription": { + "type": "object", + "additionalProperties": false, + "description": "Configuration for MCP tool descriptions, either by file reference or inline content (but not both). When this property is present it indicates that dynamic discovery will not be used.", + "properties": { + "file": { + "$ref": "#/definitions/relativePath", + "description": "The relative path to the MCP tool description file within the app package." + }, + "description": { + "type": "object", + "description": "An inline JSON object containing the tool descriptions directly. The contents match the results of calling the 'tools/list' method on the MCP Server." + } + } + }, + "authorization": { + "type": "object", + "description": "Authorization configuration for connecting to the local MCP server. The design mirrors that of Plugin Manifests https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html", + "properties": { + "type": { + "type": "string", + "enum": [ "None", "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ], + "description": "The type of authorization required to invoke the MCP server. Supported values are: 'None' (anonymous access), 'OAuthPluginVault' (OAuth flow with referenceId), 'ApiKeyPluginVault' (API Key with referenceId), 'DynamicClientRegistration' (dynamic client registration with referenceId)." + }, + "referenceId": { + "type": "string", + "maxLength": 128, + "description": " (maxLength: 128)\tA reference identifier used when type is OAuthPluginVault, ApiKeyPluginVault, or DynamicClientRegistration. The referenceId value is acquired independently when providing the necessary authorization configuration values. This mechanism exists to prevent the need for storing secret values in the plugin manifest." + } + }, + "additionalProperties": false, + "required": [ "type" ], + "if": { + "properties": { + "type": { + "enum": [ "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ] + } + } + }, + "then": { + "required": [ "referenceId" ] + } + } + }, + "required": [ "mcpServerIdentifier" ] + } + }, + "additionalProperties": false + } + }, + "required": [ "id", "displayName" ], + "additionalProperties": false + } } }, "required": [ @@ -1929,10 +2126,70 @@ "metadataUrl": { "$ref": "#/definitions/httpsUrl", "description": "The full URL of a metadata json file with default locale." + }, + "enums": { + "type": "array", + "description": "Array of custom defined enum objects.", + "items": { + "$ref": "#/definitions/enum" + }, + "maxItems": 20000 } }, "additionalProperties": false }, + "enum": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the enum.", + "maxLength": 64, + "minLength": 3, + "pattern": "^[A-Za-z][A-Za-z0-9._]*$" + }, + "type": { + "type": "string", + "description": "The type of the values in this enum.", + "enum": [ "number", "string" ] + }, + "values": { + "type": "array", + "description": "Array that defines the constants for the enum.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "A brief description of the constant.", + "maxLength": 256 + }, + "numberValue": { + "type": ["number", "null"], + "description": "When enum type is number, the actual number value of the constant." + }, + "stringValue": { + "type": "string", + "description": "When enum type is string, the actual string value of the constant." + }, + "tooltip": { + "type": "string", + "description": "Additional information about the constant, intended to provide more context or details.", + "maxLength": 256 + } + }, + "additionalProperties": false, + "required": [ "name" ] + } + } + }, + "required": [ + "id", + "type", + "values" + ], + "additionalProperties": false + }, "extensionCustomFunctionsNamespace": { "type": "object", "description": "Defines the namespace for your custom functions. A namespace prepends itself to your custom functions to help customers identify your functions as part of your add-in.", @@ -2023,6 +2280,31 @@ "type": "boolean", "description": "If true, your custom function can access the addresses of the function's input parameters. This property must be used in combination with the dimensionality property of the result object, and dimensionality must be set to matrix.", "default": false + }, + "requiresStreamAddress": { + "type": "boolean", + "default": false, + "description": "If `true`, the function can access the address of the cell calling the streaming function. The `address` property of the invocation parameter contains the address of the cell that invoked your streaming function. " + }, + "requiresStreamParameterAddresses": { + "type": "boolean", + "description": "If `true`, the function can access the parameter addresses of the cell calling the streaming function. The `parameterAddresses` property of the invocation parameter contains the parameter addresses for your streaming function.", + "default": false + }, + "capturesCallingObject": { + "type": "boolean", + "description": "If `true`, the data type being referenced by the custom function is passed as the first argument to the custom function.", + "default": false + }, + "excludeFromAutoComplete": { + "type": "boolean", + "description": "If `true`, the custom function will not appear in the formula AutoComplete menu in Excel.", + "default": false + }, + "linkedEntityLoadService": { + "type": "boolean", + "description": "If `true`, it designates that the function is a linked entity load service that returns linked entity cell values for linked entity IDs requested by Excel.", + "default": false } }, "required": [ @@ -2062,14 +2344,13 @@ "doublecellvalue", "entitycellvalue", "errorcellvalue", - "formattednumbercellvalue", "linkedentitycellvalue", "localimagecellvalue", "stringcellvalue", "webimagecellvalue", null ], - "description": "A subfield of the type property. Specifies the Excel data types accepted by the custom function. Accepts the values cellvalue, booleancellvalue, doublecellvalue, entitycellvalue, errorcellvalue, formattednumbercellvalue, linkedentitycellvalue, localimagecellvalue, stringcellvalue, webimagecellvalue" + "description": "A subfield of the type property. Specifies the Excel data types accepted by the custom function. Accepts the values cellvalue, booleancellvalue, doublecellvalue, entitycellvalue, errorcellvalue, linkedentitycellvalue, localimagecellvalue, stringcellvalue, webimagecellvalue" }, "dimensionality": { "type": "string", @@ -2089,6 +2370,11 @@ "type": "boolean", "default": false, "description": "If true, parameters populate from a specified array. Note that functions all repeating parameters are considered optional parameters by definition." + }, + "customEnumId": { + "type": "string", + "description": "|The `id` of the enum in the `enums` array. This associates the custom enum with the function and enables Excel to display the enum members in the formula AutoComplete menu.", + "maxLength": 64 } }, "required": [ "name" ] @@ -3591,6 +3877,27 @@ ], "additionalProperties": false }, + "agenticUserTemplateRef": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the agentic user template. Must contain only alphanumeric characters, dots, underscores, and hyphens.", + "pattern": "^[a-zA-Z0-9._-]+$", + "minLength": 1, + "maxLength": 64 + }, + "file": { + "$ref": "#/definitions/relativePath", + "description": "Relative file path to this agentic user template element file in the application package." + } + }, + "required": [ + "id", + "file" + ], + "additionalProperties": false + }, "elementReference": { "type": "object", "properties": { From 4e99b559b44fa4dedae756d9457eb27d7fa075f5 Mon Sep 17 00:00:00 2001 From: Tomiwa Muyiwa Date: Wed, 26 Nov 2025 11:41:21 -0800 Subject: [PATCH 11/12] add agentic user --- .../MicrosoftTeams.AgenticUser.schema.json | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json diff --git a/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json b/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json new file mode 100644 index 00000000..157ad0a6 --- /dev/null +++ b/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", + "title": "Microsoft 365 Agentic User Template Schema", + "description": "Schema for Microsoft 365 Agentic User Template configuration - Development Preview version 0.1.0", + "required": [ + "id", + "schemaVersion", + "agentIdentityBlueprintId" + ], + "properties": { + "$schema": { + "type": "string", + "description": "The JSON schema reference for this manifest" + }, + "id": { + "type": "string", + "description": "Unique identifier for the agentic user template. Must contain only alphanumeric characters, dots, underscores, and hyphens.", + "pattern": "^[a-zA-Z0-9._-]+$", + "minLength": 1, + "maxLength": 64 + }, + "schemaVersion": { + "type": "string", + "const": "0.1.0-preview", + "description": "Version of the agentic user template schema." + }, + "agentIdentityBlueprintId": { + "type": "string", + "description": "Agent Identity Blueprint ID registered in Azure AD portal. Must be a valid GUID.", + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", + "format": "uuid" + }, + "communicationProtocol": { + "type": "string", + "description": "Protocol used for communicating with the agentic user.", + "enum": [ + "activityProtocol" + ], + "default": "activityProtocol" + } + }, + "additionalProperties": false +} From 090430c04a826d06ac6c042c783fa482506839e0 Mon Sep 17 00:00:00 2001 From: Tomiwa Muyiwa Date: Wed, 3 Dec 2025 12:02:17 -0800 Subject: [PATCH 12/12] secure http --- teams/vDevPreview/MicrosoftTeams.schema.json | 56 ++++++++++---------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/teams/vDevPreview/MicrosoftTeams.schema.json b/teams/vDevPreview/MicrosoftTeams.schema.json index 721ef7d4..1c46a156 100644 --- a/teams/vDevPreview/MicrosoftTeams.schema.json +++ b/teams/vDevPreview/MicrosoftTeams.schema.json @@ -84,15 +84,15 @@ "maxLength": 10 }, "websiteUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to the page that provides support information for the app." }, "privacyUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to the page that provides privacy information for the app." }, "termsOfUseUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to the page that provides the terms of use for the app." }, "contactInfo": { @@ -253,7 +253,7 @@ "maxLength": 64 }, "configurationUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to use when configuring the tab." }, "canUpdateConfiguration": { @@ -355,7 +355,7 @@ "maxLength": 128 }, "contentUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url which points to the entity UI to be displayed in the Teams canvas." }, "contentBotId": { @@ -363,11 +363,11 @@ "description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)" }, "websiteUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to point at if a user opts to view in a browser." }, "searchUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to direct a user's search queries." }, "scopes": { @@ -623,7 +623,7 @@ "maxLength": 64 }, "configurationUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to use for configuring the connector using the inline configuration experience." }, "scopes": { @@ -1110,7 +1110,7 @@ "description": "Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.", "properties": { "notificationUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url where Graph-connector notifications for the application should be sent." } }, @@ -1240,7 +1240,7 @@ "default": false }, "publisherDocsUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url to the page that provides additional app information for the admins" }, "defaultInstallScope": { @@ -1594,7 +1594,7 @@ "description": "Optional property within backgroundLoadConfiguration containing tab settings for background loading. Setting tabConfiguration indicates that the app supports background loading of tabs.", "properties": { "contentUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "Required URL for background loading. This can be the same contentUrl from the staticTabs section or an alternative endpoint used for background loading." } }, @@ -1789,11 +1789,16 @@ "type": "string", "maxLength": 2048 }, - "httpsUrl": { + "anyHttpUrl": { "type": "string", "maxLength": 2048, "pattern": "^[Hh][Tt][Tt][Pp][Ss]?://" }, + "secureHttpUrl": { + "type": "string", + "maxLength": 2048, + "pattern": "^[Hh][Tt][Tt][Pp][Ss]://" + }, "semver": { "type": "string", "maxLength": 256, @@ -1829,7 +1834,7 @@ "description": "Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'." }, "url": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "Initial webview URL." } } @@ -1864,7 +1869,7 @@ "$ref": "#/definitions/extensionAlternateVersionsArray" }, "audienceClaimUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "The url for your extension, used to validate Exchange user identity tokens." }, "appDeeplinks": { @@ -2124,7 +2129,7 @@ "default": false }, "metadataUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/secureHttpUrl", "description": "The full URL of a metadata json file with default locale." }, "enums": { @@ -2238,11 +2243,8 @@ "maxLength": 128 }, "helpUrl": { - "type": "string", - "format": "uri", "description": "URL that provides information about the function. (It is displayed in a task pane.)", - "minLength": 1, - "maxLength": 2048 + "$ref": "#/definitions/secureHttpUrl" }, "parameters": { "type": "array", @@ -2441,11 +2443,11 @@ "additionalProperties": false, "properties": { "shortcutsUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/secureHttpUrl", "description": "The full URL of the JSON file that will contain the keyboard combination configuration on Office application and platform combinations that don't directly support the unified manifest." }, "localizationResourceUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/secureHttpUrl", "description": "The full URL of a file that provides supplemental resource, such as localized strings, for the file specified in the shortcutsUrl attribute." } }, @@ -2892,7 +2894,7 @@ ] }, "url": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "Url to the icon." }, "scale": { @@ -2950,7 +2952,7 @@ ] }, "url": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "Absolute Url to the icon." } }, @@ -3332,7 +3334,7 @@ "maxLength": 250 }, "learnMoreUrl": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "A URL to a page that explains the add-in in detail." } }, @@ -3348,11 +3350,11 @@ "type": "object", "properties": { "page": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "URL of the .html page to be loaded in browser-based runtimes." }, "script": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "URL of the .js script file to be loaded in UI-less runtimes." } }, @@ -3599,7 +3601,7 @@ "description": "Icon size in pixels." }, "url": { - "$ref": "#/definitions/httpsUrl", + "$ref": "#/definitions/anyHttpUrl", "description": "URL for the icon." } },