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
10 changes: 5 additions & 5 deletions .github/scripts/check_plugin_api.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
"""Fail a change that breaks the plugin surface, unless its title marks the break with ``!``.

The surface is ``BASES`` and ``USED``, the list in README.md "Plugin compatibility"; a unit test
holds the two together. Both trees are read statically with griffe, which reports what breaks a
caller, and the subclass rules below add what breaks a plugin's subclass of a base. A title in the
form ``type(scope)!: summary`` marks the break deliberate: the breaks are printed and the check passes.
The surface is ``BASES`` and ``USED``. Both trees are read statically with griffe, which reports what
breaks a caller, and the subclass rules below add what breaks a plugin's subclass of a base. A title in
the form ``type(scope)!: summary`` marks the break deliberate: the breaks are printed and the check
passes.
"""

from __future__ import annotations
Expand Down Expand Up @@ -617,7 +617,7 @@ def main() -> int:
print("plugin API: the title has a ! but not in the form type(scope)!: summary, with the type one of "
+ ", ".join(TYPES))
print("plugin API: if the break is deliberate, mark it with ! in the pull request title, as in "
"feat(plugins)!: …; see \"Plugin compatibility\" in README.md")
"feat(plugins)!: …")
_report("error", f"{count}; mark it with ! in the title if it is deliberate", found)
return 1

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/local-backends.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ jobs:
# moves; diffing against base.sha would count the base's own later commits as changes.
BASE: ${{ github.event_name == 'pull_request' && 'HEAD^1' || github.event.before }}
run: |
paths='^(src/agent_env/cli/(__init__|__main__|_installers|_plugin_changes|plugin)\.py|src/agent_env/(plugins|config)/|src/agent_env/py\.typed|packages/agentenv-protocol/|tst/installer/|tst/util/capabilities\.py|pyproject\.toml|uv\.lock|Makefile|README\.md|\.github/(workflows/local-backends\.yml|scripts/check_skip_policy\.py))'
paths='^(src/agent_env/cli/(__init__|__main__|_installers|_plugin_changes|plugin)\.py|src/agent_env/(plugins|config)/|src/agent_env/py\.typed|packages/agentenv-protocol/|tst/installer/|tst/util/capabilities\.py|pyproject\.toml|uv\.lock|Makefile|\.github/(workflows/local-backends\.yml|scripts/check_skip_policy\.py))'
if ! changed=$(git diff --name-only "$BASE" HEAD 2>/dev/null); then
echo "plugins=true" >> "$GITHUB_OUTPUT"
elif grep -qE "$paths" <<< "$changed"; then
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/plugin-api.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Plugin API

# Fails a change that breaks the plugin surface (README "Plugin compatibility") unless its title
# Fails a change that breaks the plugin surface unless its title
# marks the break with `!`. A workflow of its own, so that a title edit re-runs only this check.
# On main it checks the squash commit against its parent, a record of what reached history.

Expand Down
3 changes: 1 addition & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,7 @@ skips for the allowed capabilities pass, and the fast job allows no skips under
touches the plugin CLI, `agent_env/plugins`, the tier itself or the lockfile, and allows no skips; a
`changes` job decides. `.github/workflows/plugin-api.yml` runs the `plugin-api` job on every pull
request, title edits included, and on `main`: `.github/scripts/check_plugin_api.py` compares the
plugin surface (its `BASES` and `USED`, which a unit test holds to the README "Plugin compatibility"
list) between `HEAD^1` and `HEAD` with griffe, pinned in the `dev` extra, and fails on a break the
plugin surface (its `BASES` and `USED`) between `HEAD^1` and `HEAD` with griffe, pinned in the `dev` extra, and fails on a break the
title does not mark with `!`. `.github/workflows/clean-install.yml` runs the `clean-install` job on
every pull request and on `main`: `.github/scripts/clean_install.py` builds both distributions as the
release does, fails if the wheel leaves out a file tracked under `src/agent_env/examples` or a
Expand Down
28 changes: 28 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
cff-version: 1.2.0
message: "If you use AgentEnv Framework in your work, please cite it as below."
type: software
title: "AgentEnv Framework"
abstract: "AgentEnv Framework is a Python SDK and CLI for building, deploying and running agentic environments and the tasks that grade agents inside them."
authors:
- family-names: "Arakelyan"
given-names: "Edgar"
affiliation: "Scale AI"
- family-names: "Polakam"
given-names: "Tejas"
affiliation: "Scale AI"
- family-names: "Singhal"
given-names: "Pratyush"
affiliation: "Scale AI"
repository-code: "https://github.com/scaleapi/agentenv-framework"
license: Apache-2.0
date-released: 2026-09-30
keywords:
- reinforcement-learning
- rl-environments
- ai-agents
- llm-agents
- agent-evaluation
- mcp
- model-context-protocol
- a2a
- sandbox
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ must name it (`agentenv-capability-missing: <name>`, see `tst/util/capabilities.
target as received`. Types in use: `feat`, `fix`, `refactor`, `docs`, `test`, `build`, `ci`,
`chore`, `perf`, `security`. The title becomes the commit title.
- Mark a breaking change with `!` after the scope: `feat(plugins)!: summary`. The `plugin-api` job
fails a pull request that breaks the plugin surface (README "Plugin compatibility") without it,
fails a pull request that breaks the plugin surface without it,
lists what broke, and runs again when you edit the title. To run it before you push:
`.venv/bin/python .github/scripts/check_plugin_api.py --base origin/main --title "<title>"`.
- Commit with an email address you are comfortable publishing; the history of this repository is
Expand Down
Loading
Loading