thumbgate 1.16.10 โ†’ 1.16.11

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate-marketplace",
3
- "version": "1.16.10",
3
+ "version": "1.16.11",
4
4
  "owner": {
5
5
  "name": "Igor Ganapolsky",
6
6
  "email": "ig5973700@gmail.com"
@@ -13,7 +13,7 @@
13
13
  "source": "npm",
14
14
  "package": "thumbgate"
15
15
  },
16
- "version": "1.16.10",
16
+ "version": "1.16.11",
17
17
  "author": {
18
18
  "name": "Igor Ganapolsky"
19
19
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thumbgate",
3
3
  "description": "Type ๐Ÿ‘ or ๐Ÿ‘Ž on any agent action. ThumbGate captures it, distills a lesson, and blocks the pattern from repeating. One thumbs-down = the agent physically cannot make that mistake again. 33 pre-action checks, budget enforcement, self-protection, and NIST/SOC2 compliance tags.",
4
- "version": "1.16.10",
4
+ "version": "1.16.11",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.16.10",
3
+ "version": "1.16.11",
4
4
  "description": "ThumbGate โ€” ๐Ÿ‘๐Ÿ‘Ž feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "transport": "stdio",
@@ -2,13 +2,13 @@
2
2
  "mcpServers": {
3
3
  "thumbgate": {
4
4
  "command": "npx",
5
- "args": ["--yes", "--package", "thumbgate@1.16.10", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.16.11", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.16.10", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.16.11", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -201,7 +201,7 @@ const {
201
201
  finalizeSession: finalizeFeedbackSession,
202
202
  } = require('../../scripts/feedback-session');
203
203
 
204
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.16.10' };
204
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.16.11' };
205
205
  const COMMERCE_CATEGORIES = [
206
206
  'product_recommendation',
207
207
  'brand_compliance',
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.16.10",
10
+ "thumbgate@1.16.11",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.16.10",
3
+ "version": "1.16.11",
4
4
  "description": "Self-improving agent governance: type thumbs-up or thumbs-down on any AI agent action. ThumbGate turns every mistake into a prevention rule and blocks the pattern from repeating. One thumbs-down, never again. 33 pre-action checks, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "repository": {
@@ -229,6 +229,7 @@
229
229
  "verify:full": "node scripts/verify-run.js full",
230
230
  "budget:status": "node scripts/budget-guard.js --status",
231
231
  "revenue:status": "node scripts/revenue-status.js",
232
+ "revenue:plan": "node scripts/may-2026-revenue-machine.js",
232
233
  "revenue:status:local": "node bin/cli.js cfo",
233
234
  "revenue:repair:github-marketplace": "node bin/cli.js repair-github-marketplace --write",
234
235
  "cfo:report": "node bin/cli.js cfo",
@@ -350,7 +351,7 @@
350
351
  "test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
351
352
  "test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js tests/changeset-check.test.js tests/release-notes.test.js tests/sonarcloud-workflow.test.js tests/package-boundary.test.js tests/public-package-boundary.test.js tests/revenue-observability-workflow.test.js",
352
353
  "test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
353
- "test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/customer-discovery-sprint.test.js tests/revenue-pack-utils.test.js tests/aiventyx-marketplace-plan.test.js tests/cursor-marketplace-revenue-pack.test.js tests/codex-marketplace-revenue-pack.test.js tests/codex-plugin-revenue-pack.test.js tests/gemini-cli-demand-pack.test.js tests/linkedin-workflow-hardening-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js tests/mcp-directory-revenue-pack.test.js tests/autonomous-sales-agent.test.js tests/reddit-dm-workflow-hardening-pack.test.js tests/sales-pipeline.test.js tests/reddit-dm-outreach.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/ralph-loop.test.js tests/ralph-mode-ci.test.js tests/guide-conversion-path.test.js",
354
+ "test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/may-2026-revenue-machine.test.js tests/customer-discovery-sprint.test.js tests/revenue-pack-utils.test.js tests/aiventyx-marketplace-plan.test.js tests/cursor-marketplace-revenue-pack.test.js tests/codex-marketplace-revenue-pack.test.js tests/codex-plugin-revenue-pack.test.js tests/gemini-cli-demand-pack.test.js tests/linkedin-workflow-hardening-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js tests/mcp-directory-revenue-pack.test.js tests/autonomous-sales-agent.test.js tests/reddit-dm-workflow-hardening-pack.test.js tests/sales-pipeline.test.js tests/reddit-dm-outreach.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/ralph-loop.test.js tests/ralph-mode-ci.test.js tests/guide-conversion-path.test.js",
354
355
  "test:sales-pipeline": "node --test tests/sales-pipeline.test.js",
355
356
  "test:billing": "node --test tests/billing.test.js tests/stripe-sync-product-images.test.js",
356
357
  "test:cli": "node --test tests/analytics-report.test.js tests/codex-self-heal.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dependabot-changeset.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/published-cli.test.js tests/revenue-status.test.js tests/stripe-live-status.test.js",
package/public/index.html CHANGED
@@ -45,6 +45,10 @@ __GA_BOOTSTRAP__
45
45
  const serverSessionId = '__SERVER_SESSION_ID__';
46
46
  const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
47
47
  const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
48
+ const sprintDiagnosticCheckoutUrl = '__SPRINT_DIAGNOSTIC_CHECKOUT_URL__';
49
+ const workflowSprintCheckoutUrl = '__WORKFLOW_SPRINT_CHECKOUT_URL__';
50
+ const sprintDiagnosticPriceDollars = Number('__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__') || 499;
51
+ const workflowSprintPriceDollars = Number('__WORKFLOW_SPRINT_PRICE_DOLLARS__') || 1500;
48
52
  </script>
49
53
 
50
54
  <script type="application/ld+json">
@@ -540,6 +544,14 @@ __GA_BOOTSTRAP__
540
544
  .team-intake-panel h3 { margin: 0 0 6px; font-size: 18px; color: var(--text); }
541
545
  .team-intake-panel p { margin: 0; color: var(--text-dim); font-size: 13px; line-height: 1.55; }
542
546
  .team-intake-badge { flex-shrink: 0; padding: 6px 10px; border: 1px solid rgba(74,222,128,0.35); border-radius: 999px; color: var(--green); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }
547
+ .team-paid-path { display: none; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0 0 16px; }
548
+ .team-paid-path.visible { display: grid; }
549
+ .team-paid-card { display: flex; flex-direction: column; justify-content: space-between; gap: 12px; min-height: 150px; padding: 16px; border: 1px solid rgba(74,222,128,0.22); border-radius: 10px; background: rgba(0,0,0,0.24); }
550
+ .team-paid-card h4 { margin: 0 0 6px; color: var(--text); font-size: 15px; }
551
+ .team-paid-card p { margin: 0; color: var(--text-dim); font-size: 12px; line-height: 1.5; }
552
+ .team-paid-price { color: var(--green); font-weight: 800; font-size: 18px; }
553
+ .team-paid-link { display: block; text-align: center; padding: 10px 12px; background: rgba(74,222,128,0.16); color: var(--green); border: 1px solid rgba(74,222,128,0.45); border-radius: 8px; text-decoration: none; font-size: 13px; font-weight: 700; }
554
+ .team-paid-link:hover { border-color: var(--green); transform: translateY(-1px); }
543
555
  .team-form { max-width: 860px; margin: 24px auto 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
544
556
  .team-intake-panel .team-form { max-width: none; margin: 0; }
545
557
  .team-form .full { grid-column: 1 / -1; }
@@ -605,6 +617,7 @@ __GA_BOOTSTRAP__
605
617
  .pricing-grid { grid-template-columns: 1fr; }
606
618
  .team-intake-panel-head { display: block; }
607
619
  .team-intake-badge { display: inline-block; margin-bottom: 10px; }
620
+ .team-paid-path { grid-template-columns: 1fr; }
608
621
  .team-form { grid-template-columns: 1fr; }
609
622
  .hero { padding: 72px 0 56px; }
610
623
  .hero-actions { flex-direction: column; }
@@ -1164,7 +1177,7 @@ __GA_BOOTSTRAP__
1164
1177
  <!-- HOW IT WORKS -->
1165
1178
  <section class="how-it-works" id="how-it-works">
1166
1179
  <div class="container">
1167
- <div class="section-label">New in v1.16.10</div>
1180
+ <div class="section-label">New in v1.16.11</div>
1168
1181
  <h2 class="section-title">Three steps to stop repeated AI failures</h2>
1169
1182
  <div class="steps">
1170
1183
  <div class="step">
@@ -1403,10 +1416,32 @@ __GA_BOOTSTRAP__
1403
1416
  <div class="team-intake-panel-head">
1404
1417
  <div>
1405
1418
  <h3>Tell us the workflow. Get a proof plan.</h3>
1406
- <p>The highest-fit Team buyer is already feeling one repeated failure. Capture it here instead of making them click through a hidden form.</p>
1419
+ <p>The highest-fit Team buyer is already feeling one repeated failure. Start with a paid diagnostic when budget is ready, or use intake when you need qualification first.</p>
1407
1420
  </div>
1408
1421
  <span class="team-intake-badge">30-minute intake</span>
1409
1422
  </div>
1423
+ <div class="team-paid-path" data-sprint-paid-path aria-label="Paid workflow hardening options">
1424
+ <div class="team-paid-card">
1425
+ <div>
1426
+ <h4>Workflow Hardening Diagnostic</h4>
1427
+ <p>Paid triage for one repeated agent or review failure, with a concrete proof plan and go/no-go recommendation.</p>
1428
+ </div>
1429
+ <div>
1430
+ <div class="team-paid-price">$<span data-sprint-diagnostic-price>499</span></div>
1431
+ <a class="team-paid-link" data-sprint-diagnostic-link href="#workflow-sprint-intake">Pay for diagnostic</a>
1432
+ </div>
1433
+ </div>
1434
+ <div class="team-paid-card">
1435
+ <div>
1436
+ <h4>Workflow Hardening Sprint</h4>
1437
+ <p>48-hour implementation sprint for one workflow owner, one blocker, one proof review, and one hardened rollout path.</p>
1438
+ </div>
1439
+ <div>
1440
+ <div class="team-paid-price">$<span data-workflow-sprint-price>1500</span></div>
1441
+ <a class="team-paid-link" data-workflow-sprint-link href="#workflow-sprint-intake">Pay for sprint</a>
1442
+ </div>
1443
+ </div>
1444
+ </div>
1410
1445
  <form id="team-pilot-intake-form" class="team-form" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form>
1411
1446
  <input type="hidden" name="ctaId" value="workflow_sprint_intake">
1412
1447
  <input type="hidden" name="ctaPlacement" value="team_visible_intake">
@@ -1534,7 +1569,7 @@ __GA_BOOTSTRAP__
1534
1569
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1535
1570
  <a href="/blog">Blog</a>
1536
1571
  </div>
1537
- <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.16.10</span>
1572
+ <span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.16.11</span>
1538
1573
  </div>
1539
1574
  </footer>
1540
1575
 
@@ -1619,6 +1654,60 @@ function sendFirstPartyTelemetry(eventType, props) {
1619
1654
  }).catch(function() {});
1620
1655
  }
1621
1656
 
1657
+ function sendGa4Event(eventName, params) {
1658
+ if (!gaMeasurementId || typeof globalThis.gtag !== 'function') return;
1659
+ globalThis.gtag('event', eventName, params || {});
1660
+ }
1661
+
1662
+ function initializePaidSprintPath() {
1663
+ var panel = document.querySelector('[data-sprint-paid-path]');
1664
+ if (!panel) return;
1665
+ var diagnosticLink = document.querySelector('[data-sprint-diagnostic-link]');
1666
+ var sprintLink = document.querySelector('[data-workflow-sprint-link]');
1667
+ var diagnosticPrice = document.querySelector('[data-sprint-diagnostic-price]');
1668
+ var sprintPrice = document.querySelector('[data-workflow-sprint-price]');
1669
+ if (diagnosticPrice) diagnosticPrice.textContent = String(sprintDiagnosticPriceDollars);
1670
+ if (sprintPrice) sprintPrice.textContent = String(workflowSprintPriceDollars);
1671
+ var hasDiagnosticUrl = /^https?:\/\//.test(sprintDiagnosticCheckoutUrl);
1672
+ var hasSprintUrl = /^https?:\/\//.test(workflowSprintCheckoutUrl);
1673
+ if (!hasDiagnosticUrl && !hasSprintUrl) return;
1674
+ panel.classList.add('visible');
1675
+ if (hasDiagnosticUrl && diagnosticLink) {
1676
+ diagnosticLink.href = sprintDiagnosticCheckoutUrl;
1677
+ diagnosticLink.addEventListener('click', function() {
1678
+ sendFirstPartyTelemetry('workflow_sprint_diagnostic_checkout_started', {
1679
+ ctaId: 'workflow_sprint_diagnostic_checkout',
1680
+ ctaPlacement: 'team_paid_path',
1681
+ planId: 'team',
1682
+ offer: 'workflow_hardening_diagnostic',
1683
+ price: sprintDiagnosticPriceDollars,
1684
+ });
1685
+ sendGa4Event('begin_checkout', {
1686
+ currency: 'USD',
1687
+ value: sprintDiagnosticPriceDollars,
1688
+ items: [{ item_id: 'workflow_hardening_diagnostic', item_name: 'Workflow Hardening Diagnostic' }],
1689
+ });
1690
+ });
1691
+ }
1692
+ if (hasSprintUrl && sprintLink) {
1693
+ sprintLink.href = workflowSprintCheckoutUrl;
1694
+ sprintLink.addEventListener('click', function() {
1695
+ sendFirstPartyTelemetry('workflow_sprint_checkout_started', {
1696
+ ctaId: 'workflow_sprint_checkout',
1697
+ ctaPlacement: 'team_paid_path',
1698
+ planId: 'team',
1699
+ offer: 'workflow_hardening_sprint',
1700
+ price: workflowSprintPriceDollars,
1701
+ });
1702
+ sendGa4Event('begin_checkout', {
1703
+ currency: 'USD',
1704
+ value: workflowSprintPriceDollars,
1705
+ items: [{ item_id: 'workflow_hardening_sprint', item_name: 'Workflow Hardening Sprint' }],
1706
+ });
1707
+ });
1708
+ }
1709
+ }
1710
+
1622
1711
  function initializeTeamIntakeTelemetry() {
1623
1712
  document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
1624
1713
  var started = false;
@@ -1641,6 +1730,11 @@ function initializeTeamIntakeTelemetry() {
1641
1730
  ctaPlacement: readHidden('ctaPlacement'),
1642
1731
  planId: readHidden('planId') || 'team',
1643
1732
  });
1733
+ sendGa4Event('generate_lead', {
1734
+ currency: 'USD',
1735
+ value: workflowSprintPriceDollars,
1736
+ method: 'workflow_sprint_intake',
1737
+ });
1644
1738
  });
1645
1739
  });
1646
1740
  }
@@ -1787,6 +1881,7 @@ function copyInstall(el) {
1787
1881
  </script>
1788
1882
  <script>
1789
1883
  initializeBuyerIntentForms();
1884
+ initializePaidSprintPath();
1790
1885
  initializeTeamIntakeTelemetry();
1791
1886
 
1792
1887
  async function handleProTrial() {
@@ -25,7 +25,7 @@
25
25
  "alternateName": "thumbgate",
26
26
  "applicationCategory": "DeveloperApplication",
27
27
  "operatingSystem": "Cross-platform, Node.js >=18.18.0",
28
- "softwareVersion": "1.16.10",
28
+ "softwareVersion": "1.16.11",
29
29
  "url": "https://thumbgate-production.up.railway.app/numbers",
30
30
  "dateModified": "2026-05-03",
31
31
  "creator": {
@@ -190,7 +190,7 @@
190
190
  <main class="container">
191
191
  <h1>The Numbers</h1>
192
192
  <p class="subtitle">Generated first-party operational data from the ThumbGate runtime. No surveys or projections โ€” this page is a release-time snapshot produced by the same local scripts that power the CLI and dashboard.</p>
193
- <div class="freshness">Updated: 2026-05-03 ยท Version 1.16.10</div>
193
+ <div class="freshness">Updated: 2026-05-03 ยท Version 1.16.11</div>
194
194
 
195
195
  <h2>Gate enforcement</h2>
196
196
  <div class="stats-grid">
@@ -264,7 +264,7 @@
264
264
  <div class="cta">
265
265
  <a href="https://www.npmjs.com/package/thumbgate">Install ThumbGate โ€” npx thumbgate init</a>
266
266
  <div class="footer-note">Prefer the raw feed? See <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> or run <code>npm run gate:stats</code> locally.</div>
267
- <div class="footer-note">Generated at 2026-05-03T16:23:03.917Z UTC.</div>
267
+ <div class="footer-note">Generated at 2026-05-03T18:27:19.381Z UTC.</div>
268
268
  </div>
269
269
  </main>
270
270
  </body>
@@ -2263,6 +2263,7 @@ function getBusinessAnalytics(options = {}) {
2263
2263
  conversionByOfferCode,
2264
2264
  },
2265
2265
  trafficMetrics,
2266
+ ctas: telemetry.ctas || {},
2266
2267
  operatorGeneratedAcquisition,
2267
2268
  dataQuality,
2268
2269
  sourceDiagnostics,
@@ -2349,6 +2350,7 @@ function getBillingSummary(options = {}) {
2349
2350
  newsletter: business.newsletter,
2350
2351
  attribution: business.attribution,
2351
2352
  trafficMetrics: business.trafficMetrics,
2353
+ ctas: business.ctas,
2352
2354
  operatorGeneratedAcquisition: business.operatorGeneratedAcquisition,
2353
2355
  dataQuality: business.dataQuality,
2354
2356
  sourceDiagnostics: business.sourceDiagnostics,
@@ -11,6 +11,8 @@ const DEFAULT_PUBLIC_APP_ORIGIN = 'https://thumbgate-production.up.railway.app';
11
11
  const DEFAULT_CHECKOUT_FALLBACK_URL = PRO_MONTHLY_PAYMENT_LINK;
12
12
  const DEFAULT_PRO_PRICE_DOLLARS = PRO_MONTHLY_PRICE_DOLLARS;
13
13
  const DEFAULT_PRO_PRICE_LABEL = PRO_PRICE_LABEL;
14
+ const DEFAULT_SPRINT_DIAGNOSTIC_PRICE_DOLLARS = 499;
15
+ const DEFAULT_WORKFLOW_SPRINT_PRICE_DOLLARS = 1500;
14
16
  const GA_MEASUREMENT_ID_PATTERN = /^G-[A-Z0-9]+$/i;
15
17
 
16
18
  function normalizeOrigin(value) {
@@ -125,6 +127,8 @@ function resolveHostedBillingConfig({ requestOrigin } = {}, env = process.env) {
125
127
  const gaMeasurementId = normalizeTrackingId(env.THUMBGATE_GA_MEASUREMENT_ID, GA_MEASUREMENT_ID_PATTERN);
126
128
  const posthogApiKey = env.POSTHOG_API_KEY || '';
127
129
  const googleSiteVerification = normalizeTrackingId(env.THUMBGATE_GOOGLE_SITE_VERIFICATION);
130
+ const sprintDiagnosticCheckoutUrl = normalizeAbsoluteUrl(env.THUMBGATE_SPRINT_DIAGNOSTIC_CHECKOUT_URL);
131
+ const workflowSprintCheckoutUrl = normalizeAbsoluteUrl(env.THUMBGATE_WORKFLOW_SPRINT_CHECKOUT_URL);
128
132
 
129
133
  return {
130
134
  appOrigin,
@@ -136,6 +140,12 @@ function resolveHostedBillingConfig({ requestOrigin } = {}, env = process.env) {
136
140
  ) || DEFAULT_CHECKOUT_FALLBACK_URL,
137
141
  proPriceDollars,
138
142
  proPriceLabel,
143
+ sprintDiagnosticCheckoutUrl,
144
+ workflowSprintCheckoutUrl,
145
+ sprintDiagnosticPriceDollars: normalizePriceDollars(env.THUMBGATE_SPRINT_DIAGNOSTIC_PRICE_DOLLARS)
146
+ || DEFAULT_SPRINT_DIAGNOSTIC_PRICE_DOLLARS,
147
+ workflowSprintPriceDollars: normalizePriceDollars(env.THUMBGATE_WORKFLOW_SPRINT_PRICE_DOLLARS)
148
+ || DEFAULT_WORKFLOW_SPRINT_PRICE_DOLLARS,
139
149
  gaMeasurementId,
140
150
  googleSiteVerification,
141
151
  posthogApiKey,
@@ -147,6 +157,8 @@ module.exports = {
147
157
  DEFAULT_CHECKOUT_FALLBACK_URL,
148
158
  DEFAULT_PRO_PRICE_DOLLARS,
149
159
  DEFAULT_PRO_PRICE_LABEL,
160
+ DEFAULT_SPRINT_DIAGNOSTIC_PRICE_DOLLARS,
161
+ DEFAULT_WORKFLOW_SPRINT_PRICE_DOLLARS,
150
162
  GA_MEASUREMENT_ID_PATTERN,
151
163
  normalizeAbsoluteUrl,
152
164
  normalizeOrigin,
@@ -115,7 +115,8 @@ function isMissingCurrentBranchPr(result, prNumber) {
115
115
  return false;
116
116
  }
117
117
 
118
- return /no pull requests found for branch/i.test(formatGhError(result));
118
+ return /no pull requests found for branch/i.test(formatGhError(result))
119
+ || /could not determine current branch:.*not on any branch/i.test(formatGhError(result));
119
120
  }
120
121
 
121
122
  /**
package/src/api/server.js CHANGED
@@ -1648,6 +1648,10 @@ function loadPublicMarketingTemplateHtml(templatePath, runtimeConfig, pageContex
1648
1648
  '__CHECKOUT_FALLBACK_URL__': runtimeConfig.checkoutFallbackUrl,
1649
1649
  '__PRO_PRICE_DOLLARS__': runtimeConfig.proPriceDollars,
1650
1650
  '__PRO_PRICE_LABEL__': runtimeConfig.proPriceLabel,
1651
+ '__SPRINT_DIAGNOSTIC_CHECKOUT_URL__': runtimeConfig.sprintDiagnosticCheckoutUrl || '',
1652
+ '__WORKFLOW_SPRINT_CHECKOUT_URL__': runtimeConfig.workflowSprintCheckoutUrl || '',
1653
+ '__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__': runtimeConfig.sprintDiagnosticPriceDollars || 499,
1654
+ '__WORKFLOW_SPRINT_PRICE_DOLLARS__': runtimeConfig.workflowSprintPriceDollars || 1500,
1651
1655
  '__GA_MEASUREMENT_ID__': runtimeConfig.gaMeasurementId || '',
1652
1656
  '__GA_BOOTSTRAP__': gaBootstrap,
1653
1657
  '__GOOGLE_SITE_VERIFICATION_META__': googleSiteVerificationMeta,