feat: ClawTap v0.1.0 — initial release

Multi-adapter mobile UI for AI coding assistants.
Supports Claude Code, Codex CLI, and Gemini CLI through one interface.

Features:
- Real-time bidirectional sync via tmux + WebSocket
- Cross-AI review (send one AI's output to another for review)
- Multi-review tabs with minimize/expand
- Push notifications (PWA) with smart session-aware filtering
- Three-channel event system (hooks, file watcher, pane monitor)
- Voice input, image paste, draft persistence
- Terminal-native design (JetBrains Mono, dark theme, pixel art claw)
- CLI with --adapter flag on every command
- Zero-overhead fire-and-forget hooks
This commit is contained in:
kuannnn
2026-03-18 10:24:45 +08:00
commit 42861ea7fa
151 changed files with 33897 additions and 0 deletions
+159
View File
@@ -0,0 +1,159 @@
@import 'tailwindcss';
@plugin '@tailwindcss/typography';
@theme {
--color-bg: #09090b;
--color-surface: #18181b;
--color-surface-light: #27272a;
--color-border: #3f3f46;
--color-accent: #22c55e;
--color-accent-light: #4ade80;
--color-accent-glow: rgba(34, 197, 94, 0.15);
--color-user-bubble: rgba(5, 46, 22, 0.8);
--color-user-bubble-text: #4ade80;
--color-text: #fafafa;
--color-text-secondary: #a1a1aa;
--color-text-dim: #71717a;
--color-success: #22c55e;
--color-danger: #ef4444;
--color-warning: #eab308;
--color-surface-hover: #1f1f23;
--font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
}
body {
margin: 0;
background: var(--color-bg);
color: var(--color-text);
font-family: var(--font-mono);
font-size: 14px;
-webkit-font-smoothing: antialiased;
overscroll-behavior: none;
}
@keyframes shimmer {
0% { background-position: 200% center; }
100% { background-position: -200% center; }
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes pulse-dot {
0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
40% { transform: scale(1); opacity: 1; }
}
.shimmer-text {
background: linear-gradient(90deg, #22c55e, #22d3ee, #a78bfa, #22c55e);
background-size: 200% auto;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: shimmer 2s linear infinite;
}
.cursor-blink::after {
content: '\258b';
animation: blink 1s step-end infinite;
color: var(--color-accent);
}
.typing-dot {
animation: pulse-dot 1.4s infinite ease-in-out both;
}
.typing-dot:nth-child(2) { animation-delay: 0.16s; }
.typing-dot:nth-child(3) { animation-delay: 0.32s; }
.safe-bottom {
padding-bottom: max(12px, env(safe-area-inset-bottom));
}
.safe-top {
padding-top: env(safe-area-inset-top);
}
.safe-x {
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
}
input, textarea, select {
font-size: 16px;
}
/* Review panel uses smaller text to fit the compact layout.
16px stays on main input to prevent iOS Safari auto-zoom. */
.review-panel-compact textarea {
font-size: 14px;
}
::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 2px; }
/* ClawTap loading — SVG pixel claw walks right, pincers pivot from root */
.claw-svg {
filter: drop-shadow(0 0 4px rgba(34, 197, 94, 0.3));
}
.claw-pincer-top {
transform-origin: 3px 2px;
animation: claw-pivot-top 0.4s ease-in-out infinite;
}
.claw-pincer-bot {
transform-origin: 3px 4px;
animation: claw-pivot-bot 0.4s ease-in-out infinite;
}
@keyframes claw-pivot-top {
0%, 100% { transform: rotate(-12deg); }
50% { transform: rotate(0deg); }
}
@keyframes claw-pivot-bot {
0%, 100% { transform: rotate(12deg); }
50% { transform: rotate(0deg); }
}
.claw-walk {
animation: claw-walk 2.2s linear infinite;
}
@keyframes claw-walk {
0% { transform: translateX(-24px); }
100% { transform: translateX(8px); }
}
.claw-dot {
animation: claw-dot-eat 2.2s ease-in-out infinite;
}
@keyframes claw-dot-eat {
0%, 50% { opacity: 0.5; transform: scale(1); }
65% { opacity: 0; transform: scale(0); }
80%, 100% { opacity: 0.5; transform: scale(1); }
}
/* ClawTap logo float */
.claw-float {
animation: claw-float 3s ease-in-out infinite;
}
@keyframes claw-float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-6px); }
}
/* Terminal glow effect */
.text-glow {
text-shadow: 0 0 8px var(--color-accent-glow);
}
@keyframes slideUp {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}