feat(plugins): Add universal plugin support#113
Draft
dcramer wants to merge 5 commits into
Draft
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Add a canonical .agents/plugins plugin model based on the Codex manifest shape and generate deterministic runtime outputs for supported agent tools. Wire plugin declarations through config loading, lockfiles, install, sync, list, doctor, gitignore handling, and documentation. Reject same-project plugin installs that would overwrite their own source and cover the new behavior with regression tests. Co-Authored-By: Codex <codex@openai.com>
f70f2bf to
925d589
Compare
Keep plugin lock entries after bundle installation so later syncs can repair runtime projection failures. Validate same-project plugin declarations in doctor, emit a single conventional OpenCode module, escape generated OpenCode imports, and preserve empty resolved paths for root git plugins. Co-Authored-By: GPT-5 Codex <codex@openai.com>
Use a manifest-shaped marketplace overlay so marketplace source and policy metadata do not leak into installed plugin manifests or generated Codex manifests. Reject same-project plugin declarations during frozen installs so frozen mode matches normal install, sync, and doctor behavior. Co-Authored-By: GPT-5 Codex <codex@openai.com>
Report missing plugin bundles as errors, avoid OpenCode stubs for absent explicit modules, and reject user-scope plugin declarations until user-scope projections are defined. Document the project-scope-only plugin behavior in the public docs and specs. Co-Authored-By: GPT-5 Codex <codex@openai.com>
92df14a to
7b2c0fe
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7b2c0fe. Configure here.
7b2c0fe to
a9a6f7b
Compare
Keep .agents/plugins/marketplace.json as authored canonical input instead of a generated or pruned runtime artifact. Tighten marketplace selector resolution and avoid treating unsupported source objects or URL-like paths as local filesystem paths. Preserve manifest-declared plugin names through validation, reject explicit path name mismatches, prefer directory-name plugin matches over root manifest matches, and keep same-project plugin aliases out of managed .agents/.gitignore entries. Report plugin sync issues from the repaired state, surface user-scope plugins as unsupported in doctor, and export public plugin config and lockfile types from the host package barrels. Add regression coverage for git plugin lock metadata, explicit plugin path installs, manifest mismatches, plugin discovery precedence, public plugin type exports, and the reviewed sync and doctor plugin edge cases. Co-Authored-By: GPT-5 Codex <codex@openai.com>
a9a6f7b to
73edb08
Compare
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.

This adds first-class plugin support using .agents/plugins as the canonical local layout while treating the Codex plugin manifest and marketplace shape as the generalized input model. Plugin declarations now flow through config loading, lockfiles, install, sync, list, doctor, gitignore handling, and docs/specs, with deterministic runtime outputs for Cursor, Codex, Claude Code, Grok Build, and OpenCode where each tool needs its own artifact shape.
The implementation rejects same-project plugin sources that resolve inside the current project’s .agents/plugins tree, keeps source marketplace metadata distinct from generated runtime marketplace output, and only overwrites managed runtime artifacts. It also preserves plugin gitignore entries across remove/sync paths, separates registry-backed agents from plugin-only targets like Grok, and tightens plugin manifest and marketplace validation while still allowing extension fields.
Validation: pnpm check; pnpm smoke:examples; pnpm --filter @sentry/dotagents exec tsx src/cli/index.ts --help; Docker QA in /private/tmp/dotagents-iterate-qa.WAvF7c covering plugin install/list/remove/sync fixtures.