commitshow 0.3.0 → 0.3.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 +82 -25
- package/dist/lib/render.js +53 -4
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -1,39 +1,87 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">commit.show CLI</h1>
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>Audit any vibe-coded project from your terminal.</strong><br>
|
|
5
|
+
Score · 3-axis breakdown · 3 strengths + 2 concerns · rank · delta — in one command.
|
|
6
|
+
</p>
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
When a walk-on is ready to enter the season for real — Scout forecasts,
|
|
13
|
-
season ranking, Backstage prompt-extraction, Hall of Fame — they audition
|
|
14
|
-
at <https://commit.show/submit>.
|
|
15
|
-
|
|
16
|
-
The npm package + command is `commitshow` (no dot — npm doesn't allow it in
|
|
17
|
-
package names). Everything else uses the brand `commit.show`.
|
|
8
|
+
<p align="center">
|
|
9
|
+
<a href="https://www.npmjs.com/package/commitshow"><img src="https://img.shields.io/npm/v/commitshow?color=F0C040&label=npm&style=flat-square" alt="npm version"></a>
|
|
10
|
+
<a href="https://www.npmjs.com/package/commitshow"><img src="https://img.shields.io/npm/dw/commitshow?color=0F2040&style=flat-square" alt="weekly downloads"></a>
|
|
11
|
+
<img src="https://img.shields.io/node/v/commitshow?color=0F2040&style=flat-square" alt="node">
|
|
12
|
+
<img src="https://img.shields.io/npm/l/commitshow?color=0F2040&style=flat-square" alt="MIT license">
|
|
13
|
+
</p>
|
|
18
14
|
|
|
19
15
|
```bash
|
|
20
|
-
npx commitshow@latest audit
|
|
21
|
-
# or audit any public project by URL — no cd required
|
|
22
16
|
npx commitshow@latest audit github.com/owner/repo
|
|
23
17
|
```
|
|
24
18
|
|
|
19
|
+
```
|
|
20
|
+
┌──────────────────────────────────────────────────────────┐
|
|
21
|
+
│ commit.show · Audit report │
|
|
22
|
+
└──────────────────────────────────────────────────────────┘
|
|
23
|
+
|
|
24
|
+
maa-website austinpw-cloud/maa-website
|
|
25
|
+
|
|
26
|
+
╔══════════════╗
|
|
27
|
+
║ 82 / 100 ║
|
|
28
|
+
╚══════════════╝
|
|
29
|
+
|
|
30
|
+
Audit 42/50 ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▱▱
|
|
31
|
+
Scout 26/30 ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▱▱▱▱
|
|
32
|
+
Comm. 14/20 ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▱▱▱▱▱▱
|
|
33
|
+
|
|
34
|
+
┌───────────────────────────────────────────────────────┐
|
|
35
|
+
│ ↑ 80+ edge functions · LCP 1.4s · 50 RLS policies │
|
|
36
|
+
│ ↑ Brief integrity 9/10 · all 6 sections answered │
|
|
37
|
+
│ ↑ Tech layers 6 · full-stack evidence │
|
|
38
|
+
│ ↓ Accessibility 72 · buttons missing aria-labels │
|
|
39
|
+
│ ↓ No API rate limiting on /auth endpoint │
|
|
40
|
+
└───────────────────────────────────────────────────────┘
|
|
41
|
+
|
|
42
|
+
Ranked #3 of 47 Season Zero
|
|
43
|
+
Tier Honors (top 5%)
|
|
44
|
+
Δ +12 since yesterday's audit
|
|
45
|
+
|
|
46
|
+
→ commit.show/projects/bfe11d75-dc67-…
|
|
47
|
+
commit.show
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> [⭐ Star us on GitHub](https://github.com/commitshow/cli) if `commitshow audit` saved you a `// TODO`.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Why
|
|
55
|
+
|
|
56
|
+
Vibe-coded projects ship fast and break differently. The CLI gives you a
|
|
57
|
+
**zero-config**, **walk-on** lane to commit.show's audit engine — the same
|
|
58
|
+
Claude-grade analysis used in our 3-week leagues, minus the signup, fee,
|
|
59
|
+
and league commitment. You get a snapshot of where the build sits, what's
|
|
60
|
+
strong, what's wobbling, and how it ranks against everyone else this week.
|
|
61
|
+
|
|
62
|
+
Local runs also drop `.commitshow/audit.md` and `.commitshow/audit.json`
|
|
63
|
+
into your repo, so your AI coding agent can read the report on the next
|
|
64
|
+
turn without a prompt-engineering ritual.
|
|
65
|
+
|
|
66
|
+
When a project is ready for the full season — Scout forecasts, season
|
|
67
|
+
ranking, Backstage prompt extraction, Hall of Fame — it auditions at
|
|
68
|
+
[commit.show/submit](https://commit.show/submit).
|
|
69
|
+
|
|
70
|
+
> The npm package + command is `commitshow` (no dot — npm doesn't allow
|
|
71
|
+
> it in package names). Everywhere else uses the brand **commit.show**.
|
|
72
|
+
|
|
25
73
|
## Install
|
|
26
74
|
|
|
27
75
|
```bash
|
|
28
|
-
# one-shot
|
|
76
|
+
# one-shot (recommended for trying it on someone else's repo)
|
|
29
77
|
npx commitshow@latest audit <target>
|
|
30
78
|
|
|
31
|
-
# or global
|
|
79
|
+
# or global, if you'll run it daily
|
|
32
80
|
npm i -g commitshow
|
|
33
81
|
commitshow audit <target>
|
|
34
82
|
```
|
|
35
83
|
|
|
36
|
-
Node 20
|
|
84
|
+
Requires **Node 20+**.
|
|
37
85
|
|
|
38
86
|
## Usage
|
|
39
87
|
|
|
@@ -126,12 +174,21 @@ changes do. Known keys: `project`, `score`, `standing`, `strengths`, `concerns`,
|
|
|
126
174
|
- `0.1` — ✓ read-only audit · status · `--json` · target auto-detect · sidecar files
|
|
127
175
|
- `0.2` — device-flow login · `commitshow submit` · `--watch` mode · CI exit-code gate
|
|
128
176
|
- `0.3` — `commitshow install <pack>` with {{VARIABLE}} substitution
|
|
129
|
-
- `0.4` — MCP server variant (Cursor / Claude Desktop can call commit.show tools directly
|
|
177
|
+
- `0.4` — MCP server variant (Cursor / Claude Desktop can call commit.show tools directly)
|
|
130
178
|
|
|
131
179
|
## Links
|
|
132
180
|
|
|
133
|
-
- Home
|
|
134
|
-
- Source
|
|
135
|
-
- Issues
|
|
181
|
+
- Home — <https://commit.show>
|
|
182
|
+
- Source — <https://github.com/commitshow/cli>
|
|
183
|
+
- Issues — <https://github.com/commitshow/cli/issues>
|
|
184
|
+
- The platform repo — <https://github.com/commitshow/commitshow>
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
<p align="center">
|
|
189
|
+
<strong>Built one repo at a time. <a href="https://commit.show">commit.show</a></strong>
|
|
190
|
+
</p>
|
|
136
191
|
|
|
137
|
-
|
|
192
|
+
<p align="center">
|
|
193
|
+
MIT © 2026 commit.show
|
|
194
|
+
</p>
|
package/dist/lib/render.js
CHANGED
|
@@ -220,18 +220,18 @@ export function renderAudit(view) {
|
|
|
220
220
|
}
|
|
221
221
|
lines.push('');
|
|
222
222
|
// (concerns/strengths block moved above the score · errors-first 2026-04-30)
|
|
223
|
-
// ───
|
|
223
|
+
// ─── AI Coder 7 Frames · signature framework ───
|
|
224
224
|
// Render only the categories that produced an actionable status (fail /
|
|
225
225
|
// warn / pass when meaningful). N/A categories are dropped to keep the
|
|
226
|
-
// terminal output compact.
|
|
227
|
-
//
|
|
226
|
+
// terminal output compact. Surfaces the seven AI-specific failure
|
|
227
|
+
// modes generic linters miss.
|
|
228
228
|
const vc = snapshot?.github_signals?.vibe_concerns;
|
|
229
229
|
if (vc) {
|
|
230
230
|
const items = vibeChecklistLines(vc);
|
|
231
231
|
const actionable = items.filter(i => i.status !== 'na');
|
|
232
232
|
if (actionable.length > 0) {
|
|
233
233
|
lines.push(' ' + boxTop());
|
|
234
|
-
lines.push(' ' + boxRow('
|
|
234
|
+
lines.push(' ' + boxRow('AI Coder 7 Frames · what AI ships without'.length, c.bold(c.gold('AI Coder 7 Frames')) + c.muted(' · what AI ships without')));
|
|
235
235
|
lines.push(' ' + boxBlank());
|
|
236
236
|
for (const it of actionable.slice(0, 7)) {
|
|
237
237
|
const tone = it.status === 'fail' ? c.scarlet : it.status === 'warn' ? c.gold : c.teal;
|
|
@@ -374,6 +374,55 @@ function vibeChecklistLines(vc) {
|
|
|
374
374
|
else
|
|
375
375
|
out.push({ key: 'prompt_injection', status: 'pass', label: 'Prompt injection risk', detail: 'AI SDK in use · no obvious raw-input patterns' });
|
|
376
376
|
}
|
|
377
|
+
// 8. Hardcoded URLs
|
|
378
|
+
{
|
|
379
|
+
const h = vc?.hardcoded_urls;
|
|
380
|
+
if (h && h.total > 0) {
|
|
381
|
+
const ev = h.samples?.[0] ? `${h.samples[0].file} · ${h.samples[0].pattern}` : undefined;
|
|
382
|
+
out.push({ key: 'hardcoded_urls', status: 'warn', label: 'Hardcoded URLs', detail: `${h.total} file${h.total > 1 ? 's' : ''} · localhost / 127.0.0.1 baked in`, evidence: ev });
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
out.push({ key: 'hardcoded_urls', status: 'pass', label: 'Hardcoded URLs', detail: 'no localhost / dev URLs in scanned files' });
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// 9. Mock data in production
|
|
389
|
+
{
|
|
390
|
+
const m = vc?.mock_data;
|
|
391
|
+
if (m && m.total > 0) {
|
|
392
|
+
const ev = m.samples?.[0] ? `${m.samples[0].file} · const ${m.samples[0].collection} = […]` : undefined;
|
|
393
|
+
out.push({ key: 'mock_data', status: 'warn', label: 'Mock data in prod', detail: `${m.total} file${m.total > 1 ? 's' : ''} with inline seed arrays`, evidence: ev });
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
out.push({ key: 'mock_data', status: 'pass', label: 'Mock data in prod', detail: 'no inline mock arrays in app paths' });
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// 10. Webhook signature
|
|
400
|
+
{
|
|
401
|
+
const w = vc?.webhook_signature;
|
|
402
|
+
if (!w || w.handlers_seen === 0) {
|
|
403
|
+
out.push({ key: 'webhook_signature', status: 'na', label: 'Webhook signature', detail: 'no webhook handler files detected' });
|
|
404
|
+
}
|
|
405
|
+
else if (w.gap) {
|
|
406
|
+
out.push({ key: 'webhook_signature', status: 'fail', label: 'Webhook signature', detail: `${w.handlers_seen} handler${w.handlers_seen > 1 ? 's' : ''} · 0 HMAC verification` });
|
|
407
|
+
}
|
|
408
|
+
else if (w.verified_seen >= w.handlers_seen) {
|
|
409
|
+
out.push({ key: 'webhook_signature', status: 'pass', label: 'Webhook signature', detail: `${w.verified_seen}/${w.handlers_seen} handlers verify signature` });
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
out.push({ key: 'webhook_signature', status: 'warn', label: 'Webhook signature', detail: `${w.verified_seen}/${w.handlers_seen} handlers verify signature · partial` });
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// 11. CORS permissive
|
|
416
|
+
{
|
|
417
|
+
const c = vc?.cors_permissive;
|
|
418
|
+
if (c && c.total > 0) {
|
|
419
|
+
const ev = c.samples?.[0] ? `${c.samples[0].file} · ${c.samples[0].pattern}` : undefined;
|
|
420
|
+
out.push({ key: 'cors_permissive', status: 'warn', label: 'CORS too permissive', detail: `${c.total} file${c.total > 1 ? 's' : ''} · origin: '*' or origin: true`, evidence: ev });
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
out.push({ key: 'cors_permissive', status: 'pass', label: 'CORS too permissive', detail: "no 'origin: *' patterns detected" });
|
|
424
|
+
}
|
|
425
|
+
}
|
|
377
426
|
// Sort fail → warn → pass → na
|
|
378
427
|
const order = { fail: 0, warn: 1, pass: 2, na: 3 };
|
|
379
428
|
return out.sort((a, b) => order[a.status] - order[b.status]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commitshow",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "commit.show CLI — audit any vibe-coded project from your terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,15 +23,21 @@
|
|
|
23
23
|
"commit.show",
|
|
24
24
|
"audit",
|
|
25
25
|
"vibe-coding",
|
|
26
|
-
"cli"
|
|
26
|
+
"cli",
|
|
27
|
+
"claude-code",
|
|
28
|
+
"cursor",
|
|
29
|
+
"code-quality",
|
|
30
|
+
"developer-tools"
|
|
27
31
|
],
|
|
28
32
|
"author": "commit.show",
|
|
29
33
|
"license": "MIT",
|
|
30
34
|
"homepage": "https://commit.show",
|
|
31
35
|
"repository": {
|
|
32
36
|
"type": "git",
|
|
33
|
-
"url": "https://github.com/
|
|
34
|
-
|
|
37
|
+
"url": "https://github.com/commitshow/cli"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/commitshow/cli/issues"
|
|
35
41
|
},
|
|
36
42
|
"dependencies": {
|
|
37
43
|
"kleur": "^4.1.5"
|