From debf49b0e57c8b349ecb43026db8dba3a1dc8560 Mon Sep 17 00:00:00 2001 From: Andrei Hasna Date: Mon, 10 Aug 2026 10:18:03 +0300 Subject: [PATCH] fix: authenticate registry provenance verification Agent: Trebius --- agent-skills/skill-publish/SKILL.md | 10 ++++++---- src/lib/agent-workflow-skills.test.ts | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/agent-skills/skill-publish/SKILL.md b/agent-skills/skill-publish/SKILL.md index 9b5e8ce..9fbb93c 100644 --- a/agent-skills/skill-publish/SKILL.md +++ b/agent-skills/skill-publish/SKILL.md @@ -163,14 +163,15 @@ test -f "$PUBLISH_HELPER" printf '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\n' > "$NPMRC" secrets exec "$TOKEN_PATH" --as NODE_AUTH_TOKEN -- \ bash "$PUBLISH_HELPER" --userconfig "$NPMRC" --access "$ACCESS" -) VERIFY_DIR=$(mktemp -d) PUBLISHED_GIT_HEAD="" for attempt in 1 2 3 4 5; do - if npm view "$PKG@$NEW_VERSION" gitHead --json \ - > "$VERIFY_DIR/githead.out" \ - 2> "$VERIFY_DIR/githead.err"; then + if secrets exec "$TOKEN_PATH" --as NODE_AUTH_TOKEN -- \ + npm view "$PKG@$NEW_VERSION" gitHead --json \ + --userconfig "$NPMRC" \ + > "$VERIFY_DIR/githead.out" \ + 2> "$VERIFY_DIR/githead.err"; then if [ -s "$VERIFY_DIR/githead.out" ]; then if PUBLISHED_GIT_HEAD=$(node -e ' const fs = require("node:fs"); @@ -192,6 +193,7 @@ if [ "$PUBLISHED_GIT_HEAD" != "$EXPECTED_GIT_HEAD" ]; then exit 1 fi printf 'GITHEAD_VERIFIED: %s\n' "$PUBLISHED_GIT_HEAD" +) ``` ### 9. Install locally via bun (NOT npm) diff --git a/src/lib/agent-workflow-skills.test.ts b/src/lib/agent-workflow-skills.test.ts index 04f2f14..e2e5404 100644 --- a/src/lib/agent-workflow-skills.test.ts +++ b/src/lib/agent-workflow-skills.test.ts @@ -69,11 +69,20 @@ describe("repository-managed agent workflow skills", () => { const skill = readFileSync(join(AGENT_SKILLS_DIR, "skill-publish", "SKILL.md"), "utf8"); expect(skill).toContain("scripts/publish_with_git_head.sh"); expect(skill).toContain('secrets exec "$TOKEN_PATH" --as NODE_AUTH_TOKEN'); + expect(skill).toContain( + "printf '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\\n' > \"$NPMRC\"", + ); + expect(skill.match(/secrets exec "\$TOKEN_PATH" --as NODE_AUTH_TOKEN/g) ?? []).toHaveLength(2); + expect(skill).toContain( + String.raw`npm view "$PKG@$NEW_VERSION" gitHead --json \ + --userconfig "$NPMRC"`, + ); expect(skill).toContain('--userconfig "$NPMRC"'); expect(skill).toContain("GITHEAD_VERIFIED:"); expect(skill).toContain('grep -iE "^\\\\+([^+].*)?($SECRET_PATTERN)"'); expect(skill).not.toContain('grep -iE "^\\\\+[^+].*($SECRET_PATTERN)"'); expect(skill).not.toContain("bun publish --access"); + expect(skill).not.toContain("_authToken=[REDACTED_SECRET]"); }); test("skill-publish preserves npm gitHead and restores linked worktrees", () => {