@viberaven/cli 0.1.0-beta.3 → 0.1.0-beta.6
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/AGENTS.md +9 -17
- package/README.md +16 -20
- package/assets/report/assets/provider-authjs.svg +5 -5
- package/assets/report/assets/provider-aws.svg +5 -5
- package/assets/report/assets/provider-logrocket.svg +4 -4
- package/assets/report/assets/viberaven-logo.png +0 -0
- package/assets/report/report-cli.css +248 -228
- package/assets/report/station.css +238 -3
- package/dist/cli.js +5507 -2337
- package/dist/cli.js.map +4 -4
- package/dist/playbooks/_stack-default.json +11 -0
- package/dist/playbooks/auth-supabase.json +31 -0
- package/dist/playbooks/stripe.json +60 -0
- package/dist/playbooks/supabase.json +51 -0
- package/dist/playbooks/vercel.json +42 -0
- package/dist/report/assets/provider-authjs.svg +5 -5
- package/dist/report/assets/provider-aws.svg +5 -5
- package/dist/report/assets/provider-logrocket.svg +4 -4
- package/dist/report/assets/viberaven-logo.png +0 -0
- package/dist/report/report-cli.css +248 -228
- package/dist/report/station.css +238 -3
- package/package.json +4 -1
- package/playbooks/_stack-default.json +11 -0
- package/playbooks/auth-supabase.json +31 -0
- package/playbooks/stripe.json +60 -0
- package/playbooks/supabase.json +51 -0
- package/playbooks/vercel.json +42 -0
- package/templates/AGENTS.snippet.md +7 -20
package/dist/report/station.css
CHANGED
|
@@ -3586,6 +3586,10 @@ html[data-surface="panel"] [data-section='file-pulse'].deck-card__body {
|
|
|
3586
3586
|
padding: 18px;
|
|
3587
3587
|
}
|
|
3588
3588
|
|
|
3589
|
+
.studio-setup-panel__inner {
|
|
3590
|
+
container-type: inline-size;
|
|
3591
|
+
}
|
|
3592
|
+
|
|
3589
3593
|
.studio-setup-panel__head {
|
|
3590
3594
|
min-width: 0;
|
|
3591
3595
|
display: flex;
|
|
@@ -3751,6 +3755,24 @@ html[data-surface="panel"] [data-section='file-pulse'].deck-card__body {
|
|
|
3751
3755
|
fill: currentColor;
|
|
3752
3756
|
}
|
|
3753
3757
|
|
|
3758
|
+
.provider-logo--cloudflare svg {
|
|
3759
|
+
width: 24px;
|
|
3760
|
+
height: 24px;
|
|
3761
|
+
transform: scale(1.12);
|
|
3762
|
+
transform-origin: center;
|
|
3763
|
+
}
|
|
3764
|
+
|
|
3765
|
+
.studio-choice-tile__icon.provider-logo--cloudflare svg {
|
|
3766
|
+
width: 26px;
|
|
3767
|
+
height: 26px;
|
|
3768
|
+
}
|
|
3769
|
+
|
|
3770
|
+
.studio-node__logo.provider-logo--cloudflare svg,
|
|
3771
|
+
.mc3-provider-tile__icon.provider-logo--cloudflare svg {
|
|
3772
|
+
width: 26px;
|
|
3773
|
+
height: 26px;
|
|
3774
|
+
}
|
|
3775
|
+
|
|
3754
3776
|
.provider-logo__img {
|
|
3755
3777
|
display: block;
|
|
3756
3778
|
box-sizing: border-box;
|
|
@@ -3883,6 +3905,23 @@ body.station-results-active .studio-node__logo:not(.provider-logo--brand) svg pa
|
|
|
3883
3905
|
cursor: default;
|
|
3884
3906
|
}
|
|
3885
3907
|
|
|
3908
|
+
@container (min-width: 430px) {
|
|
3909
|
+
.studio-choice-list {
|
|
3910
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
3911
|
+
}
|
|
3912
|
+
|
|
3913
|
+
.studio-choice-tile {
|
|
3914
|
+
min-height: 94px;
|
|
3915
|
+
align-content: start;
|
|
3916
|
+
grid-template-columns: 44px minmax(0, 1fr);
|
|
3917
|
+
grid-template-rows: auto auto 1fr;
|
|
3918
|
+
}
|
|
3919
|
+
|
|
3920
|
+
.studio-choice-tile__status {
|
|
3921
|
+
align-self: end;
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
|
|
3886
3925
|
.studio-code-preview {
|
|
3887
3926
|
min-width: 0;
|
|
3888
3927
|
max-width: 100%;
|
|
@@ -10209,12 +10248,17 @@ html[data-skin="editorial"] body.station-results-active .studio-choice-tile__ico
|
|
|
10209
10248
|
background: #fff8e8 !important;
|
|
10210
10249
|
}
|
|
10211
10250
|
|
|
10212
|
-
html[data-skin="editorial"] body.station-results-active .provider-logo--cloudflare svg
|
|
10251
|
+
html[data-skin="editorial"] body.station-results-active .provider-logo--cloudflare svg {
|
|
10252
|
+
width: 24px !important;
|
|
10253
|
+
height: 24px !important;
|
|
10254
|
+
filter: none !important;
|
|
10255
|
+
}
|
|
10256
|
+
|
|
10213
10257
|
html[data-skin="editorial"] body.station-results-active .studio-choice-tile__icon.provider-logo--cloudflare svg,
|
|
10214
10258
|
html[data-skin="editorial"] body.station-results-active .studio-node__logo.provider-logo--cloudflare svg,
|
|
10215
10259
|
.mc3-provider-tile__icon.provider-logo--cloudflare svg {
|
|
10216
|
-
width:
|
|
10217
|
-
height:
|
|
10260
|
+
width: 26px !important;
|
|
10261
|
+
height: 26px !important;
|
|
10218
10262
|
filter: none !important;
|
|
10219
10263
|
}
|
|
10220
10264
|
|
|
@@ -10336,6 +10380,160 @@ html[data-skin="editorial"] body.station-results-active .studio-node__logo.provi
|
|
|
10336
10380
|
opacity: 1 !important;
|
|
10337
10381
|
}
|
|
10338
10382
|
|
|
10383
|
+
.provider-truth {
|
|
10384
|
+
display: grid;
|
|
10385
|
+
gap: 8px;
|
|
10386
|
+
min-width: 0;
|
|
10387
|
+
box-sizing: border-box;
|
|
10388
|
+
padding: 10px;
|
|
10389
|
+
border: 1px solid rgba(17, 24, 39, 0.14);
|
|
10390
|
+
border-radius: 8px;
|
|
10391
|
+
background: #fffdf7;
|
|
10392
|
+
box-shadow: 0 12px 30px rgba(17, 24, 39, 0.055);
|
|
10393
|
+
overflow: hidden;
|
|
10394
|
+
}
|
|
10395
|
+
|
|
10396
|
+
.provider-truth__head,
|
|
10397
|
+
.provider-truth-row__top {
|
|
10398
|
+
display: grid;
|
|
10399
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
10400
|
+
gap: 8px;
|
|
10401
|
+
align-items: center;
|
|
10402
|
+
min-width: 0;
|
|
10403
|
+
}
|
|
10404
|
+
|
|
10405
|
+
.provider-truth__head strong,
|
|
10406
|
+
.provider-truth-row__top strong,
|
|
10407
|
+
.provider-truth-alert strong,
|
|
10408
|
+
.provider-truth-next-action strong {
|
|
10409
|
+
min-width: 0;
|
|
10410
|
+
color: #111827;
|
|
10411
|
+
font-size: 11px;
|
|
10412
|
+
font-weight: 950;
|
|
10413
|
+
line-height: 1.15;
|
|
10414
|
+
overflow-wrap: anywhere;
|
|
10415
|
+
}
|
|
10416
|
+
|
|
10417
|
+
.provider-truth__using-now {
|
|
10418
|
+
min-width: 0;
|
|
10419
|
+
color: #047857;
|
|
10420
|
+
font-family: var(--font-mono);
|
|
10421
|
+
font-size: 9px;
|
|
10422
|
+
font-weight: 900;
|
|
10423
|
+
line-height: 1.2;
|
|
10424
|
+
text-transform: uppercase;
|
|
10425
|
+
overflow-wrap: anywhere;
|
|
10426
|
+
}
|
|
10427
|
+
|
|
10428
|
+
.provider-truth-row {
|
|
10429
|
+
display: grid;
|
|
10430
|
+
gap: 7px;
|
|
10431
|
+
min-width: 0;
|
|
10432
|
+
padding: 8px;
|
|
10433
|
+
border: 1px solid rgba(17, 24, 39, 0.1);
|
|
10434
|
+
border-radius: 8px;
|
|
10435
|
+
background: rgba(255, 255, 255, 0.72);
|
|
10436
|
+
}
|
|
10437
|
+
|
|
10438
|
+
.provider-truth-row__meta {
|
|
10439
|
+
min-width: 0;
|
|
10440
|
+
color: rgba(17, 24, 39, 0.58);
|
|
10441
|
+
font-family: var(--font-mono);
|
|
10442
|
+
font-size: 9px;
|
|
10443
|
+
font-weight: 800;
|
|
10444
|
+
line-height: 1.2;
|
|
10445
|
+
text-align: right;
|
|
10446
|
+
text-transform: uppercase;
|
|
10447
|
+
overflow-wrap: anywhere;
|
|
10448
|
+
}
|
|
10449
|
+
|
|
10450
|
+
.provider-truth-badges {
|
|
10451
|
+
display: flex;
|
|
10452
|
+
flex-wrap: wrap;
|
|
10453
|
+
gap: 5px;
|
|
10454
|
+
min-width: 0;
|
|
10455
|
+
}
|
|
10456
|
+
|
|
10457
|
+
.provider-truth-badge {
|
|
10458
|
+
display: inline-grid;
|
|
10459
|
+
place-items: center;
|
|
10460
|
+
min-width: 0;
|
|
10461
|
+
max-width: 100%;
|
|
10462
|
+
padding: 4px 6px;
|
|
10463
|
+
border: 1px solid rgba(100, 116, 139, 0.18);
|
|
10464
|
+
border-radius: 999px;
|
|
10465
|
+
background: rgba(100, 116, 139, 0.09);
|
|
10466
|
+
color: #475569;
|
|
10467
|
+
font-size: 9px;
|
|
10468
|
+
font-weight: 950;
|
|
10469
|
+
line-height: 1;
|
|
10470
|
+
text-transform: uppercase;
|
|
10471
|
+
overflow-wrap: anywhere;
|
|
10472
|
+
}
|
|
10473
|
+
|
|
10474
|
+
.provider-truth-badge--live {
|
|
10475
|
+
border-color: rgba(22, 166, 106, 0.24);
|
|
10476
|
+
background: rgba(22, 166, 106, 0.12);
|
|
10477
|
+
color: #047857;
|
|
10478
|
+
}
|
|
10479
|
+
|
|
10480
|
+
.provider-truth-badge--mcp {
|
|
10481
|
+
border-color: rgba(2, 132, 199, 0.2);
|
|
10482
|
+
background: rgba(2, 132, 199, 0.1);
|
|
10483
|
+
color: #0369a1;
|
|
10484
|
+
}
|
|
10485
|
+
|
|
10486
|
+
.provider-truth-badge--manual {
|
|
10487
|
+
border-color: rgba(146, 64, 14, 0.22);
|
|
10488
|
+
background: rgba(245, 158, 11, 0.12);
|
|
10489
|
+
color: #92400e;
|
|
10490
|
+
}
|
|
10491
|
+
|
|
10492
|
+
.provider-truth-badge--warn {
|
|
10493
|
+
border-color: rgba(185, 28, 28, 0.2);
|
|
10494
|
+
background: rgba(255, 241, 242, 0.92);
|
|
10495
|
+
color: #b91c1c;
|
|
10496
|
+
}
|
|
10497
|
+
|
|
10498
|
+
.provider-truth-badge--repo,
|
|
10499
|
+
.provider-truth-badge--using {
|
|
10500
|
+
border-color: rgba(17, 24, 39, 0.18);
|
|
10501
|
+
background: rgba(17, 24, 39, 0.07);
|
|
10502
|
+
color: #111827;
|
|
10503
|
+
}
|
|
10504
|
+
|
|
10505
|
+
.provider-truth-alert,
|
|
10506
|
+
.provider-truth-next-action {
|
|
10507
|
+
display: grid;
|
|
10508
|
+
gap: 4px;
|
|
10509
|
+
min-width: 0;
|
|
10510
|
+
padding: 8px;
|
|
10511
|
+
border-radius: 8px;
|
|
10512
|
+
overflow-wrap: anywhere;
|
|
10513
|
+
}
|
|
10514
|
+
|
|
10515
|
+
.provider-truth-alert {
|
|
10516
|
+
border: 1px solid rgba(185, 28, 28, 0.18);
|
|
10517
|
+
border-left: 4px solid #b91c1c;
|
|
10518
|
+
background: rgba(255, 241, 242, 0.92);
|
|
10519
|
+
}
|
|
10520
|
+
|
|
10521
|
+
.provider-truth-next-action {
|
|
10522
|
+
border: 1px solid rgba(17, 24, 39, 0.14);
|
|
10523
|
+
border-left: 4px solid #111827;
|
|
10524
|
+
background: rgba(255, 248, 232, 0.72);
|
|
10525
|
+
}
|
|
10526
|
+
|
|
10527
|
+
.provider-truth-alert span,
|
|
10528
|
+
.provider-truth-next-action span {
|
|
10529
|
+
min-width: 0;
|
|
10530
|
+
color: rgba(17, 24, 39, 0.66);
|
|
10531
|
+
font-size: 11px;
|
|
10532
|
+
font-weight: 760;
|
|
10533
|
+
line-height: 1.35;
|
|
10534
|
+
overflow-wrap: anywhere;
|
|
10535
|
+
}
|
|
10536
|
+
|
|
10339
10537
|
.studio-sidebar-contract {
|
|
10340
10538
|
display: grid;
|
|
10341
10539
|
gap: 11px;
|
|
@@ -10736,6 +10934,43 @@ html[data-skin="editorial"] body.station-results-active .studio-node__logo.provi
|
|
|
10736
10934
|
text-transform: uppercase;
|
|
10737
10935
|
}
|
|
10738
10936
|
|
|
10937
|
+
.studio-sidebar-contract__generic-evidence {
|
|
10938
|
+
display: grid;
|
|
10939
|
+
gap: 8px;
|
|
10940
|
+
min-width: 0;
|
|
10941
|
+
padding: 10px;
|
|
10942
|
+
border: 1px solid rgba(17, 24, 39, 0.12);
|
|
10943
|
+
border-radius: 8px;
|
|
10944
|
+
background: rgba(255, 255, 255, 0.76);
|
|
10945
|
+
}
|
|
10946
|
+
|
|
10947
|
+
.studio-sidebar-contract__generic-evidence h4 {
|
|
10948
|
+
margin: 0;
|
|
10949
|
+
color: #111827;
|
|
10950
|
+
font-size: 12px;
|
|
10951
|
+
font-weight: 950;
|
|
10952
|
+
line-height: 1.15;
|
|
10953
|
+
}
|
|
10954
|
+
|
|
10955
|
+
.studio-sidebar-contract__generic-evidence p {
|
|
10956
|
+
margin: 0;
|
|
10957
|
+
color: rgba(17, 24, 39, 0.66);
|
|
10958
|
+
font-size: 11px;
|
|
10959
|
+
font-weight: 700;
|
|
10960
|
+
line-height: 1.35;
|
|
10961
|
+
}
|
|
10962
|
+
|
|
10963
|
+
.studio-sidebar-contract__generic-evidence ul {
|
|
10964
|
+
display: grid;
|
|
10965
|
+
gap: 6px;
|
|
10966
|
+
margin: 0;
|
|
10967
|
+
padding: 0 0 0 14px;
|
|
10968
|
+
color: #111827;
|
|
10969
|
+
font-size: 11px;
|
|
10970
|
+
font-weight: 800;
|
|
10971
|
+
line-height: 1.25;
|
|
10972
|
+
}
|
|
10973
|
+
|
|
10739
10974
|
.studio-sidebar-contract__next-action,
|
|
10740
10975
|
.studio-sidebar-contract__heading,
|
|
10741
10976
|
.studio-sidebar-contract__item {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viberaven/cli",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.6",
|
|
4
4
|
"description": "VibeRaven launch readiness for Claude Code, Codex, and terminal agents — scan, map, and agent-ready prompts.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "VibeRaven",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"files": [
|
|
33
33
|
"dist",
|
|
34
|
+
"playbooks",
|
|
34
35
|
"assets/report",
|
|
35
36
|
"AGENTS.md",
|
|
36
37
|
"SECURITY.md",
|
|
@@ -55,7 +56,9 @@
|
|
|
55
56
|
"picocolors": "^1.1.1"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
59
|
+
"@types/node": "^25.9.2",
|
|
58
60
|
"esbuild": "^0.25.0",
|
|
61
|
+
"jsdom": "^29.1.1",
|
|
59
62
|
"typescript": "^5.8.0",
|
|
60
63
|
"vitest": "^3.2.0"
|
|
61
64
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "stack-default",
|
|
3
|
+
"recommendation": {
|
|
4
|
+
"frontend": "react",
|
|
5
|
+
"ui": "tailwind + shadcn/ui",
|
|
6
|
+
"database": "supabase",
|
|
7
|
+
"auth": "supabase",
|
|
8
|
+
"deploy": "vercel",
|
|
9
|
+
"reason": "Highest agent training density; lowest friction for autonomous deploy loop"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "auth-supabase",
|
|
3
|
+
"provider": "auth-supabase",
|
|
4
|
+
"title": "Supabase Auth providers",
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"id": "auth-providers",
|
|
8
|
+
"title": "Enable providers",
|
|
9
|
+
"instruction": "Enable Email and any OAuth providers your app uses (Google, GitHub, etc.).",
|
|
10
|
+
"openUrl": "https://supabase.com/dashboard/project/_/auth/providers"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "auth-urls",
|
|
14
|
+
"title": "Redirect URLs",
|
|
15
|
+
"instruction": "Site URL and Redirect URLs must include your Vercel deployment URL.",
|
|
16
|
+
"openUrl": "https://supabase.com/dashboard/project/_/auth/url-configuration"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "auth-email-templates",
|
|
20
|
+
"title": "Email templates",
|
|
21
|
+
"instruction": "Customize confirm signup and magic link templates if your app uses email auth.",
|
|
22
|
+
"openUrl": "https://supabase.com/dashboard/project/_/auth/templates"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "auth-jwt",
|
|
26
|
+
"title": "JWT settings",
|
|
27
|
+
"instruction": "Confirm JWT expiry matches your session strategy. Use service role key only on the server.",
|
|
28
|
+
"openUrl": "https://supabase.com/dashboard/project/_/settings/api"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "stripe-launch",
|
|
3
|
+
"provider": "stripe",
|
|
4
|
+
"title": "Configure Stripe billing",
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"id": "stripe-dashboard",
|
|
8
|
+
"title": "Stripe dashboard",
|
|
9
|
+
"instruction": "Open Stripe. For development, turn Test mode ON.",
|
|
10
|
+
"openUrl": "https://dashboard.stripe.com/"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "stripe-keys",
|
|
14
|
+
"title": "API keys",
|
|
15
|
+
"instruction": "Copy test (or live) keys into .env. Never commit secret keys.",
|
|
16
|
+
"openUrl": "https://dashboard.stripe.com/test/apikeys",
|
|
17
|
+
"pasteTarget": {
|
|
18
|
+
"file": ".env",
|
|
19
|
+
"keys": ["STRIPE_SECRET_KEY", "NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY"]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "stripe-product",
|
|
24
|
+
"title": "Product and price",
|
|
25
|
+
"instruction": "Create a product with a recurring price for your Pro or paid tier.",
|
|
26
|
+
"openUrl": "https://dashboard.stripe.com/test/products"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "stripe-price-id",
|
|
30
|
+
"title": "Price ID",
|
|
31
|
+
"instruction": "Copy the Price ID (price_...) into .env as STRIPE_PRICE_ID."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "stripe-webhook",
|
|
35
|
+
"title": "Webhook endpoint",
|
|
36
|
+
"instruction": "Add endpoint URL: {APP_URL}/api/webhooks/stripe (replace {APP_URL} with your Vercel URL).",
|
|
37
|
+
"openUrl": "https://dashboard.stripe.com/test/webhooks"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "stripe-webhook-events",
|
|
41
|
+
"title": "Webhook events",
|
|
42
|
+
"instruction": "Subscribe to these events at minimum.",
|
|
43
|
+
"events": [
|
|
44
|
+
"checkout.session.completed",
|
|
45
|
+
"customer.subscription.updated",
|
|
46
|
+
"customer.subscription.deleted",
|
|
47
|
+
"invoice.payment_failed"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "stripe-signing-secret",
|
|
52
|
+
"title": "Signing secret",
|
|
53
|
+
"instruction": "Copy the webhook signing secret into .env as STRIPE_WEBHOOK_SECRET.",
|
|
54
|
+
"pasteTarget": {
|
|
55
|
+
"file": ".env",
|
|
56
|
+
"keys": ["STRIPE_WEBHOOK_SECRET"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "supabase-launch",
|
|
3
|
+
"provider": "supabase",
|
|
4
|
+
"title": "Configure Supabase",
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"id": "supabase-project",
|
|
8
|
+
"title": "Open Supabase dashboard",
|
|
9
|
+
"instruction": "Create a project or open your existing Supabase project.",
|
|
10
|
+
"openUrl": "https://supabase.com/dashboard"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "supabase-api-keys",
|
|
14
|
+
"title": "API keys",
|
|
15
|
+
"instruction": "Copy Project URL and anon/public key into .env.",
|
|
16
|
+
"openUrl": "https://supabase.com/dashboard/project/_/settings/api",
|
|
17
|
+
"pasteTarget": {
|
|
18
|
+
"file": ".env",
|
|
19
|
+
"keys": ["NEXT_PUBLIC_SUPABASE_URL", "NEXT_PUBLIC_SUPABASE_ANON_KEY"]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "supabase-db-url",
|
|
24
|
+
"title": "Database connection",
|
|
25
|
+
"instruction": "Copy the connection string (use pooler for serverless). Server-side only — never expose in client code.",
|
|
26
|
+
"openUrl": "https://supabase.com/dashboard/project/_/settings/database",
|
|
27
|
+
"pasteTarget": {
|
|
28
|
+
"file": ".env",
|
|
29
|
+
"keys": ["DATABASE_URL"]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "supabase-auth-urls",
|
|
34
|
+
"title": "Auth URL configuration",
|
|
35
|
+
"instruction": "Set Site URL to your Vercel preview or production URL. Add the same URL to Redirect URLs with /** wildcard.",
|
|
36
|
+
"openUrl": "https://supabase.com/dashboard/project/_/auth/url-configuration"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "supabase-rls",
|
|
40
|
+
"title": "Row Level Security",
|
|
41
|
+
"instruction": "Enable RLS on tables that hold user data. Add policies for authenticated users.",
|
|
42
|
+
"openUrl": "https://supabase.com/dashboard/project/_/auth/policies"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "supabase-migrate",
|
|
46
|
+
"title": "Apply migrations",
|
|
47
|
+
"instruction": "Run supabase db push or apply SQL migrations so production schema matches the repo.",
|
|
48
|
+
"openUrl": "https://supabase.com/docs/guides/cli"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vercel-launch",
|
|
3
|
+
"provider": "vercel",
|
|
4
|
+
"title": "Deploy on Vercel",
|
|
5
|
+
"steps": [
|
|
6
|
+
{
|
|
7
|
+
"id": "vercel-signup",
|
|
8
|
+
"title": "Sign in to Vercel",
|
|
9
|
+
"instruction": "Create or sign in to your Vercel account.",
|
|
10
|
+
"openUrl": "https://vercel.com/signup"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "vercel-import",
|
|
14
|
+
"title": "Import repository",
|
|
15
|
+
"instruction": "Import your Git repository. Connect GitHub or GitLab if prompted.",
|
|
16
|
+
"openUrl": "https://vercel.com/new"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "vercel-env",
|
|
20
|
+
"title": "Environment variables",
|
|
21
|
+
"instruction": "Project → Settings → Environment Variables. Add every key from .env.example for Production and Preview.",
|
|
22
|
+
"openUrl": "https://vercel.com/docs/projects/environment-variables"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "vercel-deploy",
|
|
26
|
+
"title": "Deploy",
|
|
27
|
+
"instruction": "Push to your production branch or click Redeploy in the Vercel dashboard.",
|
|
28
|
+
"openUrl": "https://vercel.com/docs/deployments"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "vercel-preview",
|
|
32
|
+
"title": "Copy live URL",
|
|
33
|
+
"instruction": "Copy the Production or Preview URL from Vercel. Set NEXT_PUBLIC_APP_URL (or your app's public URL env) in .env and Vercel env settings."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"id": "vercel-domains",
|
|
37
|
+
"title": "Custom domain (optional)",
|
|
38
|
+
"instruction": "Add a custom domain when you are ready for production traffic.",
|
|
39
|
+
"openUrl": "https://vercel.com/docs/projects/domains"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -15,17 +15,18 @@ When the user asks if their AI-built app is production-ready, launch-ready, or w
|
|
|
15
15
|
|
|
16
16
|
1. If not signed in: `npx -y @viberaven/cli@beta login` (browser device approval, once)
|
|
17
17
|
2. `npx -y @viberaven/cli@beta scan` — agents do not need `--open`
|
|
18
|
-
3. Read `.viberaven/agent-summary.md`
|
|
19
|
-
4. `npx -y @viberaven/cli@beta
|
|
20
|
-
5.
|
|
21
|
-
6.
|
|
18
|
+
3. Read `.viberaven/agent-summary.md` and `.viberaven/launch-playbook.md`
|
|
19
|
+
4. `npx -y @viberaven/cli@beta next --json` — one action at a time
|
|
20
|
+
5. If type=repo-fix: implement, then `viberaven report` (free) or `scan` (uses quota)
|
|
21
|
+
6. If type=provider-guide: `viberaven guide <provider> --step N` and `viberaven open <provider>`
|
|
22
|
+
7. Repeat 4–6 until done; `viberaven status --json` before each new scan
|
|
22
23
|
|
|
23
24
|
Also available:
|
|
24
25
|
|
|
25
26
|
- `.viberaven/last-scan.json` — full mission map + gaps
|
|
26
27
|
- `.viberaven/report.html` — visual map for the user (use `scan --open` when the user wants the browser map)
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
Free plan: 2 lifetime scans, 6/12 mission map lanes. Pro: 50 scans/month, all 12 lanes.
|
|
29
30
|
|
|
30
31
|
If scan output says `LOGIN_REQUIRED`, stop and ask the user to complete:
|
|
31
32
|
|
|
@@ -33,21 +34,7 @@ If scan output says `LOGIN_REQUIRED`, stop and ask the user to complete:
|
|
|
33
34
|
npx -y @viberaven/cli@beta login
|
|
34
35
|
```
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx -y @viberaven/cli@beta scan
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Stable scan labels:
|
|
43
|
-
|
|
44
|
-
- `READY` — scan finished; read `.viberaven/agent-summary.md` before changing code.
|
|
45
|
-
- `LOGIN_REQUIRED` — stop and ask the user to complete login.
|
|
46
|
-
- `UPGRADE_REQUIRED` — stop; the user must upgrade or wait for quota reset.
|
|
47
|
-
- `MANUAL_ACTION_REQUIRED` — provider dashboard, billing, DNS, webhook, MCP, or live verification needs user/provider action.
|
|
48
|
-
- `ERROR` — report the error and retry only when the cause is clear.
|
|
49
|
-
|
|
50
|
-
Run `viberaven prompt` or `viberaven prompt --gap <id>` for repo-code fixes.
|
|
37
|
+
Run `viberaven prompt` or `viberaven prompt --gap <id>` for repo-code fixes.
|
|
51
38
|
|
|
52
39
|
Do not claim human-provider actions as repo-code fixes. Human-provider actions include dashboard setup, billing/product configuration, DNS, webhooks, provider credentials, quota upgrades, and read-only MCP/provider-live verification.
|
|
53
40
|
|