diff --git a/tests/integration/fixtures/reference/plugin.json b/tests/integration/fixtures/reference/plugin.json index 9971952..6d4fd8c 100644 --- a/tests/integration/fixtures/reference/plugin.json +++ b/tests/integration/fixtures/reference/plugin.json @@ -1,4 +1,5 @@ { + "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "demo", "version": "0.1.0", "description": "Reference plugin for integration tests.", diff --git a/tests/integration/test_antigravity.py b/tests/integration/test_antigravity.py index ea4fb88..63c391e 100644 --- a/tests/integration/test_antigravity.py +++ b/tests/integration/test_antigravity.py @@ -1,6 +1,11 @@ """Antigravity end-to-end via folder install: `agy plugin install ` loads the skill and MCP server, and an ambient env var reaches the server. +Checks: + 1. `agy plugin install ` accepts the generated files. + 2. It reports exactly one skill and one MCP server. + 3. An ambient env var reaches the MCP server. + AGY forwards the ambient environment. It can't resolve a `./` command, so we point it at the committed probe by absolute path. Auth lives under HOME (can't isolate), so we install into the real home; the `_clean_agy` fixture uninstalls before and diff --git a/tests/integration/test_claude.py b/tests/integration/test_claude.py index 5e37daa..9c0b8e8 100644 --- a/tests/integration/test_claude.py +++ b/tests/integration/test_claude.py @@ -2,6 +2,13 @@ skill, `--config` sets the userConfig the server resolves (`${user_config.demo_host}`), and a session starts the server (via the generated `${CLAUDE_PLUGIN_ROOT}` command). Needs a session (auth), so it's `integration`. + +Checks: + 1. `plugin marketplace add` + `plugin install` accept the generated files. + 2. `plugin details` reports the skill. + 3. `--config demo_host=...` sets the userConfig declared in the manifest. + 4. A session starts the server via `${CLAUDE_PLUGIN_ROOT}`, and the config + value arrives as DEMO_HOST (`${user_config.demo_host}` resolved). """ from __future__ import annotations diff --git a/tests/integration/test_codex.py b/tests/integration/test_codex.py index 753698e..304fcba 100644 --- a/tests/integration/test_codex.py +++ b/tests/integration/test_codex.py @@ -1,6 +1,13 @@ """Codex end-to-end via folder install: the plugin installs, its MCP server starts, and a user env var resolves into it. +Checks: + 1. Marketplace install accepts the generated files. + 2. A session starts the MCP server. + 3. A user env var reaches it, i.e. Codex applied the `.codex-plugin/` + `env_vars` overlay to the spec server. **Needs Codex 0.150.0+**; older + versions read the spec mcp.json only and drop the variable. + Codex-legacy can't resolve a `./` command, so we point it at the committed probe by absolute path. Needs a session (auth), so it's marked `integration`. """ diff --git a/tests/integration/test_gemini.py b/tests/integration/test_gemini.py index b10593d..1fb3e28 100644 --- a/tests/integration/test_gemini.py +++ b/tests/integration/test_gemini.py @@ -2,6 +2,12 @@ the extension and its skill, the generated `${extensionPath}` command resolves the committed probe, and an ambient env var reaches the server. +Checks: + 1. `gemini extensions install ` accepts the generated extension. + 2. The extension and its skill are listed after install. + 3. The `${extensionPath}` command in gemini-extension.json resolves. + 4. An ambient env var reaches the MCP server. + Gemini forwards the ambient environment. It prompts to trust the folder (answered on stdin) and installs into the real home; the `_clean_gemini` fixture uninstalls before and after (before too, to recover from a crashed prior run). diff --git a/uv.lock b/uv.lock index a4cbca2..f966510 100644 --- a/uv.lock +++ b/uv.lock @@ -8,7 +8,7 @@ resolution-markers = [ [[package]] name = "agent-plugin-sync" -version = "0.1.2" +version = "0.1.3" source = { editable = "." } dependencies = [ { name = "pydantic" },