Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
- **@tag routing** in Telegram — `@researcher find AI trends` sends the message to the right agent
- **Coordinator delegation** — one agent orchestrates the rest, delegating tasks automatically
- **Shared memory** — agents read each other's output files for seamless collaboration
- **121 built-in skills** — including 43 marketing skills plus SEO, ads, content, social media, analytics, and growth hacking workflows
- **120+ built-in skills** — SEO (19 skills + 30 reference files), ads (18 skills + 23 reference files), content, social media, analytics, growth hacking
- **25 built-in MCP servers** — browser automation, AI search, SEO, ads, social media, email marketing, CRM, disposable email inboxes, multimodal generation (image/video/speech/music), and more. Enable what you need from the Web UI
- **52 marketing tools** via Citedy MCP server
- **Instant file publishing** — upload any file to [here.now](https://here.now), get a shareable link, host static sites, use your own domain
- **23 LLM providers, 100+ models** — OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Cerebras, Together, Mistral, Baseten, Minimax, Inception, Moonshot, xAI, Aliyun, DashScope, Ollama, llama.cpp, MLX, and more. Add custom providers via API
- **24 LLM providers, 150+ models** — OpenAI, Anthropic, Gemini, DashScope, Alibaba, Xiaomi, Z.AI, xAI, Mistral, DeepSeek, Groq, Together, OpenRouter, Cerebras, MiniMax, Baseten, Moonshot, Inception, ModelScope, Ollama, llama.cpp, MLX, Azure OpenAI. Add custom providers via API
- **LLM auto-fallback** — if the primary model fails (timeout, rate limit, auth error), automatically switches to the next model in a configurable fallback chain
- **Multi-channel** — Telegram, Discord, DingTalk, Feishu, QQ, Console
- **Web UI** — dashboard, per-persona chat tabs, skills, models, and channels from the browser
Expand Down
Binary file added console/public/adclaw-symbol.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 0 additions & 16 deletions console/public/adclaw-symbol.svg

This file was deleted.

Binary file added console/src/assets/adclaw-symbol.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 25 additions & 17 deletions console/src/layouts/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
Users,
LayoutDashboard,
} from "lucide-react";
import adclawSymbolUrl from "../assets/adclaw-symbol.png?url";

const { Sider } = Layout;
const MOBILE_SIDEBAR_MAX_WIDTH = 1024;
Expand Down Expand Up @@ -306,29 +307,36 @@ export default function Sidebar({ selectedKey }: SidebarProps) {
}}
/>
</>
) : isNarrowViewport ? (
<img
src="/adclaw-symbol.svg"
alt="AdClaw"
style={{ height: 20, width: 20, display: "block" }}
/>
) : (
<>
<Button
type="text"
icon={<PanelLeftOpen size={20} />}
onClick={() => setDesktopCollapsed(false)}
<img
src={adclawSymbolUrl}
alt="AdClaw"
style={{
marginLeft: 0,
color: "#0f172a",
width: 36,
height: 36,
display: "inline-flex",
alignItems: "center",
justifyContent: "center",
height: 20,
width: 20,
display: "block",
flexShrink: 0,
objectFit: "contain",
}}
/>
{!isNarrowViewport && (
<Button
type="text"
icon={<PanelLeftOpen size={20} />}
onClick={() => setDesktopCollapsed(false)}
style={{
marginLeft: "auto",
color: "#0f172a",
width: 36,
height: 36,
display: "inline-flex",
alignItems: "center",
justifyContent: "center",
flexShrink: 0,
}}
/>
)}
</>
)}
</div>
Expand Down
33 changes: 33 additions & 0 deletions console/src/pages/Welcome/index.module.less
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,36 @@
.skipSection {
text-align: center;
}

.metaPill {
display: inline-flex;
align-items: center;
margin-left: 8px;
padding: 0 8px;
height: 18px;
border-radius: 9999px;
background: var(--citedy-slate-100);
border: 1px solid var(--citedy-slate-200);
color: var(--citedy-slate-600);
font-size: 11px;
font-weight: 500;
line-height: 1;
vertical-align: middle;
}

.skipPillButton {
align-self: center;
background: transparent !important;
border: 1px solid var(--citedy-slate-200) !important;
box-shadow: none !important;
color: var(--citedy-slate-600) !important;
height: 32px;
padding-inline: 16px;

&:hover,
&:focus {
background: transparent !important;
border-color: var(--citedy-slate-300) !important;
color: var(--citedy-slate-900) !important;
}
}
74 changes: 38 additions & 36 deletions console/src/pages/Welcome/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,7 @@ import {
} from "lucide-react";
import { request } from "../../api/request";
import type { ProviderInfo } from "../../api/types/provider";
import {
sortProviders,
XIAOMI_PARTNER_BADGE,
XIAOMI_PROVIDER_ID,
XIAOMI_TOKEN_PLAN_URL,
} from "../../shared/providerMeta";
import { sortProviders } from "../../shared/providerMeta";
import styles from "./index.module.less";

const { Title, Text, Paragraph } = Typography;
Expand Down Expand Up @@ -198,15 +193,20 @@ export default function WelcomePage() {
};

const providerHints: Record<string, React.ReactNode> = {
[XIAOMI_PROVIDER_ID]: (
<>
MiMo-V2.5-Pro, MiMo-V2.5, and MiMo-V2-Omni. One subscription unlocks the
MiMo Token Plan models.{" "}
<a href={XIAOMI_TOKEN_PLAN_URL} target="_blank" rel="noopener">
$6/month &rarr;
</a>
</>
),
/*
* Xiaomi partner promo alert — re-enable when MiMo Token Plan partnership is active.
* Requires: XIAOMI_PROVIDER_ID, XIAOMI_TOKEN_PLAN_URL from shared/providerMeta.
*
* [XIAOMI_PROVIDER_ID]: (
* <>
* MiMo-V2.5-Pro, MiMo-V2.5, and MiMo-V2-Omni. One subscription unlocks the
* MiMo Token Plan models.{" "}
* <a href={XIAOMI_TOKEN_PLAN_URL} target="_blank" rel="noopener">
* $6/month &rarr;
* </a>
* </>
* ),
*/
openrouter:
"One key for all models — Claude, GPT, Gemini, Llama, etc. Get key at openrouter.ai",
openai:
Expand All @@ -227,7 +227,8 @@ export default function WelcomePage() {
</a>
</>
),
"aliyun-codingplan": "Same models as Aliyun Intl but China endpoint.",
"aliyun-codingplan":
"Alibaba Coding Plan (China): own model list and sk-sp API keys. Endpoint coding.dashscope.aliyuncs.com.",
ollama: "Run models locally. No API key needed. Install at ollama.com",
zai: (
<>
Expand Down Expand Up @@ -328,7 +329,11 @@ export default function WelcomePage() {
>
Save API Key
</Button>
<Button type="link" onClick={() => setCurrentStep(1)}>
<Button
type="default"
className={styles.skipPillButton}
onClick={() => setCurrentStep(1)}
>
Skip for now
</Button>
</Space>
Expand Down Expand Up @@ -392,25 +397,18 @@ export default function WelcomePage() {
label: (
<span>
<strong>{p.name}</strong>
{p.id === XIAOMI_PROVIDER_ID && (
<Text
type="secondary"
style={{
marginLeft: 8,
fontSize: 12,
color: "#f5222d",
}}
>
{XIAOMI_PARTNER_BADGE}
</Text>
)}
{/*
* Xiaomi "Partner" pill — re-enable when MiMo Token Plan partnership is active.
* Requires: XIAOMI_PROVIDER_ID, XIAOMI_PARTNER_BADGE from shared/providerMeta.
*
* {p.id === XIAOMI_PROVIDER_ID && (
* <span className={styles.metaPill}>
* {XIAOMI_PARTNER_BADGE}
* </span>
* )}
*/}
{p.id === "aliyun-intl" && (
<Text
type="secondary"
style={{ marginLeft: 8, fontSize: 12 }}
>
Recommended
</Text>
<span className={styles.metaPill}>Recommended</span>
)}
</span>
),
Expand Down Expand Up @@ -643,7 +641,11 @@ export default function WelcomePage() {

{currentStep < 3 && (
<div className={styles.skipSection}>
<Button type="link" onClick={handleFinish}>
<Button
type="default"
className={styles.skipPillButton}
onClick={handleFinish}
>
Skip setup — go to chat
</Button>
</div>
Expand Down
2 changes: 1 addition & 1 deletion console/src/shared/providerMeta.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export const XIAOMI_PROVIDER_ID = "xiaomi-codingplan";
export const XIAOMI_PROVIDER_NAME = "Xiaomi MiMo Token Plan";
export const XIAOMI_PROVIDER_NAME = "Xiaomi";
export const XIAOMI_TOKEN_PLAN_URL =
"https://platform.xiaomimimo.com/token-plan";
export const XIAOMI_PARTNER_BADGE = "Partner";
Expand Down
10 changes: 10 additions & 0 deletions console/src/styles/citedy-overrides.less
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,16 @@
box-shadow: 0 12px 30px rgba(15, 23, 42, 0.04) !important;
}

.citedy-promo-card h3 a {
color: var(--citedy-slate-900) !important;
text-decoration: none;

&:hover {
color: var(--citedy-slate-700) !important;
text-decoration: underline;
}
}

/* ---- Drawer Footer ---- */

.ant-drawer-footer,
Expand Down
2 changes: 1 addition & 1 deletion deploy/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ mcp = cfg.setdefault('mcp', {}).setdefault('clients', {})
key = os.environ['CITEDY_API_KEY']
mcp['citedy'] = {
'name': 'citedy_mcp',
'description': 'Citedy SEO & Marketing Tools (59 tools)',
'description': 'Citedy SEO & Marketing Tools (70+ tools)',
'enabled': True,
'transport': 'streamable_http',
'url': 'https://mcp.citedy.com/mcp',
Expand Down
2 changes: 1 addition & 1 deletion docs/comparison.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ AdClaw started as a CoPaw fork but was reworked extensively (~80% rewritten):
- **AgentHub integration** — distributed tasks with karma economy
- **here.now file publishing** — instant shareable links for any file
- **Citedy MCP server** — 52 marketing tools (SEO, trends, competitor analysis, lead magnets)
- **22 LLM providers, 100+ models** — OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Cerebras, Together, Mistral, Baseten, MiniMax, Inception, Moonshot, xAI, Aliyun, DashScope, Ollama, llama.cpp, MLX, and more
- **24 LLM providers, 150+ models** — OpenAI, Anthropic, Gemini, DashScope, Alibaba, Xiaomi, Z.AI, xAI, Mistral, DeepSeek, Groq, Together, OpenRouter, Cerebras, MiniMax, Baseten, Moonshot, Inception, ModelScope, Ollama, llama.cpp, MLX, Azure OpenAI, and custom providers
- **LLM auto-fallback** — configurable chain with timeout; if primary model fails, auto-switch to backup
- **OpenRouter routing** — auto, nitro, free, floor modes for optimal cost/speed
- **English-only UI** — removed all Chinese text from console and runtime
Expand Down
2 changes: 1 addition & 1 deletion docs/deploy/railway.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This guide walks through deploying AdClaw — an AI marketing agent team — on

- **121 built-in skills** — SEO, ads, content, social, audio, music, graphics, video, browser automation
- **Multi-agent personas** — Growth Hacker, Social Media Strategist, Content Writer, Analytics Reporter, plus your own. Coordinated by a central Coordinator. Address with `@persona-name` in chat; untagged messages route to the Coordinator.
- **23 LLM providers** with 100+ models — OpenAI, Anthropic, Google Gemini, Aliyun (Qwen, GLM), Z.AI, xAI Grok, Mistral, DeepSeek, Groq, Together, OpenRouter, Cerebras, MiniMax, Baseten, Moonshot Kimi, Inception, ModelScope, DashScope, Ollama, llama.cpp, MLX, Azure OpenAI. Automatic failover between configured providers.
- **24 LLM providers** with 150+ models — OpenAI, Anthropic, Gemini, DashScope, Alibaba, Xiaomi, Z.AI, xAI, Mistral, DeepSeek, Groq, Together, OpenRouter, Cerebras, MiniMax, Baseten, Moonshot, Inception, ModelScope, Ollama, llama.cpp, MLX, Azure OpenAI. Automatic failover between configured providers.
- **Multi-channel chat** — Telegram, Discord, Feishu, DingTalk, QQ, or the built-in web console.
- **Always-On Memory (AOM)** — vector + FTS5 dual-layer memory shared across personas and sessions.
- **Cron** — agents run scheduled jobs (publish, monitor, scrape) on their own work calendars.
Expand Down
Loading
Loading