Skip to content

Release v0.2.0#175

Merged
placerda merged 224 commits into
mainfrom
release/v0.2.0
May 22, 2026
Merged

Release v0.2.0#175
placerda merged 224 commits into
mainfrom
release/v0.2.0

Conversation

@placerda
Copy link
Copy Markdown
Contributor

Summary

Release v0.2.0 promotes the current develop updates into main through the release branch.

Highlights

  • Adds release evidence, trace promotion, workflow analysis, and prompt-agent deployment support.
  • Refreshes AgentOps 1.0 CLI/docs/templates around flat agentops.yaml, azd initialization, Doctor, and Cockpit readiness.
  • Finalizes changelog and plugin marketplace versions for v0.2.0.

Validation

  • python -m pytest tests/ -x -q

placerda and others added 30 commits April 15, 2026 17:52
The old logic in ci.yml and staging.yml auto-bumped PATCH+1 when HEAD
was not an exact tag match, causing VSIX versions to leak ahead of the
actual release (e.g. 0.1.8 published to Marketplace before 0.1.8 was
planned).

- staging.yml: derive version from branch name (release/v0.1.8 → 0.1.8)
- ci.yml: use committed package.json as-is (dry-run only, no publish)
- release.yml: already uses tag-direct logic (no change needed)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
fix: remove PATCH+1 version heuristic from VSIX builds
…ce init

- Wire telemetry.py into runner.py with full span hierarchy
  (eval_run_span, eval_item_span, record_evaluator_span)
- Add docs/telemetry.md: comprehensive OTel guide for developers
- Remove dead 'agentops trace init' CLI stub
- Update agentops-trace skill to reflect built-in tracing
- Remove generated .github/skills/agentops-* (output, not source)
…backends

Telemetry improvements:

- Add agent_invoke_span() to Foundry and HTTP backends to trace individual agent/model invocations with target, model, provider, agent_id, agent_name, and agent_version attributes

- Enrich eval_item span names with a truncated prompt snippet (e.g. 'eval_item 0 - What is the capital...') for easier identification in AI Toolkit dashboard

- Pass input_text from runner to eval_item_span() for label generation

Backend cleanup:

- Remove deprecated SubprocessBackend and its tests; consolidated into LocalAdapterBackend

- Fix syntax error in local_adapter_backend.py caused by corrupted duplicate code block

Copilot instructions:

- Update .github/copilot-instructions.md with latest project guidance
feat: wire OTel telemetry into runner, add telemetry docs
- Add plugin.json for VS Code Marketplace metadata
- Add marketplace.json for GitHub (.github/plugin/) and Claude (.claude-plugin/)
- Update .vscodeignore to exclude marketplace files from VSIX
- Update cut-release scripts (ps1, sh, yml) to sync plugin versions
- Update workspace settings for plugin discovery
- Update tutorial-copilot-skills.md with marketplace docs
feat: add plugin marketplace configuration and version sync
- Add sync-skills scripts (bash + PowerShell) and CI test to enforce single source of truth for skills between src/agentops/templates/skills/ and plugins/agentops/skills/ (closes #87)

- Add cross-platform subprocess pattern in agentops-eval and agentops-dataset skills (shutil.which + shell detection)

- Genericize auth carrythrough: AGENT_AUTH_HEADER/AGENT_AUTH_TOKEN env vars in callable_adapter.py template and agentops-eval skill

- Add azd environment validation step in agentops-eval and agentops-config skills

- Add optional unit test generation question and guidance section in agentops-eval skill

- Enhance smoke test diagnostics with empty response, format mismatch, UUID prefix, and HTML error detection

- Update CONTRIBUTING.md with skills single-source-of-truth rule

- Sync plugins/agentops/skills/ from canonical src/ templates
feat: improve eval workflow and add skills sync (#87)
Change OutputConfig.publish_foundry_evaluation default from False to True so eval runs automatically publish results to the AI Foundry portal. Update all documentation to reflect the new default.
feat: default publish_foundry_evaluation to true
When running evaluations locally (hosting: local, execution_mode: local),
some Foundry evaluators (TaskCompletionEvaluator, ToolSelectionEvaluator,
ToolInputAccuracyEvaluator, TaskNavigationEfficiencyEvaluator) are only
available via the Foundry Cloud Evaluation API (builtin.*) and do not
exist in the azure-ai-evaluation Python SDK.

Previously, using agent_workflow_baseline bundle with local execution
crashed with 'Unknown built-in Foundry evaluator class'. Now these
evaluators are gracefully skipped with clear warning messages, and
threshold checks exclude skipped evaluators from validation.

Changes:
- eval_engine.py: Add _CloudOnlyEvaluatorError sentinel; catch
  AttributeError in _load_foundry_evaluator_callable and raise
  cloud-only error; catch in _build_foundry_evaluator_runtimes
  and warn+skip
- runner.py: Change _validate_enabled_evaluators_scored to warn
  instead of raise for missing scores; skip threshold checks for
  evaluators with no scores in _evaluate_item_thresholds and
  _summarize_thresholds_from_items

Tested against:
- Local callable with agent_workflow_baseline: 3 evaluators skipped,
  3 scored successfully
- Cloud model-direct: all evaluators submitted to Foundry API
- Cloud Foundry agent: all 6 evaluators scored via cloud API

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…noise

Follow-up items from issue #79 E2E validation:

1. Add run-agent-local.yaml template to agentops init scaffold —
   combines type:agent + hosting:local + framework:agent_framework
   with agent_workflow_baseline bundle for local workflow testing.

2. Document TaskAdherenceEvaluator behavior — SDK expects multi-turn
   conversation format (list of message dicts with role/content);
   single-turn plain text inputs produce low scores. Added note to
   agent_workflow_baseline.yaml bundle description.

3. Suppress 'Conversation history could not be parsed' warning —
   add logging filter for azure-ai-evaluation SDK loggers that
   emit this warning on every single-turn row (expected, harmless).

4. Capture callable return tool_calls in results — extract
   tool_calls from callable/subprocess output and include in
   backend_metrics.json row_metrics for post-analysis.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add agent_framework_adapter.py — a dedicated callable adapter that
invokes Azure AI Foundry agents locally via the Foundry REST API.

Supports two agent ID patterns:
- 'asst_*' IDs: Threads/Runs API (create thread → message → run → poll)
- Named agents (e.g. 'FoundryAgent'): Responses API with agent_reference

The adapter extracts response text and tool_calls from the API response,
matching the contract expected by agent_workflow_baseline evaluators.

Also updates:
- callable_adapter.py: Add Option 4 pointing to agent_framework_adapter
- run-agent-local.yaml: Document both adapter options
- initializer.py: Include adapter in agentops init scaffold (26 files)

Tested E2E against real FoundryAgent via Responses API — all 5 rows
processed with evaluator scores returned.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add multi_agent_workflow.py — a sample multi-agent orchestration
callable that uses Azure AI Agent Framework SDK (Assistants API)
to dynamically create and coordinate agents:

  Router Agent → analyzes query, selects specialist
  WeatherSpecialist → get_weather tool
  FinanceSpecialist → convert_currency, calculate_compound_interest tools
  SearchSpecialist → search_news, search_flights tools

Agents are created dynamically per evaluation row and cleaned up
after use. Tool calls are captured from requires_action/submit
flow and returned in the callable response.

E2E validated: all 5 smoke-agent-tools rows processed with correct
routing (weather/finance/search), tool invocations with correct
arguments, and evaluator scores (ToolCallAccuracy: 3.0,
IntentResolution: 3.8).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…from org/repo)

Add --from flag to 'agentops skills install' for installing community skills
from GitHub repositories following the agentskills.io standard.

Features:
- Parse github:org/repo[@ref] references with version pinning
- Download repo tarball (single request, no API pagination)
- Extract skill following agentskills.io convention (SKILL.md + references/)
- Platform-aware installation (Copilot, Claude, Cursor)
- Security: path sanitization, scripts/ blocked by default, traversal prevention
- Provenance: .installed-from.json tracks source repo, ref, and installed files
- Auth: GITHUB_TOKEN / GH_TOKEN env var support for private repos

Usage:
  agentops skills install --from donlee/pptx-designer
  agentops skills install --from github:org/repo@v1.0 --platform claude

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fix 2 lint errors that existed on develop branch:
- skills.py: remove unused import 'Any'
- test_skills.py: remove unused variable 'result'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- multi_agent_workflow.py: explicit str()/list() casts for SPECIALISTS dict values
- local_adapter_backend.py: add assert for adapter_command before shlex.split

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…k SDK

Replace OpenAI Assistants API (openai.AzureOpenAI.beta.assistants)
with Azure AI Agent Framework SDK (azure-ai-agents AgentsClient):

- Use AgentsClient.create_agent() for dynamic agent creation
- Use FunctionTool with real Python callables (not JSON schemas)
- Use ToolSet + enable_auto_function_calls() for automatic tool execution
- Use create_thread_and_process_run() for the agent execution loop
- Fix tool function signatures for string args from SDK

The multi-agent workflow now properly uses the Agent Framework pattern:
  AgentsClient → create_agent() → FunctionTool → ToolSet
  → enable_auto_function_calls() → create_thread_and_process_run()

E2E validated: all 5 rows, correct routing, tool_calls captured,
evaluators scored (ToolCallAccuracy: 3.0, IntentResolution: 3.6).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace azure-ai-agents AgentsClient with the actual Microsoft Agent
Framework SDK (pip install agent-framework agent-framework-foundry):

- Agent: creates agents with instructions and @tool-decorated functions
- FoundryChatClient: connects to Azure AI Foundry model deployments
- Agent.run(): executes agent with automatic tool call handling
- @tool decorator: wraps Python functions for Agent Framework

The workflow pattern is now:
  FoundryChatClient → Agent(client, tools=[@tool]) → Agent.run(query)
  Router Agent.run() → determines specialist → Specialist Agent.run()

Tool calls captured via @tool wrapper functions. Agent Framework
auto-executes tools and logs 'Function X succeeded'.

E2E: 5/5 rows, correct routing, all tools called with correct args.
Scores: ToolCallAccuracy 3.0, IntentResolution 3.6.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use 'from agent_framework.foundry import FoundryChatClient' matching
the official Microsoft Agent Framework samples, instead of the
internal 'agent_framework_foundry' package import.

Reference: microsoft/agent-framework samples/03-workflows/
  step2_agents_in_a_workflow.py

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rewrite multi_agent_workflow.py to follow the official Microsoft
Agent Framework workflow pattern (microsoft/agent-framework samples):

- WorkflowBuilder with edges connecting Router, Coordinator, Specialists
- Custom RoutingCoordinator(Executor) with @handler for routing logic
- AgentExecutor wraps each Agent for workflow integration
- ctx.send_message() for inter-agent communication
- ctx.yield_output() for workflow output

Workflow executes as proper supersteps:
  Superstep 1: Router → Coordinator (routing decision)
  Superstep 2: Specialist + @tool auto-execution
  Superstep 3: Coordinator → yield output

E2E: 5/5 rows, correct routing, tools executed, evaluators scored.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace azure-ai-agents AgentsClient with Microsoft Agent Framework
FoundryAgent (agent_framework.foundry.FoundryAgent) for pre-deployed
agent evaluation.

Reference: microsoft/agent-framework samples/02-agents/providers/
           foundry/foundry_agent_basic.py

E2E validated: 5/5 rows against FoundryAgent, evaluators scored.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ture

The adapter was returning only response text with no tool_calls,
making tool-related evaluators produce meaningless scores.

Now provides local @tool implementations that Agent Framework
auto-executes when the Foundry agent makes tool calls. Invocations
are captured and returned for evaluator scoring.

Flow:
  run_evaluation(input, context)
    → FoundryAgent(tools=[get_weather, ...]).run(input)
      → Agent calls get_weather → Framework auto-executes locally
      → _captured_tool_calls records the invocation
    → return {response, tool_calls}

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… tools

Replace FoundryAgent (requires server-side tool declarations) with
Agent + FoundryChatClient (tools defined entirely in code).

Both adapters now use the same Microsoft Agent Framework pattern:
- agent_framework_adapter: single Agent with @tool functions
- multi_agent_workflow: WorkflowBuilder + Router + Coordinator + Specialists

E2E validated both: tool_calls captured in all 5 rows for both adapters.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ators

fix: gracefully skip cloud-only evaluators in local execution mode
Foundation for the 1.0 revamp (#107). Adds two new modules alongside the
existing layered config system; nothing wired up to the runner yet.

- core/agentops_config.py: flat AgentOpsConfig (Pydantic v2) with version,
  agent, dataset, thresholds, optional protocol and HTTP fields, optional
  evaluators override. classify_agent() resolves the agent value into one
  of foundry_prompt, foundry_hosted, http_json, model_direct. Rejects
  legacy keys (target/bundle/scenario/run/etc) with a clear error.

- core/evaluators.py: catalog of ~12 evaluator presets aligned with the
  azure-ai-evaluation SDK categories. select_evaluators() picks the set
  from (target_kind, dataset_shape): always baseline quality (Coherence,
  Fluency, Similarity, F1Score); +RAG when rows have context; +Agent
  evaluators when rows have tool_calls/tool_definitions. Model-direct
  targets stay quality-only. Optional overrides bypass inference.

- detect_dataset_shape() inspects a JSONL dataset and reports which
  optional fields are populated.

- merge_thresholds() combines preset defaults with user overrides.

53 unit tests added; full suite still green (319 passed, 1 skipped).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Implements the new pipeline namespace introduced in the revamp:

- core/results.py: RunResult/RowResult/ThresholdEvaluation/ComparisonInfo Pydantic models for the stable results.json contract.

- pipeline/invocations.py: 4 target backends (model_direct, foundry_prompt, foundry_hosted Responses+Invocations, http_json) behind a single invoke() dispatcher.

- pipeline/runtime.py: lazy azure-ai-evaluation evaluator instantiation, per-row execution, score extraction; baked-in handling for AI-assisted vs safety classes.

- pipeline/thresholds.py: criteria evaluation against aggregated metrics with 'missing' fallback.

- pipeline/comparison.py + reporter.py: --baseline support and report.md rendering with delta tables.

- pipeline/orchestrator.py: end-to-end run_evaluation() that classifies the agent, infers evaluators from dataset shape, runs invocations, applies thresholds, and writes results.json + report.md.

- core/config_loader.py: new load_agentops_config() loader for agentops.yaml.

- tests/integration/test_pipeline_smoke.py: 2 end-to-end tests against an in-process HTTP echo server (no Azure dependencies); covers baseline comparison.

Refs #107

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
placerda and others added 23 commits May 14, 2026 21:14
…ty Model

Two changes:

1. The workspace WAF checklist template
   (`src/agentops/templates/waf-checklist.csv`) was empty. Populated it
   with a curated 50-item shortlist (10 per WAF pillar) drawn from the
   public Microsoft Azure AI Landing Zones Checklist (177 items),
   prioritized for what AgentOps Doctor can verify with its existing
   data sources (results_history, azure_monitor, foundry_control,
   azure_resources, workspace_files). Each row includes:

   - The original `ai_lz.AI.<n>` reference so users can cross-link
     back to the source checklist.
   - A `doctor_check_id` that maps to an actual rule when one exists
     today (`status: implemented`), to a reachable signal that needs
     a rule (`status: planned`), or to a manual audit step
     (`status: manual`).

   Distribution: 19 implemented / 7 planned / 24 manual. Pillars:
   Security, OperationalExcellence, Reliability, Performance, Cost.

2. Removed the GenAIOps Maturity Model entirely; the toolkit does not
   support it for now. Deleted `src/agentops/agent/maturity.py` and
   `tests/unit/test_maturity.py`, removed the maturity block /
   sparkline badge from `agent/report.py` and `agent/dashboard.py`
   (including the dashboard CSS for `.maturity-badge`), and pruned
   the L0-L4 progression section + maturity references from
   `docs/doctor-explained.md`. The WAF checklist remains the
   canonical reference framework.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CSV has no portable comment syntax. The 41-line `# ...` header in
the workspace WAF checklist template rendered as 41 garbage rows in
Excel / pandas / GitHub web preview, and only "worked" in the
Doctor's loader by accident (rows without a `doctor_check_id` are
filtered at `_row_to_item`).

Strip the comment header from `waf-checklist.csv` and move the
documentation (curation policy, column reference, how-to-extend) to
a sibling `waf-checklist.README.md`. The initializer now copies both
files into `.agentops/` on `agentops init`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…icy)

Per product decision: the seed checklist must contain only items
where the Doctor has a working rule today (`implemented`) or items
that require explicit human judgement (`manual`). The 7 `planned`
rows promised future automation that is easy to forget — better to
re-add each item to the file when its rule actually ships.

Removed 7 rows: AI.132 (token-usage), AI.10 (quota adequacy),
AI.154 (rate limits), AI.155 (PTU utilization), AI.140 (token
benchmark), AI.25 (cost tracking), AI.26 (max_tokens limit).

Final shortlist: 43 items = 19 implemented + 24 manual. Per-pillar
counts are slightly uneven (Reliability 7, Cost 8, OpEx + Perf 9,
Security 10) — accepted as a side-effect of the "ship-only-what-we-
verify" policy.

README distribution table and column reference updated to drop the
`planned` status.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ge, pre-flight CLI

Three new doctor rules wired into the existing data sources (no new
Azure SDK dependencies):

* `opex.max_tokens_undefined` (AI.26, workspace_files) — warns when
  agentops.yaml / any bundle YAML configures a model but never
  declares `max_tokens:`. Runaway completions = unbounded cost.

* `opex.no_token_telemetry` (AI.132, azure_monitor) — warns when the
  runtime emits dependency spans but no `gen_ai.usage.input_tokens` /
  `output_tokens`, so token-cost monitoring stays blind.

* `errors.rate_limit_pressure` (AI.154, azure_monitor) — counts HTTP
  429 responses from Azure OpenAI / AI Services; escalates to
  critical at 2x the configured rate threshold.

Two queries were added to the azure_monitor source (`_TOKEN_USAGE_KQL`
and `_RATE_LIMIT_KQL`), both best-effort like the existing safety
probe — failures populate diagnostics and never affect the primary
request-count payload.

New `docs/doctor-checks.md` is the canonical reference inventory of
every check, grouped by WAF pillar, with finding id / severity /
source / mechanism (programmatic vs llm-judged) / detection signal.
Also documents the roadmap items that still require new Azure SDK
dependencies (AI.10 / AI.155 / AI.158 / AI.140 / AI.25).

New `agentops.services.preflight` module + `--no-preflight` /
`--strict-preflight` flags on `agentops doctor` and `--no-preflight`
on `agentops dashboard`. Pre-flight runs four checks before the
slow work:

1. `workspace` — `.agentops/` present?
2. `azure_auth` — `DefaultAzureCredential` can acquire an ARM token?
   (humanizes the AzureCliCredential wall-of-text into a one-line
   `az login` hint.)
3. `foundry_project` — `AZURE_AI_FOUNDRY_PROJECT_ENDPOINT` reachable
   + App Insights discoverable? (reuses the cached discovery helper.)
4. `app_insights` — connection string available somewhere?

Default policy is advisory (warn + continue). `--strict-preflight`
fails the run on any warning so CI catches the misconfig early.

WAF checklist template updated with the 3 new `implemented` rows.
22 implemented rules total now, 506 unit tests passing (was 487 / 19
new tests for the new rules + pre-flight).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pre-flight output now reads like a clean checklist instead of an
internal log dump:

* Each row uses a human display name (Workspace, Azure
  authentication, Foundry project, Application Insights) instead of
  the internal kebab id.
* Headline summary `<n> ok · <n> warning · <n> failed · <n> skipped`,
  each count colored in its own tone — your eye lands on the
  non-zero ones automatically.
* For `warn` / `fail` / `skip` rows, the actionable remediation
  ("Run `az login` ...", "Wire App Insights in Foundry ...") renders
  on its own indented line under the message, prefixed with a `→`
  glyph. Manual review is no longer required to know what to fix.
* When every check passes the body collapses to a single one-line
  summary — no clutter on a healthy run.
* ANSI color auto-toggles based on `stderr.isatty()` and honors
  `NO_COLOR`, so piping the output into a CI log buffer produces
  clean ASCII without callers having to opt out.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Running `agentops dashboard` a second time while the previous
instance is still serving used to dump a raw uvicorn traceback:

  ERROR:    [Errno 10048] error while attempting to bind on address
  ('127.0.0.1', 8090): [winerror 10048] only one usage of each
  socket address (protocol/network address/port) is normally permitted

The dashboard still worked (the first instance was serving), but the
second call printed an ugly red error and left the user wondering
what was broken.

Before starting uvicorn we now probe the port. Three outcomes:

* Port free — proceed as before.
* Port owned by an AgentOps dashboard (verified by GET /healthz
  returning `{"status": "ok"}`) — print "AgentOps dashboard is
  already running on http://127.0.0.1:8090 — opening browser", open
  the browser at that URL, exit 0. No traceback, user lands on the
  live dashboard.
* Port owned by something else — print one-line "Port N is already
  in use by another process. Pick a different port with
  `agentops dashboard --port <N>`" and exit 1. No traceback.

Both helpers are pure stdlib (`socket.create_connection` for the
probe, `urllib.request` for the /healthz heuristic) so no new deps.
Five new tests cover free/listening/different-service/match-AgentOps
combinations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous port-conflict commit only ran before `uvicorn.Server.run`
was invoked. A second class of failure still leaked through: when the
probe sees the port as free (because the previous dashboard's TCP
socket is in TIME_WAIT, not LISTEN) and uvicorn's bind() then fails
mid-startup, the raw red `ERROR: [Errno 10048] error while attempting
to bind on address ...` line still appeared in the terminal.

Two changes:

* Silence uvicorn's own loggers (`uvicorn`, `uvicorn.error`,
  `uvicorn.access`) via a `log_config` so the ERROR line never
  reaches stderr by itself.

* Run `server.run()` inside a daemon wrapper that captures any
  exception. After the startup-wait loop, if the wrapper recorded a
  bind error, the CLI prints a human explanation that names TIME_WAIT
  as the likely cause and offers three concrete fixes (wait,
  --port <N+1>, Get-NetTCPConnection -LocalPort N), then exits 1.
  No traceback in any path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](actions/download-artifact@v4...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 3 to 7.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@v3...v7)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [azure/login](https://github.com/azure/login) from 2 to 3.
- [Release notes](https://github.com/azure/login/releases)
- [Commits](Azure/login@v2...v3)

---
updated-dependencies:
- dependency-name: azure/login
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
…actions/download-artifact-8

chore(deps): bump actions/download-artifact from 4 to 8
…actions/setup-python-6

chore(deps): bump actions/setup-python from 5 to 6
…astral-sh/setup-uv-7

chore(deps): bump astral-sh/setup-uv from 3 to 7
…actions/checkout-6

chore(deps): bump actions/checkout from 4 to 6
…azure/login-3

chore(deps): bump azure/login from 2 to 3
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

# Conflicts:
#	docs/tutorial-agent-watchdog.md
#	docs/tutorial-baseline-comparison.md
#	docs/tutorial-basic-foundry-agent.md
#	docs/tutorial-end-to-end.md
#	docs/tutorial-quickstart.md
#	docs/tutorial-rag.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@placerda placerda merged commit 32aad48 into main May 22, 2026
5 checks passed
@placerda placerda deleted the release/v0.2.0 branch May 22, 2026 18:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants