Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit 877dabf

Browse files
committed
Add final release upgrade announcement
1 parent 2ee3fd7 commit 877dabf

4 files changed

Lines changed: 84 additions & 43 deletions

File tree

src/core/webview/ClineProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export class ClineProvider
149149

150150
public isViewLaunched = false
151151
public settingsImportedAt?: number
152-
public readonly latestAnnouncementId = "apr-2026-v3.53.0-community-handoff-gpt55-opus47" // v3.53.0 Community handoff, GPT-5.5, Claude Opus 4.7, checkpoint navigation
152+
public readonly latestAnnouncementId = "may-2026-final-roo-code-release" // Final Roo Code release announcement.
153153
public readonly providerSettingsManager: ProviderSettingsManager
154154
public readonly customModesManager: CustomModesManager
155155

webview-ui/src/components/chat/Announcement.tsx

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,33 +36,42 @@ const Announcement = ({ hideAnnouncement }: AnnouncementProps) => {
3636
}}>
3737
<DialogContent>
3838
<DialogHeader>
39-
<DialogTitle>{t("chat:announcement.title", { version: Package.version })}</DialogTitle>
39+
<DialogTitle>{t("chat:announcement.finalRelease.title", { version: Package.version })}</DialogTitle>
4040
</DialogHeader>
41-
<div>
42-
<div className="mb-4">
43-
<p className="mb-3">{t("chat:announcement.release.heading")}</p>
44-
<ul className="list-disc list-inside text-sm space-y-1.5">
45-
<li>{t("chat:announcement.release.gpt55")}</li>
46-
<li>{t("chat:announcement.release.claudeOpus47")}</li>
47-
<li>{t("chat:announcement.release.checkpointNav")}</li>
48-
</ul>
49-
</div>
50-
51-
<div className="mt-3 text-sm text-center text-vscode-descriptionForeground">
52-
<Trans i18nKey="chat:announcement.support" components={{ githubLink: <GitHubLink /> }} />
53-
</div>
41+
<div className="text-sm leading-relaxed text-vscode-descriptionForeground">
42+
<p className="mt-0">
43+
<Trans
44+
i18nKey="chat:announcement.finalRelease.intro"
45+
components={{
46+
announcementLink: (
47+
<ExternalLink href="https://x.com/mattrubens/status/2046636598859559114" />
48+
),
49+
}}
50+
/>
51+
</p>
52+
<p>{t("chat:announcement.finalRelease.continuity")}</p>
53+
<p>
54+
<Trans
55+
i18nKey="chat:announcement.finalRelease.alternatives"
56+
components={{
57+
zooCodeLink: <ExternalLink href="https://github.com/Zoo-Code-Org/Zoo-Code/" />,
58+
clineLink: <ExternalLink href="https://cline.bot/" />,
59+
}}
60+
/>
61+
</p>
62+
<p className="mb-0">{t("chat:announcement.finalRelease.signoff")}</p>
5463
</div>
5564
</DialogContent>
5665
</Dialog>
5766
)
5867
}
5968

60-
const GitHubLink = ({ children }: { children?: ReactNode }) => (
69+
const ExternalLink = ({ children, href }: { children?: ReactNode; href: string }) => (
6170
<VSCodeLink
62-
href="https://github.com/RooCodeInc/Roo-Code"
71+
href={href}
6372
onClick={(e) => {
6473
e.preventDefault()
65-
vscode.postMessage({ type: "openExternal", url: "https://github.com/RooCodeInc/Roo-Code" })
74+
vscode.postMessage({ type: "openExternal", url: href })
6675
}}>
6776
{children}
6877
</VSCodeLink>

webview-ui/src/components/chat/__tests__/Announcement.spec.tsx

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,48 @@ vi.mock("@vscode/webview-ui-toolkit/react", () => ({
2525
}))
2626

2727
vi.mock("react-i18next", () => ({
28-
Trans: ({ i18nKey }: { i18nKey: string }) => <span>{i18nKey}</span>,
28+
Trans: ({ i18nKey, components }: { i18nKey: string; components?: Record<string, React.ReactElement> }) => {
29+
if (i18nKey === "chat:announcement.finalRelease.intro") {
30+
return (
31+
<span>
32+
This is the last Roo Code release.{" "}
33+
{components?.announcementLink &&
34+
React.cloneElement(components.announcementLink, {}, "As we announced a few weeks ago")}
35+
, we{"'"}ve decided to shift our focus to Roomote, our cloud agent platform, which we believe to be
36+
the future of software development. Thank you so much for your support throughout the past year or
37+
so.
38+
</span>
39+
)
40+
}
41+
42+
if (i18nKey === "chat:announcement.finalRelease.alternatives") {
43+
return (
44+
<span>
45+
If you want to use an extension, we recommend checking out{" "}
46+
{components?.zooCodeLink && React.cloneElement(components.zooCodeLink, {}, "ZooCode")} (a Roo Code
47+
fork by the community) and{" "}
48+
{components?.clineLink && React.cloneElement(components.clineLink, {}, "Cline")} (where Roo Code
49+
originally started).
50+
</span>
51+
)
52+
}
53+
54+
return <span>{i18nKey}</span>
55+
},
2956
}))
3057

3158
vi.mock("@src/i18n/TranslationContext", () => ({
3259
useAppTranslation: () => ({
3360
t: (key: string, options?: { version?: string }) => {
3461
const translations: Record<string, string> = {
35-
"chat:announcement.release.heading": "What's New:",
36-
"chat:announcement.release.gpt55":
37-
"GPT-5.5 via OpenAI Codex: Added GPT-5.5 support in the OpenAI Codex provider so you can use the latest model straight from Roo Code.",
38-
"chat:announcement.release.claudeOpus47":
39-
"Claude Opus 4.7 on Vertex AI: Added Claude Opus 4.7 to the Vertex AI provider for Anthropic's newest flagship reasoning model.",
40-
"chat:announcement.release.checkpointNav":
41-
"Previous Checkpoint Navigation: Added controls in chat to jump back through prior checkpoints, with full i18n support.",
62+
"chat:announcement.finalRelease.title": "The last Roo Code release",
63+
"chat:announcement.finalRelease.continuity":
64+
"This extension should continue to work indefinitely, but it won't receive bug fixes, new features, or model updates.",
65+
"chat:announcement.finalRelease.signoff": "Happy coding!",
4266
}
4367

44-
if (key === "chat:announcement.title") {
45-
return `Roo Code ${options?.version ?? ""} Released`
68+
if (key === "chat:announcement.finalRelease.title") {
69+
return `${translations[key]}${options?.version ? "" : ""}`
4670
}
4771

4872
return translations[key] ?? key
@@ -51,36 +75,37 @@ vi.mock("@src/i18n/TranslationContext", () => ({
5175
}))
5276

5377
describe("Announcement", () => {
54-
it("renders the v3.53.0 announcement title and highlights", () => {
78+
it("renders the final release announcement", () => {
5579
render(<Announcement hideAnnouncement={vi.fn()} />)
5680

57-
expect(screen.getByText("Roo Code 3.53.0 Released")).toBeInTheDocument()
58-
expect(
59-
screen.getByText(
60-
"GPT-5.5 via OpenAI Codex: Added GPT-5.5 support in the OpenAI Codex provider so you can use the latest model straight from Roo Code.",
61-
),
62-
).toBeInTheDocument()
63-
expect(
64-
screen.getByText(
65-
"Claude Opus 4.7 on Vertex AI: Added Claude Opus 4.7 to the Vertex AI provider for Anthropic's newest flagship reasoning model.",
66-
),
67-
).toBeInTheDocument()
81+
expect(screen.getByText("The last Roo Code release")).toBeInTheDocument()
82+
expect(screen.getByText(/This is the last Roo Code release/)).toBeInTheDocument()
6883
expect(
6984
screen.getByText(
70-
"Previous Checkpoint Navigation: Added controls in chat to jump back through prior checkpoints, with full i18n support.",
85+
"This extension should continue to work indefinitely, but it won't receive bug fixes, new features, or model updates.",
7186
),
7287
).toBeInTheDocument()
88+
expect(screen.getByText("Happy coding!")).toBeInTheDocument()
7389
})
7490

75-
it("renders exactly three release highlight bullets", () => {
91+
it("renders the external links", () => {
7692
render(<Announcement hideAnnouncement={vi.fn()} />)
7793

78-
expect(screen.getAllByRole("listitem")).toHaveLength(3)
94+
expect(screen.getByRole("link", { name: "As we announced a few weeks ago" })).toHaveAttribute(
95+
"href",
96+
"https://x.com/mattrubens/status/2046636598859559114",
97+
)
98+
expect(screen.getByRole("link", { name: "ZooCode" })).toHaveAttribute(
99+
"href",
100+
"https://github.com/Zoo-Code-Org/Zoo-Code/",
101+
)
102+
expect(screen.getByRole("link", { name: "Cline" })).toHaveAttribute("href", "https://cline.bot/")
79103
})
80104

81105
it("does not render corporate handoff or social links", () => {
82106
render(<Announcement hideAnnouncement={vi.fn()} />)
83107

108+
expect(screen.queryByRole("listitem")).not.toBeInTheDocument()
84109
expect(screen.queryByText("chat:announcement.handoff.description")).not.toBeInTheDocument()
85110
expect(screen.queryByRole("link", { name: "X" })).not.toBeInTheDocument()
86111
expect(screen.queryByRole("link", { name: "Discord" })).not.toBeInTheDocument()

webview-ui/src/i18n/locales/en/chat.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,13 @@
350350
"announcement": {
351351
"title": "Roo Code {{version}} Released",
352352
"support": "Please support Roo Code by starring us on <githubLink>GitHub</githubLink>.",
353+
"finalRelease": {
354+
"title": "The last Roo Code release",
355+
"intro": "This is the last Roo Code release. <announcementLink>As we announced a few weeks ago</announcementLink>, we've decided to shift our focus to Roomote, our cloud agent platform, which we believe to be the future of software development. Thank you so much for your support throughout the past year or so.",
356+
"continuity": "This extension should continue to work indefinitely, but it won't receive bug fixes, new features, or model updates.",
357+
"alternatives": "If you want to use an extension, we recommend checking out <zooCodeLink>ZooCode</zooCodeLink> (a Roo Code fork by the community) and <clineLink>Cline</clineLink> (where Roo Code originally started).",
358+
"signoff": "Happy coding!"
359+
},
353360
"release": {
354361
"heading": "What's New:",
355362
"gpt55": "GPT-5.5 via OpenAI Codex: Added GPT-5.5 support in the OpenAI Codex provider so you can use the latest model straight from Roo Code.",

0 commit comments

Comments
 (0)