microsoft-agent 2.3.5__tar.gz → 2.3.7__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.
- {microsoft_agent-2.3.5/microsoft_agent.egg-info → microsoft_agent-2.3.7}/PKG-INFO +5 -5
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/README.md +1 -1
- microsoft_agent-2.3.7/microsoft_agent/__init__.py +24 -0
- microsoft_agent-2.3.7/microsoft_agent/_version.py +5 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/connector_sources.py +6 -24
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp_server.py +8 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/certification.json +4 -4
- microsoft_agent-2.3.7/microsoft_agent/skills/microsoft-agent-development/SKILL.md +102 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/tool_policy.py +3 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7/microsoft_agent.egg-info}/PKG-INFO +5 -5
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent.egg-info/SOURCES.txt +2 -1
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent.egg-info/entry_points.txt +1 -10
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent.egg-info/requires.txt +2 -2
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/pyproject.toml +11 -19
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_default_content_surfaces.py +10 -7
- microsoft_agent-2.3.7/tests/test_main.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_mcp_comprehensive.py +1 -1
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_onenote_sharepoint_print.py +4 -1
- microsoft_agent-2.3.7/tests/test_publication_workflow.py +78 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_settings_and_policy.py +10 -0
- microsoft_agent-2.3.7/tests/test_startup.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_transport_migration.py +1 -3
- microsoft_agent-2.3.5/microsoft_agent/__init__.py +0 -8
- microsoft_agent-2.3.5/microsoft_agent/_version.py +0 -3
- microsoft_agent-2.3.5/tests/test_main.py +0 -6
- microsoft_agent-2.3.5/tests/test_startup.py +0 -3
- microsoft_agent-2.3.5/tests/test_verify_api_integration.py +0 -90
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/LICENSE +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/MANIFEST.in +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/control-plane/README.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/control-plane/control-plane.sample.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/control-plane/nginx/windows-control-plane.conf +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/control-plane/systemd/microsoft-windows-control-plane.env +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/control-plane/systemd/microsoft-windows-control-plane.service +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/entra/New-MicrosoftAgentApp.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/entra/New-WindowsControlPlaneEntraResources.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/entra/README.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/entra/permission-profiles.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/integrations.example.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/Install-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/README.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/Run-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/Test-WindowsCompanionDeployment.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/Uninstall-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/deployment/windows/windows-companion.sample.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/authentication.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/concepts.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/configuration.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/deployment.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/enrollment-checklist.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/index.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/installation.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/integrations.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/office-addin.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/overview.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/usage.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/docs/windows-companion.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/__main__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/_graph_models.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_admin.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_apps.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_base.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_calendar.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_directory.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_drive.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_mail.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_other.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api/api_client_system.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/api_client.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/auth.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/config_cli.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/connectors/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/credential_adapter.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/document_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/graph_file_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/integration_adapters.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/integration_auth.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/integration_config.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/integration_tools.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/intune_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/kg_ingest.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_admin.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_agreements.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_applications.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_audit.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_auth.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_calendar.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_chat.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_communications.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_connections.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_contacts.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_devices.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_directory.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_domains.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_education.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_employee_experience.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_files.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_groups.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_identity.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_mail.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_meta.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_notes.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_organization.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_places.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_policies.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_print.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_privacy.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_reports.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_search.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_security.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_sites.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_solutions.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_storage.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_subscriptions.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_tasks.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_teams.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp/mcp_user.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/mcp_config.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/office_bridge.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/fixtures/records.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/mappings/source.yaml +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/microsoft.ttl +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/migrations/manifest.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/power_platform.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/prompts/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/prompts/collaboration_specialist.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/settings.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/__init__.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-agent-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-agent-operations/references/catalog.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/universal_print.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/windows_companion.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/windows_companion_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/windows_control_plane.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent/windows_runtime.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent.egg-info/dependency_links.txt +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/microsoft_agent.egg-info/top_level.txt +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/README.md +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/manifest.xml +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/package-lock.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/package.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/public/assets/icon.png.b64 +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/public/assets/icon.svg +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/public/config.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/public/styles.css +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/public/taskpane.html +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/scripts/validate_manifest.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/src/backend-client.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/src/office-bridge.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/src/office-operations.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/src/taskpane.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/src/validation.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/tests/backend-client.test.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/tests/office-bridge.test.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/tests/validation.test.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/tsconfig.json +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/vitest.config.ts +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/office_addin/webpack.config.cjs +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/setup.cfg +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_api_client_extended.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_auth.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_auth_coverage.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_bug_cx_046_ctx_info_awaited.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_config_cli.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_credential_adapter.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_document_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_generate_code.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_graph_file_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_graph_reliability.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_graph_transport.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_init_dynamics.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_integration_adapters.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_integration_auth.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_integration_config_and_tools.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_intune_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_kg_ingest.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_mcp_server.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_office_bridge.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_office_manifest.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_placeholder.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_power_platform.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_sdk_centralization.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_teams_reliability.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_transport_tls.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_windows_companion.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_windows_control_plane.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.5 → microsoft_agent-2.3.7}/tests/test_windows_runtime.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.7
|
|
4
4
|
Summary: Governed Microsoft Graph agent and MCP server
|
|
5
|
-
Author-email:
|
|
5
|
+
Author-email: Repository Maintainers <maintainers@knuckles.team>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Classifier: Development Status :: 3 - Alpha
|
|
8
8
|
Classifier: Environment :: Console
|
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist:
|
|
14
|
+
Requires-Dist: scion-sdk[mcp]<0.6.0,>=0.5.9
|
|
15
15
|
Requires-Dist: azure-core>=1.41.0
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Requires-Dist: keyring>=25.7.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: msal>=1.39.0
|
|
|
19
19
|
Requires-Dist: msgraph-sdk>=1.64.0
|
|
20
20
|
Requires-Dist: pydantic>=2.14.1
|
|
21
21
|
Provides-Extra: mcp
|
|
22
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: scion-sdk[mcp]<0.6.0,>=0.5.9; extra == "mcp"
|
|
23
23
|
Provides-Extra: documents
|
|
24
24
|
Requires-Dist: python-docx>=1.2.0; extra == "documents"
|
|
25
25
|
Requires-Dist: python-pptx>=1.0.2; extra == "documents"
|
|
@@ -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.
|
|
74
|
+
Current package version: **2.3.6**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Microsoft Agent.
|
|
2
|
+
|
|
3
|
+
CONCEPT:AU-ECO.mcp.fastmcp-middleware
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from agent_connector_sdk.connector import Connector
|
|
7
|
+
from agent_connector_sdk.connector_hooks import RegistrationContext
|
|
8
|
+
|
|
9
|
+
from microsoft_agent._version import __version__
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _register_kg_tools(context: RegistrationContext) -> None:
|
|
13
|
+
"""Register the knowledge-graph ingestion tool through the SDK's shared hook."""
|
|
14
|
+
from microsoft_agent.mcp_server import register_kg_tools
|
|
15
|
+
|
|
16
|
+
register_kg_tools(context.server)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
connector = Connector(
|
|
20
|
+
instructions="microsoft-agent MCP Server — Condensed Action-Routed Tools.",
|
|
21
|
+
extra_registrations=(_register_kg_tools,),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
__all__ = ["__version__", "connector"]
|
|
@@ -6,12 +6,13 @@ Served live as ``connector://resources``. Regenerate by editing the declarations
|
|
|
6
6
|
# ruff: noqa: E501
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
9
11
|
from agent_connector_sdk.ingest.live_declaration import source_meta
|
|
10
|
-
from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
|
|
11
12
|
|
|
12
|
-
CONNECTOR = "microsoft-mcp"
|
|
13
|
+
CONNECTOR: str = "microsoft-mcp"
|
|
13
14
|
|
|
14
|
-
SOURCES = (
|
|
15
|
+
SOURCES: tuple[Any, ...] = (
|
|
15
16
|
source_meta(
|
|
16
17
|
tool="list_microsoft_ingestion_projection",
|
|
17
18
|
source_id="microsoft-user-structure",
|
|
@@ -30,7 +31,7 @@ SOURCES = (
|
|
|
30
31
|
),
|
|
31
32
|
)
|
|
32
33
|
|
|
33
|
-
SCHEMA_MAPPINGS = {
|
|
34
|
+
SCHEMA_MAPPINGS: dict[str, Any] = {
|
|
34
35
|
"Event": {
|
|
35
36
|
"fields": {},
|
|
36
37
|
"ontology_class": "Event",
|
|
@@ -45,7 +46,7 @@ SCHEMA_MAPPINGS = {
|
|
|
45
46
|
},
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
RESOURCES = (
|
|
49
|
+
RESOURCES: tuple[dict[str, str], ...] = (
|
|
49
50
|
{
|
|
50
51
|
"id_prefix": "event",
|
|
51
52
|
"label": "Opaque Microsoft event reference",
|
|
@@ -62,22 +63,3 @@ RESOURCES = (
|
|
|
62
63
|
"name": "Message",
|
|
63
64
|
},
|
|
64
65
|
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def declaration() -> IngestSourceDeclaration:
|
|
68
|
-
"""The declaration the server assembles from this module."""
|
|
69
|
-
specs = []
|
|
70
|
-
for item in SOURCES:
|
|
71
|
-
for entry in item["connector_sources"]:
|
|
72
|
-
body = {k: v for k, v in entry.items() if k not in ("tool", "mapping")}
|
|
73
|
-
specs.append(
|
|
74
|
-
IngestSourceSpec.model_validate({**body, "tools": (entry["tool"],)})
|
|
75
|
-
)
|
|
76
|
-
return IngestSourceDeclaration.model_validate(
|
|
77
|
-
{
|
|
78
|
-
"connector": CONNECTOR,
|
|
79
|
-
"sources": specs,
|
|
80
|
-
"schema_mappings": SCHEMA_MAPPINGS,
|
|
81
|
-
"resources": RESOURCES,
|
|
82
|
-
}
|
|
83
|
-
)
|
|
@@ -25,10 +25,12 @@ warnings.filterwarnings("ignore", message=".*urllib3.*or charset_normalizer.*")
|
|
|
25
25
|
|
|
26
26
|
import logging
|
|
27
27
|
import sys
|
|
28
|
+
from pathlib import Path
|
|
28
29
|
from typing import Any
|
|
29
30
|
|
|
30
31
|
from agent_connector_sdk.config import load_config
|
|
31
32
|
from agent_connector_sdk.mcp.concurrency import invoke_client_method
|
|
33
|
+
from agent_connector_sdk.mcp.content import ConnectorContent
|
|
32
34
|
from agent_connector_sdk.mcp.server import create_mcp_server
|
|
33
35
|
from agent_connector_sdk.mcp.tool_surface import register_tool_surface
|
|
34
36
|
from starlette.requests import Request
|
|
@@ -268,6 +270,11 @@ def get_mcp_instance() -> tuple[Any, ...]:
|
|
|
268
270
|
name="microsoft-agent MCP",
|
|
269
271
|
version=__version__,
|
|
270
272
|
instructions="microsoft-agent MCP Server — Condensed Action-Routed Tools.",
|
|
273
|
+
content=ConnectorContent.for_package(
|
|
274
|
+
"microsoft_agent",
|
|
275
|
+
Path(__file__).resolve().parent,
|
|
276
|
+
__version__,
|
|
277
|
+
),
|
|
271
278
|
)
|
|
272
279
|
|
|
273
280
|
@mcp.custom_route("/health", methods=["GET"])
|
|
@@ -281,6 +288,7 @@ def get_mcp_instance() -> tuple[Any, ...]:
|
|
|
281
288
|
service="microsoft-agent",
|
|
282
289
|
tools_module=sys.modules[__name__],
|
|
283
290
|
)
|
|
291
|
+
register_kg_tools(mcp)
|
|
284
292
|
|
|
285
293
|
settings = get_settings()
|
|
286
294
|
if settings.tool_group_enabled("documents"):
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"api_version": "
|
|
2
|
+
"api_version": "graphos.io/v1",
|
|
3
3
|
"artifacts": {
|
|
4
4
|
"microsoft_agent/ontology/fixtures/records.json": "b29cde0f53b0625dc50c3941d745092f2712044bfd31b9565301c6a314f60adc",
|
|
5
5
|
"microsoft_agent/ontology/mappings/source.yaml": "c9834a4cec0b3d9eea10f40e26ea647d848b08174d9fd34ab2e468db52a90497",
|
|
6
|
-
"microsoft_agent/ontology/microsoft.ttl": "
|
|
6
|
+
"microsoft_agent/ontology/microsoft.ttl": "96fc5438f5d6d05e8c346fb46703db5c08a5b98c7e6dad228d05018c8c4158a0",
|
|
7
7
|
"microsoft_agent/ontology/migrations/manifest.json": "aea905ab1ef096fddd5f5d04403c48ebabb00492114990ca801a84aebf00c230",
|
|
8
8
|
"microsoft_agent/ontology/shapes/connector.shacl.ttl": "9c3c6656786b976b4539153dfda1a56ae33f80b0cef449a637694cbba7620822"
|
|
9
9
|
},
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"synthetic_fixture_contract": "passed"
|
|
16
16
|
},
|
|
17
17
|
"compatibility": {
|
|
18
|
-
"
|
|
18
|
+
"agent_utilities": ">=2.5.0,<3",
|
|
19
19
|
"bundle_schema": "2",
|
|
20
20
|
"epistemic_graph": ">=2.27.0,<3"
|
|
21
21
|
},
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"signer": "UNSIGNED-PREVIEW",
|
|
30
30
|
"signing_public_key": "",
|
|
31
31
|
"status": "source-validated",
|
|
32
|
-
"validated_at": "2026-
|
|
32
|
+
"validated_at": "2026-10-30T01:38:49Z"
|
|
33
33
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: microsoft-agent-development
|
|
3
|
+
skill_type: skill
|
|
4
|
+
domain: development
|
|
5
|
+
description: >-
|
|
6
|
+
Develop, test, gate, and release the microsoft-agent connector. Use this skill
|
|
7
|
+
when changing Microsoft Graph integrations, governed MCP tools, packaged
|
|
8
|
+
connector content, documentation, or repository gates.
|
|
9
|
+
license: MIT
|
|
10
|
+
tags: [microsoft, graph, development, connector, test, gates]
|
|
11
|
+
tier: repository
|
|
12
|
+
metadata:
|
|
13
|
+
author: Genius
|
|
14
|
+
version: '0.1.0'
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# microsoft-agent development
|
|
18
|
+
|
|
19
|
+
This repository owns the Microsoft Graph client, authentication boundary,
|
|
20
|
+
action-routed MCP tools, provider mappings, ontology, and packaged connector
|
|
21
|
+
content. Shared connector contracts and transports belong to
|
|
22
|
+
`agent-connector-sdk`; admission, serving, and durable graph state belong to
|
|
23
|
+
their owning repositories. Read `AGENTS.md` before changing code. Keep tenant
|
|
24
|
+
identifiers, credentials, private endpoints, provider records, and raw
|
|
25
|
+
personal data out of source, logs, fixtures, and packaged skill content.
|
|
26
|
+
|
|
27
|
+
## Rapid delivery: the 5-minute contract
|
|
28
|
+
|
|
29
|
+
Specs are already designed. Deliver small, reviewable slices and cite the
|
|
30
|
+
owning spec row in the commit trailer.
|
|
31
|
+
|
|
32
|
+
- Find the owning row first with `git grep -n "<term>" -- specs` and extend the
|
|
33
|
+
existing spec before adding requirement text.
|
|
34
|
+
- Reuse the one SDK `Connector`, the existing Graph client, auth/settings
|
|
35
|
+
boundary, and action-routed tool modules. Do not create a second MCP,
|
|
36
|
+
authentication, graph-ingest, or safety plane.
|
|
37
|
+
- Preserve fail-closed read/write/destructive policy, tenant and provenance
|
|
38
|
+
checks, TLS verification, and the existing condensed and verbose tool
|
|
39
|
+
surfaces. Provider calls remain mocked in local tests.
|
|
40
|
+
- Bind every delivered requirement to a focused test. Generated
|
|
41
|
+
`specs/*/status.json` files come from the shared hooks; never hand-edit them.
|
|
42
|
+
- Keep `skills/**`, `ontology/**`, `connectors/**`, prompts, manifests, and
|
|
43
|
+
package-data declarations coherent. Put `Spec: <ID>` and the assisting-agent
|
|
44
|
+
trailer on consecutive final commit message lines.
|
|
45
|
+
|
|
46
|
+
## Setup and gates
|
|
47
|
+
|
|
48
|
+
Use the pinned environment and shared gates from the checkout root:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv sync --locked
|
|
52
|
+
uvx pre-commit run --all-files
|
|
53
|
+
uvx pre-commit run --all-files --hook-stage pre-push
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For focused feedback, use tests that exercise the actual connector paths:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
/var/tmp/arbora-delivery/scale/run-narrow-test-slot.sh \
|
|
60
|
+
uv run --locked --extra test pytest -q \
|
|
61
|
+
tests/test_publication_workflow.py \
|
|
62
|
+
tests/test_default_content_surfaces.py \
|
|
63
|
+
tests/test_startup.py \
|
|
64
|
+
tests/test_mcp_server.py \
|
|
65
|
+
tests/test_auth.py
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Do not call Microsoft Graph or require tenant credentials in local gates.
|
|
69
|
+
Preserve the existing Graph client composition, MSAL identity modes, optional
|
|
70
|
+
Office/Power Platform/Intune/Windows integrations, and governed KG ingestion
|
|
71
|
+
when changing a provider module.
|
|
72
|
+
|
|
73
|
+
## Packaging and publication
|
|
74
|
+
|
|
75
|
+
Keep `microsoft_agent/skills/`, `microsoft_agent/ontology/`,
|
|
76
|
+
`microsoft_agent/connectors/`, prompts, and manifests in the package-data and
|
|
77
|
+
entry-point contracts. Build locally with `uv build` and inspect the wheel for
|
|
78
|
+
`microsoft_agent/skills/microsoft-agent-development/SKILL.md` before a release.
|
|
79
|
+
The canonical Pages publisher is `.github/workflows/pages.yml`; it calls the
|
|
80
|
+
shared Pipelines workflow with `.config/spec-dashboard.json`, keeps manual
|
|
81
|
+
dispatch and the docs/spec/config/workflow path filters, and publishes the
|
|
82
|
+
source-backed dashboard at `spec-delivery/`. Do not add a second documentation
|
|
83
|
+
publisher or claim Pages publication from a local build.
|
|
84
|
+
|
|
85
|
+
Keep package version mirrors and `uv.lock` coherent for a genuine packaged
|
|
86
|
+
content release. Central generation owns connector manifests and release
|
|
87
|
+
container artifacts; preserve this package's existing runtime, auth, and port
|
|
88
|
+
semantics while inspecting generated output before making claims.
|
|
89
|
+
|
|
90
|
+
## Change discipline
|
|
91
|
+
|
|
92
|
+
- Keep Microsoft Graph calls, mappings, ontology, source declarations, and MCP
|
|
93
|
+
schemas under this repository's connector boundary. SDK transport, shared
|
|
94
|
+
ingest contracts, and Arbora admission belong to their owner repositories.
|
|
95
|
+
- Use deployment-owned `MICROSOFT_*` identity and policy configuration only;
|
|
96
|
+
never print or commit credentials, token caches, private endpoints, or tenant
|
|
97
|
+
profiles. Preserve mandatory TLS verification and fail-closed authorization.
|
|
98
|
+
- For mutations, inspect current state first, require explicit approval where
|
|
99
|
+
the existing procedure calls for it, and verify the result. Keep KG
|
|
100
|
+
ingestion governed by the signed source and ChangeEnvelope path.
|
|
101
|
+
- Keep generated status changes and central promotion with the Pipelines/status
|
|
102
|
+
owner. Do not claim a row is landed or verified from a local edit alone.
|
|
@@ -82,6 +82,9 @@ def classify_tool_risk(tool_name: str) -> ToolRisk:
|
|
|
82
82
|
"""Classify a tool conservatively from its stable public name."""
|
|
83
83
|
|
|
84
84
|
name = tool_name.lower().strip()
|
|
85
|
+
# Served tools carry the connector prefix (``microsoft_list_service_health``);
|
|
86
|
+
# the verb that decides the risk follows it.
|
|
87
|
+
name = name.removeprefix("microsoft_")
|
|
85
88
|
if name in ALWAYS_ALLOWED:
|
|
86
89
|
return ToolRisk.READ
|
|
87
90
|
if any(fnmatch.fnmatch(name, pattern) for pattern in DESTRUCTIVE_PATTERNS):
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.7
|
|
4
4
|
Summary: Governed Microsoft Graph agent and MCP server
|
|
5
|
-
Author-email:
|
|
5
|
+
Author-email: Repository Maintainers <maintainers@knuckles.team>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Classifier: Development Status :: 3 - Alpha
|
|
8
8
|
Classifier: Environment :: Console
|
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist:
|
|
14
|
+
Requires-Dist: scion-sdk[mcp]<0.6.0,>=0.5.9
|
|
15
15
|
Requires-Dist: azure-core>=1.41.0
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Requires-Dist: keyring>=25.7.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: msal>=1.39.0
|
|
|
19
19
|
Requires-Dist: msgraph-sdk>=1.64.0
|
|
20
20
|
Requires-Dist: pydantic>=2.14.1
|
|
21
21
|
Provides-Extra: mcp
|
|
22
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: scion-sdk[mcp]<0.6.0,>=0.5.9; extra == "mcp"
|
|
23
23
|
Provides-Extra: documents
|
|
24
24
|
Requires-Dist: python-docx>=1.2.0; extra == "documents"
|
|
25
25
|
Requires-Dist: python-pptx>=1.0.2; extra == "documents"
|
|
@@ -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.
|
|
74
|
+
Current package version: **2.3.6**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
|
@@ -123,6 +123,7 @@ microsoft_agent/ontology/shapes/connector.shacl.ttl
|
|
|
123
123
|
microsoft_agent/prompts/__init__.py
|
|
124
124
|
microsoft_agent/prompts/collaboration_specialist.json
|
|
125
125
|
microsoft_agent/skills/__init__.py
|
|
126
|
+
microsoft_agent/skills/microsoft-agent-development/SKILL.md
|
|
126
127
|
microsoft_agent/skills/microsoft-agent-operations/SKILL.md
|
|
127
128
|
microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml
|
|
128
129
|
microsoft_agent/skills/microsoft-agent-operations/references/catalog.md
|
|
@@ -176,13 +177,13 @@ tests/test_office_manifest.py
|
|
|
176
177
|
tests/test_onenote_sharepoint_print.py
|
|
177
178
|
tests/test_placeholder.py
|
|
178
179
|
tests/test_power_platform.py
|
|
180
|
+
tests/test_publication_workflow.py
|
|
179
181
|
tests/test_sdk_centralization.py
|
|
180
182
|
tests/test_settings_and_policy.py
|
|
181
183
|
tests/test_startup.py
|
|
182
184
|
tests/test_teams_reliability.py
|
|
183
185
|
tests/test_transport_migration.py
|
|
184
186
|
tests/test_transport_tls.py
|
|
185
|
-
tests/test_verify_api_integration.py
|
|
186
187
|
tests/test_windows_companion.py
|
|
187
188
|
tests/test_windows_control_plane.py
|
|
188
189
|
tests/test_windows_control_plane_service.py
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
[agent_connector_sdk.connector]
|
|
2
|
-
microsoft-mcp = microsoft_agent
|
|
3
|
-
|
|
4
|
-
[agent_connector_sdk.ontology_providers]
|
|
5
|
-
microsoft-agent = microsoft_agent.ontology
|
|
2
|
+
microsoft-mcp = microsoft_agent:connector
|
|
6
3
|
|
|
7
4
|
[agent_connector_sdk.prompt_providers]
|
|
8
5
|
microsoft-agent = microsoft_agent.prompts
|
|
9
6
|
|
|
10
|
-
[agent_connector_sdk.skill_providers]
|
|
11
|
-
microsoft-agent = microsoft_agent.skills
|
|
12
|
-
|
|
13
|
-
[agent_connector_sdk.source_connector_providers]
|
|
14
|
-
microsoft-agent = microsoft_agent.connectors
|
|
15
|
-
|
|
16
7
|
[console_scripts]
|
|
17
8
|
microsoft-config = microsoft_agent.config_cli:main
|
|
18
9
|
microsoft-mcp = microsoft_agent.mcp_server:mcp_server
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
scion-sdk[mcp]<0.6.0,>=0.5.9
|
|
2
2
|
azure-core>=1.41.0
|
|
3
3
|
httpx>=0.28.1
|
|
4
4
|
keyring>=25.7.0
|
|
@@ -40,7 +40,7 @@ python-docx>=1.2.0
|
|
|
40
40
|
python-pptx>=1.0.2
|
|
41
41
|
|
|
42
42
|
[mcp]
|
|
43
|
-
|
|
43
|
+
scion-sdk[mcp]<0.6.0,>=0.5.9
|
|
44
44
|
|
|
45
45
|
[test]
|
|
46
46
|
cryptography>=50.0.2
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "microsoft-agent"
|
|
7
|
-
|
|
7
|
+
version = "2.3.7"
|
|
8
8
|
description = "Governed Microsoft Graph agent and MCP server"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -14,15 +14,15 @@ classifiers = [
|
|
|
14
14
|
"Operating System :: OS Independent",
|
|
15
15
|
"Programming Language :: Python :: 3",
|
|
16
16
|
]
|
|
17
|
-
dependencies = [ "
|
|
17
|
+
dependencies = [ "scion-sdk[mcp]>=0.5.9,<0.6.0", "azure-core>=1.41.0", "httpx>=0.28.1", "keyring>=25.7.0", "msal>=1.39.0", "msgraph-sdk>=1.64.0", "pydantic>=2.14.1",]
|
|
18
18
|
license = "MIT"
|
|
19
19
|
|
|
20
20
|
[[project.authors]]
|
|
21
|
-
name = "
|
|
22
|
-
email = "maintainers@
|
|
21
|
+
name = "Repository Maintainers"
|
|
22
|
+
email = "maintainers@knuckles.team"
|
|
23
23
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
|
-
mcp = [ "
|
|
25
|
+
mcp = [ "scion-sdk[mcp]>=0.5.9,<0.6.0",]
|
|
26
26
|
documents = ["python-docx>=1.2.0", "python-pptx>=1.0.2"]
|
|
27
27
|
cloud = ["azure-identity>=1.26.0", "httpx>=0.28.1"]
|
|
28
28
|
windows = [
|
|
@@ -73,20 +73,12 @@ microsoft-config = "microsoft_agent.config_cli:main"
|
|
|
73
73
|
microsoft-windows-companion = "microsoft_agent.windows_companion_service:main"
|
|
74
74
|
microsoft-windows-control-plane = "microsoft_agent.windows_control_plane_service:main"
|
|
75
75
|
|
|
76
|
-
[project.entry-points."agent_connector_sdk.source_connector_providers"]
|
|
77
|
-
microsoft-agent = "microsoft_agent.connectors"
|
|
78
|
-
|
|
79
|
-
[project.entry-points."agent_connector_sdk.skill_providers"]
|
|
80
|
-
microsoft-agent = "microsoft_agent.skills"
|
|
81
|
-
|
|
82
|
-
[project.entry-points."agent_connector_sdk.ontology_providers"]
|
|
83
|
-
microsoft-agent = "microsoft_agent.ontology"
|
|
84
|
-
|
|
85
76
|
[project.entry-points."agent_connector_sdk.prompt_providers"]
|
|
86
77
|
microsoft-agent = "microsoft_agent.prompts"
|
|
87
78
|
|
|
88
79
|
[dependency-groups]
|
|
89
80
|
dev = [
|
|
81
|
+
"bump2version>=1.0.1,<2",
|
|
90
82
|
"mypy>=2.4.0,<3",
|
|
91
83
|
"pytest>=9.1.1,<10",
|
|
92
84
|
"pytest-asyncio>=1.4.0,<2",
|
|
@@ -96,9 +88,9 @@ dev = [
|
|
|
96
88
|
"ruff>=0.17.1,<1",
|
|
97
89
|
]
|
|
98
90
|
|
|
99
|
-
# The one declared connector identity: the fleet name (
|
|
91
|
+
# The one declared connector identity: the fleet name (SCION-CONNECTOR-CONTROL-R071).
|
|
100
92
|
[project.entry-points."agent_connector_sdk.connector"]
|
|
101
|
-
microsoft-mcp = "microsoft_agent"
|
|
93
|
+
microsoft-mcp = "microsoft_agent:connector"
|
|
102
94
|
|
|
103
95
|
[tool.uv.workspace]
|
|
104
96
|
members = ["."]
|
|
@@ -106,9 +98,6 @@ members = ["."]
|
|
|
106
98
|
[tool.setuptools]
|
|
107
99
|
include-package-data = false
|
|
108
100
|
|
|
109
|
-
[tool.setuptools.dynamic]
|
|
110
|
-
version = {attr = "microsoft_agent._version.__version__"}
|
|
111
|
-
|
|
112
101
|
[tool.setuptools.package-data]
|
|
113
102
|
microsoft_agent = ["connectors/**", "ontology/**", "prompts/**", "skills/**"]
|
|
114
103
|
|
|
@@ -143,5 +132,8 @@ follow_imports = "skip"
|
|
|
143
132
|
[tool.vulture]
|
|
144
133
|
ignore_names = ["request", "config"]
|
|
145
134
|
|
|
135
|
+
[tool.pipelines.codespell]
|
|
136
|
+
ignore_words = ["aNULL"]
|
|
137
|
+
|
|
146
138
|
[tool.pipelines_hooks.ste]
|
|
147
139
|
exempt = ["specs/*", "specs/**/*"]
|
|
@@ -16,13 +16,16 @@ pytestmark = pytest.mark.spec("CONN-MICROSOFT-AGENT-CONNECTOR-CONTENT-R001")
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def _server():
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
)
|
|
25
|
-
|
|
19
|
+
from unittest.mock import patch
|
|
20
|
+
|
|
21
|
+
from fastmcp import FastMCP
|
|
22
|
+
|
|
23
|
+
module = importlib.import_module("microsoft_agent.mcp_server")
|
|
24
|
+
with patch("sys.argv", ["mcp_server.py", "--transport", "stdio"]):
|
|
25
|
+
result = module.get_mcp_instance()
|
|
26
|
+
if isinstance(result, FastMCP):
|
|
27
|
+
return result
|
|
28
|
+
return next(value for value in result if isinstance(value, FastMCP))
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
async def _listings():
|
|
File without changes
|
|
@@ -10,6 +10,7 @@ from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
10
10
|
|
|
11
11
|
import pytest
|
|
12
12
|
from fastmcp import FastMCP
|
|
13
|
+
from kiota_abstractions.headers_collection import HeadersCollection
|
|
13
14
|
from kiota_abstractions.method import Method
|
|
14
15
|
from pydantic import ValidationError
|
|
15
16
|
|
|
@@ -82,7 +83,9 @@ async def test_onenote_create_sends_raw_html_request(mock_auth_manager) -> None:
|
|
|
82
83
|
pages = MagicMock()
|
|
83
84
|
pages.url_template = "{+baseurl}/me/onenote/pages"
|
|
84
85
|
pages.path_parameters = {"baseurl": "https://graph.microsoft.com/v1.0"}
|
|
85
|
-
pages.to_post_request_configuration.return_value = MagicMock(
|
|
86
|
+
pages.to_post_request_configuration.return_value = MagicMock(
|
|
87
|
+
options=[], headers=HeadersCollection(), query_parameters=None
|
|
88
|
+
)
|
|
86
89
|
pages.request_adapter.send_async = AsyncMock(return_value=native)
|
|
87
90
|
client = MagicMock()
|
|
88
91
|
client.me.onenote.pages = pages
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Keep the connector's canonical Pages and packaged skill contract explicit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import re
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
import yaml
|
|
10
|
+
|
|
11
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _workflow(name: str):
|
|
15
|
+
return yaml.safe_load((ROOT / ".github/workflows" / name).read_text())
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _actions_on(workflow: dict):
|
|
19
|
+
# PyYAML's YAML 1.1 reader represents the Actions ``on`` key as True.
|
|
20
|
+
return workflow["on"] if "on" in workflow else workflow[True]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_pages_publishes_spec_dashboard_and_supports_manual_refresh():
|
|
24
|
+
|
|
25
|
+
config = json.loads((ROOT / ".config/spec-dashboard.json").read_text())
|
|
26
|
+
assert config == {
|
|
27
|
+
"version": 1,
|
|
28
|
+
"sources": [{"glob": "specs/*/status.json", "kind": "spec"}],
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_single_pages_publisher_has_no_legacy_docs_workflow():
|
|
33
|
+
assert not (ROOT / ".github/workflows/docs.yml").exists()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_development_skill_names_actual_runtime_and_focused_tests():
|
|
37
|
+
skill = ROOT / "microsoft_agent/skills/microsoft-agent-development/SKILL.md"
|
|
38
|
+
content = skill.read_text()
|
|
39
|
+
|
|
40
|
+
assert "name: microsoft-agent-development" in content
|
|
41
|
+
assert "## Rapid delivery: the 5-minute contract" in content
|
|
42
|
+
for path in (
|
|
43
|
+
"microsoft_agent/__init__.py",
|
|
44
|
+
"microsoft_agent/auth.py",
|
|
45
|
+
"microsoft_agent/api_client.py",
|
|
46
|
+
"microsoft_agent/mcp_server.py",
|
|
47
|
+
"tests/test_publication_workflow.py",
|
|
48
|
+
"tests/test_default_content_surfaces.py",
|
|
49
|
+
"tests/test_startup.py",
|
|
50
|
+
"tests/test_mcp_server.py",
|
|
51
|
+
"tests/test_auth.py",
|
|
52
|
+
):
|
|
53
|
+
assert (ROOT / path).exists(), path
|
|
54
|
+
for runtime_name in (
|
|
55
|
+
"agent-connector-sdk",
|
|
56
|
+
"MICROSOFT_",
|
|
57
|
+
"Microsoft Graph",
|
|
58
|
+
"ChangeEnvelope",
|
|
59
|
+
"TLS",
|
|
60
|
+
):
|
|
61
|
+
assert runtime_name in content
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def test_packaged_skill_and_version_contract_are_coherent():
|
|
65
|
+
version_text = (ROOT / "microsoft_agent/_version.py").read_text()
|
|
66
|
+
# The version is read from distribution metadata; no module spells a literal.
|
|
67
|
+
assert 'connector_version("microsoft_agent")' in version_text
|
|
68
|
+
assert re.search(r'__version__\s*=\s*["\d]', version_text) is None
|
|
69
|
+
lock = (ROOT / "uv.lock").read_text()
|
|
70
|
+
assert 'name = "microsoft-agent"' in lock
|
|
71
|
+
package_data = (ROOT / "pyproject.toml").read_text()
|
|
72
|
+
assert (
|
|
73
|
+
'microsoft_agent = ["connectors/**", "ontology/**", "prompts/**", "skills/**"]'
|
|
74
|
+
in package_data
|
|
75
|
+
)
|
|
76
|
+
assert (
|
|
77
|
+
ROOT / "microsoft_agent/skills/microsoft-agent-development/SKILL.md"
|
|
78
|
+
).is_file()
|
|
@@ -201,3 +201,13 @@ def test_policy_separates_writes_and_destructive_actions():
|
|
|
201
201
|
)
|
|
202
202
|
)
|
|
203
203
|
assert destructive_policy.require("delete_mail_message").allowed is True
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def test_served_tool_prefix_does_not_hide_a_read_verb():
|
|
207
|
+
"""Served names carry ``microsoft_``; a read verb after it stays a read."""
|
|
208
|
+
from microsoft_agent.tool_policy import ToolRisk, classify_tool_risk
|
|
209
|
+
|
|
210
|
+
assert classify_tool_risk("microsoft_list_service_health") is ToolRisk.READ
|
|
211
|
+
assert classify_tool_risk("list_service_health") is ToolRisk.READ
|
|
212
|
+
assert classify_tool_risk("microsoft_delete_user") is ToolRisk.DESTRUCTIVE
|
|
213
|
+
assert classify_tool_risk("microsoft_unknownverb_thing") is ToolRisk.WRITE
|
|
File without changes
|
|
@@ -35,9 +35,7 @@ def test_provider_transport_uses_pinned_tls_and_closes_once(monkeypatch) -> None
|
|
|
35
35
|
resolver = MagicMock(return_value=profile)
|
|
36
36
|
client = MagicMock()
|
|
37
37
|
factory = MagicMock(return_value=client)
|
|
38
|
-
monkeypatch.setattr(
|
|
39
|
-
"microsoft_agent.power_platform.resolve_tls_profile", resolver
|
|
40
|
-
)
|
|
38
|
+
monkeypatch.setattr("microsoft_agent.power_platform.resolve_tls_profile", resolver)
|
|
41
39
|
monkeypatch.setattr("microsoft_agent.power_platform.create_http_client", factory)
|
|
42
40
|
|
|
43
41
|
transport = HttpxAsyncHttpTransport(
|