Commit Graph

10 Commits

Author SHA1 Message Date
Andre Landgraf 231f506f82 Run same-repo Validate on the protected runner group.
Fork pull requests cannot mint an OIDC token, so they stay on ubuntu-latest and the public registry. Same-repo runs install through the Databricks npm mirror, which is what the group can reach.
2026-08-21 14:30:59 -07:00
Tony Dang af27b52659 Add a Kimi Code plugin manifest and release 1.1.2 (#85)
* Add a Kimi Code plugin manifest and release 1.1.2

Kimi Code reads its own kimi.plugin.json rather than the portable
plugin.json, and it does not read mcp.json, so the manifest declares the
Neon MCP Server inline. It points at skills/ in place, so like the root
Agent Plugins package it needs no vendoring.

Wiring it into sync-versions.mjs keeps its version generated from
package.json like every other manifest, and adding it to the workflow's
path filter keeps a Kimi-only edit from skipping validate:versions. The
bump to 1.1.2 releases the accumulated skill changes along with it.

* Tell Kimi users to run /new, not /reload, after installing
2026-08-10 12:37:16 -07:00
Tony Dang 64e8bcce32 Make the repo root installable as an Agent Plugins v1 package (#80)
Clients implementing the Agent Plugins v1 specification look for a
manifest at the plugin root, so today this repo is only installable
through the Claude and Cursor packaging under plugins/. Adding a root
plugin.json and mcp.json makes the repository itself a conforming
portable package that reads skills/ in place, with no vendoring.

The v1 manifest schema is closed, so the client fields the existing
manifests carry (skills, mcpServers, logo, displayName) cannot appear
at the top level and MCP configuration moves to its own file. The root
mcp.json therefore spells the transport "streamable-http" while
plugins/neon-postgres/mcp.json keeps Claude and Cursor's "http" for the
same endpoint; the two files are intentionally not copies.

Apart from the version bump below, the packaging under plugins/ is
untouched, so existing Claude and Cursor installs behave as before.

validate-agent-plugin.mjs gates the new files in CI, checking the closed
manifest field set, MCP transport and containment rules, and skill
discovery. It shares the frontmatter semantics skills-ref uses so the
two validators cannot disagree about the same SKILL.md. Containment is
checked all the way down a skill rather than only at its root, since a
nested symlink escaping the repo would otherwise ship to a v1 client.
A link that will not resolve is reported rather than passing as
contained on the strength of a failed realpath.

Releases this as 1.1.1, and makes package.json the single source of
truth for that number. The root manifest added a sixth place the
version is declared and nothing kept them in step, so a bump that
missed one could publish a catalog entry advertising a different
version than the plugin it installs. sync-versions.mjs generates all
six from package.json, the pre-commit hook runs it the way it already
runs sync-plugin-skills.mjs, and validate:versions is that same script
in --check mode so CI still catches a hand-edited manifest. A release
is now one edit: bump package.json and commit.

The rewrite is a surgical text replacement rather than a JSON
re-serialize, so every manifest keeps its formatting. Nothing is written
until every file re-parses to exactly the expected result.
package-lock.json declares the version twice as well, but it repeats
"version" for every dependency, which makes a text rewrite unsafe; npm
owns that file, so the script checks it and leaves it alone.

The check refuses to pass quietly on a file it did not understand: one
that exists but declares no version is an error, and so is one that
cannot be read, since reporting "in sync" for a file never opened would
defeat the point. Each failure carries its own remedy, and the
sync:versions hint is withheld from the two that command cannot repair.

The hook stages only the manifests sync-versions.mjs reports rewriting,
which it prints to stdout. Staging all six unconditionally would sweep
an in-progress edit to a description or keyword list into an unrelated
commit, since those files are hand-authored apart from the version
field. The vendored skills are still staged a directory at a time so a
deletion is staged too, which is safe because every file under
plugins/*/skills is generated. That loop skips a directory that does
not exist: an unmatched glob is passed through literally, and git add
would abort the commit with a pathspec error the first time a plugin
ships without one of the two client packaging formats.

Also adds the marketplace catalogs to the workflow path filters; editing
one previously skipped CI even though validate:plugins reads them.
2026-08-06 22:34:54 -07:00
Andre Landgraf d5f8a5bb43 ci: run Validate on ubuntu-latest so npm ci can reach the registry (#66)
The job ran on neondatabase-protected-runner-group, which has no public
egress, while npm ci fetches devDependency tarballs from registry.npmjs.org.
Every run since the two changes landed has failed with ECONNRESET on
skills-ref-0.1.5.tgz before the TLS handshake.

Neither change was wrong alone. Moving the job to the protected group was
safe while package.json had no dependencies, and adding skills-ref plus
npm ci was safe on a runner with public egress. Together they are not.

The job checks out a public repo and validates markdown. It touches no
internal service, no Neon Management API, and no secret, so it does not
need the protected group. SHA-pinned actions and the harden-runner egress
audit are unchanged.
2026-07-31 22:10:56 -07:00
Andre Landgraf 7e7beeb74f ci: consolidate validation into shared validate.yml pipeline
Replace validate-plugins.yml with a single Validate workflow that runs
`npm run validate:ci` (validate:plugins && validate:skills), keeping this
repo's plugin-manifest checks. Add path filters and document the shared,
hardened CI shape plus the intentional per-repo differences with
neon-for-agent-platforms in AGENTS.md.
2026-07-14 22:05:09 -07:00
Andre Landgraf 98116462b3 ci: pin skills-ref with lockfile and npm ci in CI
Add package-lock.json, pin skills-ref@0.1.5 as a devDependency, and switch
the Validate Plugins workflow from npm install to npm ci --ignore-scripts so
CI installs are integrity-checked. Add Dependabot for github-actions and npm.
2026-07-14 21:58:26 -07:00
Andre Landgraf ad76d53dc1 ci: harden Validate Plugins runner
Run on the neondatabase protected runner group and add the
step-security/harden-runner egress audit, matching the neondatabase/website
workflows. Pin checkout and setup-node to commit SHAs.
2026-07-14 21:50:36 -07:00
Andre Landgraf 9bfd7ee5e5 docs: make neon skill capability-driven and add CI validation
Rework the neon-postgres skill index into an ordered, task-first guide with specific feature and integration entry points so agents can route faster from context. Add skills-ref validation to CI to prevent regressions in skill structure.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-20 13:10:22 -08:00
Andre Landgraf 44c1d0a857 fix: make plugin validation workflow work without lockfile
Remove npm cache config from setup-node and use npm install instead of npm ci so CI can run in repositories without a lockfile.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 16:10:21 -08:00
Andre Landgraf fea85e597e feat: add multi-plugin layout for Claude and Cursor plugins
Restructure plugin packaging into per-plugin folders so Claude and Cursor manifests, MCP config, and branding are co-located while shared skills are symlinked from top-level skills. Add plugin-manager guidance and CI validation scripts/workflow to prevent marketplace and manifest path regressions as additional plugins are added.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-13 16:03:00 -08:00