@vibecheck-ai/mcp 25.0.0 → 26.0.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/dist/analytics-P4AUZXCQ.js +36 -0
- package/dist/{chokidar-CI5VJY5M.js → chokidar-UOK5UIOF.js} +4 -4
- package/dist/{chunk-WUHPSW7M.js → chunk-PXXM6OHD.js} +232 -269
- package/dist/{dist-Y2Z46SBD.js → dist-ZTADJLYH.js} +1 -1
- package/dist/index.js +552 -277
- package/dist/version-gate-DWV5M7WC.js +80 -0
- package/package.json +19 -8
|
@@ -27,11 +27,11 @@ dirname(__filename$1);
|
|
|
27
27
|
// ../engines/dist/index.js
|
|
28
28
|
var import_typescript = __toESM(require_typescript(), 1);
|
|
29
29
|
|
|
30
|
-
// ../subscriptions/dist/chunk-
|
|
31
|
-
var PLAN_IDS = ["
|
|
30
|
+
// ../subscriptions/dist/chunk-TEQPNVO7.js
|
|
31
|
+
var PLAN_IDS = ["vibecoder", "engineer", "enterprise"];
|
|
32
32
|
var PLAN_RANK = {
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
vibecoder: 0,
|
|
34
|
+
engineer: 1,
|
|
35
35
|
enterprise: 2
|
|
36
36
|
};
|
|
37
37
|
var PLAN_ID_SET = new Set(PLAN_IDS);
|
|
@@ -39,20 +39,19 @@ function isCanonicalPlanId(value) {
|
|
|
39
39
|
return typeof value === "string" && PLAN_ID_SET.has(value);
|
|
40
40
|
}
|
|
41
41
|
var PLAN_NORMALIZATION_ALIASES = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
engineer: "
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
starter: "pro",
|
|
42
|
+
// v40 canonical slugs (round-trip safe)
|
|
43
|
+
vibecoder: "vibecoder",
|
|
44
|
+
engineer: "engineer",
|
|
45
|
+
// Pre-v40 slugs → v40 equivalents
|
|
46
|
+
pro: "vibecoder",
|
|
47
|
+
team: "engineer",
|
|
48
|
+
developer: "vibecoder",
|
|
49
|
+
vibe_coder: "vibecoder",
|
|
50
|
+
"vibe-coder": "vibecoder",
|
|
51
|
+
"vibe coder": "vibecoder",
|
|
53
52
|
compliance: "enterprise",
|
|
54
|
-
business: "
|
|
55
|
-
team_workspace: "
|
|
53
|
+
business: "engineer",
|
|
54
|
+
team_workspace: "engineer",
|
|
56
55
|
enterprise_annual: "enterprise",
|
|
57
56
|
enterprise_monthly: "enterprise",
|
|
58
57
|
elite: "enterprise"
|
|
@@ -99,74 +98,64 @@ if (typeof process !== "undefined") {
|
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
var PLAN_DEFINITIONS = {
|
|
102
|
-
|
|
103
|
-
displayName: "
|
|
104
|
-
tagline: "
|
|
105
|
-
monthlyPriceUsd:
|
|
106
|
-
priceLabel: "$
|
|
101
|
+
vibecoder: {
|
|
102
|
+
displayName: "Vibecoder",
|
|
103
|
+
tagline: "Extension + CLI access. The fast lane.",
|
|
104
|
+
monthlyPriceUsd: 19.99,
|
|
105
|
+
priceLabel: "$19.99/mo",
|
|
107
106
|
billingInterval: "month",
|
|
108
|
-
badgeToken: "tier-
|
|
107
|
+
badgeToken: "tier-vibecoder",
|
|
109
108
|
highlights: [
|
|
110
|
-
"
|
|
111
|
-
"All findings
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"GitHub Action + CI block + SARIF export",
|
|
117
|
-
"90-day history \xB7 10 projects",
|
|
118
|
-
"7-day free trial"
|
|
109
|
+
"VS Code extension + CLI access",
|
|
110
|
+
"All scans, findings, and proof details",
|
|
111
|
+
"Auto-fix, Reality Mode, and CommitShield",
|
|
112
|
+
"Context Engine, ISL Studio, and firewall enforcement",
|
|
113
|
+
"Reports, truthpacks, badges, and cloud sync",
|
|
114
|
+
"GitHub Action checks for individual workflows"
|
|
119
115
|
],
|
|
120
|
-
bestFor: "
|
|
121
|
-
popular:
|
|
122
|
-
cta: "Start
|
|
116
|
+
bestFor: "Developers who want the full VibeCheck toolkit",
|
|
117
|
+
popular: false,
|
|
118
|
+
cta: "Start Vibecoder",
|
|
123
119
|
ctaVariant: "default",
|
|
124
120
|
supportLevel: "standard"
|
|
125
121
|
},
|
|
126
|
-
|
|
127
|
-
displayName: "
|
|
128
|
-
tagline: "
|
|
129
|
-
monthlyPriceUsd:
|
|
130
|
-
priceLabel: "$
|
|
122
|
+
engineer: {
|
|
123
|
+
displayName: "Engineer",
|
|
124
|
+
tagline: "Everything in Vibecoder, plus the engineering dashboard.",
|
|
125
|
+
monthlyPriceUsd: 59.99,
|
|
126
|
+
priceLabel: "$59.99/mo",
|
|
131
127
|
billingInterval: "month",
|
|
132
|
-
badgeToken: "tier-
|
|
128
|
+
badgeToken: "tier-engineer",
|
|
133
129
|
highlights: [
|
|
134
|
-
"Everything in
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"Full Context Engine + ISL Studio + Chaos Agent",
|
|
139
|
-
"Team dashboard \xB7 3 seats included \xB7 $9/extra seat",
|
|
140
|
-
"API access (1k req/day) \xB7 CSV export",
|
|
141
|
-
"Cloud sync \xB7 50 projects"
|
|
130
|
+
"Everything in Vibecoder, plus:",
|
|
131
|
+
"Engineering dashboard (scans, missions, billing, settings)",
|
|
132
|
+
"GitHub CI/CD ShipGate runs with SHIP / NO SHIP history",
|
|
133
|
+
"Org-wide analytics from CLI, MCP, VS Code, and extension activity"
|
|
142
134
|
],
|
|
143
|
-
bestFor: "
|
|
135
|
+
bestFor: "Engineers who need the full dashboard and analytics",
|
|
144
136
|
popular: false,
|
|
145
|
-
cta: "Start
|
|
137
|
+
cta: "Start Engineer",
|
|
146
138
|
ctaVariant: "default",
|
|
147
139
|
supportLevel: "priority"
|
|
148
140
|
},
|
|
149
141
|
enterprise: {
|
|
150
|
-
displayName: "
|
|
151
|
-
tagline: "
|
|
152
|
-
monthlyPriceUsd:
|
|
153
|
-
priceLabel: "
|
|
142
|
+
displayName: "Enterprise",
|
|
143
|
+
tagline: "Custom seats, SSO, audit. Talk to us.",
|
|
144
|
+
monthlyPriceUsd: 0,
|
|
145
|
+
priceLabel: "Contact sales",
|
|
154
146
|
billingInterval: "month",
|
|
155
147
|
badgeToken: "tier-enterprise",
|
|
156
148
|
highlights: [
|
|
157
|
-
"Everything in
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"10 seats \xB7 unlimited projects \xB7 API 10k req/day",
|
|
163
|
-
"Custom domains + advanced webhooks",
|
|
164
|
-
"Slack integration \xB7 dedicated support"
|
|
149
|
+
"Everything in Engineer, plus:",
|
|
150
|
+
"Custom seats and RBAC",
|
|
151
|
+
"SSO / SAML",
|
|
152
|
+
"Audit logs and compliance bundles",
|
|
153
|
+
"Dedicated support and SLA"
|
|
165
154
|
],
|
|
166
|
-
bestFor: "Orgs with compliance and
|
|
155
|
+
bestFor: "Orgs with compliance, governance, and SSO needs",
|
|
167
156
|
popular: false,
|
|
168
|
-
cta: "
|
|
169
|
-
ctaVariant: "
|
|
157
|
+
cta: "Contact sales",
|
|
158
|
+
ctaVariant: "outline",
|
|
170
159
|
supportLevel: "dedicated"
|
|
171
160
|
}
|
|
172
161
|
};
|
|
@@ -190,7 +179,7 @@ var PLAN_MONTHLY_PRICE_USD = mapPlanValues(
|
|
|
190
179
|
var PLAN_PRICE_LABELS = mapPlanValues((plan) => plan.priceLabel);
|
|
191
180
|
var PLAN_BADGE_TOKENS = mapPlanValues((plan) => plan.badgeToken);
|
|
192
181
|
var PLANS_ORDERED = PLAN_IDS.map((id) => PLANS[id]);
|
|
193
|
-
var MARKETING_PLAN_IDS =
|
|
182
|
+
var MARKETING_PLAN_IDS = ["vibecoder", "engineer"];
|
|
194
183
|
function validatePlanRegistry() {
|
|
195
184
|
const errors = [];
|
|
196
185
|
if (new Set(PLAN_IDS).size !== PLAN_IDS.length) {
|
|
@@ -268,8 +257,8 @@ if (typeof process !== "undefined") {
|
|
|
268
257
|
}
|
|
269
258
|
}
|
|
270
259
|
var ENTITLEMENTS = {
|
|
271
|
-
// ──
|
|
272
|
-
/** Basic scanning
|
|
260
|
+
// ── PAID PRODUCT ────────────────────────────────────────────────────────
|
|
261
|
+
/** Basic scanning */
|
|
273
262
|
SCAN: "v2.scan",
|
|
274
263
|
/** Workspace-level scanning (doctor, roast, score, codegraph, wikicode, atlas) */
|
|
275
264
|
SCAN_WORKSPACE: "v2.scan_workspace",
|
|
@@ -304,8 +293,8 @@ var ENTITLEMENTS = {
|
|
|
304
293
|
SUPPORT: "v2.support",
|
|
305
294
|
/** Premium full-stack templates (SaaS dashboards, e-commerce, chat, etc.) in the new-project wizard. */
|
|
306
295
|
PREMIUM_TEMPLATES: "v2.premium_templates",
|
|
307
|
-
// ──
|
|
308
|
-
/**
|
|
296
|
+
// ── ENTERPRISE DASHBOARD ────────────────────────────────────────────────
|
|
297
|
+
/** Enterprise dashboard, shared policies, cross-repo scanning, audit logs */
|
|
309
298
|
TEAM_COLLABORATION: "v2.team_collaboration",
|
|
310
299
|
/**
|
|
311
300
|
* Truthpack-integrated wizard — scans the existing codebase and pre-fills
|
|
@@ -322,7 +311,7 @@ var ENTITLEMENTS = {
|
|
|
322
311
|
ENTERPRISE_COMPLIANCE: "v2.enterprise_compliance"
|
|
323
312
|
};
|
|
324
313
|
var EMPTY_ENTITLEMENT_SET = /* @__PURE__ */ new Set();
|
|
325
|
-
var
|
|
314
|
+
var VIBECODER_SET = /* @__PURE__ */ new Set([
|
|
326
315
|
ENTITLEMENTS.SCAN,
|
|
327
316
|
ENTITLEMENTS.SCAN_WORKSPACE,
|
|
328
317
|
ENTITLEMENTS.GITHUB_ACTION,
|
|
@@ -341,19 +330,17 @@ var PRO_SET = /* @__PURE__ */ new Set([
|
|
|
341
330
|
ENTITLEMENTS.SUPPORT,
|
|
342
331
|
ENTITLEMENTS.PREMIUM_TEMPLATES
|
|
343
332
|
]);
|
|
344
|
-
var
|
|
345
|
-
...PRO_SET,
|
|
346
|
-
ENTITLEMENTS.TEAM_COLLABORATION,
|
|
347
|
-
ENTITLEMENTS.CONTEXT_ENGINE_PRO
|
|
348
|
-
]);
|
|
333
|
+
var ENGINEER_SET = /* @__PURE__ */ new Set([...VIBECODER_SET]);
|
|
349
334
|
var ENTERPRISE_SET = /* @__PURE__ */ new Set([
|
|
350
|
-
...
|
|
335
|
+
...ENGINEER_SET,
|
|
336
|
+
ENTITLEMENTS.TEAM_COLLABORATION,
|
|
337
|
+
ENTITLEMENTS.CONTEXT_ENGINE_PRO,
|
|
351
338
|
ENTITLEMENTS.FIREWALL_LOCKDOWN,
|
|
352
339
|
ENTITLEMENTS.ENTERPRISE_COMPLIANCE
|
|
353
340
|
]);
|
|
354
341
|
var PLAN_ENTITLEMENTS = {
|
|
355
|
-
|
|
356
|
-
|
|
342
|
+
vibecoder: VIBECODER_SET,
|
|
343
|
+
engineer: ENGINEER_SET,
|
|
357
344
|
enterprise: ENTERPRISE_SET
|
|
358
345
|
};
|
|
359
346
|
function normalizePlanForEntitlement(plan) {
|
|
@@ -472,42 +459,40 @@ var ZERO_QUOTAS = {
|
|
|
472
459
|
seatOverageEnabled: false
|
|
473
460
|
};
|
|
474
461
|
var PLAN_QUOTAS = {
|
|
475
|
-
|
|
462
|
+
vibecoder: {
|
|
476
463
|
findingDetailLimit: Infinity,
|
|
477
464
|
canAutoFix: true,
|
|
478
|
-
canHealPR:
|
|
465
|
+
canHealPR: true,
|
|
479
466
|
canModelFingerprint: true,
|
|
480
467
|
canRealityMode: true,
|
|
481
468
|
canISLGenerate: true,
|
|
482
469
|
canCIBlock: true,
|
|
483
470
|
scanHistoryDays: 90,
|
|
484
|
-
maxProjects:
|
|
485
|
-
apiRequestsPerDay:
|
|
486
|
-
canExportCSV:
|
|
487
|
-
canSlackIntegration:
|
|
471
|
+
maxProjects: Infinity,
|
|
472
|
+
apiRequestsPerDay: 1e4,
|
|
473
|
+
canExportCSV: true,
|
|
474
|
+
canSlackIntegration: true,
|
|
488
475
|
maxSeats: 1,
|
|
489
|
-
autoFixesPerMonth:
|
|
476
|
+
autoFixesPerMonth: Infinity,
|
|
490
477
|
scansPerMonth: Infinity,
|
|
491
478
|
scansPerDay: Infinity,
|
|
492
|
-
vibePromptGenerationsPerMonth:
|
|
493
|
-
workflowCopiesPerMonth:
|
|
494
|
-
forgeGenerationsPerMonth:
|
|
495
|
-
realityModeRunsPerWeek:
|
|
496
|
-
contextEngineRulesPerMonth:
|
|
497
|
-
islSpecsPerMonth:
|
|
498
|
-
atlasViewsPerMonth:
|
|
499
|
-
guidedRoutesPerDay:
|
|
500
|
-
guidedFollowUpsPerRoute:
|
|
501
|
-
proofHistoryEntries:
|
|
502
|
-
firewallRulesActive:
|
|
503
|
-
// 3 rules armed — routes / env / packages
|
|
479
|
+
vibePromptGenerationsPerMonth: Infinity,
|
|
480
|
+
workflowCopiesPerMonth: Infinity,
|
|
481
|
+
forgeGenerationsPerMonth: Infinity,
|
|
482
|
+
realityModeRunsPerWeek: Infinity,
|
|
483
|
+
contextEngineRulesPerMonth: Infinity,
|
|
484
|
+
islSpecsPerMonth: Infinity,
|
|
485
|
+
atlasViewsPerMonth: Infinity,
|
|
486
|
+
guidedRoutesPerDay: Infinity,
|
|
487
|
+
guidedFollowUpsPerRoute: Infinity,
|
|
488
|
+
proofHistoryEntries: Infinity,
|
|
489
|
+
firewallRulesActive: Infinity,
|
|
504
490
|
missionRunsLifetime: Infinity,
|
|
505
|
-
autoFixOverageEnabled:
|
|
506
|
-
// $0.50/fix beyond 50/mo via Stripe metered
|
|
491
|
+
autoFixOverageEnabled: false,
|
|
507
492
|
seatOverageEnabled: false
|
|
508
493
|
// solo plan
|
|
509
494
|
},
|
|
510
|
-
|
|
495
|
+
engineer: {
|
|
511
496
|
findingDetailLimit: Infinity,
|
|
512
497
|
canAutoFix: true,
|
|
513
498
|
canHealPR: true,
|
|
@@ -516,31 +501,29 @@ var PLAN_QUOTAS = {
|
|
|
516
501
|
canISLGenerate: true,
|
|
517
502
|
canCIBlock: true,
|
|
518
503
|
scanHistoryDays: 90,
|
|
519
|
-
maxProjects:
|
|
520
|
-
apiRequestsPerDay:
|
|
504
|
+
maxProjects: Infinity,
|
|
505
|
+
apiRequestsPerDay: 1e4,
|
|
521
506
|
canExportCSV: true,
|
|
522
|
-
canSlackIntegration:
|
|
523
|
-
maxSeats:
|
|
524
|
-
autoFixesPerMonth:
|
|
507
|
+
canSlackIntegration: true,
|
|
508
|
+
maxSeats: 1,
|
|
509
|
+
autoFixesPerMonth: Infinity,
|
|
525
510
|
scansPerMonth: Infinity,
|
|
526
511
|
scansPerDay: Infinity,
|
|
527
|
-
vibePromptGenerationsPerMonth:
|
|
528
|
-
workflowCopiesPerMonth:
|
|
529
|
-
forgeGenerationsPerMonth:
|
|
530
|
-
realityModeRunsPerWeek:
|
|
531
|
-
contextEngineRulesPerMonth:
|
|
532
|
-
islSpecsPerMonth:
|
|
533
|
-
atlasViewsPerMonth:
|
|
534
|
-
guidedRoutesPerDay:
|
|
535
|
-
guidedFollowUpsPerRoute:
|
|
536
|
-
proofHistoryEntries:
|
|
512
|
+
vibePromptGenerationsPerMonth: Infinity,
|
|
513
|
+
workflowCopiesPerMonth: Infinity,
|
|
514
|
+
forgeGenerationsPerMonth: Infinity,
|
|
515
|
+
realityModeRunsPerWeek: Infinity,
|
|
516
|
+
contextEngineRulesPerMonth: Infinity,
|
|
517
|
+
islSpecsPerMonth: Infinity,
|
|
518
|
+
atlasViewsPerMonth: Infinity,
|
|
519
|
+
guidedRoutesPerDay: Infinity,
|
|
520
|
+
guidedFollowUpsPerRoute: Infinity,
|
|
521
|
+
proofHistoryEntries: Infinity,
|
|
537
522
|
firewallRulesActive: Infinity,
|
|
538
523
|
// unlimited rules + Drift Watcher
|
|
539
524
|
missionRunsLifetime: Infinity,
|
|
540
|
-
autoFixOverageEnabled:
|
|
541
|
-
|
|
542
|
-
seatOverageEnabled: true
|
|
543
|
-
// $9/seat over 3 via Stripe per-seat price
|
|
525
|
+
autoFixOverageEnabled: false,
|
|
526
|
+
seatOverageEnabled: false
|
|
544
527
|
},
|
|
545
528
|
enterprise: {
|
|
546
529
|
findingDetailLimit: Infinity,
|
|
@@ -591,7 +574,7 @@ var FEATURE_REGISTRY = {
|
|
|
591
574
|
title: "Unlimited Auto-Fix",
|
|
592
575
|
subtitle: "AI-powered code repair without limits",
|
|
593
576
|
benefits: ["No monthly limits", "Smart suggestions", "Safe rollback"],
|
|
594
|
-
requiredPlan: "
|
|
577
|
+
requiredPlan: "vibecoder",
|
|
595
578
|
category: "productivity",
|
|
596
579
|
upgradeMessage: "Auto-Fix requires Pro. Upgrade to unlock AI-powered code repair."
|
|
597
580
|
},
|
|
@@ -600,7 +583,7 @@ var FEATURE_REGISTRY = {
|
|
|
600
583
|
title: "Reality Mode",
|
|
601
584
|
subtitle: "Browser-based runtime verification",
|
|
602
585
|
benefits: ["Runtime testing", "Screenshot evidence", "Error detection", "Network validation"],
|
|
603
|
-
requiredPlan: "
|
|
586
|
+
requiredPlan: "vibecoder",
|
|
604
587
|
category: "productivity",
|
|
605
588
|
upgradeMessage: "Reality Mode requires Pro. Upgrade to unlock runtime verification.",
|
|
606
589
|
docsUrl: "/docs/reality-mode"
|
|
@@ -610,7 +593,7 @@ var FEATURE_REGISTRY = {
|
|
|
610
593
|
title: "CommitShield",
|
|
611
594
|
subtitle: "Pre-commit quality gate",
|
|
612
595
|
benefits: ["25+ security rules", "Risk scoring", "Evidence bundles"],
|
|
613
|
-
requiredPlan: "
|
|
596
|
+
requiredPlan: "vibecoder",
|
|
614
597
|
category: "productivity"
|
|
615
598
|
},
|
|
616
599
|
/** CLI `vibecheck guard` — operator tooling (Pro). */
|
|
@@ -619,7 +602,7 @@ var FEATURE_REGISTRY = {
|
|
|
619
602
|
title: "Guard",
|
|
620
603
|
subtitle: "Quality gate & policy enforcement from the CLI",
|
|
621
604
|
benefits: ["Configurable fail thresholds", "Engine toggles", "CI-friendly output"],
|
|
622
|
-
requiredPlan: "
|
|
605
|
+
requiredPlan: "vibecoder",
|
|
623
606
|
category: "productivity"
|
|
624
607
|
},
|
|
625
608
|
/** CLI `vibecheck doctor` — engine / workspace diagnostics (Free). */
|
|
@@ -628,19 +611,19 @@ var FEATURE_REGISTRY = {
|
|
|
628
611
|
title: "Doctor",
|
|
629
612
|
subtitle: "Engine health and workspace diagnostics",
|
|
630
613
|
benefits: ["Engine readiness", "Config validation", "Optional repair flows"],
|
|
631
|
-
requiredPlan: "
|
|
614
|
+
requiredPlan: "vibecoder",
|
|
632
615
|
category: "core"
|
|
633
616
|
},
|
|
634
|
-
/** Truthpack generation / validation
|
|
617
|
+
/** Truthpack generation / validation. */
|
|
635
618
|
Truthpack: {
|
|
636
619
|
entitlement: ENTITLEMENTS.SCAN_WORKSPACE,
|
|
637
620
|
title: "Truthpack",
|
|
638
621
|
subtitle: "Ground-truth artifacts for your repo",
|
|
639
622
|
benefits: ["Regenerate truthpack", "Cross-reference validation", "CI contracts"],
|
|
640
|
-
requiredPlan: "
|
|
623
|
+
requiredPlan: "vibecoder",
|
|
641
624
|
category: "analysis"
|
|
642
625
|
},
|
|
643
|
-
/** CLI `vibecheck roast` — stylized scan output
|
|
626
|
+
/** CLI `vibecheck roast` — stylized scan output. */
|
|
644
627
|
Roast: {
|
|
645
628
|
entitlement: ENTITLEMENTS.SCAN,
|
|
646
629
|
title: "Roast",
|
|
@@ -652,16 +635,16 @@ var FEATURE_REGISTRY = {
|
|
|
652
635
|
"Shareable output",
|
|
653
636
|
"CLI, MCP, and IDE panel"
|
|
654
637
|
],
|
|
655
|
-
requiredPlan: "
|
|
638
|
+
requiredPlan: "vibecoder",
|
|
656
639
|
category: "analysis"
|
|
657
640
|
},
|
|
658
|
-
/** CLI code graph / intent context that builds on local graph
|
|
641
|
+
/** CLI code graph / intent context that builds on local graph. */
|
|
659
642
|
"Code Graph": {
|
|
660
643
|
entitlement: ENTITLEMENTS.SCAN,
|
|
661
644
|
title: "Code Graph",
|
|
662
645
|
subtitle: "Local dependency and symbol graph",
|
|
663
646
|
benefits: ["Import/export map", "Intent search", "Proactive file context"],
|
|
664
|
-
requiredPlan: "
|
|
647
|
+
requiredPlan: "vibecoder",
|
|
665
648
|
category: "analysis"
|
|
666
649
|
},
|
|
667
650
|
/** Ship / verify workflows from CLI (Pro). */
|
|
@@ -670,7 +653,7 @@ var FEATURE_REGISTRY = {
|
|
|
670
653
|
title: "Ship Verification",
|
|
671
654
|
subtitle: "Checklists, reports, and ship gates",
|
|
672
655
|
benefits: ["Structured ship checks", "Evidence-friendly output"],
|
|
673
|
-
requiredPlan: "
|
|
656
|
+
requiredPlan: "vibecoder",
|
|
674
657
|
category: "productivity"
|
|
675
658
|
},
|
|
676
659
|
"Firewall Enforce": {
|
|
@@ -678,7 +661,7 @@ var FEATURE_REGISTRY = {
|
|
|
678
661
|
title: "Firewall Enforce",
|
|
679
662
|
subtitle: "Block AI mistakes before save",
|
|
680
663
|
benefits: ["Pre-save validation", "Intent locking", "Drift prevention"],
|
|
681
|
-
requiredPlan: "
|
|
664
|
+
requiredPlan: "vibecoder",
|
|
682
665
|
category: "productivity",
|
|
683
666
|
docsUrl: "/docs/firewall"
|
|
684
667
|
},
|
|
@@ -697,7 +680,7 @@ var FEATURE_REGISTRY = {
|
|
|
697
680
|
"Short-lived pair code (no inbound ports)",
|
|
698
681
|
"Local-only execution (your machine stays in control)"
|
|
699
682
|
],
|
|
700
|
-
requiredPlan: "
|
|
683
|
+
requiredPlan: "vibecoder",
|
|
701
684
|
category: "productivity",
|
|
702
685
|
upgradeMessage: "The Web Terminal requires Pro. Upgrade to drive your repo from the dashboard."
|
|
703
686
|
},
|
|
@@ -706,7 +689,7 @@ var FEATURE_REGISTRY = {
|
|
|
706
689
|
title: "Cloud Sync",
|
|
707
690
|
subtitle: "Cross-device synchronization",
|
|
708
691
|
benefits: ["Multi-device access", "Team sharing", "Automatic backup"],
|
|
709
|
-
requiredPlan: "
|
|
692
|
+
requiredPlan: "vibecoder",
|
|
710
693
|
category: "productivity"
|
|
711
694
|
},
|
|
712
695
|
"PDF Reports": {
|
|
@@ -714,7 +697,7 @@ var FEATURE_REGISTRY = {
|
|
|
714
697
|
title: "PDF Reports",
|
|
715
698
|
subtitle: "Professional shareable reports",
|
|
716
699
|
benefits: ["Executive summaries", "Custom branding", "Print-ready"],
|
|
717
|
-
requiredPlan: "
|
|
700
|
+
requiredPlan: "vibecoder",
|
|
718
701
|
category: "productivity"
|
|
719
702
|
},
|
|
720
703
|
"Verified Badge": {
|
|
@@ -722,7 +705,7 @@ var FEATURE_REGISTRY = {
|
|
|
722
705
|
title: "Verified Ship Badge",
|
|
723
706
|
subtitle: "Dynamic ship badges for your README",
|
|
724
707
|
benefits: ["Live status", "README embeds", "Trust signals"],
|
|
725
|
-
requiredPlan: "
|
|
708
|
+
requiredPlan: "vibecoder",
|
|
726
709
|
category: "productivity"
|
|
727
710
|
},
|
|
728
711
|
"Vibe Prompt": {
|
|
@@ -730,7 +713,7 @@ var FEATURE_REGISTRY = {
|
|
|
730
713
|
title: "Vibe Prompt",
|
|
731
714
|
subtitle: "Generate prompt packs from intent",
|
|
732
715
|
benefits: ["Truth-pack aware", "Implementation prompts", "Verification prompts"],
|
|
733
|
-
requiredPlan: "
|
|
716
|
+
requiredPlan: "vibecoder",
|
|
734
717
|
category: "productivity",
|
|
735
718
|
upgradeMessage: "Vibe Prompt requires Pro. Upgrade to generate project-aware prompt packs."
|
|
736
719
|
},
|
|
@@ -739,7 +722,7 @@ var FEATURE_REGISTRY = {
|
|
|
739
722
|
title: "Review Workflows",
|
|
740
723
|
subtitle: "Code review workflows for Cursor/Claude",
|
|
741
724
|
benefits: ["Copy to clipboard", "Install agents", "Workflow templates"],
|
|
742
|
-
requiredPlan: "
|
|
725
|
+
requiredPlan: "vibecoder",
|
|
743
726
|
category: "productivity"
|
|
744
727
|
},
|
|
745
728
|
"Flow Workflows": {
|
|
@@ -747,7 +730,7 @@ var FEATURE_REGISTRY = {
|
|
|
747
730
|
title: "Flow Workflows",
|
|
748
731
|
subtitle: "AI workflows panel",
|
|
749
732
|
benefits: ["Copy workflows", "Agent chips", "AI automation"],
|
|
750
|
-
requiredPlan: "
|
|
733
|
+
requiredPlan: "vibecoder",
|
|
751
734
|
category: "productivity"
|
|
752
735
|
},
|
|
753
736
|
"WikiCode Atlas": {
|
|
@@ -755,7 +738,7 @@ var FEATURE_REGISTRY = {
|
|
|
755
738
|
title: "WikiCode Atlas",
|
|
756
739
|
subtitle: "Code atlas and wiki",
|
|
757
740
|
benefits: ["Browse codebase", "Feature mapping", "Documentation"],
|
|
758
|
-
requiredPlan: "
|
|
741
|
+
requiredPlan: "vibecoder",
|
|
759
742
|
category: "analysis"
|
|
760
743
|
},
|
|
761
744
|
/** LLM-powered guided routes (intent → stops). Pro+ unlimited within plan quotas. */
|
|
@@ -768,7 +751,7 @@ var FEATURE_REGISTRY = {
|
|
|
768
751
|
"Next/prev stops",
|
|
769
752
|
"Follow-up Q&A on each stop"
|
|
770
753
|
],
|
|
771
|
-
requiredPlan: "
|
|
754
|
+
requiredPlan: "vibecoder",
|
|
772
755
|
category: "analysis"
|
|
773
756
|
},
|
|
774
757
|
"Proof History": {
|
|
@@ -776,7 +759,7 @@ var FEATURE_REGISTRY = {
|
|
|
776
759
|
title: "Proof History",
|
|
777
760
|
subtitle: "Saved proof bundles beyond last run",
|
|
778
761
|
benefits: ["90-day history", "Proof chains", "Audit trail"],
|
|
779
|
-
requiredPlan: "
|
|
762
|
+
requiredPlan: "vibecoder",
|
|
780
763
|
category: "productivity",
|
|
781
764
|
upgradeMessage: "Proof History requires Pro. Upgrade for full proof history and audit trail."
|
|
782
765
|
},
|
|
@@ -785,7 +768,7 @@ var FEATURE_REGISTRY = {
|
|
|
785
768
|
title: "Forge",
|
|
786
769
|
subtitle: "AI code generation (component, api, hook, test)",
|
|
787
770
|
benefits: ["Component generation", "API scaffolding", "Test generation"],
|
|
788
|
-
requiredPlan: "
|
|
771
|
+
requiredPlan: "vibecoder",
|
|
789
772
|
category: "productivity",
|
|
790
773
|
upgradeMessage: "Forge requires Pro. Upgrade to unlock AI code generation."
|
|
791
774
|
},
|
|
@@ -794,7 +777,7 @@ var FEATURE_REGISTRY = {
|
|
|
794
777
|
title: "GitHub Action",
|
|
795
778
|
subtitle: "Automated PR quality checks",
|
|
796
779
|
benefits: ["PR comments", "Status checks", "Branch protection"],
|
|
797
|
-
requiredPlan: "
|
|
780
|
+
requiredPlan: "vibecoder",
|
|
798
781
|
category: "ci_automation",
|
|
799
782
|
upgradeMessage: "GitHub Action requires Pro. Upgrade to automate PR quality checks."
|
|
800
783
|
},
|
|
@@ -803,7 +786,7 @@ var FEATURE_REGISTRY = {
|
|
|
803
786
|
title: "CI/CD Integration",
|
|
804
787
|
subtitle: "All CI platforms supported",
|
|
805
788
|
benefits: ["GitHub Actions", "GitLab CI", "CircleCI", "Jenkins"],
|
|
806
|
-
requiredPlan: "
|
|
789
|
+
requiredPlan: "vibecoder",
|
|
807
790
|
category: "ci_automation"
|
|
808
791
|
},
|
|
809
792
|
"API Access": {
|
|
@@ -811,7 +794,7 @@ var FEATURE_REGISTRY = {
|
|
|
811
794
|
title: "API Access",
|
|
812
795
|
subtitle: "Programmatic scanning & integrations",
|
|
813
796
|
benefits: ["REST API", "Webhooks", "Custom automation"],
|
|
814
|
-
requiredPlan: "
|
|
797
|
+
requiredPlan: "vibecoder",
|
|
815
798
|
category: "ci_automation"
|
|
816
799
|
},
|
|
817
800
|
"Context Engine": {
|
|
@@ -819,16 +802,16 @@ var FEATURE_REGISTRY = {
|
|
|
819
802
|
title: "Context Engine",
|
|
820
803
|
subtitle: "Cloud rules, MCP & agents (requires active subscription)",
|
|
821
804
|
benefits: ["Auto-generate rules", "Team-ready context in IDE", "MCP & API hooks"],
|
|
822
|
-
requiredPlan: "
|
|
805
|
+
requiredPlan: "vibecoder",
|
|
823
806
|
category: "analysis",
|
|
824
|
-
upgradeMessage: "Context Engine (cloud rules & agents) requires
|
|
807
|
+
upgradeMessage: "Context Engine (cloud rules & agents) requires Developer or higher."
|
|
825
808
|
},
|
|
826
809
|
"ISL Studio": {
|
|
827
810
|
entitlement: ENTITLEMENTS.SCAN_WORKSPACE,
|
|
828
811
|
title: "ISL Studio",
|
|
829
812
|
subtitle: "Visual spec editor & code generation",
|
|
830
813
|
benefits: ["Visual editor", "Real-time validation", "Code generation (credit packs)"],
|
|
831
|
-
requiredPlan: "
|
|
814
|
+
requiredPlan: "vibecoder",
|
|
832
815
|
category: "analysis"
|
|
833
816
|
},
|
|
834
817
|
"Deep Scan": {
|
|
@@ -836,7 +819,7 @@ var FEATURE_REGISTRY = {
|
|
|
836
819
|
title: "Deep Scan",
|
|
837
820
|
subtitle: "Advanced security analysis",
|
|
838
821
|
benefits: ["18 production engines", "Runtime proof", "Mock detection"],
|
|
839
|
-
requiredPlan: "
|
|
822
|
+
requiredPlan: "vibecoder",
|
|
840
823
|
category: "analysis"
|
|
841
824
|
},
|
|
842
825
|
"Drift Detection": {
|
|
@@ -844,7 +827,7 @@ var FEATURE_REGISTRY = {
|
|
|
844
827
|
title: "Drift Detection",
|
|
845
828
|
subtitle: "Code vs spec divergence tracking",
|
|
846
829
|
benefits: ["Contract drift", "Intent violations", "Auto-alerts"],
|
|
847
|
-
requiredPlan: "
|
|
830
|
+
requiredPlan: "vibecoder",
|
|
848
831
|
category: "analysis"
|
|
849
832
|
},
|
|
850
833
|
"Chaos Agent": {
|
|
@@ -852,7 +835,7 @@ var FEATURE_REGISTRY = {
|
|
|
852
835
|
title: "Chaos Agent",
|
|
853
836
|
subtitle: "AI-powered bug hunting",
|
|
854
837
|
benefits: ["Edge case discovery", "Fault injection", "Resilience testing"],
|
|
855
|
-
requiredPlan: "
|
|
838
|
+
requiredPlan: "vibecoder",
|
|
856
839
|
category: "analysis"
|
|
857
840
|
},
|
|
858
841
|
"Team Dashboard": {
|
|
@@ -924,7 +907,7 @@ var FEATURE_REGISTRY = {
|
|
|
924
907
|
title: "Polish",
|
|
925
908
|
subtitle: "Enterprise-grade code quality engine",
|
|
926
909
|
benefits: ["Code quality scoring", "Complexity analysis", "Trend tracking"],
|
|
927
|
-
requiredPlan: "
|
|
910
|
+
requiredPlan: "vibecoder",
|
|
928
911
|
category: "productivity"
|
|
929
912
|
},
|
|
930
913
|
DocGuard: {
|
|
@@ -932,7 +915,7 @@ var FEATURE_REGISTRY = {
|
|
|
932
915
|
title: "DocGuard",
|
|
933
916
|
subtitle: "Documentation quality enforcement",
|
|
934
917
|
benefits: ["JSDoc validation", "Coverage tracking", "Stale doc detection"],
|
|
935
|
-
requiredPlan: "
|
|
918
|
+
requiredPlan: "vibecoder",
|
|
936
919
|
category: "productivity"
|
|
937
920
|
},
|
|
938
921
|
TestGap: {
|
|
@@ -940,7 +923,7 @@ var FEATURE_REGISTRY = {
|
|
|
940
923
|
title: "TestGap Analysis",
|
|
941
924
|
subtitle: "Test coverage gap detection",
|
|
942
925
|
benefits: ["Zero coverage detection", "Happy path analysis", "Orphaned test detection"],
|
|
943
|
-
requiredPlan: "
|
|
926
|
+
requiredPlan: "vibecoder",
|
|
944
927
|
category: "analysis"
|
|
945
928
|
},
|
|
946
929
|
ArchRules: {
|
|
@@ -948,7 +931,7 @@ var FEATURE_REGISTRY = {
|
|
|
948
931
|
title: "Architecture Rules",
|
|
949
932
|
subtitle: "Enforce architectural patterns",
|
|
950
933
|
benefits: ["YAML rule config", "6 rule types", "Violation detection"],
|
|
951
|
-
requiredPlan: "
|
|
934
|
+
requiredPlan: "vibecoder",
|
|
952
935
|
category: "analysis"
|
|
953
936
|
},
|
|
954
937
|
Provenance: {
|
|
@@ -956,7 +939,7 @@ var FEATURE_REGISTRY = {
|
|
|
956
939
|
title: "Provenance Tracking",
|
|
957
940
|
subtitle: "Edit history and attestations",
|
|
958
941
|
benefits: ["Edit tracking", "Attestation DB", "Audit trail"],
|
|
959
|
-
requiredPlan: "
|
|
942
|
+
requiredPlan: "vibecoder",
|
|
960
943
|
category: "compliance"
|
|
961
944
|
},
|
|
962
945
|
"Model Fingerprint": {
|
|
@@ -964,7 +947,7 @@ var FEATURE_REGISTRY = {
|
|
|
964
947
|
title: "Model Fingerprint",
|
|
965
948
|
subtitle: "AI model detection and tracking",
|
|
966
949
|
benefits: ["Model identification", "Version tracking", "Usage analytics"],
|
|
967
|
-
requiredPlan: "
|
|
950
|
+
requiredPlan: "vibecoder",
|
|
968
951
|
category: "analysis"
|
|
969
952
|
},
|
|
970
953
|
/** Kickoff / connect project (Free). */
|
|
@@ -973,7 +956,7 @@ var FEATURE_REGISTRY = {
|
|
|
973
956
|
title: "Kickoff & Connect",
|
|
974
957
|
subtitle: "Initialize and connect your project",
|
|
975
958
|
benefits: ["Project scaffolding", "Config generation", "Quick start"],
|
|
976
|
-
requiredPlan: "
|
|
959
|
+
requiredPlan: "vibecoder",
|
|
977
960
|
category: "core"
|
|
978
961
|
},
|
|
979
962
|
/** Codegraph — local dependency/symbol graph (Free). */
|
|
@@ -982,7 +965,7 @@ var FEATURE_REGISTRY = {
|
|
|
982
965
|
title: "Codegraph",
|
|
983
966
|
subtitle: "Local dependency and symbol graph",
|
|
984
967
|
benefits: ["Import/export map", "Symbol navigation", "Dependency visualization"],
|
|
985
|
-
requiredPlan: "
|
|
968
|
+
requiredPlan: "vibecoder",
|
|
986
969
|
category: "analysis"
|
|
987
970
|
},
|
|
988
971
|
/** WikiCode — codebase wiki and atlas (Free). */
|
|
@@ -991,7 +974,7 @@ var FEATURE_REGISTRY = {
|
|
|
991
974
|
title: "WikiCode",
|
|
992
975
|
subtitle: "Codebase wiki and documentation",
|
|
993
976
|
benefits: ["Browse codebase", "Feature mapping", "Documentation"],
|
|
994
|
-
requiredPlan: "
|
|
977
|
+
requiredPlan: "vibecoder",
|
|
995
978
|
category: "analysis"
|
|
996
979
|
},
|
|
997
980
|
/** Vibe Flow — AI workflows panel (Free). */
|
|
@@ -1000,13 +983,11 @@ var FEATURE_REGISTRY = {
|
|
|
1000
983
|
title: "Vibe Flow",
|
|
1001
984
|
subtitle: "AI workflow automation",
|
|
1002
985
|
benefits: ["Workflow templates", "Agent chips", "AI automation"],
|
|
1003
|
-
requiredPlan: "
|
|
986
|
+
requiredPlan: "vibecoder",
|
|
1004
987
|
category: "productivity"
|
|
1005
988
|
},
|
|
1006
989
|
/**
|
|
1007
|
-
* Mission Run
|
|
1008
|
-
* can finish their first auto-generated mission. Subsequent runs require
|
|
1009
|
-
* Pro. Quota lookup uses `missionRun` FeatureLimitKey → `missionRunsLifetime`.
|
|
990
|
+
* Mission Run quota lookup uses `missionRun` FeatureLimitKey → `missionRunsLifetime`.
|
|
1010
991
|
*/
|
|
1011
992
|
"Mission Run": {
|
|
1012
993
|
entitlement: ENTITLEMENTS.SCAN_WORKSPACE,
|
|
@@ -1015,11 +996,11 @@ var FEATURE_REGISTRY = {
|
|
|
1015
996
|
benefits: [
|
|
1016
997
|
"Auto-generated from your scan",
|
|
1017
998
|
"Acceptance criteria + verification commands",
|
|
1018
|
-
"
|
|
999
|
+
"Paid subscribers get mission runs"
|
|
1019
1000
|
],
|
|
1020
|
-
requiredPlan: "
|
|
1001
|
+
requiredPlan: "vibecoder",
|
|
1021
1002
|
category: "productivity",
|
|
1022
|
-
upgradeMessage: "Mission runs require
|
|
1003
|
+
upgradeMessage: "Mission runs require Developer or higher."
|
|
1023
1004
|
}
|
|
1024
1005
|
};
|
|
1025
1006
|
var VALID_ENTITLEMENTS = new Set(Object.values(ENTITLEMENTS));
|
|
@@ -1090,7 +1071,7 @@ function canAccessFeature(userPlan, featureName) {
|
|
|
1090
1071
|
}
|
|
1091
1072
|
function getMinimumPlanForFeature(featureName) {
|
|
1092
1073
|
const meta = FEATURE_REGISTRY[featureName];
|
|
1093
|
-
if (!meta) return "
|
|
1074
|
+
if (!meta) return "vibecoder";
|
|
1094
1075
|
return getRequiredPlan(meta.entitlement);
|
|
1095
1076
|
}
|
|
1096
1077
|
function getUpgradeTarget(currentPlan, featureName) {
|
|
@@ -1101,7 +1082,7 @@ function getUpgradeTarget(currentPlan, featureName) {
|
|
|
1101
1082
|
return meta.requiredPlan;
|
|
1102
1083
|
}
|
|
1103
1084
|
var FEATURE_NAMES = {
|
|
1104
|
-
// ──
|
|
1085
|
+
// ── Paid product features ───────────────────────────────────────────────
|
|
1105
1086
|
SCAN_BASIC: "Scan Basic",
|
|
1106
1087
|
KICKOFF_CONNECT: "Kickoff Connect",
|
|
1107
1088
|
DOCTOR: "Doctor",
|
|
@@ -1115,18 +1096,17 @@ var FEATURE_NAMES = {
|
|
|
1115
1096
|
WIKICODE_ATLAS: "WikiCode Atlas",
|
|
1116
1097
|
/** Truthpack generate/validate — local CLI + IDE; registry key matches {@link FEATURE_REGISTRY} */
|
|
1117
1098
|
TRUTHPACK: "Truthpack",
|
|
1118
|
-
/** LLM guided routes
|
|
1099
|
+
/** LLM guided routes */
|
|
1119
1100
|
GUIDED_ROUTE: "Guided Route",
|
|
1120
1101
|
SHIP_SCORE: "Ship Score",
|
|
1121
1102
|
ISL_STUDIO: "ISL Studio",
|
|
1122
|
-
// ──
|
|
1103
|
+
// ── Legacy quota-aware features ─────────────────────────────────────────
|
|
1123
1104
|
/**
|
|
1124
|
-
* First auto-generated mission free, subsequent mission runs require Pro.
|
|
1125
1105
|
* Server-side `POST /missions/:id/run` enforces by counting lifetime
|
|
1126
1106
|
* non-`open` missions for the user.
|
|
1127
1107
|
*/
|
|
1128
1108
|
MISSION_RUN_FREE_FIRST: "Mission Run",
|
|
1129
|
-
// ──
|
|
1109
|
+
// ── Paid features ───────────────────────────────────────────────────────
|
|
1130
1110
|
VIBE_PROMPT: "Vibe Prompt",
|
|
1131
1111
|
PROOF_HISTORY: "Proof History",
|
|
1132
1112
|
FORGE: "Forge",
|
|
@@ -1164,10 +1144,13 @@ var FEATURE_NAMES = {
|
|
|
1164
1144
|
SDK_GENERATOR: "SDK Generator",
|
|
1165
1145
|
COMPLIANCE_AUDIT: "Compliance Audit"
|
|
1166
1146
|
};
|
|
1147
|
+
function paidUpgradeTarget(plan) {
|
|
1148
|
+
return plan;
|
|
1149
|
+
}
|
|
1167
1150
|
var INTRO_PRICES = {
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
enterprise:
|
|
1151
|
+
vibecoder: null,
|
|
1152
|
+
engineer: null,
|
|
1153
|
+
enterprise: null
|
|
1171
1154
|
};
|
|
1172
1155
|
function formatFindingSeverityBreakdown(summary) {
|
|
1173
1156
|
const parts = [`${summary.total} total`];
|
|
@@ -1182,13 +1165,11 @@ function formatFindingSeverityBreakdown(summary) {
|
|
|
1182
1165
|
function buildCliUpgradeBlock(featureName, currentPlan) {
|
|
1183
1166
|
const target = getUpgradeTarget(currentPlan, featureName);
|
|
1184
1167
|
if (!target) return "";
|
|
1185
|
-
const
|
|
1186
|
-
const
|
|
1187
|
-
const
|
|
1188
|
-
const
|
|
1189
|
-
|
|
1190
|
-
` \u26A1 ${featureName} requires ${name}`
|
|
1191
|
-
];
|
|
1168
|
+
const paidTarget = paidUpgradeTarget(target);
|
|
1169
|
+
const name = PLAN_DISPLAY_NAMES[paidTarget];
|
|
1170
|
+
const price = PLAN_PRICE_LABELS[paidTarget];
|
|
1171
|
+
const intro = INTRO_PRICES[paidTarget];
|
|
1172
|
+
const lines = ["", ` \u26A1 ${featureName} requires ${name}`];
|
|
1192
1173
|
if (intro) {
|
|
1193
1174
|
lines.push(` \u{1F525} Pre-launch: ${intro} first month (then ${price})`);
|
|
1194
1175
|
} else {
|
|
@@ -1196,19 +1177,19 @@ function buildCliUpgradeBlock(featureName, currentPlan) {
|
|
|
1196
1177
|
}
|
|
1197
1178
|
lines.push(
|
|
1198
1179
|
"",
|
|
1199
|
-
` Upgrade: ${getPricingPageUrl(
|
|
1180
|
+
` Upgrade: ${getPricingPageUrl(paidTarget)}`,
|
|
1200
1181
|
" Or run: vibecheck auth upgrade",
|
|
1201
1182
|
""
|
|
1202
1183
|
);
|
|
1203
1184
|
return lines.join("\n");
|
|
1204
1185
|
}
|
|
1205
1186
|
function getPricingPageUrl(highlightPlan) {
|
|
1206
|
-
const canonicalPlan = normalizePlanId(highlightPlan) ;
|
|
1207
|
-
return getCheckoutUrl(canonicalPlan ?? "
|
|
1187
|
+
const canonicalPlan = highlightPlan ? normalizePlanId(highlightPlan) : null;
|
|
1188
|
+
return getCheckoutUrl(canonicalPlan ?? "vibecoder", void 0, "pricing");
|
|
1208
1189
|
}
|
|
1209
1190
|
function getCheckoutUrl(plan, email, source = "extension", origin = "https://vibecheckai.dev") {
|
|
1210
1191
|
const canonicalPlan = normalizePlanId(plan ?? null);
|
|
1211
|
-
const target = canonicalPlan ?? "
|
|
1192
|
+
const target = paidUpgradeTarget(canonicalPlan ?? "vibecoder");
|
|
1212
1193
|
const params = new URLSearchParams();
|
|
1213
1194
|
params.set("plan", target);
|
|
1214
1195
|
params.set("source", source);
|
|
@@ -1247,8 +1228,8 @@ function buildGatedScanResponse(opts) {
|
|
|
1247
1228
|
category: f.category,
|
|
1248
1229
|
ruleId: f.ruleId,
|
|
1249
1230
|
_gated: true,
|
|
1250
|
-
_upgradeMessage: "
|
|
1251
|
-
_upgradeUrl: getPricingPageUrl("
|
|
1231
|
+
_upgradeMessage: "Start Paid to see the full error details, location, and fix suggestion.",
|
|
1232
|
+
_upgradeUrl: getPricingPageUrl("vibecoder")
|
|
1252
1233
|
}));
|
|
1253
1234
|
return {
|
|
1254
1235
|
gated: true,
|
|
@@ -1259,15 +1240,19 @@ function buildGatedScanResponse(opts) {
|
|
|
1259
1240
|
findings: gatedFindings,
|
|
1260
1241
|
upgrade: {
|
|
1261
1242
|
show: true,
|
|
1262
|
-
message: `${opts.summary.total} issues found (${opts.summary.critical} critical, ${opts.summary.high} high, ${opts.summary.medium} medium).
|
|
1263
|
-
url: getPricingPageUrl("
|
|
1264
|
-
buttonLabel: "
|
|
1243
|
+
message: `${opts.summary.total} issues found (${opts.summary.critical} critical, ${opts.summary.high} high, ${opts.summary.medium} medium). Start Paid to see every error with location, explanation, and fix suggestion.`,
|
|
1244
|
+
url: getPricingPageUrl("vibecoder"),
|
|
1245
|
+
buttonLabel: "Start Vibecoder"
|
|
1265
1246
|
}
|
|
1266
1247
|
};
|
|
1267
1248
|
}
|
|
1268
|
-
var DAILY_SCAN_LIMIT_UPGRADE_URL = getCheckoutUrl(
|
|
1249
|
+
var DAILY_SCAN_LIMIT_UPGRADE_URL = getCheckoutUrl(
|
|
1250
|
+
"vibecoder",
|
|
1251
|
+
void 0,
|
|
1252
|
+
"daily_scan_cap"
|
|
1253
|
+
);
|
|
1269
1254
|
function formatDailyScanLimitMessage(usage) {
|
|
1270
|
-
return `Daily scan limit reached (${usage.limit}/day). Upgrade to
|
|
1255
|
+
return `Daily scan limit reached (${usage.limit}/day). Upgrade to Vibecoder (${PLAN_PRICE_LABELS.vibecoder}) for access.`;
|
|
1271
1256
|
}
|
|
1272
1257
|
var DEFAULT_API_BASE_URL = "https://api.vibecheckai.dev";
|
|
1273
1258
|
function isRecord(value) {
|
|
@@ -1308,65 +1293,81 @@ function coerceCanonicalAccessResponse(value) {
|
|
|
1308
1293
|
}
|
|
1309
1294
|
async function fetchCanonicalAccess(options = {}) {
|
|
1310
1295
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
1296
|
+
const headers = buildPlatformAuthHeaders(options.token, options.headers);
|
|
1297
|
+
const ci = options.clientIdentity;
|
|
1298
|
+
if (ci?.clientType?.trim() && ci?.clientVersion?.trim()) {
|
|
1299
|
+
headers.set("X-Client-Type", ci.clientType.trim());
|
|
1300
|
+
headers.set("X-Client-Version", ci.clientVersion.trim());
|
|
1301
|
+
}
|
|
1311
1302
|
const response = await fetchImpl(getCanonicalAccessUrl(options.apiBaseUrl), {
|
|
1312
|
-
headers
|
|
1303
|
+
headers,
|
|
1313
1304
|
signal: options.signal,
|
|
1314
1305
|
credentials: options.credentials
|
|
1315
1306
|
});
|
|
1316
|
-
|
|
1307
|
+
let json;
|
|
1308
|
+
try {
|
|
1309
|
+
json = await response.json();
|
|
1310
|
+
} catch {
|
|
1317
1311
|
return {
|
|
1318
1312
|
ok: false,
|
|
1319
1313
|
status: response.status,
|
|
1320
|
-
data: null
|
|
1314
|
+
data: null,
|
|
1315
|
+
error: null
|
|
1321
1316
|
};
|
|
1322
1317
|
}
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1318
|
+
if (!response.ok) {
|
|
1319
|
+
const root = json;
|
|
1320
|
+
const errObj = root?.error;
|
|
1321
|
+
const error = errObj && typeof errObj === "object" ? {
|
|
1322
|
+
code: typeof errObj.code === "string" ? errObj.code : void 0,
|
|
1323
|
+
message: typeof errObj.message === "string" ? errObj.message : void 0
|
|
1324
|
+
} : null;
|
|
1327
1325
|
return {
|
|
1328
1326
|
ok: false,
|
|
1329
1327
|
status: response.status,
|
|
1330
|
-
data: null
|
|
1328
|
+
data: null,
|
|
1329
|
+
error
|
|
1331
1330
|
};
|
|
1332
1331
|
}
|
|
1333
1332
|
const data = coerceCanonicalAccessResponse(json);
|
|
1334
1333
|
return {
|
|
1335
1334
|
ok: data !== null,
|
|
1336
1335
|
status: response.status,
|
|
1337
|
-
data
|
|
1336
|
+
data,
|
|
1337
|
+
error: null
|
|
1338
1338
|
};
|
|
1339
1339
|
}
|
|
1340
1340
|
var CLI_COMMAND_MIN_PLAN = {
|
|
1341
|
-
scan: "
|
|
1342
|
-
score: "
|
|
1343
|
-
roast: "
|
|
1344
|
-
truthpack: "
|
|
1345
|
-
init: "
|
|
1346
|
-
doctor: "
|
|
1341
|
+
scan: "vibecoder",
|
|
1342
|
+
score: "vibecoder",
|
|
1343
|
+
roast: "vibecoder",
|
|
1344
|
+
truthpack: "vibecoder",
|
|
1345
|
+
init: "vibecoder",
|
|
1346
|
+
doctor: "vibecoder",
|
|
1347
1347
|
login: null,
|
|
1348
1348
|
logout: null,
|
|
1349
1349
|
whoami: null,
|
|
1350
1350
|
completion: null,
|
|
1351
1351
|
help: null,
|
|
1352
1352
|
version: null,
|
|
1353
|
-
guard: "
|
|
1354
|
-
ship: "
|
|
1355
|
-
rules: "
|
|
1356
|
-
prompt: "
|
|
1357
|
-
fix: "
|
|
1358
|
-
polish: "
|
|
1359
|
-
reality: "
|
|
1360
|
-
forge: "
|
|
1361
|
-
context: "
|
|
1362
|
-
review: "
|
|
1363
|
-
firewall: "
|
|
1364
|
-
commitshield: "
|
|
1365
|
-
docguard: "
|
|
1366
|
-
surgeon: "
|
|
1367
|
-
native: "
|
|
1368
|
-
nexus: "
|
|
1369
|
-
|
|
1353
|
+
guard: "vibecoder",
|
|
1354
|
+
ship: "vibecoder",
|
|
1355
|
+
rules: "vibecoder",
|
|
1356
|
+
prompt: "vibecoder",
|
|
1357
|
+
fix: "vibecoder",
|
|
1358
|
+
polish: "vibecoder",
|
|
1359
|
+
reality: "vibecoder",
|
|
1360
|
+
forge: "vibecoder",
|
|
1361
|
+
context: "vibecoder",
|
|
1362
|
+
review: "vibecoder",
|
|
1363
|
+
firewall: "vibecoder",
|
|
1364
|
+
commitshield: "vibecoder",
|
|
1365
|
+
docguard: "vibecoder",
|
|
1366
|
+
surgeon: "vibecoder",
|
|
1367
|
+
native: "vibecoder",
|
|
1368
|
+
nexus: "vibecoder",
|
|
1369
|
+
neuro: "vibecoder",
|
|
1370
|
+
serve: "vibecoder"
|
|
1370
1371
|
};
|
|
1371
1372
|
Object.fromEntries(
|
|
1372
1373
|
Object.entries(CLI_COMMAND_MIN_PLAN).map(([k, v]) => [k.toLowerCase(), v])
|
|
@@ -1437,6 +1438,8 @@ Object.fromEntries(
|
|
|
1437
1438
|
surgeon: FEATURE_NAMES.SCAN_BASIC,
|
|
1438
1439
|
native: FEATURE_NAMES.DEEP_SCAN,
|
|
1439
1440
|
nexus: FEATURE_NAMES.CODE_GRAPH,
|
|
1441
|
+
/** Neuro aligns with Context Engine stack in server access payloads. */
|
|
1442
|
+
neuro: FEATURE_NAMES.CONTEXT_ENGINE,
|
|
1440
1443
|
serve: FEATURE_NAMES.WEB_TERMINAL
|
|
1441
1444
|
});
|
|
1442
1445
|
|
|
@@ -1561,46 +1564,6 @@ var TEAM_ENTITLEMENTS = new Set(PRO_ENTITLEMENTS);
|
|
|
1561
1564
|
ENTITLEMENTS2.ENTERPRISE_SIGNED_BUNDLES,
|
|
1562
1565
|
ENTITLEMENTS2.ENTERPRISE_MULTI_REPO
|
|
1563
1566
|
]);
|
|
1564
|
-
function quotasToPlanLimits(q) {
|
|
1565
|
-
return {
|
|
1566
|
-
findingDetailLimit: q.findingDetailLimit,
|
|
1567
|
-
canAutoFix: q.canAutoFix,
|
|
1568
|
-
canHealPR: q.canHealPR,
|
|
1569
|
-
canModelFingerprint: q.canModelFingerprint,
|
|
1570
|
-
canRealityMode: q.canRealityMode,
|
|
1571
|
-
canISLGenerate: q.canISLGenerate,
|
|
1572
|
-
canCIBlock: q.canCIBlock,
|
|
1573
|
-
scanHistoryDays: q.scanHistoryDays,
|
|
1574
|
-
maxProjects: q.maxProjects,
|
|
1575
|
-
apiRequestsPerDay: q.apiRequestsPerDay,
|
|
1576
|
-
canExportCSV: q.canExportCSV,
|
|
1577
|
-
canSlackIntegration: q.canSlackIntegration,
|
|
1578
|
-
scansPerDay: q.scansPerDay
|
|
1579
|
-
};
|
|
1580
|
-
}
|
|
1581
|
-
({
|
|
1582
|
-
free: quotasToPlanLimits(getQuotas(null)),
|
|
1583
|
-
pro: quotasToPlanLimits(PLAN_QUOTAS.pro),
|
|
1584
|
-
team: quotasToPlanLimits(PLAN_QUOTAS.team),
|
|
1585
|
-
enterprise: quotasToPlanLimits(PLAN_QUOTAS.enterprise)
|
|
1586
|
-
});
|
|
1587
|
-
({
|
|
1588
|
-
pro: {
|
|
1589
|
-
name: PLANS.pro.displayName,
|
|
1590
|
-
tagline: PLANS.pro.tagline,
|
|
1591
|
-
price: PLANS.pro.monthlyPriceUsd,
|
|
1592
|
-
priceLabel: PLANS.pro.priceLabel},
|
|
1593
|
-
team: {
|
|
1594
|
-
name: PLANS.team.displayName,
|
|
1595
|
-
tagline: PLANS.team.tagline,
|
|
1596
|
-
price: PLANS.team.monthlyPriceUsd,
|
|
1597
|
-
priceLabel: PLANS.team.priceLabel},
|
|
1598
|
-
enterprise: {
|
|
1599
|
-
name: PLANS.enterprise.displayName,
|
|
1600
|
-
tagline: PLANS.enterprise.tagline,
|
|
1601
|
-
price: PLANS.enterprise.monthlyPriceUsd,
|
|
1602
|
-
priceLabel: PLANS.enterprise.priceLabel}
|
|
1603
|
-
});
|
|
1604
1567
|
|
|
1605
1568
|
// ../shared-types/dist/risk-dimensions.js
|
|
1606
1569
|
var RISK_DIMENSIONS = [
|