microsoft-agent 2.3.2__tar.gz → 2.3.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. {microsoft_agent-2.3.2/microsoft_agent.egg-info → microsoft_agent-2.3.3}/PKG-INFO +2 -2
  2. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/README.md +1 -1
  3. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/_version.py +1 -1
  4. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_companion_service.py +9 -8
  5. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_control_plane.py +6 -9
  6. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_runtime.py +33 -6
  7. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3/microsoft_agent.egg-info}/PKG-INFO +2 -2
  8. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/SOURCES.txt +1 -0
  9. microsoft_agent-2.3.3/tests/test_transport_tls.py +104 -0
  10. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/.env.example +0 -0
  11. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/LICENSE +0 -0
  12. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/MANIFEST.in +0 -0
  13. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/connector_manifest.yml +0 -0
  14. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/README.md +0 -0
  15. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/control-plane.sample.json +0 -0
  16. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/nginx/windows-control-plane.conf +0 -0
  17. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/systemd/microsoft-windows-control-plane.env +0 -0
  18. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/systemd/microsoft-windows-control-plane.service +0 -0
  19. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/New-MicrosoftAgentApp.ps1 +0 -0
  20. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/New-WindowsControlPlaneEntraResources.ps1 +0 -0
  21. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/README.md +0 -0
  22. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/permission-profiles.json +0 -0
  23. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/integrations.example.json +0 -0
  24. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Install-WindowsCompanion.ps1 +0 -0
  25. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/README.md +0 -0
  26. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Run-WindowsCompanion.ps1 +0 -0
  27. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Test-WindowsCompanionDeployment.ps1 +0 -0
  28. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Uninstall-WindowsCompanion.ps1 +0 -0
  29. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/windows-companion.sample.json +0 -0
  30. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/authentication.md +0 -0
  31. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/concepts.md +0 -0
  32. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/configuration.md +0 -0
  33. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/deployment.md +0 -0
  34. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/enrollment-checklist.md +0 -0
  35. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/index.md +0 -0
  36. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/installation.md +0 -0
  37. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/integrations.md +0 -0
  38. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/office-addin.md +0 -0
  39. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/overview.md +0 -0
  40. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/usage.md +0 -0
  41. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/windows-companion.md +0 -0
  42. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/__init__.py +0 -0
  43. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/__main__.py +0 -0
  44. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/__init__.py +0 -0
  45. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/_graph_models.py +0 -0
  46. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_admin.py +0 -0
  47. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_apps.py +0 -0
  48. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_base.py +0 -0
  49. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_calendar.py +0 -0
  50. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_directory.py +0 -0
  51. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_drive.py +0 -0
  52. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_mail.py +0 -0
  53. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_other.py +0 -0
  54. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_system.py +0 -0
  55. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api_client.py +0 -0
  56. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/auth.py +0 -0
  57. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/config_cli.py +0 -0
  58. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/__init__.py +0 -0
  59. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/mcp_source_presets.json +0 -0
  60. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/tool_schema_fingerprints.json +0 -0
  61. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/credential_adapter.py +0 -0
  62. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/document_service.py +0 -0
  63. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/graph_file_service.py +0 -0
  64. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_adapters.py +0 -0
  65. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_auth.py +0 -0
  66. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_config.py +0 -0
  67. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_tools.py +0 -0
  68. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/intune_service.py +0 -0
  69. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/kg_ingest.py +0 -0
  70. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/__init__.py +0 -0
  71. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_admin.py +0 -0
  72. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_agreements.py +0 -0
  73. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_applications.py +0 -0
  74. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_audit.py +0 -0
  75. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_auth.py +0 -0
  76. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_calendar.py +0 -0
  77. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_chat.py +0 -0
  78. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_communications.py +0 -0
  79. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_connections.py +0 -0
  80. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_contacts.py +0 -0
  81. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_devices.py +0 -0
  82. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_directory.py +0 -0
  83. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_domains.py +0 -0
  84. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_education.py +0 -0
  85. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_employee_experience.py +0 -0
  86. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_files.py +0 -0
  87. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_groups.py +0 -0
  88. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_identity.py +0 -0
  89. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_mail.py +0 -0
  90. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_meta.py +0 -0
  91. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_notes.py +0 -0
  92. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_organization.py +0 -0
  93. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_places.py +0 -0
  94. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_policies.py +0 -0
  95. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_print.py +0 -0
  96. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_privacy.py +0 -0
  97. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_reports.py +0 -0
  98. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_search.py +0 -0
  99. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_security.py +0 -0
  100. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_sites.py +0 -0
  101. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_solutions.py +0 -0
  102. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_storage.py +0 -0
  103. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_subscriptions.py +0 -0
  104. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_tasks.py +0 -0
  105. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_teams.py +0 -0
  106. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_user.py +0 -0
  107. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp_config.json +0 -0
  108. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp_server.py +0 -0
  109. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/office_bridge.py +0 -0
  110. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/__init__.py +0 -0
  111. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/certification.json +0 -0
  112. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/fixtures/records.json +0 -0
  113. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/mappings/source.yaml +0 -0
  114. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/microsoft.ttl +0 -0
  115. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/migrations/manifest.json +0 -0
  116. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/shapes/connector.shacl.ttl +0 -0
  117. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/power_platform.py +0 -0
  118. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/prompts/__init__.py +0 -0
  119. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/prompts/collaboration_specialist.json +0 -0
  120. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/settings.py +0 -0
  121. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/__init__.py +0 -0
  122. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/SKILL.md +0 -0
  123. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml +0 -0
  124. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/references/catalog.md +0 -0
  125. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +0 -0
  126. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +0 -0
  127. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +0 -0
  128. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/tool_policy.py +0 -0
  129. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/universal_print.py +0 -0
  130. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_companion.py +0 -0
  131. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_control_plane_service.py +0 -0
  132. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/dependency_links.txt +0 -0
  133. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/entry_points.txt +0 -0
  134. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/requires.txt +0 -0
  135. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/top_level.txt +0 -0
  136. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/mkdocs.yml +0 -0
  137. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/README.md +0 -0
  138. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/manifest.xml +0 -0
  139. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/package-lock.json +0 -0
  140. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/package.json +0 -0
  141. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/assets/icon.png.b64 +0 -0
  142. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/assets/icon.svg +0 -0
  143. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/config.json +0 -0
  144. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/styles.css +0 -0
  145. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/taskpane.html +0 -0
  146. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/scripts/validate_manifest.py +0 -0
  147. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/backend-client.ts +0 -0
  148. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/office-bridge.ts +0 -0
  149. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/office-operations.ts +0 -0
  150. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/taskpane.ts +0 -0
  151. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/validation.ts +0 -0
  152. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/backend-client.test.ts +0 -0
  153. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/office-bridge.test.ts +0 -0
  154. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/validation.test.ts +0 -0
  155. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tsconfig.json +0 -0
  156. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/vitest.config.ts +0 -0
  157. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/webpack.config.cjs +0 -0
  158. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/pyproject.toml +0 -0
  159. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/setup.cfg +0 -0
  160. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_api_client_extended.py +0 -0
  161. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_auth.py +0 -0
  162. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_auth_coverage.py +0 -0
  163. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_bug_cx_046_ctx_info_awaited.py +0 -0
  164. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_config_cli.py +0 -0
  165. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_credential_adapter.py +0 -0
  166. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_document_service.py +0 -0
  167. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_generate_code.py +0 -0
  168. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_file_service.py +0 -0
  169. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_reliability.py +0 -0
  170. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_transport.py +0 -0
  171. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_init_dynamics.py +0 -0
  172. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_adapters.py +0 -0
  173. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_auth.py +0 -0
  174. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_config_and_tools.py +0 -0
  175. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_intune_service.py +0 -0
  176. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_kg_ingest.py +0 -0
  177. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_main.py +0 -0
  178. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_mcp_comprehensive.py +0 -0
  179. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_mcp_server.py +0 -0
  180. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_office_bridge.py +0 -0
  181. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_office_manifest.py +0 -0
  182. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_onenote_sharepoint_print.py +0 -0
  183. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_placeholder.py +0 -0
  184. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_power_platform.py +0 -0
  185. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_settings_and_policy.py +0 -0
  186. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_startup.py +0 -0
  187. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_teams_reliability.py +0 -0
  188. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_transport_migration.py +0 -0
  189. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_verify_api_integration.py +0 -0
  190. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_companion.py +0 -0
  191. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_control_plane.py +0 -0
  192. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_control_plane_service.py +0 -0
  193. {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_runtime.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microsoft-agent
3
- Version: 2.3.2
3
+ Version: 2.3.3
4
4
  Summary: Governed Microsoft Graph agent and MCP server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -71,7 +71,7 @@ Dynamic: license-file
71
71
  agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
72
72
  configuration, telemetry, and graph integration.
73
73
 
74
- Current package version: **2.3.2**
74
+ Current package version: **2.3.3**
75
75
 
76
76
  ## Capabilities
77
77
 
@@ -3,7 +3,7 @@
3
3
  agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
4
4
  configuration, telemetry, and graph integration.
5
5
 
6
- Current package version: **2.3.2**
6
+ Current package version: **2.3.3**
7
7
 
8
8
  ## Capabilities
9
9
 
@@ -1,3 +1,3 @@
1
1
  """Single package version authority."""
2
2
 
3
- __version__ = "2.3.2"
3
+ __version__ = "2.3.3"
@@ -60,6 +60,7 @@ from microsoft_agent.windows_runtime import (
60
60
  WindowsRuntimeLimits,
61
61
  WindowsServiceManager,
62
62
  WindowsToastNotificationAdapter,
63
+ build_client_tls_context,
63
64
  )
64
65
 
65
66
  try: # Core authentication dependency, guarded for library-only installs.
@@ -241,18 +242,18 @@ def validate_local_service_config(config: WindowsCompanionServiceConfig) -> None
241
242
  certificate_der = ssl.PEM_cert_to_DER_cert(certificate_pem)
242
243
  except ValueError as exc:
243
244
  raise ValueError("Client certificate is not valid PEM") from exc
244
- actual_thumbprint = hashlib.sha1(certificate_der).hexdigest().upper() # noqa: S324
245
+ actual_thumbprint = (
246
+ hashlib.sha1(certificate_der, usedforsecurity=False).hexdigest().upper()
247
+ )
245
248
  if not hmac.compare_digest(actual_thumbprint, certificate.thumbprint):
246
249
  raise ValueError("Client certificate fingerprint does not match configuration")
247
250
  password = _private_key_password(certificate)
248
- context = ssl.create_default_context(
249
- cafile=str(certificate.ca_bundle_path) if certificate.ca_bundle_path else None
250
- )
251
251
  try:
252
- context.load_cert_chain(
253
- certificate.client_certificate_path,
254
- certificate.client_private_key_path,
255
- password=password,
252
+ build_client_tls_context(
253
+ ca_bundle_path=certificate.ca_bundle_path,
254
+ client_certificate_path=certificate.client_certificate_path,
255
+ client_private_key_path=certificate.client_private_key_path,
256
+ private_key_password=password,
256
257
  )
257
258
  except (OSError, ssl.SSLError) as exc:
258
259
  raise ValueError(
@@ -21,7 +21,6 @@ import json
21
21
  import ntpath
22
22
  import os
23
23
  import sqlite3
24
- import ssl
25
24
  from collections.abc import Mapping
26
25
  from datetime import UTC, datetime, timedelta
27
26
  from pathlib import Path
@@ -69,6 +68,7 @@ from microsoft_agent.windows_runtime import (
69
68
  RelayActionDelivery,
70
69
  RelayPollBatch,
71
70
  WindowsRuntimeError,
71
+ build_client_tls_context,
72
72
  )
73
73
 
74
74
  try: # FastAPI is supplied by the MCP/agent runtime extras.
@@ -1235,15 +1235,12 @@ class HttpOutboundRelayTransport(OutboundRelayTransport):
1235
1235
  if not 1024 <= maximum_response_bytes <= 268_435_456:
1236
1236
  raise ValueError("maximum_response_bytes is outside the safe range")
1237
1237
  self._maximum_response_bytes = maximum_response_bytes
1238
- context = ssl.create_default_context(
1239
- cafile=str(ca_bundle_path) if ca_bundle_path else None
1238
+ context = build_client_tls_context(
1239
+ ca_bundle_path=ca_bundle_path,
1240
+ client_certificate_path=client_certificate_path,
1241
+ client_private_key_path=client_private_key_path,
1242
+ private_key_password=private_key_password,
1240
1243
  )
1241
- if client_certificate_path and client_private_key_path:
1242
- context.load_cert_chain(
1243
- certfile=str(client_certificate_path),
1244
- keyfile=str(client_private_key_path),
1245
- password=private_key_password,
1246
- )
1247
1244
  self._opener = build_opener(_NoRedirect(), HTTPSHandler(context=context))
1248
1245
 
1249
1246
  async def poll(
@@ -16,12 +16,14 @@ from __future__ import annotations
16
16
 
17
17
  import asyncio
18
18
  import base64
19
+ import contextlib
19
20
  import hashlib
20
21
  import json
21
22
  import ntpath
22
23
  import os
23
24
  import platform
24
25
  import socket
26
+ import ssl
25
27
  import stat
26
28
  import sys
27
29
  from collections import OrderedDict
@@ -30,6 +32,7 @@ from datetime import UTC, datetime
30
32
  from pathlib import Path, PureWindowsPath
31
33
  from typing import Any, Protocol, TypeVar, runtime_checkable
32
34
 
35
+ from agent_connector_sdk.tls.resolve import resolve_tls_profile
33
36
  from pydantic import BaseModel, ConfigDict, Field, field_validator
34
37
 
35
38
  from microsoft_agent.windows_companion import (
@@ -227,15 +230,11 @@ class PyWin32OfficeAutomation:
227
230
  return {"application": application, "exported": True}
228
231
  finally:
229
232
  if document is not None:
230
- try:
233
+ with contextlib.suppress(Exception): # defensive COM cleanup
231
234
  document.Close(False)
232
- except Exception: # pragma: no cover - defensive COM cleanup
233
- pass
234
235
  if app is not None:
235
- try:
236
+ with contextlib.suppress(Exception): # defensive COM cleanup
236
237
  app.Quit()
237
- except Exception: # pragma: no cover - defensive COM cleanup
238
- pass
239
238
  self._pythoncom.CoUninitialize()
240
239
 
241
240
 
@@ -1303,7 +1302,35 @@ def _installed_windows_software() -> list[dict[str, str]]:
1303
1302
  return sorted(found.values(), key=lambda item: item["name"].casefold())[:500]
1304
1303
 
1305
1304
 
1305
+ def build_client_tls_context(
1306
+ *,
1307
+ ca_bundle_path: str | os.PathLike[str] | None = None,
1308
+ client_certificate_path: str | os.PathLike[str] | None = None,
1309
+ client_private_key_path: str | os.PathLike[str] | None = None,
1310
+ private_key_password: str | None = None,
1311
+ ) -> ssl.SSLContext:
1312
+ """Return the verified client context for the control-plane connection.
1313
+
1314
+ Trust comes from the SDK TLS profile (``resolve_tls_profile``): a per-instance
1315
+ CA bundle is passed through the profile, otherwise the deployment's
1316
+ ``MICROSOFT_*`` trust profile applies. The client certificate is loaded onto
1317
+ that context here because the key password is a runtime value that a profile
1318
+ document may not carry.
1319
+ """
1320
+
1321
+ profile = {"ca_bundle_path": str(ca_bundle_path)} if ca_bundle_path else None
1322
+ context = resolve_tls_profile("microsoft", profile=profile).ssl_context
1323
+ if client_certificate_path and client_private_key_path:
1324
+ context.load_cert_chain(
1325
+ certfile=str(client_certificate_path),
1326
+ keyfile=str(client_private_key_path),
1327
+ password=private_key_password,
1328
+ )
1329
+ return context
1330
+
1331
+
1306
1332
  __all__ = [
1333
+ "build_client_tls_context",
1307
1334
  "ClipboardAdapter",
1308
1335
  "DesktopFlowExecutor",
1309
1336
  "NotificationAdapter",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microsoft-agent
3
- Version: 2.3.2
3
+ Version: 2.3.3
4
4
  Summary: Governed Microsoft Graph agent and MCP server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -71,7 +71,7 @@ Dynamic: license-file
71
71
  agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
72
72
  configuration, telemetry, and graph integration.
73
73
 
74
- Current package version: **2.3.2**
74
+ Current package version: **2.3.3**
75
75
 
76
76
  ## Capabilities
77
77
 
@@ -183,6 +183,7 @@ tests/test_settings_and_policy.py
183
183
  tests/test_startup.py
184
184
  tests/test_teams_reliability.py
185
185
  tests/test_transport_migration.py
186
+ tests/test_transport_tls.py
186
187
  tests/test_verify_api_integration.py
187
188
  tests/test_windows_companion.py
188
189
  tests/test_windows_control_plane.py
@@ -0,0 +1,104 @@
1
+ """The control-plane client TLS context comes from the SDK TLS profile."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import ast
6
+ import ssl
7
+ from datetime import UTC, datetime, timedelta
8
+ from pathlib import Path
9
+
10
+ import pytest
11
+ from agent_connector_sdk.tls.errors import TransportSecurityError
12
+ from cryptography import x509
13
+ from cryptography.hazmat.primitives import hashes, serialization
14
+ from cryptography.hazmat.primitives.asymmetric import ec
15
+ from cryptography.x509.oid import NameOID
16
+
17
+ from microsoft_agent import windows_runtime
18
+ from microsoft_agent.windows_runtime import build_client_tls_context
19
+
20
+ ROOT = Path(__file__).resolve().parents[1]
21
+
22
+
23
+ def _identity(directory: Path) -> tuple[Path, Path]:
24
+ key = ec.generate_private_key(ec.SECP256R1())
25
+ name = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "companion")])
26
+ now = datetime.now(UTC)
27
+ cert = (
28
+ x509.CertificateBuilder()
29
+ .subject_name(name)
30
+ .issuer_name(name)
31
+ .public_key(key.public_key())
32
+ .serial_number(x509.random_serial_number())
33
+ .not_valid_before(now - timedelta(minutes=1))
34
+ .not_valid_after(now + timedelta(days=1))
35
+ .add_extension(x509.BasicConstraints(ca=True, path_length=None), critical=True)
36
+ .sign(key, hashes.SHA256())
37
+ )
38
+ cert_path, key_path = directory / "cert.pem", directory / "key.pem"
39
+ cert_path.write_bytes(cert.public_bytes(serialization.Encoding.PEM))
40
+ key_path.write_bytes(
41
+ key.private_bytes(
42
+ serialization.Encoding.PEM,
43
+ serialization.PrivateFormat.PKCS8,
44
+ serialization.NoEncryption(),
45
+ )
46
+ )
47
+ return cert_path, key_path
48
+
49
+
50
+ def test_client_context_verifies_peer_and_uses_instance_ca(tmp_path: Path) -> None:
51
+ """CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: profile-built verified context."""
52
+ cert, key = _identity(tmp_path)
53
+ context = build_client_tls_context(
54
+ ca_bundle_path=cert,
55
+ client_certificate_path=cert,
56
+ client_private_key_path=key,
57
+ )
58
+ assert context.verify_mode == ssl.CERT_REQUIRED
59
+ assert context.check_hostname is True
60
+ assert context.minimum_version >= ssl.TLSVersion.TLSv1_2
61
+ subjects = [entry.get("subject") for entry in context.get_ca_certs()]
62
+ assert ((("commonName", "companion"),),) in subjects
63
+
64
+
65
+ def test_client_context_uses_the_sdk_profile(monkeypatch: pytest.MonkeyPatch) -> None:
66
+ """CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: resolution goes through the SDK."""
67
+ seen: dict[str, object] = {}
68
+ real = windows_runtime.resolve_tls_profile
69
+
70
+ def spy(service: str, **kwargs: object):
71
+ seen.update(service=service, **kwargs)
72
+ return real(service, **kwargs)
73
+
74
+ monkeypatch.setattr(windows_runtime, "resolve_tls_profile", spy)
75
+ build_client_tls_context()
76
+ assert seen["service"] == "microsoft"
77
+
78
+
79
+ def test_missing_ca_bundle_fails_closed(tmp_path: Path) -> None:
80
+ """CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: no silent fallback to default trust."""
81
+ with pytest.raises(TransportSecurityError):
82
+ build_client_tls_context(ca_bundle_path=tmp_path / "absent.pem")
83
+
84
+
85
+ def test_no_hand_built_tls_context_in_package() -> None:
86
+ """CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R002: only the SDK builds SSL contexts."""
87
+ offenders: list[str] = []
88
+ for path in (ROOT / "microsoft_agent").rglob("*.py"):
89
+ for node in ast.walk(ast.parse(path.read_text(encoding="utf-8"))):
90
+ if (
91
+ isinstance(node, ast.Call)
92
+ and isinstance(node.func, ast.Attribute)
93
+ and node.func.attr
94
+ in {
95
+ "create_default_context",
96
+ "SSLContext",
97
+ "_create_unverified_context",
98
+ }
99
+ ):
100
+ offenders.append(f"{path.relative_to(ROOT)}:{node.lineno}")
101
+ if isinstance(node, ast.keyword) and node.arg == "verify":
102
+ if isinstance(node.value, ast.Constant) and node.value.value is False:
103
+ offenders.append(f"{path.relative_to(ROOT)}:{node.value.lineno}")
104
+ assert not offenders
File without changes