@echomem/mcp 1.4.20 → 1.4.22
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 +1 -1
- package/assets/hud/echo-pricing-free-sticker.png +0 -0
- package/assets/hud/echo-pricing-power-sticker.png +0 -0
- package/assets/hud/echo-pricing-pro-sticker.png +0 -0
- package/assets/hud/scan-loop/frame-01-ready.png +0 -0
- package/assets/hud/scan-loop/frame-02-open.png +0 -0
- package/assets/hud/scan-loop/frame-03-pull.png +0 -0
- package/assets/hud/scan-loop/frame-04-read.png +0 -0
- package/assets/hud/scan-loop/frame-05-file.png +0 -0
- package/assets/hud/scan-loop/frame-06-close.png +0 -0
- package/dist/crypto.js +4 -0
- package/dist/encryption.js +14 -2
- package/dist/index.js +52 -117
- package/dist/migrate.js +38 -1
- package/dist/setup-page/client-core.js +286 -26
- package/dist/setup-page/client-extraction.js +322 -101
- package/dist/setup-page/client-lifecycle.js +46 -44
- package/dist/setup-page/client-report-audit.js +1 -1
- package/dist/setup-page/client-report-city.js +35 -22
- package/dist/setup-page/document.js +1 -1
- package/dist/setup-page/styles-extraction.js +455 -0
- package/dist/setup-page/styles-mvp.js +976 -0
- package/dist/setup-page/styles-website-alignment.js +237 -5
- package/dist/setup-page/styles.js +2 -0
- package/dist/setup-page.js +1 -0
- package/dist/setup-preview.js +142 -37
- package/dist/setup.js +527 -61
- package/dist/v1-contract.js +1 -11
- package/package.json +6 -2
|
@@ -135,21 +135,43 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
135
135
|
.scanMascot {
|
|
136
136
|
display: grid;
|
|
137
137
|
place-items: center;
|
|
138
|
-
width: clamp(
|
|
138
|
+
width: clamp(108px, 14vw, 132px);
|
|
139
139
|
aspect-ratio: 1;
|
|
140
140
|
flex: 0 0 auto;
|
|
141
141
|
border: 1px solid rgba(26,58,143,0.11);
|
|
142
142
|
border-radius: 20px;
|
|
143
143
|
background: color-mix(in srgb, var(--echo-paper-white) 64%, var(--echo-note-cream) 36%);
|
|
144
144
|
box-shadow: var(--echo-shadow-paper);
|
|
145
|
+
overflow: hidden;
|
|
145
146
|
transform: rotate(-1.5deg);
|
|
146
147
|
}
|
|
147
|
-
.
|
|
148
|
+
.scanMascotFrames {
|
|
149
|
+
position: relative;
|
|
148
150
|
display: block;
|
|
149
|
-
width:
|
|
150
|
-
height:
|
|
151
|
+
width: 100%;
|
|
152
|
+
height: 100%;
|
|
153
|
+
}
|
|
154
|
+
.scanMascotFrame {
|
|
155
|
+
position: absolute;
|
|
156
|
+
inset: 0;
|
|
157
|
+
display: block;
|
|
158
|
+
width: 100%;
|
|
159
|
+
height: 100%;
|
|
151
160
|
object-fit: contain;
|
|
161
|
+
opacity: 0;
|
|
152
162
|
filter: drop-shadow(0 12px 14px rgba(26,58,143,0.16));
|
|
163
|
+
animation: scanMascotFrame 4.2s linear infinite;
|
|
164
|
+
}
|
|
165
|
+
.scanMascotFrame:nth-child(1) { animation-delay: 0s; }
|
|
166
|
+
.scanMascotFrame:nth-child(2) { animation-delay: 0.6s; }
|
|
167
|
+
.scanMascotFrame:nth-child(3) { animation-delay: 1.2s; }
|
|
168
|
+
.scanMascotFrame:nth-child(4) { animation-delay: 1.8s; }
|
|
169
|
+
.scanMascotFrame:nth-child(5) { animation-delay: 2.4s; }
|
|
170
|
+
.scanMascotFrame:nth-child(6) { animation-delay: 3s; }
|
|
171
|
+
.scanMascotFrame:nth-child(7) { animation-delay: 3.6s; }
|
|
172
|
+
@keyframes scanMascotFrame {
|
|
173
|
+
0%, 14.2% { opacity: 1; }
|
|
174
|
+
14.3%, 100% { opacity: 0; }
|
|
153
175
|
}
|
|
154
176
|
.scanLoaderCopy { min-width: 0; }
|
|
155
177
|
.scanEyebrow {
|
|
@@ -424,6 +446,7 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
424
446
|
border: 1.5px solid rgba(26,58,143,0.13);
|
|
425
447
|
border-radius: var(--echo-radius-card);
|
|
426
448
|
background: color-mix(in srgb, var(--echo-paper-white) 70%, var(--echo-note-cream) 30%);
|
|
449
|
+
padding: 42px 18px 18px;
|
|
427
450
|
box-shadow: var(--echo-shadow-paper);
|
|
428
451
|
transform: rotate(-0.45deg) translateY(5px);
|
|
429
452
|
transition: transform 160ms ease, box-shadow 160ms ease, border-color 160ms ease;
|
|
@@ -482,6 +505,9 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
482
505
|
transform: rotate(8deg);
|
|
483
506
|
box-shadow: 0 6px 14px rgba(199,55,47,0.24), inset 0 0 0 2px rgba(255,255,255,0.13);
|
|
484
507
|
}
|
|
508
|
+
.setupPlanCard.is-pro .setupPlanHead {
|
|
509
|
+
padding-right: 0;
|
|
510
|
+
}
|
|
485
511
|
.setupPlanCard button {
|
|
486
512
|
border-radius: 999px;
|
|
487
513
|
box-shadow: var(--echo-shadow-glass);
|
|
@@ -520,6 +546,193 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
520
546
|
.readyDecision .actions .skipHistoryButton {
|
|
521
547
|
border-radius: 999px;
|
|
522
548
|
}
|
|
549
|
+
.extractionReady .readyHero {
|
|
550
|
+
grid-template-columns: 72px minmax(0, 1fr);
|
|
551
|
+
gap: 22px;
|
|
552
|
+
padding-top: 28px;
|
|
553
|
+
padding-bottom: 28px;
|
|
554
|
+
}
|
|
555
|
+
.extractionReady .readyMascot {
|
|
556
|
+
width: 68px;
|
|
557
|
+
height: 68px;
|
|
558
|
+
}
|
|
559
|
+
.extractionReady .readyHero .exCopy h2 {
|
|
560
|
+
max-width: 700px;
|
|
561
|
+
font-size: clamp(38px, 4.8vw, 56px);
|
|
562
|
+
}
|
|
563
|
+
.extractionReady .readyHero .exCopy .exSub {
|
|
564
|
+
max-width: 700px;
|
|
565
|
+
margin-top: 10px;
|
|
566
|
+
font-size: 15px;
|
|
567
|
+
}
|
|
568
|
+
.extractionReady .sessionSelectionCard {
|
|
569
|
+
grid-template-columns: 30px minmax(0, 1fr) auto;
|
|
570
|
+
min-height: 0;
|
|
571
|
+
padding: 11px clamp(22px, 4vw, 34px);
|
|
572
|
+
background: rgba(255,255,255,0.74);
|
|
573
|
+
}
|
|
574
|
+
.extractionReady .sessionSelectionIcon {
|
|
575
|
+
width: 30px;
|
|
576
|
+
height: 30px;
|
|
577
|
+
border: 0;
|
|
578
|
+
background: rgba(41,83,186,0.07);
|
|
579
|
+
box-shadow: none;
|
|
580
|
+
}
|
|
581
|
+
.extractionReady .sessionSelectionIcon .setupGlyph {
|
|
582
|
+
width: 17px;
|
|
583
|
+
height: 17px;
|
|
584
|
+
}
|
|
585
|
+
.extractionReady .sessionSelectionEyebrow {
|
|
586
|
+
display: none;
|
|
587
|
+
}
|
|
588
|
+
.extractionReady .sessionSelectionCopy > strong {
|
|
589
|
+
margin: 0;
|
|
590
|
+
font-size: 14px;
|
|
591
|
+
}
|
|
592
|
+
.extractionReady .sessionSelectionCopy p {
|
|
593
|
+
margin-top: 1px;
|
|
594
|
+
font-size: 11px;
|
|
595
|
+
}
|
|
596
|
+
.extractionReady .sessionEditButton {
|
|
597
|
+
min-height: 32px;
|
|
598
|
+
padding: 6px 12px;
|
|
599
|
+
border: 0;
|
|
600
|
+
background: transparent;
|
|
601
|
+
box-shadow: none;
|
|
602
|
+
font-size: 11px;
|
|
603
|
+
text-decoration: underline;
|
|
604
|
+
}
|
|
605
|
+
.extractionReady .readyGo {
|
|
606
|
+
justify-items: center;
|
|
607
|
+
padding: 28px clamp(22px, 4vw, 34px) 24px;
|
|
608
|
+
background: rgba(255,255,255,0.90);
|
|
609
|
+
}
|
|
610
|
+
.extractionReady .actions {
|
|
611
|
+
display: grid;
|
|
612
|
+
width: min(520px, 100%);
|
|
613
|
+
grid-template-columns: 1fr;
|
|
614
|
+
justify-items: center;
|
|
615
|
+
gap: 12px;
|
|
616
|
+
}
|
|
617
|
+
.extractionReady .actions .primary {
|
|
618
|
+
width: 100%;
|
|
619
|
+
min-height: 56px;
|
|
620
|
+
justify-content: center;
|
|
621
|
+
font-size: 15px;
|
|
622
|
+
}
|
|
623
|
+
.extractionReady .actions .skipHistoryButton {
|
|
624
|
+
min-height: 0;
|
|
625
|
+
border: 0;
|
|
626
|
+
background: transparent;
|
|
627
|
+
padding: 4px 10px;
|
|
628
|
+
color: var(--echo-ink-mute);
|
|
629
|
+
box-shadow: none;
|
|
630
|
+
font-size: 11px;
|
|
631
|
+
text-decoration: underline;
|
|
632
|
+
}
|
|
633
|
+
.extractionReady .ctaMeta {
|
|
634
|
+
justify-content: center;
|
|
635
|
+
margin-top: 12px;
|
|
636
|
+
text-align: center;
|
|
637
|
+
}
|
|
638
|
+
.readySettings {
|
|
639
|
+
display: grid;
|
|
640
|
+
width: 100%;
|
|
641
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
642
|
+
gap: 16px;
|
|
643
|
+
border-top: 1px solid rgba(26,58,143,0.10);
|
|
644
|
+
border-bottom: 1px solid rgba(26,58,143,0.10);
|
|
645
|
+
background: color-mix(in srgb, var(--echo-paper-white) 76%, var(--echo-note-cream) 24%);
|
|
646
|
+
padding: 12px clamp(22px, 4vw, 34px);
|
|
647
|
+
}
|
|
648
|
+
.readySetting {
|
|
649
|
+
display: grid;
|
|
650
|
+
min-width: 0;
|
|
651
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
652
|
+
align-items: center;
|
|
653
|
+
gap: 10px;
|
|
654
|
+
}
|
|
655
|
+
.readySetting + .readySetting {
|
|
656
|
+
border-left: 1px solid rgba(26,58,143,0.10);
|
|
657
|
+
padding-left: 16px;
|
|
658
|
+
}
|
|
659
|
+
.readySettingLabel {
|
|
660
|
+
color: var(--echo-ink-faint);
|
|
661
|
+
font: 800 8px/1 var(--echo-font-mono);
|
|
662
|
+
letter-spacing: 0.10em;
|
|
663
|
+
text-transform: uppercase;
|
|
664
|
+
}
|
|
665
|
+
.extractionReady .readySettings .setupAccountCard {
|
|
666
|
+
grid-template-columns: 28px minmax(0, 1fr) auto;
|
|
667
|
+
gap: 8px;
|
|
668
|
+
border: 0;
|
|
669
|
+
background: transparent;
|
|
670
|
+
padding: 0;
|
|
671
|
+
box-shadow: none;
|
|
672
|
+
}
|
|
673
|
+
.extractionReady .readySettings .setupAccountAvatar {
|
|
674
|
+
width: 28px;
|
|
675
|
+
height: 28px;
|
|
676
|
+
border-radius: 8px;
|
|
677
|
+
font-size: 9px;
|
|
678
|
+
box-shadow: none;
|
|
679
|
+
}
|
|
680
|
+
.extractionReady .readySettings .setupAccountCopy small,
|
|
681
|
+
.extractionReady .readySettings .setupAccountCopy > span {
|
|
682
|
+
display: none;
|
|
683
|
+
}
|
|
684
|
+
.extractionReady .readySettings .setupAccountCopy strong {
|
|
685
|
+
margin: 0;
|
|
686
|
+
font-size: 12px;
|
|
687
|
+
}
|
|
688
|
+
.extractionReady .readySettings .setupAccountChange,
|
|
689
|
+
.extractionReady .readySettings .setupPlanConfirmed .textButton {
|
|
690
|
+
min-height: 0;
|
|
691
|
+
border: 0;
|
|
692
|
+
background: transparent;
|
|
693
|
+
padding: 4px 6px;
|
|
694
|
+
box-shadow: none;
|
|
695
|
+
font-size: 10px;
|
|
696
|
+
text-decoration: underline;
|
|
697
|
+
}
|
|
698
|
+
.extractionReady .readySettings .setupPlanConfirmed {
|
|
699
|
+
grid-template-columns: 24px minmax(0, 1fr) auto;
|
|
700
|
+
gap: 7px;
|
|
701
|
+
border: 0;
|
|
702
|
+
background: transparent;
|
|
703
|
+
padding: 0;
|
|
704
|
+
box-shadow: none;
|
|
705
|
+
}
|
|
706
|
+
.extractionReady .readySettings .setupPlanConfirmedIcon {
|
|
707
|
+
width: 24px;
|
|
708
|
+
height: 24px;
|
|
709
|
+
background: rgba(44,143,104,0.10);
|
|
710
|
+
}
|
|
711
|
+
.extractionReady .readySettings .setupPlanConfirmedIcon .setupGlyph {
|
|
712
|
+
width: 14px;
|
|
713
|
+
height: 14px;
|
|
714
|
+
}
|
|
715
|
+
.extractionReady .readySettings .setupPlanConfirmedCopy strong {
|
|
716
|
+
font-size: 12px;
|
|
717
|
+
}
|
|
718
|
+
.extractionReady .readySettings .setupPlanConfirmedCopy > span {
|
|
719
|
+
display: none;
|
|
720
|
+
}
|
|
721
|
+
.readySettings.is-plan-open {
|
|
722
|
+
grid-template-columns: 1fr;
|
|
723
|
+
padding: 0;
|
|
724
|
+
}
|
|
725
|
+
.readySettings.is-plan-open .readyAccountSetting {
|
|
726
|
+
display: none;
|
|
727
|
+
}
|
|
728
|
+
.readySettings.is-plan-open .readyPlanSetting {
|
|
729
|
+
grid-template-columns: 1fr;
|
|
730
|
+
border: 0;
|
|
731
|
+
padding: 0;
|
|
732
|
+
}
|
|
733
|
+
.readySettings.is-plan-open .readySettingLabel {
|
|
734
|
+
display: none;
|
|
735
|
+
}
|
|
523
736
|
.readyFoot {
|
|
524
737
|
border-top-color: rgba(26,58,143,0.10);
|
|
525
738
|
border-radius: 0 0 calc(var(--echo-radius-panel) - 2px) calc(var(--echo-radius-panel) - 2px);
|
|
@@ -751,7 +964,7 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
751
964
|
gap: 18px;
|
|
752
965
|
}
|
|
753
966
|
.scanMascot {
|
|
754
|
-
width:
|
|
967
|
+
width: 88px;
|
|
755
968
|
border-radius: 16px;
|
|
756
969
|
}
|
|
757
970
|
.scanLoader h2.siteHeadline {
|
|
@@ -786,6 +999,18 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
786
999
|
.setupPlanGrid {
|
|
787
1000
|
gap: 20px;
|
|
788
1001
|
}
|
|
1002
|
+
.extractionReady .readyHero {
|
|
1003
|
+
grid-template-columns: 1fr;
|
|
1004
|
+
}
|
|
1005
|
+
.readySettings {
|
|
1006
|
+
grid-template-columns: 1fr;
|
|
1007
|
+
}
|
|
1008
|
+
.readySetting + .readySetting {
|
|
1009
|
+
border-top: 1px solid rgba(26,58,143,0.10);
|
|
1010
|
+
border-left: 0;
|
|
1011
|
+
padding-top: 10px;
|
|
1012
|
+
padding-left: 0;
|
|
1013
|
+
}
|
|
789
1014
|
.setupPlanCard,
|
|
790
1015
|
.setupPlanCard:nth-child(2),
|
|
791
1016
|
.setupPlanCard:nth-child(3) {
|
|
@@ -814,5 +1039,12 @@ export const SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT = String.raw `
|
|
|
814
1039
|
transition: none;
|
|
815
1040
|
transform: none;
|
|
816
1041
|
}
|
|
1042
|
+
.scanMascotFrame {
|
|
1043
|
+
animation: none;
|
|
1044
|
+
opacity: 0;
|
|
1045
|
+
}
|
|
1046
|
+
.scanMascotFrame:first-child {
|
|
1047
|
+
opacity: 1;
|
|
1048
|
+
}
|
|
817
1049
|
}
|
|
818
1050
|
`;
|
|
@@ -3,6 +3,7 @@ import { SETUP_PAGE_STYLES_CITY_REPORT } from "./styles-city-report.js";
|
|
|
3
3
|
import { SETUP_PAGE_STYLES_EXTRACTION } from "./styles-extraction.js";
|
|
4
4
|
import { SETUP_PAGE_STYLES_CONTEXT_AUDIT } from "./styles-context-audit.js";
|
|
5
5
|
import { SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT } from "./styles-website-alignment.js";
|
|
6
|
+
import { SETUP_PAGE_STYLES_MVP } from "./styles-mvp.js";
|
|
6
7
|
// Kept as one emitted style tag so the local HTML page remains self-contained.
|
|
7
8
|
export const SETUP_PAGE_STYLES = [
|
|
8
9
|
SETUP_PAGE_STYLES_FOUNDATION,
|
|
@@ -10,4 +11,5 @@ export const SETUP_PAGE_STYLES = [
|
|
|
10
11
|
SETUP_PAGE_STYLES_EXTRACTION,
|
|
11
12
|
SETUP_PAGE_STYLES_CONTEXT_AUDIT,
|
|
12
13
|
SETUP_PAGE_STYLES_WEBSITE_ALIGNMENT,
|
|
14
|
+
SETUP_PAGE_STYLES_MVP,
|
|
13
15
|
].join("\n");
|
package/dist/setup-page.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { renderSetupPageDocument } from "./setup-page/document.js";
|
|
2
2
|
import { renderSetupPreviewBootstrap } from "./setup-preview.js";
|
|
3
|
+
export { SETUP_PREVIEW_STATES } from "./setup-preview.js";
|
|
3
4
|
/**
|
|
4
5
|
* Setup page entry point. The implementation is split by product phase under ./setup-page/:
|
|
5
6
|
* core utilities, local report, post-auth extraction, and lifecycle polling.
|
package/dist/setup-preview.js
CHANGED
|
@@ -5,7 +5,21 @@ export const SETUP_PREVIEW_STATES = [
|
|
|
5
5
|
"report",
|
|
6
6
|
"extract-counting",
|
|
7
7
|
"extract-ready",
|
|
8
|
+
"extract-free-selected",
|
|
9
|
+
"extract-free-trial-used",
|
|
8
10
|
"extract-limit",
|
|
11
|
+
"extract-pro-trial",
|
|
12
|
+
"extract-pro-active",
|
|
13
|
+
"extract-power-active",
|
|
14
|
+
"extract-team-active",
|
|
15
|
+
"extract-enterprise-active",
|
|
16
|
+
"extract-unknown",
|
|
17
|
+
"auth-login",
|
|
18
|
+
"auth-login-pro",
|
|
19
|
+
"auth-otp",
|
|
20
|
+
"checkout-pro-selected",
|
|
21
|
+
"auth-unlock",
|
|
22
|
+
"auth-setup",
|
|
9
23
|
"extract-run",
|
|
10
24
|
"extract-overdue",
|
|
11
25
|
"extract-done",
|
|
@@ -202,6 +216,62 @@ function previewWatermarkScript() {
|
|
|
202
216
|
document.body.appendChild(previewWatermark);
|
|
203
217
|
`;
|
|
204
218
|
}
|
|
219
|
+
function extractionPreviewBootstrap(options) {
|
|
220
|
+
const candidateCount = options.candidateCount ?? 520;
|
|
221
|
+
const quotaLimit = options.quotaLimit;
|
|
222
|
+
const quotaRemaining = options.quotaRemaining;
|
|
223
|
+
const historicalConversationQuota = quotaLimit == null || quotaRemaining == null
|
|
224
|
+
? null
|
|
225
|
+
: {
|
|
226
|
+
used: Math.max(0, quotaLimit - quotaRemaining),
|
|
227
|
+
limit: quotaLimit,
|
|
228
|
+
remaining: quotaRemaining,
|
|
229
|
+
};
|
|
230
|
+
const billingStatus = {
|
|
231
|
+
plan: options.plan,
|
|
232
|
+
paid: options.paid,
|
|
233
|
+
trialAvailable: options.trialAvailable,
|
|
234
|
+
trialUsed: options.trialUsed,
|
|
235
|
+
subscriptionStatus: options.subscriptionStatus ?? null,
|
|
236
|
+
trialEndedAt: options.trialEndedAt ?? null,
|
|
237
|
+
pricingUrl: "https://echoknows.com/pricing?source=mcp_onboarding",
|
|
238
|
+
account: {
|
|
239
|
+
displayName: "Preview User",
|
|
240
|
+
email: "preview@example.com",
|
|
241
|
+
avatarUrl: "/hud-assets/echo-face-cutout.png",
|
|
242
|
+
},
|
|
243
|
+
historicalConversationQuota,
|
|
244
|
+
};
|
|
245
|
+
return `
|
|
246
|
+
connected = true;
|
|
247
|
+
billingStatus = ${JSON.stringify(billingStatus)};
|
|
248
|
+
setupPlanChoice = ${JSON.stringify(options.selectFree ? "free" : options.selectedPlanChoice || "")};
|
|
249
|
+
stats = {
|
|
250
|
+
sessions: { total: ${candidateCount}, codex: ${Math.ceil(candidateCount * 0.68)}, claudeCode: ${Math.floor(candidateCount * 0.32)} },
|
|
251
|
+
migratable: {
|
|
252
|
+
pending: ${candidateCount}, pendingTotal: ${candidateCount}, pendingCodex: ${Math.ceil(candidateCount * 0.68)}, pendingClaudeCode: ${Math.floor(candidateCount * 0.32)},
|
|
253
|
+
alreadyMigrated: 108, skippedActive: 0,
|
|
254
|
+
eta: { estimatedLabel: "under 2 minutes" }, estimatedLabel: "under 2 minutes"
|
|
255
|
+
},
|
|
256
|
+
candidateSessions: Array.from({ length: ${candidateCount} }, function (_, index) {
|
|
257
|
+
var codex = index < ${Math.ceil(candidateCount * 0.68)};
|
|
258
|
+
return {
|
|
259
|
+
key: (codex ? "codex:" : "claude-code:") + "preview-" + index,
|
|
260
|
+
source: codex ? "codex" : "claude-code",
|
|
261
|
+
title: ["Plan the onboarding flow", "Repair memory extraction", "Review pricing limits", "Polish the EchoMem HUD"][index % 4] + " · " + (index + 1),
|
|
262
|
+
project: ["EchoMem Chrome", "MCP Server", "Memory Platform"][index % 3],
|
|
263
|
+
date: new Date(Date.UTC(2026, 6, 18 - (index % 12))).toISOString(),
|
|
264
|
+
characters: 42000 + index * 2700,
|
|
265
|
+
approxInputTokens: 10500 + index * 675,
|
|
266
|
+
turns: 18 + index
|
|
267
|
+
};
|
|
268
|
+
}),
|
|
269
|
+
discovery: { phase: "account", exact: false }
|
|
270
|
+
};
|
|
271
|
+
renderDashboard();
|
|
272
|
+
${options.showUnknownStatus ? 'setSetupPlanStatus("Plan check unavailable. Original still works.");' : ""}
|
|
273
|
+
${options.openSessionPicker ? "window.setTimeout(function () { openSessionPicker(); }, 0);" : ""}`;
|
|
274
|
+
}
|
|
205
275
|
export function renderSetupPreviewBootstrap(state) {
|
|
206
276
|
const watermark = previewWatermarkScript();
|
|
207
277
|
if (state === "consent") {
|
|
@@ -227,6 +297,7 @@ export function renderSetupPreviewBootstrap(state) {
|
|
|
227
297
|
if (state === "report") {
|
|
228
298
|
const reportJson = JSON.stringify(previewReport);
|
|
229
299
|
return `${watermark}
|
|
300
|
+
localHistoryConsentGranted = true;
|
|
230
301
|
report = ${reportJson};
|
|
231
302
|
reportEnvelope = { schemaVersion: 1, kind: "ready", mode: "preview", scanId: "design-preview", report: report };
|
|
232
303
|
renderForensicReport();`;
|
|
@@ -236,44 +307,78 @@ export function renderSetupPreviewBootstrap(state) {
|
|
|
236
307
|
stats = null;
|
|
237
308
|
renderDashboard();`;
|
|
238
309
|
}
|
|
239
|
-
if (state === "extract-ready"
|
|
240
|
-
|
|
310
|
+
if (state === "extract-ready")
|
|
311
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
312
|
+
plan: "free", paid: false, trialAvailable: true, trialUsed: false,
|
|
313
|
+
quotaLimit: 100, quotaRemaining: 28, candidateCount: 28,
|
|
314
|
+
})}`;
|
|
315
|
+
if (state === "extract-free-selected")
|
|
316
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
317
|
+
plan: "free", paid: false, trialAvailable: true, trialUsed: false,
|
|
318
|
+
quotaLimit: 100, quotaRemaining: 100, selectFree: true,
|
|
319
|
+
})}`;
|
|
320
|
+
if (state === "extract-free-trial-used")
|
|
321
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
322
|
+
plan: "free", paid: false, trialAvailable: false, trialUsed: true,
|
|
323
|
+
subscriptionStatus: "expired", trialEndedAt: "2026-07-20T00:00:00.000Z",
|
|
324
|
+
quotaLimit: 100, quotaRemaining: 100,
|
|
325
|
+
})}`;
|
|
326
|
+
if (state === "extract-limit")
|
|
327
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
328
|
+
plan: "free", paid: false, trialAvailable: false, trialUsed: true,
|
|
329
|
+
quotaLimit: 100, quotaRemaining: 0, selectFree: true, openSessionPicker: true,
|
|
330
|
+
})}`;
|
|
331
|
+
if (state === "extract-pro-trial")
|
|
332
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
333
|
+
plan: "pro", paid: true, trialAvailable: false, trialUsed: true,
|
|
334
|
+
subscriptionStatus: "trialing", trialEndedAt: "2026-08-04T00:00:00.000Z",
|
|
335
|
+
// The server currently grants trialing users Free's lifetime history allowance,
|
|
336
|
+
// even though recurring processing/search allowances resolve to Pro.
|
|
337
|
+
quotaLimit: 100, quotaRemaining: 100,
|
|
338
|
+
})}`;
|
|
339
|
+
if (state === "extract-pro-active")
|
|
340
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
341
|
+
plan: "pro", paid: true, trialAvailable: false, trialUsed: true,
|
|
342
|
+
subscriptionStatus: "active", quotaLimit: 250, quotaRemaining: 250,
|
|
343
|
+
})}`;
|
|
344
|
+
if (state === "extract-power-active")
|
|
345
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
346
|
+
plan: "power", paid: true, trialAvailable: false, trialUsed: true,
|
|
347
|
+
subscriptionStatus: "active", quotaLimit: 500, quotaRemaining: 500,
|
|
348
|
+
})}`;
|
|
349
|
+
if (state === "extract-team-active")
|
|
350
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
351
|
+
plan: "team", paid: true, trialAvailable: false, trialUsed: true,
|
|
352
|
+
subscriptionStatus: "active", quotaLimit: 250, quotaRemaining: 250,
|
|
353
|
+
})}`;
|
|
354
|
+
if (state === "extract-enterprise-active")
|
|
355
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
356
|
+
plan: "enterprise", paid: true, trialAvailable: false, trialUsed: true,
|
|
357
|
+
subscriptionStatus: "active", quotaLimit: 500, quotaRemaining: 500,
|
|
358
|
+
})}`;
|
|
359
|
+
if (state === "extract-unknown")
|
|
360
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
361
|
+
plan: "unknown", paid: false, trialAvailable: true, trialUsed: false,
|
|
362
|
+
showUnknownStatus: true,
|
|
363
|
+
})}`;
|
|
364
|
+
if (state === "auth-login")
|
|
365
|
+
return `${watermark}\n renderLocalLogin("");`;
|
|
366
|
+
if (state === "auth-login-pro")
|
|
241
367
|
return `${watermark}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
pending: 28, pendingTotal: 28, pendingCodex: 19, pendingClaudeCode: 9,
|
|
257
|
-
alreadyMigrated: 108, skippedActive: 0,
|
|
258
|
-
eta: { estimatedLabel: "under 2 minutes" }, estimatedLabel: "under 2 minutes"
|
|
259
|
-
},
|
|
260
|
-
candidateSessions: Array.from({ length: 28 }, function (_, index) {
|
|
261
|
-
var codex = index < 19;
|
|
262
|
-
return {
|
|
263
|
-
key: (codex ? "codex:" : "claude-code:") + "preview-" + index,
|
|
264
|
-
source: codex ? "codex" : "claude-code",
|
|
265
|
-
title: ["Plan the onboarding flow", "Repair memory extraction", "Review pricing limits", "Polish the EchoMem HUD"][index % 4] + " · " + (index + 1),
|
|
266
|
-
project: ["EchoMem Chrome", "MCP Server", "Memory Platform"][index % 3],
|
|
267
|
-
date: new Date(Date.UTC(2026, 6, 18 - (index % 12))).toISOString(),
|
|
268
|
-
characters: 42000 + index * 2700,
|
|
269
|
-
approxInputTokens: 10500 + index * 675,
|
|
270
|
-
turns: 18 + index
|
|
271
|
-
};
|
|
272
|
-
}),
|
|
273
|
-
discovery: { phase: "account", exact: false }
|
|
274
|
-
};
|
|
275
|
-
renderDashboard();`;
|
|
276
|
-
}
|
|
368
|
+
renderLocalLogin("");`;
|
|
369
|
+
if (state === "auth-otp")
|
|
370
|
+
return `${watermark}
|
|
371
|
+
localAuthEmail = "preview@example.com";
|
|
372
|
+
renderLocalOtp("Verification code sent. Check your email inbox.");`;
|
|
373
|
+
if (state === "checkout-pro-selected")
|
|
374
|
+
return `${watermark}${extractionPreviewBootstrap({
|
|
375
|
+
plan: "free", paid: false, trialAvailable: true, trialUsed: false,
|
|
376
|
+
quotaLimit: 100, quotaRemaining: 100, selectedPlanChoice: "pro",
|
|
377
|
+
})}`;
|
|
378
|
+
if (state === "auth-unlock")
|
|
379
|
+
return `${watermark}\n renderLocalPassphrase("unlock", "preview@example.com");`;
|
|
380
|
+
if (state === "auth-setup")
|
|
381
|
+
return `${watermark}\n renderLocalPassphrase("setup", "preview@example.com");`;
|
|
277
382
|
if (state === "extract-run") {
|
|
278
383
|
return `${watermark}
|
|
279
384
|
renderProgress({ status: "running", total: 28, completed: 4, extracted: 19, failed: 1, latest: "preview session", latestRepo: "Preview Workspace" });`;
|