Skip to content

v0.6.0: P0 fixes, binary pipeline, OpenCode MCP, GitHub hardening#57

Merged
espetro merged 91 commits into
mainfrom
develop
Jun 30, 2026
Merged

v0.6.0: P0 fixes, binary pipeline, OpenCode MCP, GitHub hardening#57
espetro merged 91 commits into
mainfrom
develop

Conversation

@espetro

@espetro espetro commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR ships everything needed for the Show HN launch of v0.6.0.

  • P0 correctness: logo srcset swap, npx as hero install, Tier-1/Tier-2 framing, version drift fixes (quick-start 1.0.0→0.6.0, scaffolded deps ^0.2.0→^0.5.0), schema $id domain (agentplugins.dev→pages.dev), install.sh comment, sponsor after GitHub in nav/hero, license footer MIT→Apache 2.0
  • Binary pipeline: release.yml binary job now uses topological pnpm --filter './packages/**' build instead of a selective filter that missed contract/compile/store/pipeline dependencies
  • OpenCode MCP: adapter now emits mcp.servers in opencode.json — the capability matrix ✅ for mcpServers on OpenCode is now accurate; tests added
  • GitHub hardening: CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, issue templates (bug + feature + config), PR template, FUNDING.yml, triage workflow, needs-triage label; branch ruleset on main (PR required + CI gate); tag ruleset restricting v* pushes

Test plan

  • pnpm --filter './packages/**' build passes
  • pnpm -r exec tsc --noEmit passes
  • pnpm test — all tests pass (158 opencode + all other suites)
  • pnpm --filter @agentplugins/cli pack — zero catalog:/workspace: leaks in published deps
  • Pages deploys after merge → verify /install.sh 200, /guide/capability-matrix 200
  • npx @agentplugins/cli@latest --version prints released version
  • Binary pipeline green on next tag push

espetro added 30 commits June 28, 2026 14:05
Adds two optional fields to AgentDefinitionSchema (issue #44).
model: primary model identifier; when unset, harness uses its default.
fallbackModels: ordered list resolved at setup time in roster plugins.
JSON schema regenerated. Tests assert optional contract on both fields.
Claude previously dropped agents[] into metadata._dropped (issue #45).
Adds buildAgentFile() mirroring buildSkillFile() and wires it into
compile() after the skills step. Emits agents/<name>.md with name,
description, tools (if set), and model (only when agent.model is set).
Adds vitest test suite asserting model present/absent per contract.
Pushes model: <agent.model> into agent/<name>.md frontmatter only when
agent.model is set; omitted when unset so the harness uses its default.
Adds agent-emission tests asserting present/absent model contract.
Audit showed codex and pimono adapters do not emit agent files despite
the matrix listing agents[] as universal. New row documents the actual
state: Claude and OpenCode emit model: frontmatter (issue #47); Codex
and Pi Mono have no per-agent file concept and fall back to harness default.
Command handlers in the universal contract store the command string directly
on the handler object (handler.command), not inside handler.config. The copilot
adapter was crashing with 'Cannot read properties of undefined (reading script)'
when compiling hooks that used the universal format.

Fix: fall back to the handler object itself when handler.config is not present,
and default shell to 'bash' when not explicitly specified.
heroAlt slot with Apache 2.0 copy and Polar.sh checkout CTA.
Polar.sh checkout link, brand color #3c82f6, shields.io for-the-badge style.
The plan's heroAlt slot does not exist in VitePress — VitePress exposes
home-hero-after, home-features-before, etc., but not heroAlt. Place the
sponsor block as markdown content below the frontmatter divider, which
the home layout renders below the features grid. No Vue component or
theme override needed.

VPButton scoped-class on inline anchor does not style as expected;
link renders as default underlined link. Acceptable for v1; revisit
if user wants the button styled like the hero CTA.
Closes #50

- sitemap.xml via VitePress built-in `sitemap.hostname`
- robots.txt with Sitemap directive
- Favicon (SVG + ICO), og.png 1200×630 brand image
- Head expanded: keywords, OG, Twitter card, JSON-LD SoftwareApplication
- Page-level title + description frontmatter on index, introduction, quick-start, creating-plugins
- .gitignore: allow static public assets while keeping install.sh ignored
New zero-wiring package that defines the Plugin interface, middleware
contexts (BuildCtx, TargetCtx, InstallCtx), and the createApp() runner.
Every pipeline stage and adapter will register as a Plugin in later phases.

Closes part of #51.
…factories

Adds validateMiddleware, lintMiddleware, compileMiddleware, and
writeMiddleware to @agentplugins/compile. Extends LintContext with
extraRules for per-run rule injection. No changes to existing behavior —
builds and tests remain green.
…istry

Drops the 7-arm switch in favour of buildBuiltinApp() which registers
each adapter as a Plugin via createApp().use(). Extracts resolveTargets()
to eliminate the duplicated targets-fallback on lines 84 and 171.
Build output is byte-identical (verified against example-logger baseline).
Rewrites registry.ts to use a shared pipeline App as the authoritative
adapter store. Fixes the createAdapter-only bug: registerBuiltinAdapters
now uses the per-adapter factory name (createClaudeAdapter, createCodexAdapter,
…) instead of the deprecated createAdapter alias that only adapter-claude
exports. Adds getRegistryApp() to the public adapter API.
TargetPlatformSchema now accepts any non-empty string instead of a closed
enum, enabling custom/private adapters without schema rejections. Built-in
ids are preserved as BuiltinTarget for autocomplete. Unknown target check
in validateUniversal is downgraded from error to warning — the compile
middleware enforces the "no adapter → skip" gate at build time.
Adds defineConfig({ manifest, plugins, targets }) to @agentplugins/core
as a power-user companion to definePlugin. The config loader detects the
defineConfig shape and threads plugins and target overrides into the build
pipeline. User plugins are registered after builtins so they can override
any built-in adapter or stage. Bare manifests remain backward-compatible.
EMITTERS is now a Map instead of a Record, with registerEmitter() and
getRegisteredEmitters() exposed from both @agentplugins/compile and
@agentplugins/core/adapter. Plugins can contribute code emitters for
custom target languages without modifying core internals.
Adds securityPlugin to @agentplugins/store backed by evaluateScriptPolicy,
gateSetupCommand, and hashDirectory. Three onInstall middleware stages —
integrity hashing, setup-command policy gate, and dependency-lifecycle
policy gate — run in sequence and abort the install on any denied decision.
Transparent, reorderable, and removable via defineConfig.
…nsibility section

- Add @agentplugins/pipeline node to dependency graph (with purple style)
- Update all package dependency edges to include pipeline
- Add package table row for pipeline
- Add "Plugin bus" section explaining Plugin interface, lifecycle hooks, and defineConfig usage
- Update compile pipeline flowchart to show preValidate/transformIR/postEmit middleware stages
… targets

getPlatformConstraints() was returning undefined for custom targets, crashing
validateForPlatform() when a user provides a non-builtin target id. Now falls
back to PERMISSIVE_CONSTRAINTS (all hooks/handlers allowed, large limits) so
custom-adapter plugins compile without errors.

Update contract schema tests: TargetPlatformSchema is now an open string so
tests for enum exhaustion become tests for non-empty constraint and custom
target acceptance.
…eConfig + private adapter

Shows the minimum PlatformAdapter surface, how to wire a custom target via
defineConfig({ plugins: [{ name, adapter }], targets: ['claude', 'my-harness'] }),
and produces two dist targets from a single build run.
Covers Plugin interface, custom adapters (PlatformAdapter), lint rules,
and all five middleware hooks (preValidate, transformIR, postEmit,
onInstall, onAudit) with copy-paste examples. Adds page to sidebar.
…-plugins

Shows the extended config format (manifest + plugins + targets fields),
explains when to prefer it over definePlugin, and links to the new
extending guide.
…terface docs

Documents the full PlatformAdapter + AdapterOutput interfaces, the custom
adapter registration pattern via defineConfig, and links to the new
extending guide. Replaces the previous process-ABI stub.
…lizeSource strips tree/blob path; thread branch/subdir through cloneRepo, installPlugin, updatePlugin
espetro added 21 commits June 30, 2026 09:40
- typescript ^6, vitest ^4, vite ^6
- @logtape/logtape ^2 (level->lowestLevel rename)
- cleye ^2, @clack/prompts ^1 (multiselect API)
- tsdown ^0.22.3, jiti ^2.7
- tsconfig: exclude __tests__, ignoreDeprecations 6.0, types: node
- docs: own tsconfig, @types/node from catalog
- vite ^6 root devDeps for vitest peer
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 30, 2026

Copy link
Copy Markdown

Deploying agentplugins with  Cloudflare Pages  Cloudflare Pages

Latest commit: 7cc3e3b
Status: ✅  Deploy successful!
Preview URL: https://5ad7f9f0.agentplugins.pages.dev
Branch Preview URL: https://develop.agentplugins.pages.dev

View logs

@espetro espetro changed the title v0.6.0: Show HN ship — P0 fixes, binary pipeline, OpenCode MCP, GitHub hardening v0.6.0: P0 fixes, binary pipeline, OpenCode MCP, GitHub hardening Jun 30, 2026
@espetro espetro merged commit 3ab37ee into main Jun 30, 2026
3 of 5 checks passed
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.

1 participant