Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"name": "agentops-accelerator",
"source": "../../plugins/agentops",
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
"version": "0.8.8",
"version": "0.9.0",
"keywords": [
"agentops",
"evaluation",
Expand Down
2 changes: 1 addition & 1 deletion .github/plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"name": "agentops-accelerator",
"source": "../../plugins/agentops",
"description": "Copilot agent skills for running standardized evaluation workflows with AgentOps Toolkit and Microsoft Foundry agents.",
"version": "0.8.8",
"version": "0.9.0",
"keywords": [
"agentops",
"evaluation",
Expand Down
70 changes: 51 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ jobs:
needs: [lint, test]
runs-on: ubuntu-latest
environment: staging
outputs:
version: ${{ steps.package-version.outputs.version }}
permissions:
id-token: write # Required for PyPI Trusted Publishing (OIDC)
steps:
Expand All @@ -171,10 +173,44 @@ jobs:
- name: Build package
run: uv build

- name: Determine built version
id: package-version
run: |
VERSION=$(uv run python - <<'PY'
from email.parser import BytesParser
from pathlib import Path
from zipfile import ZipFile

wheels = sorted(Path("dist").glob("*.whl"))
if len(wheels) != 1:
raise SystemExit(
f"Expected exactly one wheel in dist/, found {len(wheels)}."
)
with ZipFile(wheels[0]) as archive:
metadata_files = [
name
for name in archive.namelist()
if name.endswith(".dist-info/METADATA")
]
if len(metadata_files) != 1:
raise SystemExit(
"Expected exactly one .dist-info/METADATA file in "
f"{wheels[0].name}, found {len(metadata_files)}."
)
metadata = BytesParser().parsebytes(archive.read(metadata_files[0]))
version = metadata.get("Version")
if not version:
raise SystemExit(f"No Version field found in {wheels[0].name}.")
print(version)
PY
)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Built package version: $VERSION"

- name: Show version
run: |
ls -la dist/
uv run python -c "from importlib.metadata import version; print(f'Dev version: {version(\"agentops-accelerator\")}')"
echo "Dev version: ${{ steps.package-version.outputs.version }}"

- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
Expand All @@ -189,33 +225,27 @@ jobs:
needs: publish-dev
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: "3.12"

- name: Determine expected version
id: version
run: |
pip install setuptools-scm
VERSION=$(python -m setuptools_scm)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Expected dev version: $VERSION"

- name: Install from TestPyPI
env:
PACKAGE_VERSION: ${{ needs.publish-dev.outputs.version }}
run: |
if [ -z "$PACKAGE_VERSION" ]; then
echo "::error::publish-dev did not expose the built package version."
exit 1
fi
# TestPyPI serves its simple index through a CDN, so a freshly
# uploaded release is not immediately resolvable even after the
# upload returns 200 OK. Allow ~6 minutes for it to propagate.
ATTEMPTS=12
for i in $(seq 1 "$ATTEMPTS"); do
echo "Attempt $i/$ATTEMPTS: installing agentops-accelerator==${{ steps.version.outputs.version }}"
echo "Attempt $i/$ATTEMPTS: installing agentops-accelerator==$PACKAGE_VERSION"
if pip install --no-cache-dir \
"agentops-accelerator==${{ steps.version.outputs.version }}" \
"agentops-accelerator==$PACKAGE_VERSION" \
--index-url https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple/; then
exit 0
Expand All @@ -225,7 +255,7 @@ jobs:
sleep 30
fi
done
echo "::error::agentops-accelerator==${{ steps.version.outputs.version }} was not available from TestPyPI after $ATTEMPTS attempts (~6 min)."
echo "::error::agentops-accelerator==$PACKAGE_VERSION was not available from TestPyPI after $ATTEMPTS attempts (~6 min)."
exit 1

- name: Smoke test
Expand All @@ -234,13 +264,15 @@ jobs:
agentops --help

- name: Summary
env:
PACKAGE_VERSION: ${{ needs.publish-dev.outputs.version }}
run: |
echo "## ✅ Dev build published and verified" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "- Version: \`${{ steps.version.outputs.version }}\`" >> "$GITHUB_STEP_SUMMARY"
echo "- TestPyPI: https://test.pypi.org/project/agentops-accelerator/${{ steps.version.outputs.version }}/" >> "$GITHUB_STEP_SUMMARY"
echo "- Version: \`$PACKAGE_VERSION\`" >> "$GITHUB_STEP_SUMMARY"
echo "- TestPyPI: https://test.pypi.org/project/agentops-accelerator/$PACKAGE_VERSION/" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "Install: \`pip install agentops-accelerator==${{ steps.version.outputs.version }} --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/\`" >> "$GITHUB_STEP_SUMMARY"
echo "Install: \`pip install agentops-accelerator==$PACKAGE_VERSION --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/\`" >> "$GITHUB_STEP_SUMMARY"

# Validate that the VSIX extension packages correctly
build-vsix:
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,39 @@ This format follows [Keep a Changelog](https://keepachangelog.com/) and adheres

## [Unreleased]

## [0.9.0] - 2026-08-14

### Changed
- **The AgentOps Cockpit now focuses on five release-readiness sections.**
The page renders only the readiness and Doctor ship verdicts, Foundry and
GitHub connections, the 13-item observability checklist, the latest Doctor
findings, and prioritized next actions. Date-window and auto-refresh controls
were removed because the remaining sections describe current configuration
and the latest analysis rather than time-series dashboards.
- **Observability readiness now distinguishes native Foundry tracing from
optional custom spans.** Hosted agents and prompt agents are recognized as
natively instrumented, while repository OpenTelemetry spans are reported as
optional extensions. App Insights linkage, rubric evaluators, alert
definitions, and tracing evidence are resolved independently so unknown state
is no longer presented as a failure.

### Fixed
- **Project-managed Application Insights connections now work throughout
Doctor and Cockpit.** AgentOps discovers the attached Application Insights
ARM resource from credential-free Foundry connection metadata and queries it
with `LogsQueryClient.query_resource`, avoiding false missing-telemetry
findings when no API-key connection string exists.
- **`agentops agent register` now derives hosted-agent names from Foundry
target URLs.** A command that supplies only `--sponsor` correctly resolves
names such as `helpdeskbot`, matching the fallback promised by `--help`.

### Removed
- **The experimental AgentOps telemetry import and custom Operations Dashboard
have been removed.** The public telemetry command group, Log Analytics
workbook deployment, bundled workbook/KQL assets, and dashboard-specific
posture rule are no longer shipped while native product observability support
is reviewed.

## [0.8.8] - 2026-08-14

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ candidate versions become a release. Start with
<div class="agentops-card" markdown>
### :material-radar: Observe
[Observe](observe.md) covers Foundry traces and Azure Monitor, and how
production signals feed continuous evaluation. Start with
`agentops telemetry validate` and the `agentops-agent` skill.
production signals inform release readiness. Start with the `agentops-agent`
skill.
</div>

<div class="agentops-card" markdown>
Expand Down
Loading