mirror of
https://github.com/multica-ai/multica.git
synced 2026-06-23 07:29:14 +02:00
Compare commits
1 Commits
main
...
agent/j/7a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e9386383d |
@@ -19,8 +19,9 @@ Turn coding agents into real teammates — assign tasks, track progress, compoun
|
||||
|
||||
[](https://github.com/multica-ai/multica/actions/workflows/ci.yml)
|
||||
[](https://github.com/multica-ai/multica/stargazers)
|
||||
[](https://discord.gg/W8gYBn226t)
|
||||
|
||||
[Website](https://multica.ai) · [Cloud](https://multica.ai) · [X](https://x.com/MulticaAI) · [Self-Hosting](SELF_HOSTING.md) · [Contributing](CONTRIBUTING.md)
|
||||
[Website](https://multica.ai) · [Cloud](https://multica.ai) · [Discord](https://discord.gg/W8gYBn226t) · [X](https://x.com/MulticaAI) · [Self-Hosting](SELF_HOSTING.md) · [Contributing](CONTRIBUTING.md)
|
||||
|
||||
**English | [简体中文](README.zh-CN.md)**
|
||||
|
||||
|
||||
@@ -19,8 +19,9 @@
|
||||
|
||||
[](https://github.com/multica-ai/multica/actions/workflows/ci.yml)
|
||||
[](https://github.com/multica-ai/multica/stargazers)
|
||||
[](https://discord.gg/W8gYBn226t)
|
||||
|
||||
[官网](https://multica.ai) · [云服务](https://multica.ai) · [X](https://x.com/MulticaAI) · [自部署指南](SELF_HOSTING.md) · [参与贡献](CONTRIBUTING.md)
|
||||
[官网](https://multica.ai) · [云服务](https://multica.ai) · [Discord](https://discord.gg/W8gYBn226t) · [X](https://x.com/MulticaAI) · [自部署指南](SELF_HOSTING.md) · [参与贡献](CONTRIBUTING.md)
|
||||
|
||||
**[English](README.md) | 简体中文**
|
||||
|
||||
|
||||
@@ -5,7 +5,14 @@ import { MulticaIcon } from "@multica/ui/components/common/multica-icon";
|
||||
import { cn } from "@multica/ui/lib/utils";
|
||||
import { useAuthStore } from "@multica/core/auth";
|
||||
import { captureDownloadIntent } from "@multica/core/analytics";
|
||||
import { XMark, GitHubMark, githubUrl, twitterUrl } from "./shared";
|
||||
import {
|
||||
XMark,
|
||||
GitHubMark,
|
||||
DiscordMark,
|
||||
githubUrl,
|
||||
twitterUrl,
|
||||
discordUrl,
|
||||
} from "./shared";
|
||||
import { useLocale, locales, localeLabels } from "../i18n";
|
||||
|
||||
export function LandingFooter() {
|
||||
@@ -46,6 +53,15 @@ export function LandingFooter() {
|
||||
>
|
||||
<GitHubMark className="size-4" />
|
||||
</Link>
|
||||
<Link
|
||||
href={discordUrl}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
aria-label="Discord"
|
||||
className="text-white/40 transition-colors hover:text-white"
|
||||
>
|
||||
<DiscordMark className="size-4" />
|
||||
</Link>
|
||||
</div>
|
||||
<div className="mt-6">
|
||||
<Link
|
||||
|
||||
@@ -2,6 +2,7 @@ import { cn } from "@multica/ui/lib/utils";
|
||||
|
||||
export const githubUrl = "https://github.com/multica-ai/multica";
|
||||
export const twitterUrl = "https://x.com/MulticaAI";
|
||||
export const discordUrl = "https://discord.gg/W8gYBn226t";
|
||||
|
||||
export function GitHubMark({ className }: { className?: string }) {
|
||||
return (
|
||||
@@ -16,6 +17,19 @@ export function GitHubMark({ className }: { className?: string }) {
|
||||
);
|
||||
}
|
||||
|
||||
export function DiscordMark({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M20.317 4.3698a19.7913 19.7913 0 0 0-4.8851-1.5152.0741.0741 0 0 0-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 0 0-.0785-.037 19.7363 19.7363 0 0 0-4.8852 1.515.0699.0699 0 0 0-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 0 0 .0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 0 0 .0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 0 0-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 0 1-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 0 1 .0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 0 1 .0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 0 1-.0066.1276 12.2986 12.2986 0 0 1-1.873.8914.0766.0766 0 0 0-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 0 0 .0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 0 0 .0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 0 0-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function XMark({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { githubUrl } from "../components/shared";
|
||||
import { githubUrl, discordUrl } from "../components/shared";
|
||||
import type { LandingDict } from "./types";
|
||||
|
||||
export function createEnDict(allowSignup: boolean): LandingDict {
|
||||
@@ -244,6 +244,7 @@ export function createEnDict(allowSignup: boolean): LandingDict {
|
||||
{ label: "Documentation", href: "/docs" },
|
||||
{ label: "API", href: githubUrl },
|
||||
{ label: "X (Twitter)", href: "https://x.com/MulticaAI" },
|
||||
{ label: "Discord", href: discordUrl },
|
||||
],
|
||||
},
|
||||
company: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { githubUrl } from "../components/shared";
|
||||
import { githubUrl, discordUrl } from "../components/shared";
|
||||
import { createEnDict } from "./en";
|
||||
import type { LandingDict } from "./types";
|
||||
|
||||
@@ -244,6 +244,7 @@ export function createJaDict(allowSignup: boolean): LandingDict {
|
||||
{ label: "ドキュメント", href: "/docs/ja" },
|
||||
{ label: "API", href: githubUrl },
|
||||
{ label: "X (Twitter)", href: "https://x.com/MulticaAI" },
|
||||
{ label: "Discord", href: discordUrl },
|
||||
],
|
||||
},
|
||||
company: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { githubUrl } from "../components/shared";
|
||||
import { githubUrl, discordUrl } from "../components/shared";
|
||||
import { createEnDict } from "./en";
|
||||
import type { LandingDict } from "./types";
|
||||
|
||||
@@ -243,6 +243,7 @@ export function createKoDict(allowSignup: boolean): LandingDict {
|
||||
{ label: "문서", href: "/docs/ko" },
|
||||
{ label: "API", href: githubUrl },
|
||||
{ label: "X (Twitter)", href: "https://x.com/MulticaAI" },
|
||||
{ label: "Discord", href: discordUrl },
|
||||
],
|
||||
},
|
||||
company: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { githubUrl } from "../components/shared";
|
||||
import { githubUrl, discordUrl } from "../components/shared";
|
||||
import type { LandingDict } from "./types";
|
||||
|
||||
export function createZhDict(allowSignup: boolean): LandingDict {
|
||||
@@ -244,6 +244,7 @@ export function createZhDict(allowSignup: boolean): LandingDict {
|
||||
{ label: "\u6587\u6863", href: "/docs/zh" },
|
||||
{ label: "API", href: githubUrl },
|
||||
{ label: "X (Twitter)", href: "https://x.com/MulticaAI" },
|
||||
{ label: "Discord", href: discordUrl },
|
||||
],
|
||||
},
|
||||
company: {
|
||||
|
||||
@@ -12,6 +12,22 @@ import { useT } from "../i18n";
|
||||
|
||||
const DOCS_URL = "https://multica.ai/docs";
|
||||
const CHANGELOG_URL = "https://multica.ai/changelog";
|
||||
const DISCORD_URL = "https://discord.gg/W8gYBn226t";
|
||||
|
||||
// lucide-react ships no Discord brand glyph, so render the official mark
|
||||
// inline. Sized via className to match the other help-menu icons.
|
||||
function DiscordIcon({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
fill="currentColor"
|
||||
>
|
||||
<path d="M20.317 4.3698a19.7913 19.7913 0 0 0-4.8851-1.5152.0741.0741 0 0 0-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 0 0-.0785-.037 19.7363 19.7363 0 0 0-4.8852 1.515.0699.0699 0 0 0-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 0 0 .0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 0 0 .0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 0 0-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 0 1-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 0 1 .0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 0 1 .0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 0 1-.0066.1276 12.2986 12.2986 0 0 1-1.873.8914.0766.0766 0 0 0-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 0 0 .0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 0 0 .0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 0 0-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function HelpLauncher() {
|
||||
const { t } = useT("layout");
|
||||
@@ -52,6 +68,15 @@ export function HelpLauncher() {
|
||||
{t(($) => $.help.changelog)}
|
||||
<ArrowUpRight className="size-3 translate-y-px text-muted-foreground/50" />
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem
|
||||
render={
|
||||
<a href={DISCORD_URL} target="_blank" rel="noopener noreferrer" />
|
||||
}
|
||||
>
|
||||
<DiscordIcon className="h-3.5 w-3.5" />
|
||||
{t(($) => $.help.discord)}
|
||||
<ArrowUpRight className="size-3 translate-y-px text-muted-foreground/50" />
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem
|
||||
onClick={() => useModalStore.getState().open("feedback")}
|
||||
>
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"trigger": "Help",
|
||||
"docs": "Docs",
|
||||
"changelog": "Change log",
|
||||
"discord": "Discord",
|
||||
"feedback": "Feedback"
|
||||
},
|
||||
"workspace_loader": {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"trigger": "ヘルプ",
|
||||
"docs": "ドキュメント",
|
||||
"changelog": "変更ログ",
|
||||
"discord": "Discord",
|
||||
"feedback": "フィードバック"
|
||||
},
|
||||
"workspace_loader": {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"trigger": "도움말",
|
||||
"docs": "문서",
|
||||
"changelog": "변경 로그",
|
||||
"discord": "Discord",
|
||||
"feedback": "피드백"
|
||||
},
|
||||
"workspace_loader": {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"trigger": "帮助",
|
||||
"docs": "文档",
|
||||
"changelog": "更新日志",
|
||||
"discord": "Discord",
|
||||
"feedback": "反馈"
|
||||
},
|
||||
"workspace_loader": {
|
||||
|
||||
Reference in New Issue
Block a user