pqcheck 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -14
- package/bin/pqcheck.js +33 -30
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ Wire Cipherwake into your CI so every PR gets a Trust Diff comment when your dom
|
|
|
22
22
|
npx pqcheck onboard cipherwake.io
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
That runs in sequence: scan your domain → write the GitHub Action workflow → capture a vendor lockfile → generate a release checklist →
|
|
25
|
+
That runs in sequence: scan your domain → write the GitHub Action workflow → capture a vendor lockfile → generate a release checklist → commit + push. **No API key, no repo secret.** The scaffolded workflow uses GitHub Actions OIDC (`id-token: write`) to authenticate to Cipherwake — Free includes 30 Trust Diff calls/month per repo, no setup required.
|
|
26
26
|
|
|
27
27
|
**Or step-by-step if you prefer:**
|
|
28
28
|
|
|
@@ -30,20 +30,15 @@ That runs in sequence: scan your domain → write the GitHub Action workflow →
|
|
|
30
30
|
# 1. Scaffold a GitHub Actions workflow (interactive prompts)
|
|
31
31
|
npx pqcheck init
|
|
32
32
|
|
|
33
|
-
# 2.
|
|
34
|
-
# (Free tier: 30 Trust Diff calls/month)
|
|
35
|
-
|
|
36
|
-
# 3. Add the key as a repo secret:
|
|
37
|
-
# GitHub → Settings → Secrets → Actions → New secret
|
|
38
|
-
# Name: CIPHERWAKE_API_KEY Value: qpk_...
|
|
39
|
-
|
|
40
|
-
# 4. Commit + push
|
|
33
|
+
# 2. Commit + push
|
|
41
34
|
git add .github/workflows/cipherwake.yml
|
|
42
35
|
git commit -m "ci: add Cipherwake Trust Diff gate"
|
|
43
36
|
git push
|
|
44
37
|
```
|
|
45
38
|
|
|
46
|
-
That's it. Open a PR and Cipherwake comments inline when cert / SPKI / HSTS / CSP / DMARC / vendor scripts drift since your baseline.
|
|
39
|
+
That's it. The scaffolded workflow includes `permissions: id-token: write`, so the runner mints a signed OIDC token on each run and Cipherwake meters per repo — no secret to manage. Open a PR and Cipherwake comments inline when cert / SPKI / HSTS / CSP / DMARC / vendor scripts drift since your baseline.
|
|
40
|
+
|
|
41
|
+
**Need higher limits?** Paid tiers (Starter $29/mo · Growth $79/mo · Scale $199/mo) lift the per-repo quota to 1,000 / 10,000 / 50,000 calls/month. Generate an API key at [/account#api-keys](https://cipherwake.io/account#api-keys), then add it as the repo secret `CIPHERWAKE_API_KEY`. The Action uses the secret when present and falls back to OIDC when not — no code change needed to upgrade.
|
|
47
42
|
|
|
48
43
|
**Want more?**
|
|
49
44
|
- Pre-commit hook: `npx pqcheck deploy-check <domain>` before every deploy
|
|
@@ -254,7 +249,7 @@ This CLI is one of four ways to consume the [Decryption Blast Radius API](https:
|
|
|
254
249
|
|---|---|
|
|
255
250
|
| **CLI** (this package) | `npx pqcheck` |
|
|
256
251
|
| **Browser extension** | Chrome Web Store / Firefox AMO / Edge — toolbar badge per tab + dependency analysis |
|
|
257
|
-
| **GitHub Action** | [`
|
|
252
|
+
| **GitHub Action** | [`cipherwakelabs/pqcheck/action@main`](https://github.com/cipherwakelabs/pqcheck/tree/main/action) — PR comments, SARIF upload, lockfile generation |
|
|
258
253
|
| **Slack `/pqcheck`** | [Install on workspace](https://cipherwake.io/install-slack) |
|
|
259
254
|
| **Web** | [cipherwake.io](https://cipherwake.io) — share-friendly URLs at `/r/<domain>` |
|
|
260
255
|
|
|
@@ -298,10 +293,10 @@ The CLI follows the same policy — output formats are stable across minor versi
|
|
|
298
293
|
run: npx pqcheck@latest mycompany.com --threshold 7
|
|
299
294
|
```
|
|
300
295
|
|
|
301
|
-
For richer integration (sticky PR comments, SARIF upload to Code Scanning, lockfile diff on regression), use the [GitHub Action](https://github.com/
|
|
296
|
+
For richer integration (sticky PR comments, SARIF upload to Code Scanning, lockfile diff on regression), use the [GitHub Action](https://github.com/cipherwakelabs/pqcheck/tree/main/action):
|
|
302
297
|
|
|
303
298
|
```yaml
|
|
304
|
-
- uses:
|
|
299
|
+
- uses: cipherwakelabs/pqcheck/action@main
|
|
305
300
|
with:
|
|
306
301
|
domain: mycompany.com
|
|
307
302
|
threshold: '7'
|
|
@@ -322,7 +317,7 @@ MIT. © 2026 Cipherwake.
|
|
|
322
317
|
|
|
323
318
|
---
|
|
324
319
|
|
|
325
|
-
**Source:** [github.com/
|
|
320
|
+
**Source:** [github.com/cipherwakelabs/pqcheck](https://github.com/cipherwakelabs/pqcheck)
|
|
326
321
|
|
|
327
322
|
**Changelog:** [CHANGELOG.md](./CHANGELOG.md) for version-by-version release notes.
|
|
328
323
|
|
package/bin/pqcheck.js
CHANGED
|
@@ -2715,6 +2715,7 @@ on:
|
|
|
2715
2715
|
|
|
2716
2716
|
permissions:
|
|
2717
2717
|
contents: read
|
|
2718
|
+
id-token: write # required for OIDC-based metering (Free=30 calls/repo/mo, no API key needed)
|
|
2718
2719
|
security-events: write # required for SARIF upload to Code Scanning
|
|
2719
2720
|
pull-requests: write # required for sticky PR comment (Action v3.1+)
|
|
2720
2721
|
|
|
@@ -2729,8 +2730,11 @@ jobs:
|
|
|
2729
2730
|
domain: ${domain}
|
|
2730
2731
|
baseline: ${baseline}
|
|
2731
2732
|
fail-on: ${failOn}
|
|
2732
|
-
env
|
|
2733
|
-
|
|
2733
|
+
# No env/secrets needed for Free tier — the action uses the
|
|
2734
|
+
# workflow's id-token: write permission to fetch a GitHub-signed
|
|
2735
|
+
# OIDC token and meters per repo (30 calls/mo, no setup).
|
|
2736
|
+
# If you want higher limits, link this repo to a paid Cipherwake
|
|
2737
|
+
# account at https://cipherwake.io/account → Linked repos.
|
|
2734
2738
|
`;
|
|
2735
2739
|
}
|
|
2736
2740
|
|
|
@@ -3300,33 +3304,19 @@ async function runOnboardCommand(args) {
|
|
|
3300
3304
|
}
|
|
3301
3305
|
|
|
3302
3306
|
// -------------------------------------------------------------------------
|
|
3303
|
-
//
|
|
3307
|
+
// Final next-steps (v0.13 OIDC path — no API key needed for Free tier)
|
|
3304
3308
|
// -------------------------------------------------------------------------
|
|
3305
|
-
//
|
|
3306
|
-
//
|
|
3307
|
-
//
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
console.log(` ${color("dim", "(opened in your browser — sign in / sign up there)")}`);
|
|
3317
|
-
} else {
|
|
3318
|
-
console.log(` ${color("dim", "(copy the URL above; --no-open suppresses this hint)")}`);
|
|
3319
|
-
}
|
|
3320
|
-
}
|
|
3321
|
-
console.log("");
|
|
3322
|
-
console.log(` ${color("dim", "2.")} ${color("bold", "Add the key as a GitHub repo secret")}`);
|
|
3323
|
-
console.log(` ${color("dim", "GitHub → Settings → Secrets and variables → Actions → New repository secret")}`);
|
|
3324
|
-
console.log(` ${color("dim", "Name: CIPHERWAKE_API_KEY Value: qpk_... (from step 1)")}`);
|
|
3325
|
-
console.log("");
|
|
3326
|
-
console.log(` ${color("dim", "3.")} ${color("bold", "Commit + push")}`);
|
|
3327
|
-
// R41 Q1.15 (locked 2026-05-16): build the git-add file list as an array
|
|
3328
|
-
// and join, so we don't print trailing-space args when --skip flags are
|
|
3329
|
-
// used. Harmless bash semantics either way; cleaner output.
|
|
3309
|
+
// Pre-v0.13 this step opened a browser to the API-key page + asked the user
|
|
3310
|
+
// to paste the key as a GitHub repo secret. With Action v3.2 + OIDC repo
|
|
3311
|
+
// metering, the scaffolded workflow has `permissions: { id-token: write }`
|
|
3312
|
+
// and the action fetches a GitHub-signed token automatically — no key, no
|
|
3313
|
+
// secret, no browser hop. Free tier is 30 calls/repo/mo, enforced server-
|
|
3314
|
+
// side via the `meter_gh_action_call` RPC against `gh_action_repo_quota`.
|
|
3315
|
+
// For higher limits, the user links this repo to a paid account at /account
|
|
3316
|
+
// (one-time OAuth) — still no API key in CI.
|
|
3317
|
+
console.log(color("bold", " ✓ Setup files written. Two steps remain:"));
|
|
3318
|
+
console.log("");
|
|
3319
|
+
console.log(` ${color("dim", "1.")} ${color("bold", "Commit + push")} (no API key, no secrets needed for the Free tier)`);
|
|
3330
3320
|
const filesToAdd = [".github/workflows/cipherwake.yml"];
|
|
3331
3321
|
if (!skipVendors) filesToAdd.push("cipherwake.vendors.json");
|
|
3332
3322
|
if (!skipChecklist) filesToAdd.push("CIPHERWAKE_CHECKLIST.md");
|
|
@@ -3334,8 +3324,21 @@ async function runOnboardCommand(args) {
|
|
|
3334
3324
|
console.log(` ${color("dim", "$")} git commit -m "ci: add Cipherwake Trust Diff gate"`);
|
|
3335
3325
|
console.log(` ${color("dim", "$")} git push`);
|
|
3336
3326
|
console.log("");
|
|
3337
|
-
console.log(` ${color("dim", "Open a PR
|
|
3338
|
-
console.log("");
|
|
3327
|
+
console.log(` ${color("dim", "2.")} ${color("bold", "Open a PR")}`);
|
|
3328
|
+
console.log(` ${color("dim", "Cipherwake will comment inline within ~60s of the workflow firing. The action uses GitHub OIDC to meter usage per repo (Free = 30 calls/mo).")}`);
|
|
3329
|
+
console.log("");
|
|
3330
|
+
// R48 (post-R47 review MAJOR #6): the /account → "Linked repos" UI is
|
|
3331
|
+
// not yet shipped (out of R47 scope). Pointing users to a nonexistent
|
|
3332
|
+
// page-hash would create a broken growth path at the moment of intent.
|
|
3333
|
+
// Route through the feedback form until the linking UI lands.
|
|
3334
|
+
console.log(` ${color("dim", "Want higher limits (1K/10K/50K Trust Diff calls/mo)?")}`);
|
|
3335
|
+
console.log(` ${color("violet", `${API_BASE}/feedback?topic=linked-repos`)}`);
|
|
3336
|
+
console.log(` ${color("dim", "Repo-linking UI is rolling out — request early access via the form.")}`);
|
|
3337
|
+
console.log("");
|
|
3338
|
+
// R41 fix #4 carried forward: --strict gates exit code on step failures.
|
|
3339
|
+
// noOpen flag is now a no-op since we don't open a browser, but we keep it
|
|
3340
|
+
// accepted for backward compat with users who already pass --no-open.
|
|
3341
|
+
void noOpen;
|
|
3339
3342
|
// R41 fix #4: --strict makes onboard exit non-zero if any step failed.
|
|
3340
3343
|
// Default (best-effort) exit 0 keeps the wizard friendly for first-time
|
|
3341
3344
|
// human setup — the visible yellow warnings tell them what to retry.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pqcheck",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.13.1",
|
|
4
|
+
"description": "HTTPS posture scanner with Trust Diff for CI, vendor lockfile + drift alerts, cross-tenant key map, and HNDL/quantum-decryption risk scoring. Free, no signup.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"post-quantum",
|
|
7
7
|
"cryptography",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"bugs": "https://cipherwake.io",
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
|
24
|
-
"url": "https://github.com/
|
|
24
|
+
"url": "https://github.com/cipherwakelabs/pqcheck.git",
|
|
25
25
|
"directory": "cli"
|
|
26
26
|
},
|
|
27
27
|
"license": "MIT",
|