diff --git a/crates/tui/src/tui/ui.rs b/crates/tui/src/tui/ui.rs index f803f54e..2aa54233 100644 --- a/crates/tui/src/tui/ui.rs +++ b/crates/tui/src/tui/ui.rs @@ -2512,20 +2512,15 @@ async fn run_event_loop( && app.sidebar_focus == SidebarFocus::Tasks && !app.runtime_turn_id.as_deref().unwrap_or("").is_empty() { - if key.code == KeyCode::Char('y') - && key.modifiers == KeyModifiers::NONE - { + if key.code == KeyCode::Char('y') && key.modifiers == KeyModifiers::NONE { if let Some(turn_id) = app.runtime_turn_id.as_ref() && app.clipboard.write_text(turn_id).is_ok() { - app.status_message = - Some(format!("Copied turn id {turn_id}")); + app.status_message = Some(format!("Copied turn id {turn_id}")); } continue; } - if key.code == KeyCode::Char('Y') - && key.modifiers == KeyModifiers::NONE - { + if key.code == KeyCode::Char('Y') && key.modifiers == KeyModifiers::NONE { let mut detail = String::new(); if let Some(turn_id) = app.runtime_turn_id.as_ref() { let _ = write!(detail, "turn {turn_id}"); @@ -2534,8 +2529,7 @@ async fn run_event_loop( let _ = write!(detail, " status={status}"); } if !detail.is_empty() && app.clipboard.write_text(&detail).is_ok() { - app.status_message = - Some(format!("Copied {detail}")); + app.status_message = Some(format!("Copied {detail}")); } continue; } diff --git a/web/.env.example b/web/.env.example index ae4e6a77..0d44b711 100644 --- a/web/.env.example +++ b/web/.env.example @@ -5,8 +5,8 @@ DEEPSEEK_API_KEY=sk-your-deepseek-key # Use a fine-grained PAT scoped to public repos only. GITHUB_TOKEN= -# Override which repo to mirror. Defaults to Hmbown/deepseek-tui. -GITHUB_REPO=Hmbown/deepseek-tui +# Override which repo to mirror. Defaults to Hmbown/CodeWhale. +GITHUB_REPO=Hmbown/CodeWhale # Optional — required to manually invoke /api/cron # (cloudflare cron triggers don't need this; they set cf-cron). diff --git a/web/README.md b/web/README.md index 64ca3d93..bf5e5b96 100644 --- a/web/README.md +++ b/web/README.md @@ -1,6 +1,6 @@ -# deepseek-tui-web +# codewhale-web -Community site for [deepseek-tui](https://github.com/Hmbown/deepseek-tui) — lives at **deepseek-tui.com**. +Community site for [CodeWhale](https://github.com/Hmbown/CodeWhale) — lives at **codewhale.net**. Next.js 15 (App Router) + Tailwind, deployed to Cloudflare Workers via [`@opennextjs/cloudflare`](https://opennext.js.org/cloudflare). Curated "Today's Dispatch" content is regenerated every 6 hours by a Cloudflare Cron Trigger that calls `deepseek-v4-flash` to summarise recent repo activity, and stored in Workers KV. @@ -19,14 +19,14 @@ Required env (only for the curator + private-repo rate limits): | ------------------- | ------------------------------------------------- | -------------------- | | `DEEPSEEK_API_KEY` | DeepSeek platform key (`sk-...`) | only for `/api/cron?task=curate` | | `GITHUB_TOKEN` | Fine-grained PAT, public-repo read scope | optional (raises rate limit) | -| `GITHUB_REPO` | Defaults to `Hmbown/deepseek-tui` | optional | +| `GITHUB_REPO` | Defaults to `Hmbown/CodeWhale` | optional | | `CRON_SECRET` | Shared secret for manual cron invocation | optional | The site renders fine without any of them — `Today's Dispatch` falls back to a static editorial; the GitHub feed shows "feed not yet loaded". ## Deploy to Cloudflare -You already own `deepseek-tui.com` on Cloudflare and have a Workers Paid plan. The deploy is two steps: +You already own `codewhale.net` on Cloudflare and have a Workers Paid plan. The deploy is two steps: 1. **Provision KV namespaces once:** @@ -48,12 +48,12 @@ You already own `deepseek-tui.com` on Cloudflare and have a Workers Paid plan. T npm run deploy # builds with OpenNext + uploads ``` -3. **Point the domain:** in the Cloudflare dashboard, add a Worker route for `deepseek-tui.com/*` → `deepseek-tui-web` (the deploy command will offer this if the zone is already on your account). +3. **Point the domain:** in the Cloudflare dashboard, add a Worker route for `codewhale.net/*` → the deployed Worker (currently named `deepseek-tui-web` unless the Worker is renamed during deploy). The first cron run happens within 6 hours; you can also kick it manually: ```bash -curl -H "x-cron-secret: $CRON_SECRET" "https://deepseek-tui.com/api/cron?task=curate" +curl -H "x-cron-secret: $CRON_SECRET" "https://codewhale.net/api/cron?task=curate" ``` ## What's where diff --git a/web/app/[locale]/contribute/page.tsx b/web/app/[locale]/contribute/page.tsx index cbf5793e..fa548df9 100644 --- a/web/app/[locale]/contribute/page.tsx +++ b/web/app/[locale]/contribute/page.tsx @@ -5,10 +5,10 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s const { locale } = await params; const isZh = locale === "zh"; return { - title: isZh ? "参与贡献 · DeepSeek TUI" : "Contribute · DeepSeek TUI", + title: isZh ? "参与贡献 · CodeWhale" : "Contribute · CodeWhale", description: isZh - ? "如何提交议题、发送合并请求、加入 deepseek-tui 社区。" - : "How to file issues, send pull requests, and join the deepseek-tui community.", + ? "如何提交议题、发送合并请求、加入 CodeWhale 社区。" + : "How to file issues, send pull requests, and join the CodeWhale community.", }; } @@ -18,28 +18,28 @@ const stepsEn = [ title: "Find a thread to pull", cn: "选择切入点", body: "Browse open issues. The good first issue label means the path is clear. The help wanted label means the path is open but contested. Anything else, ask first.", - cta: { label: "Open issues", href: "https://github.com/Hmbown/deepseek-tui/issues" }, + cta: { label: "Open issues", href: "https://github.com/Hmbown/CodeWhale/issues" }, }, { n: "②", title: "Fork and branch", cn: "复刻并分支", body: "git clone your fork, then git checkout -b feat/short-name or fix/short-name. We use conventional commits — feat:, fix:, docs:, refactor:, test:, chore:.", - cta: { label: "Repo on GitHub", href: "https://github.com/Hmbown/deepseek-tui" }, + cta: { label: "Repo on GitHub", href: "https://github.com/Hmbown/CodeWhale" }, }, { n: "③", title: "Match the local checks", cn: "本地检查", body: "CI runs cargo fmt --all -- --check, cargo clippy --workspace --all-targets --all-features --locked -- -D warnings, and cargo test --workspace --all-features --locked. Run them before you push.", - cta: { label: "Contributing guide", href: "https://github.com/Hmbown/deepseek-tui/blob/main/CONTRIBUTING.md" }, + cta: { label: "Contributing guide", href: "https://github.com/Hmbown/CodeWhale/blob/main/CONTRIBUTING.md" }, }, { n: "④", title: "Open the PR", cn: "提交合并", body: "PR description should explain WHY, not WHAT (the diff covers what). Link the issue. The maintainer reviews everything personally — response times vary.", - cta: { label: "PR template", href: "https://github.com/Hmbown/deepseek-tui/blob/main/.github/PULL_REQUEST_TEMPLATE.md" }, + cta: { label: "PR template", href: "https://github.com/Hmbown/CodeWhale/blob/main/.github/PULL_REQUEST_TEMPLATE.md" }, }, ]; @@ -49,28 +49,28 @@ const stepsZh = [ title: "选择切入点", cn: "Find a thread", body: "浏览 open issues。good first issue 标签意味着路径清晰。help wanted 标签意味着路径开放但有争议。其他情况请先询问。", - cta: { label: "查看议题", href: "https://github.com/Hmbown/deepseek-tui/issues" }, + cta: { label: "查看议题", href: "https://github.com/Hmbown/CodeWhale/issues" }, }, { n: "②", title: "复刻并创建分支", cn: "Fork & branch", body: "git clone 你的复刻,然后 git checkout -b feat/short-name 或 fix/short-name。使用约定式提交——feat:、fix:、docs:、refactor:、test:、chore:。", - cta: { label: "GitHub 仓库", href: "https://github.com/Hmbown/deepseek-tui" }, + cta: { label: "GitHub 仓库", href: "https://github.com/Hmbown/CodeWhale" }, }, { n: "③", title: "通过本地检查", cn: "Local checks", body: "CI 运行 cargo fmt --all -- --check、cargo clippy --workspace --all-targets --all-features --locked -- -D warnings 和 cargo test --workspace --all-features --locked。推送前请先运行。", - cta: { label: "贡献指南", href: "https://github.com/Hmbown/deepseek-tui/blob/main/CONTRIBUTING.md" }, + cta: { label: "贡献指南", href: "https://github.com/Hmbown/CodeWhale/blob/main/CONTRIBUTING.md" }, }, { n: "④", title: "提交 PR", cn: "Open the PR", body: "PR 描述应说明「为什么」而非「做了什么」(diff 已经展示了做了什么)。关联相关 issue。维护者亲自审查所有 PR——响应时间视情况而定。", - cta: { label: "PR 模板", href: "https://github.com/Hmbown/deepseek-tui/blob/main/.github/PULL_REQUEST_TEMPLATE.md" }, + cta: { label: "PR 模板", href: "https://github.com/Hmbown/CodeWhale/blob/main/.github/PULL_REQUEST_TEMPLATE.md" }, }, ]; @@ -122,7 +122,7 @@ export default async function ContributePage({ params }: { params: Promise<{ loc
简而言之:做实事,别折腾元数据。完整的 - 行为准则 + 行为准则 是详细版。
@@ -160,13 +160,13 @@ export default async function ContributePage({ params }: { params: Promise<{ loc
{`# 在 GitHub 上 fork,然后:
-git clone git@github.com:YOU/deepseek-tui
-cd deepseek-tui
+git clone git@github.com:YOU/CodeWhale
+cd CodeWhale
git checkout -b feat/your-thing
# 本地构建运行
cargo build
-cargo run --bin deepseek
+cargo run --bin codewhale
# 检查(与 CI 完全一致)
cargo fmt --all -- --check
@@ -174,9 +174,9 @@ cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo test --workspace --all-features --locked
# 一致性验证
-cargo test -p deepseek-tui-core --test snapshot --locked
-cargo test -p deepseek-protocol --test parity_protocol --locked
-cargo test -p deepseek-state --test parity_state --locked
+cargo test -p codewhale-tui-core --test snapshot --locked
+cargo test -p codewhale-protocol --test parity_protocol --locked
+cargo test -p codewhale-state --test parity_state --locked
# 提交 + 推送 + PR
git commit -m "feat: short subject in conventional-commit form"
@@ -229,7 +229,7 @@ gh pr create --fill`}
Short version: build the thing, don't polish the meta. The full
- Code of Conduct
+ Code of Conduct
is the long version.
{`# fork on github, then:
-git clone git@github.com:YOU/deepseek-tui
-cd deepseek-tui
+git clone git@github.com:YOU/CodeWhale
+cd CodeWhale
git checkout -b feat/your-thing
# build and run locally
cargo build
-cargo run --bin deepseek
+cargo run --bin codewhale
# checks (matches CI exactly)
cargo fmt --all -- --check
@@ -280,9 +280,9 @@ cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo test --workspace --all-features --locked
# parity gates
-cargo test -p deepseek-tui-core --test snapshot --locked
-cargo test -p deepseek-protocol --test parity_protocol --locked
-cargo test -p deepseek-state --test parity_state --locked
+cargo test -p codewhale-tui-core --test snapshot --locked
+cargo test -p codewhale-protocol --test parity_protocol --locked
+cargo test -p codewhale-state --test parity_state --locked
# commit + push + PR
git commit -m "feat: short subject in conventional-commit form"
diff --git a/web/app/[locale]/docs/page.tsx b/web/app/[locale]/docs/page.tsx
index 5312fe67..cfe384b5 100644
--- a/web/app/[locale]/docs/page.tsx
+++ b/web/app/[locale]/docs/page.tsx
@@ -6,10 +6,10 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s
const { locale } = await params;
const isZh = locale === "zh";
return {
- title: isZh ? "文档 · DeepSeek TUI" : "Docs · DeepSeek TUI",
+ title: isZh ? "文档 · CodeWhale" : "Docs · CodeWhale",
description: isZh
- ? "DeepSeek TUI 的工作原理:模式、工具、沙箱、MCP、配置、钩子。"
- : "How DeepSeek TUI works: modes, tools, sandbox, MCP, config, hooks.",
+ ? "CodeWhale 的工作原理:模式、工具、沙箱、MCP、配置、钩子。"
+ : "How CodeWhale works: modes, tools, sandbox, MCP, config, hooks.",
};
}
@@ -21,6 +21,7 @@ const sectionsEn = [
{ id: "mcp", label: "MCP" },
{ id: "skills", label: "Skills" },
{ id: "providers", label: "Providers" },
+ { id: "fin", label: "Fin" },
{ id: "shortcuts", label: "Shortcuts" },
];
@@ -32,6 +33,7 @@ const sectionsZh = [
{ id: "mcp", label: "MCP" },
{ id: "skills", label: "技能" },
{ id: "providers", label: "提供商" },
+ { id: "fin", label: "Fin" },
{ id: "shortcuts", label: "快捷键" },
];
@@ -55,7 +57,7 @@ export default async function DocsPage({ params }: { params: Promise<{ locale: s
工作原理简述。完整的架构讲解请参阅仓库中的
- docs/ARCHITECTURE.md。
+ docs/ARCHITECTURE.md。
@@ -119,7 +121,7 @@ export default async function DocsPage({ params }: { params: Promise<{ locale: s
{ group: "Git / 诊断 / 测试", tools: "git_status · git_diff · diagnostics · run_tests" },
{ group: "子 Agent", tools: "agent_open · agent_eval · agent_close —— 持久会话,并行执行,通过 var_handle 读取大结果" },
{ group: "递归 LM (RLM)", tools: "rlm_open · rlm_eval · rlm_configure · rlm_close —— 沙箱 Python REPL,内置 peek/search/chunk/sub_query_batch 等辅助函数" },
- { group: "MCP", tools: "mcp__——从 ~/.deepseek/mcp.json 自动注册" },
+ { group: "MCP", tools: "mcp__——从 ~/.codewhale/mcp.json 自动注册" },
].map((row) => (
{row.group}
@@ -161,7 +163,7 @@ export default async function DocsPage({ params }: { params: Promise<{ locale: s
配置 Configuration
-{`# ~/.deepseek/config.toml
+{`# ~/.codewhale/config.toml
api_key = "sk-..."
base_url = "https://api.deepseek.com"
default_text_model = "${facts.defaultModel ?? "deepseek-v4-pro"}" # 默认模型;deepseek-v4-flash 用于快速 / 子智能体
@@ -177,10 +179,10 @@ default_timeout_secs = 30
[[hooks.hooks]]
event = "session_start" # 也支持: tool_call_before / tool_call_after
-command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / on_error / shell_env`}
+command = "~/.codewhale/hooks/pre.sh" # / message_submit / mode_change / on_error / shell_env`}
- 完整参考:config.example.toml。
+ 完整参考:config.example.toml。
@@ -190,9 +192,9 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o
MCP 服务器 MCP
- deepseek 双向支持模型上下文协议(Model Context Protocol):作为客户端从
- ~/.deepseek/mcp.json 加载服务器,同时也可作为服务器暴露工具
- (deepseek mcp)。工具以 mcp_<server>_<tool> 形式呈现。
+ codewhale 双向支持模型上下文协议(Model Context Protocol):作为客户端从
+ ~/.codewhale/mcp.json 加载服务器,同时也可作为服务器暴露工具
+ (codewhale mcp)。工具以 mcp_<server>_<tool> 形式呈现。
{`{
@@ -216,19 +218,40 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o
技能 Skills
- 技能是 ~/.deepseek/skills/<name>/ 下的一个文件夹,
+ 技能是 ~/.codewhale/skills/<name>/ 下的一个文件夹,
根目录包含 SKILL.md。Agent 启动时加载技能名称和描述,
在需要时通过 Skill 工具拉取完整内容。
+ {/* Fin */}
+
+
+ Fin 智能路由 Fin
+
+
+ Fin 是 CodeWhale 的模型自动路由层。它会分析每个任务的特征——复杂度、上下文大小、工具需求——然后自动将请求分发到最合适的模型后端。
+
+
+ {[
+ { name: "Fast lane", cn: "快速通道", desc: "轻量任务(文件查找、fetch、简单 shell 命令)自动路由到 flash 级模型,降低延迟与成本。" },
+ { name: "Deep lane", cn: "深度通道", desc: "复杂推理、大型重构、多步规划自动升级到全尺寸推理模型。" },
+ ].map((l) => (
+
+ {l.name} {l.cn}
+ {l.desc}
+
+ ))}
+
+
+
{/* 提供商 */}
提供商 Providers
- 使用 deepseek auth set --provider <id> 切换。下表为
+ 使用 codewhale auth set --provider <id> 切换。下表为
crates/tui/src/config.rs 中 ApiProvider 枚举的实时投影
,目前共 {facts.providers.length} 个。
@@ -241,6 +264,11 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o
))}
+ 开放模型平台方向:CodeWhale 正在扩展对 + OpenRouter、 Hugging Face 和 自托管 模型的支持, + 为您提供完全自主的模型选择——从云端 API 到本地部署均可覆盖。 +
{/* 快捷键 */} @@ -282,7 +310,7 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / oThe short version of how it works. For the full architecture walk-through, see - docs/ARCHITECTURE.md + docs/ARCHITECTURE.md in the repo.
@@ -345,7 +373,7 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o { group: "Git / diag / test", tools: "git_status · git_diff · diagnostics · run_tests" }, { group: "Sub-agents", tools: "agent_open · agent_eval · agent_close — persistent sessions, parallel execution, bounded result retrieval via var_handle" }, { group: "Recursive LM (RLM)", tools: "rlm_open · rlm_eval · rlm_configure · rlm_close — sandboxed Python REPL with peek/search/chunk/sub_query_batch helpers" }, - { group: "MCP", tools: "mcp_
-{`# ~/.deepseek/config.toml
+{`# ~/.codewhale/config.toml
api_key = "sk-..."
base_url = "https://api.deepseek.com"
default_text_model = "${facts.defaultModel ?? "deepseek-v4-pro"}" # default; deepseek-v4-flash is the fast / sub-agent option
@@ -401,10 +429,10 @@ default_timeout_secs = 30
[[hooks.hooks]]
event = "session_start" # or: tool_call_before / tool_call_after
-command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / on_error / shell_env`}
+command = "~/.codewhale/hooks/pre.sh" # / message_submit / mode_change / on_error / shell_env`}
- Full reference: config.example.toml. + Full reference: config.example.toml.
@@ -413,9 +441,9 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o MCP Servers MCP
- deepseek speaks the Model Context Protocol both ways: as a client (loads
- servers from ~/.deepseek/mcp.json) and as a server
- (deepseek mcp). Tools surface as mcp_<server>_<tool>.
+ codewhale speaks the Model Context Protocol both ways: as a client (loads
+ servers from ~/.codewhale/mcp.json) and as a server
+ (codewhale mcp). Tools surface as mcp_<server>_<tool>.
{`{
@@ -438,18 +466,39 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o
Skills 技能
- A skill is a folder under ~/.deepseek/skills/<name>/
+ A skill is a folder under ~/.codewhale/skills/<name>/
with a SKILL.md at the root. The agent loads skill names + descriptions on
startup and can pull in the full body via the Skill tool when relevant.
+ {/* Fin */}
+
+
+ Fin 智能路由
+
+
+ Fin is CodeWhale's model auto-routing layer. It analyses each task's profile — complexity, context size, tool needs — and dispatches to the best model backend automatically.
+
+
+ {[
+ { name: "Fast lane", cn: "快速通道", desc: "Lightweight tasks (file ops, fetch, simple shell) auto-route to flash-tier models for lower latency and cost." },
+ { name: "Deep lane", cn: "深度通道", desc: "Complex reasoning, large refactors, multi-step plans auto-upgrade to full-size reasoning models." },
+ ].map((l) => (
+
+ {l.name} {l.cn}
+ {l.desc}
+
+ ))}
+
+
+
Providers 提供商
- Switch with deepseek auth set --provider <id>. The
+ Switch with codewhale auth set --provider <id>. The
table below is a live projection of the ApiProvider enum
in crates/tui/src/config.rs — currently {facts.providers.length} providers.
@@ -462,6 +511,11 @@ command = "~/.deepseek/hooks/pre.sh" # / message_submit / mode_change / o
+ Open-model platform direction: CodeWhale is expanding support for + OpenRouter, Hugging Face, and self-hosted models, + giving you full sovereignty over model choice — from cloud APIs to local deployments. +
来自{" "} - Hmbown/deepseek-tui + Hmbown/CodeWhale {" "}的议题与合并请求实时镜像。每十分钟刷新一次。点击任意条目跳转至 GitHub。
A live mirror of issues and pull requests from{" "} - Hmbown/deepseek-tui. + Hmbown/CodeWhale. Refreshed every ten minutes. Click any item to jump to GitHub.
@@ -156,15 +156,15 @@ export default async function FeedPage({ params }: { params: Promise<{ locale: s
{isZh ? (
<>
- 编译并安装 deepseek 到 ~/.cargo/bin。
+ 编译并安装 codewhale 到 ~/.cargo/bin。
需要 Rust 1.88+——如未安装可访问{" "}
rustup.rs。
下方「其他安装方式」列出了不用 Rust 工具链、国内镜像、Homebrew、预编译二进制等替代选项。
>
) : (
<>
- Compiles and installs deepseek to{" "}
+ Compiles and installs codewhale to{" "}
~/.cargo/bin. Requires Rust 1.88+ — install via{" "}
rustup.rs if you don't have it.
See Other ways to install below for
@@ -137,13 +137,13 @@ export default async function InstallPage({ params }: { params: Promise<{ locale
{isZh ? (
<>
- deepseek doctor 检查 API 密钥、网络、沙箱可用性、
+ codewhale doctor 检查 API 密钥、网络、沙箱可用性、
MCP 服务器,并将完整报告写入{" "}
~/.deepseek/doctor.log。
>
) : (
<>
- deepseek doctor checks your API key, network,
+ codewhale doctor checks your API key, network,
sandbox availability, and MCP servers. Full report is written to{" "}
~/.deepseek/doctor.log.
>
@@ -166,17 +166,17 @@ export default async function InstallPage({ params }: { params: Promise<{ locale
检查 GitHub Releases 是否有新版本并就地替换二进制。
通过 Homebrew 或 npm 安装的话,使用包管理器升级更稳:
brew upgrade deepseek-tui 或{" "}
- npm update -g deepseek-tui。
+ npm update -g codewhale。
Cargo 安装的可以重跑{" "}
- cargo install deepseek-tui-cli --locked --force。
+ cargo install codewhale-cli --locked --force。
>
) : (
<>
Checks GitHub Releases for a newer version and replaces the binary in place. If you
installed via Homebrew or npm, prefer the package manager instead:{" "}
brew upgrade deepseek-tui or{" "}
- npm update -g deepseek-tui. Cargo users can re-run{" "}
- cargo install deepseek-tui-cli --locked --force.
+ npm update -g codewhale. Cargo users can re-run{" "}
+ cargo install codewhale-cli --locked --force.
>
)}
{isZh ? ( <> @@ -265,8 +265,8 @@ export default async function InstallPage({ params }: { params: Promise<{ locale
{isZh - ? "如果上面的 Cargo 路径不适合你,从下面找到匹配你情况的一条。每条都安装同一个 deepseek 二进制。" - : "If the Cargo path above doesn't fit your setup, pick the row that matches your situation. Every path installs the same deepseek binary."} + ? "如果上面的 Cargo 路径不适合你,从下面找到匹配你情况的一条。每条都安装同一个 codewhale 二进制。" + : "If the Cargo path above doesn't fit your setup, pick the row that matches your situation. Every path installs the same codewhale binary."}
deepseek 和{" "}
- deepseek-tui 两个命令。
+ 安装后会同时提供 codewhale 和{" "}
+ codewhale-tui 两个命令。
>
) : (
<>
The npm wrapper downloads the prebuilt binary from GitHub Releases for your
- platform. Requires Node 18+. Installs both deepseek{" "}
- and deepseek-tui on PATH.
+ platform. Requires Node 18+. Installs both codewhale{" "}
+ and codewhale-tui on PATH.
>
)}
@@ -324,14 +324,14 @@ export default async function InstallPage({ params }: { params: Promise<{ locale
{isZh ? (
<>
npm 包装器仍会从{" "}
- github.com/Hmbown/deepseek-tui/releases{" "}
+ github.com/Hmbown/CodeWhale/releases{" "}
下载二进制,国内可能较慢。Cargo + Tuna 完全绕开 GitHub。
DeepSeek API(api.deepseek.com)在国内直连,无需代理。
>
) : (
<>
The npm wrapper still downloads the binary from{" "}
- github.com/Hmbown/deepseek-tui/releases, which can
+ github.com/Hmbown/CodeWhale/releases, which can
be slow over GFW. Cargo + Tuna routes around GitHub entirely. The DeepSeek API
at api.deepseek.com is reachable from mainland
China without a proxy.
@@ -397,41 +397,74 @@ export default async function InstallPage({ params }: { params: Promise<{ locale
{isZh ? (
<>
- 所有用户配置存放在 ~/.deepseek/。仓库根目录下的{" "}
- .deepseek/ 用于项目级覆盖。
- 完整字段参考{" "}
-
- {isZh ? "文档" : "the docs"}
-
- 。
+ 项目级 ./.deepseek/ 目录是可选的——每个仓库可有独立的 MCP 服务器、钩子、
+ 技能和配置覆盖(例如提供商密钥)。
+ 首次运行时,如果缺少配置文件,系统会询问是否交互式创建。
>
) : (
<>
- All user-level configuration goes under ~/.deepseek/.
- Per-project overrides live in .deepseek/ at the repo
- root. Full field reference in{" "}
- the docs.
+ The project-scoped ./.deepseek/ directory is optional —
+ each repo can carry its own MCP servers, hooks, skills, and config overrides (e.g.
+ provider keys). On first run the app asks whether to interactively create a config
+ file if one is missing.
>
)}
已确认的功能、正在权衡的方案、以及已被排除的方向。未列在此页的内容均可在{" "} - + Discussions {" "} 中讨论。 @@ -217,13 +248,13 @@ export default async function RoadmapPage({ params }: { params: Promise<{ locale
What's confirmed, what's being weighed, what's been ruled out. Anything not on this page is fair game for{" "} - + discussion .
@@ -290,13 +321,13 @@ export default async function RoadmapPage({ params }: { params: Promise<{ locale{isZh - ? "基于 DeepSeek V4 的开源终端编程智能体。MIT 许可证。由一位维护者从得克萨斯独立维护。欢迎提交 Pull Request。" - : "Open-source terminal-native coding agent built on DeepSeek V4. MIT licensed. Maintained from a small workshop in Texas. Pull requests welcome."} + ? "面向开源模型的终端编程智能体。DeepSeek V4 为一级模型。MIT 许可证。由一位维护者从得克萨斯独立维护。欢迎提交 Pull Request。" + : "Open-model terminal-native coding agent. DeepSeek V4 is first-class. MIT licensed. Maintained from a small workshop in Texas. Pull requests welcome."}