Simple Chat Updates & Release Notes
10 updates curated from 1 source by the Releasebot Team. Last updated: Oct 14, 2026
- Sep 21, 2026
- Date parsed from source:Sep 21, 2026
- First seen by Releasebot:Oct 14, 2026
v0.261.027
Simple Chat expands connectivity with custom and on-premises model endpoints, adds schema-validated XML generation, and improves document processing, workspace collaboration, and settings consistency across workers. The release also adds Azure Managed Redis support and fixes reliability issues.
This release expands model connectivity, adds schema-validated XML generation, and improves document processing, workspace collaboration, and settings consistency across application workers.
Highlights
Custom model endpoints
- Connect to custom and on-premises model endpoints, including Google Gemini through its OpenAI-compatible API.
- Configure API key headers, bearer tokens, OAuth2 client credentials, and mTLS client certificates.
- Support internal certificate authorities and administrator-controlled access to private endpoints.
- Improve endpoint URL handling, connection diagnostics, and model capability detection.
- Deliver completed tool-calling responses progressively and improve streaming token-usage reporting.
XSD ingestion and schema-validated XML
- Upload XSD schemas through supported workspace, chat, and File Sync paths.
- Use a selected, ready schema to guide XML generation in Chat, Analyze, agents, and workflows.
- Validate generated XML against the selected schema before publication.
- Track schema readiness, dependencies, and diagnostics for unsupported constructs.
Redis and multi-worker consistency
- Add Azure Managed Redis support alongside Azure Cache for Redis.
- Apply Redis cache settings during post-deployment configuration.
- Replace worker-local admin settings snapshots with shared settings reads.
- Add conflict detection for settings updates and improve Redis Explorer compatibility.
Fixes and maintenance
- Improve reliability when uploading many documents.
- Fix approval visibility for files shared to personal and group workspaces.
- Correct group-scoped conversation invitation storage.
- Fix logout behavior in development and App Service Easy Auth configurations.
- Resolve settings-cache import cycles affecting application startup.
- Correct Microsoft Graph permission IDs in Entra app registration.
- Fix Docker build issues and update dependencies and GitHub Actions workflows.
- Harden custom endpoint request validation and XSD upload error responses.
Upgrade notes
- Application version: 0.261.027
- Deployer version: 1.0.30
- Deploy web workers and the scheduler together to keep settings behavior consistent.
- When Redis is configured, settings saves are rejected if Redis is unavailable. Stale admin forms require a reload before saving again.
- XSD ingestion requires Enhanced Citations storage. Schema-governed generation supports the documented XSD subset; unsupported constructs are retained with diagnostics but cannot govern generation.
- Review custom endpoint authentication, certificate, and outbound-access settings before enabling new providers.
Details
- Detailed release notes
- Release promotion PR #1487
- Sep 8, 2026
- Date parsed from source:Sep 8, 2026
- First seen by Releasebot:Oct 14, 2026
v0.260.002
Simple Chat improves Markdown embedding limits, governance tab initialization, and inbound MCP disabled-state guidance.
What's Changed
- Bound Markdown chunks to the embedding token limit by Paul Lizer (@paullizer) in #1361
- Fix governance split tab initialization by Bionic711 in #1363
- Show inbound MCP disabled UI guidance by Bionic711 in #1365
- Promote Development to Staging for v0.261.002 by Bionic711 in #1366
- Promote Staging to main for v0.261.002 by Bionic711 in #1367
- Docs/1371 link integrity and web search by Paul Lizer (@paullizer) in #1373
- Documentation Updates by Paul Lizer (@paullizer) in #1374
- Documentation Updates by Paul Lizer (@paullizer) in #1375
Full Changelog: v0.261.001...v0.260.002
Original source All of your release notes in one feed
Join Releasebot and get updates from Microsoft and hundreds of other software products.
- Aug 26, 2026
- Date parsed from source:Aug 26, 2026
- First seen by Releasebot:Oct 14, 2026
v0.261.001
Simple Chat adds user and admin tiers, a generated documentation catalog, and real screenshots. Admins can enable fact and instruction memories without agents or actions and customize Markdown-enabled rate-limit messages, while a Backup & Recovery save-button issue is fixed.
What's Changed
- v0.261.001 Latest Features: user and admin tiers, generated docs catalog, real screenshots by Paul Lizer (@paullizer) in #1351
- Fix Backup & Recovery save button never enabling by Paul Lizer (@paullizer) in #1355
- Enable fact and instruction memories from Chat admin settings without agents or actions by Paul Lizer (@paullizer) in #1356
- Make the rate limiting (429) response message admin-configurable with Markdown support by Paul Lizer (@paullizer) in #1357
- Development by Paul Lizer (@paullizer) in #1358
- v0.261.001 by Paul Lizer (@paullizer) in #1359
Full Changelog: v0.260.028...v0.261.001
Original source - Aug 21, 2026
- Date parsed from source:Aug 21, 2026
- First seen by Releasebot:Oct 14, 2026
v0.260.028
Simple Chat releases broad upgrades to document and tabular analysis, mixed-source chat, and generated exports, alongside more capable workflows, backup and restore tools, collaboration features, and a redesigned admin experience. The update also improves accessibility, security, and reliability.
What's Changed
- Add GitHub issue creation prompt by Paul Lizer (@paullizer) in #939
- Feature/performanceimprovement1 by Bionic711 in #981
- Fix admin settings save 500 error (v0.250.005) by Chad Palmer (@chadpalmer) in #982
- Improve chat scroll behavior and 508 usability by Chad Palmer (@chadpalmer) in #983
- Add malicious PR security review workflow by Paul Lizer (@paullizer) in #984
- Bump Dependabot-managed dependencies by Paul Lizer (@paullizer) in #985
- Fix multi-endpoint Vision model menu and test connection by Chad Palmer (@chadpalmer) in #986
- Fix audio runtime support and workspace guidance by Paul Lizer (@paullizer) in #997
- update-app-polling - Fix anonymous notification polling 401 spam. by Chad Palmer (@chadpalmer) in #1002
- Implement Cosmos performance optimization, DAI, Redis cache, and maintenance tooling by Bionic711 in #1005
- Add admin Cosmos DB JSON document query and editor by Bionic711 in #1007
- Fix Control Center left nav endpoint check by Bionic711 in #1011
- Add optional Terms of Use acceptance gate by Bionic711 in #1012
- Add versioned Latest Features navigation hide preference by Bionic711 in #1051
- Phase 1: add authorized mixed-source manifest contracts by Paul Lizer (@paullizer) in #1064
- Phase 2: honor explicit mixed-source Chat selections by Paul Lizer (@paullizer) in #1065
- Fix CSV artifacts for non-tabular documents by Paul Lizer (@paullizer) in #1067
- Phase 3: mixed-source combined Analyze by Paul Lizer (@paullizer) in #1068
- Phase 4: cross-format Compare orchestration by Paul Lizer (@paullizer) in #1069
- Phase 5: preserve mixed-source context across follow-up turns by Paul Lizer (@paullizer) in #1070
- Harden mixed-source orchestration and CSV exports by Paul Lizer (@paullizer) in #1074
- Add universal CSV generation across response paths by Paul Lizer (@paullizer) in #1075
- Add generated file export framework by Paul Lizer (@paullizer) in #1076
- feat: configurable Content Safety violation messages by Paul Lizer (@paullizer) in #1079
- feat: add active workflow cancellation by Paul Lizer (@paullizer) in #1080
- Generalize workflows for document-free automation by Paul Lizer (@paullizer) in #1083
- Add task-level model and agent selection to workflows by Paul Lizer (@paullizer) in #1085
- Fix GPT 5.6+ Multi-Modal Vision model selection by Paul Lizer (@paullizer) in #1087
- Add Azure Blob Storage File Sync by Paul Lizer (@paullizer) in #1088
- Complete resilient Data Management migrations by Paul Lizer (@paullizer) in #1101
- Fix selected public workspace prompt migration by Paul Lizer (@paullizer) in #1102
- Fix whole sidebar scrolling by Paul Lizer (@paullizer) in #1103
- Add accessible font size preferences by Paul Lizer (@paullizer) in #1104
- Fix Cosmos container startup race during local Docker boot by Chad Palmer (@chadpalmer) in #1081
- Make Data Management backup jobs durable, cancellable, and overlap-safe by Paul Lizer (@paullizer) in #1105
- Add Fork conversation action to assistant messages by Paul Lizer (@paullizer) in #1106
- Add conversation contents drawer by Paul Lizer (@paullizer) in #1107
- Add file processing log cleanup by Paul Lizer (@paullizer) in #1108
- Add admin feedback and safety record lifecycle by Paul Lizer (@paullizer) in #1110
- Accelerate Cosmos DB backups with bounded parallelism by Paul Lizer (@paullizer) in #1109
- Add governed SimpleChat MCP platform by Bionic711 in #1111
- Ground each chat turn with conversation metadata by Paul Lizer (@paullizer) in #1113
- Fix conversation fork workspace context by Paul Lizer (@paullizer) in #1114
- Accelerate exhaustive Azure AI Search backups by Paul Lizer (@paullizer) in #1115
- Fix application-wide log event metadata contract by Paul Lizer (@paullizer) in #1116
- Add audio export for chat messages by Paul Lizer (@paullizer) in #1117
- Add external link ordering controls by Paul Lizer (@paullizer) in #1120
- Add configurable chat AI notice by Paul Lizer (@paullizer) in #1118
- Replace browser alerts with toast notifications by Paul Lizer (@paullizer) in #1119
- Add overnight Control Center stats refresh by Paul Lizer (@paullizer) in #1121
- Add desktop conversation notifications by Paul Lizer (@paullizer) in #1122
- Accelerate source blob backups with resumable transfers by Paul Lizer (@paullizer) in #1123
- Add configurable AI completion audio cues by Paul Lizer (@paullizer) in #1127
- Fix custom Databricks-prefixed plugin UI by Bionic711 in #1125
- Fix retention across group and collaborative conversations by Paul Lizer (@paullizer) in #1126
- Paginate Data Management backup inventory and job history by Paul Lizer (@paullizer) in #1128
- Redesign Admin Data Management migration workflow by Paul Lizer (@paullizer) in #1129
- Add Data Management restore workflow by Paul Lizer (@paullizer) in #1133
- Add Custom Pages open action by Paul Lizer (@paullizer) in #1131
- Fix retry and edit streaming parity by Paul Lizer (@paullizer) in #1132
- Add multi-select metadata extraction by Paul Lizer (@paullizer) in #1136
- Add backup cleanup and retention policy controls by Paul Lizer (@paullizer) in #1135
- Fix personal conversation fork model context by Paul Lizer (@paullizer) in #1139
- Refresh Backup, Migrate & Restore admin workflow by Paul Lizer (@paullizer) in #1141
- Add per-model response length overrides by Paul Lizer (@paullizer) in #1144
- Add configurable Public Workspace display name by Paul Lizer (@paullizer) in #1148
- Fix duplicate Data Management restore endpoint by Paul Lizer (@paullizer) in #1150
- Add model capability catalog by Paul Lizer (@paullizer) in #1149
- Support generated JSON and XML exports by Paul Lizer (@paullizer) in #1152
- Pin GitHub Actions to full-length commit SHAs by Microsoft Open Source Security Bot (@OssSecurityBot) in #1151
- Scale tabular row orchestration exports by Paul Lizer (@paullizer) in #1145
- Add Key Vault expiration reminders and secret rotation telemetry by Bionic711 in #1157
- Standardize logging tag prefixes by Bionic711 in #1160
- Stabilize functional test version checks by Bionic711 in #1162
- Fix enhanced citations storage startup degradation by Paul Lizer (@paullizer) in #1161
- Phase 1: Generalize tabular source descriptors by Paul Lizer (@paullizer) in #1166
- Phase 2: unify tabular durable run contract by Paul Lizer (@paullizer) in #1167
- Phase 3: Add hierarchical tabular analysis runner by Paul Lizer (@paullizer) in #1168
- Phase 4: Combined tabular analysis and export runs by Paul Lizer (@paullizer) in #1169
- Phase 5: Tabular run progress and governance controls by Paul Lizer (@paullizer) in #1170
- Phase 6: Tabular scale validation and hardening by Paul Lizer (@paullizer) in #1171
- Normalize outbound MCP tool arguments by Bionic711 in #1172
- Fix exhaustive tabular CSV runs to queue directly from source by Paul Lizer (@paullizer) in #1174
- Follow-up: keep direct tabular queue failures from aborting streams by Paul Lizer (@paullizer) in #1176
- Fix and accelerate LLM tabular background runs by Paul Lizer (@paullizer) in #1178
- Tabular LLM generation acceleration phase 1 by Paul Lizer (@paullizer) in #1179
- Implement Phase 2 tabular background handoff by Paul Lizer (@paullizer) in #1180
- Implement Phase 3 durable LLM generation planning by Paul Lizer (@paullizer) in #1181
- Phase 4 compact row response protocol by Paul Lizer (@paullizer) in #1182
- Implement Phase 5 completion-driven checkpointing by Paul Lizer (@paullizer) in #1183
- Add tabular rolling worker pool by Paul Lizer (@paullizer) in #1184
- Implement tabular phase 7 independent batch retries by Paul Lizer (@paullizer) in #1185
- Tabular LLM generation acceleration phase 8 by Paul Lizer (@paullizer) in #1186
- Fix tabular background streaming and token recovery by Paul Lizer (@paullizer) in #1187
- Fix tabular fixed-window stale status by Paul Lizer (@paullizer) in #1188
- Fix tabular nested CSV output schema by Paul Lizer (@paullizer) in #1189
- Fix generic tabular artifact routing and startup by Paul Lizer (@paullizer) in #1190
- Collapse tabular export status details by Paul Lizer (@paullizer) in #1191
- Simplify completed tabular artifact cards by Paul Lizer (@paullizer) in #1192
- Improve generated artifact views and batch balance by Paul Lizer (@paullizer) in #1193
- Normalize generated structured artifact intent by Paul Lizer (@paullizer) in #1194
- Add configurable workflow task limits by Paul Lizer (@paullizer) in #1195
- Accelerate tabular LLM generation by Paul Lizer (@paullizer) in #1196
- Fix tabular contains replay semantics by Paul Lizer (@paullizer) in #1202
- Fix JSON/XML source-only artifact intent by Paul Lizer (@paullizer) in #1203
- Merge prior grounded sources into follow-up tasks by Paul Lizer (@paullizer) in #1205
- Phase 1 tabular parity contract baseline by Paul Lizer (@paullizer) in #1206
- Phase 2: Add shared tabular request planner by Paul Lizer (@paullizer) in #1207
- Fix Data Management history 500s by Paul Lizer (@paullizer) in #1208
- Add chat used documents pane by Paul Lizer (@paullizer) in #1210
- Phase 3: Route Search through shared tabular preflight by Paul Lizer (@paullizer) in #1211
- Implement Phase 4 tabular Analyze durable preflight by Paul Lizer (@paullizer) in #1213
- Phase 5: mixed-source deferred tabular composition by Paul Lizer (@paullizer) in #1214
- Phase 6: Preserve per-document and multi-table Analyze state by Paul Lizer (@paullizer) in #1215
- Phase 7: Add tabular parity lifecycle coverage metadata by Paul Lizer (@paullizer) in #1216
- Phase 8: Add tabular parity rollout metadata by Paul Lizer (@paullizer) in #1217
- get-a-token-missing-auth-code-fix - Redirect direct getAToken visits without auth code to sign-in by Chad Palmer (@chadpalmer) in #1175
- Bump pillow from 12.2.0 to 12.3.0 in /application/single_app by Dependabot (@dependabot)[bot] in #1053
- Bump json from 2.19.2 to 2.19.9 in /docs by Dependabot (@dependabot)[bot] in #1078
- Bump aiohttp from 3.14.1 to 3.14.3 in /application/single_app by Dependabot (@dependabot)[bot] in #1154
- Bump pypdf from 6.13.0 to 6.15.0 in /application/single_app by Dependabot (@dependabot)[bot] in #1177
- Phase 9: Add tabular legacy fallback retirement controls by Paul Lizer (@paullizer) in #1218
- Add durable tabular Analyze and Search parity by Paul Lizer (@paullizer) in #1219
- Sanitize admin-only tabular execution settings by Paul Lizer (@paullizer) in #1220
- Prevent duplicate large tabular run confirmations by Paul Lizer (@paullizer) in #1221
- Add rendered UI coverage for admin tabular run controls by Paul Lizer (@paullizer) in #1223
- Refine conversation contents sidebar layout by Paul Lizer (@paullizer) in #1224
- Phase 1: Add analyze deliverable contract baseline by Paul Lizer (@paullizer) in #1225
- Phase 2: unify Analyze deliverable intent by Paul Lizer (@paullizer) in #1226
- Phase 3: separate public schema from tabular lineage by Paul Lizer (@paullizer) in #1227
- Phase 4: Add tabular transformation contract by Paul Lizer (@paullizer) in #1229
- Phase 5: Add durable artifact-set lifecycle by Paul Lizer (@paullizer) in #1230
- Phase 6: Render plural artifact sets by Paul Lizer (@paullizer) in #1231
- Phase 7: Add rollout rollback controls by Paul Lizer (@paullizer) in #1232
- Phase 7A: stabilize Analyze artifact closure baseline by Paul Lizer (@paullizer) in #1234
- Phase 7B: implement tabular output correctness contract by Paul Lizer (@paullizer) in #1235
- Phase 7C: enforce artifact-set publication lifecycle by Paul Lizer (@paullizer) in #1236
- Phase 7D: record Analyze artifact integration evidence by Paul Lizer (@paullizer) in #1237
- Complete Analyze artifact output contract by Paul Lizer (@paullizer) in #1238
- Fix tabular Analyze truncation and combined-run schema lock by Paul Lizer (@paullizer) in #1240
- Fix narrative Analyze evidence-envelope truncation (0.250.194) by Paul Lizer (@paullizer) in #1241
- Fix Admin Settings sidebar card parity by Paul Lizer (@paullizer) in #1242
- Fix top navigation Public Workspace crash by Paul Lizer (@paullizer) in #1243
- Harden tabular analysis and public workspace chat grounding by Paul Lizer (@paullizer) in #1246
- fix: complete tabular outputs and public workspace chat grounding by Paul Lizer (@paullizer) in #1248
- Fix live user message metadata during streaming by Paul Lizer (@paullizer) in #1247
- Add model endpoint identity header controls by Bionic711 in #1251
- Add governance policy block lists and policy actions by Bionic711 in #1253
- Fix Cosmos backup continuation token failure dropping large containers by Paul Lizer (@paullizer) in #1259
- Match chat document search on file names and clear dropdown divider artifacts by Paul Lizer (@paullizer) in #1260
- Reorder workspace section tabs into a consistent order of operations by Paul Lizer (@paullizer) in #1262
- Add read-only Yamcs mission control action by Paul Lizer (@paullizer) in #1265
- Make workflow alerts conditional with severity-graded rules by Paul Lizer (@paullizer) in #1264
- Move agent Instructions after Actions and Knowledge, add #action / #knowledge references by Paul Lizer (@paullizer) in #1263
- Distinguish retrieved sources from cited references by Paul Lizer (@paullizer) in #1268
- Add RocksDB action backed by a RocksDB HTTP service by Paul Lizer (@paullizer) in #1266
- Add Test Connection to OpenAPI, Azure Maps, Blob Storage, Databricks, Log Analytics, MCP, Snowflake, and Tableau actions by Paul Lizer (@paullizer) in #1269
- Redact credential field names that logging missed by Paul Lizer (@paullizer) in #1270
- Cite documents agents find via document search by Paul Lizer (@paullizer) in #1274
- Fix source blob backup ETag comparison failing every blob by Paul Lizer (@paullizer) in #1273
- Fix Data Management history failure diagnostics and throttle handling by Paul Lizer (@paullizer) in #1276
- Use Azure AI Content Understanding for Enhanced document extraction by Paul Lizer (@paullizer) in #1278
- Add configurable index auto-login for Entra SSO by Chad Palmer (@chadpalmer) in #1261
- Render EMF/WMF diagrams so Office figures are analyzed by Paul Lizer (@paullizer) in #1279
- Support legacy Office images and optional formula extraction by Paul Lizer (@paullizer) in #1280
- Fix shared multi-user conversation reload and AI streaming by Paul Lizer (@paullizer) in #1283
- Fix workflow document picker loading and make workspace documents per-task by Paul Lizer (@paullizer) in #1284
- Deliver File Sync prompt context to the first workflow task by Paul Lizer (@paullizer) in #1287
- Harden collaboration stream errors and repair stale route assertions by Paul Lizer (@paullizer) in #1288
- Keep figures in the chunk they came from by Paul Lizer (@paullizer) in #1290
- Preserve whitespace after inline document citations by Paul Lizer (@paullizer) in #1291
- Link release note issue references and archive pre-v0.230.001 notes by Paul Lizer (@paullizer) in #1292
- Fix Backup Inventory 503 from unsupported Cosmos GROUP BY aggregate by Paul Lizer (@paullizer) in #1295
- Fix Data Management step badges stuck on running for finished steps by Paul Lizer (@paullizer) in #1296
- Reset the conversation Documents pane on New chat by Paul Lizer (@paullizer) in #1300
- Accept collaborative @ mentions with Tab by Paul Lizer (@paullizer) in #1301
- fix(tabular): union passthrough CSV schema and keep assistant text visible by Paul Lizer (@paullizer) in #1302
- Fix shared conversation AI access and add participant file approvals by Paul Lizer (@paullizer) in #1303
- Admin Settings: move Latest Features to the bottom and split the settings template by Paul Lizer (@paullizer) in #1297
- Admin Settings IA stage A+B: card-targeted links and dependency announcements by Paul Lizer (@paullizer) in #1304
- Admin Settings: enforce the form field contract before stage D moves cards by Paul Lizer (@paullizer) in #1306
- Restrict app-identity action endpoints to Azure origins by Paul Lizer (@paullizer) in #1305
- Admin Settings IA stage C: group navigation rendered from one definition by Paul Lizer (@paullizer) in #1307
- Admin Settings IA stage D part 1: split Governance and Scale, move Front Door to Security by Paul Lizer (@paullizer) in #1309
- fix(csv): build CSV artifacts from authorized action rows by Paul Lizer (@paullizer) in #1308
- Stage D part 2: Data Lifecycle and Chat groups by Paul Lizer (@paullizer) in #1310
- fix(artifacts): give every generated file format the same row resolution by Paul Lizer (@paullizer) in #1312
- Stage D part 3: dismantle General and Security by Paul Lizer (@paullizer) in #1311
- Stage D part 4: Knowledge, Workspaces and Workflow by Paul Lizer (@paullizer) in #1313
- Stage D part 5: AI Models and Agents & Actions by Paul Lizer (@paullizer) in #1314
- Stage D part 6: Backup & Recovery, completing Stage D by Paul Lizer (@paullizer) in #1315
- Stage E: split the mixed System Settings card, add the app role roster by Paul Lizer (@paullizer) in #1316
- Fix generated artifact paging, truncation disclosure, and guidance carry-forward by Paul Lizer (@paullizer) in #1317
- Revert the temporary CI branch filters by Paul Lizer (@paullizer) in #1318
- Merge Development into staging, and stop navigating by tab id by Paul Lizer (@paullizer) in #1320
- Admin Settings information architecture rework: 17 flat tabs to 14 groups by Paul Lizer (@paullizer) in #1319
- Fix Admin Settings 500 from cross-pane Jinja variable scope by Paul Lizer (@paullizer) in #1325
- Documentation site redesign: search, navigation, mobile support, and complete capability coverage by Paul Lizer (@paullizer) in #1326
- Guard Semantic Kernel startup identity lookups against missing request context by Paul Lizer (@paullizer) in #1330
- Gate inline image and video galleries to cited media only by Paul Lizer (@paullizer) in #1331
- Run agent actions and workspace search together instead of one or the other by Paul Lizer (@paullizer) in #1333
- Capture real v0.260.001 Latest Features screenshots and publish the cards by Paul Lizer (@paullizer) in #1334
- Promote v0.260.028 from Development to Staging by Paul Lizer (@paullizer) in #1335
- v0.260.028 by Paul Lizer (@paullizer) in #1337
New Contributors
- Microsoft Open Source Security Bot (@OssSecurityBot) made their first contribution in #1151
- Dependabot (@dependabot)[bot] made their first contribution in #1053
Full Changelog: v0.250.001...v0.260.028
Original source - Jun 25, 2026
- Date parsed from source:Jun 25, 2026
- First seen by Releasebot:Oct 14, 2026
v0.250.001
Simple Chat ships a sweeping release that expands AI models, agents, workflows, integrations, file sync, and document analysis, alongside major chat and workspace improvements. It also strengthens governance, access controls, reliability, and security across the platform.
New Features
Azure OpenAI and Model Endpoint Setup Guidance
Added setup guidance for legacy Azure OpenAI model discovery, runtime data-plane calls, Foundry providers, managed identity, service principal RBAC, and API-key inference limits.
(Ref: Azure OpenAI setup guide, model endpoint modal, Admin Settings model endpoints)
Tabular Semantic Kernel Large Result Pagination
Added continuation metadata, row payload trimming, return_columns preservation, and larger computed-result handoff guardrails for row-returning tabular tools.
Inspired by and adapted from PR #894 by vivche.
(Ref: tabular_processing_plugin.py, route_backend_chats.py)
Beta Branch Development Governance Integration
Prepared beta capabilities for Development governance, custom pages, user settings cache changes, agent catalog customization, file sync, workflows, workspace identities, and Data Management.
(Ref: Development merge resolution, governance integration)
User Settings Cache Optimization
Added request-scoped user settings memoization and a lightweight UI settings cache for Redis and no-Redis deployments.
(Ref: functions_settings.py, app_settings_cache.py, dark-mode.js, sidebar.js)
Custom Pages
Added administrator-managed custom pages with static assets, optional Python-backed extensions, authenticated host routes, Admin Settings controls, examples, documentation, and fail-closed coverage.
(Ref: route_custom_pages.py, functions_custom_pages.py)
Governance Controls for Endpoints, Agents, and Actions
Added feature policies, delegated item policies, review workflows, backend enforcement, and Admin Settings allowlists for personal, group, and global endpoints, agents, and actions.
(Ref: governance policies, Admin Settings Governance tab)
Governance and App Settings Cache Versioning
Added cache-version coordination so settings and governance policy changes invalidate stale worker caches while preserving hot-path performance.
(Ref: app settings cache, governance cache versioning)
Pull Request Preparation Prompt
Added a reusable Copilot prompt for preparing SimpleChat branches for pull requests into Development, including validation, release-note checks, and guarded push or PR creation.
(Ref: .github/prompts/prepare-for-pull-request.prompt.md)
Tableau Action
Added a read-only Tableau action with discovery, configuration, workspace identity support, validation, schemas, and Semantic Kernel loader integration.
(Ref: tableau_plugin.py, tableau_plugin_factory.py, functions_tableau_operations.py, TABLEAU_ACTION.md)
Snowflake Action
Added a read-only Snowflake action with tailored authentication, query limits, structured responses, Key Vault secret handling, governance labels, schemas, documentation, and coverage.
(Ref: SnowflakePlugin, SnowflakePluginFactory, SNOWFLAKE_ACTION.md)
Workflow Per-Document Analysis and Generated Office Exports
Added Analyze mode for per-document workflow execution plus SimpleChat tools for generated Word and PowerPoint exports.
(Ref: functions_workflow_runner.py, functions_simplechat_operations.py, WORKFLOW_PER_DOCUMENT_ANALYSIS_AND_EXPORTS.md)
Group Workflows
Added group-scoped workflow definitions, run history, per-document run items, APIs, assignment gates, admin controls, group workspace UI, and shared activity support.
(Ref: functions_group_workflows.py, route_backend_workflows.py, GROUP_WORKFLOWS.md)
Voice-Assisted Form Inputs and Agent Instruction Drafting
Added speech-to-text controls to supported forms and an agent Instruction Brief workflow that drafts editable Markdown instructions through the configured model.
(Ref: form-voice-input.js, agent_modal_stepper.js, VOICE_ASSISTED_FORM_INPUTS.md)
Microsoft Graph Send Mail Action
Microsoft Graph actions can now create drafts, prepare delayed-delivery drafts, or send mail from the signed-in user's mailbox with runtime validation and Graph scopes.
(Ref: MSGraphPlugin.send_mail, plugin_modal_stepper.js, MSGRAPH_SEND_MAIL_ACTION.md)
Workspace-Backed Chat Uploads
Eligible chat uploads now queue or reuse personal workspace documents as the source of truth while preserving chat attachment behavior, progress display, tags, metadata, and fallback flow.
(Ref: route_frontend_chats.py, route_backend_chats.py, functions_documents.py, CHAT_UPLOAD_PERSONAL_WORKSPACE_HANDOFF.md)
Document Intelligence PDF and Image Extraction Modes
Added Read/Layout/Auto extraction controls, sample-page Auto detection, extraction-mode metadata, upload source preservation, and PDF reprocess actions across workspaces.
(Ref: functions_content.py, functions_documents.py, DOCUMENT_INTELLIGENCE_PDF_IMAGE_EXTRACTION_MODE.md)
Cosmos Throughput Automation and Native Autoscale
Added RU monitoring, manual scale actions, background automation, per-container policies, global policy enforcement, native autoscale conversion, guarded thresholds, and deployment RBAC metadata.
(Ref: functions_cosmos_throughput.py, Admin Settings Scale tab, Cosmos throughput docs)
Workflow File Sync Triggers and Batch Resume
Workflows can trigger File Sync before runs, monitor sync changes, dynamically target changed synced documents, and resume failed Analyze items.
(Ref: functions_workflow_runner.py, functions_file_sync.py, WORKFLOW_FILE_SYNC_TRIGGERS.md)
Cloud Drive and File Sync Sources
Added OneDrive, Azure Files, SMB sync support, provider browsing, source selection, remote change-token handling, reusable identities, scheduled/manual sync, history, tags, filters, and admin source controls.
(Ref: functions_file_sync.py, workspace-file-sync.js, ONEDRIVE_FILE_SYNC.md, AZURE_FILES_FILE_SYNC.md, FILE_SYNC.md)
Global Cloud Drive Connector Identities
Admins can now manage File Sync cloud-drive connector credentials separately from personal user sync choices, including global connector fallback behavior.
(Ref: functions_workspace_identities.py, workspace-identities.js, WORKSPACE_IDENTITIES.md)
Conversation Feed Pagination
Chat startup now loads pinned, unread, and first-page recent conversations with load-more and backend title search instead of loading every accessible conversation.
(Ref: route_backend_conversations.py, functions_conversation_feed.py, chat-conversations.js)
Group File Share Approval Notifications
Added notifications and approval workflow for personal and group document shares, including recipient review actions and protected owner-group documents.
(Ref: route_backend_group_documents.py, functions_notifications.py, GROUP_FILE_SHARE_APPROVAL_NOTIFICATIONS.md)
Stats Time Windows and CSV Exports
Added 7-day, 30-day, 90-day, and custom windows plus CSV exports for personal, group, and public stats.
(Ref: functions_stats_windows.py, profile/group/public stats routes)
Personal Workflow Access Governance
Added personal workflow enablement, optional WorkflowUser app-role enforcement, route gating, and deployer app-role definitions.
(Ref: workflow access control, PERSONAL_WORKFLOWS.md, WORKFLOW_ACCESS_CONTROL_FIX.md)
Azure Commercial Databricks Action
Added Databricks SQL Statement Execution action with read-only enforcement, configuration, reusable identities, factory loading, schemas, docs, and coverage.
(Ref: DatabricksPlugin, DatabricksPluginFactory, DATABRICKS_ACTION_CONFIGURATION.md)
Model Context Protocol Actions
Added MCP action support with transport, authentication, timeout, tool allowlist, cached metadata, discovery, runtime invocation, and admin-only stdio restrictions.
(Ref: functions_mcp_operations.py, mcp_plugin.py, MCP_ACTION_CONFIGURATION.md)
Layered Message Masking
Users can layer full-message and selected-text masks independently across personal and group conversations with shared event updates.
(Ref: functions_message_masking.py, chat-messages.js, chat-collaboration.js)
Workspace and Global Identities
Promoted reusable identities into personal, group, public, and global identity management surfaces for File Sync, actions/plugins, model endpoints, and future integrations.
(Ref: functions_workspace_identities.py, route_backend_workspace_identities.py, workspace-identities.js)
Visio and Outlook MSG Ingestion
Added .vsdx and .msg ingestion, searchable Visio page chunks, citation previews, original downloads, and email-message document processing.
(Ref: functions_visio.py, functions_content.py, functions_documents.py, VISIO_INGESTION.md)
Assigned Knowledge for Agents
Agent creators can bind agents to governed workspace sources, documents, and tags, and chat enforces assigned search scope server-side.
(Ref: functions_assigned_knowledge.py, route_backend_agents.py, chat-agents.js)
Deep Research and Source Review Enhancements
Added optional Source Review, JavaScript rendering, Load More handling, model-assisted link planning, bounded deep traversal, SSRF protections, admin controls, audit details, and prompt-injection isolation.
(Ref: functions_source_review.py, route_backend_chats.py, SOURCE_REVIEW.md)
Conversation Charts and Workflow Tabular Reuse
Added core chat chart generation, reusable workflow tabular analysis imports, and Semantic Kernel auto tool invocation in the model-only fallback path.
(Ref: semantic_kernel_loader.py, functions_tabular_analysis.py, functions_workflow_runner.py)
Generated Markdown Artifact Viewer
Added View MD for generated Markdown artifacts and sanitized rendered Markdown citation previews.
(Ref: chat-messages.js, chat-citations.js, GENERATED_ARTIFACT_MARKDOWN_VIEW.md)
Tabular Related Document Evidence
Row-level tabular analysis can now resolve related non-tabular documents and include supporting excerpts in chat and generated structured exports.
(Ref: route_backend_chats.py, functions_search_service.py, TABULAR_RELATED_DOCUMENT_EVIDENCE.md)
Generated Artifact Workspace Promotion Approval
Added Add to Workspace for generated analysis artifacts with immediate personal queueing and group/public approval workflows.
(Ref: route_enhanced_citations.py, group/public document routes, chat-messages.js)
Chat Clipboard Paste Uploads
Users can paste images and browser-exposed files directly into chat, using the existing upload, consent, and processing path.
(Ref: chat-input-actions.js, CHAT_CLIPBOARD_PASTE_UPLOADS.md)
Staging UI Test CI/CD and Playwright Workspaces
Added protected Staging deployment workflow, Azure Developer CLI staging bootstrap, live UI smoke coverage, and Azure-hosted Playwright Workspace support.
(Ref: .github/workflows/staging-azd-ui-tests.yml, ui_tests/playwright-workspaces/)
Service Principal Authentication for CI UI Tests
Added disabled-by-default /ci-auth/session support for creating staging UI test sessions from Entra access tokens.
(Ref: functions_authentication.py, route_frontend_authentication.py, ENABLE_CI_BEARER_SESSION_AUTH)
Profile Sidebar Toggle Style Preference
Added a profile preference for large versus compact sidebar hide controls across full and compact sidebar templates.
(Ref: profile.html, sidebar templates, sidebar.css)
Bug Fixes
Azure OpenAI Model Discovery Identity Split
Legacy model discovery now uses the configured management-plane credential while inference keeps the runtime data-plane identity or key path.
(Ref: route_backend_models.py, deployer OpenAI RBAC, AZURE_OPENAI_MODEL_DISCOVERY_IDENTITY_FIX.md)
Chat Model Icon Avatars
Saved endpoint icons now appear on model-only assistant responses while preserving agent avatar priority.
(Ref: route_backend_chats.py, chat-messages.js)
Tabular SK Python 3.13 Compatibility
Updated public tabular kernel parameters so Semantic Kernel parsing works on Python 3.12 and 3.13; adapted from PR #892 by vivche.
(Ref: test_tabular_kernel_parameter_annotations.py)
Python 3.12 CI and XSS Guardrail Cleanup
Updated CI to Python 3.12 and adjusted changed rendering paths to satisfy XSS guardrails without broad suppressions.
(Ref: Python 3.12 CI, Admin Settings, group workspace delete modal, profile hero image)
PR Readiness Guardrail Cleanup
Removed trailing whitespace, unnecessary |safe, UTF-8 BOM content, and documented reviewed plugin authorization boundaries for PR validation.
(Ref: PR readiness, XSS and BAC guardrails)
Governance Admin Rendering XSS Hardening
Rebuilt changed governance, endpoint, agent, and plugin table rendering with DOM APIs and text nodes.
(Ref: governance admin UI, model endpoint table, plugin table rendering)
Group Workflow Assignment Cleanup
Invalid nested JSON assignment payloads are dropped and group workflow assignment settings now preserve only valid group UUIDs.
(Ref: functions_settings.py, admin_settings.js, GROUP_WORKFLOW_ASSIGNMENT_CLEANUP_FIX.md)
Workflow Activity Navigation and Group Activity Gate
Workflow Activity actions now keep the current tab open and group workflow activity views use group-specific authorization instead of the personal workflow feature flag.
(Ref: workspace_workflows.js, workflow-activity.js, group workflow activity docs)
Tabular Inline Chart Handoff
Successful grouped CSV/XLSX results now create deterministic SimpleChat inline chart citations for streaming and non-streaming responses.
(Ref: route_backend_chats.py, functions_chart_operations.py, TABULAR_INLINE_CHART_HANDOFF_FIX.md)
Document Intelligence Upload Normalizer Import
Fixed extraction-mode normalizer resolution to avoid upload failures and startup circular imports.
(Ref: functions_content.py)
Cosmos Autoscale and Metrics Fixes
Fixed native autoscale migration, background cadence, REST metadata parsing, container metric dimensions, cached status rendering, save-button activation, refresh logging, and throughput refresh performance.
(Ref: functions_cosmos_throughput.py, background_tasks.py, admin_settings.js, Cosmos autoscale fix docs)
Advanced Conversation Search Matching
Advanced Search now covers legacy and collaborative stores with explicit match modes and normalized chat-type filters.
(Ref: route_backend_conversations.py, chat-search-modal.js, ADVANCED_CONVERSATION_SEARCH_FIX.md)
Visio Preview Fidelity Fixes
Improved Visio preview rendering for arcs, paths, master geometry, nested coordinates, connector lines, labels, embedded media, and runtime simplification.
(Ref: functions_visio.py, Visio preview fix docs)
Source Review Traversal and Citation Fixes
Source Review now receives full web-search citation seeds, balances seed and child pages, prioritizes relevant archive links, supports one more bounded hop, and exposes richer audit details.
(Ref: functions_source_review.py, route_backend_chats.py, Source Review tests/docs)
Authenticated Request Login Activity Tracking
Passive authenticated visits now contribute to login activity with throttling while preserving explicit OAuth login signals.
(Ref: functions_activity_logging.py, app.py, AUTHENTICATED_REQUEST_LOGIN_ACTIVITY_FIX.md)
Safety Violation Remediation Workflow
Warn, suspend, and block actions now create notifications, apply matching access restrictions, and route through approvals when required.
(Ref: route_backend_safety.py, functions_safety_remediation.py, admin-safety-violations.js)
Group and Public Workspace Hero Color Editing
Hero color selections now save, preview, and return through workspace branding APIs correctly.
(Ref: manage_group.js, manage_public_workspace.js, workspace routes)
Chat-Scoped Generated Tabular Exports
Large generated JSON and CSV exports stay attached to the active chat and are cleaned up with conversation lifecycle rules when applicable.
(Ref: route_backend_chats.py, functions_simplechat_operations.py, chat-messages.js)
Fact Memory Delete Confirmation Layering
Delete confirmation now opens above the Manage Fact Memories editor so users can confirm without closing the editor.
(Ref: profile.html, test_profile_fact_memory_editor.py)
Live Tabular Analysis Thought Progress
Long-running tabular analysis now streams tool progress into the thoughts panel while the answer is being prepared.
(Ref: route_backend_chats.py, chat-thoughts.js, tabular progress tests)
Workspace Search Document Action Gating
Review and Compare modes are ignored when Workspace Search is disabled, preventing stale document-selection warnings.
(Ref: chat-messages.js, test_chat_document_action_workspace_toggle.py)
Chat File Upload Client Enablement
Effective per-user chat upload settings now serialize to browser upload guards.
(Ref: chats.html, CHAT_FILE_UPLOAD_CLIENT_FLAG_FIX.md)
Document Auto Metadata Extraction Consistency
All supported upload types now run the same final automatic metadata extraction flow, including corrected public media chunk scoping.
(Ref: functions_documents.py, DOCUMENT_AUTO_METADATA_EXTRACTION_FIX.md)
Chat Stream Lifecycle Observability
Added backend and frontend diagnostics for active, detached, completed, errored, aborted, and recovered chat streams.
(Ref: route_backend_chats.py, chat-streaming.js, CHAT_STREAM_LIFECYCLE_OBSERVABILITY_FIX.md)
Stored XSS Hardening
Hardened uploaded-file previews, public tag colors, agent template actions, share/activity/masking surfaces, chat scope and conversation details, citation and file modal filenames, agent display names, workspace member rendering, Control Center public workspace members, admin rendering, and related Graph filter literals.
(Ref: XSS fix docs, chat-messages.js, workspace JS files, admin JS/templates, route helpers)
Chat Selected Document Metadata Authorization (f046)
Chat and tabular selected-document metadata now resolves only through authorized personal, group, and public workspace paths.
(Ref: route_backend_chats.py, CHAT_SELECTED_DOCUMENT_METADATA_AUTHORIZATION_FIX.md)
Plugin Logging Authorization Fixes
Recent invocation feed and destructive clear-log endpoint now require admin access while preserving unauthenticated and non-admin response contracts.
(Ref: route_plugin_logging.py, plugin logging authorization tests/docs)
Public Workspace Details Projection Hardening (f034)
Non-members now receive a minimal public summary instead of the full public workspace document.
(Ref: route_backend_public_workspaces.py, manage_public_workspace.js, PUBLIC_WORKSPACE_DETAILS_DISCLOSURE_FIX.md)
Approval Route Authorization Guard Consolidation (f033)
Admin and non-admin approval routes now share the same authorization helper before exposing approval data or executing actions.
(Ref: route_backend_control_center.py, functions_approvals.py)
Feedback Submission Ownership Enforcement (f038)
Feedback submissions now require conversation and message targets inside the authenticated user's own conversation before persisting data.
(Ref: route_backend_feedback.py, FEEDBACK_AND_PLUGIN_LOG_ACCESS_CONTROL_FIX.md)
Authorization State Confusion Settings Hardening
Public workspace selection and prompt operations now validate active workspace state server-side, and generic user-settings updates drop unsupported keys.
(Ref: functions_public_workspaces.py, route_backend_users.py, AUTHORIZATION_STATE_CONFUSION_SETTINGS_FIX.md)
Key Vault Plugin Secret Scope Enforcement (f013)
Plugin secret save, runtime resolution, connection tests, and cleanup now verify secret references match expected scope and source.
(Ref: functions_keyvault.py, semantic_kernel_loader.py, KEY_VAULT_PLUGIN_SECRET_SCOPE_ENFORCEMENT_FIX.md)
Log Analytics Query History User Scope Enforcement (f016)
Query history now binds to the authenticated user server-side and shared user-settings access denies cross-user reads/writes by default.
(Ref: log_analytics_plugin.py, functions_settings.py, LOG_ANALYTICS_PLUGIN_USER_SCOPE_ENFORCEMENT_FIX.md)
Personal Conversation Authorization Fixes
Hardened personal conversation deletion, message/image reads, file-content retrieval, frontend rendering, and error handling for forbidden or missing message loads.
(Ref: conversation routes, chat-messages.js, personal conversation authorization docs)
Broken Access Control IDOR Hardening
Enforced personal conversation ownership, canonicalized group/public scope, bound tabular blob and fact-memory access to the authorized request context, and escaped search filters.
(Ref: route_backend_chats.py, plugin helpers, BROKEN_ACCESS_CONTROL_IDOR_HARDENING_FIX.md)
Web Search Data Egress Hardening
Bing-grounded web search now sends only the current user message, with updated consent copy and reduced outbound invocation metadata.
(Ref: route_backend_chats.py, functions_settings.py, web search tests/docs)
Search, Groups, Approvals, and History Authorization Hardening
Revalidated active group selection, group prompts, approval actions, and history-grounded fallback reuse before proceeding with caller-supplied or stored identifiers.
(Ref: functions_search.py, functions_group.py, route hardening docs)
SQL ODBC Driver 18 Container Support
Installed and registered ODBC Driver 18 in container deployments and retried saved Driver 17 strings only when the missing-driver error applies.
(Ref: Dockerfile, SQL plugin files, test_sql_odbc_driver_18_support.py)
Entra Application Deployment Stability
Hardened Entra app registration scripts for MFA or conditional-access prompts and persisted app registration outputs into the selected AZD environment.
(Ref: Initialize-EntraApplication.ps1, Entra deployment tests)
Public Workspace Manage Script Syntax Fix
Fixed pending request handlers and delegated member-search selection initialization parser errors.
(Ref: manage_public_workspace.js)
Chat Document Dropdown Viewport Fit Fix
Grounded-search document dropdowns now stay inside short and mobile-influenced viewports.
(Ref: chat-documents.js)
User Interface Enhancements
Workflow Analyze Mode and Conversation Navigation
Added per-document Analyze switch, new-tab workflow history and alert conversation actions, and Word/PowerPoint upload toggles for SimpleChat action and agent builders.
(Ref: workflow UI, notifications, action and agent modals)
Personal Workflow Labeling
Renamed the existing workspace workflow surface to Personal Workflows across navigation, modal headings, primary actions, and documentation.
(Ref: workspace.html, workspace_workflows.js, PERSONAL_WORKFLOWS.md)
Custom Workspace Hero Color Swatches
Group and public workspace manage pages now support custom hero colors with live preview and saved custom swatch selection.
(Ref: manage workspace templates and JS, GROUP_PUBLIC_WORKSPACE_CUSTOM_HERO_COLORS.md)
Selectable Conversation-Linked Workspace Document Deletion
Conversation delete now lists linked workspace documents and lets users choose which to remove with the conversation.
(Ref: chat-conversations.js, conversation/document routes)
Document Intelligence Extraction Terminology and Badges
Renamed Read/Layout choices to Standard/Enhanced, added explanatory hover text, and moved extraction badges out of top-level document rows while preserving detail views.
(Ref: Admin Settings Search & Extract, workspace document views)
Cosmos Throughput Table Clarity and Container Policies
Simplified the Cosmos container table, added tooltips and setup guide test flow, preserved unavailable metrics accurately, and added a Containers modal for per-container automation policies.
(Ref: admin_settings.html, admin_settings.js, Cosmos throughput docs)
File Sync Source Configuration Flow
Reworked the sync source modal around selected paths, subfolders, filters, provider browsing, and OneDrive global connector guidance.
(Ref: workspace-file-sync.js)
Control Center Group Token Totals
Added all-time group token usage totals to the Control Center table, modal, and CSV export.
(Ref: route_backend_control_center.py, control-center.js, control_center.html)
Workspace Identity Modal Workflow
Replaced inline identity forms with Add, View, and Edit modals grouped around real consumers and authentication details.
(Ref: workspace-identities.js, functions_workspace_identities.py)
Deep Research Allowed-User Management Modal
Replaced inline user policy controls with a Manage Users modal and switched runtime behavior to allow-only access.
(Ref: admin_settings.html, admin_settings.js, functions_source_review.py)
Assistant Follow-Up Prompt Actions
Assistant responses can render next-step options as prompt buttons with a cancelable send countdown.
(Ref: chat-messages.js, chats.css)
Workspace Document Cards and Folder-Card Views
Added public workspace document cards, aligned view controls across workspaces, and improved multi-select and visible-only select-all behavior.
(Ref: workspace JS/CSS, workspace templates)
Control Center Management Pagination
Added page-size selectors and server-driven pagination for User, Group, and Public Workspace Management.
(Ref: route_backend_control_center.py, control_center.html, control-center.js)
Workspace Branding Heroes and Shortcuts
Group and public workspaces now support logo upload, active workspace hero cards, owner metadata, optional logos, and direct manage shortcuts.
(Ref: functions_workspace_branding.py, workspace templates and tests)
GitHub Pages Documentation Redesign
Redesigned the documentation shell with fixed top navigation, curated sidebar, mobile drawer, search, and right-side page rail.
(Ref: docs layouts, includes, assets, index, UI tests)
Chat and Sidebar Icon-Only Controls
Refined the chat conversation info button and compact sidebar toggle as quiet icon-only controls with accessible focus states.
(Ref: chats.html, _sidebar_nav.html, _sidebar_short_nav.html, sidebar.css, test_chat_sidebar_toggle_controls.py)
Original source Similar to Simple Chat with recent updates:
- Microsoft Teams updates75 release notes · Latest Oct 7, 2026
- Google Workspace updates64 release notes · Latest Oct 16, 2026
- Microsoft 365 updates76 release notes · Latest Oct 13, 2026
- Notion updates136 release notes · Latest Oct 15, 2026
- xAI updates138 release notes · Latest Oct 14, 2026
- ChatGPT updates235 release notes · Latest Oct 16, 2026
- May 7, 2026
- Date parsed from source:May 7, 2026
- First seen by Releasebot:Oct 14, 2026
v0.241.007
Simple Chat releases a security-focused update that hardens chat, workspace, and admin experiences against cross-site scripting and unauthorized data access. It also strengthens authorization across conversations, plugins, settings, and search while improving safe rendering and regression coverage.
v0.241.007
New Feature
Improved Mobile UI Support
Bug Fixes
Uploaded File Preview Body XSS Hardening
Fixed the uploaded-file preview modal so stored file bodies no longer reach the preview pane through raw HTML sinks.
Plain-text previews now render as inert preformatted text, CSV-backed previews are built with DOM text nodes, and legacy HTML-backed table payloads now fall back to inert text instead of live markup.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened preview path.
(Ref: chat-input-actions.js, test_uploaded_file_preview_xss_fix.py, test_uploaded_file_preview_escaping.py, UPLOADED_FILE_PREVIEW_XSS_FIX.md)
Public Workspace Tag Color XSS Hardening
Fixed the public workspace tag surfaces so stored tag colors no longer reach folder-grid actions, tag badges, tag management rows, or selected-tag chips through inline handler or style interpolation.
Shared tag helper paths now normalize and validate tag colors on create and update across personal, group, and public routes, and previously stored invalid colors fall back to safe deterministic values on read.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened public tag rendering path.
(Ref: functions_documents.py, route_backend_documents.py, route_backend_group_documents.py, route_backend_public_documents.py, public_workspace.js, test_public_workspace_tag_color_xss_fix.py, test_public_workspace_tag_color_rendering.py, PUBLIC_WORKSPACE_TAG_COLOR_XSS_FIX.md)
Agent Template Gallery Actions Escaping
Fixed the agent template gallery so stored actions_to_load values no longer reach the recommended-actions row through a raw HTML sink.
Agent template helper paths now normalize actions_to_load consistently on read, create, and update flows, and invalid write payload shapes are rejected before they can persist.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened gallery path.
(Ref: agent_templates_gallery.js, functions_agent_templates.py, test_agent_template_gallery_actions_to_load_xss_fix.py, test_agent_template_gallery_actions_escaping.py, AGENT_TEMPLATE_GALLERY_ACTIONS_TO_LOAD_XSS_FIX.md)
Stored XSS Share, Activity, and Masking Hardening
Fixed the remaining stored-XSS share-modal flows so attacker-controlled user names, group names, descriptions, emails, and toast content no longer render through inline handlers or raw HTML sinks.
Hardened the group activity timeline and raw-activity modal so stored activity metadata and serialized activity JSON now render as inert text instead of executable markup.
Rebuilt masked-range rendering with DOM APIs and bound masking display names to the authenticated server-side user instead of trusting browser-supplied identity fields.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened sharing, activity, and masking paths.
(Ref: chat-toast.js, workspace-documents-sharing.js, group-documents-sharing.js, manage_group.js, chat-messages.js, route_backend_chats.py, test_stored_xss_share_activity_and_masking_fix.py, test_document_share_modal_escaping.py, STORED_XSS_SHARE_ACTIVITY_AND_MASKING_FIX.md)
Chat Scope Picker and Conversation Details XSS Hardening
Fixed the chat scope-lock picker so stored group and public workspace names no longer reach the locked-workspaces modal through raw HTML interpolation.
Hardened the conversation-details modal so attacker-controlled titles, context names, participant labels, document labels, semantic tags, classifications, and scope-lock names render as inert text, and invalid web-source values no longer produce active javascript: links.
Added focused functional and UI regression coverage plus versioned fix documentation for the affected chat modal surfaces.
(Ref: chat-documents.js, chat-conversation-details.js, test_stored_xss_chat_scope_and_conversation_details_fix.py, test_chat_scope_lock_and_conversation_details_escaping.py, CHAT_SCOPE_LOCK_AND_CONVERSATION_DETAILS_XSS_FIX.md)
Chat Citation and Uploaded File Modal Filename XSS Hardening
Fixed the first-render chat citation modal so attacker-controlled document filenames returned from citation APIs no longer reach the modal header as raw HTML on the first open.
The uploaded-file preview modal now uses the same safe title-population path, closing the adjacent filename sink before it can regress into the same stored-XSS family.
Added focused functional and UI regression coverage plus versioned fix documentation for both modal title flows.
(Ref: chat-citations.js, chat-input-actions.js, test_stored_xss_chat_modal_filename_fix.py, test_chat_modal_filename_escaping.py, CITATION_AND_FILE_MODAL_FILENAME_XSS_FIX.md)
Stored XSS Agent and Member Rendering Hardening
Fixed the stored-XSS sink in chat message rendering so agent display names no longer reach the sender header, image header, or metadata drawer as raw HTML.
Public and group workspace member-management views now escape untrusted member display names and emails before rendering member rows, pending requests, ownership-transfer options, bulk-remove summaries, user-search results, and CSV validation previews, and the public member search no longer embeds untrusted values inside an inline onclick handler.
/api/userSearch now escapes Microsoft Graph OData filter literals before composing the $filter expression, so apostrophes in search input cannot break the backend Graph query.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened chat, workspace member-management, and Graph filter paths.
(Ref: chat-messages.js, manage_public_workspace.js, manage_group.js, route_backend_users.py, test_stored_xss_chat_workspace_rendering_fix.py, test_public_workspace_member_rendering_escaping.py, test_group_workspace_member_rendering_escaping.py, STORED_XSS_AGENT_AND_MEMBER_RENDERING_FIX.md)
Chat Selected Document Metadata Authorization Fix
Fixed chat selected-document metadata resolution so /api/chat, /api/chat/stream, and the selected tabular document helper no longer trust caller-supplied document ids after authentication.
Personal selected documents now resolve only for the owner or a legitimately shared user, group selected documents now honor authorized owner and shared-group access, and public selected documents now resolve only inside the caller's visible public workspaces.
Added focused regression coverage for the shared selected-document resolver and updated the existing all-scope tabular regression so the hardened lookup path stays covered.
(Ref: route_backend_chats.py, test_chat_selected_document_metadata_authorization.py, test_tabular_all_scope_group_source_context.py, CHAT_SELECTED_DOCUMENT_METADATA_AUTHORIZATION_FIX.md)
Control Center Public Workspace Members XSS Fix
Fixed a stored XSS in the Control Center public workspace members modal where stored member displayName and email values were rendered into an admin-facing HTML sink.
The members modal now builds the member row with DOM text nodes instead of injecting those fields through innerHTML, so malicious stored markup renders as inert text while the existing role badge styling remains unchanged.
Added focused regression coverage for the affected modal and documented the hardened sink under the current version line.
(Ref: workspace-manager.js, test_control_center_public_workspace_members_escaping.py, test_stored_xss_admin_rendering_fix.py, CONTROL_CENTER_PUBLIC_WORKSPACE_MEMBERS_XSS_FIX.md)
Plugin Log Recent Feed Admin Authorization Follow-Up
Fixed the adjacent plugin logging route so /api/plugins/invocations/recent now enforces the Admin role instead of exposing the cross-user recent invocation feed to any authenticated user.
Unauthenticated requests still return 401 Unauthorized, non-admin users now receive 403 Forbidden, and the admin response payload remains unchanged for legitimate troubleshooting flows.
Extended the focused plugin logging regression coverage so both admin-only plugin logging endpoints are exercised under unauthenticated, non-admin, and admin conditions.
(Ref: route_plugin_logging.py, test_plugin_logging_clear_logs_authorization.py, PLUGIN_LOG_RECENT_INVOCATIONS_ADMIN_FIX.md)
Public Workspace Details Projection Hardening
Fixed GET /api/public_workspaces/<workspace_id> so authenticated non-members no longer receive the full public workspace Cosmos document.
The route now returns a minimal public summary for non-members and a member-aware payload with explicit userRole and isMember fields for authorized workspace members, which preserves the manage-page UX without exposing manager lists, pending requests, or other member-only metadata.
Added focused functional and UI regression coverage to lock down the new payload contract and verify the public directory and non-member workspace page continue to behave correctly.
(Ref: route_backend_public_workspaces.py, functions_public_workspaces.py, manage_public_workspace.js, public_directory.js, test_security_authorization_hardening.py, test_public_workspace_projection_non_member_ui.py, PUBLIC_WORKSPACE_DETAILS_DISCLOSURE_FIX.md)
Approval Route Authorization Guard Consolidation
Hardened the approval detail, approve, and deny endpoints so both the admin and non-admin route variants now resolve requests through one shared authorization helper before returning approval data or executing destructive approval actions.
This reduces the chance of future drift between approval handlers while preserving the existing 403 Forbidden behavior for callers who are not allowed to view or approve a request.
Added focused regression coverage to ensure the approval routes continue using the shared authorization path.
(Ref: route_backend_control_center.py, functions_approvals.py, test_security_authorization_hardening.py)
Feedback Submission Ownership Enforcement
Fixed the user feedback submission route so caller-supplied conversationId and messageId values must resolve inside the authenticated user's own conversation before any feedback row is created.
Foreign conversation ids now return 403 Forbidden, missing assistant targets now return 404 Not Found, and invalid submissions no longer persist copied prompt or AI response content into the caller's feedback history.
Added focused regression coverage for owner success, foreign-conversation rejection before message lookup, and missing-target rejection without feedback persistence.
(Ref: route_backend_feedback.py, test_feedback_submission_authorization.py, FEEDBACK_AND_PLUGIN_LOG_ACCESS_CONTROL_FIX.md)
Plugin Log Clear Admin Authorization
Fixed the destructive plugin log clear endpoint so only administrators can wipe the shared in-memory plugin invocation history.
Unauthenticated requests still return 401 Unauthorized, non-admin authenticated users now receive 403 Forbidden, and admin behavior remains unchanged for legitimate maintenance flows.
Added focused regression coverage for unauthenticated, non-admin, and admin clear-log requests against the shared logger state.
(Ref: route_plugin_logging.py, test_plugin_logging_clear_logs_authorization.py, FEEDBACK_AND_PLUGIN_LOG_ACCESS_CONTROL_FIX.md)
Authorization State Confusion Settings Hardening
Completed the remaining settings-boundary hardening so active public workspace selection now validates server-side before it is persisted, instead of accepting arbitrary caller-supplied workspace ids through generic settings updates.
Public workspace selection routes now share the same validated helper path, and public prompt operations now resolve the active workspace through a canonical authorization check instead of trusting raw stored settings values.
The generic user-settings update route also now drops unsupported settings keys and returns a client error when a payload contains no valid settings keys, reducing the chance that authorization-sensitive state can bypass dedicated validators in future changes.
(Ref: functions_public_workspaces.py, route_backend_users.py, route_backend_public_workspaces.py, route_frontend_public_workspaces.py, route_backend_public_prompts.py, AUTHORIZATION_STATE_CONFUSION_SETTINGS_FIX.md)
Key Vault Plugin Secret Scope Enforcement
Fixed a plugin Key Vault authorization gap where well-formed full secret names could be stored or replayed across user, group, or global scopes and later resolved with the application's Key Vault identity.
Plugin secret save, runtime resolution, SQL connection-test resolution, and delete cleanup now verify that stored secret references match the expected scope and source before any Key Vault operation is attempted.
Added focused regression coverage and versioned fix documentation for the hardened plugin secret boundary.
(Ref: functions_keyvault.py, semantic_kernel_loader.py, route_backend_plugins.py, test_keyvault_plugin_secret_scope_enforcement.py, KEY_VAULT_PLUGIN_SECRET_SCOPE_ENFORCEMENT_FIX.md)
Log Analytics Query History User Scope Enforcement
Fixed the Log Analytics plugin so query history now binds to the authenticated user on the server instead of accepting an LLM-controlled user_id parameter.
Shared user-settings reads and writes now deny cross-user request access by default unless a reviewed privileged path explicitly opts into a cross-user bypass, and the Control Center admin flows have been updated to use that bypass intentionally.
Added focused regression coverage and versioned fix documentation for the plugin surface change and the shared user-settings authorization boundary.
(Ref: log_analytics_plugin.py, functions_settings.py, route_backend_control_center.py, test_log_analytics_plugin_user_scope_enforcement.py, LOG_ANALYTICS_PLUGIN_USER_SCOPE_ENFORCEMENT_FIX.md)
Personal Conversation Authorization
Closed personal-conversation authorization gaps so conversation deletion, chat file-content retrieval, and frontend conversation rendering verify ownership before returning or destroying data.
The chat message loader also now handles 403 Forbidden and 404 Not Found conversation-message responses explicitly, so the browser shows a controlled error state instead of assuming every message load succeeds.
Added focused functional and UI regression coverage plus a separate follow-up fix document under the current release line.
(Ref: route_backend_conversations.py, route_backend_documents.py, route_frontend_conversations.py, chat-messages.js, test_personal_conversation_followup_authorization.py, test_chat_messages_authorization_error.py, PERSONAL_CONVERSATION_AUTHORIZATION_FOLLOW_UP_FIX.md)
Personal Conversation Read Authorization Hardening
Fixed authenticated personal conversation read paths so message history and inline image retrieval now verify conversation ownership before returning content.
Requests that use leaked or foreign conversation identifiers now return 403 Forbidden instead of disclosing another user's transcript or image content, while the existing missing-resource response contracts remain unchanged.
Added focused regression coverage and versioned fix documentation for the hardened conversation read boundary.
(Ref: route_backend_conversations.py, test_conversations_read_ownership_authorization.py, PERSONAL_CONVERSATION_READ_AUTHORIZATION_FIX.md)
Broken Access Control IDOR Hardening
Closed the authenticated authorization gaps by enforcing personal conversation ownership in chat, binding tabular blob access to the current authorized request context, and binding fact-memory operations to that same canonical scope.
Request group and public workspace scope is now canonicalized before downstream processing so forged or stale scope identifiers do not survive into plugin execution or grounded-history fallback reuse.
Added focused regression coverage and versioned fix documentation for the hardened chat and plugin authorization boundary.
(Ref: route_backend_chats.py, tabular_processing_plugin.py, fact_memory_plugin.py, test_security_authorization_hardening.py, BROKEN_ACCESS_CONTROL_IDOR_HARDENING_FIX.md)
Stored XSS Admin Rendering Hardening
Closed the admin-side stored-XSS findings by escaping stored member and agent metadata before Control Center and Admin Settings HTML row rendering.
Control Center toast rendering now escapes message content by default and requires an explicit opt-in for the small number of admin success messages that intentionally include formatted HTML.
Added focused functional and UI regression coverage plus versioned fix documentation for the hardened admin rendering sinks.
(Ref: control_center.html, control-center.js, admin_agents.js, test_stored_xss_admin_rendering_fix.py, test_control_center_group_members_escaping.py, STORED_XSS_ADMIN_RENDERING_FIX.md)
Web Search Data Egress Hardening
Fixed the Bing-grounding web-search path so external web search now sends only the user's current message instead of a query derived from prior conversation context.
Updated the admin consent copy and user notice text to match the implemented behavior and warn that sensitive content pasted into the current message may still be sent when web search is used.
Reduced outbound web-search invocation metadata and added focused functional and UI regression coverage for the boundary and disclosure text changes.
(Ref: route_backend_chats.py, functions_settings.py, route_frontend_admin_settings.py, admin_settings.html, chats.html, test_web_search_current_message_only.py, test_web_search_notice_copy.py)
Authorization Boundary Hardening Across Search, Groups, Approvals, and History Fallback
Hardened several authenticated workflows that previously trusted caller-supplied identifiers or stale stored scope values, so active group selection, group-scoped prompt access, approval actions, and history-grounded follow-up reuse now revalidate the current user's authorization before proceeding.
Azure AI Search filter construction now escapes OData literals for document, user, group, shared, and public workspace identifiers, and the Control Center public workspace view now renders untrusted workspace metadata as inert text instead of raw HTML.
Added focused functional and UI regression coverage for the authorization and escaping paths, plus versioned fix documentation for the full hardening pass.
(Ref: functions_search.py, functions_group.py, route_backend_users.py, route_backend_group_prompts.py, route_backend_control_center.py, route_backend_chats.py, control-center.js, test_security_authorization_hardening.py, test_control_center_public_workspace_escaping.py)
Global Agent Scope Gate Fallback
Fixed per-user Semantic Kernel chats so selecting a global agent no longer silently falls back to the standard GPT model when personal agents are disabled for the tenant.
The per-user loader now treats global, personal, and group agent scopes separately, allowing valid global-agent selections to continue through agent invocation while keeping personal and group scope toggles enforced as configured.
Added regression coverage for the shared scope gate used by the per-user loader.
(Ref: semantic_kernel_loader.py, functions_agent_scope.py, test_global_agent_scope_gate.py, global agent request routing)
Original source - Apr 9, 2026
- Date parsed from source:Apr 9, 2026
- First seen by Releasebot:Oct 14, 2026
v0.241.006
Simple Chat improves Azure Speech setup guidance, enforces agent token limits, and strengthens tabular answer synthesis. It also fixes workspace loading and media citation badges, while adding an in-app guide for configuring AI voice conversations.
Bug Fixes
Speech and Video Indexer Setup Guidance Alignment
Fixed stale admin guidance around Azure AI Video Indexer and shared Azure Speech configuration so managed-identity setup no longer points admins toward legacy Video Indexer API keys or incomplete Speech instructions.
The admin experience now reflects the shared Speech resource model, adds Speech Resource ID helper fields, and keeps managed-identity voice-response requirements aligned with runtime behavior.
(Ref: admin_settings.html, admin_settings.js, route_backend_tts.py, functions_documents.py, shared Speech and Video Indexer guidance)
Agent Output Token Defaults and Foundry Limit Enforcement
Fixed stale agent output-token defaults so new and normalized agents now use -1 to defer to the provider or model default instead of silently reintroducing older fixed caps.
Azure AI Foundry agent execution now also honors saved output-token settings in both classic Foundry agent runs and new Foundry Responses-based runs, so configured limits are enforced consistently instead of only being stored in agent configuration.
(Ref: functions_global_agents.py, agent.schema.json, foundry_agent_runtime.py, test_foundry_token_limit_defaults.py)
Tabular Exhaustive Result Synthesis Retry
Fixed exhaustive tabular questions such as "list all" requests so the workflow no longer stops at an answer that claims only sample rows or workbook metadata are available after analytical tool calls already returned the full matching result set.
General tabular analysis now detects full versus partial result coverage from tool metadata, retries incomplete synthesis when necessary, and adds stronger prompt guidance so the final answer uses the returned analytical results directly.
(Ref: route_backend_chats.py, test_tabular_exhaustive_result_synthesis_fix.py, TABULAR_EXHAUSTIVE_RESULT_SYNTHESIS_FIX.md)
Group Workspace Documents and Prompts Load Recovery
Fixed a Group Workspace page-load regression where active-group initialization could fail on a missing prompt-role UI container and stop the rest of the page from rendering correctly.
Group document and prompt content now continue loading even if the prompt permission banner or create-button container is unavailable during startup, preventing blank content areas caused by a JavaScript null-reference error.
Added functional and UI regression coverage for the guarded prompt-role path so future changes do not reintroduce the same startup failure.
(Ref: group_workspaces.html, test_group_workspace_prompt_role_ui_guard.py, test_group_workspace_prompt_role_containers_ui.py)
Audio and Video Enhanced Citation Badge Consistency
Fixed blob-backed audio and video documents showing Standard citations in workspace details even when Enhanced Citations was enabled and the same files already opened through the enhanced citation experience on the chat page.
Document metadata now persists and normalizes the enhanced_citations flag from blob-backed storage state so existing media uploads and new uploads both render the correct Enhanced badge across workspace and chat flows.
Added regression coverage and fix documentation for the metadata normalization path.
(Ref: functions_documents.py, route_enhanced_citations.py, test_media_enhanced_citations_metadata_flag.py, MEDIA_ENHANCED_CITATION_BADGE_FIX.md)
User Interface Enhancements
AI Voice Conversations Setup Guide
Added an in-app Setup Guide modal to the AI Voice Conversations admin card so admins can configure Azure Speech without leaving Admin Settings.
The guide includes a live snapshot of the current Speech configuration, explains key versus managed-identity authentication, and now walks admins through enabling the required custom domain in Azure portal before verifying the endpoint on Keys and Endpoint.
(Ref: admin_settings.html, _speech_service_info.html, azure_speech_managed_identity_manul_setup.md, test_admin_multimedia_guidance.py)
Original source - Apr 8, 2026
- Date parsed from source:Apr 8, 2026
- First seen by Releasebot:Oct 14, 2026
v0.241.002
Simple Chat improves branded support pages, repairs streaming chat retries and edits across compatibility and multi-endpoint setups, and resolves profile loading errors affecting Fact Memory and tutorial settings.
Bug Fixes
Support Pages Respect Custom Application Titles
Fixed user-facing Support copy so Latest Features, Previous Release Features, and Send Feedback no longer fall back to the default SimpleChat name in customized deployments.
Support feedback email drafts now also use the configured application title, keeping the user-facing support flow consistent with branded environments.
(Ref: support_menu_config.py, support_send_feedback.html, route_backend_settings.py, support application-title personalization)
Streaming Retry and Edit Thought Tracking
Fixed retry and edit requests in streaming chat when they fall back to the compatibility bridge and continue through the legacy /api/chat path.
Assistant response tracking is now initialized for both new-message and retry/edit flows before content safety runs, preventing compatibility-mode failures caused by an uninitialized ThoughtTracker.
(Ref: route_backend_chats.py, ThoughtTracker, /api/chat/stream, /api/chat, retry/edit compatibility bridge)
Streaming Retry and Edit Multi-Endpoint Model Resolution
Fixed streaming retry and edit requests that route through the compatibility bridge so they no longer fail during AI model initialization in multi-endpoint environments.
The compatibility path now reuses the in-app multi-endpoint GPT resolver and Foundry fallback helpers instead of depending on script-only helper functions that were not available inside the Flask runtime.
(Ref: route_backend_chats.py, /api/chat/stream, /api/chat, multi-endpoint model resolution, Foundry fallback helpers)
Profile Fact Memory Script Deduplication
Fixed a profile-page load failure where duplicate inline Fact Memory and tutorial script blocks could trigger browser parse errors such as Identifier 'factMemorySearchInput' has already been declared.
Removed duplicated profile sections, modal markup, and shadowing helper definitions so Fact Memory, tutorial preferences, and retention settings now initialize from one canonical script path.
Added source-level and UI regression coverage so duplicate profile blocks and page-load JavaScript errors are caught earlier.
(Ref: profile.html, test_profile_fact_memory_script_dedup.py, test_profile_fact_memory_editor.py, profile page script initialization)
Original source - Apr 8, 2026
- Date parsed from source:Apr 8, 2026
- First seen by Releasebot:Oct 14, 2026
v0.241.001
Simple Chat releases a broad update with clearer memory, multi-endpoint model management, guided tutorials, chat completion notifications, and background responses. It also expands tabular data analysis, conversation summaries and exports, workspace controls, and deployment and security options.
New Features
Original source
Fact Memory Instructions and Facts
Added a clearer Fact Memory experience that distinguishes always-on Instructions from relevance-based Facts on the profile page and in chat-time recall.
Chat responses now surface saved-memory usage more clearly through separate Instruction Memory and Fact Memory Recall thoughts and citations.
Admin Settings Latest Features and the user-facing Support > Latest Features page now include Fact Memory guidance and screenshots, and admins can show or hide that announcement from General > User-Facing Latest Features.
(Ref: semantic_kernel_fact_memory_store.py, route_backend_chats.py, route_frontend_profile.py, profile.html, support_menu_config.py, admin_settings.html, latest_features.html, fact memory guidance and latest-features coverage)
Support Menu and User-Facing Latest Features
Added a configurable Support menu for signed-in app users so teams can expose Latest Features and Send Feedback directly in everyday navigation.
Admins can rename the Support menu, control the internal feedback-recipient email address, and choose exactly which latest-feature cards are shared with end users from the General tab.
The user-facing Latest Features page now mirrors the available admin screenshots more closely, includes clearer guidance about why each feature matters, and adds direct links into Chat, Personal Workspace, or Support destinations where users can try the feature.
The Admin Settings Latest Features tab now also calls out the General-tab User-Facing Latest Features checklist so admins can see where feature sharing is configured.
(Ref: support_menu_config.py, route_frontend_support.py, latest_features.html, support_send_feedback.html, admin_settings.html, test_support_menu_user_feature.py, support menu configuration and user-facing latest features)
MultiGPT Endpoint Management
Added multi-endpoint model management so admins can define multiple global model endpoints and users can add personal or group-scoped endpoints when those workspace features are enabled.
Personal Workspace and Group Workspace now surface dedicated model endpoint management cards, and agent/model selection can use combined global plus workspace endpoint lists instead of relying on a single shared deployment.
The endpoint workflow supports Azure OpenAI and Azure AI Foundry discovery flows, including model fetch/test operations and endpoint-based Foundry agent import.
(Ref: route_backend_models.py, route_frontend_admin_settings.py, workspace_model_endpoints.js, admin_model_endpoints.js, workspace.html, group_workspaces.html, test_workspace_multi_endpoints.py)
Guided Chat Tutorial
Expanded the in-app chat tutorial into a fuller guided walkthrough of the current chat experience so new users can learn the live interface in context.
The tutorial now walks through the main chat toolbar, workspace and scope controls, conversation search, advanced search, selection mode, bulk actions, export-related flows, and message-level actions such as retry, edit, feedback, thoughts, and citations.
The walkthrough also includes reliability improvements for dynamic chat UI elements, including sidebar expansion, popup alignment, and tutorial-owned surfaces for steps that depend on transient menus.
(Ref: chat-tutorial.js, chats.html, chat-sidebar-conversations.js, test_chat_tutorial_selector_coverage.py, chat tutorial walkthrough)
Personal Workspace Guided Tutorial
Added a dedicated in-app tutorial for Personal Workspace so users can learn document, prompt, agent, action, and tag workflows directly inside the workspace page.
The walkthrough covers uploads, search and filters, list and grid views, document details, row actions, bulk selection flows, tag management, prompt management, agent management, and action management.
It also includes layout-aware positioning and state-restoration behavior so the overlay remains aligned while tabs, filters, menus, and collapsible sections change during the walkthrough.
(Ref: workspace.html, workspace-tutorial.js, test_personal_workspace_tutorial_selector_coverage.py, test_personal_workspace_tutorial_document_flow.py, test_workspace_tutorial_reposition_fix.py, test_workspace_tutorial_layer_order_fix.py)
Conversation Completion Notifications
Added personal chat completion notifications so users who leave a conversation before the assistant finishes can still see that a response is ready.
Notification clicks deep-link back into the completed conversation, and personal conversations now show a green unread dot until the assistant response is opened.
The unread state and notification lifecycle are wired into the chat conversation list, sidebar list, and mark-read flow so the indicator clears once the conversation is actually viewed.
(Ref: conversation notifications, unread assistant responses, route_backend_chats.py, route_backend_conversations.py, functions_notifications.py, functions_conversation_unread.py, chat-conversations.js, chat-sidebar-conversations.js)
Background Chat Completion Away From Chat Page
Updated streaming chat execution so assistant responses can continue running after the user leaves the chat page instead of stopping when the browser disconnects from the stream.
This keeps final assistant persistence, unread markers, and completion notifications reachable even when users navigate into Personal, Group, or other pages while a reply is still generating.
(Ref: background stream execution, BackgroundStreamBridge, route_backend_chats.py, test_chat_stream_background_execution.py, test_streaming_only_chat_path.py)
SimpleChat Startup and Scheduler Separation
Added deployment guidance for local development, Azure App Service native Python startup, and container runtimes so administrators can choose between direct Gunicorn startup and optional python app.py handoff behavior with clear environment-variable guidance.
Extracted the scheduler-style logging timer, approval expiration, and retention loops into a shared background task module and added a dedicated simplechat_scheduler.py entrypoint so scheduled work can run in a separate process or job.
This allows the web app to use Gunicorn with workers=2 without duplicating scheduler loops inside every worker process, while keeping a legacy override available for single-process environments.
(Ref: app.py, background_tasks.py, simplechat_scheduler.py, SIMPLECHAT_STARTUP.md, test_startup_scheduler_support.py)
Deployment, Setup, and Upgrade Documentation Refresh
Expanded the deployment guidance so teams can more quickly choose between manual deployment, Azure CLI, Bicep, Terraform, and special-environment setup paths from the main setup documentation.
Added a dedicated upgrade guide for existing deployments that separates native Python App Service upgrades from container-based App Service upgrades, including when to use VS Code deployment, ZIP deploy, deployment slots, azd deploy, azd provision, or azd up.
Clarified developer and production runtime documentation with explicit local-development guidance, Azure production startup expectations, Gunicorn startup rules, container entrypoint behavior, and scheduler-separation recommendations.
(Ref: setup_instructions.md, setup_instructions_manual.md, how-to/upgrade_paths.md, running_simplechat_azure_production.md, running_simplechat_locally.md, SIMPLECHAT_STARTUP.md, deployment and developer documentation)
Chat Completion Notifications
Added personal chat completion notifications so users who leave a streaming conversation before the assistant finishes now receive a notification when the AI response is ready.
Notification clicks deep-link directly back to the completed conversation, and personal conversations now show a green unread dot in both chat conversation lists until that response is opened.
The unread state is cleared automatically when the conversation is opened or when the user stays on the chat page through stream completion, keeping the active-view experience clean without adding heartbeat tracking.
(Ref: route_backend_chats.py, route_backend_conversations.py, functions_notifications.py, functions_conversation_unread.py, chat-conversations.js, chat-sidebar-conversations.js, chat-streaming.js, test_chat_completion_notifications.py)
Configurable Tabular Preview Blob Size Limit
Added an admin-configurable maximum blob size for tabular file previews, replacing the previous hardcoded limit. Default is 200 MB.
New Tabular Preview Limits card in the Enhanced Citations section of Admin Settings (Citations tab) lets admins increase or decrease the limit based on their compute resources and user population.
Setting is stored as tabular_preview_max_blob_size_mb and accepts values from 1 to 1024 MB.
(Ref: route_enhanced_citations.py, functions_settings.py, admin_settings.html)
Tabular Preview Memory Optimization
The /api/enhanced_citations/tabular_preview endpoint no longer loads entire files into a DataFrame. It now uses nrows limits in pandas.read_csv/read_excel to read only the rows needed for the preview, and checks blob size before downloading to reject oversized files early.
(Ref: route_enhanced_citations.py)
Persistent Conversation Summaries
Summaries generated during conversation export are now saved to the conversation document in Cosmos DB for future reuse.
Cached summaries include message_time_start and message_time_end — when a conversation has new messages beyond the cached range, a fresh summary is generated automatically.
The conversation details modal now shows a Summary card at the top. If a summary exists it displays the content, generation date, and model used. If no summary exists a Generate Summary button with model selector lets users create one on demand.
A Regenerate button is available on existing summaries to force a refresh with the currently selected model.
New POST /api/conversations/<id>/summary endpoint accepts an optional model_deployment and returns the generated summary.
The GET /api/conversations/<id>/metadata response now includes a summary field.
Extracted generate_conversation_summary() as a shared helper used by both the export pipeline and the new API endpoint.
(Ref: route_backend_conversation_export.py, route_backend_conversations.py, chat-conversation-details.js, functions_conversation_metadata.py)
PDF Conversation Export
Added PDF as a third export format option alongside JSON and Markdown, giving users a print-ready, visually styled conversation archive.
PDF output renders chat messages with colored bubbles that mirror the live chat UI: blue for user messages, gray for assistant messages, green for file messages, and amber for system messages.
Message content is converted from Markdown to HTML for rich formatting (bold, italic, code blocks, lists, tables) inside the PDF.
Full appendix structure is included (metadata, message details, references, processing thoughts, supplemental messages), matching the Markdown export layout.
Rendering uses PyMuPDF's Story API on US Letter paper with 0.5-inch margins and automatic multi-page overflow.
Works with both single-file and ZIP packaging; intro summaries are supported in PDF as well.
Frontend format step updated to a 3-column card grid with a new PDF card using the bi-filetype-pdf icon.
(Ref: route_backend_conversation_export.py, chat-export.js, PyMuPDF Story API, conversation export workflow)
Conversation Export Intro Summaries
Added an optional AI-generated intro summary step to the conversation export workflow, so each exported chat can begin with a short abstract before the full transcript.
Summary model selection now reuses the same model list shown in the chat composer, keeping the export flow aligned with the main chat experience.
Works for both JSON and Markdown exports, including ZIP exports where each conversation keeps its own summary metadata.
(Ref: route_backend_conversation_export.py, chat-export.js, conversation export workflow)
Agent & Action User Tracking (created_by / modified_by)
All agent and action documents (personal, group, and global) now include created_by, created_at, modified_by, and modified_at fields that track which user created or last modified the entity.
On updates, the original created_by and created_at values are preserved while modified_by and modified_at are refreshed with the current user and timestamp.
New optional user_id parameter added to save_group_agent, save_global_agent, save_group_action, and save_global_action for caller-supplied user tracking (backward-compatible, defaults to None).
(Ref: functions_personal_agents.py, functions_group_agents.py, functions_global_agents.py, functions_personal_actions.py, functions_group_actions.py, functions_global_actions.py)
Activity Logging for Agent & Action CRUD Operations
Every create, update, and delete operation on agents and actions now generates an activity log record in the activity_logs Cosmos DB container and Application Insights.
Six new logging functions: log_agent_creation, log_agent_update, log_agent_deletion, log_action_creation, log_action_update, log_action_deletion.
Activity records include: user_id, activity_type, entity_type (agent/action), operation (create/update/delete), workspace_type (personal/group/global), and workspace_context (group_id when applicable).
Logging is fire-and-forget — failures never break the CRUD operation.
All personal, group, and admin routes for both agents and actions are wired up.
(Ref: functions_activity_logging.py, route_backend_agents.py, route_backend_plugins.py)
Tabular Data Analysis — SK Mini-Agent for Normal Chat
Tabular files (CSV, XLSX, XLS, XLSM) detected in search results now trigger a lightweight Semantic Kernel mini-agent that pre-computes data analysis before the main LLM response. This brings the same analytical depth previously only available in full agent mode to every normal chat conversation.
Automatic Detection: When AI Search results include tabular files from any workspace (personal, group, or public) or chat-uploaded documents, the system automatically identifies them via the TABULAR_EXTENSIONS configuration and routes the query through the SK mini-agent pipeline.
Unified Workspace and Chat Handling: Tabular files are processed identically regardless of their storage location. The plugin resolves blob paths across all four container types (user-documents, group-documents, public-documents, personal-chat) with automatic fallback resolution if the primary source lookup fails. A user asking about an Excel file in their personal workspace gets the same analytical treatment as one asking about a CSV uploaded directly to a chat.
Six Data Analysis Functions: The TabularProcessingPlugin exposes describe_tabular_file, aggregate_column (sum, mean, count, min, max, median, std, nunique, value_counts), filter_rows (==, !=, >, <, >=, <=, contains, startswith, endswith), query_tabular_data (pandas query syntax), group_by_aggregate, and list_tabular_files — all registered as Semantic Kernel functions that the mini-agent orchestrates autonomously.
Pre-Computed Results Injected as Context: The mini-agent's computed analysis (exact numerical results, aggregations, filtered data) is injected into the main LLM's system context so it can present accurate, citation-backed answers without hallucinating numbers.
Graceful Degradation: If the mini-agent analysis fails for any reason, the system falls back to instructing the main LLM to use the tabular processing plugin functions directly, preserving full functionality.
Non-Streaming and Streaming Support: Both chat modes are supported. The mini-agent runs synchronously before the main LLM call in both paths.
Requires Enhanced Citations: The tabular processing plugin depends on the blob storage client initialized by the enhanced citations system. The enable_enhanced_citations admin setting must be enabled for tabular data analysis to activate.
(Ref: run_tabular_sk_analysis(), TabularProcessingPlugin, collect_tabular_sk_citations(), TABULAR_EXTENSIONS)
Tabular Tool Execution Citations
Every tool call made by the SK mini-agent during tabular analysis is captured and surfaced as an agent citation, providing full transparency into the data analysis pipeline.
Automatic Capture: The existing @plugin_function_logger decorator on all TabularProcessingPlugin functions records each invocation including function name, input parameters, returned results, execution duration, and success/failure status.
Citation Format: Tool execution citations appear in the same "Agent Tool Execution" modal used by full agent mode, showing tool_name (e.g., TabularProcessingPlugin.aggregate_column), function_arguments (the exact parameters passed), and function_result (the computed data returned).
End-to-End Auditability: Users can verify exactly which aggregations, filters, or queries were run against their data, what parameters were used, and what raw results were returned — before the LLM summarized them into the final response.
(Ref: collect_tabular_sk_citations(), plugin_invocation_logger.py)
Assistant Citation Artifact Storage for Large Tabular Payloads
Moved large raw tabular and tool citation payloads off the main assistant message document and into linked child artifact records so tool-heavy answers stay compact in primary chat storage.
Added helper flows in functions_message_artifacts.py to keep a compact citation summary on the assistant message, externalize the full raw citation payload into assistant_artifact records with assistant_artifact_chunk support for larger payloads, and rehydrate those raw payloads later for exports or deeper inspection.
Assistant messages now keep compact summaries such as tool name, reduced arguments, counts, and a few sample rows while the heavy raw citation payload is referenced through artifact_id and raw_payload_externalized=True.
Updated chat persistence to store the linked artifact records during message save, excluded those artifact records from normal chat history and conversation views, and updated export flows to stitch the preserved raw payloads back together when needed.
This reduced primary assistant message size, lowered the risk of hitting Cosmos DB per-item limits on large tabular responses, reduced heavy citation data carried through normal chat reads, and preserved the full raw evidence for export and debugging.
Additional size reductions in the same phase compacted stored citation summaries, dropped noisy tabular citation arguments such as user_id, conversation_id, and source, and removed the duplicate user_message field from assistant message documents.
(Ref: functions_message_artifacts.py, route_backend_chats.py, route_backend_conversations.py, route_frontend_conversations.py, route_backend_conversation_export.py, test_assistant_citation_artifact_storage.py, ASSISTANT_CITATION_ARTIFACT_STORAGE_FIX.md)
SK Mini-Agent Performance Optimization
Reduced typical tabular analysis time from ~74 seconds to an estimated ~30-33 seconds (55-60% reduction) through three complementary optimizations.
DataFrame Caching: Per-request in-memory cache eliminates redundant blob downloads. Previously, each of the ~8 tool calls in a typical analysis downloaded and parsed the same file independently. Now the file is downloaded once and subsequent calls read from cache. Cache is automatically scoped to the request (new plugin instance per analysis) and garbage-collected afterward.
Pre-Dispatch Schema Injection: File schemas (columns, data types, row counts, and a 3-row preview) are pre-loaded and injected into the SK mini-agent's system prompt before execution begins. This eliminates 2 LLM round-trips that were previously spent on file discovery (list_tabular_files) and schema inspection (describe_tabular_file), allowing the model to jump directly to analysis tool calls.
Async Plugin Functions: All six @kernel_function methods converted to async def using asyncio.to_thread(). This enables Semantic Kernel's built-in asyncio.gather() to truly parallelize batched tool calls (e.g., 3 simultaneous aggregate_column calls) instead of executing them serially on the event loop.
Batching Instructions: The system prompt now instructs the model to batch multiple independent function calls in a single response, reducing LLM round-trips further.
(Ref: _df_cache, asyncio.to_thread, pre-dispatch schema injection in run_tabular_sk_analysis())
SQL Test Connection Button
Added a "Test Connection" button to the SQL Database Configuration section (Step 3) of the action wizard, allowing users to validate database connectivity before saving.
Supports all database types: SQL Server, Azure SQL (with managed identity), PostgreSQL, MySQL, and SQLite.
Shows inline success/failure alerts with a 15-second timeout cap and sanitized error messages.
New backend endpoint: POST /api/plugins/test-sql-connection.
(Ref: route_backend_plugins.py, plugin_modal_stepper.js, _plugin_modal.html)
Per-Message Export
Added export and action options to the three-dots dropdown menu on individual chat messages (both AI and user messages).
Export to Markdown: Downloads the message as a .md file with a role header. Entirely client-side.
Export to Word: Generates a styled .docx document via a new backend endpoint (POST /api/message/export-word). Includes Markdown-to-Word formatting (headings, bold, italic, code blocks, lists) and a citations section when present.
Use as Prompt: Inserts the raw message content directly into the chat input box for reuse — no clipboard, one click and it's ready to edit and send.
Open in Email: Opens the user's default email client with the message pre-filled in the subject and body via mailto:.
New options appear below a divider in the dropdown, preserving existing actions (Delete, Retry, Edit, Feedback).
(Ref: chat-message-export.js, chat-messages.js, route_backend_conversation_export.py, per-message export)
Custom Azure Environment Support in Bicep Deployment
Added custom as a supported cloudEnvironment value alongside public and usgovernment, enabling deployment to sovereign or custom Azure environments via Bicep.
New Bicep parameters for custom environments: customBlobStorageSuffix, customGraphUrl, customIdentityUrl, customResourceManagerUrl, customCognitiveServicesScope, and customSearchResourceUrl. All of these are automatically populated from az.environment() defaults except customGraphUrl, which must be explicitly provided for custom cloud environments and can be overridden as needed.
The cloudEnvironment parameter now defaults intelligently based on az.environment().name, and legacy values (AzureCloud, AzureUSGovernment) are mapped to SimpleChat's expected values (public, usgovernment).
Custom environment app settings (CUSTOM_GRAPH_URL_VALUE, CUSTOM_IDENTITY_URL_VALUE, CUSTOM_RESOURCE_MANAGER_URL_VALUE, etc.) are conditionally injected only when azurePlatform == 'custom'.
Replaced hardcoded ACR domain logic and auth issuer URLs with dynamic az.environment() lookups for better cross-cloud compatibility.
Fixed trailing slash handling in AUTHORITY URL construction in config.py using rstrip('/').
(Ref: deployers/bicep/main.bicep, deployers/bicep/modules/appService.bicep, config.py, sovereign cloud support)
Redis Key Vault Authentication
Added a new key_vault authentication type for Redis, allowing the Redis access key to be retrieved securely from Azure Key Vault at runtime rather than stored directly in settings.
Applies across all Redis usage paths: app settings cache (app_settings_cache.py), session management (app.py), and the Redis test connection flow (route_backend_settings.py).
Uses retrieve_secret_direct() from functions_keyvault.py to fetch the Redis key by its Key Vault secret name. Respects key_vault_identity for a user-assigned managed identity on the Key Vault client.
New admin setting fields: redis_auth_type (values: key, managed_identity, key_vault) and redis_key (used as the Key Vault secret name when key_vault auth type is selected).
Files Modified: app_settings_cache.py, app.py configure_sessions, route_backend_settings.py _test_redis_connection, functions_keyvault.py retrieve_secret_direct
Cross-Cloud Deployment Improvements
Updated the Azure CLI, AZD, Bicep, and Terraform deployment paths to better align with the current SimpleChat runtime configuration and reduce post-deployment manual fixes.
Added optional Azure Video Indexer deployment support with cloud-aware defaults, including the correct endpoint and ARM API version handling for Azure Commercial, Azure Government, and registered custom clouds.
(Ref: deployers/azure.yaml, deployers/azurecli/deploy-simplechat.ps1, deployers/bicep/main.bicep, deployers/bicep/modules/videoIndexer.bicep, deployers/terraform/main.tf, application/single_app/functions_settings.py)
Idle Session Timeout Feature
Added a new idle timer that automatically clears the user session after a configurable set time and redirects to the main chat login page.
Added a frontend idle warning modal that pops up after a configurable set time, but disappears if the user moves the mouse over the chat window or interacts with the app in any way.
Default values are used if the idle logout and warning values are not set.
Idle logout and idle warning values are validated and auto-fixed as needed.
Added a new admin switch to enable or disable idle session timeout and warning behavior.
Timeout and warning inputs are grouped under a toggleable section in General > System Settings.
(Ref: application/single_app/templates/admin_settings.html, application/single_app/static/js/admin/admin_settings.js, application/single_app/route_frontend_admin_settings.py, application/single_app/functions_settings.py, application/single_app/app.py, application/single_app/templates/base.html, application/single_app/static/js/idle-logout-warning.js, application/single_app/config.py, functional_tests/test_idle_logout_timeout.py, application/single_app/route_frontend_authentication.py)
User Interface Enhancements
Agent Responded Thought — Seconds & Total Duration
The "responded" thought now shows time in seconds instead of milliseconds, and clarifies it is the total time from the initial user message (e.g., 'gpt-5-nano' responded (16.3s from initial message)).
A request_start_time is now captured at the top of both the non-streaming and streaming chat handlers, so the duration reflects the full request lifecycle — including content safety, hybrid search, and agent invocation — not just the model response time.
Applies to all three agent paths: local SK agents (non-streaming), Azure AI Foundry agents, and streaming SK agents.
(Ref: route_backend_chats.py, request_start_time, agent responded thoughts)
Enhanced Agent Execution Thoughts
Added detailed model-level status messages during agent execution, giving users full visibility into each stage of the AI pipeline.
Model Identification: A new "Sending to '{deployment_name}'" thought appears immediately after "Sending to agent", showing the exact model deployment being used (e.g., gpt-5-nano).
Generating Response: A "Generating response..." thought now appears before the agent begins its invocation loop, matching the existing behavior for non-agent GPT calls.
Model Responded with Duration: A "'{deployment_name}' responded ({duration}ms)" thought appears after the agent completes, showing total wall-clock execution time.
Applies to all three agent paths: local SK agents (streaming and non-streaming) and Azure AI Foundry agents.
Uses the existing generation step type (lightning bolt icon) — no frontend changes required.
(Ref: route_backend_chats.py, ThoughtTracker, agent execution pipeline)
List/Grid View Toggle for Agents and Actions
Added a list/grid view toggle to all four workspace areas: personal agents, personal actions, group agents, and group actions.
Grid View: Large cards with type icon, humanized name, truncated description, and action buttons (Chat, View, Edit, Delete as applicable).
List View: Improved table layout with fixed column widths (28%/47%/25%), humanized display names, and truncated descriptions with hover tooltips for full text.
View Button: New eye-icon button on every agent and action that opens a read-only detail modal with gradient-header summary cards (Basic Information, Model Configuration, Instructions for agents; Basic Information, Configuration for actions).
Name Humanization: Display names are now automatically parsed — underscores and camelCase/PascalCase boundaries are converted to properly spaced, title-cased words (e.g., myCustomAgent → My Custom Agent).
Persistent Preference: View mode selection (list/grid) is saved per area in localStorage and restored on page load.
New shared utility module view-utils.js provides reusable functions for all four workspace areas.
(Ref: view-utils.js, workspace_agents.js, workspace_plugins.js, plugin_common.js, group_agents.js, group_plugins.js, workspace.html, group_workspaces.html, styles.css)
Chat with Agent Button for Group Agents
Added a "Chat" button to each group agent row, allowing users to quickly select a group agent and navigate to the chat page.
(Ref: group_agents.js, group_workspaces.html)
Hidden Deprecated Action Types
Deprecated action types (sql_schema, ui_test, queue_storage, blob_storage, embedding_model) are now hidden from the action creation wizard type selector. Existing actions of these types remain functional.
(Ref: plugin_modal_stepper.js)
Advanced Settings Collapse Toggle
Step 4 (Advanced) content is now hidden behind a collapsible toggle button ("Show Advanced Settings") instead of being displayed by default. Reduces visual noise for most users.
For SQL action types, the redundant additional fields UI in Step 4 is hidden entirely since all SQL configuration is already handled in Step 3.
Step 5 (Summary) no longer shows the raw additional fields JSON dump for SQL types, since that data is already shown in the SQL Database Configuration summary card.
(Ref: _plugin_modal.html, plugin_modal_stepper.js)
Bug Fixes
Chat History Citation Replay Improvements
Fixed follow-up prompts so prior assistant turns can reuse stored citation results, including tabular tool outputs, instead of relying only on the visible assistant message text.
Assistant history replay now hydrates stored citation artifacts and deduplicates repeated cross-sheet tabular calls so later file results, such as Licensing workbook values, remain available to the next turn.
History-context diagnostics remain available in message metadata and optional debug citations, while the thoughts timeline stays compact.
(Ref: route_backend_chats.py, functions_message_artifacts.py, chat-thoughts.js, chat-messages.js, test_chat_stream_history_context_fix.py, CHAT_STREAM_HISTORY_CONTEXT_FIX.md)
Document Revision Visibility and Storage Preservation
Fixed same-name document uploads so new revisions now inherit the previous document's editable metadata, including classification, tags, title, abstract, keywords, publication date, authors, and sharing state.
Workspace lists and chat search now only use the current revision, while older revisions remain retained for future comparison work instead of staying active in normal workspace flows.
Document deletion now offers a choice between deleting only the current revision or deleting all stored revisions for that document family.
Blob storage now preserves older source files by keeping the active document at the existing alias path and archiving prior current revisions into a revision-family hierarchy before the alias path is overwritten.
(Ref: document revision families, current-only workspace visibility, hybrid blob alias plus archived revision storage, functions_documents.py, functions_search.py, route_enhanced_citations.py, workspace/group/public document flows)
Python Runtime Dependency Refresh and Supply-Chain Hardening
Continued the requirements hardening work from v0.240.014 by tightening the main application runtime to exact package pins, reducing dependency drift across local development, CI, and Azure deployments to help mitigate supply-chain exposure.
Upgraded the Flask runtime stack to Flask==3.1.3 and Werkzeug==3.1.6, and updated the shared Markup import path to markupsafe so the app starts correctly with Flask 3's package boundary changes.
Refreshed key runtime dependencies including gunicorn, requests, openai, Markdown, markdown2, azure-ai-projects, azure-ai-agents, pyjwt, pypdf, semantic-kernel, protobuf, redis, pyodbc, PyMySQL, cython, and aiohttp to pick up current security, compatibility, and capability improvements while keeping builds reproducible.
(Ref: application/single_app/requirements.txt, application/single_app/config.py, functional_tests/test_flask_markup_import_fix.py, docs/explanation/fixes/FLASK_31_MARKUP_IMPORT_FIX.md)
Dependency Pinning and Requirements Hardening
Pinned previously floating Python package requirements to exact versions across the main app, UI test, deployer, and external app requirement files to reduce unexpected dependency drift and tighten supply-chain control.
Corrected stale external app dependency entries by replacing dotenv with python-dotenv, removing the stdlib-only logging package, removing an unused Flask requirement from the databaseseeder utility, and adding pytest-playwright so the UI test dependency set matches the pytest fixture usage in the test suite.
(Ref: application/single_app/requirements.txt, ui_tests/requirements.txt, deployers/bicep/requirements.txt, application/external_apps/databaseseeder/requirements.txt, application/external_apps/bulkloader/requirements.txt)
Settings Default Merge Persistence Fix
Fixed app settings merge detection in get_settings() where deep_merge_dicts() mutates the existing settings object in place, causing change detection to always evaluate as unchanged.
Updated deep_merge_dicts() to return a boolean changed flag and wired get_settings() to call upsert_item() when settings_changed is True, so missing default keys correctly trigger persistence back to Cosmos DB.
Added a functional regression test to validate the merge detection and persistence markers.
(Ref: application/single_app/functions_settings.py, application/single_app/config.py, functional_tests/test_settings_deep_merge_persistence_fix.py)
Pillow PSD Upload Hardening
Updated the application to use pillow==12.1.1, moving the app off the vulnerable Pillow range for specially crafted PSD image parsing.
Hardened admin logo and favicon uploads so Pillow now only opens the PNG and JPEG formats already allowed by the route, preventing disguised PSD content from being decoded during upload processing.
(Ref: application/single_app/requirements.txt, application/single_app/route_frontend_admin_settings.py, functional_tests/test_pillow_psd_upload_hardening.py)
Changed-Files GitHub Action Supply Chain Remediation
Updated the release-notes pull request workflow to use the patched tj-actions/[email protected] release after the March 2025 supply chain compromise affecting older tag families.
Added a functional regression check to ensure the workflow does not drift back to the known malicious commit or an older vulnerable action reference.
(Ref: release-notes-check.yml, test_changed_files_action_version.py, GitHub Actions workflow security, CI dependency pinning)
Personal Conversation Notification Scope Detection
Fixed a scope-detection bug where personal chat completions could save successfully without creating a completion notification or unread dot when unrelated active workspace state was still present in session.
Personal completion-side effects are now determined from the saved conversation type instead of active workspace session values.
(Ref: personal chat scope gating, route_backend_chats.py, test_chat_completion_notifications.py)
Distributed Background Task Locks
Added Cosmos-backed distributed lock documents for approval expiry and retention policy background jobs so duplicate execution is reduced across multiple Gunicorn workers and App Service instances.
Kept the current web-app-hosted scheduler model intact so teams can continue running these jobs from the existing App Service while improving cross-worker coordination.
Updated the startup documentation and added functional validation for the distributed lock wiring.
(Ref: background_tasks.py, SIMPLECHAT_STARTUP.md, test_background_task_distributed_locks.py, test_startup_scheduler_support.py)
Background Task Default-On Gating
Updated the web runtime background task gate so scheduler loops now start by default even when SIMPLECHAT_RUN_BACKGROUND_TASKS is unset.
Only explicit false-like values such as 0, false, no, or off now disable the background loops, which matches the requested deployment behavior.
Updated the startup guide and Gunicorn runtime validation test to reflect the new default-on behavior.
(Ref: app.py, SIMPLECHAT_STARTUP.md, test_gunicorn_startup_support.py)
Gunicorn Production Startup Support
Updated the app bootstrap so production deployments can run cleanly under Gunicorn instead of relying on Flask's built-in server, which is a poor fit for long-lived streaming chat requests on App Service.
Added a shared Gunicorn config, switched the container entrypoint to Gunicorn, and made application initialization idempotent so startup logic can run safely in multi-worker web processes.
Background timer and retention loops are now disabled by default under Gunicorn workers to avoid duplicating scheduler-style threads across workers, while local debug startup continues to use the Flask development server.
(Ref: app.py, gunicorn.conf.py, Dockerfile, test_gunicorn_startup_support.py)
Streaming-Only Chat Path
Updated the first-party chat experience so normal sends, retries, and message edits now use the streaming chat path instead of maintaining a separate non-streaming UI path.
Preserved parity-sensitive behavior by extending the streaming flow to finalize image-generation responses correctly and by adding a backend compatibility bridge for retry, edit, and image-generation requests while the legacy /api/chat route remains in transition.
Removed the chat-page streaming toggle, updated the UI to treat streaming as required behavior, and added regression coverage to prevent first-party chat modules from drifting back to direct /api/chat calls.
(Ref: route_backend_chats.py, chat-messages.js, chat-streaming.js, chat-retry.js, chat-edit.js, chats.html, test_streaming_only_chat_path.py)
Embedding Retry-After Wait Time Handling
Fixed embedding retries so 429 Too Many Requests responses now honor server-provided wait times from Retry-After style headers instead of always using local backoff timing.
This reduces avoidable repeat throttling during document processing, batched embedding generation, and search embedding requests when Azure OpenAI asks the client to wait.
The existing exponential backoff behavior remains in place as a fallback when the service does not provide a usable retry delay.
(Ref: functions_content.py, embedding retry logic, test_embedding_rate_limit_wait_time.py)
SQL Plugin Key Vault Secret Storage
New and updated SQL Query and SQL Schema actions now store sensitive values such as connection strings and passwords in Azure Key Vault when Key Vault secret storage is enabled.
Editing an existing SQL action now preserves stored Key Vault-backed credentials, including the SQL test connection flow, so users do not need to re-enter unchanged secrets just to validate or save the action.
Personal, group, and global action flows now preserve existing secret references during updates, clean them up correctly on delete, and redact secret-bearing plugin values from logs.
Existing plaintext SQL action credentials are not backfilled automatically; they move to Key Vault the next time the action is saved while Key Vault storage is enabled.
(Ref: functions_keyvault.py, route_backend_plugins.py, plugin_modal_stepper.js, workspace_plugins.js, SQL action configuration)
Group/Public Expanded Document Tags
Fixed group and public workspace list views so expanding a document now shows its tags, matching the personal workspace experience.
The fix adds color-coded tag badges with a No tags fallback in expanded document details without changing the existing backend document APIs.
(Ref: group_workspaces.html, public_workspace.js, expanded document details, workspace tag rendering)
Agent Save Validation for Round-Tripped Metadata
Fixed agent saves failing when an existing personal, group, or global agent was edited and the browser sent back backend-managed audit fields such as created_at, created_by, modified_at, and modified_by.
Agent payload sanitization now strips backend-managed audit and Cosmos metadata before schema validation, while preserving server-side tracking during persistence.
(Ref: functions_agent_payload.py, route_backend_agents.py, agent schema validation, functional test coverage)
Live Tool Invocation Thoughts During Streaming
Updated plugin thought handling so the chat can surface an immediate Invoking Plugin.Function thought as soon as a tool starts, instead of waiting until the tool completes.
Streaming chat now polls pending thoughts while the response is still in flight, allowing the active status badge to switch from model-sending text to the currently executing plugin call during long-running tools such as WaitPlugin.wait.
Completed plugin thoughts still include the richer human-readable summaries for wait, math, and generic plugin executions, and broader plugin coverage remains enabled through auto-wrapping for manifest-loaded plugins.
(Ref: plugin_invocation_logger.py, plugin_invocation_thoughts.py, chat-thoughts.js, chat-streaming.js, logged_plugin_loader.py, test_logged_core_plugins.py)
Multi-Sheet Workbook Tabular Analysis
Fixed multi-sheet Excel workbooks being analyzed from the wrong worksheet during tabular chat responses. Questions that clearly target a specific tab, such as asset values in a workbook with Assets, Balance, and Income sheets, no longer silently default to the first sheet.
Tabular runtime analysis now requires explicit sheet_name or sheet_index selection for analytical calls on multi-sheet workbooks, and the SK mini-agent preload now includes workbook sheet inventory and per-sheet schemas so the model can choose the correct worksheet before computing results.
Enhanced citations and tabular previews now preserve worksheet context, using Sheet: <name> for sheet-specific references and Location: Workbook Schema for workbook-level schema citations instead of generic Page 1 labels. The tabular preview modal also supports switching between workbook sheets.
(Ref: tabular_processing_plugin.py, route_backend_chats.py, route_enhanced_citations.py, chat-enhanced-citations.js, chat-citations.js, chat-messages.js)
Tabular Citation Conversation Ownership Check
Fixed an IDOR vulnerability on /api/enhanced_citations/tabular where any authenticated user who could guess a conversation_id and file_id could download another user's chat-uploaded tabular files.
The endpoint now reads the conversation document from Cosmos DB and verifies that conversation.user_id matches the current user before serving the blob. Returns 403 Forbidden on mismatch and 404 if the conversation does not exist.
(Ref: route_enhanced_citations.py, cosmos_conversations_container)
Tabular Preview max_rows Parameter Validation
The max_rows query parameter on /api/enhanced_citations/tabular_preview was parsed with bare int(), causing a 500 error on non-integer input. Switched to Flask's request.args.get(..., type=int) which silently falls back to the default on invalid input, matching the pattern used by other endpoints.
(Ref: route_enhanced_citations.py)
Streaming Chat Post-Finalization JSON Sanitization
Fixed a repeatable late-stream failure where assistant responses could appear nearly complete and then end with a Stream interrupted warning during final persistence.
Normalized non-finite numeric values from citation payloads before assistant messages, assistant artifacts, and terminal chat payloads are written, preventing Cosmos DB from rejecting invalid JSON.
This improves reliability for streaming chat, compatibility streaming, and the standard JSON response path when tool or search citations include sparse or tabular numeric values.
(Ref: functions_message_artifacts.py, route_backend_chats.py, test_chat_post_stream_json_sanitization.py, post-stream citation sanitization)
On-Demand Summary Generation — Content Normalization Fix
Fixed the POST /api/conversations/<id>/summary endpoint failing with an error when generating summaries from the conversation details modal.
Root cause: message content in Cosmos DB can be a list of content parts (e.g., [{type: "text", text: "..."}]) rather than a plain string. The endpoint was passing the raw list as content_text, which either stringified incorrectly or produced empty transcript text.
Now uses _normalize_content() to properly flatten list/dict content into plain text, matching the export pipeline's behavior.
(Ref: route_backend_conversations.py, _normalize_content, generate_conversation_summary)
Export Summary Reasoning-Model Compatibility
Fixed export intro summary generation failing or returning empty content with reasoning-series models (gpt-5, o1, o3) through a series of incremental fixes: using developer role instead of system for instruction messages, removing all max_tokens / max_completion_tokens caps so the model decides output length naturally, and adding null-safe content extraction for None responses.
Summary now includes ALL messages (user, assistant, system, file, image analysis) for full context, with a simplified prompt producing 1-2 factual paragraphs.
Added detailed debug logging showing message count, character count, model name, role, and finish reason.
(Ref: route_backend_conversation_export.py, _build_summary_intro, generate_conversation_summary)
Conversation Export Schema and Markdown Refresh
Fixed conversation exports lagging behind the live chat schema. JSON exports now include processing thoughts, normalized citations, and the raw document/web/tool citation buckets stored with assistant messages.
Fixed Markdown exports being too flat and text-heavy by reorganizing them into a transcript-first layout with appendices for metadata, message details, references, thoughts, and supplemental records.
Fixed exported conversations including content that no longer matched the visible chat by filtering deleted messages and inactive-thread retries, then reapplying thread-aware ordering before export.
(Ref: route_backend_conversation_export.py, test_conversation_export.py, conversation export rendering)
Export Tag/Classification Rendering Fix
Fixed conversation tags and classifications rendering as raw Python dicts (e.g., {'category': 'model', 'value': 'gpt-5'}) in both Markdown and PDF exports.
Tags now display as readable category: value strings, with smart handling for participant names, document titles, and generic category/value pairs.
(Ref: route_backend_conversation_export.py, _format_tag helper, Markdown/PDF metadata rendering)
Export Summary Error Visibility
Added debug_print and log_event logging to all summary generation error paths, including the empty-response path that previously failed silently.
The actual error detail is now shown in both Markdown and PDF exports when summary generation fails, replacing the generic "could not be generated" message.
(Ref: route_backend_conversation_export.py, _build_summary_intro, export error rendering)
Content Safety for Streaming Chat Path
Added full Azure AI Content Safety checking to the streaming (/api/chat/stream) SSE path, matching the existing non-streaming (/api/chat) implementation.
Previously, only the non-streaming path performed content safety analysis; streaming conversations bypassed safety checks entirely.
Implementation includes: AnalyzeTextOptions analysis, severity threshold checking (severity ≥ 4 blocks the message), blocklist matching, persistence of blocked messages to cosmos_safety_container, creation of safety-role message documents, and proper SSE event delivery of blocked status to the client.
On block, the streaming generator yields the safety message and [DONE] event, then stops — preventing any further LLM invocation.
Errors in the content safety call are caught and logged without breaking the chat flow, consistent with the non-streaming behavior.
(Ref: route_backend_chats.py, streaming SSE generator, AnalyzeTextOptions, cosmos_safety_container)
SQL Schema Plugin — Eliminate Redundant Schema Calls
Fixed agent calling get_database_schema twice per query even though the full schema was already injected into the agent's instructions at load time.
Root cause: The @kernel_function descriptions in sql_schema_plugin.py said "ALWAYS call this function FIRST," which overrode the schema context already available in the instructions.
Updated all four function descriptions (get_database_schema, get_table_schema, get_table_list, get_relationships) to use the resilient pattern: "If the database schema is already provided in your instructions, use that directly and do NOT call this function."
This eliminates ~400ms+ of unnecessary database round trips per query and aligns with the same pattern already used in sql_query_plugin.py.
(Ref: sql_schema_plugin.py, @kernel_function descriptions, schema injection)
SQL Schema Plugin — Empty Tables from INFORMATION_SCHEMA
Fixed get_database_schema returning 'tables': {} (empty) despite the database having tables, while relationships were returned correctly.
Root cause: SQL Server table/column enumeration used INFORMATION_SCHEMA.TABLES and INFORMATION_SCHEMA.COLUMNS views, which returned empty results in the Azure SQL environment. Meanwhile, the relationships query used sys.foreign_keys/sys.tables/sys.columns catalog views which worked perfectly.
Migrated all SQL Server schema queries to use sys.* catalog views consistently: sys.tables/sys.schemas for table enumeration, sys.columns with TYPE_NAME() for column details, and sy - Mar 3, 2026
- Date parsed from source:Mar 3, 2026
- First seen by Releasebot:Oct 14, 2026
v0.239.002
Simple Chat fixes workspace scope unlocking in conversations and restores loading for public workspace documents.
View the features with screenshots and descriptions
https://microsoft.github.io/simplechat/latest-release/
Bug Fixes
Workspace Scope Lock Unlock Fix
Fixed bug where unlocking workspace scope in chat conversations was not working correctly.
(Ref: chat-conversations.js, selectConversation(), workspace scope lock state)
Public Workspace Documents Loading Fix
Fixed JavaScript error preventing public workspace documents from loading. Removed incorrect import statement that caused a module resolution failure.
(Ref: public_workspace.js, JS import fix, public workspace document list)
Original source
This is the end. You've seen all the release notes in this feed!
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.