mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-15 12:55:51 +00:00
* feat: 第一版大重构 * fix: 修复类型问题 * chore: 更新版本到 1.3.2 * Add brave as alternative WebSearchTool * fix: 修正顺序 * fix: 修复对穷鬼模式的 auto dream 和 session memory 越过 * feat: 穷鬼模式去除 session-summary * feat: 创建 builtin-tools 包,搬运所有工具实现 将 src/tools/ 下的全部 60 个工具目录迁移至 packages/builtin-tools/src/tools/, 内部导入路径已更新为 src/ alias 模式。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 更新 src/ 中所有工具引用至 builtin-tools 包,删除 src/tools/ - src/tools.ts 及 178 个 src/ 文件的 import 路径从 ./tools/ 改为 builtin-tools/tools/ - 删除 src/tools/ 整个目录(已迁移至 packages/builtin-tools/) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: 添加 builtin-tools 路径别名至 tsconfig,更新 bun.lock - tsconfig.json 新增 builtin-tools/* 和 builtin-tools 路径映射 - 新增 packages/builtin-tools/src 至 include Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: 为 builtin-tools、mcp-client、agent-tools 添加 @claude-code-best 作用域前缀 所有包名及 import 路径统一添加 @claude-code-best/ 前缀: - builtin-tools → @claude-code-best/builtin-tools - mcp-client → @claude-code-best/mcp-client - agent-tools → @claude-code-best/agent-tools Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: 修复 node 环境没有 bun 的问题 --------- Co-authored-by: Eric-Guo <eric.guocz@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
5.7 KiB
5.7 KiB
Chapter 4: Theme System
The theme system provides consistent, accessible color palettes across the application. It supports dark mode, light mode, ANSI-only terminals, and colorblind-accessible variants.
ThemeProvider
Wraps the application to provide theme context.
import { ThemeProvider } from '@anthropic/ink'
function App() {
return (
<ThemeProvider initialState="dark" onThemeSave={(setting) => saveConfig(setting)}>
<MyComponent />
</ThemeProvider>
)
}
Props
| Prop | Type | Description |
|---|---|---|
children |
ReactNode |
Child components |
initialState |
ThemeSetting |
Initial theme (default: loads from config) |
onThemeSave |
(setting: ThemeSetting) => void |
Called when theme is saved |
Theme Configuration Injection
Before mounting, inject config persistence callbacks:
import { setThemeConfigCallbacks } from '@anthropic/ink'
setThemeConfigCallbacks({
loadTheme: () => configStore.get('theme', 'dark'),
saveTheme: (setting) => configStore.set('theme', setting),
})
Theme Settings
type ThemeSetting = 'auto' | 'dark' | 'light' | 'light-daltonized' | 'dark-daltonized' | 'light-ansi' | 'dark-ansi'
type ThemeName = 'dark' | 'light' | 'light-daltonized' | 'dark-daltonized' | 'light-ansi' | 'dark-ansi'
| Theme | Description |
|---|---|
dark |
Dark theme with RGB colors (default) |
light |
Light theme with RGB colors |
dark-daltonized |
Colorblind-accessible dark theme |
light-daltonized |
Colorblind-accessible light theme |
dark-ansi |
Dark theme using only 16 ANSI colors |
light-ansi |
Light theme using only 16 ANSI colors |
auto |
Follows terminal's dark/light mode (resolved at runtime) |
Theme Hooks
useTheme()
Returns the resolved theme name and setter.
const [currentTheme, setTheme] = useTheme()
// currentTheme: ThemeName (never 'auto')
// setTheme: (setting: ThemeSetting) => void
useThemeSetting()
Returns the raw setting (may be 'auto').
const setting = useThemeSetting() // 'auto' | 'dark' | ...
usePreviewTheme()
Returns preview controls for a theme picker UI.
const { setPreviewTheme, savePreview, cancelPreview } = usePreviewTheme()
// Show preview
setPreviewTheme('light')
// User confirms
savePreview()
// User cancels
cancelPreview()
Theme Color Palette
Every theme defines these semantic color keys:
Brand & Identity
| Key | Purpose |
|---|---|
claude |
Brand orange |
claudeShimmer |
Lighter brand orange (animated) |
permission |
Permission/blue |
permissionShimmer |
Lighter permission blue |
autoAccept |
Electric violet |
planMode |
Teal/sage |
ide |
Muted blue |
Semantic Colors
| Key | Purpose |
|---|---|
text |
Primary text color |
inverseText |
Text on inverse backgrounds |
inactive |
Dimmed/disabled elements |
inactiveShimmer |
Lighter inactive |
subtle |
Very subtle text |
suggestion |
Interactive/accent |
background |
General background accent |
success |
Positive/success |
error |
Negative/error |
warning |
Caution/warning |
warningShimmer |
Lighter warning |
merged |
Merged state |
Diff Colors
| Key | Purpose |
|---|---|
diffAdded |
Added lines background |
diffRemoved |
Removed lines background |
diffAddedDimmed |
Dimmed added |
diffRemovedDimmed |
Dimmed removed |
diffAddedWord |
Word-level added |
diffRemovedWord |
Word-level removed |
UI Colors
| Key | Purpose |
|---|---|
promptBorder |
Input prompt border |
promptBorderShimmer |
Lighter prompt border |
bashBorder |
Shell block border |
selectionBg |
Text selection highlight background |
userMessageBackground |
User message background |
userMessageBackgroundHover |
User message hover |
messageActionsBackground |
Action buttons background |
Agent Colors
| Key | Purpose |
|---|---|
red_FOR_SUBAGENTS_ONLY |
Agent color assignment |
blue_FOR_SUBAGENTS_ONLY |
Agent color assignment |
green_FOR_SUBAGENTS_ONLY |
Agent color assignment |
yellow_FOR_SUBAGENTS_ONLY |
Agent color assignment |
purple_FOR_SUBAGENTS_ONLY |
Agent color assignment |
orange_FOR_SUBAGENTS_ONLY |
Agent color assignment |
pink_FOR_SUBAGENTS_ONLY |
Agent color assignment |
cyan_FOR_SUBAGENTS_ONLY |
Agent color assignment |
Using Theme Colors in Components
ThemedText
<Text color="success">Operation complete</Text>
<Text color="error" bold>Failed!</Text>
<Text color="claude">Claude says...</Text>
<Text dimColor>Secondary info</Text>
<Text backgroundColor="userMessageBackground">Highlighted</Text>
ThemedBox
<Box borderStyle="single" borderColor="permission" backgroundColor="userMessageBackground">
<Text>Themed content</Text>
</Box>
color() Utility
import { color, useTheme } from '@anthropic/ink'
function MyComponent() {
const [themeName] = useTheme()
const paint = color('success', themeName)
// paint('text') returns ANSI-colored string
}
Daltonized Themes
The daltonized themes (light-daltonized, dark-daltonized) are designed for users with protanopia/deuteranopia:
- Green/red diffs replaced with blue/red
- Status colors use blue instead of green
- Warning colors adjusted for better distinction
- All color pairs verified for sufficient contrast
System Theme Detection
When ThemeSetting is 'auto':
- Seeds from
$COLORFGBGenvironment variable - Queries terminal via OSC 11 for live background color
- Watches for changes (terminal theme switch) in real-time
- Resolves to
'dark'or'light'based on detected brightness