Release v0.2.0#175
Merged
Merged
Conversation
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>
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release v0.2.0 promotes the current develop updates into main through the release branch.
Highlights
Validation