Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
474 commits
Select commit Hold shift + click to select a range
77b3385
v0.237.007 (#680)
paullizer Jan 30, 2026
4f296b5
Merge branch 'main' into Staging
paullizer Jan 30, 2026
fd66132
Merge branch 'Development' into servicenow-integration, and moved fix…
Jan 31, 2026
0c161ae
fix the version number in config.py
Jan 31, 2026
bf90baf
Security: Restrict group agent loading to active group only
Jan 31, 2026
8a9ad98
Fixed an instruction error that caused semantic kernel to fall back t…
Jan 31, 2026
28a557e
Merge pull request #640 from vivche/servicenow-integration
Bionic711 Jan 31, 2026
82f8a89
Fixed! The issue was caused by duplicated code blocks (#683)
paullizer Feb 3, 2026
4c24cc8
Manage group frontend bug (#684)
paullizer Feb 3, 2026
b66bee9
initial feature add
paullizer Feb 4, 2026
ef5f468
added tag endpoint
paullizer Feb 4, 2026
af15c05
return unused tags too
paullizer Feb 4, 2026
ef14203
Bicepfix (#690)
eldong Feb 5, 2026
296d987
working on ui
paullizer Feb 5, 2026
a4a4224
Search bug fix 20260229 (#697)
paullizer Feb 9, 2026
541dd60
Overhauled and updated file extension definition & MAG audio file tra…
Xeelee33 Feb 9, 2026
7c2eb0c
Update release_notes.md (#698)
paullizer Feb 9, 2026
e102efe
Merge branch 'Staging' into Development
paullizer Feb 9, 2026
3e208c7
v0.237.009 (#699)
paullizer Feb 9, 2026
6862f6e
Merge branch 'main' into Staging
paullizer Feb 9, 2026
2429489
removed duplicate code causing bugs (#701)
paullizer Feb 9, 2026
b529d60
Chat file upload error (#709)
paullizer Feb 11, 2026
0cd14b9
Merge branch 'Staging' into Development
paullizer Feb 11, 2026
19b37bd
Development (#710)
paullizer Feb 11, 2026
98e86b6
Merge branch 'main' into Staging
paullizer Feb 11, 2026
7381359
edit folders
paullizer Feb 18, 2026
66f9287
sorting fixed
paullizer Feb 18, 2026
654739a
chat with working with personal
paullizer Feb 19, 2026
3daf815
tagging added to groups and public workspaces
paullizer Feb 20, 2026
e317139
added tags to group and public workspace
paullizer Feb 22, 2026
6d9e6b0
fixed tags in group and public workspaces
paullizer Feb 23, 2026
978ca4f
Update .gitignore
paullizer Feb 23, 2026
de3a523
fixed citation bug
paullizer Feb 23, 2026
4befb2c
cleaned up workspaces
paullizer Feb 23, 2026
47d07da
Bugfix/globalagentscreation (#720)
Bionic711 Feb 23, 2026
f36f990
Add Dockerfile and update devcontainer configuration for Python envir…
SteveCInVA Feb 23, 2026
dc746a4
extended document dropdown width
paullizer Feb 23, 2026
b256a07
Update chat-documents.js
paullizer Feb 23, 2026
b74c077
Create CLAUDE.md
paullizer Feb 23, 2026
8168bb1
added features and updated release notes
paullizer Feb 23, 2026
59e8297
Added ability for admin to disable/enable workspace lock
paullizer Feb 23, 2026
deae525
Merge branch 'Development' into workspace-folders
paullizer Feb 23, 2026
e0da096
Add tags to blob metadata when enhanced citations is enabled
paullizer Feb 23, 2026
edcce6d
Merge branch 'workspace-folders' of https://github.com/microsoft/simp…
paullizer Feb 23, 2026
f78e8a5
Fix/agent action 500 error (#731)
paullizer Feb 23, 2026
b92ec5a
Update release_notes.md
paullizer Feb 23, 2026
a924a30
Merge branch 'workspace-folders' into Development
paullizer Feb 23, 2026
a334377
fixed active workspace bug for users switching public workspaces
paullizer Feb 24, 2026
3100d85
optional only allow owner to create/edit/delete group agents and actions
paullizer Feb 24, 2026
d3667b2
Merge pull request #736 from microsoft/feature/owner-required-to-crea…
Bionic711 Feb 24, 2026
9e29f22
Added retention policy UI for groups and public workspaces (#730)
eldong Feb 24, 2026
ac64920
fix_scroll - Added overflow: auto to message-content css class to all…
chadpalmer Feb 25, 2026
0ea45c2
fixed showToast
paullizer Feb 25, 2026
0bd9f12
Hardened `get_user_settings()` to normalize malformed or missing `set…
paullizer Feb 26, 2026
fc501be
Update docker customization for CA and pip
clarked-msft Feb 27, 2026
eac2ad6
Update release notes
clarked-msft Feb 27, 2026
64a3ab9
Revert changes to older release notes...
clarked-msft Feb 27, 2026
79670ed
Apply suggestions from code review
clarked-msft Feb 27, 2026
df8964f
fixed potential sql injection with new tags feature
paullizer Mar 2, 2026
941a4d2
Merge pull request #751 from microsoft/fix/tag-sql-injection
Bionic711 Mar 2, 2026
f10997d
Merge branch 'Development' into fix-harden-get-user-settings
Bionic711 Mar 2, 2026
3d7e8d4
Merge pull request #744 from microsoft/fix-harden-get-user-settings
Bionic711 Mar 2, 2026
3acf5c2
Merge branch 'Development' into fix-public-workspace-active-bug
Bionic711 Mar 2, 2026
834bfc4
Apply suggestion from @Copilot
paullizer Mar 2, 2026
ca93510
fix js location
paullizer Mar 2, 2026
d3fcf85
Merge branch 'fix-public-workspace-active-bug' of https://github.com/…
paullizer Mar 2, 2026
433a7c3
update wrapper (#741)
Bionic711 Mar 2, 2026
b64c9e8
Merge pull request #735 from microsoft/fix-public-workspace-active-bug
Bionic711 Mar 2, 2026
271a338
Merge branch 'Staging' into Development
nadoylemsft Mar 2, 2026
7a3d467
v0.238.024 - Development into Staging (#733)
paullizer Mar 2, 2026
f7e1e41
Added ability to export conversations & set retention policies (#734)
eldong Mar 3, 2026
12a88ca
Merge branch 'Staging' into Development
paullizer Mar 3, 2026
6c3e292
Development (#754)
paullizer Mar 3, 2026
a05ce52
moved retention to manage pages (#755)
paullizer Mar 3, 2026
0b80ded
Development (#756)
paullizer Mar 3, 2026
6850326
Merge branch 'main' into Staging
paullizer Mar 3, 2026
7e7ece8
fixed bug causing js error (#759)
paullizer Mar 3, 2026
355cef7
fixed workspace scope unlock bug (#760)
paullizer Mar 3, 2026
079f8e4
Merge branch 'Staging' into Development
paullizer Mar 3, 2026
54c54cb
Development (#761)
paullizer Mar 3, 2026
e38f704
Merge branch 'main' into Staging
paullizer Mar 3, 2026
d31afe0
feedback-user-timeout - Added user idle timeout feature that auto log…
chadpalmer Mar 4, 2026
7430b13
Merge branch 'Development' into docker-customization
clarked-msft Mar 5, 2026
fa96a44
Update docker custimization doc
clarked-msft Mar 5, 2026
22dae79
Add future release version to release notes
clarked-msft Mar 5, 2026
dcde439
upd for cross-cloud calls and unification of OIDC endpoints/calls (#771)
Bionic711 Mar 5, 2026
b1b2a82
feedback-user-timeout - fixed merge conflict with microsoft update.
chadpalmer Mar 5, 2026
f216d68
Merge branch 'Development' into feedback-user-timeout
chadpalmer Mar 5, 2026
765a847
feedback-user-timeout - Moved new settings variables to app admin set…
chadpalmer Mar 5, 2026
14c3195
Feature/thoughts (#778)
paullizer Mar 6, 2026
80af084
Fix bugs 2026 03 05 (#779)
paullizer Mar 6, 2026
b8a91b0
Feature tabular data (#780)
paullizer Mar 6, 2026
36d79d2
Fix bugs 2026 03 05 (#781)
paullizer Mar 6, 2026
b8c62a1
feedback-user-timeout - Cleaned up code as per some of copilot's sugg…
chadpalmer Mar 6, 2026
a23023e
Updated all 4 @kernel_function descriptions in sql_schema_plugin.py t…
paullizer Mar 6, 2026
09d33e3
improve thought timeline
paullizer Mar 6, 2026
8f692f9
feedback-user-timeout - Added admin settings toggle to allow turning …
chadpalmer Mar 6, 2026
8be4f31
added export pdf and conversation summary
paullizer Mar 9, 2026
3443ad0
Redis key vault auth and 3 bug fixes (#767)
Xeelee33 Mar 9, 2026
7bf1e6e
Merge branch 'Development' into Thought-and-fixes
paullizer Mar 9, 2026
38ea889
Update release_notes.md
paullizer Mar 9, 2026
0f370dd
Merge branch 'Thought-and-fixes' of https://github.com/microsoft/simp…
paullizer Mar 9, 2026
36649c9
Merge branch 'Development' into docker-customization
clarked-msft Mar 10, 2026
3d346ea
Merge pull request #747 from clarked-msft/docker-customization
Bionic711 Mar 10, 2026
7fd6a0a
feedback-user-timeout - Added logging and method comments.
chadpalmer Mar 10, 2026
9315739
feedback-user-timeout - Merge latest updates and fix merge conflicts.
chadpalmer Mar 11, 2026
0519999
feedback-user-timeout - Updated/cleaned up release notes and added mi…
chadpalmer Mar 11, 2026
6431de2
feedback-user-timeout - More code clean up for safe_int method and cs…
chadpalmer Mar 11, 2026
8ea5b81
feedback-user-timeout - More code clean up for unit tests and making …
chadpalmer Mar 12, 2026
7c1b464
Feature/admin configurable access denied message (#772)
vivche Mar 12, 2026
aee0a6c
Bicep support for airgap (#792)
clarked-msft Mar 12, 2026
4b869f2
feedback-user-timeout - Added missing utils file to repo.
chadpalmer Mar 12, 2026
1be8338
feedback-user-timeout - Made api call's interaction with idle timeout…
chadpalmer Mar 12, 2026
dce26d7
feedback-user-timeout - Adjusted idle timeout initialization to accou…
chadpalmer Mar 12, 2026
1de1b06
feedback-user-timeout - Adjusted idle heartbeat reauth handling.
chadpalmer Mar 12, 2026
567d661
feedback-user-timeout - Moved fixes documentation into v0.239.006 fol…
chadpalmer Mar 12, 2026
55f539b
updates to tabular processing
paullizer Mar 12, 2026
8b3a712
improved tool calling and thought tracking
paullizer Mar 13, 2026
fe46c15
Add per-message export feature for Markdown and Word formats (#783)
eldong Mar 13, 2026
71ca9dd
resolved bug fixes
paullizer Mar 13, 2026
4eddb1d
removed test files
paullizer Mar 13, 2026
fa9b24c
feedback-user-timeout - Merged latest updates from microsoft simplech…
chadpalmer Mar 13, 2026
c87df0a
feedback-user-timeout - Updated doc folder name to match new update v…
chadpalmer Mar 13, 2026
1b81680
multi-tab excel support
paullizer Mar 13, 2026
59969ab
fix agent creation bug
paullizer Mar 13, 2026
8daeecc
trigger cla check
chadpalmer Mar 13, 2026
d034247
added tag view to document lists in groups and public workspaces
paullizer Mar 16, 2026
a5a95f4
feedback-user-timeout - Updated default idle enabled values to false,…
chadpalmer Mar 16, 2026
6f856fe
support key vault, supported ext update, 429 wait support, move TAB vars
paullizer Mar 17, 2026
df10715
Fixed the streaming/thought regression
paullizer Mar 17, 2026
296fa93
feedback-user-timeout - Addressed issues flagged by github copilot.
chadpalmer Mar 17, 2026
4045e55
feedback-user-timeout - Addressed more issues flagged by github copilot.
chadpalmer Mar 17, 2026
7bb95f3
improved multi-tab
paullizer Mar 18, 2026
ba56b25
big improvement in multi-tab support
paullizer Mar 18, 2026
c32e914
Merge branch 'Development' into Thought-and-fixes
paullizer Mar 18, 2026
f3a63f8
feedback-user-timeout - Addressed even more issues flagged by github …
chadpalmer Mar 18, 2026
5df24e4
added search to scope, tags, prompts, llms, and agents dropdown
paullizer Mar 18, 2026
690be83
Merge branch 'Thought-and-fixes' of https://github.com/microsoft/simp…
paullizer Mar 18, 2026
9f85f67
improve button layout in chat
paullizer Mar 18, 2026
88ed93d
fixed reasoning button status on chats.html load
paullizer Mar 18, 2026
57b117f
feedback-user-timeout - Addressed yet more issues flagged by github c…
chadpalmer Mar 18, 2026
b1aa8f3
feedback-user-timeout - Addressed another round of issues flagged by …
chadpalmer Mar 18, 2026
3f2b8e8
feedback-user-timeout - Updated docs and added docstring.
chadpalmer Mar 18, 2026
8df1620
feedback-user-timeout - Toned down potential log entries.
chadpalmer Mar 18, 2026
54e37c8
made streaming primary
paullizer Mar 19, 2026
41fba50
significant performance improvement and chat notifications
paullizer Mar 20, 2026
e7d2020
fixed code quality checks
paullizer Mar 23, 2026
19c20bf
cleaned up streaming buttons, its only option now
paullizer Mar 23, 2026
681f561
moved reasoning and voice response to the right
paullizer Mar 23, 2026
1616130
removed openapi validate and use swagger from an url, now only suppor…
paullizer Mar 23, 2026
935e9ea
exit if using this config
paullizer Mar 23, 2026
6faea2c
public_workspace.js fix
paullizer Mar 23, 2026
fb5468d
Removed the duplicated refreshGroups property from GroupManager, so t…
paullizer Mar 23, 2026
f32d5fd
fixed debug_print support
paullizer Mar 23, 2026
0f145bd
resolved redundant assignment
paullizer Mar 23, 2026
8721b37
resolved python syntax error
paullizer Mar 23, 2026
7266f3e
fixed unreachable
paullizer Mar 23, 2026
579b552
Merge pull request #782 from microsoft/Thought-and-fixes
Bionic711 Mar 23, 2026
e7881ba
Merge branch 'Staging' into fix/release_notes-merge_fix-20260323
paullizer Mar 23, 2026
4abee3c
Merge branch 'main' into fix/release_notes-merge_fix-20260323
paullizer Mar 23, 2026
0ab5772
Update release_notes.md
paullizer Mar 23, 2026
5ff07e7
Update release_notes.md
paullizer Mar 23, 2026
81a863c
Merge pull request #808 from microsoft/fix/release_notes-merge_fix-20…
Bionic711 Mar 23, 2026
ea6a341
Merge branch 'Development' into feedback-user-timeout
chadpalmer Mar 24, 2026
2b63923
feedback-user-timeout - Added custom message field, enforce min 10 mi…
chadpalmer Mar 24, 2026
e178c24
feedback-user-timeout - Updated/fixed issues flagged by github copilot.
chadpalmer Mar 24, 2026
79d3e18
feedback-user-timeout - Added doc files in new folder.
chadpalmer Mar 24, 2026
85be8a7
Feature/aifoundryagents (#812)
Bionic711 Mar 31, 2026
39343c3
Deployment updates (#815)
paullizer Mar 31, 2026
24c79c8
Feature/chattutorial (#816)
paullizer Mar 31, 2026
3209cb8
Fixed auto-delete of custom logo images issue.
chadpalmer Apr 1, 2026
5d465ff
feedback-user-timeout - Fixed merge conflict.
chadpalmer Apr 1, 2026
1cc8ff7
feedback-user-timeout - Fixed several code issues from merge and dele…
chadpalmer Apr 1, 2026
e269b51
feedback-user-timeout - Added missing logo images.
chadpalmer Apr 1, 2026
0527e8d
Merge pull request #800 from Xeelee33/feedback-user-timeout
Bionic711 Apr 1, 2026
ec117ec
Fix/20260331 (#818)
paullizer Apr 2, 2026
187d570
Fix/doc versioning (#821)
paullizer Apr 7, 2026
108b6a1
Feature/support menu (#824)
paullizer Apr 7, 2026
6b18370
Fix/20260407 (#826)
paullizer Apr 8, 2026
eaa82cc
Release notes (#828)
paullizer Apr 8, 2026
54b48f6
Development (#827)
paullizer Apr 8, 2026
e86c093
Fix/0.241.001 videos (#830)
paullizer Apr 8, 2026
6d0b627
Fix/20260408 (#832)
paullizer Apr 8, 2026
7ee5fad
Merge branch 'Staging' into Development
paullizer Apr 8, 2026
776211a
Development (#831)
paullizer Apr 8, 2026
b07e3a5
Merge branch 'main' into Staging
paullizer Apr 8, 2026
18fe665
Docs/20260408 videos (#837)
paullizer Apr 8, 2026
6520f0b
Development (#838)
paullizer Apr 8, 2026
1062cbd
Merge branch 'main' into Staging
paullizer Apr 8, 2026
6026d34
Docs/20260408 videos (#840)
paullizer Apr 8, 2026
40ae69e
Merge branch 'Staging' into Development
paullizer Apr 8, 2026
0727a97
v0.241.002 - Development (#841)
paullizer Apr 8, 2026
7bb10cb
Docs/20260408 videos (#843)
paullizer Apr 8, 2026
89cdd12
Merge branch 'Staging' into Development
paullizer Apr 8, 2026
ddc105f
Development (#844)
paullizer Apr 8, 2026
cf6f0db
Merge branch 'main' into Staging
paullizer Apr 8, 2026
59ed754
Development - v0.241.006 (#846)
paullizer Apr 9, 2026
9162930
group workspace fix (#847)
paullizer Apr 9, 2026
5164589
Merge branch 'Staging' into Development
paullizer Apr 9, 2026
854ff69
Development (#848)
paullizer Apr 9, 2026
9a53d07
Merge branch 'main' into Staging
paullizer Apr 9, 2026
2112192
Bugfix/850 (#851)
Bionic711 Apr 9, 2026
17025e5
Docs/video speech update (#852)
paullizer Apr 9, 2026
57acc5f
Action/release notes (#853)
paullizer Apr 9, 2026
b22f215
Merge branch 'Staging' into Development
paullizer Apr 9, 2026
8ba1b2e
Development (#854)
paullizer Apr 9, 2026
5969ac1
fix bug for media enhanced citations (#855)
paullizer Apr 9, 2026
10f9bb2
Merge branch 'Staging' into Development
paullizer Apr 9, 2026
63984d1
Development (#856)
paullizer Apr 9, 2026
15bc1b1
Merge branch 'main' into Staging
paullizer Apr 9, 2026
99d6997
Merge branch 'Staging' into Development
paullizer Apr 9, 2026
1ec813c
added contributing details (#857)
paullizer Apr 13, 2026
ef945e5
Visual and content update to Github Pages (#858)
paullizer Apr 13, 2026
c176f84
Development (#860)
paullizer Apr 13, 2026
b4279f1
Merge branch 'main' into Staging
paullizer Apr 13, 2026
d9caaa3
Merge branch 'main' into Development
paullizer Apr 13, 2026
c7815e3
Merge branch 'Staging' into Development
paullizer Apr 13, 2026
fca0332
repairing branch workflow (#863)
paullizer Apr 13, 2026
0ebb2bc
fix global agent bug (#879)
paullizer May 7, 2026
ac190fc
Fix/auth hardening (#883)
paullizer May 7, 2026
054cf5d
improve login loggin (#884)
paullizer May 7, 2026
58f017d
Bugfix/241.006 (#885)
Bionic711 May 7, 2026
acb545e
Update release notes for version v0.241.022
paullizer May 7, 2026
9ab4f52
Fix formatting and enhance mobile UI support description
paullizer May 7, 2026
11f00a1
Update version number in config.py
paullizer May 7, 2026
570bb91
Change release version to v0.241.007
paullizer May 7, 2026
0f9b4d2
v0.241.007 (#886)
paullizer May 7, 2026
c1a0637
Feature/governance (#904)
Bionic711 Jun 10, 2026
3781c1c
Feature/governance (#908)
Bionic711 Jun 16, 2026
3fab884
Beta branch integration and PR readiness (#912)
paullizer Jun 18, 2026
a7147be
feat: improve tabular SK large result handling (#913)
paullizer Jun 18, 2026
d6cf2ac
Feature/tabular sk large result pagination (#914)
paullizer Jun 18, 2026
9957673
Add model endpoint identity setup guide (#915)
paullizer Jun 18, 2026
1f70347
Upgrade requests requirement (#873)
clarked-msft Jun 18, 2026
7762f8f
Fix chat model icon avatars (#916)
paullizer Jun 18, 2026
04d2c4c
initial
paullizer Jun 18, 2026
c672c04
Docs/0.250.001 (#922)
paullizer Jun 24, 2026
c1c8397
Record Staging as merged into Development for v0.250.001
paullizer Jun 25, 2026
7544947
Disable BuildKit for dev image publishers (#924)
paullizer Jun 25, 2026
c047d34
v0.250.001 (#923)
paullizer Jun 25, 2026
44d35b5
Record main as merged into Development for v0.250.001 (#926)
paullizer Jun 25, 2026
0082284
Sync Development to Staging after main history merge (#927)
paullizer Jun 25, 2026
a6f118a
Repair v0.250.001 release branch ancestry (#928)
paullizer Jun 25, 2026
8ab56b9
Record main ancestry for v0.250.001 release flow
paullizer Jun 25, 2026
b15b7e4
Record Staging ancestry for v0.250.001 release flow
paullizer Jun 25, 2026
b49e5d6
Merge pull request #929 from microsoft/fix/repair-release-ancestry-v0…
paullizer Jun 25, 2026
189e829
Merge pull request #930 from microsoft/Development
paullizer Jun 25, 2026
6544424
Restore azd config in staging workflow
paullizer Jun 25, 2026
dd16923
Merge pull request #931 from microsoft/fix/staging-azd-restore-config
paullizer Jun 25, 2026
fc2e214
Merge pull request #932 from microsoft/Development
paullizer Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 8 additions & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ STYLE
Always conform to the coding styles defined in styleguide.md in the root of the repo when generating code. If the styleguide.md is missing, try to check the readme.md in the repo root. If readme.md is missing or contains no useful style information, use the default style of the language. If the default style is not defined, follow best practices, accessibility guidelines, and readability.
Use @terminal when answering questions about Git.

FRONTEND ASSETS
Browser runtime JavaScript must always be served from a local SimpleChat static asset. Do not add CDN-hosted JavaScript, dynamic imports, worker scripts, or JavaScript companion assets to app templates, static JavaScript, static CSS, or frontend routes. Vendor pinned local copies under `application/single_app/static/`, reference them with local static paths, and keep CSP aligned with local-only script/style sources. See `.github/instructions/local_browser_assets.instructions.md` for the full rule.

PERSISTENCE
You are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.

Expand Down Expand Up @@ -50,4 +53,8 @@ Make code changes only if you have high confidence they can solve the problem. W
Confirm the root cause is fixed. Review your solution for logic correctness and robustness. Iterate until you are extremely confident the fix is complete and all tests pass.

7. Final Reflection and Additional Testing
Reflect carefully on the original intent of the user and the problem statement. Think about potential edge cases or scenarios that may not be covered by existing tests. Write additional tests that would need to pass to fully validate the correctness of your solution. Run these new tests and ensure they all pass. Be aware that there are additional hidden tests that must also pass for the solution to be successful. Do not assume the task is complete just because the visible tests pass; continue refining until you are confident the fix is robust and comprehensive.
Reflect carefully on the original intent of the user and the problem statement. Think about potential edge cases or scenarios that may not be covered by existing tests. Write additional tests that would need to pass to fully validate the correctness of your solution. Run these new tests and ensure they all pass. Be aware that there are additional hidden tests that must also pass for the solution to be successful. Do not assume the task is complete just because the visible tests pass; continue refining until you are confident the fix is robust and comprehensive.

VERSIONING
Application versioning remains in `application/single_app/config.py`.
Deployer and CI/CD versioning lives separately in `deployers/version.txt`; when files under `deployers/` are modified, increment `deployers/version.txt` as part of the same change, defaulting to a patch bump unless a deliberate minor or major compatibility change is intended.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ applyTo: '**/*.py'
Treat all of the following as untrusted authorization inputs unless the code proves otherwise:

- `conversation_id`, `message_id`, `document_id`, `file_id`, `approval_id`, `group_id`, and `public_workspace_id`
- `user_id`, Entra object IDs, owner IDs, participant IDs, shared user IDs, and any other identity value supplied by a route path, request body, query string, plugin argument, client-side state, or datastore field
- `activeGroupOid` and `activePublicWorkspaceOid` values loaded from user settings
- Plugin or tool-call arguments such as `user_id`, `conversation_id`, `group_id`, `public_workspace_id`, `scope_id`, and `scope_type`

Expand All @@ -19,6 +20,8 @@ Treat all of the following as untrusted authorization inputs unless the code pro
Use these patterns by default:

- Revalidate personal conversation ownership with `_authorize_personal_conversation_read(...)`, `_authorize_personal_conversation_access(...)`, or an explicit owner check before reading dependent data.
- Revalidate user-profile and user-settings reads with an object-level helper such as `_authorize_user_profile_access(...)`, `_read_authorized_user_profile_document(...)`, or `get_user_settings(...)` instead of reading arbitrary user documents by request-derived `user_id`.
- For cross-user profile display, prove a legitimate app relationship at the read boundary: self, Admin, shared group membership with view allowed, shared document relationship, or shared collaboration conversation participation.
- Route `activeGroupOid` writes through `update_active_group_for_user(...)`.
- Route `activePublicWorkspaceOid` writes through `update_active_public_workspace_for_user(...)`.
- Resolve active group scope through `require_active_group(...)` instead of raw settings reads in backend and plugin code.
Expand All @@ -33,6 +36,8 @@ Do not add new code that does any of the following without a reviewed exception:
- Call `update_user_settings(...)` with a literal `{"activeGroupOid": ...}` payload outside `update_active_group_for_user(...)`
- Call `update_user_settings(...)` with a literal `{"activePublicWorkspaceOid": ...}` payload outside `update_active_public_workspace_for_user(...)`
- Read `activeGroupOid` or `activePublicWorkspaceOid` directly from raw settings in backend routes or plugins when a shared validator exists
- Call `cosmos_user_settings_container.read_item(...)` from frontend/API routes with a route, query, or body `user_id` unless an object-level user-profile authorization helper has already allowed that exact target.
- Treat `@login_required`, `@user_required`, `@admin_required`, Graph lookup availability, GUID opacity, or frontend-only UI reachability as sufficient authorization for another user's profile, settings, photo, membership, or ownership metadata.
- Expose `user_id`, `conversation_id`, `group_id`, `public_workspace_id`, `scope_id`, or `scope_type` in a `@kernel_function` surface without immediately rebinding those values to the authorized request context
- Read a personal conversation by request-derived `conversation_id` and continue to message, blob, or feedback work without an explicit ownership boundary

Expand Down Expand Up @@ -84,20 +89,33 @@ conversation_item = cosmos_conversations_container.read_item(
)
```

```python
user_doc = cosmos_user_settings_container.read_item(
item=user_id,
partition_key=user_id,
)
```

## PR Review Checklist

For any Python change that reads or mutates user, group, workspace, conversation, or plugin-scoped data:

1. Identify every caller-controlled id that crosses into a data read or mutation.
2. Revalidate ownership or membership at the sensitive operation boundary, not just at route entry.
3. Use the dedicated active-scope validators instead of raw settings reads and writes.
4. Rebind plugin scope parameters to the authorized request context before storage, blob, or Cosmos access.
5. Add or update a regression test when the change touches an authorization boundary.
2. For every object id, answer: "Why can this caller read or mutate this exact target object?" Do not rely on login, role-only decorators, hidden UI, GUID entropy, or prior lookup flows.
3. Revalidate ownership, membership, or another explicit relationship at the sensitive operation boundary, not just at route entry.
4. For reverse lookups from opaque IDs to identity metadata, verify that the endpoint does not become a user-enumeration or app-membership oracle.
5. Use the dedicated active-scope validators instead of raw settings reads and writes.
6. Rebind plugin scope parameters to the authorized request context before storage, blob, or Cosmos access.
7. Add or update a regression test when the change touches an authorization boundary.

## Workflow Guardrail

This repository includes a Development PR check in `.github/workflows/broken-access-control-check.yml` backed by `scripts/check_broken_access_control.py`.

For full-code audits, run the manual GitHub Actions workflow `.github/workflows/broken-access-control-full-scan.yml`. It scans tracked Python files under the selected target paths, uploads a report artifact, and defaults to advisory mode because legacy findings may exist. Set `fail_on_findings=true` only when the current baseline is clean enough for a blocking run.

For an agent-assisted review, run the workspace prompt `.github/prompts/broken-access-control-audit.prompt.md` and provide the feature area, target paths, or incident class you want reviewed.

If a reviewed exception is unavoidable, add the suppression token below near the specific line and include a justification comment:

```text
Expand Down
44 changes: 44 additions & 0 deletions .github/instructions/local_browser_assets.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
applyTo: '**/*.html, **/*.js, **/*.css, **/*.py'
---

# Local Browser Runtime Assets

## Critical Requirement

Never load browser runtime JavaScript from the public Internet. If SimpleChat uses a JavaScript library, framework, worker script, module, import map, or plugin runtime in the browser, keep a pinned local copy in the repository and serve it from the SimpleChat app.

This rule also applies to browser companion assets that are required by JavaScript libraries, including CSS, fonts, source maps, worker files, WebAssembly files, dictionaries, and library-managed fallback downloads.

## Required Pattern

- Store third-party browser assets under an appropriate local static path, such as `application/single_app/static/js/<vendor>/` or `application/single_app/static/css/<vendor>/`.
- Reference browser assets with local static paths, preferably through `url_for('static', filename='...')` in templates.
- Pin the library version in the filename, folder name, documentation, or related test when the upstream asset is copied locally.
- Preserve required third-party license or attribution files when vendoring assets.
- Disable library options that auto-download extra browser assets unless those extra assets are also available locally.
- Keep Content Security Policy `script-src` and `style-src` aligned with local assets; do not loosen CSP to allow a CDN for browser runtime code.

## Disallowed Patterns

Do not add runtime browser references to:

- CDN-hosted scripts or modules, such as `cdn.jsdelivr.net`, `unpkg.com`, `cdnjs.cloudflare.com`, `esm.sh`, `skypack.dev`, `code.jquery.com`, or `stackpath.bootstrapcdn.com`.
- Remote CSS for JavaScript-driven widgets when a local copy is expected.
- Library defaults that inject remote `<script>` or `<link>` tags.
- Dynamic imports from public Internet URLs.
- Worker, source map, WASM, dictionary, font, or plugin URLs hosted outside the SimpleChat app.

## Validation Checklist

When adding or changing browser assets:

1. Search templates, static JavaScript, static CSS, and relevant Python-rendered frontend routes for new external asset URLs.
2. Confirm all browser JavaScript dependencies are served from `/static/...` or `url_for('static', ...)`.
3. Add or update a regression test when fixing an external asset dependency.
4. Run a syntax check for changed JavaScript files, such as `node --check <file>`.
5. Run `git -c core.whitespace=blank-at-eol,blank-at-eof,space-before-tab,cr-at-eol diff --check` before finishing.

## Allowed Network Calls

This rule does not prohibit authenticated API calls, application data fetches, server-side Azure service calls, proxied map tile requests, user-requested links, or documentation-only examples. It specifically prohibits loading browser runtime code and required companion assets from public Internet CDNs.
19 changes: 19 additions & 0 deletions .github/instructions/update_deployer_version.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
applyTo: 'deployers/**'
---

# Deployer Version Management

When a change modifies files under `deployers/`, include an update to `deployers/version.txt` in the same change.

## Rules

- Keep the deployer version separate from `application/single_app/config.py`.
- `deployers/version.txt` must contain only a plain semantic version string in the format `X.Y.Z`.
- Default to a patch increment when a deployer change is made: `1.0.0` -> `1.0.1`.
- Use a minor or major increment only when the deployer workflow or CI/CD compatibility contract changes intentionally.
- If the only deployer file being changed is `deployers/version.txt`, do not add an extra bump beyond the intended version update.

## Applies To

This rule covers deployer scripts, `azure.yaml`, `.azure` environment helpers, Bicep/Terraform deployer files, and other deployment workflow assets under `deployers/`.
41 changes: 41 additions & 0 deletions .github/prompts/broken-access-control-audit.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
description: "Use when: auditing SimpleChat Python routes, helpers, or plugins for Broken Access Control, IDOR, BOLA, user_id/object-id misuse, or missing ownership/membership checks."
name: "Broken Access Control Audit"
argument-hint: "Target paths, feature area, endpoint list, or incident class to audit"
agent: "agent"
---

Audit the requested SimpleChat code for Broken Access Control, IDOR, and BOLA-style issues. Focus on places where caller-controlled object identifiers cross into reads, writes, search queries, blob access, plugin calls, or profile/settings lookups without a fresh authorization decision for that exact object.

Use the repository guardrails in [.github/instructions/broken-access-control-prevention.instructions.md](../instructions/broken-access-control-prevention.instructions.md) and the deterministic checker in [scripts/check_broken_access_control.py](../../scripts/check_broken_access_control.py). If the user did not provide target paths, start with changed files and likely surfaces under `application/single_app/route_backend_*.py`, `application/single_app/route_external_*.py`, `application/single_app/functions_*.py`, and `application/single_app/semantic_kernel_plugins/`.

## Audit Workflow

1. Identify entry points: Flask routes, Semantic Kernel `@kernel_function` methods, background task dispatchers that accept request-derived IDs, and helpers called by those surfaces.
2. Trace each object identifier from source to sink. Treat route path parameters, request JSON, query args, form values, active settings, hidden fields, plugin arguments, client state, and datastore-provided owner/participant IDs as untrusted until proven otherwise.
3. For each sensitive sink, verify an authorization decision at or immediately before the sink. Sensitive sinks include Cosmos `read_item`, `query_items`, `upsert_item`, `delete_item`, blob reads/writes, Azure Search operations, Graph calls that reveal identity data, file downloads, profile images, conversation messages, documents, groups, public workspaces, and user settings.
4. Distinguish role checks from object checks. `@login_required`, `@user_required`, `@admin_required`, GUID entropy, Graph search availability, and frontend-only access are not sufficient for object-level authorization.
5. Look for reverse-resolution or oracle behavior: endpoints that turn known opaque IDs into names, emails, profile images, app membership, document ownership, conversation membership, or existence signals.
6. Compare the implementation against approved helper patterns such as `_authorize_personal_conversation_read(...)`, `_authorize_personal_conversation_access(...)`, `_authorize_user_profile_access(...)`, `_read_authorized_user_profile_document(...)`, `get_user_settings(...)`, `assert_group_role(...)`, `require_active_group(...)`, `require_active_public_workspace(...)`, `_resolve_authorized_scope_arguments(...)`, `_resolve_blob_location_with_fallback(...)`, and `_resolve_authorized_fact_memory_call(...)`.
7. Run the checker where useful:

```powershell
python scripts/check_broken_access_control.py --full-file <path1.py> <path2.py>
```

For a repository-wide audit, use the GitHub Actions workflow `Broken Access Control Full Scan` or run the checker over tracked Python files locally.

## Output Format

Return findings first, ordered by severity. For each finding include:

- `Severity`: Critical, Important, Moderate, or Low.
- `Surface`: endpoint/helper/plugin and file path.
- `Source`: the untrusted object ID.
- `Sink`: the protected data or mutation.
- `Missing Check`: the absent ownership, membership, admin, or relationship validation.
- `Impact`: realistic data or operation exposed.
- `Remediation`: the specific helper or object-level guard to add.
- `Regression Test`: the minimum test that should fail before the fix and pass after.

If no issues are found, say that clearly and list any residual blind spots, such as dynamic authorization hidden behind decorators or code paths that need runtime tests.
Loading
Loading