diff --git a/... b/... new file mode 100644 index 00000000..90a1d60a --- /dev/null +++ b/... @@ -0,0 +1 @@ +... \ No newline at end of file diff --git a/crates/cli/src/update.rs b/crates/cli/src/update.rs index d9ee4131..9205c899 100644 --- a/crates/cli/src/update.rs +++ b/crates/cli/src/update.rs @@ -52,7 +52,7 @@ pub fn run_update(beta: bool) -> Result<()> { } // Step 2: Download the aggregated SHA256 checksum manifest if available - let checksum_manifest = match select_checksum_manifest_asset(&release) { + let checksum_manifest = match select_checksum_manifest_asset(release) { Some(checksum_asset) => { println!("Downloading {}...", checksum_asset.name); let checksum_bytes = @@ -76,7 +76,7 @@ pub fn run_update(beta: bool) -> Result<()> { // Step 3: Download and verify every colocated binary in the install. let mut downloads = Vec::new(); for target in &targets { - let asset = select_platform_asset(&release, &target.asset_stem).with_context(|| { + let asset = select_platform_asset(release, &target.asset_stem).with_context(|| { format!( "no asset found for platform {} in release {latest_tag}. \ Available assets: {}", diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 11f8afe0..bc830de6 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -388,7 +388,7 @@ impl ConfigToml { self.tools = project.tools; } // Provider is only overridden if explicitly set (non-default). - if project.provider != ProviderKind::Deepseek || has_api_key { + if project.provider != ProviderKind::Deepseek { self.provider = project.provider; } diff --git a/crates/tui/src/core/engine/tests.rs b/crates/tui/src/core/engine/tests.rs index ddbafe37..422fdc11 100644 --- a/crates/tui/src/core/engine/tests.rs +++ b/crates/tui/src/core/engine/tests.rs @@ -484,6 +484,7 @@ fn tools_always_load_overrides_default_native_deferral() { #[test] #[ignore = "one-shot metric for scripts/measure-tool-catalog.py"] +#[allow(clippy::print_stderr)] fn print_agent_tool_catalog_metrics() { let tmp = tempdir().expect("tempdir"); let context = crate::tools::ToolContext::new(tmp.path().to_path_buf()); @@ -532,7 +533,7 @@ fn print_agent_tool_catalog_metrics() { / baseline_json.len() as f64 }; - println!( + eprintln!( "TOOL_CATALOG_METRICS {}", serde_json::json!({ "baseline_tools": baseline_catalog.len(), diff --git a/crates/tui/src/tools/file.rs b/crates/tui/src/tools/file.rs index b3cad625..97ebadd8 100644 --- a/crates/tui/src/tools/file.rs +++ b/crates/tui/src/tools/file.rs @@ -540,7 +540,7 @@ impl ToolSpec for EditFileTool { let path_str = required_str(&input, "path")?; let search = required_str(&input, "search")?; let replace = required_str(&input, "replace")?; - let fuzz = optional_bool(&input, "fuzz", false); + let _fuzz = optional_bool(&input, "fuzz", false); if search == replace { return Err(ToolError::invalid_input( diff --git a/crates/tui/src/tools/rlm.rs b/crates/tui/src/tools/rlm.rs index 81f66d6a..eb7e9905 100644 --- a/crates/tui/src/tools/rlm.rs +++ b/crates/tui/src/tools/rlm.rs @@ -356,16 +356,16 @@ impl ToolSpec for RlmEvalTool { "new_vars": [], "final": final_handle, }); - if let Some(stdout_preview) = stdout_preview { + if let Some(ref stdout_preview) = stdout_preview { output["stdout_preview"] = json!(stdout_preview); } - if let Some(stderr_preview) = stderr_preview { + if let Some(ref stderr_preview) = stderr_preview { output["stderr_preview"] = json!(stderr_preview); } - if let (Some(h), Some(c)) = (stdout_handle, stdout_preview) { + if let (Some(h), Some(_)) = (stdout_handle, &stdout_preview) { output["stdout_handle"] = json!(h); } - if let (Some(h), Some(c)) = (stderr_handle, stderr_preview) { + if let (Some(h), Some(_)) = (stderr_handle, &stderr_preview) { output["stderr_handle"] = json!(h); } if let Some(confidence) = round.final_confidence.clone() { diff --git a/crates/tui/src/tui/footer_ui.rs b/crates/tui/src/tui/footer_ui.rs index 5b1fb64c..33ebaada 100644 --- a/crates/tui/src/tui/footer_ui.rs +++ b/crates/tui/src/tui/footer_ui.rs @@ -91,7 +91,7 @@ pub(crate) fn render_footer(f: &mut Frame, area: Rect, app: &mut App) { let base = if app.is_loading { crate::tui::widgets::footer_working_label(dot_frame, app.ui_locale) } else if app.is_compacting { - "compacting" + "compacting".to_string() } else { crate::tui::widgets::footer_working_label(dot_frame, app.ui_locale) }; diff --git a/crates/tui/src/tui/ui.rs b/crates/tui/src/tui/ui.rs index 5d3dba18..a58bc2f5 100644 --- a/crates/tui/src/tui/ui.rs +++ b/crates/tui/src/tui/ui.rs @@ -1584,7 +1584,7 @@ async fn run_event_loop( let _ = write!(receipt, " · {}: {summary}", evidence.tool_name); } } - app.set_receipt_text(receipt); + app.set_receipt_text(receipt.clone()); // Mirror as a persistent status toast (10s TTL). // The footer bar visibly shows status toasts, // which is more glanceable than the composer diff --git a/web/app/[locale]/layout.tsx b/web/app/[locale]/layout.tsx index 28e163ad..8eb0b1e7 100644 --- a/web/app/[locale]/layout.tsx +++ b/web/app/[locale]/layout.tsx @@ -11,16 +11,16 @@ export async function generateMetadata({ params }: { params: Promise<{ locale: s const { locale } = await params; const isZh = locale === "zh"; return { - title: isZh ? "CodeWhale · 终端原生编程智能体" : "CodeWhale · 深度求索 终端", + title: isZh ? "CodeWhale · DeepSeek V4 智能体运行框架" : "CodeWhale · DeepSeek V4 智能体运行框架", description: isZh - ? "面向开源模型的终端编程智能体。DeepSeek V4 为一级模型。支持 100 万 token 上下文、MCP 协议、沙箱执行。" - : "Terminal-native coding agent for open-source and open-weight models across providers. DeepSeek V4 is first-class. Community site for installation, docs, roadmap, and live activity.", + ? "DeepSeek V4 的最强智能体运行框架。宪政层级、结构化信任、验证与恢复——让模型持续工作并不断进步的规则、工具和反馈循环。国际开源社区,递归自改进。" + : "The most agentic harness for DeepSeek V4. Constitutional hierarchy, structured trust, verification, and recovery — rules, tools, and feedback loops that help the model keep working. An international open source community building a recursive, self-improving harness.", metadataBase: new URL("https://codewhale.net"), openGraph: { - title: isZh ? "CodeWhale · 终端原生编程智能体" : "CodeWhale", + title: "CodeWhale", description: isZh - ? "面向开源模型的终端编程智能体。" - : "Terminal-native coding agent for open-source and open-weight models across providers.", + ? "DeepSeek V4 的最强智能体运行框架。宪政层级、结构化信任、验证与恢复。" + : "The most agentic harness for DeepSeek V4. Constitutional hierarchy, structured trust, verification, and recovery.", url: "https://codewhale.net", siteName: "CodeWhale", type: "website", diff --git a/web/app/[locale]/page.tsx b/web/app/[locale]/page.tsx index 3a7672ac..85b6c300 100644 --- a/web/app/[locale]/page.tsx +++ b/web/app/[locale]/page.tsx @@ -94,11 +94,26 @@ export default async function HomePage({ params }: { params: Promise<{ locale: s

CodeWhale {isZh - ? " 是围绕 DeepSeek V4 Pro 和 Flash 构建的运行框架。规则、工具、证据和反馈循环——帮助模型持续工作,并且不断进步。DeepSeek V4 参与了部分编写。更好的框架让 V4 更有效,更有效的 V4 又让框架变得更好——这是个正向循环。" - : " is a harness built around DeepSeek V4 Pro and Flash. Rules, tools, evidence, and feedback loops that help the model keep working — and keep improving. DeepSeek V4 helped write parts of it. A better harness makes V4 more effective, and a more effective V4 makes the harness better — it loops."} + ? " 就是那个框架——围绕 DeepSeek V4 Pro 和 Flash 构建,用规则、工具、证据和反馈循环让模型持续工作并不断进步。DeepSeek V4 参与了编写。V4 越强,框架越强——每一轮对话留下更好的提示词和更清晰的交接,下一轮从更高起点出发。这个递归循环正是项目的核心使命:借助国际开源社区,构建一个让 V4 自主管理环境的自改进框架。" + : " is that harness — built around DeepSeek V4 Pro and Flash, with rules, tools, evidence, and feedback loops that help the model keep working and keep improving. DeepSeek V4 helped write it. As V4 improves, the harness improves with it. Each turn leaves behind better prompts and better handoffs — so the next turn starts stronger. That's the recursive loop at the heart of this project: an international open source community building a harness that lets V4 manage its own environment, turn after turn."}

-
+ {/* MISSION CALLOUT */} +
+ {isZh ? ( + <> + 使命 + 构建一个递归自改进的 DeepSeek V4 运行框架——通过国际开源社区的力量,让 V4 在每一轮对话中学会更好地管理自己的环境。 + + ) : ( + <> + Mission + Build a recursive, self-improving harness for DeepSeek V4 — by leveraging the international open source community and V4's own ability to manage its environment, turn after turn. + + )} +
+ +
- {/* WHAT IT IS */} + {/* WHAT IT IS — the core ideas behind the harness */}
-
+

- {isZh ? "它到底是什么" : "What it actually is"} + {isZh ? "核心思想" : "The ideas that make it what it is"}

+

+ {isZh + ? "一个模型回答问题,一个智能体完成任务。区别在于框架——围绕模型构建的规则、工具、证据和反馈循环的运行环境。CodeWhale 围绕三条原则运作。" + : "A model answers a question. An agent finishes a task. The difference is the harness — the operating environment that surrounds the model with rules, tools, evidence, and feedback loops. CodeWhale operates on three principles."} +

{isZh ? ( <>
01 · 宪政层级
-

用户意图高于一切

+

七层权威链,从不模糊

- 实时证据高于假设。验证高于自信。清晰的权威链让模型无需猜测该服从哪条指令。 + 《宪法》第七条定义了九层权威层级——用户当前消息覆盖过时项目规则,实时工具输出覆盖假设,验证覆盖自信。模型不需要猜测该服从哪条指令。

-
02 · 反馈驱动
-

失败是信号,不是终点

+
02 · 自己写的框架
+

DeepSeek V4 参与构建

- 失败的命令、失败的测试、LSP 错误。框架让失败可读。每一次节拍都是模型可以调谐的信息,逐轮迭代。 + V4 编写了框架的部分代码。每一轮对话的缓存前缀让《宪法》的实际成本接近免费。V4 越强,框架越强;框架越强,V4 在其中越高效——递归循环。

-
03 · 自我修正
-

恢复内建于环境

+
03 · 开源协作
+

国际社区,小补丁驱动

- 子智能体、回滚、会话分叉、交接。模型不需要一次就全对。恢复机制从底层支持试错。 + 100:1 贡献模型——一个提示词、大量智能体小时、一个小补丁、一次维护者审查。无 CLA,无赞助商优先通道。每一条内容都被阅读。

) : ( <>
-
01 · constitutional
-

User intent above everything

+
01 · constitutional hierarchy
+

Seven tiers of authority, never ambiguous

- Live evidence above assumptions. Verification above confidence. A clear chain of authority so the model never guesses which instruction to follow. + Article VII of the Constitution ranks nine sources from the Articles themselves to prior-session handoffs. The user's current message outranks stale project rules. Live tool output outranks assumptions. Verification outranks confidence. The model never guesses which instruction to follow.

-
02 · feedback-driven
-

Failure is signal, not a dead end

+
02 · self-written harness
+

DeepSeek V4 helped build it

- Failed commands, failing tests, LSP errors. The harness makes failure legible. Each beat is information the model can tune against, turn after turn. + V4 wrote parts of this harness. DeepSeek's prefix caching makes the Constitution nearly free to reference every turn. As V4 improves, the harness improves with it. A more effective V4 makes the harness better — the recursive loop that defines this project.

-
03 · self-correcting
-

Recovery built into the environment

+
03 · open by design
+

International community, small patches

- Sub-agents, rollback, session forks, handoffs. The model doesn't have to get everything right the first time. Recovery is built into the environment. + The 100-to-1 contribution model: one prompt, many agent-hours, one small patch, one maintainer review. No CLA. No sponsor lockouts. The maintainer reads everything personally, issues are triaged in the open, releases cut from main.

diff --git a/web/components/install-download-tile.tsx b/web/components/install-download-tile.tsx index 065b10a1..ca56ab82 100644 --- a/web/components/install-download-tile.tsx +++ b/web/components/install-download-tile.tsx @@ -76,7 +76,6 @@ export function InstallDownloadTile({ const { zip, sha } = ASSETS[arch]; const ghproxy = `https://ghproxy.com/${zip}`; - const jsdelivr = `https://cdn.jsdelivr.net/gh/Hmbown/CodeWhale@latest/${zip.split("/").pop()}`; return (
diff --git a/web/lib/facts.generated.ts b/web/lib/facts.generated.ts index 0db1a07a..642acbfe 100644 --- a/web/lib/facts.generated.ts +++ b/web/lib/facts.generated.ts @@ -18,7 +18,7 @@ export interface RepoFacts { } export const FACTS: RepoFacts = { - "generatedAt": "2026-05-26T03:03:01.383Z", + "generatedAt": "2026-05-26T15:45:43.239Z", "version": "0.8.45", "crates": [ "agent", @@ -37,8 +37,11 @@ export const FACTS: RepoFacts = { "tui-core" ], "sandboxBackends": [ + "bwrap", "landlock (Linux)", - "seatbelt (macOS)" + "process_hardening", + "seatbelt (macOS)", + "seccomp" ], "providers": [ {