From 907fdea174cb7d9117ebf24761d73d0639bdcc86 Mon Sep 17 00:00:00 2001 From: shsfcx Date: Thu, 17 Sep 2026 17:14:39 +0800 Subject: [PATCH 01/27] feat(desktop): add Mid-Autumn campaign prompt and token credit toast Show a one-time campaign dialog with CN/intl copy, and stack a token-credit notification after the comment-draw reward lands. Co-authored-by: Cursor --- App/frontend/desktop/src/app.tsx | 15 +- .../desktop/src/app/campaign-prompt-state.ts | 137 +++++++++++++ .../desktop/src/app/campaign-prompt-url.ts | 20 ++ .../desktop/src/app/desktop-prompt-preview.ts | 14 ++ .../app/tests/campaign-prompt-state.test.ts | 101 +++++++++ .../src/app/tests/campaign-prompt-url.test.ts | 25 +++ .../assets/campaign/mid-autumn-riceball.jpg | Bin 0 -> 220870 bytes .../src/components/campaign-prompt-host.tsx | 96 +++++++++ .../src/components/campaign-prompt.css | 193 ++++++++++++++++++ .../src/components/campaign-prompt.tsx | 138 +++++++++++++ .../components/github-star-prompt-host.tsx | 3 +- .../src/components/notification-center.tsx | 111 ++++++++++ .../src/components/notification-toast.tsx | 61 ++++++ .../tests/campaign-token-prompts.test.tsx | 127 ++++++++++++ .../tests/notification-center.test.tsx | 97 +++++++++ .../components/token-credit-toast-host.tsx | 52 +++++ App/frontend/desktop/src/i18n/messages.ts | 30 +++ App/frontend/desktop/src/styles.css | 147 +++++++++++++ 18 files changed, 1362 insertions(+), 5 deletions(-) create mode 100644 App/frontend/desktop/src/app/campaign-prompt-state.ts create mode 100644 App/frontend/desktop/src/app/campaign-prompt-url.ts create mode 100644 App/frontend/desktop/src/app/desktop-prompt-preview.ts create mode 100644 App/frontend/desktop/src/app/tests/campaign-prompt-state.test.ts create mode 100644 App/frontend/desktop/src/app/tests/campaign-prompt-url.test.ts create mode 100644 App/frontend/desktop/src/assets/campaign/mid-autumn-riceball.jpg create mode 100644 App/frontend/desktop/src/components/campaign-prompt-host.tsx create mode 100644 App/frontend/desktop/src/components/campaign-prompt.css create mode 100644 App/frontend/desktop/src/components/campaign-prompt.tsx create mode 100644 App/frontend/desktop/src/components/notification-center.tsx create mode 100644 App/frontend/desktop/src/components/notification-toast.tsx create mode 100644 App/frontend/desktop/src/components/tests/campaign-token-prompts.test.tsx create mode 100644 App/frontend/desktop/src/components/tests/notification-center.test.tsx create mode 100644 App/frontend/desktop/src/components/token-credit-toast-host.tsx diff --git a/App/frontend/desktop/src/app.tsx b/App/frontend/desktop/src/app.tsx index 51a6ec6bb..3d3428cc0 100644 --- a/App/frontend/desktop/src/app.tsx +++ b/App/frontend/desktop/src/app.tsx @@ -14,8 +14,11 @@ import { import { AppProviders, useApiClients } from "./app/providers.js"; import { AppRouter } from "./app/router.js"; import { UpdateCoordinatorProvider } from "./app/update-coordinator.js"; +import { CampaignPromptHost } from "./components/campaign-prompt-host.js"; import { GithubStarPromptHost } from "./components/github-star-prompt-host.js"; import { InviteResultToast } from "./components/invite-result-toast.js"; +import { NotificationCenterProvider } from "./components/notification-center.js"; +import { TokenCreditToastHost } from "./components/token-credit-toast-host.js"; import { FOCUSED_AGENT_CHAT_STORAGE_KEY, readGuidanceCompleted, @@ -311,9 +314,12 @@ function RuntimeApp() { return ( - - - {state.invitationToast ? ( + + + + + + {state.invitationToast ? ( - ) : null} + ) : null} + ); diff --git a/App/frontend/desktop/src/app/campaign-prompt-state.ts b/App/frontend/desktop/src/app/campaign-prompt-state.ts new file mode 100644 index 000000000..7d2e440c7 --- /dev/null +++ b/App/frontend/desktop/src/app/campaign-prompt-state.ts @@ -0,0 +1,137 @@ +/** Local persistence and eligibility for the Mid-Autumn campaign prompt. */ + +/** Kill switch — set false to disable the prompt for everyone without a backend UI. */ +export const CAMPAIGN_PROMPT_ENABLED = true; + +export const CAMPAIGN_PROMPT_STORAGE_KEY = "memmy.campaignPrompt.v1"; +export const CAMPAIGN_PROMPT_MAX_SHOWS = 1; + +/** 2026-09-23 00:00 Asia/Shanghai */ +export const CAMPAIGN_PROMPT_START_MS = Date.UTC(2026, 8, 22, 16, 0, 0); +/** 2026-10-01 00:00 Asia/Shanghai — after 9/30, never show again. */ +export const CAMPAIGN_PROMPT_END_MS = Date.UTC(2026, 8, 30, 16, 0, 0); + +export interface CampaignPromptPersistedState { + showCount: number; + dismissedAt: number | null; + actioned: boolean; +} + +const EMPTY_STATE: CampaignPromptPersistedState = { + showCount: 0, + dismissedAt: null, + actioned: false +}; + +let campaignPromptOpen = false; + +/** Whether the campaign prompt is currently on screen (hides the GitHub star card). */ +export function isCampaignPromptOpen(): boolean { + return campaignPromptOpen; +} + +/** Records whether the campaign prompt is currently rendered. */ +export function setCampaignPromptOpen(open: boolean): void { + campaignPromptOpen = open; +} + +/** Reads persisted campaign prompt state from storage. */ +export function readCampaignPromptState(storage: Storage | undefined): CampaignPromptPersistedState { + if (!storage) { + return { ...EMPTY_STATE }; + } + try { + const raw = storage.getItem(CAMPAIGN_PROMPT_STORAGE_KEY); + if (!raw) { + return { ...EMPTY_STATE }; + } + const parsed = JSON.parse(raw) as Partial; + return { + showCount: typeof parsed.showCount === "number" && parsed.showCount >= 0 ? Math.floor(parsed.showCount) : 0, + dismissedAt: typeof parsed.dismissedAt === "number" ? parsed.dismissedAt : null, + actioned: parsed.actioned === true + }; + } catch { + return { ...EMPTY_STATE }; + } +} + +/** Writes persisted campaign prompt state to storage. */ +export function writeCampaignPromptState( + storage: Storage | undefined, + state: CampaignPromptPersistedState +): void { + if (!storage) { + return; + } + storage.setItem(CAMPAIGN_PROMPT_STORAGE_KEY, JSON.stringify(state)); +} + +/** Whether the campaign prompt may be offered on this app open. Login is not required. */ +export function shouldOfferCampaignPrompt( + state: CampaignPromptPersistedState, + nowMs: number = Date.now() +): boolean { + if (!CAMPAIGN_PROMPT_ENABLED) { + return false; + } + if (nowMs < CAMPAIGN_PROMPT_START_MS || nowMs >= CAMPAIGN_PROMPT_END_MS) { + return false; + } + if (state.actioned) { + return false; + } + if (state.showCount >= CAMPAIGN_PROMPT_MAX_SHOWS) { + return false; + } + return true; +} + +/** Surfaces that can show the campaign prompt after boot. Login is not required. */ +export function isCampaignPromptSurfaceReady(input: { + startupStatus: string; + currentPath: string; +}): boolean { + if (input.startupStatus !== "ready") { + return false; + } + return input.currentPath !== "/pet"; +} + +/** Records that the prompt was shown (counts toward the max of 1). */ +export function markCampaignPromptShown(storage: Storage | undefined): CampaignPromptPersistedState { + const current = readCampaignPromptState(storage); + const next: CampaignPromptPersistedState = { + ...current, + showCount: current.showCount + 1, + dismissedAt: null + }; + writeCampaignPromptState(storage, next); + return next; +} + +/** Records "maybe later". With a one-show cap, this does not reopen later. */ +export function markCampaignPromptDismissed( + storage: Storage | undefined, + nowMs: number = Date.now() +): CampaignPromptPersistedState { + const current = readCampaignPromptState(storage); + const next: CampaignPromptPersistedState = { + ...current, + dismissedAt: nowMs + }; + writeCampaignPromptState(storage, next); + return next; +} + +/** Records that the user opened the activity site — never show again. */ +export function markCampaignPromptActioned(storage: Storage | undefined): CampaignPromptPersistedState { + const current = readCampaignPromptState(storage); + const next: CampaignPromptPersistedState = { + ...current, + actioned: true, + dismissedAt: null + }; + writeCampaignPromptState(storage, next); + return next; +} diff --git a/App/frontend/desktop/src/app/campaign-prompt-url.ts b/App/frontend/desktop/src/app/campaign-prompt-url.ts new file mode 100644 index 000000000..a1d4c25d8 --- /dev/null +++ b/App/frontend/desktop/src/app/campaign-prompt-url.ts @@ -0,0 +1,20 @@ +import type { ResolvedLanguage } from "../i18n/messages.js"; + +/** Official activity page URL for the current app edition and language. */ +export function getCampaignActivityUrl(language: ResolvedLanguage): string { + const international = import.meta.env.MEMMY_APP_EDITION === "intl"; + const envKey = international ? "MEMMY_LEGAL_INTL_BASE_URL" : "MEMMY_LEGAL_CN_BASE_URL"; + const baseUrl = (international + ? import.meta.env.MEMMY_LEGAL_INTL_BASE_URL + : import.meta.env.MEMMY_LEGAL_CN_BASE_URL + )?.trim(); + + if (!baseUrl) { + throw new Error(`${envKey} is required.`); + } + + const localePrefix = international + ? (language === "zh-CN" ? "cn/" : "") + : (language === "en-US" ? "en/" : ""); + return new URL(`${localePrefix}activity/`, `${baseUrl.replace(/\/+$/, "")}/`).toString(); +} diff --git a/App/frontend/desktop/src/app/desktop-prompt-preview.ts b/App/frontend/desktop/src/app/desktop-prompt-preview.ts new file mode 100644 index 000000000..52da39982 --- /dev/null +++ b/App/frontend/desktop/src/app/desktop-prompt-preview.ts @@ -0,0 +1,14 @@ +export type DesktopPromptPreviewKind = "campaign" | "tokenCredit"; + +/** Dev-only query `?previewPrompt=campaign|tokenCredit|all` to force-show desktop prompts. */ +export function isDesktopPromptPreview(kind: DesktopPromptPreviewKind): boolean { + if (typeof window === "undefined" || !import.meta.env.DEV) { + return false; + } + try { + const preview = new URLSearchParams(window.location.search).get("previewPrompt"); + return preview === kind || preview === "all"; + } catch { + return false; + } +} diff --git a/App/frontend/desktop/src/app/tests/campaign-prompt-state.test.ts b/App/frontend/desktop/src/app/tests/campaign-prompt-state.test.ts new file mode 100644 index 000000000..cafa034a5 --- /dev/null +++ b/App/frontend/desktop/src/app/tests/campaign-prompt-state.test.ts @@ -0,0 +1,101 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + CAMPAIGN_PROMPT_END_MS, + CAMPAIGN_PROMPT_MAX_SHOWS, + CAMPAIGN_PROMPT_START_MS, + CAMPAIGN_PROMPT_STORAGE_KEY, + isCampaignPromptSurfaceReady, + markCampaignPromptActioned, + markCampaignPromptDismissed, + markCampaignPromptShown, + readCampaignPromptState, + shouldOfferCampaignPrompt, + type CampaignPromptPersistedState +} from "../campaign-prompt-state.js"; + +class MemoryStorage implements Storage { + private readonly data = new Map(); + + get length() { + return this.data.size; + } + + clear() { + this.data.clear(); + } + + getItem(key: string) { + return this.data.get(key) ?? null; + } + + key(index: number) { + return [...this.data.keys()][index] ?? null; + } + + removeItem(key: string) { + this.data.delete(key); + } + + setItem(key: string, value: string) { + this.data.set(key, value); + } +} + +const duringCampaign = CAMPAIGN_PROMPT_START_MS + 24 * 60 * 60 * 1000; + +function emptyState(): CampaignPromptPersistedState { + return { showCount: 0, dismissedAt: null, actioned: false }; +} + +describe("campaign prompt eligibility", () => { + afterEach(() => { + vi.unstubAllEnvs(); + }); + + it("offers the prompt during the campaign window", () => { + expect(shouldOfferCampaignPrompt(emptyState(), duringCampaign)).toBe(true); + }); + + it("hides the prompt before start and after 9/30", () => { + expect(shouldOfferCampaignPrompt(emptyState(), CAMPAIGN_PROMPT_START_MS - 1)).toBe(false); + expect(shouldOfferCampaignPrompt(emptyState(), CAMPAIGN_PROMPT_END_MS)).toBe(false); + }); + + it("is ready on welcome, login, and signed-in routes after boot", () => { + for (const currentPath of ["/welcome", "/login", "/main", "/onboarding", "/settings"]) { + expect(isCampaignPromptSurfaceReady({ startupStatus: "ready", currentPath })).toBe(true); + } + }); + + it("waits for boot and skips the pet window", () => { + expect(isCampaignPromptSurfaceReady({ startupStatus: "loading", currentPath: "/welcome" })).toBe(false); + expect(isCampaignPromptSurfaceReady({ startupStatus: "ready", currentPath: "/pet" })).toBe(false); + }); + + it("stops after one show or a site visit", () => { + expect(CAMPAIGN_PROMPT_MAX_SHOWS).toBe(1); + expect(shouldOfferCampaignPrompt({ + showCount: CAMPAIGN_PROMPT_MAX_SHOWS, + dismissedAt: null, + actioned: false + }, duringCampaign)).toBe(false); + expect(shouldOfferCampaignPrompt({ + showCount: 0, + dismissedAt: null, + actioned: true + }, duringCampaign)).toBe(false); + }); + + it("persists shown, dismissed, and actioned states", () => { + const storage = new MemoryStorage(); + expect(readCampaignPromptState(storage)).toEqual(emptyState()); + + expect(markCampaignPromptShown(storage)).toMatchObject({ showCount: 1, dismissedAt: null }); + expect(JSON.parse(storage.getItem(CAMPAIGN_PROMPT_STORAGE_KEY) ?? "{}")).toMatchObject({ showCount: 1 }); + expect(shouldOfferCampaignPrompt(readCampaignPromptState(storage), duringCampaign)).toBe(false); + + expect(markCampaignPromptDismissed(storage, duringCampaign).dismissedAt).toBe(duringCampaign); + expect(markCampaignPromptActioned(storage)).toMatchObject({ actioned: true, dismissedAt: null }); + expect(shouldOfferCampaignPrompt(readCampaignPromptState(storage), duringCampaign)).toBe(false); + }); +}); diff --git a/App/frontend/desktop/src/app/tests/campaign-prompt-url.test.ts b/App/frontend/desktop/src/app/tests/campaign-prompt-url.test.ts new file mode 100644 index 000000000..168ce0466 --- /dev/null +++ b/App/frontend/desktop/src/app/tests/campaign-prompt-url.test.ts @@ -0,0 +1,25 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getCampaignActivityUrl } from "../campaign-prompt-url.js"; + +beforeEach(() => { + vi.stubEnv("MEMMY_APP_EDITION", "cn"); + vi.stubEnv("MEMMY_LEGAL_CN_BASE_URL", "https://test.memmy.cn"); + vi.stubEnv("MEMMY_LEGAL_INTL_BASE_URL", "https://test.memmy.bot"); +}); + +afterEach(() => { + vi.unstubAllEnvs(); +}); + +describe("getCampaignActivityUrl", () => { + it("uses the CN activity path and language prefix", () => { + expect(getCampaignActivityUrl("zh-CN")).toBe("https://test.memmy.cn/activity/"); + expect(getCampaignActivityUrl("en-US")).toBe("https://test.memmy.cn/en/activity/"); + }); + + it("uses the intl activity path and language prefix", () => { + vi.stubEnv("MEMMY_APP_EDITION", "intl"); + expect(getCampaignActivityUrl("en-US")).toBe("https://test.memmy.bot/activity/"); + expect(getCampaignActivityUrl("zh-CN")).toBe("https://test.memmy.bot/cn/activity/"); + }); +}); diff --git a/App/frontend/desktop/src/assets/campaign/mid-autumn-riceball.jpg b/App/frontend/desktop/src/assets/campaign/mid-autumn-riceball.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2021a1e7fbd57e5857d2f28e406c27737732e744 GIT binary patch literal 220870 zcmb5VbyOT*@GsafI0V<=ZoxgcJA*p}cXtWy1fQTmlHl&{K?VtsU?F&L8{BpIzTeq> z`_J2Rw%R^@tGeoTojG@^>fU}?cv%OqmE;uV05~`RfP3A5mkqcDMQP~|>Y89VMHSiq zVT=H;gun>^&Msaan(|Uq`UZwn$m{>}#D6?tBjW7j{hzJ>=)WFgSi9(GyG_L&;;ZGssG;p_5PJyzXO2a z6##%z{&$;2HUP9n0RZvh|8ArE3IJG<0MIh^zuW$|Pu$Es%>S1tmjb{W z0|3DL1psJ9|BLr}`akrI>Xk+I+Ar7F%@%M1tN|)O5pV%40rpqK4R8Wn0RPJpAPs=v z;s4uT3E_1|L_tJEKtM!8Mn*!xK*PX5M?*({gNcj%1``Jp9UYqx8wU@cfPer4i-?#I zpBNXP0RKNFaG=*`5D-xj5mE8qpufTY|4lD_01gTQ0MY@$(E#u`a3CDGmqCF1)!&G4 zuk?SvEPwzHLPSDFfdf!q*(%roJRArFj|l&29S#`|9t#d01R&rb;!-1VA>+|VYM8sD z;B$x3N~L}y(5&zO%|l2hZQ=3n6qP8PH|>m=UQ5REJAvNjw@2b0qiFS5x0!t|m0Vg=lP3#K=mnTF7?8`ir#&(vD7ux3R&{v*{B7vTo(?iOUjWH5 zAEFmPSoc#vq=`hBd%Gg?>X$h>uD^F(xTx}WOA%|K4uuvChI&^UyhM@0Dp zlom8$b6=oaP`+;?K{#!f*m9{+S7$Lu2W_d*Y=R*zfoHuFb*bn(W=k&UAj?bu%k$ca z{NdZ`=%}y8rVfom1X-HKKP8MUTj#%CUiNg&xTFcGeW6R-bEkMJu;!au758(WPh9|4 zjL!0SBc)@VQ6Q7P#d&s)2uGgoEdB?b^;n`%`S&Gk^;x=g-0SCEUJNRieC1Z-rzfR9 z#@%gci?aG6!%Ux!xZRStTy_~ zdm4w>o-nefF!E+0=y16sa-o|((d!(*A{wntyAZLnnQ+J9KTMBaGC6n>4Q6L6dB>BX z8AKN(>u7?!!B(mXa?<(QnVczi^a5Bu|x=FW8x=@+QZIqT4C^ax>F(}8V}AiuhW zLTZ#Mi}lAvk0!c5Mm-7MFfIfg^l}{C=|6K-9R2(8&O*QF^e{xWdi3|i{GaPZrA~SB z*|zkjd9Kmtx$=GS7!E8LZ)dk?6GUJKnMaxVLVdGCpmoAl_fL@GzoQP*>hirmEWcFh zS7J9WkUuZ;YWTRTOG^C;T3H-+6ykrUee(9fx#VCnh34xe?+)X^&qz{&##qVaS+zK4}bTs{jKYDM2YnRcnW9mVg#_Pfy&$AmGKOo6L=h2;AxKlzyUqntNb0{^JE$l+z*CgHx->y&ODc9M`#8gS z61AQ~sXlXbrQl;sGd8heZ2tKLC@bj_JBXHj0>s2TEr@tmKI)eH??FeD&i3e{qKIwrwe;-E@ zWxy~ZL>~lZb^l?UfR5T(YWy`TqZ~X=6sGUf5SwPTetx2RSDtuQkS-3>^9wRH_8=9= z?k%`eFCKEdu^BS|ISQ-~Prq)xp%pSvxQwQzNhsG>FMbZ%h7dlKC0oxO@9D zagWgX`w`ePQ)d0`@B99%2nV|_AvfNE6W_{G@U}=8$tg`=C-yvw_*g5!ATDGYYr=m! zHO6wPu88+bD5!Tr80&zRx*a;~*ut6_HJgho-y_SExqx(xGCCD-Hp|M7CB)iDJICF4wV=W(a6S2;O08$U|D;b`3Q`m>?KFeri!q~MDuR&r)!v!IpDNz*T`1t6E#LIP z6fca^B&c$8AJ8r$X-SZu9EaUd86%FECI2w`GPZ55wtL*crC6ULw>ZN7A=6UgXPOQr zi9WM#dHWnG+)opX4`FP&@8)}&PIN5eyElhzeGFpyG_*u){H6;h9$SvC-(>+7@7mx2 z&LQ`oB9CIB`q|kX(-Qb+2}Ctj90+f(Q6s1k>Idqkfu*vv8$Sf?%V6FPV>vhq3XZ_0 z@b$J8Sma1)+jt|R`WTeUoUY05YB7=qH(T#D&|Q!Fu!X}EnKRIc@M*O683aECWcl2d zhGZpAi`nm~(@9f3KVP1;8Xzg4iK(J|mcY|sW)%GK0yL8pFj)$7b0YHA)v0G)rltkU z;%2~T(!N3xk_3ln^BUF#Ov@l>^<~7H_)$>{dC;|`ZW0V($$sd_5FUAx1s82VZ?hb` z9Gu*pYVHNJx0&@ER_B7;wo^>oYL6WX_kiVa<%H3IIJ&YVI8s6s31eY)T9hB)ggQNH z?K|j2L?myET`?18RY~}W1b;^q` zDnzln2`;|QrQUM)=X7DV_(()Wbp(eyB2 z30GtZI%kgkQGdlq8y~djtcj#gt{xCGh0G9Y_X5O0atj5Zz&t%5PmJF~I>; z%w;5-7pT+<;=Clwi3_PWm9B=DVvWBHo8FtYJG?uwYK=dV-YG0#*IA8Br-PS7MovA^ z$)*u6dhiw8X(L^xqiw+8QREP@+=#=J*xEW%^m9WUb`ukxCWvnl*C^zj#`$2Z;IkEw z*-FVflAe&8fR!+_v8o&=H#*OIQzIW6D>`<|#YXIa~p1AXD! z=u}M_33XPF;zg-)!>((~^$=Wtq%5339qywgnkvh%bPoggzico0`nb z81$3R5w(~H)V;GW!9~U-%~LvM6=c-UI2V6Lqo?IR>R0>Un)fsLEwSx$r1XO z_vd+9%c;T-uWp=5zo^P9#Lq3(R7ngY7I1wJ+BA2+lBFW(WIR?XEG~+##PXVR?9GxC zKHEC<3f`5K{hU6@9J{JVBNBN6N|j8(R|G%JLyho1zrVV4v(Una+!)hqKPrU>Y5qWE zkJU|5*Ry*v*r;+JVAA$Mr@HF!VSvLw83g)69a%-b|rQ8GIz!_FPRUtLqY*@g%D zlUc8JvQw15yQxCoI90K#A7s-SH2slm4$lRGn+*;KlwpbY@jcU$cgIXmE;bnlgRUa9 z)(Wr*`PIR5>27%nGuUF8D0^~CLhIj`hnyG<;A zUq`c1tkk>}Vs~E1R&mS?1v`boOjNClNr}IOHgd~_BHOHVQZg?8*){1^U$qleU#$Kd zJ%3HwlEMFBTR8c;rgBD{sN)S(m2j5#p{==W1L((%j@P^A_oED`zfJ!4Glm!pj{j>E zHd(m*0(8F1R5_@>8`gSUiMzbig`PPoPTxOh><1Z2TED+@w&!t6i&6K19C^xLsUG3k z2`qkeVy~^S@LO*oW@Dy0MRezgGjaC+W1`_*ZOpPX%B5aE>?f-c1w3`{ljHokUsLmr zN@^we+3IQ70I(@{y&EkqTF$ujbc`>-yX~XP5QQr2d-*G(y+3G~xTTI1C3# z1ueahk}F~BJUL6R4M0(QxH$7d}8@8!HhOg?>!;qCPQZBEo38WrU_l3>#g;7X;0=2I-hapcYZfyx?$^j z@@toQ`QI!n?DuU0tTE~0ZYrTkoWU_7K@JZH8K zu~i21zaSS^*&<^ut>eLuaLO+LHDrz^x!6*^rO(qxi0(d^6oDs>kSuv3ed#!;M_H~t zuD+QB9&S`*=j&ApLOhAgXrqIZuv9^Uo|so_Vm|fl1aF5}me&)BWh`m6l3<)Q!se@k z823&1{_U#J=VzDL4<(KyAlln(7rFW{Zsq0_9t6ENO_A}(e0y@7xEBDqN3;*i`uS}` zZl-h=b}3`H*D;?x(`aI3C|j{CkCVn~&OV&7DJ)5qFi$!gWd5gz(L{2Z$Ez6%He78J zlSX25)84hW0MNJ~*EL_K-{+4}RL$PIX#O@a`2G`R+XRKY2W4cV%fw?o$kzkkC-xX8 zd0wmu<755I<76z62WodW*7tqtU<3M^*Yu;t@hqaB&2iuZYE3}&j83!iI6aoHYhz+$ z*q*Bg&)J0aT9i1dbC=#hXI@}AZIHY|gV|eV{Zx_C6w*Cp!Tb1wHA)ehLon&Rc~c;p z(v-ySRWR4%kUd=+Z8|bBTKg`DPxF!Y*1yV6dd4sr?2Unz>E^)A>6fIbO+{c9)KAdx zsrEf)9G`-SFU1n}%*op6#vG{5Bz2aUY}yiZT7Oi>F$|8#5s%KZEHd%Bs#vh^7;02- zR==l7Cw_F^>$_)~dAgxi`0Lv4ZF*B2akITa#t9>-Hka5}ZogZ;rrW@cBb%Yb znNrUJ=C5Fy(FMHG#W0qbaxa5s<+MJK++|xjCh59mOQ2>XUEMo3)DhrMEyco=;PvRu zx2`{WKQ8iF{|qlzXtd^8bo{ZfZ#0-+v@?Qv#OeCs z59^dLOT{kazEbh@W^i!YYjB2-sVIYk6Qu@(AyvANv;~^5?trTD6j0#okVTn)60}Wy zWJ`LGQ=UK~+0wyCYgzUcO+>Y~E?tqU`c>TZuic8?&B0+wx2d3%AIGD$n&lg>q_BCLDs5y+MbMBbU&IQf+g!3kO~jL-wPMyh;*QUnR1f zgU`K7g(>W7((>R#!m0m&;K=1e?&ki5f+{+yM5C;pHN+eR$#Zmwff1mr4KTTc`3KT< zx%j+OD$|(iBg3jIu{5*lp9*G{+eb5k8FTjSUglhrz~ky=h>x-EEBIa}#NQ$&4iFCD z-OEyMdxVU?4%xXF?LsGu*@~Eb-#p|mzw4vIA!b<;-%tA>lHa|?h~9L~m()opeUyd) zis6hOTl|aCbtKzkg@(mg`=ezSgAaoCB~0uS8hQAacMr9Qt{0u&2WQ{evwzSW__CFa zFHh=ni83POs)jl#1k)I~MGkfRbp#b15t+7Mg?V2qR1SVpIaZ$|m{s3-;w zbMAHR0Vv4}pya;h6_>f}zXDOXKyh+`t;Ri;FY06Ijf$4nGSNN-?tD?yOm7XJ^gwo+ zu7(JIX?TQ~4#$Y(Z*=>s;H(FpnH=kJC=8IjM(TWfauBwD!MmGc$irA zt)nr?X-A}?l3kd-v+4zAqG^bcU_30y;O3NN3? zCPc9TFdK-HPQTq>xobo35)Yg(&`Ia{~cv2_39-KrB zv&gL}0l{g&Fo|xVn1h^?Lpx^vNET}oB%-sMoIJD@4SE~#_`OQQ-XY9y0F>8fo1F8x zdAeF1`I*{$^vA_bS@KAc&5%R>qSqJjY3Rr#{w}`CdxCyBh_IY!_j9^WjA|GK?UCD@_HX|qf%Ulj_C$=}Qo^ZrQ z8Ncr+cv;)fliIkU(B@7TPm}98(&BX{B%mECQ}#WVH88jTF_XPH-=y0q&ODX9OaIw% ztBbJd;DcDT3SMOk{dP<;U+61aSH zEZRk`YpUjY5ucRNY*wEqxBG|TScf#P)&?jI_YT|a8TN@t96eBnNb)R6hPx#1gUd^C z)x4_Un*6Eh)8&@Uwq{&yx1unm^$ft3xzH@Cn=3%+}R{N6J+Hy(M}Y658g|!HQ?09AJl{iE^?$ zcuUvuG z5FZG7c3?P|Kt)qeND?4R(9W2$Q%g!0{U%z6a!jm#VdM-T3Yr&`SIT6dZ^J<3cV*>H z+4?n{?#qGNC8KtT@$k<=46a-&TNYnkJe1uRJf*%ntCJ$!JZNv#Wo5aj-imB47FwG` z)(BtsmA~PSltNQ>XJ%{LT%x$-ou`(x-U=6<4Ff1Vh&A=O)ZL*icHc0{{%(@0p{yjK z@D6IQT9f}6Q5fhnNB+3`p#3=oRf{SYGx!pJ{yvCWfWivQ?DMUh$B?i{#Ab^$wcECM5`3WD>}%1qK(6lu zBRqk~@h-@j{da6)V^rVPbVSES-bftr4P)Ur)xCl2>OVzE*Ej7`6{hTfa-Ip>|ysK>6knq5w3;YugPlm{*yIu`8niU_q zXZuTTsD+~|xRt^xKC?XT?NZTB-$!y+?kL=nS$st-f$@XGGf5u#2~pP0=j86t9?mA^ zePXEXH32Jwsz&qf?+<3j1Vc@3=!92t-2;Ii=e;+^rEPKoSyB=?`(FTdxQ!0-N1g-H z3GN_8-qHMdKEygvKTyWfa(v%M??yJu(jzn4i?gPXeLnw02&NhnPS;!by%ncQ5896g zNJFj-<9w=?7meIfD4K2|7doE?tZfgZPabiFuD5hFU?R;J5tv=;fpeV$J{*-}dP1C! zK@Oc%aOmOLNs4(z)mVD;t~84RiIL2_6Gy!__-J3L%%MGw3ZoG(}s^bg1^o=lm`$B_x;67&#~ZWDXhw-vDIFB*#B><+p6HC&kc0G zCo(pX+7Hq{tL=3DsXUGAnxRE}AVfjm8ywq`aZ?{`vpUb%&XxaDkJR&=+cSP>L$h(q zV{11jW5)XshOQZZ0q)EgJ0@IC>)Y0+d=6CSakm;9$RN%uovEJolSusSS9wf`-wr$((led<&KK9wgqUgG zt`B71?~>ea#61f5#rXaXxNa<48K7S#s*g&AzB_jr0qqKjJDg!Xk)}s|;=SWFM*a+1 z9ex4S;4cZi7k2Xnztv&UCA$zAdCRNVcY|#ivV+i-@qFwS3aRgO$s&x&H=yz>m&vj3 zqoc?!4&)eg6PMm?6I)9M$$IOl``zBKR2CaND>U41<-V3uL){C$hvp64bFp|O96G@cFn#Tl_l z4PJn}-i_GPPZh~BS1U=K>;;}du5jj5Vd&Vz*b3Jp6ZRJ!#1rvOU1k0LgvcHeOWrzI znl?Oz!(mVb;R4ICC;q0o8M)*a`_E#-)%oy7s4EGCra*#xzT*#>pW+f4b{7_w84Gl?)RTW$l&CvP1Vlw^o zp}2ZDwdU^%lgUq9GmH>#M%tSytuxP!S~-pwfo=iBm0ER2-=rSHz8{kI&0*YxWT1pl zo_xoYk5>C_T>@v8x{QLUr;zH}3wI|>RUPzQ!pr&^~i^;9{7kq;pODRp6zt4By!4!Yq=%DPGM zhk?fsi-b25g+48oed4qm9pZ(}FoCk_>f+{Xo6vOJazQJ`HrmB@b_4EpCMwVn_|jI- z*ek!8{HK#@CwU_@pCn{UH?ZO|+Nyq9iunbo$V>dZxBT{*$bL`8-b9vEi5O}_pP`zY zR+gY9wyuYA;8DH3J@F#|p`o$thJRDI*Bcq5szqU;=!6(SqqUzCzjC+Ui5u77yTL*k)$Q`CXwvb&SQ$v<-3)|R7+&+!8@q?zlT`Ifd=#uVLbg2Lo$Kzs)c zaNgivDWjb^QP}S1AE8<7EeksXXZ_5YDxwTvDoYI|UPNLBY$+)zd1o5b(=q5n5#WI* z?UQY(0?CzQIp#j8B)Db2A?%dV?Mi2AEYhkUGnumn!;uCE}7i%GM*GOFa#4R{Po# zZ*n}bgQK6lZ`SrwU3qQYo;2Rmd@T?wR)SSY<$;u|a$q4f@R{FUjt#VR# zn&^?+3Y*?_J=w#uL$Mg=1Hf9(kz*lg?wiPnV4rc|PS=INSw7fO-YHtV?Lcg_14rsGy(e((J-At|2!z%#=ZO3*DhAUTL3IwD4sWgMdBQ*V_2JjA`!AS7xIeQ3Mm}NE2`#>aBMYBA}~MzG^k$Gt0O8^BJu6E^On5)JPsA$=TF& z+mlCDW@ea7e`bpMIlnpO;*-@sl?nZ(mm|wxxTcyd>6rDH!wRiUuoO*h=3xP)bvHud zMZfo(`9J)+=u-zZ-GkkPwWB}NVB@kArS3zA1n{Y2s0u;_pPN)FcfKd-H0Cs4Vo5rf z1kL8SgcUA+sn$}@l6J+Wa-~At9z!d*Yd6IHV_NwzGMWoQz1XEy&Byb0l$jdN3FGWY z%yAvTf%7lLU1>?2nQtU_n=WfN)|-fgky*GGB zz74w+Tk+1$ri546ijz{g>yMNX${+r5(SIKr0zE#X1p<`Ct1JloM?Dp%7_~w%tRqZKU-UHdMme=`RLpT6#>+v`9dPcC0K1zTO z{5W^`gCYl_c1Eh!G<&qTxI;CKQbS}vVv703Rg63&dhIeen;|I`YDJ@iN+J3Vnd-@N zwbb>JR8-1Qx$=w24ZnwfiV`L{rZDIMO!6S1f0U zw}2}?U4DA|=2x;k#{0<>Z{If%zMr+7z9VQ7_>*Dt^&NVj=&qGR0j$|;@PQ!imQbP@ zsf*I%aTD~=P>atbShwtNwJ3qtqQ_wPcXo(^k1-<>tEviH>i zp_7N-^Hc2!5?05IzAa1!g&(-^;U!?Oe7jG+R&A-d0Rrn-@m211wZQjI){^fRm-%^k zOiLI{`W%z}Q}>#e`s!<_S%lp3oV)eA%|XQ$VwuyX^qjq08gQsd_dSxWq^Ht!^+Ga_cu#FYiNz#ql$?F`(XNhQ( zN4H%S{SA7ScghT#$5%}Fms6JrE{#ZPsEFdG>JDXGHA6a^ecFqhuVT_Hd+7PW8l* zsK&SbJ3NgyUjx(i_DvJo4^Y)dRGYtT{oIVWq-1De&)pwk`x-qt#&+lYsmVHy&-`?E z!11^|L?n6CJ~bTU9D`=_v2gY4N9i+H#XY^Y-vQ=?_b~3X19l`(;3g%dnppFvk;##R znWual@1?pMdPnLZ=zgl-bOE&e8cx9*aVPFyliZ1+RnHu;%^Ok7lX~%sr4wx!Db&a+ zRKCn!hS>s~)*nW4%LiFI$TS@K*(#vfJa|slm6n@k#~dcbl?pM`4<;Wzt)y8#F%|nH zoI1~t`T|U!x6a&|u>I>Ir`^=;<;(4$Omm)9JE>!4!J;U>6PugXePXjNU6ggTcErGe zYu4li;2!kQZy7guZq4U85432F^+%#fvn)j#DBZ7+Q%$7Hg4y5GDl{t|5k9E5yLmdL z94+0jK`$r#eTPKR%Y&-x|J6^$w=Ab%1zsA~#Lc>sg7SnzgH9Ho2y09C9E&=ibx{h_ zCpTy%ij)74A9%C#y-}}Rlk3kANg-u@TlNBkzUM;QRT|PNh^9fTs%@~s!@kuFF zF(FAzku3X*D=jrS3p;|}#bbC3|HjxPOL83dJS&Jwao^_uchjBhe(ToacjuIWMG#^6 z0MSaUe&Y%JrNZOTE4aOOm3SeVGd!6-Ee2gyS>QTOaI?qx%>v6+lpg0}Hb2DsnsQ$46wd15bm2@&NjgonN#iE4 z>^>Bf^J&INwn4!8SE(8J_in-ISCk5$XheuD#{{VCdJAs<`O8@rdYyPlk2~;y8-p~T z(T&`CJ|5TCX8j{_7bLL^MV_5`|D4L6Tw$WW;;j6|z>q{r(0jQQ8AFivK(N-zBR_fT zrtjnff2O-HSu(!bKJJM}WlCkP)gwl#-p4nym}(=e`k6l$jpbtK>Jc7-SpSlQB4CTw z=g+2(wIkr2+kH`H>`u4Dr~u!^;&+|qfnlBb3{l#3ZH& z-t6|PDHam4*@dYsMMmElHn%1c1-M3LijuhEA$BaLO-}rULk8^%f?x(RlO%DI?n6wC zondKm%oYU1$OYB%(7{indf}`ZjThjLHEGTHh}6Zdn(MFYk^GF)N8$7HITwyeb3dvd zbS5FmuNJ3B5mVLD3NPh&hoXs2`WMA!ZRVyf=Ui!7h6hO>8pA2*^}(f}?B>3`(+6o? z2blzxUgnq1)DPLszx{l=tTeq;sgg|La|9v%OqL=c$cLom-bXSuA^5@T3x@`%{ALuU zn8qpRH|e;yVLj>L7O1&!?|-?G(XGd!#T8Z;B|1`@qeyRtmSHOh+J%AT`sCD^$1yU7 z-k&`i$Ycv0Gb=1vMWkP?=D8PrFkUoW8g=w_f#Ihrwb?C`{Wt&lZ7Wg!b#2MMy-SHb zosW$T{cGiocPmzI_Vq73=bcMC+Y7)-hMhIu+`qC@u8!}yzjW+(l5?7O;I;sDppbY? zujrmHEA^F+g=q7KGal%a4O;3nc?tsDtz4Auqy39c>ERmWT~z}yWc3rF5&4MB&7+oo z3c#})vGJlmDH#z0U)@T>?FSN$yDR-sWk(E2Ha{`${9KAo;SU6Asr%=fIe+UDZH#yS zYemAM}&dy?hT-xYRUP;)6V$5Lgh6ar+QkBRc1lEv|r7`;VaBNALP+#tbH=Qsn;$)HdI zf+2i_OP>X}KdvXTOEP0{W@59Q#57{%AQ#%?()nVxsx?mrlD?xkH2D)HW&NmVe#oyv zyLHrq-|3i`o3F4goypHNhl3F0UUal+!-H<+ zw6m7WIvvuGhuyU!mQMm@vI!!)!TsQ9Wbv)~Ud%_r128VTbN=GIf)l-1=R*`VeA4X; zz~|i?)f-cdJn(JztFyAYd4#(g644%Vv%^~#h---f6tPJW0|%&x!^>Tk1~Kl4mlzJ>Ldq+eWESLd>4Qu1gUZ>!V#udGt2ja!eBY~WQ)v zHsCrnc=76Gng=~v@NqqpZi_ZCc$#~z4y54Smp$XpnX;3tgyo0WcRzo@#BCVdM2|QU zEVgujbc&M{DNOlpPj@(Z}p|Zta zE2t|_XAxHv-Lu}D6XCt5AH^MMM{w`sWwNNkW>7fxTuk2$RU``!srLJoF^UlG&)6*Q zKi8>Y$a|izSget|9n7rGO}ix!vd#NbbEFU>o04`l59CW_dm?M!!CXUN_w#sI5L#cG z&zFt%z7n)zZ1vWGZJLo7A>@MKhy|K9Xj9U>r8_2s&UPkn`ftXRYOxavOkV-SP`(~~ z7qKJJ!%tm0r&?tqd~NC8ta2Gs^qSXvKb=Gy&ps5#OI{xLm%#!{y`GC_w(4hLmR&6= zW<{TJdIk=-H+~^4?LP)EopUt=9qVnGOtfrI9ejjQ^aWoLut6HQ+YlZDbB+oqUI0{{ z{WoIG(_H@ZA8M2lpA=t!Qt^G`X8t_>-Gm=MWayP}!b@5g{C``uYTNDzM`^voOwK1@ z{+dA=7W*VEmb;!@EpKX2COixHF*07g?KQS%;E#1;3gm$xkTs+*3X5cM?Lx%L38r9Y0IW zVbW-BNC{~7#LW`Drzl2zE)Z$SY&oWjwlgj)1f}%HScrWliR{2hLB#x(LL4q}TMqJ~ zseR_U{WsggelUNtqF6CnHidwS@tTp!qQNZ|hAM95Z{1Xl7O5`#id-z_wIyczS{5V+ zn44eXf`k8_$R{8rvXN4^r8#}u(xJ;I6+KhZ=QrboBk{$Q6uh6##l025aDyv(k`6e> zYU5QxEjo($jO0;OSPwl}65|o$g|17lCq# zxa83yin17Hbv~GB@lO}Kw`>br;(6{u;Wl6K9#Z##__y`fQ(4~^Ado{3@;brc_ixpq z*PUM#-DTGU=vFH7@)8RC+bV1ccF z={;P@hiV6$>pO!djYu61HOmh#0KEXg#YRS)6K}z&&pSd#d_5j{v>dhx!b<*DfA^BfW%{lZo($StW_8Kux&54yjD%+i9+ z&XOFN{)nSK$!=sMTl*81T9zo|IL3Z!U!Gu>2U72YALm_5y+rI@>!o!nR;i^yQ#DIR z)!Y}wUSBQlDhsSrpBY3vl84z#>fbvzwd9CpheosNkq1%RFwko2J`sDt!6x0=`Y_`MYnc~!h`fR|Lb~87PlXK6VTsaQaH$#B}Bg%x3 z=76F+JsLwt)d0BBXI+v!enR-&lLIgsk<{_{c52aZ=^4p z9W989t2j}D*Z1>A)wliJOV41*Feh3NmWO{DxOTc)_ia{8(UL}I3|E(!(|~a9+0@l* zttcupDxKH~f`%z#y1RQJ6T?7ayd!neAyl2NRo&(P=Y0vP*92d0zn4AmVSK5zy6@WN z_8vpm#2pkC7LGL`+9CW2n#MHI^=>jT zIfEIRYQpyyI^@d+mj03~jr8jLbgLvw+3XRp+Oq9-AosqV*qh8u+L@BIzYpIWAN0j$ zUjR|2xv2@CvWBM#EOK3p@QO5I!{a>6gLu|!vh%WzM)~|(smSB5t{&&pC_2*-;F0E6 z9;WB+A*IxZn_`W{3bhp~hW0d5C7U8?Vx;>9LDQ<}U7ECVdv0T!2$b>SB?0k=rFsqbmJC|A^y5{dtNJO z!2ABGEYWSo>R2>bIcpta^)-e6W~Y>oqG!(4OW!NHO*|#m+!6$O@I5*C;9aX=dg)Rw znz&IFrbf7dm$h|YUU7ht;)e19Fjq%%%hO74P(`fRuKuaZ=+Z#(VWZ1t6ck&XYxnzb z8`f}o@gu)@pMLL<^dbK%WoFM@QJZ&;vhnWdA`&oij8diRM8fmd3E`ZluQ-M&5bIDT zjbCYnV}&c(%Vx3Q0KHOGUZ=ePT>swtOV1uGM~gYZGPNr#-y=}lPfUG8#P+6in?=4X zH^)T*Uk2?wm`4V96HdaP4b9rxys0JR8^;#Jzb{#6%w6|Pc6bpXKS5nvCTUmO zFB%TOM;%ch$jB|PnM$=y+1mq-qz^tOO+0MBRAun{cSv%=pH4WFDm8FRpvD`7emfn{ zT+8~0nQ@LPTatUd_)bMcPY6t{2t{a$uisrsXAIIeHL{bFhFu*^^}JG+*LSLTKOK)j z=J7f`5NmfMP}(~o-ieGML|H0Mu&%4A&_}zV*{g;L;=2E%X{4lD&)kmzrn7A3@61mB zGK=M&V9{+o$+Nb}Tb1|q8aBitGx5_lAa!5x2-$&#Nr}S+%#ex3I`(lDQ~0fqO|rWV z0>CMBY|q+pC`GUcy4g*WWkpCG26qQ>AEf3E>~q`Au$L z?ItAs=*}=;Q0N+F*N|c-Ig$b)wN-ZVFV znNu!SSiy;kOpG1z7UrcFf4yi?E$y8r6CyVI`mUgm*s|4=9YeU^3J-qZu*9UWOH&IoTjytU}Uw@vg$QK1>?H&X|b z!Jj`F;a0TM`c5@7Ah1h-=GGuuguhZ3fKm`d-Sj~7Et`UFtrnRuD{wM^VX>IMo?$ghWtu9Al%Foc4E4vcZ~U z>0gQSrbu?Fdx<-7CHWXJl0yorgSE^Vw(&YzPsqN;P3g7)$#W8ZeCu-A|K`HSw2d8bnJ#S2m-c$$o7=wX{{i5U z&D9Xl_)n2nd$=pYiHON3ELGbwN1W0*JFdy-TJ+K+pe@2$@^mLQHn-$aj1w2cySrgI zGBcPGLPAF@JgY1-5lSkr!&3X!O-a6UA!zmUk|N{sFI-lIN1t1Q5ATxDq>0fyHf|iE zVgq`>4(5giO80FPw=nRt#B+&T&w}V{0WFkXnhe92_YJqmaiWvmUn=7cw*@Nq6lN?p zBf(+R8-lB!n2de2cFz_ei#-{fPjx8b^C_8Uj?sDXB)MiEUq39>B-9PpAK)CBbeH1Z zDszGx2CmB$!iNjf0OAw1a86U@HWS+NCcIV6uYC{GXo-KP2oCbrah8_EE+PC!;rzMR zm29!PSoWdE*an{S0>Aj3>YLR)+ZkfPG0@zSb$_Z;5URFCnHF3<~tc^JdaOzS03 zP~gOOO6b!&6T()zX+8MC2PYHKJ@yoBO*=z6q~T#p1p!x*x*!po=ss)Y*E;y`_-eK46`Ne?*p}B(T)futucmLVK5L>xpk!m8 zy(l`lJ+uC`E*YH@!{anldsBwX^3SPycJD>hB(%M^Yg>grrI1x4Q??;To4K2^x%WSM z{T%Vvz-wO+tYo~?(l|9`1cq({aoE=fbyrW#q~6P?>Nf3daSQB`Bm`jp0LRw1{WGYH zkw<3^NARn%Ak({eS#|A^EX)SrJAf)8_8b$(J+^_`ueTQ8mqQ80)05^eC+Sst>oP+b zJtQ_h^{k3ZRWD^K$Wj0}!j6A>9&DljK_r}k+NI~W5vCY(_x|-6Gz?qg-!)>_C~gQD z5Vl9Z$f3onIA91E9`szQ{$l?Co8%rTtF}H-RV0sklnMz^ZwU{$upk_9^Itqf$XNP` zqWrQ3);n?AG>K3J1zRicpPDcUg$l$H2p*H}MJ6j@AvygYN`BrCI^ZM7k;Za&HgGu4 zxAgt%(;ypwz!>+Zk95SR2onf4sN)^U`p}ZD&(+8@{?fc>B>Nuqc>+PLtz zA!GOU`-=LOffTm<eujA05>9=B%0>-M+0X zPjPM@?#zD-ILT7o$g2*gq}t!wHL-v?G4*a4CZoDXP1D*pI%^{&aS0w&b&rb}B$0eNJU;Xtl<*1S9FzZm+N^}P>E z64*^UPx*#n6d<0!6W;?Jt3dJR!K<#PhT8K=zmYR4t;MYKvqS+utwB6v;?+#x`gls#o2DKIk9HrkXi&oOQOC+N0{Z#_yu_eulZzVb?5L z-q6m8=LQWE@-ylm?_F17!ZQp}APcu7{0ffiEh59JG%MX3Q-H~1aT#AQ4p93rKExhH zR|U+IEv!*auM7&X77c-w0A&9FN@rK<=cvUAc=IyB1CHCGVc`}z^~1MR-8;Yy1$;v4 z4z21tRMoW$+vl3v+GX7o5%yfKW?}|;;80#Z_*s4G2GrxdMe3T1%hFmbF}A?A2+o7wxBOBpq!Q>Zk%bK8jpSo1wX^-}CK>sa zbWfFX2Cd?5pVDs0rNthhs0JaVW0jBTpP#j5x~{FOb%v&8o#wo_k+PAfBrnlNu%on& znV+aNX`_ikLb9=WJ(OhDtEOodS}m!D!X<~&36S#ce*XaNUcz06(g5(=s!}=h{ys~| zXUWLUBs|kcWkBiw019t!SI*TY{{Rh#w%xm&{@&H0*d>jT>e@TQL%=V&UVy}m$JzOF|ac;Y$f=~`OQ&f=1rGIQ^x>yOAACcBk#&G-q%dh z!w7UuIoAUS_UcIe>cbowPO)UmdD6OlyzaX^20*{t<@WS1@J zxQuOkz7$76p@J~1tzudg*2(kO2yJlg=-Vx#2o&1X7~7!D3I z*wt??@0M(nOp-A>9UP!h{TBxYI5~&^04t(8pIOu5veWK03uU{|H376;ZQZr;oDuf- z`_u*3f;wior#<&f>Pt3T(+em zpV-tli~b6AUx50Zubp@1+FYjSwH-a3VrCuC_92JC_OCv|@ZiaI1UVWfY2fZ0IR?FJ zm3ts_q8Sg1RA;}UYpFjCn$C%#e~CwbXLh3)fD*DX_)*9|)~J#AeXLBwdlsBx8p-Sr8AQ;lI|d4Bc}T zx?~NL+;;pnQJ%~hj;P6Ru~eHs38%O*o2%&6KbS@`LHOpT;qaGEjd3*B56|it9DH`G z{+Ffcn&p~Z+6~b^A)<4GPA-LVvIJY4B7(q7Gq>ZlQA^e{Ug8}g2hyn#xRDM8suOru z(?;1+ORYlD_hsY(BtkugI3WJ?)z5%-m-0foFHuC>m5VL>CLjnNoG{4du9p_~Hg`z( zmcD(ya?G5s--@$Z+*!|T8C?WjyHJ1Sv!kNfPvn1OL5&NxEnMZV_bF;!z0B*DuQU74nJHNKjYM3OA_l8utv%)6tNeZdFXv+omp5YqaKO1$cR ziI4Kq+b;Xf6FrB!MgIUF)8e%F9}_l5wk*c!y@R`cKA)nmo2HNpp*LN-{vNBHUIQYL zf)8QEc@>xW&jZ?|B8lEJ#?}Ok9`r2a?O<`it?t~aG&qG^@tvT1dsn2AbHVl)?_Vq6 zk+kjZYv`jTfe1pA#W$77BoILU)Z*pvxcX+6QF}MdB^M3I&)S{^E>DOC+~+vpin42c z9Uha>+7`N+_LX}2qfD=*+RR$+&tU+0%a2a%hbk+aDB*m)kPi zhd*&%tb2ez%kC-X!H6ivJ;f+Tu?{hhdO{O|L~#z|zxq?u}Bx+dT43o#u8d}4U z1~T6M)fL4NszXh6v$~Gw$ufjHiV!g0)`~1{B;HdF3dl=8>(<(RlzW;+!@l24Ywq8*K=hYP-Ss}9 z1(l?1&fL4;@IGtw3&6h!?L0ZqV|R&LRGkNy-{l_4Ki;xEPdH+?Lru7=h$7eKcM5;Q zPYkrb4YVjMtRW9D9=X_hoxRDc!l57&*jK?qE=i<3yOaPc4cxisa;B19!c>kB{I}bR z7I(-4lb>vNrAazQeNE~<)Et+}UjcH&;B!$Wm;pqhvNPzMWjkOU?deq{wL1((G$puVGJcin-583lHy?pU7T%qP2<=H5 z8c8?0S2%%GfR6QLkVXOLvsZ}zTei?!KJ@X0Vd6DaW9}&?C*8~Nalja+0P)W$_TJni zKdLd4>i0ON$>4ji_@`N9E=!!R#yeNbZrLoPF!~x{X(wc$fD>B`r0(Ex?M}lXMku7Q zKNaz8_gwrDN`^IQa2SGphiZEPy^=WXx-~bb&jfpByeqVG&U>6w#WNTO+*TKD20oPRw@BxO=j3~eN14bc(fieV%UpIU zQ$Y!!K~T~HpmRdWg2jQrKGaOJdBi6hee>^8(k$5TsO~#t#_wrDSKG+4iR4kz8N_ znsa9u$JVU@u%I1^^@s{U1-zhKQ!>_1vP!;hD>{oaA^oO zuLqy4c=<*cJbh^fU(2Hs2GLEic2j^Ux4tp6WDF0QR9A~BG9!Ai%Ab0OHzpQm&Qmx5 z{b(kfOM;^doE&x)Tyk8}rwnl5u4voP5;^+!tRL|k;B*~nrpc{ow)xf|P&TjrBImIc zuGnfuAhDL*2Wpp*mQ>CG3_DfkHc_!8W}FlU##nT?Y**y(P-!h;B=O4=M?7v-)wn7_ z;*-F5{HeO1MuQ#R?iB39-N)2>*B;$z&m8zx+v>m_z^_y3 z*{#cnJRSRwLa4GKF}vARb$FBpU5XtzW9%vpOLmm({%n1-R_#{M#@pFJ0Am#kb#0GQ z5P0kbX`*(@t?gC2i*Q`FPp99%Gz$L!5m|!%o^y(wkv4L}Be|&QV=EzGJp}STDtiiu z;G<@Q1Ka^p$0#KVidl&{0G{TZxeWwMn98gEmMi+c)TtK(4emJlQ1eRd5{8hJUI0GB z=|xOR5`a1NH@PFV4$_$k0B1iG>Si`ls3aNW5#Exh5=T2i=bZd~DGuwGrranSk0e*r zrHr0jmOtn#>TM@l{b!o)+Q&_n>St7eP`{d6f-zjf;pdBU^cJ~#vJcK_mot|!ZpP9{ z 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

>>~I14RG!y$ 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 z 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 z zaD2ogJgDY?m0DSMnH5vvNBh)taug+45h%&p5Bk@yE=qZr$QdfM@emv)8OiL5kVhY> zrrbZ2brO#eEn%-N}aa(lVU=1v1pid=wZx~pk~PL&MAMU-V#)= z*zBR+&F^I(hnHdOPj8|6RK=#2C6CG_K`aT|+*hq8_}E8;ImQ6xs!K$&Y3`NT8_Qln z&%f5W@(?yoWFVc@zoL3h)%9p4F$qj7<}=C3&$U8$k@5b#e*2eDc?Vi-egoO$SKTMB$v+G(mgR4lk z!$pHsyHmS&loV&~IW^3lJn0%rk57q+*boK`G$h2UgY z)CtrfYyhgec)&IF7Lct%-D&oU3d^@|vn%tTwMG6`2qX<|?DBksCaqKS(6kZxcMEV| zJ5khQ_de9QwV5=SRvV2q9uP2I9_0OMyg&ZCs{Y@ZUwq35u zw{Qb)3;P-~RM&0pSruY<6pmb`PunysRv(((CB9_ak5*3~dUXd6I72%hAxK?&Q@4?J zT<WPw|cP{dIK zVWB*_LOjkY1`d>vC!Ztil=_1Q$sbciN3H7?1pv77kZ@K`=lAbQTN|;wf@V^Gk+EJF zV2(k)IZOMa(cIR*XMj{;shhIGRQ*+~T+J9=sJn)Cl1?-Au88UPG3l0W#~Y#wG4ovI zEbz$c7A=pQ0;7T}qB?oZx(1wt1UnZSz3VU5VQW~;0=Zfql_QJatlE*+WmBfeqYg+5 zyBvc_^JA9Y(<;EK&smYuxdXFPvu8^p_VdD0r7 z2L)p%82BQiuv@`U$)ZBSp}tY3K`|Yd%NZHQed@Ul^p>|^2HH+`pMLcrV=_$#<=M83 zVGDL5g18XJcPV8Kz-Kpj4K`k zRY4?(xQ&%%=XQR-8KG}&{P{z=zCQR!z-m8-<}43gAlH zM|00Ki{7HrwBST?dC!4>dyoC=JM*sZkjrs$=?0qI zCbxH#kIp1h0#2=SF10adcMz{34+Q?yJ&ucUe<_aI7Mz@AP-TT^nm2|~>{)LdzB80x z0Lwr$ze?xt-mP(Iwi*?-==`W70B8AE{{VWF9@xf~1zh*J=E+qKndm7bxD#KK9BP;m zp&N(PpK7|>Y0zoMWwc0;pw8{NVt%Ho9a-ZxhtjLD?jyKxydoW={!i^#PgVHm)tzf3 z)}1}3+`(?%lF1nZAN=_=Xt5{CK2f)+*eJ4OG9SEm^zOO?sr*dQI(FsS>gqO|JfuVt zr{m(X?x*nveyY1^1DLJU;RnbahuX5u55moQ{`g<(mx``PD;$lygZ3O&t)g^2wWKHv zO@A|R3ulA$QCBfwL5xF-wI9hu84}7iZjt$@GaR~ue*zh2m%jsnMMu(7->Djn$Cu80 zm`Km=dkVY0gK-_YM|p7`muv_h#chKhI2@Xa)cUuk`cO1>VCvKM^JG$}Ptkjy-mCU+2CS&p;f zR<*7pMAC~`2*5$d9{>(Ntyf-TwqWnMIo4fqto41<tA zac=${x_VIuuvHun^`UxBKRjGqlvv>dVwV2qtJgD4buy9_TRTxtBcFe*8`K)oT3f-R zX~@QBP_9vZSoiJjYHx?-3~GvGr)qL>Ba^8*q{|u^ENsRG2kQR-@}6pYQt6!{K^x{dW%Gquv0avk5F4*Fv!VtanRqoLYO+2U zk3ZOgAtYZ(`eatJ z_Ez_hh;D5}sCaQAgPMT4@W(-%=G`Q;esSfTkLYPeL}zCTDW(}(e54WXqx3i-ebQQa z4rE+yMi01sek<#=mG23fGzS538tuTKX7IOEiTvF*Xyhsh+7FiB@l!q+bSF^tUs~H~ z8jDM5XhTaZlCI)adxbwHnIzH1$4Fi%3rGX3G`DmyR!{&eLEsM9t((AIQ(x9~SuB%T zo;@nYE$wW~7%?XSMtcvnXn*~h^reNUf=vn+L671-S&94n(H5E}htta~_Lpe|h03Rv z`v%bKpK;in))zahL6-}nYYm<*m9$vTYlE+4ZPe~;v^^$E%|hfQy|NkRk+~75eqI@hiA716qMTmJxu%rkUkmt)EYWFJljerrtp zDRi22e}(q;H&A|GSu;r`+DO5OCAh)ujAOUfsN0DYcw-<)HIrILAbOS4K1R%AEjmEw z-B$YV@cpG~eM3H>VFPIp$iVpmJ+U$OBjZ06zS>*c=^Z(x>2@*sR@T<&s)^X~P3nbW zg{|j|T-!>dI7;j8Q3oHZmpN0u}m#f7ZB~-=O5wAq{u6LjIKt#dh~p^h$Vxr0MpTT9aF8 z=`Wpg6}sk0ar#D21Du}5mluM46LV$xHnE;E-=^WN8_dt&xAv_kN$Szz;|Sj4sGp!v zCdVEjBy6~1_oGZnuwx^iO7T$X(%0#9WsYD$AF0MT_{DBMEckgZKy_rAc(@l9&Z2u} zC)7}$&GiIh`_(tgV~oPAJ&N)(`&RZ0_c}1{y<45VJeI9`@EYSGL4%53Hxp zzZ50DjHz$rVT!rSJYW(&m8;7X2#h3%jEsd+aZFn1R(ga}xG=)D>zDH!0tef@S;f@l zWfQ$9QuNqed)2J|#?V^L40~9jHzof7TW9?!&aM}_O{7w3Bs@$%h)1c1{?%uGn1=KP zhDjBp?992%Mqc!^zNI^+QT|d?=B#7t_QD+P)EPQa)C)$)2zusAO)dqvK70(Payk+f zvD+(B+GmJ%nzWYiL132720XZq%>8rTtG4=m)s4xG;2a)T2Mtmqr6jhwOSEO&PIdu; zGwq77kEq8Z+6d)BehiVZ$I)G^wJR-F8Dfg|-ZWOjGXuXq<0iIW1pGYGdX5Xb%|cS} zK_`~6MB8_qXDmlG%GY`=)Due3O3+U2xuYY}PskN;@RP+Id&2Enc31|jr(BROElX`V z9hpzD6<^innK4~08^(A#S4w(!fPW7Ms0?6mO>&8r5ARFQxLdy$@h zda}n9%AxLd?JaruI|yOPdGuzZPokGKB-mY;je{+C1o`a8JfV2Yc|@_vT1xjFB5mQh3M z6~q{99%#*<#1swfwu^qodpnu5xeq=}m}KMc&-bA8>29>?+GA|jP%Dov?f_SR-yiQ& zwjDir)OxHJR~lS!+2r}8E*4Lz6{hI=1gQar+8AJjU;s`+ip^woGaJKU{{RZ&JXV%m zzn?!9kAj zIID;wxJ>e3!9VGdPTlH|S=P1Q>zuX!cvV?Y!bR9u>E-4uB12&LD&z^9qLm}(Z-!4&kf_=`J+1`0}Osir_gr@MCj-9{#7eozMbCI z^&Of>+inl)1KXd9n1@}o)hxloBN3dxvsAs!Bf7{f_cLwFeW{kYg4}}`Ll_v_o^$g_Tj?23mQpJSRb8#9-bWC8Z$718VOG0~Q>N)}aU^0GV*qY` zH+=`zh+_bG$`F;r(*i$R>YMxRJ`Ez+k1pVVBaihFpL6x8{STz)vb0-i!M2T5mvBQC zZ+ulhqV5*j@=aR$-I$O10T(-dqy4JEsCc9;*^(Vn6B?ggi5CXuXf|@kLy@9t-s{pi+KQS+)v4)^yo`kWIgr>`2_0F ze-#= zR6X0+MVpx>lY0_EfUCRMQJ>-aU^6KmP#Glr)MRp_%z^s@oO>UNlA2P;BPRgzQk+Fl z3xU1LjcL%_=WAmb&Nvj}Ihox-EHmE}L?RVg1dI`ZEJ*jEmSB=d5D<94$7&^^(nMNt z8;HmR*VJXS!K1@^F~`)J`jW~@3HfYd7`g`2Bl*B@^r|5^>=vSi5R z5lW~ZY87$g2QdP+!qqw&T+=Ah@|{iZ5sAxXl>`#hH?1#gg}^xd z=$Nl<%HdxGft|xRKS~K{s-%5Du7dEgSA(S^l3m6$eb{5zRHulTxakd8h68jY{{Zt9 zO7P>XEPw3ukX%X-ucTyT8k@iCZ6Zr4ZLTDF5YN@to?q<0q*lNk)2%75CgHhv%eRg9CUbNs=W44R#> z(ya7mSrFUXvw!8?kG5$JzQJ|3)lqcrkkmB@)<~=*NXh+7HjlqGaMS!Pxs^e^o+x5m zpGPcyp4B09s7Dk)$*40Q^2hN}GIc9UaCS*Efx_-=ENV{cs`SegUn$;5;{XLk&-bkU;_BjNW{?O}HZhJ(M_g;xY$V@#6k$goI32#8 z^!D`UxZB*CW*wE<@5EcXsSH-o3v>q}M{Z43wM+A@vy035BnOW}5s$H|+&x{P+fOmM zxRPC}N(jeu@y}`&{{X~|HR9W8YN)`2xxHln0JT_0)0)$CN{;N2RbffN(;7Xc$etZB zF0OkCXZ|aHQ<|DKrqULY`sUY8j1l}ca2WkCDnuNN%2hj-i9?kCGy+3)VG=pM=jaQb>e0)?=U#3i#ExkwbDB)^LS+@#1-`doa zMk`fWrC?lpG0!v|?zg$iAZC&H&wuGrnvLO|3qBAo3a4NP)X+9SYjz%^<(%YvVAMHfYe{HQV{4oPifY=$+A_lvpf~_9{{TvJ z$%ZLOk}{-_cB|kIy$KGHtJy~Gzr<9}3_sjcv1(2B0!T{Y52obC{0)+(0Q=UD(taxH8diif>#aU3!*07_ znIzZ<_6#t8wPtgASY&sM!K(iN-c*>fDZL5}T#&T0VjwtShyO*x7 zBuz5m?X9i$nQr6ABR;&VON}$7tYW#;Z&t`o!Y%Wh zMjO}@*dM(~KC7i$KyL0e7(Xtfe(>XI{pcNMMuT7Jt!GNVw-d*4ZonfB%m!4Cf({LH z2A9%WrmZ|WHJz0I0GogF@PH2FpQRfM5*(QIJ^D!H7DqYGHl)08>boBhy1B0O{KpNv zO9ILcJlqmV{`eF(hrS5wJzrq@hWPaRMsl%9a!E3ud;#tCsr^gv{{Yomb&E)!lf7^< zVu6nT0NWsDw+#kWx9P13RwlGat)kunhvGbheFdd%V9mr z2bx)1gozFS%X?&w-%8H4AH(jqW2d#mSJs!4r>U)?$Uptkdz!Mw>TEHz%J2#7hoCrl zhU*=&)85iQEnZYrBN!ouJ}N#o5PyiH2kk>?k**F2&JA#)hu5@AXsuh#hBqhDxdf5*CabNZF^sZCqTKL& zqmTXTQR!U^Q0j1K0i@Uq zCF!YkK9jSAY_i@9M#KQ>)xj7n*nEaa%8v1t~e8J@4hN$OYrqySGNOw zps!0^X=)>~iqdFvmX3JvN7p00L7DKm;zH0}>WIjQ8hBYoiQ%kTq%p~R zXyPI=Lq<1!@lulhAMNg~Zez2(Ybj=2DwW+6dyLk}XQta@GeaMq04K>}0s8||>d{LX zDH#~|fNEOFR_?VMJx(bs(^G|6*)s?4*?f?=O3yT0{k*18v`x{c!h z020#e_r!7~i3C!A_{)s`^;gzB8`I~DZkeh}Z6chi+%Dnv+$b_-iP$6HBeDY-F7CHY z1Y6Al+iAA;zETbCE4KAee}3kUYmGI>mpPW<6|;y}%R=9`aa_}Fp!K&$yoXL%XH+>a zVKz$-s`37nCm-SmsXB5|YpYr`gkZ8w5LpNA2l|SQ;n?!-nCQ*g=w`dUn#~2Ei%fxg zvva%c^FmzR!*Goq;tfhc$RZuT-m@N_{7!WCrl|&}WpQrBeN4M#!OznMu6hStbgsKH z{!;oP@;OCG-`Agwq|+p8$A9{GDZ*fppXC>f^$oW^0^JD zY5G;WMIL6c0XFU)wI}5Fq}XXQ+q*8CsK+6YZT)3Q`cRthT4`DimnFs25JfiZKb)Xr z>^a2tSo4bCK=|CjzfJcTVZL zTm>|UJb*{3kcW0ZB$_yo#zAS}4b6?srwhNLrS$f@`SNWw2-+*4F}h5y{{Xo5H8DM- zqA`t$Tz;1JsU2&jq1R8VV%;bHG;RYQxc92H-S(%`PO$0_NcQ7}m<*hK{p(MQnAt|g zkD|SJtZ4ZuI1#BO!7G}ELKmJ2U$ z<~*7X#xnZCdL z;)$};?r&XguddOHiVUi0Q(w|xziHcCg$eJkb(;`jGE0g9|+Rod&|8G zSd&k78sfM6=|LcS0CQ9!jdtLxyCb^Fe-SqpZ`W43 zb*rO8Z3t#DoUZ0OkM;tyo4e;*1_vQW>F2qp`kzp^*800tzLqg=&mjg8$d88>^ZMV(>w#}F%=A;$CiQS!mCpkYgA9pJxgrbek-SLcy zeo2{N+MqwbeluNMCB9N_5uuCCWei!kT=Pq^Q!M+YEV1|8c?8hX$mP`-9l&~t8RzLp z6U^?24%o*8{V8bD?LZ{mOzAuACm$o;zOQDLRzexKAGLi?2xjkWk}=Zs?0Hy!nG4f2P;an z@efS9RZ-`{`Nj%@pnT^vWc^QQv2TY^^n=L3QY$1^QRxxo&m&>Q6>S?%eNQB03=mBS z<1*|b443y>zL&2-EP$q?ADBi!X)&McQlH`hpLBON^EY+^P=DUBm@O_6ZNhEC90sEW z!HGwi`|GJdxfV@)Med(al1IeV;G?(7gwl7yaAM+cBgY$<+bg!&STiE zlgkC*RD^dk+s0PjV;W~TjqzL{(v;1qTw&?y=5W^*ac<5|VFa~G&C}Mis0T%kUwp|H zf3;^R)Hev_p5|JsL63d19@NJ~^W8W~!P#g@q1c8cv^#Lw$s#O& zUMQG!HV8$oj-g+iMzxh(^+u${u`S_N7;oYckxf~3cBf-_(#3go6EX!GBt3_&Nvqi<$Ksl2`KvIFBTGhnjraF^_bYkpuUxZWw1JDakJW)wtX0Hus7eZlJWc0O$Uo z!Ty4qx#~`zu-<3t0W^#Jkt4QG(}7r-XroY~xmvd7DgCIUr_U0Q(xNCH!~0PLQ8%&?mRI*gUiFRb)H^4*c^vk`9x682Ufz@~xl^|s zWc->o2;pP3O8k?IoY5B+_X+8a;03_-1tT9$Y1<8eNx9sVDbmagS>#ZD6z4RRZ#9f? zARgO~aA<{zQ$A$vAQ10!h0bgj-oxqz8^aCdNAZjP>I*`7 z^~>=00Hg$Pg?P`2PW43}_3J$pWEt?J5M+BMCkL;5p*0`hAt(<`Bl>;fdNd z{*zJWaO{f<4}HqBbf!{iNn^BugSP`UaE9tB7Z?wa0~%vXvzpe;Bap0aoSrbOPwh`U zEN0%(MS?v=PxlzA86B+JyJK_;N|I9yxQB4dw}Ndge%8BZXc z`LAG-G|H7H2ZN7l81+xJ6LX?jO6t)WZ6qJf8yr`S75I~UG7E)Kv>aivocA?ihC6$Z zNm08$%fZDeYcfDFu_HME@M(3P=_qzp*m{r3%3fMDAe?&R$o`_FAic7?jb(y#O{Zx@ zlW9M(qf9xB`JgZ-)Ese8cYQf)bX#heB<>3GKc#iF`z5D*)Y4o4o|!|Q!CN_@@AWpZ zkMll6K{K{SDZGLI02K=#OzOIHd+hHO*S^Bv>}iXRp}o@Oc(qGC(c|?d4Z=`7gqJijTpe%_~cS-rh*MR z>Eg_&&$UTC&&?A_J5sI8o5GIU$wKP(*9iNqSQP&N^VEXD+`LEIY#sAbjS^rP^pl$fS+qmqQ~y7Fe8*m3pQKlQ+^^}SJ5wQ^y>p@aXJ)9ne*kT z?tb{HUxj^nchUV!*BXqCb!74E5++#1&U<@`rIf^Zjh<%5WXCjwdzO+vLLlwQ$rV!G zpNz=e5N^lnwYF>!yBDYW=SAw-NU+qRn&^y}!65$tN=~PG^4>>jbt1hTue1>mNq>+ZM8!;mnvC}zG{$8;-lOjf2~dF z`0SQo*{;-SBn8yo7D=sYR|58XmbP??X<3 z=x$?%?jb)uuQ+XC`_<=1w6MFjwtJYKBPa}5fKhYy=DifuZ2*MOH64lu)(eZMBtMt) z2q!VRku6A?DYY+YGJb`^9amx>_ zSG4vC8=HHB9(e&@82ybE9;v8XNLJ$78_0nDPNhyh;;SA>b(J7DYEtmSX>l7oWmZpi zBWcAG1Yec_!Tdpt6_b!Yxv0n1G`q!(TH4|XNC8<-AJ&MEO?$$xZ+y5N&N6?sF*oL< zWoYM%)|+|m0q^vvxwQMUE6ZVh>-ST~?TS5Z^(YUfMVWoWjDLD{Zp=YHH)M038GDbd za!aldc6zp@V-8tjp=!GT@J;9~6}`@N@D$YD-@6-q&dbXA*0@ebRRiG-pw^V7_0N>SSG`>&UAL{wg)QZ5~TIi+Ii7 zmLvT1O@{~F_MS8Tm3NBaz*dUk({i~exuNV6Fq!aSj zZ~2Jh0XAPlxUN073={q8>!$uEY$k=j#&m|ZWn6i%$-Oi6Q-UZ56plAZt;3b3&(n7b z-8;V+0Q%vOcfciKGtSz@|$?+2U=WtTg5XN*x- zlIogVs$70)6!J*Uf8Md3Z(NcXpwyraC5k{nCxOm$S}#iY&!hDo$S+8-)CdYh-=LqN zt!^8fA`N!*vsuu$#n#QON=4SlmnAMBc!}&3f)DI!UfW&MuN9oliUrw>U zM3WK8k;4@X4M#st+j-7f+C8WFqila_u?}hWRVA(mebU9$F}Zl}(1GkvG&Guptn5s; zakx|J1+z&#EeHkF$eX)*vx*K*n6w*Aw-W~*%Z`7w5spoGMlP{u6x(B&I0p^vC=1T8 zvA2*Zm8Fxh3cLeMKTO-)zQr@({-e7X6x{tAr`g0Y1I!L^8S~HHj6m*!2^=QwdhQsb z#Bn^Kcqg$Z?Lx)W8lIyvi)$hju3H12>qOh>5Lq&nfnn#I4)kUJ09NTeF=OUSJa9G% zE4UW^mB0bONDH0GQTIAc;#kdls9qFEkhT!#>?$9mI_LZj-^&4H20~1e46}2{2B|$` z<12LyxzlvCFx#>9yZ3LVC><{G+SMb9UBy5ohVA#NjNj@rL08>6KMm#dx(3g#>~*Nz zq5QC3>mUFRsUzC0S{9cEp#K1vy1b2TknU%V^SkJ{u4jtX)?}7x#HdvIQnWsT>KSys zLN^hYwa6P8xnuM3n#@Uz){AP?wpSgN`+uw~i5gnQ65Uq{7+_UfSJf_8O}myPZ%j^i zjH>VrN!WF5hNExg!g&J@l8iV$;M7lveL$A|1+0EnRE}@TxLEPeBOHHPhQ@;M)y2iF zCYK@FKbnM@W`81iNH_I~sfbi=ls0ZRaPs z`c$$kD1gx^+dEmWBiv3*c>#U#^Io)Qkh20?9l_(8dI_4^KQ)*lG06+wnR%A$)TaX^ zlbYa4QUxy{m9Aw?xk$MKJ9Mv^xrPsH17A~6?AgPO$GA21DnzK=_GPfEoSTl_ND2vPEz= zLv|nFWKz~EnB?6VBp&5z9+faXOe_&285SJ2PIk6y$G%QWApjoOsKmItGY!n!zStD& z%JR0ymv5^oxX(4(S87H_eH4W4%CPK7!KRYj`JQz53i;p+@=Y@-Yh_YGIVbfI??bK0 zoyb{L81`&pn^(eiuEk7S+{7erKzHnRt_~~7?B(2LB&a`L;-f9*mMNS`Ai|92J?Y^y zvEpoo><>7m7LZW`fg7h9B*+nvNcZ=z1|08Lj`j# zET&d2cV`3Ij%Bu$OJoo}d*Y+~i*X@Vl|yGBhNpbk6o5__wlSLG5;WH-7bYWwi5Z8o z_cZ0a21OW;Bpe<)Q-<<5n|iq9kQS17xW%7S$N}Ymv`A^Fh7E z<=nYN055-~N2HV8`kmVggX#YOdQI*4fk|D=*~c6MN*TIgkbVkW!w82nDR*9Q&BZh> zL{a&upf_Lu@ARt3zHzzRFQ07or`K1yLJ#t7%QN}-(o1W$- z1*KMT?pW;y{%RNVcT%<&pLpq6nO2ElTYw=v=ct`6^*sV9n^(x zatD9jqOP?>k1WM^=er&%3C^W^akDb{S?`UtCvTykV6qaV{{S)PG*J^<$`P5)*dZp= zt+x4+Z=#&01~xXH8|qxpoJQ{{Zn%$0)QZPV8}pQ`G8pC!&sOKJTqkjh<9%eVQvpXo}Qr!S--1gz+->Hu?6DW%`o zByxFEst(M+j%aRv+Z6E4_X=9mrEV@`Q?qP%?>7jItHdPh>%+>vY|| zrGEg#@HkL;VkzTzkCVA$$epfwmY9ibBj>7a>b zc7I{}QdZ{n*m;4HH8Aq|f7JeY)yR7TB@;o$TR9AH@g{-jg3&Xo4>> zEH0KzW6N2?Df;HBw*5nCDzs9CicETtjMRRnx^#fOv+R&}R0nDQ0E%dY6HWz3Ig<^; zmWON9{W*N9W}4#B*m50ms(#{*hQ`}dQgq!)-tz;Pm9{tZHIi89+J>XM^0pEdQO~gY zcQqp)O7#R^{{T;u%pC5Ghab?>Uyi_beSGOji>YKck!t?{C5_StP&N+44o+xz`hNca zQa~2pc+V{33;pU3Nz}TtNM$luT-?B)`Ep0^@B7vBOzVL?vKz}+L;nDvs}H)Gj^@5U zyG2|<)S{PZe5F@49)+{hwAZ@0F$oI=5u)cNtB^q*rL2+0ibA>cu;6ErT4z)XJ#$BN zwVh;}^`Hj_Bij{9=D(jgl*3Pvln9PlVmFTM3Tv zTlEp_0I0joed2K)lwc-6^Q0V~wOj8r8~&x%E@luG5xI?5vZx;4N-EpK11zygEb6JB zP*J-EkV?=km#`58_DgOYdS0M*;f!ee?{{RN{T_;hOO}2%u z?VkoYkun{AquBh_o5K!?vx8sE7b??QuJaqWtDXVJ#cc6MC98nzyWp*5^ZJ~SWCq9g zYx7spMA+LwbK3YzZPQyO)GTJ$!wOt&LVh@^=DRhkTuBXrExMirn% z`a>+&9z;p}PDleIwreA}>76H1MK>rzcHEpF>L|E*ZpZ}5$~$O{lrKp5pVU1wZw0K- zCH1^trDZrc_}x*Rb*^gOBFz-qj6w?to6~Nflmz>e@As>9k4;)>j*kd?w+9Mk=L6sh zpFeqv-CWMNnBQTKf-8%QOwo$b!=(lfS`yH>PKjs?ljXYG%@A&rIFz}+|iI0<*1 zHKgkgw^FczRqyKqC+nJn)Orfu2$%da<*lPoK#EV|FW7sEwb)%pG<&Y1Fu%icDn{5_ zPRbxL%5nNYqlY+mNI+PIv!!)5l6OaIEBF2_nK%ReY27=-En3|pTh&?k3M0EuSpE1l zv^Jd#vWHOXj^G@FOzM3xW2qpHdq}QO)G zi3(Nl`1=|O(o?}I?;FmsfQcOHcp**+2k2?*OF?p;t7n8E;gxpd_Z{mtwAOV_oRGl& zY%92b4(SO4>`!XBX+9>}0HW?Q80=am+`rSkGeNseB-YAp8uHo7Th3e_e~ZaAAsyYs zTVCQNDA*(w1mdD?dj9}RzqxBzZ*3lK;y1?c=xNJ~vXT}6GLfI*9zmp{IZdnViFx$f zveAW>Hw5DfMkyssP?EEW6@A!b{{T@zok~1H zte2Y?+(^4m^`f6b(^**|lWJgk0*?OxdJuH$!dW7jWdvspo+xAl?LhZMUi5{$(QZ|Z zfFJb{yZ-=6i5)K1D!?p?pQsSo7@}mkz0*)A%N6XPdT~&FLDsh^ZyZrLx84p}&m-+h z&`F@Xa5q792Uez!Z6&4F+n7;zG*d^oW80Hh*H_D?bvnwhz?ylGbNO?&ruwqw?!r4v zBvJaAo0c_5)O6^j2V~5Q231w^KKM0rjSv*;-9wf9idBhvHdzq)HzHWjobMZ1e|iZo zuDW_qvB`2V$!8v7e@d90Z=&0>NabAPdhwI+X%8=%8wWy@FLDNPS1l*L;Z`^U#>E9M zUcKYuK^(~01!HZXe#Vh+C56#eBgtXUtYDwtv9GRl8*NR0Ok0OJ2V)wKzv&yxG+8ZY zmOOtXp0zYk8N+r$I{6~ip2u0%v}akYHFxXL2cSDdXeC8vbKP zEso(>~Gx) z4lr#3m=Xy=7zRE~6=NF5cl=>21Y>uk^HzI)jIxFnacvPOHy2kqqHX7f&y5$fdB|lXrIO z%R9D^5?g3d!1E=|jFeIWPw`chimEZKsRK|FIq%Mc2oToli!d{TgvlS|YFMshQZ z``6T6qQfE(8}yuKJ?rY?xKgMmMO;Q%t?vwY_FNkmeqWC~?stu~@X)=jnoqih`0=;cc=n@R8lh3FTR@bq3z-8Ru zN(NZf+zFHn9>iA%1KA;KhjkAYrF6=7MvOhSnp9WB$V{hHFHgV# zSqqQ++;K_^N@>CFT>OsgL<;2(jv z7^kiJW23hT{ zHvyHqZO8Pe`TA~gCg+*Qz}rX~)7>e1z~L8lty(`3NjH`|9hfvB*WkDPD{lrkw+ZS_sC#PG|kv2 zHV)(}Y<)QzKJC769AK0EYEw>*+RO~wBb z+u}Qj(<6oh+J&tD0BJ=G96Ts{UY?dmVC37vr@Wk+o3hfZtX+hqsDZ zm=F9jk(y)jx4wW+<`5j54n;7yyON$78^BXR$CMT=m>l8HIQY#ap7QC$TlPlY!25mb zS4q$o?%FA2fG?T)Ks=w@+O4`*Nn02Ub0Q4>g-o1%%|mp}YL?iX?bUZk=*xF?H!70C zJ1Jjp^`h?jD$deoTOwlwG&k2v}dVO-K3_kyd;$?yi4&ztm7cXusuF?N(La!WV*P)Qu}xDdqi zx$T}5eQ5PfF5cnyT_>2F`kQt>)VJzQGB7vXZXj?F5NbxM*aes@dyTmwJred{O!o+& zex!_YKYI4&+QPtu*w>RDcJAPP>315{z3sXSdxec#^%m|a09s*GPMeA4%LAG~PxmCy zLE#S&NJ~uc#kqk2He?UAB`p$CtjB79m)kUSOJrpJE#j9Qg7Hk;-q=8PK@_veo_&QV zc(maRkNcrG6@rf?qz+H&2ilssytuPa&34c!;DurfR1T-r+MSI1A+i>+eMU(ie$^Xg ztwnht^J0|BTN{bp%|AgR$k|Ja4bC*YA;6c{{T|d_U%Ye5uf5X$RBF7>AnZq8CCBu9n^ACA%U8J>0)WztLXZ3Lu##4 zu62Dn&NORHN=vsKnCF10KfQeiSVyPaTh5TUWo^yQSN{NN)?@IWrqUHpB1s%`<{3F7 z>rh(1gw|{%7LH+8UL$nl_cRkMPS~Y)PBrA&Np$C3Tiy>XSBE=_FY8i%p7nCm*>4!U zEF?lW1K8I--1H|>=oh=~gsl>CG3o$)7*@IAKAouAiKo4aSR-^9^NIDJo@f)s#NLR+uupxhRdPoZ#2Fi8E1e-Z9;vJK#5U6Fkwa$;8D+MEKDPO9 z_@h6<1VxN&RWXpO+cgC>?cJPv;orCsxc;F?x9WSipA)us9tifXYZ}2#6cUEk!AL}9 zvbX}~*_ktyY-K;S9UbMYq?MebDg8OfqAm4nd#IR+5X;6Ccl%T>tJ1G~F}b%sT#d^s z9zXV_*rmT!H66Riga!_CoUgSg!?n3PRQ~{&d(}ou4PQ$MA${=kmG>XLJE!Z{-e?Zn zP#(l&S5kFawcKgY-GC+aU~tP(SN%HnxtiWl8P5rVf4HaZwKa-a1=NUFIS#BjA3;-5 zTq7V0AlTf4p7hk0N}jhD_LnR-I*)_O{{YCTNHvy^V%#FiPb9`NF;mi6EUmqfAD^7m zW!{Fa=V~3}jN=?qa=TC~!>Cx_D)}=NfAXGj`x->H@|4}>3C@4;_-bN)lT!}d7^WxD zA>>p=)AbKa+>O8Yi%#YDZvND|Z7qSqpO)n%wQEbJ4HK@@9O@ex_RqCabxwxT=aNhr zVD?!ce5n1Z$emdRp%3w)ia^68GUGM$5osEO1&-aIb{@`D3VTUvN?E1Xhq{KE#(O~q zsu{370r?RI?xY{FqoV5$qUpzuJBTH>L4^_ArdR9c8*cRF+IY-lAKwOxi>mbdnFr*;tigs+ zn_>Qkii^9_^k;?TW&D-F9;Jt|{kv9WsOkx%-Z}{mslGx;g*{3=v+Z2g2|nuWo66j7 zwL79Qvta)K&OhFQo?EgM+uS4PyhXSlYR|28eMMkH9M=}{w`isZY5ufLw^cQtruN&- zQQAv(+DGhoG@2+nA5rU`sQ}NGhbt?$VLnuC#BP;#tr=)exp0jKk zgF@_hS%%T}_^UA1ovoaYCg*?ift-Hy$2Pf3eS(mJE9-o+?T``K8)+YEZf#O!{{X8m zm$xSq07vx|5pUG3Z;1Sv6?-r|)U0>VYBuD$M=%)&91%>V#2)BbHIZ_RBJ!k@k5+I6 zB{h542J4G+B6iGN@l0Iw{+LxvY+>wjTfgtxhPk|bIbC9Qk{o&i_5<%v(wkuq)ct1~ zg|>oG6EO7>zoxSOqt&jpg3`8L6dQ7@$UeXdlhw6o?q&WVDrvCuL)f6~!5g(0XQu5A1(l2!Th) zN`EM;d(C14LmP*OcIAnN3jO|SBaVYqqz^ddbJc`0>2uuM$l;3jRrbdisQq5lNog~& z=eW;&RNshjohPp*&SH+>23Y%d_x`mLaO(L-ep}r9R-O`E*1y$INCQb{qN}8ewr>)H z-?<&=TS&G>P+&+skHtvp_A*;WJeCAIdVXp$I33t=jCVC)-NwoRuxPJlw|jX84gtnE z??xs3i?lOxQgx*3lp?6_Rrpt zJ(HubO{~E3K5K*M+Cv?MozHD?WK{~87u$m zVGjhpUOCuL4gUZYZfOisVI^IlXKRlC07_~*sTKXW=OdAiieP((-Ad*({pC-N#`8{; z3FByiJ=2hXaZ~m>v{A|yL=!|02Rw?JO+q#pSQXfJ+Bu+~OM_C7Dq6H{oP!v_u5-10 zC22EKzpxVtZz86x-C+iE{n=`BXyFxKjB6mzs6Qq*0qQBS9p zhF5edd5&Du151Ulr=n8D(^^+k+D|Sn zpkxf)*OmL#*3!lc=vHfF62^G`8OWhI&SuUQil=Emd*L%F9`DquOs!GyCSJr`oNw@>f zd(a&rlY)-M26CnbnFYjR-GEXE0oY-Hp(E3-bo;&0Oz#?=70wC$=wJIv@W`U(G%PsY zGn$u!R7s*)B246Rz|>+KIZ^>>;d^b=^1&fn$cx6O8T3DGz zd35Ab*Qe6mfHCBr3x1}nV&AKiw1!jJektTLOSMD{&fS@~6sAXaMiDczq|MXiB*Ox7 zau;WRy%%Ys!#v2S8D#eXIIT}f=-a6+QhDT9k0)+3Q+9dvgM%Ok#Ah0pb=3oeGfnowp)?Sp)rky>Bm-*NQsPi{CB;k6?yv9|HYpn?9i z7|!C3B4|~sFAp@RTYbaHc2s1>z->RZJs*XgDSbG2;r{>+oE^iUp|&{vs7rpa)^r=A zZGUSaOyGISRG;3jx@^K02#>fP+qkK}I@adY!>C(^L&vNK1W@&!94$EQxK$l9ue593 zkJ z(vpcHCgR;jS?%AE_ft#ZvHt*cuGU8(X_7QS85Im<9>b7-dNWU!c_7;qkrR*7!xfa+ zc(rkBI{t3fJD9-1z}nS%(fa#A*Tfk=m1BSwUr#?7?LmA`Zy`KAhh;c*d9AkzZT1gy zjE}tosm*tAu|0;_S9oHi=RZO8s|V$xkOkNo2*wX0nL0WmW&|i#u~R|`Yy}^rYqDKS zBsW$+mXUFjw`im8beJ^=WFX<&vlSduHuB2T2<{@=k$}uHDn!~mIAu>s9hC7(QY!0c zT7{HE#!^G_I5?+m_51BUB{M;of#iX@tOnq4l1IZ1=9Mm#@r&~R?5qN$#e2=w9KAMU|az}yO7F@6O6#RO5oNlqW*xibT$RDw; zq{FueIrLqs-dJZ=Zkj!@&(ZxgF=r*?* zK^*q1$DM~NX(@3at6|nH?jR2sb{)enVM57q6oYON-H#-<6`$?1+*TGA=mX@Ajl8Q`rl4 zmOHKZ8QOUwtI_ptqpaUDr|@hOyD{}Q+v1$oIHz4B=j#bHXrx*5A3UxzllH2nt>P`# zr6f_qYOuf#T0*!YuNGQfi+vQ0v}MK{&E%8&)6sOKD5L=u)ELIn20;7MnpoaKUVExF zo{=8AD3aq?Nw*$gR`S6Vd-POr9rpS3x9JKBme&eQ(@6#8oRa<`^=Est}&dQa{s=(>`_TeR{n;fd~)a6sDMzA7f~rR2JdwY|Vx zob7M)rUvi6%ZrUEW)FF38%MU_D{c=P@&5qg*SA`A?AEO#sxC(gt+XH7s&m76rjkgK zCj$Y~mHyNvzg%8I(?KkYbf|dW!5?EqYYE{DxOYwKv0Uly$nmBn_r`Jm02M^l^vR^V zM=>afaHKCEy-#Y|?X}d*WRgo}cIR=(KfO5)o+Ts8mOFsQzUr}#*es~8A=@f-#gw)a zWl*=sM#|G?R=a_=gx+v)q*b?4>FIRA=0;XdcO9P97bvy7i)8U`EIn8lBBY0d$U)La z3Jxt!+IdPxYibK%sr?ZjXgx4 zz`1Y_usOl~>EK#zr{*w98BmDH_t}H{RC9iE)q#z?<@r<15}%obV3_W3eYhfwhT`7^ z9xp0G?tj{p*jy;6Kk*BO-MJJHar{BF(myazhIq(ua&SM|tTNd7+w&M@1B?ul{b*CC zK{4#Az+)VPU8pY7R8%wD&RNTqC%T?LwK}rHIR;2WV}L;KMa5#na}&8!ji(gi+o$D= zi4rnTD7glf(ozOpGfcQuGK_+F<90u40&aoQZ%+GJomh8VV1G)POLHlGtgL;N#wigj zi#Q?&44>rYlovOGnnNAPRa?G_yR%>WtC`5p>QaP$^gK}OIy(m2aDl!u%4XzYeEfQ!Ma3w*4DkAT}m}7*#k$CPvBqWEAr!@?|7oGMh zNMwx_$W@;g^c23+tu>1|lH@?!UBhIBKl{}(-D92ev8^9n6tHiAYtRzw}aMf(h!mNMZL`uscb;d~mdVQ)kds7bJxNbWiY9{cA zr&(hs9|DxyOQR9qhy^ASX@$A+pk0RsoQb872W)MouWb<~3|k6EBz)I`LWqDXHcoR( l*)(&y^%>EbNY6gqtLl~0G;6EaOp6GON#iEIrrKIx|Jl-H0-*o^ literal 0 HcmV?d00001 diff --git a/App/frontend/desktop/src/components/campaign-prompt-host.tsx b/App/frontend/desktop/src/components/campaign-prompt-host.tsx new file mode 100644 index 000000000..0c001e0db --- /dev/null +++ b/App/frontend/desktop/src/components/campaign-prompt-host.tsx @@ -0,0 +1,96 @@ +/** Hosts the Mid-Autumn campaign prompt on eligible app opens. */ +import { useEffect, useRef, useState } from "react"; +import { getCampaignActivityUrl } from "../app/campaign-prompt-url.js"; +import { + isCampaignPromptOpen, + isCampaignPromptSurfaceReady, + markCampaignPromptActioned, + markCampaignPromptDismissed, + markCampaignPromptShown, + readCampaignPromptState, + setCampaignPromptOpen, + shouldOfferCampaignPrompt +} from "../app/campaign-prompt-state.js"; +import { isDesktopPromptPreview } from "../app/desktop-prompt-preview.js"; +import { useTranslation } from "../i18n/use-translation.js"; +import { useAppState } from "../state/app-state.js"; +import { openExternalUrl } from "../utils/open-url.js"; +import { CampaignPrompt } from "./campaign-prompt.js"; + +function browserStorage(): Storage | undefined { + return typeof window === "undefined" ? undefined : window.localStorage; +} + +/** Shows the campaign reminder after boot, for logged-in and logged-out users. */ +export function CampaignPromptHost() { + const { state } = useAppState(); + const { language } = useTranslation(); + const [open, setOpen] = useState(false); + const offeredRef = useRef(false); + const preview = isDesktopPromptPreview("campaign"); + const surfaceReady = isCampaignPromptSurfaceReady({ + startupStatus: state.startup.status, + currentPath: state.navigation.currentPath + }); + + useEffect(() => { + if (open === isCampaignPromptOpen()) { + return; + } + setCampaignPromptOpen(open); + return () => { + if (isCampaignPromptOpen()) { + setCampaignPromptOpen(false); + } + }; + }, [open]); + + useEffect(() => { + if (open || offeredRef.current) { + return; + } + + if (preview) { + offeredRef.current = true; + setOpen(true); + return; + } + + if (!surfaceReady) { + return; + } + + const storage = browserStorage(); + const persisted = readCampaignPromptState(storage); + if (!shouldOfferCampaignPrompt(persisted)) { + offeredRef.current = true; + return; + } + + offeredRef.current = true; + markCampaignPromptShown(storage); + setOpen(true); + }, [open, preview, surfaceReady]); + + if (!open) { + return null; + } + + return ( + { + if (!preview) { + markCampaignPromptDismissed(browserStorage()); + } + setOpen(false); + }} + onOpenSite={() => { + if (!preview) { + markCampaignPromptActioned(browserStorage()); + } + setOpen(false); + void openExternalUrl(getCampaignActivityUrl(language)); + }} + /> + ); +} diff --git a/App/frontend/desktop/src/components/campaign-prompt.css b/App/frontend/desktop/src/components/campaign-prompt.css new file mode 100644 index 000000000..08756fddb --- /dev/null +++ b/App/frontend/desktop/src/components/campaign-prompt.css @@ -0,0 +1,193 @@ +.campaign-intro-backdrop { + position: fixed; + inset: 0; + z-index: 4000; + display: grid; + place-items: center; + padding: 16px; + box-sizing: border-box; + background: color-mix(in srgb, var(--color-text-ink) 23%, transparent); + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); +} + +.campaign-intro-dialog { + --campaign-intro-muted: color-mix(in srgb, var(--color-text-ink) 64%, var(--color-background-paper)); + --campaign-intro-border: color-mix(in srgb, var(--color-border-stone) 65%, var(--color-background-paper)); + display: grid; + grid-template-columns: 300px minmax(300px, 1fr); + align-items: stretch; + position: relative; + width: min(720px, calc(100vw - 32px)); + max-height: calc(100dvh - 32px); + border-radius: 26px; + overflow-x: hidden; + overflow-y: auto; + box-shadow: + 0 22px 90px color-mix(in srgb, var(--color-text-ink) 18%, transparent), + 0 2px 10px color-mix(in srgb, var(--color-text-ink) 6%, transparent); + background: + linear-gradient( + 165deg, + color-mix(in srgb, var(--color-accent-peach) 18%, var(--color-background-paper)) 0%, + var(--color-background-paper) 42%, + var(--color-background-paper) 100% + ); + color: var(--color-text-ink); + outline: none; + font-family: var(--font-sans); +} + +.campaign-intro-close { + position: absolute; + z-index: 2; + top: 12px; + right: 12px; + display: grid; + place-items: center; + width: 22px; + height: 22px; + padding: 0; + border: 0; + border-radius: 999px; + color: #fff8e6; + background: rgba(13, 24, 42, 0.42); + box-shadow: 0 0 0 1px rgba(255, 248, 230, 0.22); + cursor: pointer; +} + +.campaign-intro-close:hover { + color: #fff; + background: rgba(13, 24, 42, 0.62); +} + +.campaign-intro-copy { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: flex-start; + padding: 30px 22px 22px; + overflow-y: auto; + min-height: 0; + background: color-mix(in srgb, var(--color-accent-peach) 16%, var(--color-background-paper)); +} + +.campaign-intro-eyebrow { + margin: 0 0 10px; + width: fit-content; + padding: 4px 10px; + border-radius: 999px; + background: color-mix(in srgb, var(--color-accent-peach) 42%, var(--color-background-paper)); + color: color-mix(in srgb, var(--color-icon-ember) 72%, var(--color-text-ink)); + font-size: 12px; + font-weight: 650; + letter-spacing: 0.04em; +} + +.campaign-intro-copy h2 { + margin: 0; + font-size: 24px; + line-height: 1.3; + font-weight: 700; + letter-spacing: -0.5px; + text-wrap: balance; +} + +.campaign-intro-poem { + margin: 18px 0 22px; + padding: 4px 0 4px 14px; + display: flex; + flex-direction: column; + gap: 8px; + border-left: 2px solid color-mix(in srgb, var(--color-icon-ember) 38%, var(--color-accent-peach)); +} + +.campaign-intro-poem p { + margin: 0; + font-size: 16px; + line-height: 1.75; + font-weight: 550; + color: color-mix(in srgb, var(--color-text-ink) 88%, var(--color-background-paper)); +} + +.campaign-intro-poem p:first-child { + font-size: 18px; + font-weight: 650; +} + +.campaign-intro-actions { + margin-top: auto; + padding-top: 24px; + display: flex; + align-items: center; + gap: 10px; +} + +.campaign-intro-primary { + width: 100%; + min-height: 44px; + padding: 10px 18px; + border: 0; + border-radius: 12px; + background: color-mix(in srgb, var(--color-action-sky) 64%, var(--color-icon-ember)); + color: #fffaf0; + font-size: 14px; + font-weight: 700; + letter-spacing: 0.02em; + cursor: pointer; +} + +.campaign-intro-primary:hover { + background: color-mix(in srgb, var(--color-action-sky-hover) 60%, var(--color-icon-ember)); +} + +.campaign-intro-dialog button:focus-visible { + outline: 2px solid color-mix(in srgb, var(--color-action-sky) 55%, var(--color-icon-ember)); + outline-offset: 4px; +} + +.campaign-intro-visual { + position: relative; + isolation: isolate; + overflow: hidden; + min-height: 468px; + background: #0d182a; +} + +.campaign-intro-art { + position: absolute; + inset: 0; + display: block; + width: 100%; + height: 100%; + object-fit: cover; + object-position: center 34%; +} + +@media (max-height: 620px) and (min-width: 821px) { + .campaign-intro-copy { padding: 24px 20px 18px; } + .campaign-intro-copy h2 { font-size: 24px; } + .campaign-intro-poem { margin: 14px 0 18px; } + .campaign-intro-poem p { font-size: 15px; } + .campaign-intro-poem p:first-child { font-size: 16px; } + .campaign-intro-visual { min-height: 400px; } +} + +@media (max-width: 820px) { + .campaign-intro-backdrop { padding: 16px; } + .campaign-intro-dialog { + width: min(430px, calc(100vw - 32px)); + max-height: calc(100dvh - 32px); + display: flex; + flex-direction: column; + overflow-y: auto; + border-radius: 21px; + } + .campaign-intro-copy { overflow: visible; padding: 28px 24px 24px; flex-shrink: 0; } + .campaign-intro-copy h2 { font-size: 24px; } + .campaign-intro-close { top: 10px; right: 10px; } + .campaign-intro-poem { margin: 18px 0 22px; } + .campaign-intro-visual { min-height: 280px; flex-shrink: 0; } +} diff --git a/App/frontend/desktop/src/components/campaign-prompt.tsx b/App/frontend/desktop/src/components/campaign-prompt.tsx new file mode 100644 index 000000000..fba7290f8 --- /dev/null +++ b/App/frontend/desktop/src/components/campaign-prompt.tsx @@ -0,0 +1,138 @@ +/** Large campaign reminder, matching the computer-history feature-update dialog. */ +import { X } from "lucide-react"; +import { useEffect, useRef, type KeyboardEvent } from "react"; +import { createPortal } from "react-dom"; +import campaignArtUrl from "../assets/campaign/mid-autumn-riceball.jpg"; +import { useTranslation } from "../i18n/use-translation.js"; +import "./campaign-prompt.css"; + +export interface CampaignPromptProps { + onOpenSite: () => void; + onDismiss: () => void; +} + +const CN_COPY = { + eyebrow: "campaignPrompt.eyebrow", + title: "campaignPrompt.title", + poem: ["campaignPrompt.poemLine1", "campaignPrompt.poemLine2", "campaignPrompt.poemLine3"], + cta: "campaignPrompt.cta" +} as const; + +const INTL_COPY = { + eyebrow: "campaignPromptIntl.eyebrow", + title: "campaignPromptIntl.title", + poem: ["campaignPromptIntl.poemLine1", "campaignPromptIntl.poemLine2", "campaignPromptIntl.poemLine3"], + cta: "campaignPromptIntl.cta" +} as const; + +/** Overseas builds show the intl copy set; the mainland build keeps the CN set. */ +function campaignCopy() { + return import.meta.env.MEMMY_APP_EDITION === "intl" ? INTL_COPY : CN_COPY; +} + +/** Centered feature-update dialog inviting the user to the activity site. */ +export function CampaignPrompt(props: CampaignPromptProps) { + const { t } = useTranslation(); + const dialogRef = useRef(null); + const onDismiss = props.onDismiss; + const copy = campaignCopy(); + + useEffect(() => { + const overflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; + dialogRef.current?.focus(); + + function onKey(event: globalThis.KeyboardEvent) { + if (event.key === "Escape") { + event.preventDefault(); + event.stopPropagation(); + onDismiss(); + } + } + + document.addEventListener("keydown", onKey, true); + return () => { + document.body.style.overflow = overflow; + document.removeEventListener("keydown", onKey, true); + }; + }, [onDismiss]); + + if (typeof document === "undefined") { + return null; + } + + return createPortal( +

{ + if (event.target === event.currentTarget) { + onDismiss(); + } + }} + > +
+ +
+

{t(copy.eyebrow)}

+

{t(copy.title)}

+
+ {copy.poem.map((key) => ( +

{t(key)}

+ ))} +
+
+ +
+
+ +
+
, + document.body + ); +} + +function trapFocus(event: KeyboardEvent) { + if (event.key !== "Tab") { + return; + } + const items = Array.from( + event.currentTarget.querySelectorAll('button:not(:disabled), a[href], [tabindex="0"]') + ); + const first = items[0]; + const last = items.at(-1); + if (!first || !last) { + event.preventDefault(); + return; + } + if (event.shiftKey && (document.activeElement === first || document.activeElement === event.currentTarget)) { + event.preventDefault(); + last.focus(); + } else if (!event.shiftKey && (document.activeElement === last || document.activeElement === event.currentTarget)) { + event.preventDefault(); + first.focus(); + } +} diff --git a/App/frontend/desktop/src/components/github-star-prompt-host.tsx b/App/frontend/desktop/src/components/github-star-prompt-host.tsx index 1f33f5657..1bc1911b0 100644 --- a/App/frontend/desktop/src/components/github-star-prompt-host.tsx +++ b/App/frontend/desktop/src/components/github-star-prompt-host.tsx @@ -1,5 +1,6 @@ /** Hosts the GitHub star prompt across all routes after agent turn completion. */ import { useEffect, useRef, useState } from "react"; +import { isCampaignPromptOpen } from "../app/campaign-prompt-state.js"; import { markGithubStarPromptActioned, markGithubStarPromptDismissed, @@ -29,7 +30,7 @@ export function GithubStarPromptHost() { } lastHandledCompletionAt.current = completion.at; - if (open) { + if (open || isCampaignPromptOpen()) { return; } diff --git a/App/frontend/desktop/src/components/notification-center.tsx b/App/frontend/desktop/src/components/notification-center.tsx new file mode 100644 index 000000000..d34586105 --- /dev/null +++ b/App/frontend/desktop/src/components/notification-center.tsx @@ -0,0 +1,111 @@ +/** App-wide notification center: a top-right stack with a queue for overflow. */ +import { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from "react"; +import { createPortal } from "react-dom"; +import type { LucideIcon } from "lucide-react"; +import { useTranslation } from "../i18n/use-translation.js"; +import { NotificationToast, type NotificationVariant } from "./notification-toast.js"; + +/** Max notifications visible at once; extras wait in the queue until a slot frees. */ +export const NOTIFICATION_STACK_MAX_VISIBLE = 3; + +export interface NotificationInput { + variant?: NotificationVariant; + title: string; + body?: string; + /** Optional emphasized value shown as the hero line, e.g. a credited token amount. */ + emphasis?: string; + /** Optional icon override; defaults to the variant icon. */ + icon?: LucideIcon; + /** Optional inline action link; clicking it runs onAction, then dismisses the notification. */ + actionLabel?: string; + onAction?: () => void; + /** Side effect to run when this notification is dismissed (e.g. refresh balance). */ + onClose?: () => void; +} + +interface NotificationItem extends NotificationInput { + id: string; +} + +export interface NotificationCenterValue { + /** Enqueues a notification and returns its id. */ + notify(input: NotificationInput): string; + /** Dismisses a notification by id (runs its onClose). */ + dismiss(id: string): void; +} + +const NotificationCenterContext = createContext(null); + +let notificationSeq = 0; + +function nextNotificationId(): string { + notificationSeq += 1; + return `notification-${notificationSeq}-${Date.now()}`; +} + +/** Provides notify/dismiss and renders the top-right stack. */ +export function NotificationCenterProvider(props: { children: ReactNode }) { + const { t } = useTranslation(); + const [items, setItems] = useState([]); + + const dismiss = useCallback((id: string) => { + setItems((current) => { + const target = current.find((item) => item.id === id); + if (!target) { + return current; + } + target.onClose?.(); + return current.filter((item) => item.id !== id); + }); + }, []); + + const notify = useCallback((input: NotificationInput) => { + const id = nextNotificationId(); + setItems((current) => [...current, { ...input, id }]); + return id; + }, []); + + const value = useMemo(() => ({ notify, dismiss }), [notify, dismiss]); + + // Keep FIFO order; show the first N, render newest-of-those on top. + const visible = items.slice(0, NOTIFICATION_STACK_MAX_VISIBLE); + const stack = typeof document === "undefined" || visible.length === 0 + ? null + : createPortal( +
+ {[...visible].reverse().map((item) => ( + { + item.onAction?.(); + dismiss(item.id); + } : undefined} + onDismiss={() => dismiss(item.id)} + /> + ))} +
, + document.body + ); + + return ( + + {props.children} + {stack} + + ); +} + +/** Access the notification center; throws outside the provider. */ +export function useNotificationCenter(): NotificationCenterValue { + const value = useContext(NotificationCenterContext); + if (!value) { + throw new Error("useNotificationCenter must be used within NotificationCenterProvider"); + } + return value; +} diff --git a/App/frontend/desktop/src/components/notification-toast.tsx b/App/frontend/desktop/src/components/notification-toast.tsx new file mode 100644 index 000000000..e6a0950e5 --- /dev/null +++ b/App/frontend/desktop/src/components/notification-toast.tsx @@ -0,0 +1,61 @@ +/** Generic top-right notification card. Compact base for all in-app notices. */ +import { ChevronRight, X, type LucideIcon } from "lucide-react"; +import { useTranslation } from "../i18n/use-translation.js"; + +export type NotificationVariant = "success" | "info" | "warning"; + +export interface NotificationToastProps { + variant?: NotificationVariant; + title: string; + body?: string; + /** Optional emphasized value shown under the title, e.g. a credited token amount. */ + emphasis?: string; + /** Optional leading icon. Omit for a text-only card. */ + icon?: LucideIcon; + /** Optional action link. */ + actionLabel?: string; + onAction?: () => void; + onDismiss: () => void; +} + +/** Notification card aligned with the GitHub-star floating card. */ +export function NotificationToast(props: NotificationToastProps) { + const { t } = useTranslation(); + const variant = props.variant ?? "info"; + const Icon = props.icon; + + return ( +
+ {Icon ? ( + + ) : null} +
+
+

{props.title}

+ +
+ {props.emphasis ?

{props.emphasis}

: null} + {props.body ?

{props.body}

: null} + {props.actionLabel && props.onAction ? ( + + ) : null} +
+
+ ); +} diff --git a/App/frontend/desktop/src/components/tests/campaign-token-prompts.test.tsx b/App/frontend/desktop/src/components/tests/campaign-token-prompts.test.tsx new file mode 100644 index 000000000..a72130db1 --- /dev/null +++ b/App/frontend/desktop/src/components/tests/campaign-token-prompts.test.tsx @@ -0,0 +1,127 @@ +// @vitest-environment happy-dom + +import { act, StrictMode } from "react"; +import { createRoot, type Root } from "react-dom/client"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { I18nProvider } from "../../i18n/i18n-provider.js"; +import { CampaignPrompt } from "../campaign-prompt.js"; +import { NotificationToast } from "../notification-toast.js"; + +(globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + +describe("campaign and token credit prompts", () => { + let container: HTMLDivElement; + let root: Root; + + beforeEach(() => { + container = document.createElement("div"); + document.body.append(container); + root = createRoot(container); + }); + + afterEach(() => { + act(() => root.unmount()); + document.body.replaceChildren(); + }); + + it("renders the large feature-update campaign dialog", () => { + act(() => { + root.render( + + + undefined} onDismiss={() => undefined} /> + + + ); + }); + + const dialog = document.body.querySelector(".campaign-intro-dialog"); + expect(dialog).not.toBeNull(); + expect(document.body.textContent).toContain("🥮 中秋限定 · 至 9.30"); + expect(document.body.textContent).toContain("中秋弹幕活动开始了"); + expect(document.body.textContent).toContain("🥮 中秋年年吃月饼"); + expect(document.body.textContent).toContain("🍙 饭团也可以是圆的"); + expect(document.body.textContent).toContain("吃完打卡评价还能领 Token"); + expect(document.body.textContent).toContain("去官网参与活动"); + expect(document.body.textContent).not.toContain("等下再来"); + expect(document.body.querySelector('[aria-label="关闭"]')).not.toBeNull(); + expect(document.body.querySelector(".campaign-intro-secondary")).toBeNull(); + expect(document.body.querySelector("img.campaign-intro-art")).not.toBeNull(); + expect(document.body.querySelector(".campaign-intro-moon")).toBeNull(); + expect(document.body.querySelector(".campaign-intro-mascot")).toBeNull(); + expect(document.body.querySelector(".campaign-intro-highlights")).toBeNull(); + expect(document.body.querySelector(".campaign-intro-demo")).toBeNull(); + expect(document.body.querySelector(".github-star-prompt")).toBeNull(); + }); + + it("renders the overseas copy for the intl edition", () => { + vi.stubEnv("MEMMY_APP_EDITION", "intl"); + + act(() => { + root.render( + + + undefined} onDismiss={() => undefined} /> + + + ); + }); + + expect(document.body.textContent).toContain("Word is, the year's roundest moon is almost here."); + expect(document.body.textContent).toContain("Our onigiri? Even rounder."); + expect(document.body.textContent).toContain("Doubt it? Take a bite, leave a review, and grab some tokens."); + expect(document.body.textContent).not.toContain("Mooncakes every Mid-Autumn"); + + vi.unstubAllEnvs(); + }); + + it("renders the overseas Chinese copy for the intl edition", () => { + vi.stubEnv("MEMMY_APP_EDITION", "intl"); + + act(() => { + root.render( + + + undefined} onDismiss={() => undefined} /> + + + ); + }); + + expect(document.body.textContent).toContain("听说,一年里最圆的月亮就要来了"); + expect(document.body.textContent).toContain("而我们的饭团?比它还圆"); + expect(document.body.textContent).not.toContain("中秋年年吃月饼"); + + vi.unstubAllEnvs(); + }); + + it("renders the token credit notice as title, amount, and close", () => { + const htmlContainer = document.createElement("div"); + const toastRoot = createRoot(htmlContainer); + const onDismiss = vi.fn(); + act(() => { + toastRoot.render( + + + + ); + }); + + expect(htmlContainer.querySelector(".memmy-notification--success")).not.toBeNull(); + expect(htmlContainer.querySelector(".memmy-notification__title")?.textContent).toBe("🎁 弹幕抽奖 Token 已到账"); + expect(htmlContainer.querySelector(".memmy-notification__emphasis")?.textContent).toBe("+500,000"); + expect(htmlContainer.querySelector(".memmy-notification__body")).toBeNull(); + expect(htmlContainer.querySelector(".memmy-notification__action")).toBeNull(); + + const close = htmlContainer.querySelector('[aria-label="关闭"]'); + act(() => (close as HTMLButtonElement).click()); + expect(onDismiss).toHaveBeenCalledTimes(1); + expect(htmlContainer.innerHTML).not.toContain("campaign-intro-primary"); + act(() => toastRoot.unmount()); + }); +}); diff --git a/App/frontend/desktop/src/components/tests/notification-center.test.tsx b/App/frontend/desktop/src/components/tests/notification-center.test.tsx new file mode 100644 index 000000000..8b9631782 --- /dev/null +++ b/App/frontend/desktop/src/components/tests/notification-center.test.tsx @@ -0,0 +1,97 @@ +// @vitest-environment happy-dom + +import { act } from "react"; +import { createRoot, type Root } from "react-dom/client"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { I18nProvider } from "../../i18n/i18n-provider.js"; +import { + NOTIFICATION_STACK_MAX_VISIBLE, + NotificationCenterProvider, + useNotificationCenter, + type NotificationCenterValue +} from "../notification-center.js"; + +(globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT: boolean }).IS_REACT_ACT_ENVIRONMENT = true; + +let center: NotificationCenterValue | null = null; + +function CenterHandle() { + center = useNotificationCenter(); + return null; +} + +function stackItems(): Element[] { + const stack = document.body.querySelector(".memmy-notification-stack"); + return stack ? Array.from(stack.querySelectorAll(".memmy-notification")) : []; +} + +describe("NotificationCenter", () => { + let container: HTMLDivElement; + let root: Root; + + beforeEach(() => { + container = document.createElement("div"); + document.body.append(container); + root = createRoot(container); + center = null; + act(() => { + root.render( + + + + + + ); + }); + }); + + afterEach(() => { + act(() => root.unmount()); + document.body.replaceChildren(); + }); + + it("caps visible notifications and queues the overflow", () => { + act(() => { + for (let i = 1; i <= NOTIFICATION_STACK_MAX_VISIBLE + 1; i += 1) { + center?.notify({ title: `通知 ${i}` }); + } + }); + + expect(stackItems()).toHaveLength(NOTIFICATION_STACK_MAX_VISIBLE); + // The 4th is queued, not shown yet. + expect(document.body.textContent).not.toContain("通知 4"); + }); + + it("runs onClose on dismiss and reveals the next queued notification", () => { + const onClose = vi.fn(); + act(() => { + center?.notify({ title: "通知 1", onClose }); + for (let i = 2; i <= NOTIFICATION_STACK_MAX_VISIBLE + 1; i += 1) { + center?.notify({ title: `通知 ${i}` }); + } + }); + expect(document.body.textContent).not.toContain("通知 4"); + + // Oldest visible ("通知 1") is rendered at the bottom; dismiss it via its close button. + const closeButtons = document.body.querySelectorAll('.memmy-notification [aria-label="关闭"]'); + act(() => (closeButtons[closeButtons.length - 1] as HTMLButtonElement).click()); + + expect(onClose).toHaveBeenCalledTimes(1); + expect(stackItems()).toHaveLength(NOTIFICATION_STACK_MAX_VISIBLE); + expect(document.body.textContent).toContain("通知 4"); + }); + + it("runs the action then dismisses the notification", () => { + const onAction = vi.fn(); + act(() => { + center?.notify({ title: "带链接的通知", actionLabel: "打开详情", onAction }); + }); + + const action = document.body.querySelector(".memmy-notification__action"); + expect(action?.textContent).toContain("打开详情"); + act(() => (action as HTMLButtonElement).click()); + + expect(onAction).toHaveBeenCalledTimes(1); + expect(stackItems()).toHaveLength(0); + }); +}); diff --git a/App/frontend/desktop/src/components/token-credit-toast-host.tsx b/App/frontend/desktop/src/components/token-credit-toast-host.tsx new file mode 100644 index 000000000..1165e3660 --- /dev/null +++ b/App/frontend/desktop/src/components/token-credit-toast-host.tsx @@ -0,0 +1,52 @@ +/** Enqueues the token-credit notification after a campaign reward is granted. */ +import { useEffect, useRef } from "react"; +import { isDesktopPromptPreview } from "../app/desktop-prompt-preview.js"; +import { useOptionalApiClients } from "../app/providers.js"; +import { useTranslation } from "../i18n/use-translation.js"; +import { formatTokenGiftAmount } from "../pages/token-gift.js"; +import { appActions } from "../state/app-actions.js"; +import { useAppState } from "../state/app-state.js"; +import { useNotificationCenter } from "./notification-center.js"; + +const PREVIEW_TOKEN_AMOUNT = 500_000; + +/** Pushes a manual-close credit notice; cloud unread-reward fetch is still pending. */ +export function TokenCreditToastHost() { + const { dispatch } = useAppState(); + const { clients } = useOptionalApiClients(); + const { t } = useTranslation(); + const { notify } = useNotificationCenter(); + const notifiedRef = useRef(false); + + useEffect(() => { + if (notifiedRef.current || !isDesktopPromptPreview("tokenCredit")) { + return; + } + notifiedRef.current = true; + showTokenCredit(PREVIEW_TOKEN_AMOUNT); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + /** Refreshes the token balance after the user closes the notice. */ + function refreshBalance() { + if (!clients) { + return; + } + void clients.bootstrap + .getBootstrap() + .then((bootstrap) => dispatch(appActions.tokenUsageUpdated(bootstrap.tokenUsage))) + .catch((error: unknown) => console.warn("[token-credit] failed to refresh token usage:", error)); + } + + /** Enqueues the title + amount credit notification. */ + function showTokenCredit(tokens: number) { + notify({ + variant: "success", + title: t("tokenCredit.title"), + emphasis: `+${formatTokenGiftAmount(tokens)}`, + onClose: refreshBalance + }); + } + + return null; +} diff --git a/App/frontend/desktop/src/i18n/messages.ts b/App/frontend/desktop/src/i18n/messages.ts index 63f32b8ef..4b17bc54f 100644 --- a/App/frontend/desktop/src/i18n/messages.ts +++ b/App/frontend/desktop/src/i18n/messages.ts @@ -179,6 +179,21 @@ export const zhCNMessages = { "githubStar.bodyLine2": "你的 Star 会帮助更多人发现它", "githubStar.cta": "去 GitHub 支持 ⭐", "githubStar.later": "以后再说", + "campaignPrompt.eyebrow": "🥮 中秋限定 · 至 9.30", + "campaignPrompt.title": "中秋弹幕活动开始了", + "campaignPrompt.poemLine1": "🥮 中秋年年吃月饼", + "campaignPrompt.poemLine2": "🍙 饭团也可以是圆的", + "campaignPrompt.poemLine3": "吃完打卡评价还能领 Token", + "campaignPrompt.cta": "去官网参与活动", + "campaignPromptIntl.eyebrow": "🌕 中秋限定", + "campaignPromptIntl.title": "最圆的月亮就要来了", + "campaignPromptIntl.poemLine1": "🌕 听说,一年里最圆的月亮就要来了", + "campaignPromptIntl.poemLine2": "而我们的饭团?比它还圆", + "campaignPromptIntl.poemLine3": "不信?咬一口、留个评价,还能顺手领点 Token", + "campaignPromptIntl.cta": "去官网参与活动", + "tokenCredit.title": "🎁 弹幕抽奖 Token 已到账", + "tokenCredit.body": "发弹幕抽奖的奖励已发放到你的账户", + "notifications.regionLabel": "通知", "login.title": "创建你的 Memmy 账号", "login.identifier": "邮箱或手机号", "login.phonePlaceholder": "请输入手机号", @@ -1864,6 +1879,21 @@ export const enUSMessages: Record = { "githubStar.bodyLine2": "Your Star helps more people discover it", "githubStar.cta": "Star on GitHub ⭐️", "githubStar.later": "Maybe later", + "campaignPrompt.eyebrow": "🥮 Limited · until Sep 30", + "campaignPrompt.title": "Mid-Autumn comment draw is on", + "campaignPrompt.poemLine1": "🥮 Mooncakes every Mid-Autumn", + "campaignPrompt.poemLine2": "🍙 Rice balls can be round too", + "campaignPrompt.poemLine3": "Check in, share a review, get Token", + "campaignPrompt.cta": "Join on our site", + "campaignPromptIntl.eyebrow": "🌕 Mid-Autumn · limited time", + "campaignPromptIntl.title": "The roundest moon is almost here", + "campaignPromptIntl.poemLine1": "🌕 Word is, the year's roundest moon is almost here.", + "campaignPromptIntl.poemLine2": "Our onigiri? Even rounder.", + "campaignPromptIntl.poemLine3": "Doubt it? Take a bite, leave a review, and grab some tokens.", + "campaignPromptIntl.cta": "Join on our site", + "tokenCredit.title": "🎁 Comment-draw Token credited", + "tokenCredit.body": "Your comment-draw prize is now in your account", + "notifications.regionLabel": "Notifications", "login.title": "Create your Memmy account", "login.identifier": "Email or phone", "login.phonePlaceholder": "Enter your phone number", diff --git a/App/frontend/desktop/src/styles.css b/App/frontend/desktop/src/styles.css index d0994cb58..ca972129b 100644 --- a/App/frontend/desktop/src/styles.css +++ b/App/frontend/desktop/src/styles.css @@ -7009,6 +7009,153 @@ input[type="checkbox"].check-sky:checked::after { background: var(--color-action-sky-hover); } +.memmy-notification-stack { + position: fixed; + top: 4.5rem; + right: var(--space-5); + z-index: 30; + display: flex; + flex-direction: column; + gap: var(--space-2); + width: 220px; + max-width: calc(100vw - 32px); + pointer-events: none; +} + +body.memmy-platform-windows:not(.memmy-window-fullscreen) .memmy-notification-stack { + top: calc(var(--codex-toolbar-height) + 4.5rem); +} + +.memmy-notification { + pointer-events: auto; + box-sizing: border-box; + display: flex; + align-items: flex-start; + gap: 12px; + width: 100%; + padding: 12px; + border-radius: var(--radius-card); + border: 1px solid color-mix(in srgb, var(--color-border-stone) 50%, transparent); + background: var(--color-background-paper); + box-shadow: var(--shadow-soft); + animation: memmy-notification-in 180ms ease-out; +} + +.memmy-notification--success { + --memmy-notification-accent: var(--color-action-sky); +} + +.memmy-notification--info { + --memmy-notification-accent: color-mix(in srgb, var(--color-text-ink) 55%, transparent); +} + +.memmy-notification--warning { + --memmy-notification-accent: var(--color-accent-peach); +} + +.memmy-notification__badge { + flex: 0 0 auto; + display: grid; + place-items: center; + width: 28px; + height: 28px; + margin-top: 1px; + border-radius: 8px; + color: var(--memmy-notification-accent); + background: color-mix(in srgb, var(--memmy-notification-accent) 12%, var(--color-background-paper)); +} + +.memmy-notification__content { + flex: 1 1 auto; + min-width: 0; + display: flex; + flex-direction: column; + gap: 4px; +} + +.memmy-notification__header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 8px; +} + +.memmy-notification__title { + margin: 0; + min-width: 0; + font-size: 13px; + font-weight: 700; + line-height: 18px; + color: var(--color-text-ink); +} + +.memmy-notification__emphasis { + margin: 0; + font-size: 14px; + font-weight: 700; + line-height: 20px; + color: var(--color-action-sky); +} + +.memmy-notification__body { + margin: 0; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: color-mix(in srgb, var(--color-text-ink) 58%, transparent); +} + +.memmy-notification__action { + align-self: flex-start; + display: inline-flex; + align-items: center; + gap: 1px; + margin-top: 4px; + padding: 0; + border: 0; + background: transparent; + color: var(--color-action-sky); + font-size: 12px; + font-weight: 550; + line-height: 16px; + cursor: pointer; +} + +.memmy-notification__action:hover { + color: var(--color-action-sky-hover); +} + +.memmy-notification__close { + flex: 0 0 auto; + display: inline-flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + margin: -2px -4px 0 0; + padding: 0; + border: 0; + border-radius: var(--radius-btn); + background: transparent; + color: color-mix(in srgb, var(--color-text-ink) 45%, transparent); + cursor: pointer; + transition: color 150ms ease, background 150ms ease; +} + +.memmy-notification__close:hover { + background: color-mix(in srgb, var(--color-canvas-oat) 70%, transparent); + color: color-mix(in srgb, var(--color-text-ink) 70%, transparent); +} + +@keyframes memmy-notification-in { + from { opacity: 0; transform: translateY(-6px); } + to { opacity: 1; transform: translateY(0); } +} + +@media (prefers-reduced-motion: reduce) { + .memmy-notification { animation: none; } +} + .banner { display: flex; align-items: flex-start; From 9ffd443b355d40b08457990fa2ebcd8e3299f46a Mon Sep 17 00:00:00 2001 From: xuzhiqin1990 Date: Sun, 20 Sep 2026 14:20:38 +0800 Subject: [PATCH 02/27] fix(desktop): persist custom models and last-used model in account mode In account mode the model dropdown re-derives modelAssignments.account.agent.candidates from modelAssignments.byok.agent.candidates on every startup. A custom (source: "byok") model added while in account mode was written only to the account candidate list, so it was dropped on the next restart; the last-used model reverted to the platform default for the same reason (its default preset was no longer in the re-derived candidates). - upsertModelConnection now also enrolls newly added BYOK presets into modelAssignments.byok.agent.candidates (the source of truth the backend account projection reads), so custom models survive the restart re-projection. - Selecting a model in the chat model picker now persists it as the mode default (new defaultModelSelectionInput helper + saveModelCatalog), so a new chat after restart defaults to the last-used model instead of the platform preset. - Add regression tests for candidate enrollment, default survival, and the helper. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../src/components/agent-model-selector.tsx | 7 +++ App/frontend/desktop/src/pages/home-page.tsx | 25 +++++++- .../desktop/src/state/model-workspace.ts | 28 +++++++++ .../src/state/tests/model-workspace.test.ts | 60 +++++++++++++++++++ 4 files changed, 119 insertions(+), 1 deletion(-) diff --git a/App/frontend/desktop/src/components/agent-model-selector.tsx b/App/frontend/desktop/src/components/agent-model-selector.tsx index cc36f7850..4e97cff6d 100644 --- a/App/frontend/desktop/src/components/agent-model-selector.tsx +++ b/App/frontend/desktop/src/components/agent-model-selector.tsx @@ -20,6 +20,12 @@ export interface AgentModelSelectorProps { scopeKey: string; disabled: boolean; seedConfig?: ModelProviderConfig | null; + /** + * Called when the user explicitly picks a model, so the caller can persist it as the + * mode default (remembered for new chats after restart). The per-chat selection is + * still tracked separately in Agent state. + */ + onDefaultModelSelected?: (candidateId: string) => void; } /** Per-chat catalog preset picker. Selection lives in Agent state, never browser storage. */ @@ -72,6 +78,7 @@ export function AgentModelSelector(props: AgentModelSelectorProps) { function selectModel(candidateId: string) { dispatch(agentActions.pendingModelPresetUpdated(props.scopeKey, candidateId)); + props.onDefaultModelSelected?.(candidateId); } function openCustomModelSettings() { diff --git a/App/frontend/desktop/src/pages/home-page.tsx b/App/frontend/desktop/src/pages/home-page.tsx index cbed71119..0c1c8fefa 100644 --- a/App/frontend/desktop/src/pages/home-page.tsx +++ b/App/frontend/desktop/src/pages/home-page.tsx @@ -51,7 +51,7 @@ import { type PendingFileAttachment, type PendingImage } from "../state/agent-composer-state.js"; -import { createModelWorkspace, resolveModelSelection } from "../state/model-workspace.js"; +import { createModelWorkspace, defaultModelSelectionInput, resolveModelSelection } from "../state/model-workspace.js"; import { AgentCommandPalette, buildVisibleSlashCommands, @@ -894,6 +894,27 @@ export function HomePage() { modelWorkspaceMode, selectedModelPreset ); + // Persist the model the user picks in the chat selector as the mode default, so a new chat + // after restart defaults to the last-used model instead of the platform default. Only the + // account/byok `agent.default` is written (the backend mirrors it to agents.defaults.modelPreset); + // the per-chat selection stays in Agent state. Relies on the BYOK-candidate enrollment fix so + // the default survives the account-mode startup re-projection. + const persistDefaultModelRef = useRef(false); + const persistDefaultModel = useCallback(async (candidateId: string) => { + const configClient = clients?.config; + if (!configClient || persistDefaultModelRef.current) return; + const input = defaultModelSelectionInput(modelWorkspace, modelWorkspaceMode, candidateId); + if (!input) return; + persistDefaultModelRef.current = true; + try { + const saved = await configClient.saveModelCatalog(input); + dispatch(appActions.modelConfigUpdated(saved)); + } catch { + // The per-chat selection is already applied; a failed default persist must not break it. + } finally { + persistDefaultModelRef.current = false; + } + }, [clients, modelWorkspace, modelWorkspaceMode, dispatch]); useEffect(() => { setAnalyticsModelSource(resolvedConversationModel.candidate?.source ?? null); return () => setAnalyticsModelSource(null); @@ -2721,6 +2742,7 @@ export function HomePage() { scopeKey={modelSelectionScopeKey} disabled={isCurrentAgentRunning || isCreatingChat || messageSendInFlight} seedConfig={state.modelConfig} + onDefaultModelSelected={persistDefaultModel} /> ); })} @@ -175,7 +174,7 @@ export function resolveTaskOwnership( ? projects.find((candidate) => candidate.id === task.groupProjectId) ?? null : null; if (project) return `${project.name} · ${task.cwd}`; - if (task.projectId == null) return labels.standaloneLabel ?? ""; + if (task.projectId == null) return ""; const unavailableLabel = labels.projectRegistryState === "corrupt" ? labels.registryUnavailableLabel : labels.missingProjectLabel; diff --git a/App/frontend/desktop/src/components/tests/search-palette.test.tsx b/App/frontend/desktop/src/components/tests/search-palette.test.tsx index 943fc2abc..8ea9d7f32 100644 --- a/App/frontend/desktop/src/components/tests/search-palette.test.tsx +++ b/App/frontend/desktop/src/components/tests/search-palette.test.tsx @@ -160,4 +160,24 @@ describe("SearchPalette", () => { expect(html).toContain('title="项目注册表不可用 · /projects/alpha"'); expect(html).toContain('aria-label="Project task · 项目注册表不可用 · /projects/alpha"'); }); + + it("does not render the standalone ownership label for independent tasks", () => { + const html = renderToString( + undefined} + onSelectTask={() => undefined} + /> + ); + + expect(html).toContain("独立任务"); + expect(html).not.toContain("最近"); + expect(html).not.toContain("search-palette-item-preview"); + }); }); From ef1418ee2a4a5781e1612295c580c7b204a22808 Mon Sep 17 00:00:00 2001 From: jiachengzhen Date: Tue, 22 Sep 2026 19:55:30 +0800 Subject: [PATCH 13/27] fix(chat): de-emphasize recovered tool errors --- .../src/pages/agent-thread-messages.tsx | 43 ++++++++++++++++- .../tests/agent-thread-messages.test.tsx | 48 +++++++++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/App/frontend/desktop/src/pages/agent-thread-messages.tsx b/App/frontend/desktop/src/pages/agent-thread-messages.tsx index 88a5d1f97..29588a66c 100644 --- a/App/frontend/desktop/src/pages/agent-thread-messages.tsx +++ b/App/frontend/desktop/src/pages/agent-thread-messages.tsx @@ -2334,7 +2334,7 @@ const TRACE_CATEGORY_ICONS: Record segment.type === "toolGroup" + ? segment.items.filter((item): item is ActivityToolStepItem => item.type === "toolStep") + : []); + steps.forEach((step, index) => { + if (step.event.phase !== "error") return; + const name = toolEventName(step.event); + if (!name) return; + step.recovered = steps.slice(index + 1).some((candidate) => ( + toolEventName(candidate.event) === name && toolEventSucceededForDisplay(candidate.event) + )); + }); +} + +function toolEventSucceededForDisplay(event: AgentToolProgressEvent): boolean { + if (event.phase !== "end" || event.error != null) return false; + if (typeof event.result === "string") { + const result = event.result.trim(); + if (/^(?:error|plugin_invalid|invalid|failed|failure)\s*:/iu.test(result)) return false; + if (result.startsWith("{")) { + try { + const parsed: unknown = JSON.parse(result); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + const record = parsed as Record; + if (record.ok === false || record.success === false || record.error) return false; + } + } catch { + // A non-JSON textual result may still represent a successful tool response. + } + } + } else if (event.result && typeof event.result === "object" && !Array.isArray(event.result)) { + const record = event.result as Record; + if (record.ok === false || record.success === false || record.error) return false; + } + return true; +} + function appendToolGroupSegment( segments: ActivitySegment[], key: string, diff --git a/App/frontend/desktop/src/pages/tests/agent-thread-messages.test.tsx b/App/frontend/desktop/src/pages/tests/agent-thread-messages.test.tsx index 7508d07a5..9e74374ff 100644 --- a/App/frontend/desktop/src/pages/tests/agent-thread-messages.test.tsx +++ b/App/frontend/desktop/src/pages/tests/agent-thread-messages.test.tsx @@ -668,6 +668,54 @@ describe("AgentThreadMessages", () => { expect(html).not.toContain("浏览了 1 处"); }); + it("de-emphasizes a tool validation error after the same tool succeeds on retry", () => { + const html = renderToString( + + + + ); + + expect(html).not.toContain("agent-activity-timeline-item--error"); + expect(html).not.toContain("agent-activity-timeline-item__error"); + expect(html).toContain("Invalid outputFormats"); + }); + + it("keeps an unrecovered tool error visibly red", () => { + const html = renderToString( + + + + ); + + expect(html).toContain("agent-activity-timeline-item--error"); + expect(html).toContain("agent-activity-timeline-item__error"); + }); + it("folds the whole finished run — thoughts, tools, drafts — behind one worked-for header", () => { const html = renderToString( From 7d585f1f855fa20fcf1e9e0cb601e7d99e7663f9 Mon Sep 17 00:00:00 2001 From: jiachengzhen Date: Tue, 22 Sep 2026 20:18:34 +0800 Subject: [PATCH 14/27] fix(upgrade): prefer packaged cloud endpoint over stale env --- App/backend/src/load-env.ts | 18 +++++++++--------- App/backend/src/tests/load-env.test.ts | 6 +++--- App/memmy-agent/src/load-env.ts | 25 +++++++++++++------------ App/memmy-agent/tests/load-env.test.ts | 6 +++--- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/App/backend/src/load-env.ts b/App/backend/src/load-env.ts index c6397e99e..6b9a8870c 100644 --- a/App/backend/src/load-env.ts +++ b/App/backend/src/load-env.ts @@ -34,15 +34,6 @@ export interface LoadCloudServiceEnvOptions { /** Loads the public cloud-service origin without allowing packaged raw env files. */ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): string | null { const env = options.env ?? process.env; - if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { - const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); - if (externalValue) { - env.MEMMY_CLOUD_SERVICE = externalValue; - return "environment"; - } - delete env.MEMMY_CLOUD_SERVICE; - } - if (options.manifestPath !== undefined) { if (!existsSync(options.manifestPath)) { throw new Error("Packaged desktop runtime manifest is missing"); @@ -57,6 +48,15 @@ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): s return options.manifestPath; } + if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { + const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); + if (externalValue) { + env.MEMMY_CLOUD_SERVICE = externalValue; + return "environment"; + } + delete env.MEMMY_CLOUD_SERVICE; + } + const moduleDir = options.moduleDir ?? dirname(fileURLToPath(import.meta.url)); const envPath = findRepoEnvFile(options.cwd ?? process.cwd()) ?? findRepoEnvFile(moduleDir); if (envPath) { diff --git a/App/backend/src/tests/load-env.test.ts b/App/backend/src/tests/load-env.test.ts index 7e2322a2f..d7fbe661b 100644 --- a/App/backend/src/tests/load-env.test.ts +++ b/App/backend/src/tests/load-env.test.ts @@ -11,13 +11,13 @@ afterEach(() => { }); describe("backend cloud-service env loading", () => { - it("keeps an explicit environment origin ahead of the packaged manifest", () => { + it("uses the packaged manifest instead of an inherited environment origin", () => { const root = fixtureRoot(); const manifestPath = writeManifest(root, "https://manifest.example.test"); const env = { MEMMY_CLOUD_SERVICE: "https://external.example.test" }; - expect(loadCloudServiceEnv({ env, manifestPath })).toBe("environment"); - expect(env.MEMMY_CLOUD_SERVICE).toBe("https://external.example.test"); + expect(loadCloudServiceEnv({ env, manifestPath })).toBe(manifestPath); + expect(env.MEMMY_CLOUD_SERVICE).toBe("https://manifest.example.test"); }); it("loads only the allowlisted cloud service from a packaged manifest", () => { diff --git a/App/memmy-agent/src/load-env.ts b/App/memmy-agent/src/load-env.ts index ffaffb3c7..8e64e42a6 100644 --- a/App/memmy-agent/src/load-env.ts +++ b/App/memmy-agent/src/load-env.ts @@ -6,8 +6,9 @@ * * Note: this module must be the first import in each entrypoint (main.ts / * index.ts), so it completes before providers/registry.ts or any other module - * reads MEMMY_CLOUD_SERVICE during module evaluation. Existing env values, such - * as externally injected ones, take priority and are not overwritten. + * reads MEMMY_CLOUD_SERVICE during module evaluation. Packaged manifest values + * take priority over inherited environment values so upgrades cannot keep a + * stale cloud endpoint from an earlier installation. */ import { config as loadDotenv } from "dotenv"; import { @@ -56,18 +57,9 @@ export interface LoadCloudServiceEnvOptions { loadDotenv?: typeof loadDotenv; } -/** Loads external env, then a packaged manifest, then a development .env. */ +/** Loads a packaged manifest first, then external env, then a development .env. */ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): string | null { const env = options.env ?? process.env; - if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { - const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); - if (externalValue) { - env.MEMMY_CLOUD_SERVICE = externalValue; - return "environment"; - } - delete env.MEMMY_CLOUD_SERVICE; - } - const moduleDir = options.moduleDir ?? dirname(fileURLToPath(import.meta.url)); const packagedRuntime = isPackagedRuntimeModule(moduleDir); if (options.manifestPath !== undefined || packagedRuntime) { @@ -81,6 +73,15 @@ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): s return manifestPath; } + if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { + const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); + if (externalValue) { + env.MEMMY_CLOUD_SERVICE = externalValue; + return "environment"; + } + delete env.MEMMY_CLOUD_SERVICE; + } + const envPath = findRepoEnvFile(options.cwd ?? process.cwd()) ?? findRepoEnvFile(moduleDir); if (envPath) { (options.loadDotenv ?? loadDotenv)({ diff --git a/App/memmy-agent/tests/load-env.test.ts b/App/memmy-agent/tests/load-env.test.ts index b9ccafd63..de4c2139a 100644 --- a/App/memmy-agent/tests/load-env.test.ts +++ b/App/memmy-agent/tests/load-env.test.ts @@ -11,7 +11,7 @@ afterEach(() => { }); describe("packaged memmy cloud-service loading", () => { - it("prefers explicit env, then the ASAR manifest, then development .env", () => { + it("uses the packaged manifest before inherited env, then development .env", () => { const root = fixtureRoot(); const moduleDir = join(root, "app.asar", "dist", "runtime", "memmy-agent", "dist"); mkdirSync(moduleDir, { recursive: true }); @@ -21,8 +21,8 @@ describe("packaged memmy cloud-service loading", () => { writeFileSync(join(root, ".env"), "MEMMY_CLOUD_SERVICE=https://dev.example.test\n"); const externalEnv = { MEMMY_CLOUD_SERVICE: "https://external.example.test" }; - expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: externalEnv })).toBe("environment"); - expect(externalEnv.MEMMY_CLOUD_SERVICE).toBe("https://external.example.test"); + expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: externalEnv })).toBe(manifestPath); + expect(externalEnv.MEMMY_CLOUD_SERVICE).toBe("https://manifest.example.test"); const packagedEnv: NodeJS.ProcessEnv = {}; expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: packagedEnv })).toBe(manifestPath); From cc98b69105f4e3ac81f838d27cd52297743609d0 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 22 Sep 2026 14:36:21 +0200 Subject: [PATCH 15/27] fix(upgrade): ignore stale cloud URL in packaged runtimes --- .env.example | 4 ++-- App/backend/src/load-env.ts | 3 +++ App/backend/src/tests/load-env.test.ts | 8 +++++++- App/memmy-agent/src/load-env.ts | 3 +++ App/memmy-agent/tests/load-env.test.ts | 6 +++++- Memory/src/cli/load-env.ts | 23 +++++++++++++---------- Memory/tests/load-env.test.ts | 10 +++++++--- docs/cn/development/local-dev.mdx | 2 +- docs/en/development/local-dev.mdx | 2 +- scripts/auto-release-mac.sh | 6 +++--- 10 files changed, 45 insertions(+), 22 deletions(-) diff --git a/.env.example b/.env.example index 79c90efae..4e901db56 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,8 @@ # Desktop edition (cn or intl; defaults to intl) MEMMY_APP_EDITION=intl -# Cloud service -MEMMY_CLOUD_SERVICE=https://memmy-api.memtensor.cn +# Cloud service origin (clients append /api/... paths) +MEMMY_CLOUD_SERVICE=https://api.memmy.cn # Analytics (GA4) MEMMY_GA4_MEASUREMENT_ID= diff --git a/App/backend/src/load-env.ts b/App/backend/src/load-env.ts index 6b9a8870c..f232128ce 100644 --- a/App/backend/src/load-env.ts +++ b/App/backend/src/load-env.ts @@ -45,6 +45,9 @@ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): s throw new Error("Packaged desktop runtime manifest cloud service must use HTTPS"); } env.MEMMY_CLOUD_SERVICE = manifestService; + // MEMMY_CLOUD_URL is a development-only override. Do not let a stale + // value inherited from an older installation redirect a packaged app. + delete env.MEMMY_CLOUD_URL; return options.manifestPath; } diff --git a/App/backend/src/tests/load-env.test.ts b/App/backend/src/tests/load-env.test.ts index d7fbe661b..042890e1f 100644 --- a/App/backend/src/tests/load-env.test.ts +++ b/App/backend/src/tests/load-env.test.ts @@ -2,6 +2,7 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { afterEach, describe, expect, it } from "vitest"; +import { resolveCloudClientConfig } from "../config/service-urls.js"; import { loadCloudServiceEnv } from "../load-env.js"; const roots: string[] = []; @@ -14,10 +15,15 @@ describe("backend cloud-service env loading", () => { it("uses the packaged manifest instead of an inherited environment origin", () => { const root = fixtureRoot(); const manifestPath = writeManifest(root, "https://manifest.example.test"); - const env = { MEMMY_CLOUD_SERVICE: "https://external.example.test" }; + const env = { + MEMMY_CLOUD_SERVICE: "https://external.example.test", + MEMMY_CLOUD_URL: "https://stale.example.test" + }; expect(loadCloudServiceEnv({ env, manifestPath })).toBe(manifestPath); expect(env.MEMMY_CLOUD_SERVICE).toBe("https://manifest.example.test"); + expect(env.MEMMY_CLOUD_URL).toBeUndefined(); + expect(resolveCloudClientConfig(env).baseUrl).toBe("https://manifest.example.test"); }); it("loads only the allowlisted cloud service from a packaged manifest", () => { diff --git a/App/memmy-agent/src/load-env.ts b/App/memmy-agent/src/load-env.ts index 8e64e42a6..1f1d1a399 100644 --- a/App/memmy-agent/src/load-env.ts +++ b/App/memmy-agent/src/load-env.ts @@ -70,6 +70,9 @@ export function loadCloudServiceEnv(options: LoadCloudServiceEnvOptions = {}): s env.MEMMY_CLOUD_SERVICE = cloudServiceFromDesktopRuntimeManifest( readFileSync(manifestPath, "utf8"), ); + // MEMMY_CLOUD_URL is a development-only override. Do not let a stale + // value inherited from an older installation redirect a packaged app. + delete env.MEMMY_CLOUD_URL; return manifestPath; } diff --git a/App/memmy-agent/tests/load-env.test.ts b/App/memmy-agent/tests/load-env.test.ts index de4c2139a..af851f3f4 100644 --- a/App/memmy-agent/tests/load-env.test.ts +++ b/App/memmy-agent/tests/load-env.test.ts @@ -20,9 +20,13 @@ describe("packaged memmy cloud-service loading", () => { writeFileSync(manifestPath, JSON.stringify({ cloudService: "https://manifest.example.test" })); writeFileSync(join(root, ".env"), "MEMMY_CLOUD_SERVICE=https://dev.example.test\n"); - const externalEnv = { MEMMY_CLOUD_SERVICE: "https://external.example.test" }; + const externalEnv = { + MEMMY_CLOUD_SERVICE: "https://external.example.test", + MEMMY_CLOUD_URL: "https://stale.example.test" + }; expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: externalEnv })).toBe(manifestPath); expect(externalEnv.MEMMY_CLOUD_SERVICE).toBe("https://manifest.example.test"); + expect(externalEnv.MEMMY_CLOUD_URL).toBeUndefined(); const packagedEnv: NodeJS.ProcessEnv = {}; expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: packagedEnv })).toBe(manifestPath); diff --git a/Memory/src/cli/load-env.ts b/Memory/src/cli/load-env.ts index c602e5c13..57fdaf58d 100644 --- a/Memory/src/cli/load-env.ts +++ b/Memory/src/cli/load-env.ts @@ -34,7 +34,7 @@ export function findRepoEnvFile(startDir: string): string | null { } } -/** Load external env, then the packaged manifest, then a development .env. */ +/** Load a packaged manifest first, then external env, then a development .env. */ export function loadCloudServiceEnv(options: { cwd?: string; moduleDir?: string; @@ -43,15 +43,6 @@ export function loadCloudServiceEnv(options: { loadDotenv?: typeof loadDotenv; } = {}): string | null { const env = options.env ?? process.env; - if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { - const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); - if (externalValue) { - env.MEMMY_CLOUD_SERVICE = externalValue; - return "environment"; - } - delete env.MEMMY_CLOUD_SERVICE; - } - const moduleDir = options.moduleDir ?? dirname(fileURLToPath(import.meta.url)); const packagedRuntime = isPackagedRuntimeModule(moduleDir); if (options.manifestPath !== undefined || packagedRuntime) { @@ -62,9 +53,21 @@ export function loadCloudServiceEnv(options: { env.MEMMY_CLOUD_SERVICE = cloudServiceFromDesktopRuntimeManifest( readFileSync(manifestPath, "utf8"), ); + // MEMMY_CLOUD_URL is a development-only override. Do not let a stale + // value inherited from an older installation redirect a packaged runtime. + delete env.MEMMY_CLOUD_URL; return manifestPath; } + if (Object.prototype.hasOwnProperty.call(env, "MEMMY_CLOUD_SERVICE")) { + const externalValue = env.MEMMY_CLOUD_SERVICE?.trim(); + if (externalValue) { + env.MEMMY_CLOUD_SERVICE = externalValue; + return "environment"; + } + delete env.MEMMY_CLOUD_SERVICE; + } + const envPath = findRepoEnvFile(options.cwd ?? process.cwd()) ?? findRepoEnvFile(moduleDir); if (envPath) { diff --git a/Memory/tests/load-env.test.ts b/Memory/tests/load-env.test.ts index 468d35cb8..a19301477 100644 --- a/Memory/tests/load-env.test.ts +++ b/Memory/tests/load-env.test.ts @@ -20,9 +20,13 @@ describe("packaged memmy-memory cloud-service loading", () => { writeFileSync(manifestPath, JSON.stringify({ cloudService: "https://manifest.example.test" })); writeFileSync(join(root, ".env"), "MEMMY_CLOUD_SERVICE=https://dev.example.test\n"); - const externalEnv = { MEMMY_CLOUD_SERVICE: "https://external.example.test" }; - expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: externalEnv })).toBe("environment"); - expect(externalEnv.MEMMY_CLOUD_SERVICE).toBe("https://external.example.test"); + const externalEnv = { + MEMMY_CLOUD_SERVICE: "https://external.example.test", + MEMMY_CLOUD_URL: "https://stale.example.test" + }; + expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: externalEnv })).toBe(manifestPath); + expect(externalEnv.MEMMY_CLOUD_SERVICE).toBe("https://manifest.example.test"); + expect(externalEnv.MEMMY_CLOUD_URL).toBeUndefined(); const packagedEnv: NodeJS.ProcessEnv = {}; expect(loadCloudServiceEnv({ cwd: root, moduleDir, env: packagedEnv })).toBe(manifestPath); diff --git a/docs/cn/development/local-dev.mdx b/docs/cn/development/local-dev.mdx index 0565fcc03..e4fd34f48 100644 --- a/docs/cn/development/local-dev.mdx +++ b/docs/cn/development/local-dev.mdx @@ -15,7 +15,7 @@ bash scripts/dev-start.sh # 装依赖 → 构建 → 起全套服务 `scripts/dev-start.sh` 一条命令完成全部:自动安装依赖、构建 Memory 与 memmy-agent、把 `memmy` / `memmy-memory` CLI 安装到 `~/.local/bin`,并同时拉起 Memory、Agent API、Gateway、前端和桌面后端。启动后在弹出的桌面应用里完成账号登录或 BYOK 配置,脚本会在模型配置写好后自动启动 agent 服务。 -> `.env` 中 `MEMMY_CLOUD_SERVICE` 默认指向 `https://memmy-api.memtensor.cn`,复制即连官方云服务——无需自建后端、无需自备 API Key。Windows 请在 Git Bash 中运行;脚本会把 `~/.local/bin` 加入 PATH。 +> `.env` 中 `MEMMY_CLOUD_SERVICE` 默认指向 `https://api.memmy.cn`(只填写域名,不要追加 `/api`,客户端会自动拼接接口路径),复制即连官方云服务——无需自建后端、无需自备 API Key。Windows 请在 Git Bash 中运行;脚本会把 `~/.local/bin` 加入 PATH。 ## 环境要求 diff --git a/docs/en/development/local-dev.mdx b/docs/en/development/local-dev.mdx index cb60cf857..13e9e1422 100644 --- a/docs/en/development/local-dev.mdx +++ b/docs/en/development/local-dev.mdx @@ -15,7 +15,7 @@ bash scripts/dev-start.sh # Install deps → build → start the full stack `scripts/dev-start.sh` does everything in one command: it installs dependencies, builds Memory and memmy-agent, installs the `memmy` / `memmy-memory` CLIs into `~/.local/bin`, and starts the full stack (Memory, Agent API, Gateway, frontend, and desktop backend). Once the desktop app opens, finish account sign-in or BYOK setup — the script waits for the model config and then starts the agent services automatically. -> `MEMMY_CLOUD_SERVICE` in `.env` defaults to `https://memmy-api.memtensor.cn`, so copying it connects you to the official cloud — no self-hosted backend or API key required. On Windows, run it in Git Bash; the script adds `~/.local/bin` to your PATH. +> `MEMMY_CLOUD_SERVICE` in `.env` defaults to `https://api.memmy.cn (use the origin only; clients append /api/... paths)`, so copying it connects you to the official cloud — no self-hosted backend or API key required. On Windows, run it in Git Bash; the script adds `~/.local/bin` to your PATH. ## Requirements diff --git a/scripts/auto-release-mac.sh b/scripts/auto-release-mac.sh index e6d62be63..136ce85ec 100644 --- a/scripts/auto-release-mac.sh +++ b/scripts/auto-release-mac.sh @@ -21,11 +21,11 @@ REPO_DIR="/Users/zongy/Documents/MemTensor/Memmy-agent" BRANCH="${MEMMY_RELEASE_BRANCH:-}" # Backend for upload + querying the download list (cn/intl share the same one) -API_BASE="https://memmy-api.memtensor.cn" +API_BASE="https://api.memmy.cn" # Public cloud-service origin embedded through the allowlisted runtime manifest. -CN_CLOUD_SERVICE="https://memmy-api.memtensor.cn" -INTL_CLOUD_SERVICE="https://memmy-api.memtensor.cn" +CN_CLOUD_SERVICE="https://api.memmy.cn" +INTL_CLOUD_SERVICE="https://api.memmy.cn" # Release notes (customizable) RELEASE_NOTES="Daily automated build (dev)" From 50ed14c1af29e06aca7ae1179b9766fba1405bcf Mon Sep 17 00:00:00 2001 From: jiachengzhen Date: Tue, 22 Sep 2026 20:50:05 +0800 Subject: [PATCH 16/27] test(packaging): guard manifest cloud endpoint loading --- App/shell/desktop/tests/packaged-runtime-boundary.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/App/shell/desktop/tests/packaged-runtime-boundary.test.ts b/App/shell/desktop/tests/packaged-runtime-boundary.test.ts index 6ba50d929..923e44c92 100644 --- a/App/shell/desktop/tests/packaged-runtime-boundary.test.ts +++ b/App/shell/desktop/tests/packaged-runtime-boundary.test.ts @@ -1900,6 +1900,7 @@ describe("desktop packaged runtime boundaries", () => { const versionGuardSource = readFileSync(verifyPackageVersionPath, "utf8"); const asarGuardSource = readFileSync(verifyPackagedAsarPath, "utf8"); + expect(mainSource).toContain("loadCloudServiceEnv({"); expect(mainSource).toContain('manifestPath: app.isPackaged ? join(import.meta.dirname, "desktop-edition.json") : undefined'); for (const source of [macSource, winSource]) { expect(source).toContain("write-desktop-edition-manifest.mjs"); From d9e2dd219be54819a2009c7cb7e30c4d5dab9637 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:25:41 +0800 Subject: [PATCH 17/27] chore(release): bump Memmy to 1.1.8 --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index bd7ddf477..ce2801dbb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "private": true, "type": "module", "description": "Local-first agent memory substrate with desktop and CLI surfaces.", @@ -97,3 +97,4 @@ "wait-on": "^9.0.10" } } + From 219806fda56b9233d15b6fc751e7f0f5247ede85 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:26:38 +0800 Subject: [PATCH 18/27] chore(release): sync App agent version --- App/memmy-agent/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/App/memmy-agent/package.json b/App/memmy-agent/package.json index 003e08295..fc8791c2e 100644 --- a/App/memmy-agent/package.json +++ b/App/memmy-agent/package.json @@ -1,6 +1,6 @@ { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "description": "TypeScript refactor of memmy's agent runtime.", "type": "module", "main": "./dist/index.js", @@ -107,3 +107,4 @@ "node": ">=22" } } + From 0a7e11d204affd09676404ba68bf485939981f02 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:26:53 +0800 Subject: [PATCH 19/27] chore(release): sync desktop version --- App/shell/desktop/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/App/shell/desktop/package.json b/App/shell/desktop/package.json index fcc11589c..d63a7fbab 100644 --- a/App/shell/desktop/package.json +++ b/App/shell/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@memmy/desktop", - "version": "1.1.7", + "version": "1.1.8", "private": true, "type": "module", "description": "Memmy desktop client.", @@ -34,3 +34,4 @@ "electron-builder": "^26.0.12" } } + From 3264f2bd69f79b350886e379bc0da42e5af6c397 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:26:58 +0800 Subject: [PATCH 20/27] chore(release): sync backend version --- App/backend/src/project-version.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/App/backend/src/project-version.ts b/App/backend/src/project-version.ts index df3b4098a..374b4742c 100644 --- a/App/backend/src/project-version.ts +++ b/App/backend/src/project-version.ts @@ -1,2 +1,3 @@ /** Generated from the root package.json by scripts/sync-project-version.mjs. */ -export const MEMMY_VERSION = "1.1.7"; +export const MEMMY_VERSION = "1.1.8"; + From 1f430a7369eabec2c4acb192b5b45dc5f2e08b17 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:31:23 +0800 Subject: [PATCH 21/27] chore(release): sync root lockfile to 1.1.8 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22271b4bf..e0423e55d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "workspaces": [ "Migrations", "AgentSourceCore", @@ -585,7 +585,7 @@ }, "App/shell/desktop": { "name": "@memmy/desktop", - "version": "1.1.7", + "version": "1.1.8", "dependencies": { "@memmy/backend": "0.0.0", "@memmy/desktop-interface": "0.0.0", From f9a7b23877c3482b8db50e4c6297d3d79d51cddb Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:32:50 +0800 Subject: [PATCH 22/27] chore(release): sync agent lockfile to 1.1.8 --- App/memmy-agent/package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/App/memmy-agent/package-lock.json b/App/memmy-agent/package-lock.json index fe7597811..94cfeb826 100644 --- a/App/memmy-agent/package-lock.json +++ b/App/memmy-agent/package-lock.json @@ -1,12 +1,12 @@ { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "memmy-agent", - "version": "1.1.7", + "version": "1.1.8", "dependencies": { "@anthropic-ai/sdk": "^0.100.1", "@aws-sdk/client-bedrock-runtime": "^3.1061.0", From 5a545f4bf3fbb3c7c151bba2005c11dbfb9a42cd Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:35:04 +0800 Subject: [PATCH 23/27] docs(release): add Memmy v1.1.8 release notes Added release notes for Memmy version 1.1.8, detailing highlights and upgrade notes. --- .github/release-notes/v1.1.8.md/v1.1.8.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/release-notes/v1.1.8.md/v1.1.8.md diff --git a/.github/release-notes/v1.1.8.md/v1.1.8.md b/.github/release-notes/v1.1.8.md/v1.1.8.md new file mode 100644 index 000000000..694c9355f --- /dev/null +++ b/.github/release-notes/v1.1.8.md/v1.1.8.md @@ -0,0 +1,13 @@ +# Memmy v1.1.8 + +## Highlights + +- Fixed Windows startup lifecycle handling reported by MEMMY-495. +- Fixed Windows memory-service cleanup and update blocking reported by MEMMY-504 and MEMMY-494. +- Persisted monotonic WebUI transcript event timestamps reported by MEMMY-434. + +## Upgrade notes + +- Memmy Desktop and Agent are version 1.1.8. +- The bundled Memory service, viewer, and CLI remain independently versioned. +- The Memory protocol remains version 1. From edb66777267f5153df93eedca5ebb643e1643e7b Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:38:51 +0800 Subject: [PATCH 24/27] chore(release): remove misplaced nested release notes --- .github/release-notes/v1.1.8.md/v1.1.8.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 .github/release-notes/v1.1.8.md/v1.1.8.md diff --git a/.github/release-notes/v1.1.8.md/v1.1.8.md b/.github/release-notes/v1.1.8.md/v1.1.8.md deleted file mode 100644 index 694c9355f..000000000 --- a/.github/release-notes/v1.1.8.md/v1.1.8.md +++ /dev/null @@ -1,13 +0,0 @@ -# Memmy v1.1.8 - -## Highlights - -- Fixed Windows startup lifecycle handling reported by MEMMY-495. -- Fixed Windows memory-service cleanup and update blocking reported by MEMMY-504 and MEMMY-494. -- Persisted monotonic WebUI transcript event timestamps reported by MEMMY-434. - -## Upgrade notes - -- Memmy Desktop and Agent are version 1.1.8. -- The bundled Memory service, viewer, and CLI remain independently versioned. -- The Memory protocol remains version 1. From ad55d9d284dd7064e9d9a5bf6c2dc45e24e355b2 Mon Sep 17 00:00:00 2001 From: Chengzhen Jia Date: Tue, 22 Sep 2026 21:40:13 +0800 Subject: [PATCH 25/27] docs(release): add Memmy v1.1.8 release notes --- .github/release-notes/v1.1.8.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/release-notes/v1.1.8.md diff --git a/.github/release-notes/v1.1.8.md b/.github/release-notes/v1.1.8.md new file mode 100644 index 000000000..694c9355f --- /dev/null +++ b/.github/release-notes/v1.1.8.md @@ -0,0 +1,13 @@ +# Memmy v1.1.8 + +## Highlights + +- Fixed Windows startup lifecycle handling reported by MEMMY-495. +- Fixed Windows memory-service cleanup and update blocking reported by MEMMY-504 and MEMMY-494. +- Persisted monotonic WebUI transcript event timestamps reported by MEMMY-434. + +## Upgrade notes + +- Memmy Desktop and Agent are version 1.1.8. +- The bundled Memory service, viewer, and CLI remain independently versioned. +- The Memory protocol remains version 1. From 68f148aaa4b306f55ca09bb697b60cf2742a1002 Mon Sep 17 00:00:00 2001 From: jiachengzhen Date: Wed, 23 Sep 2026 15:33:58 +0800 Subject: [PATCH 26/27] fix(release): normalize v1.1.8 version metadata --- App/backend/src/project-version.ts | 1 - App/memmy-agent/package.json | 1 - App/shell/desktop/package.json | 1 - 3 files changed, 3 deletions(-) diff --git a/App/backend/src/project-version.ts b/App/backend/src/project-version.ts index 374b4742c..913ec8dcd 100644 --- a/App/backend/src/project-version.ts +++ b/App/backend/src/project-version.ts @@ -1,3 +1,2 @@ /** Generated from the root package.json by scripts/sync-project-version.mjs. */ export const MEMMY_VERSION = "1.1.8"; - diff --git a/App/memmy-agent/package.json b/App/memmy-agent/package.json index fc8791c2e..06b93c83e 100644 --- a/App/memmy-agent/package.json +++ b/App/memmy-agent/package.json @@ -107,4 +107,3 @@ "node": ">=22" } } - diff --git a/App/shell/desktop/package.json b/App/shell/desktop/package.json index d63a7fbab..cac7e5b4e 100644 --- a/App/shell/desktop/package.json +++ b/App/shell/desktop/package.json @@ -34,4 +34,3 @@ "electron-builder": "^26.0.12" } } - From 323acf1f36eaee913315145a4b5fec00b869a550 Mon Sep 17 00:00:00 2001 From: jiachengzhen Date: Wed, 23 Sep 2026 16:14:59 +0800 Subject: [PATCH 27/27] chore(release): normalize v1.1.8 version metadata --- App/backend/src/project-version.ts | 1 - App/memmy-agent/package.json | 1 - App/shell/desktop/package.json | 1 - 3 files changed, 3 deletions(-) diff --git a/App/backend/src/project-version.ts b/App/backend/src/project-version.ts index 374b4742c..913ec8dcd 100644 --- a/App/backend/src/project-version.ts +++ b/App/backend/src/project-version.ts @@ -1,3 +1,2 @@ /** Generated from the root package.json by scripts/sync-project-version.mjs. */ export const MEMMY_VERSION = "1.1.8"; - diff --git a/App/memmy-agent/package.json b/App/memmy-agent/package.json index fc8791c2e..06b93c83e 100644 --- a/App/memmy-agent/package.json +++ b/App/memmy-agent/package.json @@ -107,4 +107,3 @@ "node": ">=22" } } - diff --git a/App/shell/desktop/package.json b/App/shell/desktop/package.json index d63a7fbab..cac7e5b4e 100644 --- a/App/shell/desktop/package.json +++ b/App/shell/desktop/package.json @@ -34,4 +34,3 @@ "electron-builder": "^26.0.12" } } -