From 279632a6e6efac35a85f72cf96726b04f22fba29 Mon Sep 17 00:00:00 2001 From: Manvendra Date: Thu, 9 Jul 2026 00:32:55 +0530 Subject: [PATCH] chore: complete package.json metadata and guard against publish package.json declared no repository, bugs, homepage, or author, and was not marked private. Four consequences, in descending order of how much they matter: - No `private: true`. agentry installs by clone, never from a registry (D12/D21) -- there is no npm package and there is not meant to be one. A stray `npm publish` would have uploaded the whole repo under the unclaimed name "agentry". npm refuses to publish a package marked private. - No `repository`. Tooling that resolves a project's source from its manifest (and anyone reading package.json first) had nothing to follow. - No `bugs` / `homepage`. Now point at the issue tracker and the README. - `keywords` omitted opencode and mcp, two of the four harnesses and one of the source types. PR #29 made package.json the single source for the plugin manifest's version, description, and license, and left `author` as a literal because package.json had no author field. Adding the field would have recreated exactly the drift #29 removed -- so this also derives `name` and `author` from package.json. No metadata is hardcoded in scripts/ any more. The author value is unchanged ("MANVENDRA-github"), so .claude-plugin/plugin.json regenerates byte-identically. Verified by diffing it across the sync. --- package.json | 14 +++++++++++++- scripts/sync-harnesses.js | 10 +++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ee8c68f..9a280f6 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,17 @@ "version": "0.15.0", "description": "Author your AI coding agents and skills once. Sync them to every harness you use.", "license": "MIT", + "author": "MANVENDRA-github", "type": "module", + "private": true, + "repository": { + "type": "git", + "url": "git+https://github.com/MANVENDRA-github/agentry.git" + }, + "bugs": { + "url": "https://github.com/MANVENDRA-github/agentry/issues" + }, + "homepage": "https://github.com/MANVENDRA-github/agentry#readme", "scripts": { "sync": "node scripts/sync-harnesses.js", "sync:dry": "node scripts/sync-harnesses.js --dry-run", @@ -19,8 +29,10 @@ "claude-code", "cursor", "codex", + "opencode", "ai-agents", "skills", - "agent-harness" + "agent-harness", + "mcp" ] } diff --git a/scripts/sync-harnesses.js b/scripts/sync-harnesses.js index cb9d531..29c658f 100644 --- a/scripts/sync-harnesses.js +++ b/scripts/sync-harnesses.js @@ -254,17 +254,17 @@ async function syncClaude() { ); } - // Version, description, and license come from package.json — the single place a - // release bump happens — so the plugin manifest can never drift from the released - // version. Hardcoding them here meant a bump had to be remembered in two files. + // Every manifest field comes from package.json — the single place project + // metadata and a release bump live — so the plugin manifest can never drift + // from it. Hardcoding any of these meant remembering to change two files. const pkg = JSON.parse( await fs.readFile(path.join(REPO_ROOT, "package.json"), "utf8"), ); const manifest = { - name: "agentry", + name: pkg.name, version: pkg.version, description: pkg.description, - author: "MANVENDRA-github", + author: pkg.author, license: pkg.license, }; await writeFile(