agentops-accelerator 0.3.6__tar.gz → 0.3.8__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 (299) hide show
  1. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.claude-plugin/marketplace.json +1 -1
  2. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/plugin/marketplace.json +1 -1
  3. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/CHANGELOG.md +32 -0
  4. {agentops_accelerator-0.3.6/src/agentops_accelerator.egg-info → agentops_accelerator-0.3.8}/PKG-INFO +1 -1
  5. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-end-to-end.md +23 -7
  6. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-hosted-agent-quickstart.md +23 -7
  7. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/tutorial-prompt-agent-quickstart.md +25 -7
  8. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/package.json +1 -1
  9. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/plugin.json +1 -1
  10. {agentops_accelerator-0.3.6/src/agentops/templates → agentops_accelerator-0.3.8/plugins/agentops}/skills/agentops-eval/SKILL.md +19 -3
  11. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/cli/app.py +32 -4
  12. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/setup_wizard.py +24 -14
  13. {agentops_accelerator-0.3.6/plugins/agentops → agentops_accelerator-0.3.8/src/agentops/templates}/skills/agentops-eval/SKILL.md +19 -3
  14. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8/src/agentops_accelerator.egg-info}/PKG-INFO +1 -1
  15. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_init_command.py +12 -2
  16. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_setup_wizard.py +74 -4
  17. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.gitattributes +0 -0
  18. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/actions/azure-oidc-login/action.yml +0 -0
  19. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/code-quality-py.instructions.md +0 -0
  20. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/copilot-instructions.md +0 -0
  21. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/dependabot.yml +0 -0
  22. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/extensions/agentops-skills/extension.mjs +0 -0
  23. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/skills/release-management/SKILL.md +0 -0
  24. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/_build.yml +0 -0
  25. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/agentops-watchdog.yml +0 -0
  26. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/ci.yml +0 -0
  27. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/cut-release.yml +0 -0
  28. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/e2e.yml +0 -0
  29. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/release.yml +0 -0
  30. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.github/workflows/staging.yml +0 -0
  31. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.gitignore +0 -0
  32. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.pre-commit-config.yaml +0 -0
  33. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/launch.json +0 -0
  34. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/settings.json +0 -0
  35. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/.vscode/tasks.json +0 -0
  36. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/AGENTS.md +0 -0
  37. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/CONTRIBUTING.md +0 -0
  38. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/LICENSE +0 -0
  39. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/README.md +0 -0
  40. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/SECURITY.md +0 -0
  41. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/bundles.md +0 -0
  42. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/ci-github-actions.md +0 -0
  43. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/concepts.md +0 -0
  44. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/doctor-checks.md +0 -0
  45. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/doctor-explained.md +0 -0
  46. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/e2e-live-architecture.md +0 -0
  47. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/e2e-live-setup.md +0 -0
  48. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/foundry-evaluation-sdk-built-in-evaluators.md +0 -0
  49. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/how-it-works.md +0 -0
  50. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/media/agentops-diagrams.vsdx +0 -0
  51. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/media/foundry-control-plane.png +0 -0
  52. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/docs/release-process.md +0 -0
  53. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/README.md +0 -0
  54. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/agentops.yaml +0 -0
  55. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/examples/flat-quickstart/dataset.jsonl +0 -0
  56. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/icon.png +0 -0
  57. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/Dockerfile +0 -0
  58. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/app.py +0 -0
  59. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/agent-app/requirements.txt +0 -0
  60. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/bootstrap.bicep +0 -0
  61. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/bootstrap.parameters.example.json +0 -0
  62. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/infra/e2e/perrun.bicep +0 -0
  63. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/launch.json +0 -0
  64. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/media/foundry.svg +0 -0
  65. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/media/quickstart.gif +0 -0
  66. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/.vscodeignore +0 -0
  67. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/LICENSE +0 -0
  68. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/README.md +0 -0
  69. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-agent/SKILL.md +0 -0
  70. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-config/SKILL.md +0 -0
  71. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-dataset/SKILL.md +0 -0
  72. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-report/SKILL.md +0 -0
  73. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/plugins/agentops/skills/agentops-workflow/SKILL.md +0 -0
  74. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/pyproject.toml +0 -0
  75. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/create_support_agent.py +0 -0
  76. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/cut-release.ps1 +0 -0
  77. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/cut-release.sh +0 -0
  78. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_aggregate_summary.py +0 -0
  79. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/basic.jsonl +0 -0
  80. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/rag.jsonl +0 -0
  81. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_data/tools.jsonl +0 -0
  82. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_demo.py +0 -0
  83. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_hosted_agent.py +0 -0
  84. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_make_transcript.py +0 -0
  85. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/e2e_render_config.py +0 -0
  86. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/release.ps1 +0 -0
  87. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/release.sh +0 -0
  88. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/setup-e2e-new-tenant.ps1 +0 -0
  89. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/staging.ps1 +0 -0
  90. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/staging.sh +0 -0
  91. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/sync-skills.ps1 +0 -0
  92. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/scripts/sync-skills.sh +0 -0
  93. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/setup.cfg +0 -0
  94. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/__init__.py +0 -0
  95. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/__main__.py +0 -0
  96. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/__init__.py +0 -0
  97. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/_legacy_ids.py +0 -0
  98. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/analyzer.py +0 -0
  99. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/__init__.py +0 -0
  100. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/catalog.py +0 -0
  101. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/errors.py +0 -0
  102. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/foundry_config.py +0 -0
  103. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/latency.py +0 -0
  104. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/opex.py +0 -0
  105. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/opex_workspace.py +0 -0
  106. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture.py +0 -0
  107. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/__init__.py +0 -0
  108. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/content_filter.py +0 -0
  109. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/diagnostics.py +0 -0
  110. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/local_auth.py +0 -0
  111. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/managed_identity.py +0 -0
  112. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/posture_rules/network.py +0 -0
  113. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/regression.py +0 -0
  114. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/release_readiness.py +0 -0
  115. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/safety.py +0 -0
  116. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/checks/spec_conformance.py +0 -0
  117. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/cockpit.py +0 -0
  118. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/config.py +0 -0
  119. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/findings.py +0 -0
  120. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/history.py +0 -0
  121. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/knowledge/__init__.py +0 -0
  122. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/knowledge/waf-checklist.csv +0 -0
  123. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/__init__.py +0 -0
  124. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_base.py +0 -0
  125. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_bundle_rule.py +0 -0
  126. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_client.py +0 -0
  127. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_dataset_rules.py +0 -0
  128. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_engine.py +0 -0
  129. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_prompt_rules.py +0 -0
  130. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/llm_assist/_spec_rules.py +0 -0
  131. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/production_telemetry.py +0 -0
  132. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/report.py +0 -0
  133. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/__init__.py +0 -0
  134. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/app.py +0 -0
  135. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/auth.py +0 -0
  136. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/chat.py +0 -0
  137. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/server/protocol.py +0 -0
  138. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/__init__.py +0 -0
  139. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/azure_monitor.py +0 -0
  140. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/azure_resources.py +0 -0
  141. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/foundry_control.py +0 -0
  142. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/results_history.py +0 -0
  143. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/__init__.py +0 -0
  144. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/_base.py +0 -0
  145. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/agents_md.py +0 -0
  146. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/sources/spec_detectors/spec_kit.py +0 -0
  147. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/agent/time_range.py +0 -0
  148. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/cli/__init__.py +0 -0
  149. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/__init__.py +0 -0
  150. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/agentops_config.py +0 -0
  151. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/config_loader.py +0 -0
  152. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/evaluators.py +0 -0
  153. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/release_evidence.py +0 -0
  154. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/core/results.py +0 -0
  155. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/mcp/__init__.py +0 -0
  156. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/mcp/server.py +0 -0
  157. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/__init__.py +0 -0
  158. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/cloud_results.py +0 -0
  159. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/cloud_runner.py +0 -0
  160. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/comparison.py +0 -0
  161. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/diagnostics.py +0 -0
  162. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/invocations.py +0 -0
  163. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/official_eval.py +0 -0
  164. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/orchestrator.py +0 -0
  165. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/prompt_deploy.py +0 -0
  166. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/publisher.py +0 -0
  167. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/reporter.py +0 -0
  168. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/runtime.py +0 -0
  169. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/pipeline/thresholds.py +0 -0
  170. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/__init__.py +0 -0
  171. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/cicd.py +0 -0
  172. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/eval_analysis.py +0 -0
  173. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/evidence_pack.py +0 -0
  174. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/initializer.py +0 -0
  175. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/preflight.py +0 -0
  176. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/skills.py +0 -0
  177. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/trace_promotion.py +0 -0
  178. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/services/workflow_analysis.py +0 -0
  179. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/.gitignore +0 -0
  180. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/__init__.py +0 -0
  181. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/Dockerfile +0 -0
  182. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/README.md +0 -0
  183. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent-server/main.bicep +0 -0
  184. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agent.yaml +0 -0
  185. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/agentops.yaml +0 -0
  186. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/foundry.svg +0 -0
  187. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/icon.png +0 -0
  188. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev-azd.yml +0 -0
  189. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev.yml +0 -0
  190. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod-azd.yml +0 -0
  191. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod.yml +0 -0
  192. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prompt-agent.yml +0 -0
  193. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa-azd.yml +0 -0
  194. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa.yml +0 -0
  195. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-pr-prompt-agent.yml +0 -0
  196. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-pr.yml +0 -0
  197. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/pipelines/azuredevops/agentops-watchdog.yml +0 -0
  198. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/project.gitignore +0 -0
  199. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/sample-traces.jsonl +0 -0
  200. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-agent/SKILL.md +0 -0
  201. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-config/SKILL.md +0 -0
  202. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-dataset/SKILL.md +0 -0
  203. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-report/SKILL.md +0 -0
  204. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/skills/agentops-workflow/SKILL.md +0 -0
  205. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/smoke.jsonl +0 -0
  206. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/waf-checklist.README.md +0 -0
  207. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/waf-checklist.csv +0 -0
  208. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-dev-azd.yml +0 -0
  209. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-dev.yml +0 -0
  210. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prod-azd.yml +0 -0
  211. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prod.yml +0 -0
  212. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-prompt-agent.yml +0 -0
  213. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-qa-azd.yml +0 -0
  214. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-deploy-qa.yml +0 -0
  215. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-pr-prompt-agent.yml +0 -0
  216. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-pr.yml +0 -0
  217. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/templates/workflows/agentops-watchdog.yml +0 -0
  218. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/__init__.py +0 -0
  219. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/azd_env.py +0 -0
  220. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/azure_endpoints.py +0 -0
  221. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/colors.py +0 -0
  222. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/dotenv_loader.py +0 -0
  223. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/foundry_discovery.py +0 -0
  224. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/logging.py +0 -0
  225. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/telemetry.py +0 -0
  226. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops/utils/yaml.py +0 -0
  227. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/SOURCES.txt +0 -0
  228. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/dependency_links.txt +0 -0
  229. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/entry_points.txt +0 -0
  230. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/requires.txt +0 -0
  231. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/src/agentops_accelerator.egg-info/top_level.txt +0 -0
  232. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/TESTING.md +0 -0
  233. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/fixtures/fake_adapter.py +0 -0
  234. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/fixtures/fake_eval_runner.py +0 -0
  235. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/.gitkeep +0 -0
  236. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/test_cli_flat_schema.py +0 -0
  237. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/integration/test_pipeline_smoke.py +0 -0
  238. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/.gitkeep +0 -0
  239. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_analyzer.py +0 -0
  240. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_categories.py +0 -0
  241. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_errors.py +0 -0
  242. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_foundry_config.py +0 -0
  243. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_opex.py +0 -0
  244. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_opex_workspace.py +0 -0
  245. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_regression.py +0 -0
  246. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_safety.py +0 -0
  247. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_checks_spec_conformance.py +0 -0
  248. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_cli.py +0 -0
  249. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_config.py +0 -0
  250. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_findings.py +0 -0
  251. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_history.py +0 -0
  252. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_opex_workspace_check.py +0 -0
  253. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_posture_rules.py +0 -0
  254. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_results_history.py +0 -0
  255. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agent_server.py +0 -0
  256. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_agentops_config.py +0 -0
  257. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azd_env.py +0 -0
  258. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azure_endpoints.py +0 -0
  259. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_azure_resources_discovery.py +0 -0
  260. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cicd.py +0 -0
  261. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_cockpit_connection_summary.py +0 -0
  262. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_cockpit_port_conflict.py +0 -0
  263. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_commands.py +0 -0
  264. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cli_explain.py +0 -0
  265. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cloud_results.py +0 -0
  266. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cloud_runner.py +0 -0
  267. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_cockpit.py +0 -0
  268. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_diagnostics.py +0 -0
  269. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_doctor_catalog.py +0 -0
  270. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_doctor_cli_explain.py +0 -0
  271. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_dotenv_loader.py +0 -0
  272. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_e2e_render.py +0 -0
  273. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_eval_analysis.py +0 -0
  274. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_eval_run_grader_errors.py +0 -0
  275. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_evaluators.py +0 -0
  276. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_foundry_discovery.py +0 -0
  277. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_initializer.py +0 -0
  278. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_invocations.py +0 -0
  279. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_knowledge_loader.py +0 -0
  280. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_llm_assist.py +0 -0
  281. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_llm_assist_spec_rules.py +0 -0
  282. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_mcp_server.py +0 -0
  283. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_official_eval.py +0 -0
  284. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_pipeline_publisher.py +0 -0
  285. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_pipeline_reporter.py +0 -0
  286. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_preflight.py +0 -0
  287. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_production_telemetry.py +0 -0
  288. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_prompt_deploy.py +0 -0
  289. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_release_evidence.py +0 -0
  290. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_runtime_conversation.py +0 -0
  291. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_runtime_model_config.py +0 -0
  292. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_skills.py +0 -0
  293. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_skills_sync.py +0 -0
  294. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_telemetry.py +0 -0
  295. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_time_range.py +0 -0
  296. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_trace_promotion.py +0 -0
  297. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tests/unit/test_workflow_analysis.py +0 -0
  298. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/tombstones/vscode/CDN_DEPRECATION_REQUEST.md +0 -0
  299. {agentops_accelerator-0.3.6 → agentops_accelerator-0.3.8}/uv.lock +0 -0
@@ -13,7 +13,7 @@
13
13
  "name": "agentops-accelerator",
14
14
  "source": "../../plugins/agentops",
15
15
  "description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
16
- "version": "0.3.6",
16
+ "version": "0.3.8",
17
17
  "keywords": [
18
18
  "agentops",
19
19
  "evaluation",
@@ -13,7 +13,7 @@
13
13
  "name": "agentops-accelerator",
14
14
  "source": "../../plugins/agentops",
15
15
  "description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
16
- "version": "0.3.6",
16
+ "version": "0.3.8",
17
17
  "keywords": [
18
18
  "agentops",
19
19
  "evaluation",
@@ -5,6 +5,38 @@ This format follows [Keep a Changelog](https://keepachangelog.com/) and adheres
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.3.8] - 2026-06-04
9
+
10
+ ### Fixed
11
+ - **`agentops init` now handles blank required wizard values gracefully.** If
12
+ the user presses Enter without an existing Foundry endpoint or agent default,
13
+ the wizard explains that AgentOps needs the missing value and re-prompts
14
+ instead of proceeding to a later persistence failure. Scripted blank flags
15
+ such as `--agent ""` now exit with the same friendly message and no traceback.
16
+ - **`agentops init` no longer depends on undeclared PyYAML.** The setup wizard
17
+ now reads and writes `agentops.yaml` through the repository's `ruamel.yaml`
18
+ helpers, fixing the ugly `No module named 'yaml'` traceback seen in clean
19
+ installs.
20
+
21
+ ### Changed
22
+ - **AgentOps brand tagline sequence now reads `Evaluate :: Ship :: Observe ::
23
+ Own`.** The startup/explain banner now matches the intended product story
24
+ order.
25
+
26
+ ## [0.3.7] - 2026-06-01
27
+
28
+ ### Fixed
29
+ - **RBAC preflight now covers Foundry/Azure AI managed identities, not only
30
+ the signed-in user.** Cloud evaluations run server-side and some agent or
31
+ grader calls authenticate as the managed identities on the backing AI
32
+ Services account and child Foundry project. Granting `Cognitive Services
33
+ OpenAI User` only to the user still allowed intermittent grader
34
+ `AuthenticationError` failures and the v0.3.6 execution warning. The
35
+ prompt-agent, hosted-agent, and end-to-end tutorials plus the
36
+ `agentops-eval` skill now assign the same data-plane role to every managed
37
+ identity in the Foundry resource group, preventing the warning/failure path
38
+ before `agentops eval run`.
39
+
8
40
  ## [0.3.6] - 2026-06-01
9
41
 
10
42
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentops-accelerator
3
- Version: 0.3.6
3
+ Version: 0.3.8
4
4
  Summary: Release readiness gates and evidence for Microsoft Foundry agents
5
5
  License: MIT License
6
6
 
@@ -286,7 +286,7 @@ for creating agents, tools, tracing, evaluation, and red-team scans:
286
286
  https://github.com/Azure-Samples/microsoft-foundry-e2e-agent-observability-workshop/tree/2026-04-aie-europe
287
287
  ```
288
288
 
289
- ### Grant your identity data-plane access to the AI Services account
289
+ ### Grant data-plane access to your identity and Foundry managed identities
290
290
 
291
291
  Both options above (prompt agent and hosted HTTP agent) eventually drive
292
292
  an `agentops eval run` that calls chat-completions on the AI Services
@@ -300,16 +300,32 @@ what causes the eval to fail later with `PermissionDenied` on
300
300
  `Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/
301
301
  completions/action`.
302
302
 
303
- Run the assignment once per resource group that hosts a Foundry account
304
- you will evaluate against. Replace `<your-objectId>`,
305
- `<subscription-id>`, and `<resource-group>` with your own values (use
306
- `az ad signed-in-user show --query id -o tsv` to get the object ID):
303
+ Run these assignments once per resource group that hosts a Foundry account
304
+ you will evaluate against. Cloud evaluations run server-side and some agent
305
+ or grader calls may authenticate as Foundry/Azure AI managed identities, not
306
+ only as your signed-in user. Assigning the role only to your user can still
307
+ leave graders failing with `AuthenticationError`.
307
308
 
308
309
  ```powershell
310
+ $subscriptionId = az account show --query id -o tsv
311
+ $resourceGroup = "<resource-group>"
312
+ $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
313
+ $userObjectId = az ad signed-in-user show --query id -o tsv
314
+
309
315
  az role assignment create `
310
- --assignee <your-objectId> `
316
+ --assignee $userObjectId `
311
317
  --role "Cognitive Services OpenAI User" `
312
- --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>
318
+ --scope $scope
319
+
320
+ az resource list -g $resourceGroup `
321
+ --query "[?identity.principalId!=null].identity.principalId" -o tsv |
322
+ ForEach-Object {
323
+ az role assignment create `
324
+ --assignee-object-id $_ `
325
+ --assignee-principal-type ServicePrincipal `
326
+ --role "Cognitive Services OpenAI User" `
327
+ --scope $scope
328
+ }
313
329
  ```
314
330
 
315
331
  > **Give the assignment a few minutes to propagate.** Data-plane role
@@ -310,7 +310,7 @@ If the deployed endpoint needs a bearer token:
310
310
  $env:HOSTED_AGENT_TOKEN = "<token>"
311
311
  ```
312
312
 
313
- ### Grant your identity data-plane access to the AI Services account
313
+ ### Grant data-plane access to your identity and Foundry managed identities
314
314
 
315
315
  The local AI-assisted evaluators that AgentOps runs in step 8 call
316
316
  chat-completions on the AI Services account that backs your Foundry
@@ -322,16 +322,32 @@ but `dataActions: []`. Skipping this once causes the eval to fail with
322
322
  `PermissionDenied` on `Microsoft.CognitiveServices/accounts/OpenAI/
323
323
  deployments/chat/completions/action`.
324
324
 
325
- Run the assignment once per resource group hosting a Foundry account
326
- you will evaluate against (replace `<your-objectId>`,
327
- `<subscription-id>`, and `<resource-group>` with your values; get the
328
- object ID with `az ad signed-in-user show --query id -o tsv`):
325
+ Run these assignments once per resource group hosting a Foundry account
326
+ you will evaluate against. Local AI-assisted evaluators use your identity,
327
+ while Foundry-hosted/server-side eval paths may use Azure AI managed
328
+ identities from the same resource group. Assigning only the user can still
329
+ leave server-side graders failing with `AuthenticationError`.
329
330
 
330
331
  ```powershell
332
+ $subscriptionId = az account show --query id -o tsv
333
+ $resourceGroup = "<resource-group>"
334
+ $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
335
+ $userObjectId = az ad signed-in-user show --query id -o tsv
336
+
331
337
  az role assignment create `
332
- --assignee <your-objectId> `
338
+ --assignee $userObjectId `
333
339
  --role "Cognitive Services OpenAI User" `
334
- --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>
340
+ --scope $scope
341
+
342
+ az resource list -g $resourceGroup `
343
+ --query "[?identity.principalId!=null].identity.principalId" -o tsv |
344
+ ForEach-Object {
345
+ az role assignment create `
346
+ --assignee-object-id $_ `
347
+ --assignee-principal-type ServicePrincipal `
348
+ --role "Cognitive Services OpenAI User" `
349
+ --scope $scope
350
+ }
335
351
  ```
336
352
 
337
353
  > **Give the assignment a few minutes to propagate.** Data-plane role
@@ -241,7 +241,7 @@ Show me the planned changes and the resulting endpoints before applying.
241
241
 
242
242
  If the skill is not available, use Path A.
243
243
 
244
- ### Grant your identity data-plane access to the AI Services account
244
+ ### Grant data-plane access to your identity and Foundry managed identities
245
245
 
246
246
  Creating a project through the portal only assigns you `Foundry User` **at
247
247
  the project scope**. That role does not cover the OpenAI data-plane actions
@@ -257,16 +257,34 @@ Skipping this step is what causes the eval grader to fail later with::
257
257
  data action `Microsoft.CognitiveServices/accounts/OpenAI/deployments/
258
258
  chat/completions/action` to perform `POST /openai/deployments/...`
259
259
 
260
- Run the assignment once per resource group that hosts a Foundry account
261
- you will evaluate against. Replace `<your-objectId>`, `<subscription-id>`,
262
- and `<resource-group>` with your own values (you can get the object ID
263
- with `az ad signed-in-user show --query id -o tsv`):
260
+ Run these assignments once per resource group that hosts a Foundry account
261
+ you will evaluate against. Cloud evaluations run server-side: the agent call
262
+ and graders may authenticate as Foundry/Azure AI managed identities, not only
263
+ as your signed-in user. Assigning the role only to your user can still leave
264
+ some graders failing with `AuthenticationError`.
264
265
 
265
266
  ```powershell
267
+ $subscriptionId = az account show --query id -o tsv
268
+ $resourceGroup = "<resource-group>"
269
+ $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
270
+ $userObjectId = az ad signed-in-user show --query id -o tsv
271
+
272
+ # User running local commands / creating cloud evals.
266
273
  az role assignment create `
267
- --assignee <your-objectId> `
274
+ --assignee $userObjectId `
268
275
  --role "Cognitive Services OpenAI User" `
269
- --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>
276
+ --scope $scope
277
+
278
+ # Foundry/Azure AI managed identities used by server-side agent/evaluator calls.
279
+ az resource list -g $resourceGroup `
280
+ --query "[?identity.principalId!=null].identity.principalId" -o tsv |
281
+ ForEach-Object {
282
+ az role assignment create `
283
+ --assignee-object-id $_ `
284
+ --assignee-principal-type ServicePrincipal `
285
+ --role "Cognitive Services OpenAI User" `
286
+ --scope $scope
287
+ }
270
288
  ```
271
289
 
272
290
  Repeat the command with the `travel-agent-dev` resource group if the dev
@@ -2,7 +2,7 @@
2
2
  "name": "agentops-accelerator",
3
3
  "displayName": "AgentOps Accelerator — Skills for GitHub Copilot",
4
4
  "description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Accelerator and Microsoft Foundry agents.",
5
- "version": "0.3.6",
5
+ "version": "0.3.8",
6
6
  "publisher": "AgentOpsAccelerator",
7
7
  "icon": "icon.png",
8
8
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agentops-accelerator",
3
3
  "description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Accelerator and Microsoft Foundry agents.",
4
- "version": "0.3.6",
4
+ "version": "0.3.8",
5
5
  "author": {
6
6
  "name": "AgentOps Accelerator",
7
7
  "url": "https://github.com/Azure/agentops"
@@ -41,8 +41,12 @@ PermissionDenied … lacks the required data action
41
41
  'Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action'
42
42
  ```
43
43
 
44
- Run this preflight before Step 1 - it is idempotent (Azure returns
45
- `RoleAssignmentExists` if already granted) and takes ~5 seconds:
44
+ Run this preflight before Step 1. It must grant the role to the signed-in
45
+ user **and** to the Foundry/Azure AI managed identities in the resource
46
+ group. Cloud evaluations run server-side and some graders authenticate as
47
+ those managed identities, so assigning only the user can still produce
48
+ intermittent `AuthenticationError` grader failures. The commands are
49
+ idempotent (`RoleAssignmentExists` means the role was already granted):
46
50
 
47
51
  ```bash
48
52
  # 1. Resolve the AI Services account from agentops.yaml / .azure/<env>/.env
@@ -55,11 +59,23 @@ SUB_ID=$(az account show --query id -o tsv)
55
59
  RG=$(az cognitiveservices account list --subscription "$SUB_ID" --query "[?name=='$ACCOUNT_NAME'].resourceGroup | [0]" -o tsv)
56
60
  OBJ_ID=$(az ad signed-in-user show --query id -o tsv)
57
61
 
58
- # 3. Grant data-plane access at the RG scope (covers sandbox + future evals)
62
+ # 3. Grant the user data-plane access at RG scope.
59
63
  az role assignment create \
60
64
  --assignee "$OBJ_ID" \
61
65
  --role "Cognitive Services OpenAI User" \
62
66
  --scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
67
+
68
+ # 4. Grant the same data-plane role to Foundry/Azure AI managed identities.
69
+ az resource list -g "$RG" \
70
+ --query "[?identity.principalId!=null].identity.principalId" -o tsv |
71
+ while read -r PRINCIPAL_ID; do
72
+ [ -z "$PRINCIPAL_ID" ] && continue
73
+ az role assignment create \
74
+ --assignee-object-id "$PRINCIPAL_ID" \
75
+ --assignee-principal-type ServicePrincipal \
76
+ --role "Cognitive Services OpenAI User" \
77
+ --scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
78
+ done
63
79
  ```
64
80
 
65
81
  PowerShell equivalent: replace `$(...)` with the PowerShell variable
@@ -1365,6 +1365,7 @@ def cmd_init(
1365
1365
  AGENT_TITLE,
1366
1366
  DATASET_TITLE,
1367
1367
  PROJECT_ENDPOINT_TITLE,
1368
+ REQUIRED_CONFIGURATION_MESSAGE,
1368
1369
  WizardAnswers,
1369
1370
  apply_answers,
1370
1371
  discover_defaults,
@@ -1476,16 +1477,37 @@ def cmd_init(
1476
1477
  if any_flag:
1477
1478
  # Scripted mode — validate then apply.
1478
1479
  if project_endpoint is not None:
1480
+ if not project_endpoint.strip():
1481
+ typer.echo(
1482
+ f"{_cli_error('Error')}: --project-endpoint is required. "
1483
+ f"{REQUIRED_CONFIGURATION_MESSAGE}",
1484
+ err=True,
1485
+ )
1486
+ raise typer.Exit(code=1)
1479
1487
  err = validate_project_endpoint(project_endpoint)
1480
1488
  if err:
1481
1489
  typer.echo(f"{_cli_error('Error')}: --project-endpoint: {err}", err=True)
1482
1490
  raise typer.Exit(code=1)
1483
1491
  if agent is not None:
1492
+ if not agent.strip():
1493
+ typer.echo(
1494
+ f"{_cli_error('Error')}: --agent is required. "
1495
+ f"{REQUIRED_CONFIGURATION_MESSAGE}",
1496
+ err=True,
1497
+ )
1498
+ raise typer.Exit(code=1)
1484
1499
  err = validate_agent(agent)
1485
1500
  if err:
1486
1501
  typer.echo(f"{_cli_error('Error')}: --agent: {err}", err=True)
1487
1502
  raise typer.Exit(code=1)
1488
1503
  if dataset is not None:
1504
+ if not dataset.strip():
1505
+ typer.echo(
1506
+ f"{_cli_error('Error')}: --dataset is required. "
1507
+ f"{REQUIRED_CONFIGURATION_MESSAGE}",
1508
+ err=True,
1509
+ )
1510
+ raise typer.Exit(code=1)
1489
1511
  err = validate_dataset(dataset, workspace)
1490
1512
  if err:
1491
1513
  typer.echo(f"{_cli_error('Error')}: --dataset: {err}", err=True)
@@ -1605,8 +1627,14 @@ def cmd_init(
1605
1627
  default_env_name=target_env_name,
1606
1628
  azd_env_name=azd_env_name,
1607
1629
  )
1608
- except RuntimeError as exc:
1609
- typer.echo(f"{_cli_error('Error')}: {exc}", err=True)
1630
+ except Exception as exc: # noqa: BLE001
1631
+ typer.echo(
1632
+ f"{_cli_error('Error')}: could not save AgentOps configuration. "
1633
+ f"{REQUIRED_CONFIGURATION_MESSAGE}",
1634
+ err=True,
1635
+ )
1636
+ if str(exc):
1637
+ typer.echo(f"{_cli_warn('Details')}: {exc}", err=True)
1610
1638
  raise typer.Exit(code=1)
1611
1639
 
1612
1640
  typer.echo("")
@@ -4362,8 +4390,8 @@ def _colorize_block(
4362
4390
  # fallback keeps the same words on a single line.
4363
4391
  def _agentops_tagline() -> str:
4364
4392
  if _terminal_unicode_enabled():
4365
- return "Evaluate · Observe · Diagnose · Ship — every Foundry agent."
4366
- return "Evaluate :: Observe :: Diagnose :: Ship -- every Foundry agent."
4393
+ return "Evaluate · Ship · Observe · Own — every Foundry agent."
4394
+ return "Evaluate :: Ship :: Observe :: Own -- every Foundry agent."
4367
4395
 
4368
4396
 
4369
4397
  def _render_brand_block(
@@ -67,6 +67,12 @@ DATASET_HELP = (
67
67
  ENV_KEY_PROJECT_ENDPOINT = "AZURE_AI_FOUNDRY_PROJECT_ENDPOINT"
68
68
  ENV_KEY_APPINSIGHTS = "APPLICATIONINSIGHTS_CONNECTION_STRING"
69
69
 
70
+ REQUIRED_CONFIGURATION_MESSAGE = (
71
+ "AgentOps needs a Foundry project endpoint, an agent, and a dataset path "
72
+ "before it can finish configuration. Enter the missing value, or press "
73
+ "Ctrl+C to cancel and re-run `agentops init` later."
74
+ )
75
+
70
76
 
71
77
  # ---------------------------------------------------------------------------
72
78
  # Data models
@@ -356,18 +362,16 @@ def _read_agentops_yaml(workspace: Path) -> dict:
356
362
  if not path.exists():
357
363
  return {}
358
364
  try:
359
- import yaml # noqa: PLC0415
360
- except Exception: # noqa: BLE001
361
- return {}
362
- try:
363
- data = yaml.safe_load(path.read_text(encoding="utf-8"))
365
+ from agentops.utils.yaml import load_yaml # noqa: PLC0415
366
+
367
+ data = load_yaml(path)
364
368
  except Exception: # noqa: BLE001
365
369
  return {}
366
370
  return data if isinstance(data, dict) else {}
367
371
 
368
372
 
369
373
  def _write_agentops_yaml(path: Path, data: dict) -> None:
370
- import yaml # noqa: PLC0415
374
+ from agentops.utils.yaml import save_yaml # noqa: PLC0415
371
375
 
372
376
  path.parent.mkdir(parents=True, exist_ok=True)
373
377
  # Preserve simple field order for readability: version, agent, dataset,
@@ -381,10 +385,7 @@ def _write_agentops_yaml(path: Path, data: dict) -> None:
381
385
  for key, value in data.items():
382
386
  if key not in ordered:
383
387
  ordered[key] = value
384
- path.write_text(
385
- yaml.safe_dump(ordered, sort_keys=False, default_flow_style=False),
386
- encoding="utf-8",
387
- )
388
+ save_yaml(path, ordered)
388
389
 
389
390
 
390
391
  _AGENTOPS_ENV_HEADER = (
@@ -601,7 +602,11 @@ def run_wizard(
601
602
  raw = prompt("Foundry project endpoint", effective_endpoint_default)
602
603
  value = raw.strip()
603
604
  if not value:
604
- break # keep current / leave blank
605
+ if effective_endpoint_default:
606
+ break # keep current
607
+ echo(" ! Foundry project endpoint is required.")
608
+ echo(" ! " + REQUIRED_CONFIGURATION_MESSAGE)
609
+ continue
605
610
  err = validate_project_endpoint(value)
606
611
  if err:
607
612
  echo(" ! " + err)
@@ -623,7 +628,11 @@ def run_wizard(
623
628
  raw = prompt("Agent", defaults.agent)
624
629
  value = raw.strip()
625
630
  if not value:
626
- break
631
+ if defaults.agent:
632
+ break # keep current
633
+ echo(" ! Agent is required.")
634
+ echo(" ! " + REQUIRED_CONFIGURATION_MESSAGE)
635
+ continue
627
636
  err = validate_agent(value)
628
637
  if err:
629
638
  echo(" ! " + err)
@@ -641,11 +650,12 @@ def run_wizard(
641
650
  echo("")
642
651
  echo(DATASET_TITLE)
643
652
  echo(_indent(DATASET_HELP))
653
+ dataset_default = defaults.dataset or ".agentops/data/smoke.jsonl"
644
654
  while True:
645
- raw = prompt("Dataset path", defaults.dataset or ".agentops/data/smoke.jsonl")
655
+ raw = prompt("Dataset path", dataset_default)
646
656
  value = raw.strip()
647
657
  if not value:
648
- break
658
+ value = dataset_default
649
659
  err = validate_dataset(value, workspace)
650
660
  if err:
651
661
  echo(" ! " + err)
@@ -41,8 +41,12 @@ PermissionDenied … lacks the required data action
41
41
  'Microsoft.CognitiveServices/accounts/OpenAI/deployments/chat/completions/action'
42
42
  ```
43
43
 
44
- Run this preflight before Step 1 - it is idempotent (Azure returns
45
- `RoleAssignmentExists` if already granted) and takes ~5 seconds:
44
+ Run this preflight before Step 1. It must grant the role to the signed-in
45
+ user **and** to the Foundry/Azure AI managed identities in the resource
46
+ group. Cloud evaluations run server-side and some graders authenticate as
47
+ those managed identities, so assigning only the user can still produce
48
+ intermittent `AuthenticationError` grader failures. The commands are
49
+ idempotent (`RoleAssignmentExists` means the role was already granted):
46
50
 
47
51
  ```bash
48
52
  # 1. Resolve the AI Services account from agentops.yaml / .azure/<env>/.env
@@ -55,11 +59,23 @@ SUB_ID=$(az account show --query id -o tsv)
55
59
  RG=$(az cognitiveservices account list --subscription "$SUB_ID" --query "[?name=='$ACCOUNT_NAME'].resourceGroup | [0]" -o tsv)
56
60
  OBJ_ID=$(az ad signed-in-user show --query id -o tsv)
57
61
 
58
- # 3. Grant data-plane access at the RG scope (covers sandbox + future evals)
62
+ # 3. Grant the user data-plane access at RG scope.
59
63
  az role assignment create \
60
64
  --assignee "$OBJ_ID" \
61
65
  --role "Cognitive Services OpenAI User" \
62
66
  --scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
67
+
68
+ # 4. Grant the same data-plane role to Foundry/Azure AI managed identities.
69
+ az resource list -g "$RG" \
70
+ --query "[?identity.principalId!=null].identity.principalId" -o tsv |
71
+ while read -r PRINCIPAL_ID; do
72
+ [ -z "$PRINCIPAL_ID" ] && continue
73
+ az role assignment create \
74
+ --assignee-object-id "$PRINCIPAL_ID" \
75
+ --assignee-principal-type ServicePrincipal \
76
+ --role "Cognitive Services OpenAI User" \
77
+ --scope "/subscriptions/$SUB_ID/resourceGroups/$RG"
78
+ done
63
79
  ```
64
80
 
65
81
  PowerShell equivalent: replace `$(...)` with the PowerShell variable
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentops-accelerator
3
- Version: 0.3.6
3
+ Version: 0.3.8
4
4
  Summary: Release readiness gates and evidence for Microsoft Foundry agents
5
5
  License: MIT License
6
6
 
@@ -119,6 +119,16 @@ def test_init_scripted_validates_project_endpoint(tmp_path: Path) -> None:
119
119
  assert "Project endpoint" in result.output
120
120
 
121
121
 
122
+ def test_init_scripted_blank_required_value_is_friendly(tmp_path: Path) -> None:
123
+ """Blank scripted values fail with a concise message, not a traceback."""
124
+ result = runner.invoke(app, ["init", "--dir", str(tmp_path), "--agent", ""])
125
+
126
+ assert result.exit_code == 1
127
+ assert "--agent is required" in result.output
128
+ assert "AgentOps needs a Foundry project endpoint" in result.output
129
+ assert "Traceback" not in result.output
130
+
131
+
122
132
  def test_init_scripted_with_custom_azd_env(tmp_path: Path) -> None:
123
133
  """`--azd-env qa` writes to the explicit azd env instead of the local env."""
124
134
  runner.invoke(app, ["init", "--dir", str(tmp_path), "--no-prompt"])
@@ -293,7 +303,7 @@ def test_init_prints_brand_banner(tmp_path: Path, monkeypatch) -> None:
293
303
  # ASCII letterforms from _AGENTOPS_PLAIN_BANNER (figlet "Standard").
294
304
  assert "____ _____ _ _ _____" in text
295
305
  # The catchphrase, ASCII fallback variant.
296
- assert "Evaluate :: Observe :: Diagnose :: Ship -- every Foundry agent." in text
306
+ assert "Evaluate :: Ship :: Observe :: Own -- every Foundry agent." in text
297
307
 
298
308
 
299
309
  def test_brand_tagline_is_used_by_explain_pages(monkeypatch) -> None:
@@ -305,7 +315,7 @@ def test_brand_tagline_is_used_by_explain_pages(monkeypatch) -> None:
305
315
  result = runner.invoke(app, ["init", "explain", "--no-pager"])
306
316
  assert result.exit_code == 0
307
317
  text = _strip_ansi(result.stdout)
308
- assert "Evaluate :: Observe :: Diagnose :: Ship -- every Foundry agent." in text
318
+ assert "Evaluate :: Ship :: Observe :: Own -- every Foundry agent." in text
309
319
 
310
320
 
311
321
  # ---------------------------------------------------------------------------
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import json
6
6
  import os
7
+ import builtins
7
8
  from pathlib import Path
8
9
 
9
10
  import pytest
@@ -242,6 +243,29 @@ def test_apply_answers_writes_agent_and_dataset_to_yaml(tmp_path: Path):
242
243
  assert "dataset: .agentops/data/smoke.jsonl" in text
243
244
 
244
245
 
246
+ def test_apply_answers_writes_yaml_without_pyyaml(
247
+ tmp_path: Path, monkeypatch: pytest.MonkeyPatch
248
+ ):
249
+ real_import = builtins.__import__
250
+
251
+ def _import(name, *args, **kwargs): # noqa: ANN001
252
+ if name == "yaml":
253
+ raise ModuleNotFoundError("No module named 'yaml'")
254
+ return real_import(name, *args, **kwargs)
255
+
256
+ monkeypatch.setattr(builtins, "__import__", _import)
257
+
258
+ result = apply_answers(
259
+ tmp_path,
260
+ WizardAnswers(agent="my-bot:7", dataset=".agentops/data/smoke.jsonl"),
261
+ )
262
+
263
+ assert result.yaml_updated is True
264
+ assert "agent: my-bot:7" in (tmp_path / "agentops.yaml").read_text(
265
+ encoding="utf-8"
266
+ )
267
+
268
+
245
269
  def test_apply_answers_does_not_write_project_endpoint_to_yaml(tmp_path: Path):
246
270
  """Environment-specific endpoints stay out of agentops.yaml."""
247
271
  answers = WizardAnswers(
@@ -465,7 +489,7 @@ def test_run_wizard_does_not_prompt_for_appinsights(
465
489
  assert "Application Insights" not in "\n".join(messages)
466
490
 
467
491
 
468
- def test_run_wizard_empty_input_keeps_current(
492
+ def test_run_wizard_empty_input_reprompts_required_missing_endpoint(
469
493
  tmp_path: Path, monkeypatch: pytest.MonkeyPatch
470
494
  ):
471
495
  monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
@@ -479,14 +503,46 @@ def test_run_wizard_empty_input_keeps_current(
479
503
  # With idempotent skip-on-default, agent/dataset are silently reused.
480
504
  # Only the still-empty project endpoint gets asked; App Insights is left
481
505
  # for runtime discovery or explicit non-interactive configuration.
482
- prompt = _scripted_prompt([""])
506
+ prompt = _scripted_prompt(["", "https://acct.services.ai.azure.com/api/projects/p"])
507
+ messages: list[str] = []
483
508
  answers = run_wizard(
484
- tmp_path, prompt=prompt, echo=lambda _msg: None, reconfigure=False
509
+ tmp_path, prompt=prompt, echo=messages.append, reconfigure=False
485
510
  )
486
- assert answers.project_endpoint is None
511
+ assert answers.project_endpoint == "https://acct.services.ai.azure.com/api/projects/p"
487
512
  assert answers.agent is None
488
513
  assert answers.dataset is None
489
514
  assert answers.appinsights_connection_string is None
515
+ assert "Foundry project endpoint is required." in "\n".join(messages)
516
+
517
+
518
+ def test_run_wizard_reprompts_blank_required_values(
519
+ tmp_path: Path, monkeypatch: pytest.MonkeyPatch
520
+ ):
521
+ monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
522
+ monkeypatch.delenv("APPLICATIONINSIGHTS_CONNECTION_STRING", raising=False)
523
+
524
+ data_dir = tmp_path / ".agentops" / "data"
525
+ data_dir.mkdir(parents=True)
526
+ (data_dir / "smoke.jsonl").write_text("{}\n", encoding="utf-8")
527
+ prompt = _scripted_prompt(
528
+ [
529
+ "",
530
+ "https://acct.services.ai.azure.com/api/projects/p",
531
+ "",
532
+ "my-bot:9",
533
+ "",
534
+ ]
535
+ )
536
+ messages: list[str] = []
537
+
538
+ answers = run_wizard(tmp_path, prompt=prompt, echo=messages.append)
539
+
540
+ assert answers.project_endpoint == "https://acct.services.ai.azure.com/api/projects/p"
541
+ assert answers.agent == "my-bot:9"
542
+ assert answers.dataset == ".agentops/data/smoke.jsonl"
543
+ output = "\n".join(messages)
544
+ assert "Foundry project endpoint is required." in output
545
+ assert "Agent is required." in output
490
546
 
491
547
 
492
548
  def test_run_wizard_force_prompt_fields_reasks_seed_agent_and_dataset(
@@ -543,6 +599,20 @@ def test_run_wizard_appinsights_is_not_interactive_even_when_missing(
543
599
  """The wizard should not ask for App Insights just to leave it blank."""
544
600
  monkeypatch.delenv("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT", raising=False)
545
601
  monkeypatch.delenv("APPLICATIONINSIGHTS_CONNECTION_STRING", raising=False)
602
+ _seed_azd_env(
603
+ tmp_path,
604
+ "dev",
605
+ {
606
+ "AZURE_AI_FOUNDRY_PROJECT_ENDPOINT": (
607
+ "https://acct.services.ai.azure.com/api/projects/p"
608
+ ),
609
+ },
610
+ )
611
+ (tmp_path / "agentops.yaml").write_text(
612
+ "version: 1\nagent: keep:1\ndataset: keep.jsonl\n",
613
+ encoding="utf-8",
614
+ )
615
+ (tmp_path / "keep.jsonl").write_text("{}\n", encoding="utf-8")
546
616
 
547
617
  messages: list[str] = []
548
618
  prompt_calls: list[str] = []