From 0f091ce1f46f53b80cee7803949c61100cb9ea7e Mon Sep 17 00:00:00 2001 From: Copilot <223556219+Copilot@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:23:28 -0400 Subject: [PATCH 01/15] docs: de-noise search index, rebuild search, add media placeholder system Search was unusable: 84% of the 986 indexed pages were internal engineering notes, 88% of entries had no description, and no page body text was indexed at all, so search was a substring match over noisy titles. - Exclude the ~830 engineering notes under explanation/features and explanation/fixes from the build. They stay in the repo and remain readable on GitHub. Index drops from 986 to 165 entries. - Replace the title-only index with a content-bearing search-index.json and a Lunr-backed search with a /search/ results page, section filters, Ctrl+K, keyboard navigation, and highlighted excerpts. Lunr is vendored locally. - Add a media placeholder system. Screenshot and video slots render a card naming the exact file to create, and resolve automatically once the file is added. Videos link out to a poster card rather than embedding an iframe. - Add per-tab documentation for all 18 admin settings tabs, with settings tables, prerequisites, real procedures, and media placeholders. - Split the 452 KB release notes page into per-series pages, preserving the app-linked /explanation/release_notes/ permalink. - Fix path-scoped Jekyll defaults that used collection names and never applied, which is why every page fell back to a generic Docs section. - Fix a pre-existing desktop layout bug where .docs-main-content combined width 100% with a sidebar margin and overflowed by the sidebar width. - Standardize responsive breakpoints, contain wide tables and code blocks, and add a mobile search sheet. Remove unused jQuery, DataTables, marked, DOMPurify, and split.js. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- docs/.gitignore | 4 + docs/Gemfile | 1 + docs/Gemfile.lock | 5 +- docs/_config.yml | 98 +- docs/_data/app_surface.yml | 640 +++++ docs/_data/media.yml | 91 + docs/_includes/media.html | 155 ++ docs/_includes/sidebar_nav.html | 18 + docs/_layouts/default.html | 16 +- docs/about.md | 1 + docs/admin/agents.md | 155 ++ docs/admin/ai-models.md | 127 + docs/admin/citation.md | 89 + docs/admin/control-center-config.md | 59 + docs/admin/custom-pages.md | 56 + docs/admin/data-management.md | 175 ++ docs/admin/file-sync.md | 107 + docs/admin/general.md | 120 + docs/admin/governance.md | 91 + docs/admin/index.md | 39 + docs/admin/latest-features.md | 71 + docs/admin/logging.md | 91 + docs/admin/safety.md | 102 + docs/admin/scale.md | 135 ++ docs/admin/search-extract.md | 203 ++ docs/admin/security.md | 92 + docs/admin/send-feedback.md | 61 + docs/admin/workspace-identities.md | 53 + docs/admin/workspaces.md | 145 ++ docs/admin_configuration.md | 3 +- docs/application_scaling.md | 1 + docs/application_workflows.md | 1 + docs/assets/css/docs-media.scss | 327 +++ docs/assets/css/docs-search.scss | 177 ++ docs/assets/css/main.scss | 292 ++- docs/assets/js/main.js | 205 -- docs/assets/js/media.js | 140 ++ docs/assets/js/search.js | 650 ++++++ docs/assets/js/sidebar.js | 115 +- docs/assets/js/vendor/lunr-2.3.9/LICENSE | 19 + docs/assets/js/vendor/lunr-2.3.9/lunr.min.js | 6 + docs/assets/vendor/bootstrap-5.3.0/LICENSE | 21 + .../bootstrap-5.3.0/bootstrap.bundle.min.js | 7 + .../bootstrap.bundle.min.js.map | 1 + .../vendor/bootstrap-5.3.0/bootstrap.min.css | 6 + .../bootstrap-5.3.0/bootstrap.min.css.map | 1 + .../bootstrap-icons.css | 2078 +++++++++++++++++ .../fonts/bootstrap-icons.woff | Bin 0 -> 176032 bytes .../fonts/bootstrap-icons.woff2 | Bin 0 -> 130396 bytes docs/contributing/media-status.md | 148 ++ docs/demos.md | 3 +- .../release-notes/earlier-releases.md | 544 +++++ docs/explanation/release-notes/index.md | 446 ++++ docs/explanation/release-notes/v0.229.md | 469 ++++ docs/explanation/release-notes/v0.235.md | 393 ++++ docs/explanation/release-notes/v0.237.md | 331 +++ docs/explanation/release-notes/v0.239.md | 148 ++ docs/explanation/release-notes/v0.241.md | 552 +++++ .../release-notes/v0.250-part-1.md | 530 +++++ .../release-notes/v0.250-part-2.md | 559 +++++ .../release-notes/v0.250-part-3.md | 1092 +++++++++ docs/explanation/release_notes.md | 2 +- docs/explanation/scenarios/agents/index.md | 9 +- docs/explanation/scenarios/index.md | 9 +- .../explanation/scenarios/workspaces/index.md | 9 +- docs/external_apps_overview.md | 1 + docs/search-index.json | 57 + docs/search.json | 17 - docs/search.md | 34 + docs/setup_instructions_manual.md | 1 + docs/setup_instructions_special.md | 1 + scripts/build_docs_inventory.py | 510 ++++ scripts/build_release_notes_pages.py | 421 ++++ ui_tests/test_docs_site_responsive.js | 320 +++ 74 files changed, 13313 insertions(+), 343 deletions(-) create mode 100644 docs/_data/app_surface.yml create mode 100644 docs/_data/media.yml create mode 100644 docs/_includes/media.html create mode 100644 docs/admin/agents.md create mode 100644 docs/admin/ai-models.md create mode 100644 docs/admin/citation.md create mode 100644 docs/admin/control-center-config.md create mode 100644 docs/admin/custom-pages.md create mode 100644 docs/admin/data-management.md create mode 100644 docs/admin/file-sync.md create mode 100644 docs/admin/general.md create mode 100644 docs/admin/governance.md create mode 100644 docs/admin/index.md create mode 100644 docs/admin/latest-features.md create mode 100644 docs/admin/logging.md create mode 100644 docs/admin/safety.md create mode 100644 docs/admin/scale.md create mode 100644 docs/admin/search-extract.md create mode 100644 docs/admin/security.md create mode 100644 docs/admin/send-feedback.md create mode 100644 docs/admin/workspace-identities.md create mode 100644 docs/admin/workspaces.md create mode 100644 docs/assets/css/docs-media.scss create mode 100644 docs/assets/css/docs-search.scss create mode 100644 docs/assets/js/media.js create mode 100644 docs/assets/js/search.js create mode 100644 docs/assets/js/vendor/lunr-2.3.9/LICENSE create mode 100644 docs/assets/js/vendor/lunr-2.3.9/lunr.min.js create mode 100644 docs/assets/vendor/bootstrap-5.3.0/LICENSE create mode 100644 docs/assets/vendor/bootstrap-5.3.0/bootstrap.bundle.min.js create mode 100644 docs/assets/vendor/bootstrap-5.3.0/bootstrap.bundle.min.js.map create mode 100644 docs/assets/vendor/bootstrap-5.3.0/bootstrap.min.css create mode 100644 docs/assets/vendor/bootstrap-5.3.0/bootstrap.min.css.map create mode 100644 docs/assets/vendor/bootstrap-icons-1.11.3/bootstrap-icons.css create mode 100644 docs/assets/vendor/bootstrap-icons-1.11.3/fonts/bootstrap-icons.woff create mode 100644 docs/assets/vendor/bootstrap-icons-1.11.3/fonts/bootstrap-icons.woff2 create mode 100644 docs/contributing/media-status.md create mode 100644 docs/explanation/release-notes/earlier-releases.md create mode 100644 docs/explanation/release-notes/index.md create mode 100644 docs/explanation/release-notes/v0.229.md create mode 100644 docs/explanation/release-notes/v0.235.md create mode 100644 docs/explanation/release-notes/v0.237.md create mode 100644 docs/explanation/release-notes/v0.239.md create mode 100644 docs/explanation/release-notes/v0.241.md create mode 100644 docs/explanation/release-notes/v0.250-part-1.md create mode 100644 docs/explanation/release-notes/v0.250-part-2.md create mode 100644 docs/explanation/release-notes/v0.250-part-3.md create mode 100644 docs/search-index.json delete mode 100644 docs/search.json create mode 100644 docs/search.md create mode 100644 scripts/build_docs_inventory.py create mode 100644 scripts/build_release_notes_pages.py create mode 100644 ui_tests/test_docs_site_responsive.js diff --git a/docs/.gitignore b/docs/.gitignore index 45c150536..3514b703f 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -1,3 +1,7 @@ _site .sass-cache .jekyll-metadata + +node_modules/ +package.json +package-lock.json diff --git a/docs/Gemfile b/docs/Gemfile index 5ba092f7a..da45ab7f0 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -16,6 +16,7 @@ group :jekyll_plugins do gem "jekyll-seo-tag" gem "jekyll-sitemap" gem "jekyll-relative-links" + gem "jekyll-redirect-from" gem "jekyll-optional-front-matter" gem "jekyll-readme-index" gem "jekyll-titles-from-headings" diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index c2999684c..9268a2c4c 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -93,7 +93,7 @@ GEM liquid (= 4.0.4) mercenary (~> 0.3) minima (= 2.5.1) - nokogiri (>= 1.19.3, < 2.0) + nokogiri (>= 1.16.2, < 2.0) rouge (= 3.30.0) terminal-table (~> 1.4) webrick (~> 1.8) @@ -244,8 +244,6 @@ GEM racc (~> 1.4) nokogiri (1.19.4-x86_64-linux-gnu) racc (~> 1.4) - nokogiri (1.19.3-x86_64-linux-gnu) - racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) sawyer (~> 0.9) @@ -291,6 +289,7 @@ DEPENDENCIES jekyll-livereload jekyll-optional-front-matter jekyll-readme-index + jekyll-redirect-from jekyll-relative-links jekyll-seo-tag jekyll-sitemap diff --git a/docs/_config.yml b/docs/_config.yml index 8caf45a23..da46ad957 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -18,6 +18,7 @@ plugins: - jekyll-seo-tag - jekyll-sitemap - jekyll-relative-links + - jekyll-redirect-from # Permalinks (pretty URLs) permalink: pretty @@ -179,21 +180,21 @@ sass: style: compressed # Collections +# +# The previous config declared tutorials/how-to/reference/explanation collections, +# but no matching _tutorials/_how-to/_reference/_explanation directories exist, so +# they were always empty. Those pages are ordinary pages under docs/ and are given +# their section labels through path-scoped defaults below. collections: - tutorials: + features: output: true - permalink: /:collection/:name/ - how-to: - output: true - permalink: /:collection/:name/ - reference: - output: true - permalink: /:collection/:name/ - explanation: - output: true - permalink: /:collection/:name/ + permalink: /features/:name/ # Default layouts and settings +# +# Path-scoped defaults must use type "pages" for regular directories. The previous +# config used the collection label as the type, so these defaults never applied and +# every page fell back to the generic "Docs" section in search results. defaults: - scope: path: "" @@ -208,35 +209,69 @@ defaults: layout: page show_nav: true - scope: - path: "tutorials" - type: "tutorials" + path: "start" + type: "pages" values: - layout: page - section: "tutorials" - show_nav: true + section: "Start" - scope: - path: "how-to" - type: "how-to" + path: "guides" + type: "pages" values: - layout: page - section: "how-to" - show_nav: true + section: "Guides" + - scope: + path: "admin" + type: "pages" + values: + section: "Administration" + - scope: + path: "deploy" + type: "pages" + values: + section: "Deploy & Operate" - scope: path: "reference" - type: "reference" + type: "pages" values: - layout: page - section: "reference" - show_nav: true + section: "Reference" - scope: path: "explanation" - type: "explanation" + type: "pages" values: - layout: page - section: "explanation" + section: "Explanation" + - scope: + path: "latest-release" + type: "pages" + values: + section: "Release Highlights" + - scope: + path: "tutorials" + type: "pages" + values: + section: "Guides" + - scope: + path: "how-to" + type: "pages" + values: + section: "Guides" + - scope: + path: "troubleshooting" + type: "pages" + values: + section: "Deploy & Operate" + - scope: + path: "" + type: "features" + values: + layout: feature + section: "Features" show_nav: true # Exclude from processing +# +# The explanation/features and explanation/fixes trees hold ~830 internal +# engineering notes. They stay in the repository and remain readable on GitHub, +# but publishing them made up 84% of the search index and buried real docs. +# See docs/explanation/features/DOCUMENTATION_SITE_REDESIGN.md. exclude: - _site/ - .sass-cache/ @@ -248,4 +283,9 @@ exclude: - vendor/bundle/ - vendor/cache/ - vendor/gems/ - - vendor/ruby/ \ No newline at end of file + - vendor/ruby/ + - explanation/features/ + - explanation/fixes/ + - explanation/release_notes.md + - README-THEME.md + - theme-documentation.md \ No newline at end of file diff --git a/docs/_data/app_surface.yml b/docs/_data/app_surface.yml new file mode 100644 index 000000000..c342954d0 --- /dev/null +++ b/docs/_data/app_surface.yml @@ -0,0 +1,640 @@ +# Generated by scripts\build_docs_inventory.py -- do not edit by hand. +# Regenerate with: python scripts\build_docs_inventory.py +generated_from_version: "0.250.229" +counts: + capabilities: 111 + admin_tabs: 18 + actions: 27 + chat_controls: 47 + sub_elements: 3 + app_pages: 28 + feature_surfaces: 21 +capabilities: +- key: enable_agent_template_gallery + default: true +- key: enable_ai_notice + default: false +- key: enable_ai_search_apim + default: false +- key: enable_analysis_deliverable_contract_telemetry + default: false +- key: enable_app_maintenance + default: true +- key: enable_appinsights_global_logging + default: false +- key: enable_audio_file_support + default: false +- key: enable_chat_completion_audio_cues + default: false +- key: enable_chat_file_uploads + default: true +- key: enable_chunk_size_override + default: false +- key: enable_collaborative_conversations + default: true +- key: enable_content_safety + default: false +- key: enable_content_safety_apim + default: false +- key: enable_conversation_archiving + default: false +- key: enable_conversation_cache + default: true +- key: enable_conversation_contents_drawer + default: true +- key: enable_cross_format_compare + default: false +- key: enable_cross_format_compare_one_to_many + default: false +- key: enable_custom_pages + default: false +- key: enable_dai_debug + default: false +- key: enable_dark_mode_default + default: false +- key: enable_debug_logging + default: false +- key: enable_deep_source_review + default: true +- key: enable_default_embedding_model_plugin + default: false +- key: enable_desktop_notifications + default: false +- key: enable_document_access_index_cache + default: true +- key: enable_document_access_index_container + default: true +- key: enable_document_access_index_reads + default: true +- key: enable_document_access_index_shadow_validation + default: false +- key: enable_document_access_index_write_through + default: true +- key: enable_document_classification + default: false +- key: enable_document_intelligence_apim + default: false +- key: enable_document_intelligence_formula_extraction + default: false +- key: enable_embedding_apim + default: false +- key: enable_enhanced_citations + default: false +- key: enable_enhanced_citations_mount + default: false +- key: enable_enhanced_extraction + default: false +- key: enable_external_healthcheck + default: false +- key: enable_external_links + default: false +- key: enable_extract_meta_data + default: false +- key: enable_fact_memory_plugin + default: true +- key: enable_file_processing_logs + default: true +- key: enable_file_sharing + default: false +- key: enable_file_sync + default: false +- key: enable_file_sync_group + default: true +- key: enable_file_sync_personal + default: true +- key: enable_file_sync_public + default: false +- key: enable_front_door + default: false +- key: enable_gpt_apim + default: false +- key: enable_group_creation + default: true +- key: enable_group_workspaces + default: true +- key: enable_http_plugin + default: true +- key: enable_idle_timeout + default: false +- key: enable_image_gen_apim + default: false +- key: enable_image_generation + default: false +- key: enable_key_vault_secret_expiration_reminders + default: false +- key: enable_key_vault_secret_storage + default: false +- key: enable_left_nav_default + default: true +- key: enable_math_plugin + default: true +- key: enable_mcp_destination_governance + default: false +- key: enable_mixed_source_chat_search + default: false +- key: enable_mixed_source_conversation_continuity + default: false +- key: enable_mixed_source_development_telemetry + default: false +- key: enable_mixed_source_manifest + default: false +- key: enable_mixed_source_relevance_candidates + default: false +- key: enable_multi_agent_orchestration + default: false +- key: enable_multi_model_endpoints + default: false +- key: enable_multimodal_vision + default: false +- key: enable_no_auth_external_healthcheck + default: false +- key: enable_office_embedded_image_analysis + default: true +- key: enable_public_workspaces + default: false +- key: enable_redis_cache + default: false +- key: enable_retention_policy_group + default: false +- key: enable_retention_policy_personal + default: false +- key: enable_retention_policy_public + default: false +- key: enable_search_result_caching + default: true +- key: enable_semantic_kernel + default: false +- key: enable_source_review + default: false +- key: enable_startup_app_maintenance + default: true +- key: enable_startup_document_access_index_backfill + default: true +- key: enable_summarize_content_history_beyond_conversation_history_limit + default: false +- key: enable_summarize_content_history_for_search + default: false +- key: enable_support_latest_feature_documentation_links + default: false +- key: enable_support_latest_features + default: true +- key: enable_support_menu + default: false +- key: enable_support_send_feedback + default: true +- key: enable_tabular_analyze_durable_preflight + default: true +- key: enable_tabular_compact_response_protocol + default: false +- key: enable_tabular_completion_driven_checkpointing + default: true +- key: enable_tabular_durable_run_confirmation + default: true +- key: enable_tabular_generation_balanced_batches + default: true +- key: enable_tabular_generation_plan + default: true +- key: enable_tabular_hierarchical_analysis + default: true +- key: enable_tabular_independent_batch_retries + default: false +- key: enable_tabular_mixed_deferred_composition_planning + default: false +- key: enable_tabular_multifile_execution_unit_planning + default: false +- key: enable_tabular_parity_contract_telemetry + default: false +- key: enable_tabular_processing_plugin + default: false +- key: enable_tabular_rolling_worker_pool + default: false +- key: enable_tabular_search_shared_preflight + default: true +- key: enable_terms_of_use + default: false +- key: enable_text_plugin + default: true +- key: enable_thoughts + default: true +- key: enable_time_plugin + default: true +- key: enable_url_access + default: false +- key: enable_user_feedback + default: true +- key: enable_user_workspace + default: true +- key: enable_video_file_support + default: false +- key: enable_wait_plugin + default: true +- key: enable_web_search + default: false +- key: enable_web_search_user_notice + default: false +admin_tabs: +- id: agents + tab_element_id: agents-tab + label: Agents +- id: ai-models + tab_element_id: ai-models-tab + label: AI Models +- id: citation + tab_element_id: citation-tab + label: Citations +- id: control-center-config + tab_element_id: control-center-config-tab + label: Control Center +- id: custom-pages + tab_element_id: custom-pages-tab + label: Custom Pages +- id: data-management + tab_element_id: data-management-tab + label: Backup, Migrate & Restore +- id: file-sync + tab_element_id: file-sync-tab + label: File Sync +- id: general + tab_element_id: general-tab + label: General +- id: governance + tab_element_id: governance-tab + label: Governance +- id: latest-features + tab_element_id: latest-features-tab + label: Latest Features New +- id: logging + tab_element_id: logging-tab + label: Logging +- id: safety + tab_element_id: safety-tab + label: Safety +- id: scale + tab_element_id: scale-tab + label: Scale +- id: search-extract + tab_element_id: search-extract-tab + label: Search and Extract +- id: security + tab_element_id: security-tab + label: Security +- id: send-feedback + tab_element_id: send-feedback-tab + label: Send Feedback +- id: workspace-identities + tab_element_id: workspace-identities-tab + label: Global Identities +- id: workspaces + tab_element_id: workspaces-tab + label: Workspaces +actions: +- slug: azure-maps-openlayers + module: azure_maps_openlayers_plugin.py + class_name: AzureMapsOpenLayersPlugin +- slug: blob-storage + module: blob_storage_plugin.py + class_name: BlobStoragePlugin + summary: Container-scoped Azure Blob Storage plugin with capability-gated operations. +- slug: chart + module: chart_plugin.py + class_name: ChartPlugin +- slug: cosmos-query + module: cosmos_query_plugin.py + class_name: CosmosQueryPlugin + summary: Read-only Azure Cosmos DB for NoSQL query plugin. +- slug: databricks + module: databricks_plugin.py + class_name: DatabricksPlugin + summary: Databricks SQL Statement Execution plugin for Azure Commercial. +- slug: databricks-table + module: databricks_table_plugin.py + class_name: DatabricksTablePlugin + summary: Compatibility wrapper for legacy databricks_table manifests. +- slug: document-search + module: document_search_plugin.py + class_name: DocumentSearchPlugin +- slug: embedding-model + module: embedding_model_plugin.py + class_name: EmbeddingModelPlugin +- slug: fact-memory + module: fact_memory_plugin.py + class_name: FactMemoryPlugin +- slug: log-analytics + module: log_analytics_plugin.py + class_name: LogAnalyticsPlugin +- slug: math + module: math_plugin.py + class_name: MathPlugin + summary: 'Description: MathPlugin provides a set of functions to make Math calculations.' +- slug: mcp + module: mcp_plugin.py + class_name: McpPlugin + summary: Model Context Protocol action descriptor. +- slug: msgraph + module: msgraph_plugin.py + class_name: MSGraphPlugin +- slug: openapi + module: openapi_plugin.py + class_name: OpenApiPlugin +- slug: queue-storage + module: queue_storage_plugin.py + class_name: QueueStoragePlugin +- slug: rocksdb + module: rocksdb_plugin.py + class_name: RocksDbPlugin + summary: RocksDB key-value plugin backed by a RocksDB HTTP/JSON service. +- slug: simplechat + module: simplechat_plugin.py + class_name: SimpleChatPlugin +- slug: smart-http + module: smart_http_plugin.py + class_name: SmartHttpPlugin + summary: HTTP plugin with intelligent content size management, web scraping optimization, and PDF processing via Document + Intelligence. +- slug: snowflake + module: snowflake_plugin.py + class_name: SnowflakePlugin + summary: Snowflake connector plugin focused on read-only data retrieval. +- slug: sql-query + module: sql_query_plugin.py + class_name: SQLQueryPlugin +- slug: sql-schema + module: sql_schema_plugin.py + class_name: SQLSchemaPlugin +- slug: tableau + module: tableau_plugin.py + class_name: TableauPlugin + summary: Read-only Tableau action plugin built on Tableau Server Client. +- slug: tabular-processing + module: tabular_processing_plugin.py + class_name: TabularProcessingPlugin + summary: Provides data analysis functions on tabular files stored in blob storage. +- slug: text + module: text_plugin.py + class_name: TextPlugin + summary: Text plugin with invocation logging for all kernel functions. +- slug: time + module: time_plugin.py + class_name: TimePlugin + summary: Time plugin with invocation logging for all kernel functions. +- slug: wait + module: wait_plugin.py + class_name: WaitPlugin + summary: Wait plugin with invocation logging for all kernel functions. +- slug: yamcs + module: yamcs_plugin.py + class_name: YamcsPlugin + summary: Yamcs connector plugin focused on read-only telemetry, MDB, and archive retrieval. +chat_controls: +- id: agent-dropdown-button + label: Select an Agent +- id: cancel-recording-btn + label: Cancel Recording +- id: chat-mobile-tools-toggle + label: Tools +- id: chat-tutorial-btn + label: Let us walk you through getting the most out of chat +- id: choose-file-btn + label: Select and automatically upload a file to this conversation (txt, pdf, doc, docm, docx, msg, xlsx, pptx, html, images, + md, json, csv, xml, yaml, yml, log) + enabled_by: + - enable_chat_file_uploads +- id: clearFiltersBtn + label: Clear Filters +- id: clearHistoryBtn + label: Clear History +- id: collaboration-confirm-add-btn + label: Add participant +- id: collaboration-reply-cancel-btn + label: Cancel reply +- id: confirm-delete-conversation-btn + label: Delete Conversation +- id: confirm-fork-conversation-btn + label: Fork conversation Forking... +- id: confirm-scope-lock-toggle-btn +- id: conversation-contents-toggle + label: Open conversation contents +- id: conversation-documents-toggle + label: Open used documents +- id: conversation-info-btn + label: View conversation details +- id: delete-selected-btn + label: Delete selected conversations +- id: document-comparison-edit-btn + label: Edit Compare +- id: document-dropdown-button + label: All Documents +- id: enable-agents-btn + label: Enable Agents + enabled_by: + - enable_semantic_kernel +- id: export-next-btn + label: Next +- id: export-prev-btn + label: Previous +- id: export-selected-btn + label: Export selected conversations +- id: header-scope-lock-btn + label: Scope locked +- id: hide-selected-btn + label: Hide selected conversations +- id: image-generate-btn + label: Generate images with AI + enabled_by: + - enable_image_generation +- id: model-dropdown-button + label: Select a Model +- id: new-conversation-btn + label: Start a new chat +- id: performSearchBtn + label: Search +- id: pin-selected-btn + label: Pin selected conversations +- id: prompt-dropdown-button + label: Select a Prompt... + enabled_by: + - enable_group_workspaces + - enable_public_workspaces + - enable_user_workspace +- id: reasoning-toggle-btn + label: Configure reasoning effort +- id: scope-dropdown-button + label: All +- id: scroll-to-bottom-btn + label: Scroll to latest message +- id: search-documents-btn + label: Search workspaces + enabled_by: + - enable_group_workspaces + - enable_user_workspace +- id: search-prompts-btn + label: Select a saved prompt + enabled_by: + - enable_group_workspaces + - enable_public_workspaces + - enable_semantic_kernel + - enable_user_workspace +- id: search-web-btn + label: Search the web using Bing + enabled_by: + - enable_web_search +- id: searchNextBtn + label: Next +- id: searchPrevBtn + label: Previous +- id: send-btn + label: Send Message +- id: send-recording-btn + label: Send Recording +- id: source-review-btn + label: Deep Research + enabled_by: + - enable_source_review +- id: speech-input-btn + label: Voice Input + enabled_by: + - enable_speech_to_text_input +- id: tags-dropdown-button + label: Loading tags... +- id: tts-autoplay-toggle-btn + label: Auto voice response disabled - click to enable + enabled_by: + - enable_text_to_speech +- id: upload-btn + label: Add to Chat + enabled_by: + - enable_web_search +- id: url-access-btn + label: Review pasted URLs + enabled_by: + - enable_url_access +- id: workflow-activity-btn + label: Open workflow activity view +sub_elements: +- id: document-comparison-edit-btn-label + label: Edit Compare +- id: fork-conversation-button-label + label: Fork conversation +- id: fork-conversation-button-spinner +app_pages: +- template: acceptable_use_policy.html + slug: acceptable-use-policy + route_url: /acceptable_use_policy.html +- template: admin_feedback_review.html + slug: admin-feedback-review + route_url: /admin/feedback_review +- template: admin_safety_violations.html + slug: admin-safety-violations + route_url: /admin/safety_violations +- template: admin_settings.html + slug: admin-settings + route_url: /admin/settings +- template: agents.html + slug: agents + route_url: /agents +- template: approvals.html + slug: approvals + route_url: /approvals +- template: chats.html + slug: chats + route_url: /chats +- template: control_center.html + slug: control-center + route_url: /admin/control-center +- template: custom_page_shell.html + slug: custom-page-shell +- template: group_workspaces.html + slug: group-workspaces + route_url: /group_workspaces +- template: index.html + slug: index + route_url: / +- template: latest_features.html + slug: latest-features + route_url: /support/latest-features +- template: login.html + slug: login + route_url: /login +- template: manage_group.html + slug: manage-group + route_url: /groups/ +- template: manage_public_workspace.html + slug: manage-public-workspace + route_url: /public_workspaces/ +- template: my_feedback.html + slug: my-feedback +- template: my_groups.html + slug: my-groups +- template: my_public_workspaces.html + slug: my-public-workspaces +- template: my_safety_violations.html + slug: my-safety-violations +- template: notifications.html + slug: notifications + route_url: /notifications +- template: profile.html + slug: profile + route_url: /profile +- template: public_directory.html + slug: public-directory + route_url: /public_directory +- template: public_workspace_modals.html + slug: public-workspace-modals +- template: public_workspaces.html + slug: public-workspaces + route_url: /public_workspaces +- template: support_send_feedback.html + slug: support-send-feedback + route_url: /support/send-feedback +- template: terms_of_use.html + slug: terms-of-use + route_url: /terms-of-use +- template: workflow_activity.html + slug: workflow-activity + route_url: /workflow-activity +- template: workspace.html + slug: workspace + route_url: /workspace +feature_surfaces: +- template: _agent_config_info.html + slug: agent-config-info +- template: _agent_examples.html + slug: agent-examples +- template: _agent_examples_modal.html + slug: agent-examples-modal +- template: _agent_modal.html + slug: agent-modal +- template: _control_center_roles_info.html + slug: control-center-roles-info +- template: _custom_pages_drawer.html + slug: custom-pages-drawer +- template: _deep_research_info.html + slug: deep-research-info +- template: _front_door_info.html + slug: front-door-info +- template: _governance_info.html + slug: governance-info +- template: _health_check_info.html + slug: health-check-info +- template: _key_vault_info.html + slug: key-vault-info +- template: _multiendpoint_modal.html + slug: multiendpoint-modal +- template: _plugin_modal.html + slug: plugin-modal +- template: _semantic_search_health_warning.html + slug: semantic-search-health-warning +- template: _sidebar_nav.html + slug: sidebar-nav +- template: _sidebar_short_nav.html + slug: sidebar-short-nav +- template: _speech_service_info.html + slug: speech-service-info +- template: _supported_file_types_modal.html + slug: supported-file-types-modal +- template: _top_nav.html + slug: top-nav +- template: _video_indexer_info.html + slug: video-indexer-info +- template: _web_search_foundry_info.html + slug: web-search-foundry-info diff --git a/docs/_data/media.yml b/docs/_data/media.yml new file mode 100644 index 000000000..874113f35 --- /dev/null +++ b/docs/_data/media.yml @@ -0,0 +1,91 @@ +# media.yml +# +# Registry of every screenshot and video slot in the documentation site. +# +# --------------------------------------------------------------------------- +# HOW TO ADD A SCREENSHOT OR VIDEO +# --------------------------------------------------------------------------- +# +# You do NOT need to edit this file to add an image. Pages render a visible +# placeholder card telling you the exact filename to create. Drop the file at +# that path and the placeholder is replaced automatically on the next build. +# +# 1. Open any docs page that shows a placeholder card. +# 2. The card shows the expected path, for example: +# docs/images/admin/general-tab.png +# 3. Save your screenshot at exactly that path. +# 4. Done. No YAML edit, no code change. +# +# Register a slot here when you want it tracked on the shot list at +# /contributing/media-status/ so it shows up as an outstanding item until the +# asset exists. +# +# --------------------------------------------------------------------------- +# ENTRY SCHEMA +# --------------------------------------------------------------------------- +# +# : +# type: image | video (required) +# title: Short human title (required) +# file: path under docs/images/, e.g. "admin/general-tab.png" +# Required for type: image. +# alt: Accessible description of the image. Required for type: image. +# Describe what the reader learns from it, not "screenshot of X". +# caption: Optional caption rendered under the figure. +# capture: What the person taking the screenshot or recording the video +# should show. This text appears inside the placeholder card, so +# write it as an instruction. Strongly recommended. +# width: Intrinsic pixel width (recommended, prevents layout shift) +# height: Intrinsic pixel height (recommended, prevents layout shift) +# group: Grouping key for the shot list, e.g. "admin", "guides" +# +# Video-only fields: +# poster: path under docs/images/, e.g. "video-posters/admin-deploy.png" +# url: YouTube or Microsoft Stream watch URL. Omit while the video is +# still planned; the card renders a "planned" state instead. +# duration: Display string such as "8:24" +# +# --------------------------------------------------------------------------- +# CONVENTIONS +# --------------------------------------------------------------------------- +# +# Images live under docs/images//.png +# Video posters live under docs/images/video-posters/.png +# +# Videos are never embedded as iframes and never committed as MP4 files. They +# render as a local poster card that links out to YouTube or Microsoft Stream, +# which keeps the repository small and avoids third-party embed scripts. +# +# Recommended capture width for UI screenshots is 1600px at 2x DPI. Crop to the +# relevant region rather than capturing the whole desktop. +# +# --------------------------------------------------------------------------- + +# Seed entries. The scaffolding scripts append to this file as sections are +# built out; these establish the pattern and prove the placeholder rendering. + +admin-settings-overview: + type: image + title: "Admin Settings landing view" + file: "admin/admin-settings-overview.png" + alt: "The Admin Settings page showing the tab strip across the top of the settings panel." + capture: "Open Admin Settings and capture the full tab strip so every tab name is legible." + group: admin + width: 1600 + height: 900 + +admin-video-series: + type: video + title: "Admin video series: deploy, configure, update, operate" + poster: "video-posters/admin-series.png" + capture: "Recording planned. Cover deployment, first-run configuration, upgrading, and a walkthrough of each Admin Settings tab." + group: admin + duration: "" + +user-video-agents-actions: + type: video + title: "User video: building agents and actions" + poster: "video-posters/user-agents-actions.png" + capture: "Recording planned. Cover what an action is and why you would use one, then build an agent that calls it end to end." + group: guides + duration: "" diff --git a/docs/_includes/media.html b/docs/_includes/media.html new file mode 100644 index 000000000..6ab52f4f3 --- /dev/null +++ b/docs/_includes/media.html @@ -0,0 +1,155 @@ +{%- comment -%} +media.html — renders a screenshot or video slot. + +If the underlying asset file does not exist yet, this renders a visible +placeholder card naming the exact file to create. When someone drops the file +at that path, the placeholder is replaced automatically on the next build. No +YAML edit and no code change are required to fill a slot. + +Usage (registered slot, tracked on the shot list): + {% include media.html id="admin-general-tab" %} + +Usage (ad-hoc slot, no manifest entry needed): + {% include media.html src="guides/create-action-step-3.png" + alt="The action editor with the endpoint field filled in." + capture="Show the action editor after the endpoint is set." %} + +Usage (video): + {% include media.html id="admin-video-series" %} + +Parameters (inline mode mirrors the manifest schema in _data/media.yml): + id, src, alt, title, caption, capture, type, width, height, + poster, url, duration +{%- endcomment -%} + +{%- assign entry = nil -%} +{%- if include.id -%} + {%- assign entry = site.data.media[include.id] -%} +{%- endif -%} + +{%- comment -%} Resolve every field: explicit include parameter wins over the manifest. {%- endcomment -%} +{%- assign media_type = include.type | default: entry.type | default: 'image' -%} +{%- assign media_title = include.title | default: entry.title -%} +{%- assign media_file = include.src | default: entry.file -%} +{%- assign media_alt = include.alt | default: entry.alt -%} +{%- assign media_caption = include.caption | default: entry.caption -%} +{%- assign media_capture = include.capture | default: entry.capture -%} +{%- assign media_width = include.width | default: entry.width -%} +{%- assign media_height = include.height | default: entry.height -%} +{%- assign media_poster = include.poster | default: entry.poster -%} +{%- assign media_url = include.url | default: entry.url -%} +{%- assign media_duration = include.duration | default: entry.duration -%} + +{%- if include.id and entry == nil -%} + {%- comment -%} Unknown slot id. Surface it loudly rather than rendering nothing. {%- endcomment -%} +
+

Unknown media slot {{ include.id }}

+

No entry with this id exists in docs/_data/media.yml. Check the spelling, or add the entry.

+
+{%- elsif media_type == 'video' -%} + + {%- assign poster_path = '' -%} + {%- assign poster_asset = nil -%} + {%- if media_poster -%} + {%- assign poster_path = '/images/' | append: media_poster -%} + {%- assign poster_asset = site.static_files | where: 'path', poster_path | first -%} + {%- endif -%} + + {%- comment -%} Label the destination so readers know where the link goes before clicking. {%- endcomment -%} + {%- assign video_host = 'the video' -%} + {%- if media_url contains 'youtube.com' or media_url contains 'youtu.be' -%} + {%- assign video_host = 'YouTube' -%} + {%- elsif media_url contains 'microsoftstream.com' or media_url contains 'sharepoint.com' or media_url contains 'stream.office.com' -%} + {%- assign video_host = 'Microsoft Stream' -%} + {%- endif -%} + + {%- if media_url and media_url != '' -%} +
+ + + {%- if poster_asset -%} + + {%- else -%} + + {%- endif -%} + + + + {{ media_title | default: 'Watch the walkthrough' }} + + Watch on {{ video_host }}{% if media_duration and media_duration != '' %} · {{ media_duration }}{% endif %} + + + + + {%- if media_caption -%}
{{ media_caption }}
{%- endif -%} +
+ {%- else -%} +
+
+ +

Video planned

+

{{ media_title | default: 'Walkthrough video' }}

+ {%- if media_capture -%}

{{ media_capture }}

{%- endif -%} +
+

To publish this video:

+
    +
  1. Upload the recording to YouTube or Microsoft Stream.
  2. + {%- if media_poster -%} +
  3. Save a poster frame as docs/images/{{ media_poster }}.
  4. + {%- endif -%} +
  5. Add the watch URL to {{ include.id | default: 'this slot' }} in docs/_data/media.yml.
  6. +
+
+
+
+ {%- endif -%} + +{%- else -%} + + {%- comment -%} Image slot. Look the file up in site.static_files so the placeholder self-resolves. {%- endcomment -%} + {%- assign image_path = '/images/' | append: media_file -%} + {%- assign image_asset = site.static_files | where: 'path', image_path | first -%} + + {%- if image_asset and media_file -%} +
+ + {%- if media_caption -%}
{{ media_caption }}
{%- endif -%} +
+ {%- else -%} +
+
+ +

Screenshot needed

+ {%- if media_title -%}

{{ media_title }}

{%- endif -%} + {%- if media_capture -%}

{{ media_capture }}

{%- endif -%} + {%- if media_file -%} +

Save as docs/images/{{ media_file }}

+

Drop the file at that path and it replaces this card automatically. No other change needed.

+ {%- else -%} +

This slot has no file set. Add one in docs/_data/media.yml.

+ {%- endif -%} +
+
+ {%- endif -%} + +{%- endif -%} diff --git a/docs/_includes/sidebar_nav.html b/docs/_includes/sidebar_nav.html index 3a29a09ca..c9af9f1dc 100644 --- a/docs/_includes/sidebar_nav.html +++ b/docs/_includes/sidebar_nav.html @@ -35,6 +35,9 @@
+ {% if site.github.repository_url %} @@ -48,6 +51,21 @@
+{% comment %} Full-screen search for small viewports. The inline top bar search is hidden below the md breakpoint. {% endcomment %} + +