agentops-accelerator 0.5.0__tar.gz → 0.5.2__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.5.0 → agentops_accelerator-0.5.2}/CHANGELOG.md +35 -0
- {agentops_accelerator-0.5.0/src/agentops_accelerator.egg-info → agentops_accelerator-0.5.2}/PKG-INFO +1 -1
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/cli/app.py +71 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/agentops_config.py +55 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/evaluators.py +20 -3
- agentops_accelerator-0.5.2/src/agentops/core/step_summary.py +65 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/orchestrator.py +12 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-prompt-agent.yml +2 -2
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-pr-prompt-agent.yml +1 -1
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-watchdog.yml +1 -1
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2/src/agentops_accelerator.egg-info}/PKG-INFO +1 -1
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops_accelerator.egg-info/SOURCES.txt +2 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cicd.py +6 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_evaluators.py +50 -0
- agentops_accelerator-0.5.2/tests/unit/test_step_summary.py +72 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.claude-plugin/marketplace.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.gitattributes +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/actions/azure-oidc-login/action.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/code-quality-py.instructions.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/copilot-instructions.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/dependabot.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/extensions/agentops-skills/extension.mjs +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/plugin/marketplace.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/skills/release-management/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/_build.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/ci.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/cut-release.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/e2e.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/release.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/staging.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.gitignore +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.pre-commit-config.yaml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.vscode/launch.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.vscode/settings.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.vscode/tasks.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/AGENTS.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/CONTRIBUTING.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/LICENSE +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/README.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/SECURITY.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/bundles.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/ci-github-actions.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/concepts.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/doctor-checks.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/doctor-explained.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/e2e-live-architecture.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/e2e-live-setup.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/foundry-evaluation-sdk-built-in-evaluators.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/how-it-works.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/media/agentops-diagrams.vsdx +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/media/foundry-control-plane.png +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/release-process.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/tutorial-end-to-end.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/tutorial-hosted-agent-quickstart.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/docs/tutorial-prompt-agent.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/examples/flat-quickstart/README.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/examples/flat-quickstart/agentops.yaml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/examples/flat-quickstart/dataset.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/icon.png +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/agent-app/Dockerfile +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/agent-app/app.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/agent-app/requirements.txt +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/bootstrap.bicep +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/bootstrap.parameters.example.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/infra/e2e/perrun.bicep +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/launch.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/media/foundry.svg +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/media/quickstart.gif +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/.vscodeignore +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/LICENSE +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/README.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/package.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/plugin.json +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-eval/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-governance/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/plugins/agentops/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/pyproject.toml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/create_support_agent.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/cut-release.ps1 +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/cut-release.sh +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_aggregate_summary.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_data/basic.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_data/rag.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_data/tools.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_demo.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_hosted_agent.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_make_transcript.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/e2e_render_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/release.ps1 +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/release.sh +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/setup-e2e-new-tenant.ps1 +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/staging.ps1 +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/staging.sh +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/sync-skills.ps1 +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/scripts/sync-skills.sh +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/setup.cfg +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/__main__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/_legacy_ids.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/analyzer.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/_rbac_authorization.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/catalog.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/errors.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/foundry_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/governance.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/latency.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/observability.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/opex.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/opex_workspace.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/content_filter.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/diagnostics.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/local_auth.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/managed_identity.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/posture_rules/network.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/rbac_openai_data_plane.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/regression.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/release_readiness.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/safety.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/checks/spec_conformance.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/cockpit.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/findings.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/history.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/knowledge/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/knowledge/waf-checklist.csv +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_base.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_bundle_rule.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_client.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_dataset_rules.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_engine.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_prompt_rules.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/llm_assist/_spec_rules.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/production_telemetry.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/report.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/server/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/server/app.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/server/auth.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/server/chat.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/server/protocol.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/_credentials.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/azure_monitor.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/azure_resources.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/foundry_control.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/results_history.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/spec_detectors/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/spec_detectors/_base.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/spec_detectors/agents_md.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/sources/spec_detectors/spec_kit.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/agent/time_range.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/cli/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/azd_eval.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/config_loader.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/governance.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/release_evidence.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/results.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/mcp/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/mcp/server.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/azd_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/cloud_results.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/cloud_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/comparison.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/diagnostics.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/invocations.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/official_eval.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/prompt_deploy.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/publisher.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/reporter.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/runtime.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/thresholds.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/assert_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/azd_eval_init.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/cicd.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/eval_analysis.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/evidence_pack.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/initializer.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/preflight.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/redteam_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/setup_wizard.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/skills.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/trace_promotion.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/services/workflow_analysis.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/.gitignore +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/agent-server/Dockerfile +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/agent-server/README.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/agent-server/main.bicep +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/agent.yaml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/agentops.yaml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/foundry.svg +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/icon.png +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-prompt-agent.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-pr-prompt-agent.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-pr.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/pipelines/azuredevops/agentops-watchdog.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/project.gitignore +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/sample-traces.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-agent/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-config/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-dataset/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-eval/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-governance/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-report/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/skills/agentops-workflow/SKILL.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/smoke.jsonl +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/waf-checklist.README.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/waf-checklist.csv +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-dev-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-dev.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-prod-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-prod.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-qa-azd.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-deploy-qa.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/templates/workflows/agentops-pr.yml +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/__init__.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/azd_env.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/azure_endpoints.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/colors.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/dotenv_loader.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/foundry_discovery.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/logging.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/telemetry.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/utils/yaml.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops_accelerator.egg-info/dependency_links.txt +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops_accelerator.egg-info/entry_points.txt +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops_accelerator.egg-info/requires.txt +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops_accelerator.egg-info/top_level.txt +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/TESTING.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/fixtures/fake_adapter.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/fixtures/fake_eval_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/integration/.gitkeep +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/integration/test_cli_flat_schema.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/integration/test_pipeline_smoke.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/.gitkeep +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_analyzer.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_categories.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_errors.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_foundry_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_observability.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_opex.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_opex_workspace.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_rbac_openai_data_plane.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_regression.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_safety.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_checks_spec_conformance.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_cli.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_findings.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_history.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_opex_workspace_check.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_posture_rules.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_results_history.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agent_server.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_agentops_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_assert_and_redteam_runners.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azd_env.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azd_eval.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azd_eval_init.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azd_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azure_endpoints.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_azure_resources_discovery.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cli_cockpit_connection_summary.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cli_cockpit_port_conflict.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cli_commands.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cli_explain.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cloud_results.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cloud_runner.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_cockpit.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_diagnostics.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_doctor_catalog.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_doctor_cli_explain.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_dotenv_loader.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_e2e_render.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_eval_analysis.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_eval_run_grader_errors.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_foundry_discovery.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_governance.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_http_streaming.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_init_command.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_initializer.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_invocations.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_knowledge_loader.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_llm_assist.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_llm_assist_spec_rules.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_mcp_server.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_official_eval.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_pipeline_publisher.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_pipeline_reporter.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_preflight.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_production_telemetry.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_prompt_deploy.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_release_evidence.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_runtime_conversation.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_runtime_model_config.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_runtime_response_fields.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_setup_wizard.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_shared_credentials.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_skills.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_skills_sync.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_telemetry.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_time_range.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_trace_promotion.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_workflow_analysis.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tests/unit/test_yaml_utils.py +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/tombstones/vscode/CDN_DEPRECATION_REQUEST.md +0 -0
- {agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/uv.lock +0 -0
|
@@ -5,6 +5,41 @@ This format follows [Keep a Changelog](https://keepachangelog.com/) and adheres
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.5.2] - 2026-06-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Per-evaluator input remapping via `evaluators[].input_mapping`.** Evaluator
|
|
12
|
+
overrides in `agentops.yaml` now accept an optional `input_mapping` map that is
|
|
13
|
+
merged onto the preset's default inputs, so you only list the keys you want to
|
|
14
|
+
change. This is what lets a grey-box HTTP/JSON target point a RAG evaluator at
|
|
15
|
+
the live retrieved context captured by `response_fields`, for example
|
|
16
|
+
`context: $response.context` on `GroundednessEvaluator` and
|
|
17
|
+
`RetrievalEvaluator`. The mapping applies to both explicitly listed overrides
|
|
18
|
+
and auto-selected presets. A bare evaluator name string (`- GroundednessEvaluator`)
|
|
19
|
+
is still accepted as shorthand for `{ name: GroundednessEvaluator }`, so
|
|
20
|
+
existing configs are unchanged.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- **Rendered gate results in GitHub Actions job summaries.** When AgentOps runs
|
|
26
|
+
inside GitHub Actions (`GITHUB_STEP_SUMMARY` set), `agentops eval run` now
|
|
27
|
+
appends the full rendered `report.md` to the workflow run summary, and
|
|
28
|
+
`agentops assert run` / `agentops redteam run` append a concise pass/fail
|
|
29
|
+
summary (suite, cases, pass rate, per-dimension and per-risk-category
|
|
30
|
+
breakdowns). Reviewers can read the report directly on the run page without
|
|
31
|
+
downloading the uploaded artifacts. Writes are best-effort and a no-op outside
|
|
32
|
+
GitHub Actions, so local runs are unaffected.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
- **Generated workflows use Node24-ready action versions.** The prompt-agent and
|
|
36
|
+
watchdog workflow templates now pin `actions/download-artifact@v7` (instead of
|
|
37
|
+
the Node20 `@v4`), so generated pipelines no longer emit the "Node.js 20
|
|
38
|
+
actions are deprecated" warning. A regression guard checks every workflow
|
|
39
|
+
template against the known Node20 action majors.
|
|
40
|
+
|
|
41
|
+
## [0.5.0] - 2026-06-19
|
|
42
|
+
|
|
8
43
|
### Added
|
|
9
44
|
- **Grey-box retrieval capture for HTTP JSON targets.** An HTTP target can now
|
|
10
45
|
capture extra named fields from a JSON response via a `response_fields` map
|
|
@@ -2354,6 +2354,70 @@ def _resolve_eval_config_path(config: Path | None) -> Path:
|
|
|
2354
2354
|
return Path("agentops.yaml")
|
|
2355
2355
|
|
|
2356
2356
|
|
|
2357
|
+
def _append_assert_step_summary(result, *, scored_cases, pass_rate) -> None:
|
|
2358
|
+
"""Append an ASSERT gate summary to the GitHub Actions step summary."""
|
|
2359
|
+
from agentops.core.step_summary import append_step_summary, is_active
|
|
2360
|
+
|
|
2361
|
+
if not is_active():
|
|
2362
|
+
return
|
|
2363
|
+
status = "❌ VIOLATIONS" if result.has_violations else "✅ PASS"
|
|
2364
|
+
lines = [
|
|
2365
|
+
"## AgentOps ASSERT gate",
|
|
2366
|
+
"",
|
|
2367
|
+
f"**Result:** {status}",
|
|
2368
|
+
"",
|
|
2369
|
+
f"- **Suite:** `{result.suite}`",
|
|
2370
|
+
f"- **Run:** `{result.run_id}`",
|
|
2371
|
+
f"- **Cases:** {result.total_cases} "
|
|
2372
|
+
f"(scored={scored_cases}, passed={result.passed_cases}, "
|
|
2373
|
+
f"failed={result.failed_cases}, skipped={result.skipped_cases})",
|
|
2374
|
+
f"- **Pass rate:** {pass_rate}",
|
|
2375
|
+
]
|
|
2376
|
+
if result.dimension_summary:
|
|
2377
|
+
lines += ["", "| Dimension | Result |", "| --- | --- |"]
|
|
2378
|
+
for name, bucket in sorted(result.dimension_summary.items()):
|
|
2379
|
+
violations = bucket.get("violations", 0)
|
|
2380
|
+
total = bucket.get("total", 0)
|
|
2381
|
+
skipped = bucket.get("skipped", 0)
|
|
2382
|
+
if violations == 0:
|
|
2383
|
+
clean = max(total - skipped, 0)
|
|
2384
|
+
cell = f"{clean}/{total} clean ✅"
|
|
2385
|
+
else:
|
|
2386
|
+
cell = f"{violations}/{total} violating ❌"
|
|
2387
|
+
if skipped:
|
|
2388
|
+
cell += f" (skipped={skipped})"
|
|
2389
|
+
lines.append(f"| {name} | {cell} |")
|
|
2390
|
+
append_step_summary("\n".join(lines))
|
|
2391
|
+
|
|
2392
|
+
|
|
2393
|
+
def _append_redteam_step_summary(result, *, asr_pct) -> None:
|
|
2394
|
+
"""Append a Red Team gate summary to the GitHub Actions step summary."""
|
|
2395
|
+
from agentops.core.step_summary import append_step_summary, is_active
|
|
2396
|
+
|
|
2397
|
+
if not is_active():
|
|
2398
|
+
return
|
|
2399
|
+
status = "❌ HIGH" if result.has_violations else "✅ PASS"
|
|
2400
|
+
lines = [
|
|
2401
|
+
"## AgentOps Red Team gate",
|
|
2402
|
+
"",
|
|
2403
|
+
f"**Result:** {status}",
|
|
2404
|
+
"",
|
|
2405
|
+
f"- **Attempts:** {result.total_attempts} "
|
|
2406
|
+
f"(successful={result.successful_attacks})",
|
|
2407
|
+
f"- **Attack success rate:** {asr_pct}",
|
|
2408
|
+
]
|
|
2409
|
+
if result.fail_threshold is not None:
|
|
2410
|
+
lines.append(f"- **Gate threshold:** {result.fail_threshold:.1%}")
|
|
2411
|
+
if result.per_category:
|
|
2412
|
+
lines += ["", "| Risk category | Successful | Rate |", "| --- | --- | --- |"]
|
|
2413
|
+
for name, bucket in sorted(result.per_category.items()):
|
|
2414
|
+
total = bucket.get("total", 0)
|
|
2415
|
+
successful = bucket.get("successful", 0)
|
|
2416
|
+
rate = bucket.get("attack_success_rate", 0.0)
|
|
2417
|
+
lines.append(f"| {name} | {successful}/{total} | {rate:.1%} |")
|
|
2418
|
+
append_step_summary("\n".join(lines))
|
|
2419
|
+
|
|
2420
|
+
|
|
2357
2421
|
@assert_app.command("run")
|
|
2358
2422
|
def cmd_assert_run(
|
|
2359
2423
|
config: Annotated[
|
|
@@ -2564,6 +2628,8 @@ def cmd_assert_run(
|
|
|
2564
2628
|
"reaching the target; try a less restrictive tester deployment.)"
|
|
2565
2629
|
)
|
|
2566
2630
|
|
|
2631
|
+
_append_assert_step_summary(result, scored_cases=scored_cases, pass_rate=pass_rate)
|
|
2632
|
+
|
|
2567
2633
|
if result.has_violations:
|
|
2568
2634
|
msg = (
|
|
2569
2635
|
f"{_cli_error('FAIL')}: ASSERT reported {result.failed_cases} "
|
|
@@ -2805,6 +2871,8 @@ def cmd_redteam_run(
|
|
|
2805
2871
|
rate = bucket.get("attack_success_rate", 0.0)
|
|
2806
2872
|
typer.echo(f" {name}: {successful}/{total} ({rate:.1%})")
|
|
2807
2873
|
|
|
2874
|
+
_append_redteam_step_summary(result, asr_pct=asr_pct)
|
|
2875
|
+
|
|
2808
2876
|
if result.has_violations:
|
|
2809
2877
|
msg = (
|
|
2810
2878
|
f"{_cli_error('FAIL')}: Red Team attack success rate "
|
|
@@ -2946,6 +3014,9 @@ def _run_flat_schema_eval(
|
|
|
2946
3014
|
report_url = azd_eval.get("report_url") if isinstance(azd_eval, dict) else None
|
|
2947
3015
|
if isinstance(report_url, str) and report_url.strip():
|
|
2948
3016
|
typer.echo(f"{_cli_label('Foundry run')}: {report_url.strip()}")
|
|
3017
|
+
from agentops.core.step_summary import append_report_file
|
|
3018
|
+
|
|
3019
|
+
append_report_file(output_dir / "report.md")
|
|
2949
3020
|
if result.summary.overall_passed:
|
|
2950
3021
|
typer.echo(f"{_cli_label('Threshold status')}: {style('PASSED', 'bold', 'green')}")
|
|
2951
3022
|
return
|
{agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/core/agentops_config.py
RENAMED
|
@@ -152,12 +152,51 @@ class EvaluatorOverride(BaseModel):
|
|
|
152
152
|
evaluators:
|
|
153
153
|
- GroundednessEvaluator
|
|
154
154
|
- CoherenceEvaluator
|
|
155
|
+
|
|
156
|
+
Each entry may instead be a mapping to remap the evaluator inputs. This is
|
|
157
|
+
how an HTTP/JSON target scores the *live* retrieved context (grey-box):
|
|
158
|
+
capture the extra fields on the target with ``response_fields`` and point
|
|
159
|
+
the evaluator at them via ``$response.<name>`` tokens::
|
|
160
|
+
|
|
161
|
+
response_fields:
|
|
162
|
+
context: context
|
|
163
|
+
retrieved_documents: retrieved_documents
|
|
164
|
+
evaluators:
|
|
165
|
+
- name: GroundednessEvaluator
|
|
166
|
+
input_mapping:
|
|
167
|
+
query: $prompt
|
|
168
|
+
response: $prediction
|
|
169
|
+
context: $response.context
|
|
170
|
+
- name: RetrievalEvaluator
|
|
171
|
+
input_mapping:
|
|
172
|
+
query: $prompt
|
|
173
|
+
context: $response.context
|
|
174
|
+
|
|
175
|
+
``input_mapping`` is merged onto the preset's default mapping, so you only
|
|
176
|
+
list the keys you want to change.
|
|
155
177
|
"""
|
|
156
178
|
|
|
157
179
|
name: str
|
|
180
|
+
input_mapping: Optional[Dict[str, str]] = Field(
|
|
181
|
+
None,
|
|
182
|
+
description=(
|
|
183
|
+
"Optional per-evaluator input remap merged onto the preset "
|
|
184
|
+
"defaults. Values use the resolver tokens $prompt, $prediction, "
|
|
185
|
+
"$expected, $context, $row.<col>, and $response.<name> (the last "
|
|
186
|
+
"reads a field captured by the target's response_fields)."
|
|
187
|
+
),
|
|
188
|
+
)
|
|
158
189
|
|
|
159
190
|
model_config = ConfigDict(frozen=True)
|
|
160
191
|
|
|
192
|
+
@model_validator(mode="before")
|
|
193
|
+
@classmethod
|
|
194
|
+
def _coerce_bare_name(cls, data: Any) -> Any:
|
|
195
|
+
"""Accept a bare evaluator name string as shorthand for ``{name: ...}``."""
|
|
196
|
+
if isinstance(data, str):
|
|
197
|
+
return {"name": data}
|
|
198
|
+
return data
|
|
199
|
+
|
|
161
200
|
@field_validator("name")
|
|
162
201
|
@classmethod
|
|
163
202
|
def _name_non_empty(cls, value: str) -> str:
|
|
@@ -165,6 +204,22 @@ class EvaluatorOverride(BaseModel):
|
|
|
165
204
|
raise ValueError("evaluator name must be non-empty")
|
|
166
205
|
return value
|
|
167
206
|
|
|
207
|
+
@field_validator("input_mapping")
|
|
208
|
+
@classmethod
|
|
209
|
+
def _mapping_non_empty(
|
|
210
|
+
cls, value: Optional[Dict[str, str]]
|
|
211
|
+
) -> Optional[Dict[str, str]]:
|
|
212
|
+
if value is None:
|
|
213
|
+
return None
|
|
214
|
+
for key, token in value.items():
|
|
215
|
+
if not str(key).strip():
|
|
216
|
+
raise ValueError("input_mapping keys must be non-empty")
|
|
217
|
+
if not str(token).strip():
|
|
218
|
+
raise ValueError(
|
|
219
|
+
f"input_mapping value for {key!r} must be non-empty"
|
|
220
|
+
)
|
|
221
|
+
return value
|
|
222
|
+
|
|
168
223
|
|
|
169
224
|
# ---------------------------------------------------------------------------
|
|
170
225
|
# Dataset sync configuration
|
|
@@ -32,7 +32,7 @@ final word - no auto-detection runs.
|
|
|
32
32
|
from __future__ import annotations
|
|
33
33
|
|
|
34
34
|
import json
|
|
35
|
-
from dataclasses import dataclass, field
|
|
35
|
+
from dataclasses import dataclass, field, replace
|
|
36
36
|
from pathlib import Path
|
|
37
37
|
from typing import Dict, FrozenSet, Iterable, List, Optional, Tuple
|
|
38
38
|
|
|
@@ -348,6 +348,7 @@ def select_evaluators(
|
|
|
348
348
|
shape: DatasetShape,
|
|
349
349
|
*,
|
|
350
350
|
overrides: Optional[List[str]] = None,
|
|
351
|
+
override_mappings: Optional[Dict[str, Dict[str, str]]] = None,
|
|
351
352
|
threshold_metrics: Optional[Iterable[str]] = None,
|
|
352
353
|
) -> List[EvaluatorPreset]:
|
|
353
354
|
"""Return the ordered list of evaluators to run.
|
|
@@ -356,6 +357,12 @@ def select_evaluators(
|
|
|
356
357
|
bypassed. Each name must exist in :data:`CATALOG` or a ``ValueError`` is
|
|
357
358
|
raised.
|
|
358
359
|
|
|
360
|
+
``override_mappings`` maps an evaluator name to an ``input_mapping`` patch
|
|
361
|
+
that is merged onto that preset's default mapping. This lets a grey-box
|
|
362
|
+
HTTP/JSON target point an evaluator at a live response field captured via
|
|
363
|
+
``response_fields`` (e.g. ``context: $response.context``). It applies to
|
|
364
|
+
both the explicit-override path and the auto-selected presets.
|
|
365
|
+
|
|
359
366
|
Otherwise the rules are:
|
|
360
367
|
|
|
361
368
|
* Always include the baseline quality evaluators.
|
|
@@ -369,6 +376,16 @@ def select_evaluators(
|
|
|
369
376
|
evaluators.
|
|
370
377
|
* Always append the runtime ``avg_latency_seconds`` evaluator.
|
|
371
378
|
"""
|
|
379
|
+
|
|
380
|
+
def _apply_mappings(preset: EvaluatorPreset) -> EvaluatorPreset:
|
|
381
|
+
if not override_mappings:
|
|
382
|
+
return preset
|
|
383
|
+
patch = override_mappings.get(preset.name)
|
|
384
|
+
if not patch:
|
|
385
|
+
return preset
|
|
386
|
+
merged = {**preset.input_mapping, **patch}
|
|
387
|
+
return replace(preset, input_mapping=merged)
|
|
388
|
+
|
|
372
389
|
if overrides:
|
|
373
390
|
resolved: List[EvaluatorPreset] = []
|
|
374
391
|
for name in overrides:
|
|
@@ -379,7 +396,7 @@ def select_evaluators(
|
|
|
379
396
|
f"unknown evaluator override {name!r}. "
|
|
380
397
|
f"Known evaluators: {known}"
|
|
381
398
|
)
|
|
382
|
-
resolved.append(preset)
|
|
399
|
+
resolved.append(_apply_mappings(preset))
|
|
383
400
|
return resolved
|
|
384
401
|
|
|
385
402
|
selected: List[EvaluatorPreset] = list(_QUALITY_BASELINE)
|
|
@@ -411,7 +428,7 @@ def select_evaluators(
|
|
|
411
428
|
)
|
|
412
429
|
|
|
413
430
|
selected.append(_LATENCY)
|
|
414
|
-
return selected
|
|
431
|
+
return [_apply_mappings(preset) for preset in selected]
|
|
415
432
|
|
|
416
433
|
|
|
417
434
|
def _is_agent_target(kind: TargetKind) -> bool:
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Helpers for surfacing AgentOps gate output in CI job summaries.
|
|
2
|
+
|
|
3
|
+
When AgentOps runs inside GitHub Actions, the ``GITHUB_STEP_SUMMARY``
|
|
4
|
+
environment variable points at a Markdown file whose contents render on the
|
|
5
|
+
workflow run page. These helpers append AgentOps output there so reviewers can
|
|
6
|
+
read the rendered report directly on the run page, without downloading the
|
|
7
|
+
uploaded artifacts.
|
|
8
|
+
|
|
9
|
+
All writes are best-effort and never raise, so command handlers can call them
|
|
10
|
+
unconditionally: outside GitHub Actions they simply do nothing.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from typing import Optional
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _summary_path() -> Optional[Path]:
|
|
21
|
+
raw = os.environ.get("GITHUB_STEP_SUMMARY")
|
|
22
|
+
if not raw or not raw.strip():
|
|
23
|
+
return None
|
|
24
|
+
return Path(raw)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def is_active() -> bool:
|
|
28
|
+
"""Return True when a GitHub Actions step summary target is available."""
|
|
29
|
+
return _summary_path() is not None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def append_step_summary(markdown: str) -> bool:
|
|
33
|
+
"""Append a Markdown block to the GitHub Actions step summary.
|
|
34
|
+
|
|
35
|
+
Returns ``True`` when the block was written, ``False`` when not running
|
|
36
|
+
under GitHub Actions or when the write failed. Never raises.
|
|
37
|
+
"""
|
|
38
|
+
path = _summary_path()
|
|
39
|
+
if path is None:
|
|
40
|
+
return False
|
|
41
|
+
try:
|
|
42
|
+
text = markdown if markdown.endswith("\n") else markdown + "\n"
|
|
43
|
+
with path.open("a", encoding="utf-8") as handle:
|
|
44
|
+
handle.write(text)
|
|
45
|
+
handle.write("\n")
|
|
46
|
+
return True
|
|
47
|
+
except Exception:
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def append_report_file(report_path: Path, *, heading: Optional[str] = None) -> bool:
|
|
52
|
+
"""Append the contents of a rendered report file to the step summary.
|
|
53
|
+
|
|
54
|
+
Used for ``agentops eval run`` so the full ``report.md`` renders inline on
|
|
55
|
+
the workflow run page. Returns ``False`` when not under GitHub Actions or
|
|
56
|
+
when the report cannot be read. Never raises.
|
|
57
|
+
"""
|
|
58
|
+
if _summary_path() is None:
|
|
59
|
+
return False
|
|
60
|
+
try:
|
|
61
|
+
body = Path(report_path).read_text(encoding="utf-8")
|
|
62
|
+
except Exception:
|
|
63
|
+
return False
|
|
64
|
+
block = body if heading is None else f"{heading}\n\n{body}"
|
|
65
|
+
return append_step_summary(block)
|
{agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/src/agentops/pipeline/orchestrator.py
RENAMED
|
@@ -132,10 +132,16 @@ def _run_evaluation_local(
|
|
|
132
132
|
overrides = (
|
|
133
133
|
[override.name for override in config.evaluators] if config.evaluators else None
|
|
134
134
|
)
|
|
135
|
+
override_mappings = (
|
|
136
|
+
{o.name: dict(o.input_mapping) for o in config.evaluators if o.input_mapping}
|
|
137
|
+
if config.evaluators
|
|
138
|
+
else None
|
|
139
|
+
) or None
|
|
135
140
|
presets = select_evaluators(
|
|
136
141
|
target,
|
|
137
142
|
shape,
|
|
138
143
|
overrides=overrides,
|
|
144
|
+
override_mappings=override_mappings,
|
|
139
145
|
threshold_metrics=config.thresholds.keys(),
|
|
140
146
|
)
|
|
141
147
|
user_thresholds = [
|
|
@@ -277,10 +283,16 @@ def _run_evaluation_cloud(
|
|
|
277
283
|
overrides = (
|
|
278
284
|
[override.name for override in config.evaluators] if config.evaluators else None
|
|
279
285
|
)
|
|
286
|
+
override_mappings = (
|
|
287
|
+
{o.name: dict(o.input_mapping) for o in config.evaluators if o.input_mapping}
|
|
288
|
+
if config.evaluators
|
|
289
|
+
else None
|
|
290
|
+
) or None
|
|
280
291
|
all_presets = select_evaluators(
|
|
281
292
|
target,
|
|
282
293
|
shape,
|
|
283
294
|
overrides=overrides,
|
|
295
|
+
override_mappings=override_mappings,
|
|
284
296
|
threshold_metrics=config.thresholds.keys(),
|
|
285
297
|
)
|
|
286
298
|
|
|
@@ -93,7 +93,7 @@ jobs:
|
|
|
93
93
|
uses: actions/checkout@v6
|
|
94
94
|
|
|
95
95
|
- name: Download candidate deployment record
|
|
96
|
-
uses: actions/download-artifact@
|
|
96
|
+
uses: actions/download-artifact@v7
|
|
97
97
|
with:
|
|
98
98
|
name: foundry-agent-__ENV_KEY__-candidate
|
|
99
99
|
path: .agentops/deployments
|
|
@@ -169,7 +169,7 @@ __EVAL_STEPS__
|
|
|
169
169
|
timeout-minutes: 10
|
|
170
170
|
steps:
|
|
171
171
|
- name: Download candidate deployment record
|
|
172
|
-
uses: actions/download-artifact@
|
|
172
|
+
uses: actions/download-artifact@v7
|
|
173
173
|
with:
|
|
174
174
|
name: foundry-agent-__ENV_KEY__-candidate
|
|
175
175
|
path: .agentops/deployments
|
|
@@ -110,7 +110,7 @@ jobs:
|
|
|
110
110
|
uses: actions/checkout@v6
|
|
111
111
|
|
|
112
112
|
- name: Download candidate deployment record
|
|
113
|
-
uses: actions/download-artifact@
|
|
113
|
+
uses: actions/download-artifact@v7
|
|
114
114
|
with:
|
|
115
115
|
name: foundry-agent-__ENV_KEY__-candidate
|
|
116
116
|
path: .agentops/deployments
|
|
@@ -69,7 +69,7 @@ jobs:
|
|
|
69
69
|
# downloads when the artifact does not exist yet, instead of
|
|
70
70
|
# surfacing a red error annotation on every first run.
|
|
71
71
|
- name: Restore Doctor history (if any)
|
|
72
|
-
uses: actions/download-artifact@
|
|
72
|
+
uses: actions/download-artifact@v7
|
|
73
73
|
with:
|
|
74
74
|
pattern: agentops-doctor-history
|
|
75
75
|
path: .agentops/agent/
|
|
@@ -154,6 +154,7 @@ src/agentops/core/evaluators.py
|
|
|
154
154
|
src/agentops/core/governance.py
|
|
155
155
|
src/agentops/core/release_evidence.py
|
|
156
156
|
src/agentops/core/results.py
|
|
157
|
+
src/agentops/core/step_summary.py
|
|
157
158
|
src/agentops/mcp/__init__.py
|
|
158
159
|
src/agentops/mcp/server.py
|
|
159
160
|
src/agentops/pipeline/__init__.py
|
|
@@ -313,6 +314,7 @@ tests/unit/test_setup_wizard.py
|
|
|
313
314
|
tests/unit/test_shared_credentials.py
|
|
314
315
|
tests/unit/test_skills.py
|
|
315
316
|
tests/unit/test_skills_sync.py
|
|
317
|
+
tests/unit/test_step_summary.py
|
|
316
318
|
tests/unit/test_telemetry.py
|
|
317
319
|
tests/unit/test_time_range.py
|
|
318
320
|
tests/unit/test_trace_promotion.py
|
|
@@ -31,8 +31,14 @@ _DEPRECATED_NODE20_ACTION_REFS = (
|
|
|
31
31
|
"actions/checkout@v4",
|
|
32
32
|
"actions/setup-python@v5",
|
|
33
33
|
"actions/upload-artifact@v4",
|
|
34
|
+
"actions/upload-artifact@v5",
|
|
35
|
+
"actions/download-artifact@v4",
|
|
36
|
+
"actions/download-artifact@v5",
|
|
37
|
+
"actions/download-artifact@v6",
|
|
34
38
|
"actions/github-script@v7",
|
|
35
39
|
"astral-sh/setup-uv@v3",
|
|
40
|
+
"astral-sh/setup-uv@v5",
|
|
41
|
+
"astral-sh/setup-uv@v6",
|
|
36
42
|
"azure/login@v2",
|
|
37
43
|
)
|
|
38
44
|
|
|
@@ -201,6 +201,56 @@ class TestSelectEvaluators:
|
|
|
201
201
|
with pytest.raises(ValueError, match="unknown evaluator"):
|
|
202
202
|
select_evaluators(_PROMPT_AGENT, _shape(), overrides=["NotAnEvaluator"])
|
|
203
203
|
|
|
204
|
+
def test_override_mapping_patches_explicit_override(self) -> None:
|
|
205
|
+
# Grey-box: point GroundednessEvaluator at the live captured context.
|
|
206
|
+
result = select_evaluators(
|
|
207
|
+
_HTTP_AGENT,
|
|
208
|
+
_shape(),
|
|
209
|
+
overrides=["GroundednessEvaluator"],
|
|
210
|
+
override_mappings={
|
|
211
|
+
"GroundednessEvaluator": {"context": "$response.context"}
|
|
212
|
+
},
|
|
213
|
+
)
|
|
214
|
+
preset = [p for p in result if p.name == "GroundednessEvaluator"][0]
|
|
215
|
+
assert preset.input_mapping["context"] == "$response.context"
|
|
216
|
+
# Unpatched keys keep their preset defaults.
|
|
217
|
+
assert preset.input_mapping["response"] == "$prediction"
|
|
218
|
+
|
|
219
|
+
def test_override_mapping_patches_auto_selected_rag_preset(self) -> None:
|
|
220
|
+
# No explicit overrides: RAG presets are auto-selected from the
|
|
221
|
+
# context-bearing dataset, and the mapping still applies.
|
|
222
|
+
result = select_evaluators(
|
|
223
|
+
_HTTP_AGENT,
|
|
224
|
+
_shape(context=True),
|
|
225
|
+
override_mappings={
|
|
226
|
+
"RetrievalEvaluator": {"context": "$response.context"}
|
|
227
|
+
},
|
|
228
|
+
)
|
|
229
|
+
preset = [p for p in result if p.name == "RetrievalEvaluator"][0]
|
|
230
|
+
assert preset.input_mapping["context"] == "$response.context"
|
|
231
|
+
|
|
232
|
+
def test_override_mapping_does_not_mutate_catalog_preset(self) -> None:
|
|
233
|
+
select_evaluators(
|
|
234
|
+
_HTTP_AGENT,
|
|
235
|
+
_shape(),
|
|
236
|
+
overrides=["GroundednessEvaluator"],
|
|
237
|
+
override_mappings={
|
|
238
|
+
"GroundednessEvaluator": {"context": "$response.context"}
|
|
239
|
+
},
|
|
240
|
+
)
|
|
241
|
+
# The shared CATALOG preset must be untouched (dataclasses.replace
|
|
242
|
+
# returns a copy).
|
|
243
|
+
assert CATALOG["GroundednessEvaluator"].input_mapping["context"] == "$context"
|
|
244
|
+
|
|
245
|
+
def test_override_mapping_none_is_noop(self) -> None:
|
|
246
|
+
result = select_evaluators(
|
|
247
|
+
_HTTP_AGENT,
|
|
248
|
+
_shape(context=True),
|
|
249
|
+
override_mappings=None,
|
|
250
|
+
)
|
|
251
|
+
preset = [p for p in result if p.name == "GroundednessEvaluator"][0]
|
|
252
|
+
assert preset.input_mapping["context"] == "$context"
|
|
253
|
+
|
|
204
254
|
|
|
205
255
|
# ---------------------------------------------------------------------------
|
|
206
256
|
# merge_thresholds
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Unit tests for the GitHub Actions step-summary helpers."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from agentops.core import step_summary
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_is_active_reflects_env(monkeypatch, tmp_path):
|
|
9
|
+
monkeypatch.delenv("GITHUB_STEP_SUMMARY", raising=False)
|
|
10
|
+
assert step_summary.is_active() is False
|
|
11
|
+
|
|
12
|
+
summary = tmp_path / "summary.md"
|
|
13
|
+
monkeypatch.setenv("GITHUB_STEP_SUMMARY", str(summary))
|
|
14
|
+
assert step_summary.is_active() is True
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_append_step_summary_noop_without_env(monkeypatch):
|
|
18
|
+
monkeypatch.delenv("GITHUB_STEP_SUMMARY", raising=False)
|
|
19
|
+
assert step_summary.append_step_summary("# hello") is False
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_append_step_summary_writes_and_appends(monkeypatch, tmp_path):
|
|
23
|
+
summary = tmp_path / "summary.md"
|
|
24
|
+
monkeypatch.setenv("GITHUB_STEP_SUMMARY", str(summary))
|
|
25
|
+
|
|
26
|
+
assert step_summary.append_step_summary("# first") is True
|
|
27
|
+
assert step_summary.append_step_summary("# second\n") is True
|
|
28
|
+
|
|
29
|
+
content = summary.read_text(encoding="utf-8")
|
|
30
|
+
assert "# first" in content
|
|
31
|
+
assert "# second" in content
|
|
32
|
+
# Each block ends with its own newline plus a separating blank line.
|
|
33
|
+
assert content.index("# first") < content.index("# second")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_append_report_file_appends_contents(monkeypatch, tmp_path):
|
|
37
|
+
summary = tmp_path / "summary.md"
|
|
38
|
+
monkeypatch.setenv("GITHUB_STEP_SUMMARY", str(summary))
|
|
39
|
+
report = tmp_path / "report.md"
|
|
40
|
+
report.write_text("# AgentOps Evaluation Report\n\nPASS\n", encoding="utf-8")
|
|
41
|
+
|
|
42
|
+
assert step_summary.append_report_file(report) is True
|
|
43
|
+
content = summary.read_text(encoding="utf-8")
|
|
44
|
+
assert "AgentOps Evaluation Report" in content
|
|
45
|
+
assert "PASS" in content
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_append_report_file_with_heading(monkeypatch, tmp_path):
|
|
49
|
+
summary = tmp_path / "summary.md"
|
|
50
|
+
monkeypatch.setenv("GITHUB_STEP_SUMMARY", str(summary))
|
|
51
|
+
report = tmp_path / "report.md"
|
|
52
|
+
report.write_text("body\n", encoding="utf-8")
|
|
53
|
+
|
|
54
|
+
assert step_summary.append_report_file(report, heading="## Eval") is True
|
|
55
|
+
content = summary.read_text(encoding="utf-8")
|
|
56
|
+
assert "## Eval" in content
|
|
57
|
+
assert "body" in content
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def test_append_report_file_missing_file_is_false(monkeypatch, tmp_path):
|
|
61
|
+
summary = tmp_path / "summary.md"
|
|
62
|
+
monkeypatch.setenv("GITHUB_STEP_SUMMARY", str(summary))
|
|
63
|
+
|
|
64
|
+
assert step_summary.append_report_file(tmp_path / "missing.md") is False
|
|
65
|
+
assert summary.exists() is False or summary.read_text(encoding="utf-8") == ""
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_append_report_file_noop_without_env(monkeypatch, tmp_path):
|
|
69
|
+
monkeypatch.delenv("GITHUB_STEP_SUMMARY", raising=False)
|
|
70
|
+
report = tmp_path / "report.md"
|
|
71
|
+
report.write_text("body\n", encoding="utf-8")
|
|
72
|
+
assert step_summary.append_report_file(report) is False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/code-quality-py.instructions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/skills/release-management/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{agentops_accelerator-0.5.0 → agentops_accelerator-0.5.2}/.github/workflows/agentops-watchdog.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|