agentops-accelerator 0.4.2__tar.gz → 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/copilot-instructions.md +1 -0
  2. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/AGENTS.md +4 -3
  3. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/CHANGELOG.md +28 -14
  4. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/PKG-INFO +9 -4
  5. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/README.md +8 -3
  6. agentops_accelerator-0.4.2/docs/tutorial-prompt-agent-quickstart.md → agentops_accelerator-0.4.3/docs/tutorial-prompt-agent.md +20 -20
  7. {agentops_accelerator-0.4.2/src/agentops/templates → agentops_accelerator-0.4.3/plugins/agentops}/skills/agentops-eval/SKILL.md +18 -1
  8. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/cli/app.py +149 -1
  9. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/prompt_deploy.py +169 -1
  10. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/azd_eval_init.py +112 -133
  11. {agentops_accelerator-0.4.2/plugins/agentops → agentops_accelerator-0.4.3/src/agentops/templates}/skills/agentops-eval/SKILL.md +18 -1
  12. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/PKG-INFO +9 -4
  13. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/SOURCES.txt +1 -1
  14. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_eval_init.py +18 -181
  15. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_prompt_deploy.py +209 -1
  16. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.claude-plugin/marketplace.json +0 -0
  17. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.gitattributes +0 -0
  18. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/actions/azure-oidc-login/action.yml +0 -0
  19. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/code-quality-py.instructions.md +0 -0
  20. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/dependabot.yml +0 -0
  21. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/extensions/agentops-skills/extension.mjs +0 -0
  22. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/plugin/marketplace.json +0 -0
  23. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/skills/release-management/SKILL.md +0 -0
  24. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/_build.yml +0 -0
  25. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/agentops-watchdog.yml +0 -0
  26. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/ci.yml +0 -0
  27. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/cut-release.yml +0 -0
  28. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/e2e.yml +0 -0
  29. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/release.yml +0 -0
  30. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/staging.yml +0 -0
  31. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.gitignore +0 -0
  32. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.pre-commit-config.yaml +0 -0
  33. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/launch.json +0 -0
  34. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/settings.json +0 -0
  35. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/tasks.json +0 -0
  36. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/CONTRIBUTING.md +0 -0
  37. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/LICENSE +0 -0
  38. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/SECURITY.md +0 -0
  39. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/bundles.md +0 -0
  40. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/ci-github-actions.md +0 -0
  41. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/concepts.md +0 -0
  42. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/doctor-checks.md +0 -0
  43. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/doctor-explained.md +0 -0
  44. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/e2e-live-architecture.md +0 -0
  45. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/e2e-live-setup.md +0 -0
  46. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/foundry-evaluation-sdk-built-in-evaluators.md +0 -0
  47. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/how-it-works.md +0 -0
  48. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/media/agentops-diagrams.vsdx +0 -0
  49. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/media/foundry-control-plane.png +0 -0
  50. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/release-process.md +0 -0
  51. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/tutorial-end-to-end.md +0 -0
  52. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/tutorial-hosted-agent-quickstart.md +0 -0
  53. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/README.md +0 -0
  54. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/agentops.yaml +0 -0
  55. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/dataset.jsonl +0 -0
  56. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/icon.png +0 -0
  57. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/Dockerfile +0 -0
  58. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/app.py +0 -0
  59. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/requirements.txt +0 -0
  60. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/bootstrap.bicep +0 -0
  61. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/bootstrap.parameters.example.json +0 -0
  62. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/perrun.bicep +0 -0
  63. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/launch.json +0 -0
  64. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/media/foundry.svg +0 -0
  65. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/media/quickstart.gif +0 -0
  66. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/.vscodeignore +0 -0
  67. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/LICENSE +0 -0
  68. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/README.md +0 -0
  69. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/package.json +0 -0
  70. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/plugin.json +0 -0
  71. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-agent/SKILL.md +0 -0
  72. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-config/SKILL.md +0 -0
  73. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-dataset/SKILL.md +0 -0
  74. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-governance/SKILL.md +0 -0
  75. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-report/SKILL.md +0 -0
  76. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-workflow/SKILL.md +0 -0
  77. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/pyproject.toml +0 -0
  78. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/create_support_agent.py +0 -0
  79. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/cut-release.ps1 +0 -0
  80. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/cut-release.sh +0 -0
  81. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_aggregate_summary.py +0 -0
  82. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/basic.jsonl +0 -0
  83. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/rag.jsonl +0 -0
  84. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/tools.jsonl +0 -0
  85. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_demo.py +0 -0
  86. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_hosted_agent.py +0 -0
  87. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_make_transcript.py +0 -0
  88. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_render_config.py +0 -0
  89. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/release.ps1 +0 -0
  90. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/release.sh +0 -0
  91. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/setup-e2e-new-tenant.ps1 +0 -0
  92. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/staging.ps1 +0 -0
  93. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/staging.sh +0 -0
  94. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/sync-skills.ps1 +0 -0
  95. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/sync-skills.sh +0 -0
  96. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/setup.cfg +0 -0
  97. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/__init__.py +0 -0
  98. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/__main__.py +0 -0
  99. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/__init__.py +0 -0
  100. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/_legacy_ids.py +0 -0
  101. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/analyzer.py +0 -0
  102. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/__init__.py +0 -0
  103. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/_rbac_authorization.py +0 -0
  104. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/catalog.py +0 -0
  105. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/errors.py +0 -0
  106. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/foundry_config.py +0 -0
  107. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/governance.py +0 -0
  108. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/latency.py +0 -0
  109. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/observability.py +0 -0
  110. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/opex.py +0 -0
  111. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/opex_workspace.py +0 -0
  112. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture.py +0 -0
  113. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/__init__.py +0 -0
  114. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/content_filter.py +0 -0
  115. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/diagnostics.py +0 -0
  116. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/local_auth.py +0 -0
  117. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/managed_identity.py +0 -0
  118. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/network.py +0 -0
  119. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/rbac_openai_data_plane.py +0 -0
  120. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/regression.py +0 -0
  121. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/release_readiness.py +0 -0
  122. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/safety.py +0 -0
  123. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/spec_conformance.py +0 -0
  124. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/cockpit.py +0 -0
  125. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/config.py +0 -0
  126. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/findings.py +0 -0
  127. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/history.py +0 -0
  128. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/knowledge/__init__.py +0 -0
  129. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/knowledge/waf-checklist.csv +0 -0
  130. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/__init__.py +0 -0
  131. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_base.py +0 -0
  132. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_bundle_rule.py +0 -0
  133. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_client.py +0 -0
  134. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_dataset_rules.py +0 -0
  135. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_engine.py +0 -0
  136. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_prompt_rules.py +0 -0
  137. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_spec_rules.py +0 -0
  138. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/production_telemetry.py +0 -0
  139. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/report.py +0 -0
  140. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/__init__.py +0 -0
  141. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/app.py +0 -0
  142. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/auth.py +0 -0
  143. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/chat.py +0 -0
  144. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/protocol.py +0 -0
  145. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/__init__.py +0 -0
  146. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/_credentials.py +0 -0
  147. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/azure_monitor.py +0 -0
  148. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/azure_resources.py +0 -0
  149. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/foundry_control.py +0 -0
  150. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/results_history.py +0 -0
  151. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/__init__.py +0 -0
  152. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/_base.py +0 -0
  153. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/agents_md.py +0 -0
  154. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/spec_kit.py +0 -0
  155. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/time_range.py +0 -0
  156. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/cli/__init__.py +0 -0
  157. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/__init__.py +0 -0
  158. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/agentops_config.py +0 -0
  159. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/azd_eval.py +0 -0
  160. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/config_loader.py +0 -0
  161. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/evaluators.py +0 -0
  162. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/governance.py +0 -0
  163. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/release_evidence.py +0 -0
  164. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/results.py +0 -0
  165. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/mcp/__init__.py +0 -0
  166. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/mcp/server.py +0 -0
  167. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/__init__.py +0 -0
  168. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/azd_runner.py +0 -0
  169. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/cloud_results.py +0 -0
  170. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/cloud_runner.py +0 -0
  171. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/comparison.py +0 -0
  172. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/diagnostics.py +0 -0
  173. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/invocations.py +0 -0
  174. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/official_eval.py +0 -0
  175. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/orchestrator.py +0 -0
  176. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/publisher.py +0 -0
  177. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/reporter.py +0 -0
  178. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/runtime.py +0 -0
  179. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/thresholds.py +0 -0
  180. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/__init__.py +0 -0
  181. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/assert_runner.py +0 -0
  182. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/cicd.py +0 -0
  183. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/eval_analysis.py +0 -0
  184. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/evidence_pack.py +0 -0
  185. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/initializer.py +0 -0
  186. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/preflight.py +0 -0
  187. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/redteam_runner.py +0 -0
  188. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/setup_wizard.py +0 -0
  189. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/skills.py +0 -0
  190. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/trace_promotion.py +0 -0
  191. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/workflow_analysis.py +0 -0
  192. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/.gitignore +0 -0
  193. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/__init__.py +0 -0
  194. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/Dockerfile +0 -0
  195. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/README.md +0 -0
  196. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/main.bicep +0 -0
  197. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent.yaml +0 -0
  198. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agentops.yaml +0 -0
  199. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/foundry.svg +0 -0
  200. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/icon.png +0 -0
  201. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev-azd.yml +0 -0
  202. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev.yml +0 -0
  203. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod-azd.yml +0 -0
  204. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod.yml +0 -0
  205. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prompt-agent.yml +0 -0
  206. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa-azd.yml +0 -0
  207. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa.yml +0 -0
  208. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-pr-prompt-agent.yml +0 -0
  209. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-pr.yml +0 -0
  210. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-watchdog.yml +0 -0
  211. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/project.gitignore +0 -0
  212. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/sample-traces.jsonl +0 -0
  213. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-agent/SKILL.md +0 -0
  214. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-config/SKILL.md +0 -0
  215. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-dataset/SKILL.md +0 -0
  216. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-governance/SKILL.md +0 -0
  217. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-report/SKILL.md +0 -0
  218. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-workflow/SKILL.md +0 -0
  219. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/smoke.jsonl +0 -0
  220. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/waf-checklist.README.md +0 -0
  221. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/waf-checklist.csv +0 -0
  222. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-dev-azd.yml +0 -0
  223. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-dev.yml +0 -0
  224. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prod-azd.yml +0 -0
  225. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prod.yml +0 -0
  226. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prompt-agent.yml +0 -0
  227. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-qa-azd.yml +0 -0
  228. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-qa.yml +0 -0
  229. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-pr-prompt-agent.yml +0 -0
  230. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-pr.yml +0 -0
  231. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-watchdog.yml +0 -0
  232. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/__init__.py +0 -0
  233. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/azd_env.py +0 -0
  234. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/azure_endpoints.py +0 -0
  235. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/colors.py +0 -0
  236. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/dotenv_loader.py +0 -0
  237. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/foundry_discovery.py +0 -0
  238. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/logging.py +0 -0
  239. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/telemetry.py +0 -0
  240. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/yaml.py +0 -0
  241. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/dependency_links.txt +0 -0
  242. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/entry_points.txt +0 -0
  243. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/requires.txt +0 -0
  244. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/top_level.txt +0 -0
  245. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/TESTING.md +0 -0
  246. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/fixtures/fake_adapter.py +0 -0
  247. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/fixtures/fake_eval_runner.py +0 -0
  248. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/.gitkeep +0 -0
  249. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/test_cli_flat_schema.py +0 -0
  250. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/test_pipeline_smoke.py +0 -0
  251. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/.gitkeep +0 -0
  252. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_analyzer.py +0 -0
  253. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_categories.py +0 -0
  254. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_errors.py +0 -0
  255. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_foundry_config.py +0 -0
  256. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_observability.py +0 -0
  257. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_opex.py +0 -0
  258. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_opex_workspace.py +0 -0
  259. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_rbac_openai_data_plane.py +0 -0
  260. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_regression.py +0 -0
  261. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_safety.py +0 -0
  262. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_spec_conformance.py +0 -0
  263. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_cli.py +0 -0
  264. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_config.py +0 -0
  265. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_findings.py +0 -0
  266. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_history.py +0 -0
  267. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_opex_workspace_check.py +0 -0
  268. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_posture_rules.py +0 -0
  269. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_results_history.py +0 -0
  270. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_server.py +0 -0
  271. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agentops_config.py +0 -0
  272. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_assert_and_redteam_runners.py +0 -0
  273. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_env.py +0 -0
  274. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_eval.py +0 -0
  275. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_runner.py +0 -0
  276. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azure_endpoints.py +0 -0
  277. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azure_resources_discovery.py +0 -0
  278. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cicd.py +0 -0
  279. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_cockpit_connection_summary.py +0 -0
  280. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_cockpit_port_conflict.py +0 -0
  281. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_commands.py +0 -0
  282. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_explain.py +0 -0
  283. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cloud_results.py +0 -0
  284. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cloud_runner.py +0 -0
  285. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cockpit.py +0 -0
  286. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_diagnostics.py +0 -0
  287. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_doctor_catalog.py +0 -0
  288. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_doctor_cli_explain.py +0 -0
  289. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_dotenv_loader.py +0 -0
  290. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_e2e_render.py +0 -0
  291. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_eval_analysis.py +0 -0
  292. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_eval_run_grader_errors.py +0 -0
  293. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_evaluators.py +0 -0
  294. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_foundry_discovery.py +0 -0
  295. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_governance.py +0 -0
  296. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_init_command.py +0 -0
  297. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_initializer.py +0 -0
  298. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_invocations.py +0 -0
  299. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_knowledge_loader.py +0 -0
  300. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_llm_assist.py +0 -0
  301. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_llm_assist_spec_rules.py +0 -0
  302. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_mcp_server.py +0 -0
  303. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_official_eval.py +0 -0
  304. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_pipeline_publisher.py +0 -0
  305. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_pipeline_reporter.py +0 -0
  306. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_preflight.py +0 -0
  307. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_production_telemetry.py +0 -0
  308. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_release_evidence.py +0 -0
  309. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_runtime_conversation.py +0 -0
  310. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_runtime_model_config.py +0 -0
  311. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_setup_wizard.py +0 -0
  312. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_shared_credentials.py +0 -0
  313. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_skills.py +0 -0
  314. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_skills_sync.py +0 -0
  315. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_telemetry.py +0 -0
  316. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_time_range.py +0 -0
  317. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_trace_promotion.py +0 -0
  318. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_workflow_analysis.py +0 -0
  319. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tombstones/vscode/CDN_DEPRECATION_REQUEST.md +0 -0
  320. {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/uv.lock +0 -0
@@ -19,6 +19,7 @@ Read these first for detailed architecture and product context:
19
19
  - `agentops explain [COMMAND...] [--no-pager] [--format text|markdown|html] [--out PATH] [--open]`
20
20
  - `agentops init [--force] [--dir PATH] [--no-prompt] [--no-appinsights] [--azd-env NAME] [--project-endpoint URL] [--agent REF] [--dataset PATH] [--appinsights-connection-string STR]`
21
21
  - `agentops init show [--dir PATH] [--reveal-secrets]`
22
+ - `agentops prompt pull [--config PATH] [--out PATH] [--project-endpoint URL] [--force] [--update-config|--no-update-config]`
22
23
  - `agentops eval analyze [--dir PATH] [--format text|markdown|json] [--out PATH]`
23
24
  - `agentops eval run [--config PATH] [--baseline PATH] [--output DIR]`
24
25
  - `agentops eval promote-traces --source PATH [--out PATH] [--max-rows N] [--label-mode self-similarity|pending] [--apply]`
@@ -40,6 +40,7 @@ Public CLI contract:
40
40
  - `agentops init [--force] [--dir PATH] [--no-prompt] [--no-appinsights] [--azd-env NAME] [--project-endpoint URL] [--agent REF] [--dataset PATH] [--appinsights-connection-string STR]`
41
41
  - `agentops init show [--dir PATH] [--reveal-secrets]`
42
42
  - `agentops init explain [--no-pager] [--format text|markdown|html] [--out PATH] [--open]`
43
+ - `agentops prompt pull [--config PATH] [--out PATH] [--project-endpoint URL] [--force] [--update-config|--no-update-config]`
43
44
  - `agentops eval analyze [--dir PATH] [--format text|markdown|json] [--out PATH]`
44
45
  - `agentops eval init [--dir PATH] [--force]`
45
46
  - `agentops eval run [--config PATH] [--baseline PATH] [--output DIR]`
@@ -222,9 +223,9 @@ Coverage highlights:
222
223
  docs/
223
224
  ├── concepts.md # Core concepts and evaluation scenarios
224
225
  ├── how-it-works.md # Architecture and request flow
225
- ├── tutorial-prompt-agent-quickstart.md # Tutorial for Foundry Prompt Agents
226
- ├── tutorial-hosted-agent-quickstart.md # Tutorial for Foundry hosted / HTTP agents
227
- ├── tutorial-end-to-end.md # End-to-end release-readiness tutorial (Foundry + AgentOps)
226
+ ├── tutorial-prompt-agent.md # Tutorial for Foundry Prompt Agents
227
+ ├── tutorial-hosted-agent.md # Tutorial for Foundry hosted / HTTP agents
228
+ ├── tutorial-end-to-end.md # Full end-to-end release-readiness tutorial (Foundry + AgentOps)
228
229
  ├── doctor-explained.md # Doctor checks, history, and operations model
229
230
  ├── ci-github-actions.md # CI/CD setup
230
231
  ├── release-process.md # Release and versioning
@@ -5,21 +5,35 @@ This format follows [Keep a Changelog](https://keepachangelog.com/) and adheres
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
- ## [0.4.2] - 2026-06-17
8
+ ## [0.4.3] - 2026-06-17
9
9
 
10
- ### Fixed
11
- - **`agentops eval init` now works with both old and new `azure.ai.agents` azd
12
- extensions.** Version 0.1.40 of the extension renamed the eval subcommand from
13
- `azd ai agent eval init` to `azd ai agent eval generate`, which made
14
- `agentops eval init` hard-fail with `Command "init" is deprecated, use 'azd ai
15
- agent eval generate' instead`. AgentOps now invokes `generate` first and
16
- transparently falls back to the legacy `init` subcommand when an older
17
- extension does not recognise `generate`. The fallback only triggers on
18
- subcommand-name/deprecation errors; genuine failures (authentication, project
19
- endpoint, timeouts) are still surfaced immediately and unchanged. All
20
- previously passed flags (`--project-endpoint`, `--agent`,
21
- `--gen-instruction-file`, `--eval-model`, `--dataset`, `--evaluator`) and the
22
- recipe discovery/persistence behaviour are preserved.
10
+ ### Added
11
+ - **Prompt-agent tutorials no longer require manual portal copy/paste.**
12
+ `agentops prompt pull` reads the configured Foundry prompt agent
13
+ (`agent: name:version`), validates that the Foundry definition is actually a
14
+ prompt agent, and writes the reviewed Sandbox instructions to
15
+ `.agentops/prompts/<agent-name>.prompt.md` by default. Before writing, the CLI
16
+ prints the resolved agent, endpoint, endpoint source, and destination file so
17
+ operators can catch the wrong environment early. Changed prompt files are
18
+ protected by default and require `--force` to overwrite reviewed local edits.
19
+ The command updates `prompt_file` in `agentops.yaml` unless
20
+ `--no-update-config` is passed, and it can resolve the endpoint from
21
+ `--project-endpoint`, `agentops.yaml`, `AZURE_AI_FOUNDRY_PROJECT_ENDPOINT`, or
22
+ the active `.azure/<env>/.env`. The prompt-agent tutorial and packaged
23
+ `agentops-eval` skill now use this command instead of a manual here-string.
24
+ ([#322](https://github.com/Azure/agentops/issues/322))
25
+
26
+ ### Changed
27
+ - **`agentops eval init` now recommends evaluators from the agent and dataset
28
+ shape.** The azd bootstrap path now reuses the same AgentOps evaluator
29
+ catalog as `agentops eval run`: free-form answer datasets get answer-quality
30
+ checks, RAG-shaped datasets get groundedness / relevance / retrieval checks,
31
+ and tool-use datasets get tool-call / intent / task-adherence checks while
32
+ avoiding literal-answer similarity metrics. Explicit `evaluators:` entries in
33
+ `agentops.yaml` still win. The CLI prints the recommendation source, detected
34
+ signals, and selected azd built-ins before reporting the generated
35
+ `eval.yaml`, so users can see why those evaluators were chosen.
36
+ ([#323](https://github.com/Azure/agentops/issues/323))
23
37
 
24
38
  ## [0.4.1] - 2026-06-15
25
39
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentops-accelerator
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: Release readiness gates and evidence for Microsoft Foundry agents
5
5
  License: MIT License
6
6
 
@@ -81,11 +81,16 @@ AgentOps Accelerator helps Microsoft Foundry agent teams evaluate quality, prepa
81
81
  ```powershell
82
82
  python -m pip install agentops-accelerator
83
83
  agentops init
84
- agentops eval analyze
85
- agentops eval run
86
- agentops doctor --evidence-pack
87
84
  ```
88
85
 
86
+ `agentops init` starts a guided setup that creates your `agentops.yaml` and
87
+ `.agentops/` workspace.
88
+
89
+ Next, follow the tutorial that matches your agent type:
90
+
91
+ - [Prompt Agent tutorial](https://azure.github.io/agentops/tutorial-prompt-agent/)
92
+ - [Hosted or HTTP Agent tutorial](https://azure.github.io/agentops/tutorial-hosted-agent/)
93
+
89
94
  ## What it helps you do
90
95
 
91
96
  Use AgentOps Accelerator when you need to:
@@ -28,11 +28,16 @@ AgentOps Accelerator helps Microsoft Foundry agent teams evaluate quality, prepa
28
28
  ```powershell
29
29
  python -m pip install agentops-accelerator
30
30
  agentops init
31
- agentops eval analyze
32
- agentops eval run
33
- agentops doctor --evidence-pack
34
31
  ```
35
32
 
33
+ `agentops init` starts a guided setup that creates your `agentops.yaml` and
34
+ `.agentops/` workspace.
35
+
36
+ Next, follow the tutorial that matches your agent type:
37
+
38
+ - [Prompt Agent tutorial](https://azure.github.io/agentops/tutorial-prompt-agent/)
39
+ - [Hosted or HTTP Agent tutorial](https://azure.github.io/agentops/tutorial-hosted-agent/)
40
+
36
41
  ## What it helps you do
37
42
 
38
43
  Use AgentOps Accelerator when you need to:
@@ -130,7 +130,7 @@ cd agentops-prompt-quickstart
130
130
  python -m venv .venv
131
131
  .\.venv\Scripts\Activate.ps1
132
132
  python -m pip install -U pip
133
- python -m pip install "agentops-accelerator[foundry,agent]"
133
+ python -m pip install agentops-accelerator
134
134
  agentops --version
135
135
  ```
136
136
 
@@ -139,7 +139,7 @@ path, install the aligned reference branch so the CLI, generated
139
139
  workflows, and tutorial steps stay in sync:
140
140
 
141
141
  ```powershell
142
- python -m pip install "agentops-accelerator[foundry,agent] @ git+https://github.com/Azure/agentops.git@develop"
142
+ python -m pip install "agentops-accelerator @ git+https://github.com/Azure/agentops.git@develop"
143
143
  ```
144
144
 
145
145
  ## 2. Install the AgentOps Copilot skills
@@ -426,7 +426,7 @@ In the **sandbox** project only:
426
426
  > next-version flow.
427
427
 
428
428
  > **Prompt-as-code captures only the instructions.** Later in the
429
- > tutorial you will commit `.agentops/prompts/travel-agent.md` to git
429
+ > tutorial you will commit `.agentops/prompts/travel-agent.prompt.md` to git
430
430
  > and let CI use it as the prompt source. That file does not capture
431
431
  > the model deployment, parameters (temperature, top-p), tools, or
432
432
  > other agent settings — those come from `prompt_agent_bootstrap` on
@@ -709,31 +709,31 @@ evaluates and deploys comes from this file in git, not from manual edits
709
709
  in the Foundry portal.
710
710
 
711
711
  ```powershell
712
- New-Item -ItemType Directory -Force .agentops\prompts | Out-Null
713
- @'
714
- You are Travel Agent, a concise travel planning assistant.
712
+ agentops prompt pull
713
+ ```
715
714
 
716
- Help users plan short leisure trips. Always include:
717
- - a short summary;
718
- - a day-by-day plan when the user asks for an itinerary;
719
- - practical notes about budget, transit, weather, or booking constraints;
720
- - a reminder that you cannot make live reservations or purchases.
715
+ AgentOps reads `agent: travel-agent:2`, resolves the current Foundry
716
+ endpoint, validates that the Foundry definition is a prompt agent, and
717
+ writes the instructions to `.agentops/prompts/travel-agent.prompt.md`.
718
+ Before writing, it prints the resolved agent, endpoint, endpoint source,
719
+ and destination file so you can catch the wrong environment before the
720
+ prompt is saved.
721
721
 
722
- Ask one clarifying question only when the destination, duration, or
723
- traveler preference is missing. Do not invent booking confirmations,
724
- prices, or availability.
725
- '@ | Set-Content -Encoding utf8 .agentops\prompts\travel-agent.md
726
- ```
722
+ By default, the command refuses to overwrite a changed prompt file. Use
723
+ `--force` only when you intentionally want to replace reviewed local
724
+ prompt edits with the current Sandbox version. Use `--out <path>` if you
725
+ need a different file name, but keep prompt source under
726
+ `.agentops/prompts/` unless your repository has a stronger convention.
727
727
 
728
- Then tell `agentops.yaml` where to find the file and add
729
- `prompt_agent_bootstrap` so CI can auto-create the agent in dev (and
730
- later qa / prod) on the first deploy:
728
+ Then add `prompt_agent_bootstrap` so CI can auto-create the agent in dev
729
+ (and later qa / prod) on the first deploy. `agentops prompt pull` writes
730
+ `prompt_file` for you when it is missing:
731
731
 
732
732
  ```yaml
733
733
  version: 1
734
734
  agent: travel-agent:2
735
735
  dataset: .agentops/data/travel-smoke.jsonl
736
- prompt_file: .agentops/prompts/travel-agent.md
736
+ prompt_file: .agentops/prompts/travel-agent.prompt.md
737
737
  prompt_agent_bootstrap:
738
738
  model: gpt-4o-mini
739
739
  description: "Helps plan short trips and explains tradeoffs."
@@ -93,7 +93,7 @@ done
93
93
  ```
94
94
 
95
95
  PowerShell equivalent: replace `$(...)` with the PowerShell variable
96
- assignments shown in `docs/tutorial-prompt-agent-quickstart.md`.
96
+ assignments shown in `docs/tutorial-prompt-agent.md`.
97
97
 
98
98
  If the user has not run `az login` yet, do that first. If
99
99
  `az cognitiveservices account list` returns an empty RG, the AI Services
@@ -143,6 +143,23 @@ for the `agent:` field of `agentops.yaml`:
143
143
 
144
144
  If nothing is found, ask the user once for the agent identifier.
145
145
 
146
+ For Foundry Prompt Agents authored in the Sandbox portal, do not copy/paste the
147
+ instructions into a file manually. After `agentops.yaml` contains `agent:
148
+ name:version` and the correct project endpoint is available from
149
+ `agentops.yaml`, `AZURE_AI_FOUNDRY_PROJECT_ENDPOINT`, or the active
150
+ `.azure/<env>/.env`, run:
151
+
152
+ ```bash
153
+ agentops prompt pull
154
+ ```
155
+
156
+ This writes `.agentops/prompts/<agent-name>.prompt.md` by default, updates
157
+ `prompt_file` in `agentops.yaml` when needed, prints the resolved endpoint and
158
+ agent version before writing, validates that the Foundry definition is a prompt
159
+ agent, and refuses to overwrite changed prompt files unless `--force` is used.
160
+ Use `--out` only when the repository already has a stronger prompt-file
161
+ convention.
162
+
146
163
  ## Step 3 - Make sure the dataset exists
147
164
 
148
165
  `agentops.yaml` points to a JSONL file (default
@@ -36,6 +36,7 @@ eval_app = typer.Typer(
36
36
  report_app = typer.Typer(help="Reporting commands.")
37
37
  workflow_app = typer.Typer(help="CI/CD workflow commands.")
38
38
  skills_app = typer.Typer(help="Coding agent skills management.")
39
+ prompt_app = typer.Typer(help="Foundry prompt-agent source control commands.")
39
40
  mcp_app = typer.Typer(help="MCP (Model Context Protocol) server commands.")
40
41
  agent_app = typer.Typer(
41
42
  help=(
@@ -79,6 +80,7 @@ app.add_typer(eval_app, name="eval")
79
80
  app.add_typer(report_app, name="report")
80
81
  app.add_typer(workflow_app, name="workflow")
81
82
  app.add_typer(skills_app, name="skills")
83
+ app.add_typer(prompt_app, name="prompt")
82
84
  app.add_typer(mcp_app, name="mcp")
83
85
  app.add_typer(agent_app, name="agent")
84
86
  app.add_typer(doctor_app, name="doctor")
@@ -485,7 +487,7 @@ EXPLAIN_PAGES: dict[tuple[str, ...], ExplainPage] = {
485
487
  "agentops explain eval run --open",
486
488
  "agentops explain cockpit --format markdown --out cockpit.md",
487
489
  ),
488
- children=("init", "eval", "report", "workflow", "skills", "mcp", "agent", "doctor", "cockpit", "assert", "redteam"),
490
+ children=("init", "eval", "report", "workflow", "skills", "prompt", "mcp", "agent", "doctor", "cockpit", "assert", "redteam"),
489
491
  ),
490
492
  ("init",): ExplainPage(
491
493
  title="Initialize workspace and configure endpoints",
@@ -609,6 +611,7 @@ EXPLAIN_PAGES: dict[tuple[str, ...], ExplainPage] = {
609
611
  ),
610
612
  how_it_works=(
611
613
  "Checks that azd and the `azure.ai.agents` extension are available.",
614
+ "Reads `agentops.yaml`, classifies the target, samples the dataset shape, and recommends built-in azd evaluators from the same AgentOps catalog used by `agentops eval run`. Explicit `evaluators:` entries in `agentops.yaml` still win.",
612
615
  "Runs `azd ai agent eval init` in the workspace unless an eval recipe already exists.",
613
616
  "Discovers the generated `eval.yaml` and writes `eval_recipe:` plus `execution: azd` to `agentops.yaml`.",
614
617
  ),
@@ -617,6 +620,55 @@ EXPLAIN_PAGES: dict[tuple[str, ...], ExplainPage] = {
617
620
  examples=("agentops eval init", "agentops eval init --dataset .agentops/data/golden.jsonl", "agentops eval init --force"),
618
621
  see_also=("agentops explain eval run", "agentops explain doctor"),
619
622
  ),
623
+ ("prompt",): ExplainPage(
624
+ title="Prompt-agent source control commands",
625
+ command="agentops prompt",
626
+ synopsis=("agentops prompt pull [--config PATH] [--out PATH] [--force]", "agentops prompt explain"),
627
+ summary=(
628
+ "Pulls tested Foundry prompt-agent instructions into a source-controlled prompt file.",
629
+ "Use this after iterating in the Foundry Sandbox so git becomes the source of truth without manual portal copy/paste.",
630
+ ),
631
+ children=("pull",),
632
+ examples=("agentops prompt pull", "agentops prompt pull --out .agentops/prompts/travel-agent.prompt.md"),
633
+ see_also=("agentops explain workflow generate", "agentops explain eval run"),
634
+ ),
635
+ ("prompt", "pull"): ExplainPage(
636
+ title="Pull a Foundry prompt into git",
637
+ command="agentops prompt pull",
638
+ synopsis=(
639
+ "agentops prompt pull [--config agentops.yaml] [--project-endpoint URL]",
640
+ "agentops prompt pull [--out .agentops/prompts/<agent-name>.prompt.md] [--force]",
641
+ "agentops prompt pull [--no-update-config]",
642
+ ),
643
+ summary=(
644
+ "Fetches the `agent: name:version` Foundry prompt-agent definition from the configured project and writes its instructions to a local `.prompt.md` file.",
645
+ "The command prints the resolved endpoint, endpoint source, agent version, and destination before writing so users can catch wrong-environment pulls.",
646
+ "It never overwrites changed local prompt files unless `--force` is provided.",
647
+ ),
648
+ how_it_works=(
649
+ "Reads `agentops.yaml` and requires `agent` to be a Foundry prompt agent in `name:version` form.",
650
+ "Resolves the project endpoint from `--project-endpoint`, then `agentops.yaml project_endpoint`, then `AZURE_AI_FOUNDRY_PROJECT_ENDPOINT`, then the active `.azure/<env>/.env`.",
651
+ "Fetches the Foundry agent version, validates that `definition.kind` is `prompt`, and extracts `definition.instructions` through the same normalization helpers used by prompt deploy.",
652
+ "Writes to `prompt_file` when already configured, otherwise to `.agentops/prompts/<agent-name>.prompt.md`.",
653
+ "Updates `prompt_file` in `agentops.yaml` by default; pass `--no-update-config` to leave config unchanged.",
654
+ ),
655
+ inputs=(
656
+ "`agentops.yaml` with `agent: <name>:<version>`.",
657
+ "A Foundry project endpoint in `--project-endpoint`, `project_endpoint`, `AZURE_AI_FOUNDRY_PROJECT_ENDPOINT`, or the active `.azure/<env>/.env`.",
658
+ "Azure credentials that can read the Foundry agent definition.",
659
+ ),
660
+ outputs=(
661
+ "Source-controlled prompt file, default `.agentops/prompts/<agent-name>.prompt.md`.",
662
+ "`agentops.yaml prompt_file` update unless `--no-update-config` is passed.",
663
+ ),
664
+ examples=(
665
+ "agentops prompt pull",
666
+ "agentops prompt pull --project-endpoint https://acct.services.ai.azure.com/api/projects/sandbox",
667
+ "agentops prompt pull --out .agentops/prompts/travel-agent.prompt.md --force",
668
+ "agentops prompt pull --no-update-config",
669
+ ),
670
+ see_also=("agentops explain workflow generate", "agentops explain eval run"),
671
+ ),
620
672
  ("eval", "run"): ExplainPage(
621
673
  title="Run evaluation",
622
674
  command="agentops eval run",
@@ -1407,6 +1459,7 @@ eval_app.command("explain")(_make_group_explain(("eval",)))
1407
1459
  report_app.command("explain")(_make_group_explain(("report",)))
1408
1460
  workflow_app.command("explain")(_make_group_explain(("workflow",)))
1409
1461
  skills_app.command("explain")(_make_group_explain(("skills",)))
1462
+ prompt_app.command("explain")(_make_group_explain(("prompt",)))
1410
1463
  mcp_app.command("explain")(_make_group_explain(("mcp",)))
1411
1464
  agent_app.command("explain")(_make_group_explain(("agent",)))
1412
1465
 
@@ -2098,6 +2151,11 @@ def cmd_eval_init(
2098
2151
  typer.echo(f"{_cli_label('azd eval init')}: completed")
2099
2152
  else:
2100
2153
  typer.echo(f"{_cli_label('azd eval init')}: existing recipe reused")
2154
+ if result.evaluators:
2155
+ typer.echo(f"{_cli_label('Evaluator recommendation')}: {result.evaluator_source}")
2156
+ for signal in result.evaluator_signals:
2157
+ typer.echo(f" {style('-', 'dim')} {signal}")
2158
+ typer.echo(f"{_cli_label('Evaluators')}: {', '.join(result.evaluators)}")
2101
2159
  typer.echo(f"{_cli_label('eval.yaml')}: {_cli_path(result.recipe_path)}")
2102
2160
  if result.config_updated:
2103
2161
  typer.echo(_cli_updated(result.config_path))
@@ -3415,6 +3473,96 @@ def cmd_skills_install(
3415
3473
  _print_registration_result(reg_result)
3416
3474
 
3417
3475
 
3476
+ # ---------------------------------------------------------------------------
3477
+ # agentops prompt pull
3478
+ # ---------------------------------------------------------------------------
3479
+
3480
+
3481
+ @prompt_app.command("pull")
3482
+ def cmd_prompt_pull(
3483
+ config: Annotated[
3484
+ Path,
3485
+ typer.Option("--config", "-c", help="Path to agentops.yaml."),
3486
+ ] = Path("agentops.yaml"),
3487
+ out: Annotated[
3488
+ Path | None,
3489
+ typer.Option(
3490
+ "--out",
3491
+ "-o",
3492
+ help="Prompt file to write.",
3493
+ ),
3494
+ ] = None,
3495
+ project_endpoint: Annotated[
3496
+ str | None,
3497
+ typer.Option(
3498
+ "--project-endpoint",
3499
+ help="Foundry project endpoint. Overrides config and environment.",
3500
+ ),
3501
+ ] = None,
3502
+ force: Annotated[
3503
+ bool,
3504
+ typer.Option(
3505
+ "--force",
3506
+ help="Overwrite the prompt file when local content differs.",
3507
+ ),
3508
+ ] = False,
3509
+ update_config: Annotated[
3510
+ bool,
3511
+ typer.Option(
3512
+ "--update-config/--no-update-config",
3513
+ help="Update agentops.yaml prompt_file to the pulled prompt path.",
3514
+ ),
3515
+ ] = True,
3516
+ explain: Annotated[str | None, typer.Argument(hidden=True)] = None,
3517
+ ) -> None:
3518
+ """Pull Foundry prompt-agent instructions into a prompt file."""
3519
+ if _maybe_explain_leaf(("prompt", "pull"), explain):
3520
+ return
3521
+
3522
+ from agentops.pipeline.prompt_deploy import pull_prompt_agent_instructions
3523
+
3524
+ def _before_write(details: dict[str, str]) -> None:
3525
+ typer.echo(f"{_cli_label('Agent')}: {details['agent']}")
3526
+ typer.echo(f"{_cli_label('Endpoint')}: {details['endpoint']}")
3527
+ typer.echo(f"{_cli_label('Endpoint source')}: {details['endpoint_source']}")
3528
+ typer.echo(f"{_cli_label('Prompt file')}: {_cli_path(details['prompt_file'])}")
3529
+ if details["endpoint_source"] == "AZURE_AI_FOUNDRY_PROJECT_ENDPOINT":
3530
+ typer.echo(
3531
+ f"{_cli_warn('Warning')}: using endpoint from environment variable. "
3532
+ "Pass --project-endpoint or set project_endpoint in agentops.yaml "
3533
+ "to make this deterministic.",
3534
+ err=True,
3535
+ )
3536
+
3537
+ try:
3538
+ result = pull_prompt_agent_instructions(
3539
+ config_path=config,
3540
+ output_path=out,
3541
+ force=force,
3542
+ update_config=update_config,
3543
+ project_endpoint=project_endpoint,
3544
+ before_write=_before_write,
3545
+ )
3546
+ except FileExistsError as exc:
3547
+ typer.echo(f"{_cli_error('Error')}: {exc}", err=True)
3548
+ raise typer.Exit(code=1) from exc
3549
+ except (FileNotFoundError, ValueError, RuntimeError) as exc:
3550
+ typer.echo(f"{_cli_error('Error')}: {exc}", err=True)
3551
+ raise typer.Exit(code=1) from exc
3552
+ except Exception as exc:
3553
+ typer.echo(f"{_cli_error('Error')}: failed to pull prompt: {exc}", err=True)
3554
+ raise typer.Exit(code=1) from exc
3555
+
3556
+ if result.action == "created":
3557
+ typer.echo(_cli_created(result.prompt_file))
3558
+ elif result.action == "overwritten":
3559
+ typer.echo(_cli_overwritten(result.prompt_file))
3560
+ else:
3561
+ typer.echo(_cli_skipped(result.prompt_file, " (unchanged)"))
3562
+ if result.config_updated:
3563
+ typer.echo(_cli_updated(result.config_path))
3564
+
3565
+
3418
3566
  # ---------------------------------------------------------------------------
3419
3567
  # agentops mcp serve
3420
3568
  # ---------------------------------------------------------------------------
@@ -12,9 +12,11 @@ import copy
12
12
  import hashlib
13
13
  import json
14
14
  import os
15
+ import re
16
+ from dataclasses import dataclass
15
17
  from datetime import datetime, timezone
16
18
  from pathlib import Path
17
- from typing import Any, Dict, Optional
19
+ from typing import Any, Callable, Dict, Optional
18
20
 
19
21
  from agentops.core.agentops_config import (
20
22
  AgentOpsConfig,
@@ -22,11 +24,26 @@ from agentops.core.agentops_config import (
22
24
  classify_agent,
23
25
  )
24
26
  from agentops.core.config_loader import load_agentops_config
27
+ from agentops.utils.azd_env import discover_azd_env, parse_env_file
25
28
  from agentops.utils.yaml import load_yaml, save_yaml
26
29
 
27
30
  DEFAULT_PROMPT_FILE = Path(".agentops/prompts/agent-instructions.md")
28
31
  DEFAULT_DEPLOYMENT_RECORD = Path(".agentops/deployments/foundry-agent.json")
29
32
  DEFAULT_CANDIDATE_CONFIG = Path(".agentops/deployments/agentops.candidate.yaml")
33
+ DEFAULT_PROMPT_PULL_DIR = Path(".agentops/prompts")
34
+
35
+
36
+ @dataclass(frozen=True)
37
+ class PromptPullResult:
38
+ """Result of pulling a Foundry prompt-agent definition into source control."""
39
+
40
+ action: str
41
+ agent: str
42
+ endpoint: str
43
+ endpoint_source: str
44
+ prompt_file: Path
45
+ config_path: Path
46
+ config_updated: bool
30
47
 
31
48
 
32
49
  def stage_prompt_agent_candidate(
@@ -224,6 +241,104 @@ def summarize_deployment(record_path: Path, *, environment: str) -> Dict[str, An
224
241
  return record
225
242
 
226
243
 
244
+ def pull_prompt_agent_instructions(
245
+ *,
246
+ config_path: Path,
247
+ output_path: Optional[Path] = None,
248
+ force: bool = False,
249
+ update_config: bool = True,
250
+ project_endpoint: Optional[str] = None,
251
+ before_write: Optional[Callable[[Dict[str, str]], None]] = None,
252
+ ) -> PromptPullResult:
253
+ """Pull a Foundry prompt-agent's instructions into a local prompt file."""
254
+
255
+ config_path = config_path.resolve()
256
+ config = load_agentops_config(config_path)
257
+ target = classify_agent(config.agent, config.protocol)
258
+ if target.kind != "foundry_prompt" or not target.name or not target.version:
259
+ raise ValueError(
260
+ "agentops prompt pull requires agentops.yaml agent to be a "
261
+ "Foundry prompt agent in 'name:version' form"
262
+ )
263
+
264
+ endpoint, endpoint_source = _resolve_project_endpoint(
265
+ config=config,
266
+ workspace=config_path.parent,
267
+ explicit=project_endpoint,
268
+ purpose="prompt pull",
269
+ )
270
+ current = _get_agent_version(endpoint, target.name, target.version)
271
+ definition = getattr(current, "definition", None) or _get_mapping_value(
272
+ current, "definition"
273
+ )
274
+ if definition is None:
275
+ raise ValueError(
276
+ f"Foundry agent {target.name}:{target.version} did not include a definition"
277
+ )
278
+
279
+ kind = str(_get_definition_value(definition, "kind") or "").lower()
280
+ if kind != "prompt":
281
+ raise ValueError(
282
+ f"Foundry agent {target.name}:{target.version} is kind {kind!r}; "
283
+ "agentops prompt pull only supports Foundry prompt agents."
284
+ )
285
+
286
+ instructions = _get_definition_value(definition, "instructions")
287
+ if not isinstance(instructions, str) or not instructions.strip():
288
+ raise ValueError(
289
+ f"Foundry agent {target.name}:{target.version} did not include prompt instructions"
290
+ )
291
+
292
+ destination = _resolve_prompt_pull_output(
293
+ config_path=config_path,
294
+ config=config,
295
+ agent_name=target.name,
296
+ explicit=output_path,
297
+ )
298
+ if before_write is not None:
299
+ before_write(
300
+ {
301
+ "agent": f"{target.name}:{target.version}",
302
+ "endpoint": endpoint,
303
+ "endpoint_source": endpoint_source,
304
+ "prompt_file": str(destination),
305
+ }
306
+ )
307
+ destination.parent.mkdir(parents=True, exist_ok=True)
308
+
309
+ existing = destination.read_text(encoding="utf-8") if destination.exists() else None
310
+ if existing == instructions:
311
+ action = "unchanged"
312
+ elif existing is not None and not force:
313
+ raise FileExistsError(
314
+ f"prompt file already exists with different content: {destination}. "
315
+ "Re-run with --force to overwrite reviewed local changes."
316
+ )
317
+ else:
318
+ destination.write_text(instructions, encoding="utf-8")
319
+ action = "overwritten" if existing is not None else "created"
320
+
321
+ config_updated = False
322
+ prompt_file_value = _relative_posix_path(destination, config_path.parent)
323
+ if update_config:
324
+ data = load_yaml(config_path)
325
+ current_prompt_file = data.get("prompt_file")
326
+ if current_prompt_file != prompt_file_value:
327
+ data["prompt_file"] = prompt_file_value
328
+ save_yaml(config_path, data)
329
+ config_updated = True
330
+
331
+ return PromptPullResult(
332
+ action=action,
333
+ agent=f"{target.name}:{target.version}",
334
+ endpoint=endpoint,
335
+ endpoint_source=endpoint_source,
336
+ prompt_file=destination,
337
+ config_path=config_path,
338
+ config_updated=config_updated,
339
+ )
340
+
341
+
227
342
  def _resolve_prompt_file(
228
343
  *,
229
344
  config_path: Path,
@@ -246,6 +361,59 @@ def _resolve_prompt_file(
246
361
  return path
247
362
 
248
363
 
364
+ def _resolve_prompt_pull_output(
365
+ *,
366
+ config_path: Path,
367
+ config: AgentOpsConfig,
368
+ agent_name: str,
369
+ explicit: Optional[Path],
370
+ ) -> Path:
371
+ raw = explicit or config.prompt_file or (
372
+ DEFAULT_PROMPT_PULL_DIR / f"{_safe_prompt_file_stem(agent_name)}.prompt.md"
373
+ )
374
+ path = raw if raw.is_absolute() else (config_path.parent / raw)
375
+ return path.resolve()
376
+
377
+
378
+ def _safe_prompt_file_stem(agent_name: str) -> str:
379
+ stem = re.sub(r"[^A-Za-z0-9._-]+", "-", agent_name.strip()).strip(".-_")
380
+ return stem or "agent"
381
+
382
+
383
+ def _relative_posix_path(path: Path, base: Path) -> str:
384
+ try:
385
+ return path.resolve().relative_to(base.resolve()).as_posix()
386
+ except ValueError:
387
+ return path.resolve().as_posix()
388
+
389
+
390
+ def _resolve_project_endpoint(
391
+ *,
392
+ config: AgentOpsConfig,
393
+ workspace: Path,
394
+ explicit: Optional[str],
395
+ purpose: str,
396
+ ) -> tuple[str, str]:
397
+ if explicit is not None and explicit.strip():
398
+ return explicit.strip(), "--project-endpoint"
399
+ if config.project_endpoint:
400
+ return config.project_endpoint, "agentops.yaml"
401
+ env_value = os.environ.get("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT")
402
+ if env_value and env_value.strip():
403
+ return env_value.strip(), "AZURE_AI_FOUNDRY_PROJECT_ENDPOINT"
404
+ azd_env = discover_azd_env(workspace)
405
+ if azd_env.found and azd_env.env_path is not None:
406
+ env_values = parse_env_file(azd_env.env_path)
407
+ endpoint = env_values.get("AZURE_AI_FOUNDRY_PROJECT_ENDPOINT")
408
+ if endpoint and endpoint.strip():
409
+ return endpoint.strip(), f".azure/{azd_env.name}/.env"
410
+ raise ValueError(
411
+ f"{purpose} requires project_endpoint in agentops.yaml, "
412
+ "--project-endpoint, AZURE_AI_FOUNDRY_PROJECT_ENDPOINT, "
413
+ "or an active .azure/<env>/.env"
414
+ )
415
+
416
+
249
417
  def _path_from_env(name: str) -> Optional[Path]:
250
418
  value = os.environ.get(name)
251
419
  if not value or not value.strip():