Files
DeepSeek-TUI/web/components/thinking-trace.tsx
CodeWhale Bot bd0fcfa7bf feat(web): Tideline deep-ocean refresh + new whale mark
Visual-language alignment with the Tideline TUI and the new brand asset:

- web/ palette re-grounded to the TUI WHALE_* tokens: deep-ocean dark is
  the default everywhere; the docs light sheet becomes an opt-in block
  carrying the LIGHT_* tokens (fixed two defects found by render inspection:
  the white mark vanishing on the light sheet and near-black button ink on
  cobalt).
- New brand mark integrated: traced SVG silhouette on the deep-blue tile
  (app/icon.svg), favicon.ico (16+32), apple-icon (180), web-app icons
  (192/512), new web app manifest, rebuilt OG card (mark + wordmark +
  identity phrase on the gradient, 1200x630).
- nav wordmark = new mark + name/tag; seal chips restyled; every
  bg-ink-as-dark idiom that would have inverted to ivory slabs fixed across
  components and pages.
- tailwind accents resolve through CSS vars so the docs light sheet
  re-themes; Fraunces/Noto Serif SC display loads dropped (Tideline
  typography: display = body family at heading weight).

Contract tests updated where product intent changed (blue-stage, docs-theme,
public-copy pins); the contracts themselves are preserved. No route, copy,
dictionary, or media-manifest changes.

Verified (integrator re-ran): check:facts OK; check:docs PASS; npm test
40 files / 341 tests all pass; npm run build clean (624 static pages incl.
the new asset routes); asset routes live-checked on the production server
(200s with correct content types). Render inspection at 390/768/1440 for
home + docs, mobile menu, focus ring, docs light toggle, install, models,
community, zh home, OG card — captures under /tmp/cw-captures/ (recorded in
the Ops ledger).

Refs #5573. No-Issue: Tideline program slice per the takeover plan.
2026-08-30 05:37:09 -07:00

121 lines
4.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* "See how it decides" — a terminal-styled pane that surfaces REAL reasoning
* traces from a Codewhale session, paired with the decision each produced.
*
* The point is "show, don't tell": every agent claims to be aligned/trustworthy;
* Codewhale can prove it, because the Constitution is observable in the model's
* reasoning (it cites "Article II", "Article V", etc. as it decides). No other
* agent can show this because none have a hierarchy the model reasons against.
*
* The traces below are faithful excerpts from an actual session — not invented
* marketing copy. Keep them honest if you edit them (see AGENTS.md Article II).
*/
export type Scene = {
/** Short tab label for players that show one scene at a time. */
tab: { en: string; zh: string };
context: { en: string; zh: string };
trace: string;
cites: string[];
decision: { en: string; zh: string };
};
export const SCENES: Scene[] = [
{
tab: { en: "Stale handoff", zh: "过期交接" },
context: {
en: "When the prior session's summary didn't match the repo…",
zh: "当上一会话的总结与仓库真实状态不符时……",
},
trace:
"Per Article II (truth) and V (verification), I report what's actually in the tree — not what the previous agent claimed.",
cites: ["Article II · Truth", "Article V · Verification"],
decision: {
en: "Reported the uncommitted work the summary left out, instead of repeating the claim.",
zh: "如实报告了总结遗漏的未提交改动,而不是照搬旧说法。",
},
},
{
tab: { en: "Conflicting orders", zh: "指令冲突" },
context: {
en: "When a “pause” signal conflicted with the user's request to continue…",
zh: "当「暂停」信号与用户要求继续相冲突时……",
},
trace:
"The user's current request outranks the runtime statute — so I keep executing the task, not stopping on a technicality.",
cites: ["Article III · User agency", "Article VII · Hierarchy"],
decision: {
en: "Finished the work the user actually asked for.",
zh: "完成了用户真正要求的工作。",
},
},
{
tab: { en: "Community credit", zh: "社区署名" },
context: {
en: "When trimming the README, tempted to drop the contributor wall…",
zh: "精简 README 时,本可删掉贡献者名单……",
},
trace:
"Deleting community credit would break the project's own ethos. Relocate it instead — zero names lost.",
cites: ["Community ethos"],
decision: {
en: "Moved 200 lines of credits to docs/CONTRIBUTORS.md and linked from the README.",
zh: "把 200 行贡献记录迁到 docs/CONTRIBUTORS.md并在 README 中给出链接。",
},
},
];
export function ThinkingTrace({ locale = "en" }: { locale?: string }) {
const isZh = locale === "zh";
return (
<div className="grid gap-6 md:grid-cols-3">
{SCENES.map((s, i) => (
<div
key={i}
className="hairline-t hairline-b hairline-l hairline-r bg-paper flex flex-col overflow-hidden"
>
{/* terminal title bar */}
<div className="bg-paper-deep text-ink px-4 py-2.5 flex items-center justify-between">
<div className="flex items-center gap-1.5">
<span className="w-2.5 h-2.5 rounded-full bg-jade inline-block" />
<span className="w-2.5 h-2.5 rounded-full bg-ochre inline-block" />
<span className="w-2.5 h-2.5 rounded-full bg-indigo inline-block" />
<span className="ml-2.5 font-mono text-[0.66rem] uppercase tracking-widest text-ink-mute">
codewhale thinking
</span>
</div>
<span className="font-cjk text-[0.6rem] text-ink-mute">
{isZh ? "推理痕迹" : "reasoning trace"}
</span>
</div>
{/* context */}
<div className="px-4 pt-4 text-[0.66rem] font-mono uppercase tracking-wider text-ink-mute">
{isZh ? s.context.zh : s.context.en}
</div>
{/* the trace */}
<pre className="px-4 py-3 font-mono text-[0.82rem] text-ink leading-relaxed whitespace-pre-wrap flex-1">
<span className="text-indigo"></span>{" "}
<span className="text-ink-soft">{s.trace}</span>
</pre>
{/* cited authority */}
<div className="px-4 pb-3 flex flex-wrap gap-1.5">
{s.cites.map((c) => (
<span key={c} className="pill text-[0.58rem] tracking-wider">
{c}
</span>
))}
</div>
{/* the decision it produced */}
<div className="bg-indigo-pale px-4 py-3 hairline-t text-[0.8rem] leading-relaxed text-ink-soft">
<span className="font-display text-indigo font-semibold mr-1"></span>
{isZh ? s.decision.zh : s.decision.en}
</div>
</div>
))}
</div>
);
}