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.
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/copilot-instructions.md +1 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/AGENTS.md +4 -3
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/CHANGELOG.md +28 -14
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/PKG-INFO +9 -4
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/README.md +8 -3
- agentops_accelerator-0.4.2/docs/tutorial-prompt-agent-quickstart.md → agentops_accelerator-0.4.3/docs/tutorial-prompt-agent.md +20 -20
- {agentops_accelerator-0.4.2/src/agentops/templates → agentops_accelerator-0.4.3/plugins/agentops}/skills/agentops-eval/SKILL.md +18 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/cli/app.py +149 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/prompt_deploy.py +169 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/azd_eval_init.py +112 -133
- {agentops_accelerator-0.4.2/plugins/agentops → agentops_accelerator-0.4.3/src/agentops/templates}/skills/agentops-eval/SKILL.md +18 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/PKG-INFO +9 -4
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/SOURCES.txt +1 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_eval_init.py +18 -181
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_prompt_deploy.py +209 -1
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.claude-plugin/marketplace.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.gitattributes +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/actions/azure-oidc-login/action.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/code-quality-py.instructions.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/dependabot.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/extensions/agentops-skills/extension.mjs +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/plugin/marketplace.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/skills/release-management/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/_build.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/ci.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/cut-release.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/e2e.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/release.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.github/workflows/staging.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.gitignore +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.pre-commit-config.yaml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/launch.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/settings.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/.vscode/tasks.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/CONTRIBUTING.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/LICENSE +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/SECURITY.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/bundles.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/ci-github-actions.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/concepts.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/doctor-checks.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/doctor-explained.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/e2e-live-architecture.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/e2e-live-setup.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/foundry-evaluation-sdk-built-in-evaluators.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/how-it-works.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/media/agentops-diagrams.vsdx +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/media/foundry-control-plane.png +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/release-process.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/tutorial-end-to-end.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/docs/tutorial-hosted-agent-quickstart.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/README.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/agentops.yaml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/examples/flat-quickstart/dataset.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/icon.png +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/Dockerfile +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/app.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/agent-app/requirements.txt +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/bootstrap.bicep +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/bootstrap.parameters.example.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/infra/e2e/perrun.bicep +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/launch.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/media/foundry.svg +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/media/quickstart.gif +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/.vscodeignore +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/LICENSE +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/README.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/package.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/plugin.json +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-governance/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/plugins/agentops/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/pyproject.toml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/create_support_agent.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/cut-release.ps1 +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/cut-release.sh +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_aggregate_summary.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/basic.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/rag.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_data/tools.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_demo.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_hosted_agent.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_make_transcript.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/e2e_render_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/release.ps1 +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/release.sh +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/setup-e2e-new-tenant.ps1 +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/staging.ps1 +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/staging.sh +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/sync-skills.ps1 +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/scripts/sync-skills.sh +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/setup.cfg +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/__main__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/_legacy_ids.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/analyzer.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/_rbac_authorization.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/catalog.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/errors.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/foundry_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/governance.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/latency.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/observability.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/opex.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/opex_workspace.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/content_filter.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/diagnostics.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/local_auth.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/managed_identity.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/posture_rules/network.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/rbac_openai_data_plane.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/regression.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/release_readiness.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/safety.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/checks/spec_conformance.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/cockpit.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/findings.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/history.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/knowledge/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/knowledge/waf-checklist.csv +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_base.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_bundle_rule.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_client.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_dataset_rules.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_engine.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_prompt_rules.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/llm_assist/_spec_rules.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/production_telemetry.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/report.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/app.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/auth.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/chat.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/server/protocol.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/_credentials.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/azure_monitor.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/azure_resources.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/foundry_control.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/results_history.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/_base.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/agents_md.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/sources/spec_detectors/spec_kit.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/agent/time_range.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/cli/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/agentops_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/azd_eval.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/config_loader.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/evaluators.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/governance.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/release_evidence.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/core/results.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/mcp/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/mcp/server.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/azd_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/cloud_results.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/cloud_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/comparison.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/diagnostics.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/invocations.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/official_eval.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/orchestrator.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/publisher.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/reporter.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/runtime.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/thresholds.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/assert_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/cicd.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/eval_analysis.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/evidence_pack.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/initializer.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/preflight.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/redteam_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/setup_wizard.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/skills.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/trace_promotion.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/services/workflow_analysis.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/.gitignore +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/Dockerfile +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/README.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent-server/main.bicep +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agent.yaml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/agentops.yaml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/foundry.svg +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/icon.png +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prompt-agent.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-pr-prompt-agent.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-pr.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/pipelines/azuredevops/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/project.gitignore +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/sample-traces.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-governance/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/smoke.jsonl +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/waf-checklist.README.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/waf-checklist.csv +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-prompt-agent.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-pr-prompt-agent.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-pr.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/templates/workflows/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/__init__.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/azd_env.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/azure_endpoints.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/colors.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/dotenv_loader.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/foundry_discovery.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/logging.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/telemetry.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/utils/yaml.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/dependency_links.txt +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/entry_points.txt +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/requires.txt +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops_accelerator.egg-info/top_level.txt +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/TESTING.md +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/fixtures/fake_adapter.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/fixtures/fake_eval_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/.gitkeep +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/test_cli_flat_schema.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/integration/test_pipeline_smoke.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/.gitkeep +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_analyzer.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_categories.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_errors.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_foundry_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_observability.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_opex.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_opex_workspace.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_rbac_openai_data_plane.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_regression.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_safety.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_checks_spec_conformance.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_cli.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_findings.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_history.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_opex_workspace_check.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_posture_rules.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_results_history.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agent_server.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_agentops_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_assert_and_redteam_runners.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_env.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_eval.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azd_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azure_endpoints.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_azure_resources_discovery.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cicd.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_cockpit_connection_summary.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_cockpit_port_conflict.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_commands.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cli_explain.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cloud_results.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cloud_runner.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_cockpit.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_diagnostics.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_doctor_catalog.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_doctor_cli_explain.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_dotenv_loader.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_e2e_render.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_eval_analysis.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_eval_run_grader_errors.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_evaluators.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_foundry_discovery.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_governance.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_init_command.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_initializer.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_invocations.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_knowledge_loader.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_llm_assist.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_llm_assist_spec_rules.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_mcp_server.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_official_eval.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_pipeline_publisher.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_pipeline_reporter.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_preflight.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_production_telemetry.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_release_evidence.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_runtime_conversation.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_runtime_model_config.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_setup_wizard.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_shared_credentials.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_skills.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_skills_sync.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_telemetry.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_time_range.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_trace_promotion.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tests/unit/test_workflow_analysis.py +0 -0
- {agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/tombstones/vscode/CDN_DEPRECATION_REQUEST.md +0 -0
- {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
|
|
226
|
-
├── tutorial-hosted-agent
|
|
227
|
-
├── tutorial-end-to-end.md #
|
|
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.
|
|
8
|
+
## [0.4.3] - 2026-06-17
|
|
9
9
|
|
|
10
|
-
###
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
`
|
|
14
|
-
|
|
15
|
-
agent
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
`--
|
|
22
|
-
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
713
|
-
|
|
714
|
-
You are Travel Agent, a concise travel planning assistant.
|
|
712
|
+
agentops prompt pull
|
|
713
|
+
```
|
|
715
714
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
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
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
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
|
|
729
|
-
|
|
730
|
-
|
|
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
|
|
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
|
# ---------------------------------------------------------------------------
|
{agentops_accelerator-0.4.2 → agentops_accelerator-0.4.3}/src/agentops/pipeline/prompt_deploy.py
RENAMED
|
@@ -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():
|