commitshow 0.1.5 → 0.1.7
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 +12 -7
- package/dist/index.js +2 -1
- package/dist/lib/render.js +42 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
# commit.show CLI
|
|
2
2
|
|
|
3
|
-
> Audit any vibe-coded project from your terminal.
|
|
4
|
-
|
|
5
|
-
The official CLI for **[commit.show](https://commit.show)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
> Audit any vibe-coded project from your terminal — the **walk-on** lane.
|
|
4
|
+
|
|
5
|
+
The official CLI for **[commit.show](https://commit.show)**. A walk-on
|
|
6
|
+
drops in, gets scored, and leaves — no signup, no audition fee, no league
|
|
7
|
+
entry. You get the same Claude-grade analysis used in the full season
|
|
8
|
+
(Audit / Scout / Community breakdown, 3 strengths + 2 concerns, rank,
|
|
9
|
+
delta since the last snapshot). Local runs also save `.commitshow/audit.md`
|
|
10
|
+
so your AI coding agent can read the report in the next turn and iterate.
|
|
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>.
|
|
10
15
|
|
|
11
16
|
The npm package + command is `commitshow` (no dot — npm doesn't allow it in
|
|
12
17
|
package names). Everything else uses the brand `commit.show`.
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,10 @@ import { status } from './commands/status.js';
|
|
|
5
5
|
import { login } from './commands/login.js';
|
|
6
6
|
import { whoami } from './commands/whoami.js';
|
|
7
7
|
import { c } from './lib/colors.js';
|
|
8
|
-
const VERSION = '0.1.
|
|
8
|
+
const VERSION = '0.1.7';
|
|
9
9
|
const USAGE = `
|
|
10
10
|
${c.bold(c.gold('commit.show'))} ${c.dim(`v${VERSION}`)} ${c.muted('—')} ${c.cream('audit any vibe-coded project from your terminal.')}
|
|
11
|
+
${c.muted('the')} ${c.gold('walk-on')} ${c.muted('lane: drop in, get scored, leave · no signup, no audition, no league entry.')}
|
|
11
12
|
|
|
12
13
|
${c.muted('USAGE')}
|
|
13
14
|
${c.cream('commitshow')} ${c.gold('<command>')} [target] [flags] ${c.dim('# CLI is `commitshow` (no dot — npm constraint)')}
|
package/dist/lib/render.js
CHANGED
|
@@ -101,7 +101,13 @@ function asStringArray(raw, take) {
|
|
|
101
101
|
}
|
|
102
102
|
export function renderAudit(view) {
|
|
103
103
|
const { project: p, snapshot, standing } = view;
|
|
104
|
-
|
|
104
|
+
// Walk-on vs league. Walk-on = preview status (anonymous CLI · not in
|
|
105
|
+
// a season). For walk-ons, Scout (0/30) and Community (low/20) are
|
|
106
|
+
// structurally absent — not evaluated zeros — so we surface the
|
|
107
|
+
// Audit-only score normalized to /100 instead of summing pillars.
|
|
108
|
+
const isWalkOn = p.status === 'preview';
|
|
109
|
+
const walkOnTotal = Math.round(((p.score_auto ?? 0) / 50) * 100);
|
|
110
|
+
const total = isWalkOn ? walkOnTotal : (p.score_total ?? 0);
|
|
105
111
|
// Header
|
|
106
112
|
const lines = [];
|
|
107
113
|
lines.push(boxTop());
|
|
@@ -125,20 +131,35 @@ export function renderAudit(view) {
|
|
|
125
131
|
lines.push(' ' + ' '.repeat(leftPad) + c.goldDeep(row));
|
|
126
132
|
}
|
|
127
133
|
// Caption · small "/ 100 · band" · band tinted so the signal lives there.
|
|
134
|
+
// Walk-on track gets an extra middle segment so the score is read in the
|
|
135
|
+
// right context (88 walk-on ≠ 88 league).
|
|
128
136
|
const band = total >= 75 ? 'strong' : total >= 50 ? 'mid' : 'weak';
|
|
129
137
|
const bandTone = scoreTone(total);
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
138
|
+
const captionVisible = isWalkOn
|
|
139
|
+
? `/ 100 · walk-on · ${band}`
|
|
140
|
+
: `/ 100 · ${band}`;
|
|
141
|
+
const capPad = Math.floor((58 - captionVisible.length) / 2);
|
|
142
|
+
if (isWalkOn) {
|
|
143
|
+
lines.push(' ' + ' '.repeat(capPad)
|
|
144
|
+
+ c.muted('/ 100 · ') + c.gold('walk-on') + c.muted(' · ') + bandTone(band));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
lines.push(' ' + ' '.repeat(capPad) + c.muted('/ 100 · ') + bandTone(band));
|
|
148
|
+
}
|
|
134
149
|
lines.push('');
|
|
135
|
-
//
|
|
150
|
+
// Axis bars · league shows all three; walk-on shows Audit only and
|
|
151
|
+
// surfaces Scout + Community as locked-with-unlock-hint rows.
|
|
152
|
+
const lockedBar = '─ audition unlocks ─'; // exactly 20 cells · matches scoreBar width
|
|
136
153
|
const auditLine = ` Audit ${pad(`${p.score_auto}/50`, 7)} ${scoreBar(p.score_auto, 50)}`;
|
|
137
|
-
const scoutLine = ` Scout ${pad(`${p.score_forecast}/30`, 7)} ${scoreBar(p.score_forecast, 30)}`;
|
|
138
|
-
const communityLine = ` Comm. ${pad(`${p.score_community}/20`, 7)} ${scoreBar(p.score_community, 20)}`;
|
|
139
154
|
lines.push(' ' + auditLine);
|
|
140
|
-
|
|
141
|
-
|
|
155
|
+
if (isWalkOn) {
|
|
156
|
+
lines.push(' ' + ` Scout ${pad('—/30', 7)} ` + c.muted(lockedBar));
|
|
157
|
+
lines.push(' ' + ` Comm. ${pad('—/20', 7)} ` + c.muted(lockedBar));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
lines.push(' ' + ` Scout ${pad(`${p.score_forecast}/30`, 7)} ${scoreBar(p.score_forecast, 30)}`);
|
|
161
|
+
lines.push(' ' + ` Comm. ${pad(`${p.score_community}/20`, 7)} ${scoreBar(p.score_community, 20)}`);
|
|
162
|
+
}
|
|
142
163
|
lines.push('');
|
|
143
164
|
// 3 strengths + 2 concerns from scout_brief · §15-C.2 content contract.
|
|
144
165
|
// Web surfaces the full 5+3; the CLI keeps it tight for terminal screenshots.
|
|
@@ -283,6 +304,8 @@ function asObjectArray(raw, take) {
|
|
|
283
304
|
}
|
|
284
305
|
export function toAgentShape(view) {
|
|
285
306
|
const { project: p, snapshot, standing } = view;
|
|
307
|
+
const isWalkOn = p.status === 'preview';
|
|
308
|
+
const walkOnTotal = isWalkOn ? Math.round(((p.score_auto ?? 0) / 50) * 100) : null;
|
|
286
309
|
return {
|
|
287
310
|
schema_version: '1',
|
|
288
311
|
generated_at: new Date().toISOString(),
|
|
@@ -296,6 +319,7 @@ export function toAgentShape(view) {
|
|
|
296
319
|
url: `https://commit.show/projects/${p.id}`,
|
|
297
320
|
},
|
|
298
321
|
score: {
|
|
322
|
+
track: isWalkOn ? 'walk_on' : 'league',
|
|
299
323
|
total: p.score_total,
|
|
300
324
|
total_max: 100,
|
|
301
325
|
audit: p.score_auto,
|
|
@@ -306,6 +330,8 @@ export function toAgentShape(view) {
|
|
|
306
330
|
community_max: 20,
|
|
307
331
|
delta_since_last: snapshot?.score_total_delta ?? null,
|
|
308
332
|
band: bandFor(p.score_total),
|
|
333
|
+
walk_on_total: walkOnTotal,
|
|
334
|
+
walk_on_band: walkOnTotal != null ? bandFor(walkOnTotal) : null,
|
|
309
335
|
},
|
|
310
336
|
standing: standing
|
|
311
337
|
? {
|
|
@@ -483,11 +509,15 @@ function wrapText(s, width) {
|
|
|
483
509
|
}
|
|
484
510
|
export function renderUpsell() {
|
|
485
511
|
const lines = [];
|
|
486
|
-
|
|
512
|
+
// "Walk-on" — anyone running CLI without auditioning. Theatre-coherent
|
|
513
|
+
// (Audition / Audit / Stage / Backstage / Walk-on) · friendlier than
|
|
514
|
+
// "preview" (which doubles as our DB status) · positions audition as the
|
|
515
|
+
// upgrade path without making the walk-on tier feel lesser.
|
|
516
|
+
const titleVisible = 'Walk-on · drop-in audit, no audition yet';
|
|
487
517
|
const headVisible = 'Audition to unlock:';
|
|
488
518
|
const ctaVisible = '→ https://commit.show/submit';
|
|
489
519
|
lines.push(' ' + boxTop());
|
|
490
|
-
lines.push(' ' + boxRow(titleVisible.length, c.bold(c.gold('
|
|
520
|
+
lines.push(' ' + boxRow(titleVisible.length, c.bold(c.gold('Walk-on')) + c.muted(' · ') + c.cream('drop-in audit, no audition yet')));
|
|
491
521
|
lines.push(' ' + boxBlank());
|
|
492
522
|
lines.push(' ' + boxRow(headVisible.length, c.cream(headVisible)));
|
|
493
523
|
// Backstage = our brand for the prompt-extraction analysis (Phase 2 brief).
|