[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83841":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},83841,"dinotty","xichan96\u002Fdinotty","xichan96","Mobile-first web terminal for AI coding agents (Claude Code, Codex,    OpenCode). Server-side virtual terminal enables session persistence &    auto-reconnect — disconnect, sleep, refresh, and pick up exactly where    you left off. With customizable shortcut keyboard, file workspace &    live web preview.",null,"Vue",113,13,101,0,1,12,7,3.44,false,"dev",true,[],"2026-06-12 02:04:35","\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002Flogo.png\" alt=\"Dinotty Logo\" width=\"200\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Dinotty\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\".\u002FREADME.en.md\">English\u003C\u002Fa> | 中文\n\u003C\u002Fp>\n\n---\n\n为 **Coding Agent** 打造的**移动优先**终端服务器。在手机上运行 Claude Code、opencode、Codex 或 OpenClaw，获得与电脑上完全一致的体验——利用碎片时间，随时随地编程。\n\n## 截图\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002F1.png\" alt=\"手机上运行 Claude Code\" width=\"250\" \u002F>\n  \u003Cimg src=\"docs\u002Fimages\u002F2.png\" alt=\"完整键盘布局与 htop\" width=\"250\" \u002F>\n  \u003Cimg src=\"docs\u002Fimages\u002F3.png\" alt=\"主题设置\" width=\"250\" \u002F>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002F4.png\" alt=\"快捷键盘自定义\" width=\"250\" \u002F>\n  \u003Cimg src=\"docs\u002Fimages\u002F5.png\" alt=\"系统监控\" width=\"250\" \u002F>\n  \u003Cimg src=\"docs\u002Fimages\u002F6.png\" alt=\"通知系统\" width=\"250\" \u002F>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002F7.png\" alt=\"平板横屏桌面级布局\" width=\"500\" \u002F>\n\u003C\u002Fp>\n\n## 为什么选择 Dinotty？\n\n终端 Coding Agent（Claude Code、opencode、Codex、OpenClaw 等）功能强大，但它们被束缚在桌面上。Dinotty 让你：\n\n- **在手机上启动编程任务**——排队、通勤时掏出手机就能让 agent 干活\n- **随时查看长时间运行的 agent**——不用打开笔记本电脑\n- **直接在手机上验证 agent 产出**——代码 diff、渲染的网页、生成的文件，浏览器里一目了然\n- **永远不会丢失会话**——手机息屏、切换 App、断网——回来后一切都在原处\n\n### 轻量级——不是远程桌面\n\n| | Dinotty | 远程桌面 (VNC\u002FRDP\u002FParsec) |\n|---|---|---|\n| **传输数据** | 纯文本（JSON，字节流） | 全屏像素流，30-60 fps |\n| **带宽消耗** | 通常 ~1–10 KB\u002Fs | ~1–10 MB\u002Fs（多 100–1000 倍） |\n| **移动网络友好** | ✅ 3G\u002F4G 下流畅无延迟 | ❌ 卡顿、高延迟、流量消耗大 |\n| **弱信号容忍度** | ✅ 自动重连，无画面丢失 | ❌ 画面冻结、输入延迟 |\n| **电量消耗** | 低（文本渲染） | 高（视频解码） |\n| **分辨率适配** | 任意尺寸下原生文本渲染 | 位图缩放，手机上模糊 |\n| **交互方式** | 原生触控 + 自定义键盘 | 模拟鼠标，桌面 UI 在手机上很小 |\n\n## 核心特性\n\n- **服务端虚拟终端** — 完整 VTE 解析，服务端掌握精确屏幕状态，支持会话恢复与屏幕快照\n- **会话持久化** — PTY 进程在断网后存活，自动重连 + 指数退避，刷新页面即可恢复\n- **响应式布局** — 竖屏上下排列，横屏左右并排；触控优化的按钮与面板缩放\n- **可自定义快捷键盘** — 为手机补齐 Ctrl\u002FEsc\u002F功能键，支持任意转义序列\n- **内建文件浏览器** — 代码高亮、Markdown 渲染、Office 文档预览、音视频播放\n- **Git 变更指示** — 编辑器 gutter 增\u002F改\u002F删标记，inline diff，Stage\u002FRevert\n- **网页预览** — 内建反向代理，在 iframe 中预览本地开发服务器\n- **通知系统** — 终端 bell\u002FOSC 检测，WebSocket 推送，可配置声音提醒\n- **系统监控** — 实时 CPU\u002F内存\u002F网络图表\n- **插件系统** — JS 插件 + CLI 桥接，热重载，内置 CC Switch、JSON Formatter 等\n- **Open API** — HTTP 端点，支持 Stream Deck、快捷指令等外部设备控制\n- **命令面板** — 快速访问命令启动器\n- **桌面应用** — 可选 Tauri 原生客户端\n\n## 与其他终端的对比\n\n| 能力 | Dinotty | ttyd | gotty | Wetty |\n|---|---|---|---|---|\n| 服务端虚拟终端（VT Screen） | ✅ | ❌ | ❌ | ❌ |\n| 会话在断网后存活 | ✅ | ❌ | ❌ | ❌ |\n| 刷新页面 = 恢复会话 | ✅ | ❌ | ❌ | ❌ |\n| 内建文件浏览器和预览 | ✅ | ❌ | ❌ | ❌ |\n| Git 变更指示 | ✅ | ❌ | ❌ | ❌ |\n| 内建网页预览（反向代理） | ✅ | ❌ | ❌ | ❌ |\n| 可自定义快捷键盘 | ✅ | ❌ | ❌ | ❌ |\n| 插件系统 | ✅ | ❌ | ❌ | ❌ |\n| Token 认证 | ✅ | ✅ | ❌ | ✅ |\n\n其他 Web 终端只是 WebSocket 到 PTY 的透传管道。Dinotty 在服务端运行**完整的虚拟终端仿真器**，使得会话恢复、屏幕快照成为可能，结合内建文件\u002F网页浏览器，提供自包含的 Coding Agent 工作环境。\n\n## 快速开始\n\n```bash\n# 构建前端\ncd frontend && pnpm install && pnpm run build && cd ..\n\n# 运行服务器\ncargo run\n```\n\n在浏览器中打开 http:\u002F\u002F127.0.0.1:8999 。\n\n```bash\n# 带调试日志运行\nRUST_LOG=debug cargo run\n\n# 前端类型检查\ncd frontend && npx vue-tsc --noEmit\n```\n\n## 技术栈\n\n| 层级 | 技术 |\n|------|------|\n| 后端 | Rust, Axum 0.7, Tokio, portable-pty, vte |\n| 前端 | Vue 3, TypeScript, Vite, xterm.js 5 |\n| 桌面端 | Tauri |\n\n## 项目结构\n\n```\nsrc\u002F               # Rust 后端\n  main.rs          # Axum 路由与服务入口\n  ws.rs            # WebSocket ↔ PTY 桥接\n  vt_screen.rs     # 虚拟终端仿真器（基于 VTE）\n  session.rs       # 会话管理器（多面板）\n  workspace.rs     # 文件工作区 API\n  proxy.rs         # 反向代理（预览）\n  monitor.rs       # 系统监控\n  notification.rs  # 通知广播（bell\u002FOSC 检测）\n  plugin.rs        # 插件系统管理\n  settings.rs      # 设置持久化\n  auth.rs          # 身份认证\n  file_watcher.rs  # 文件变更监听\n\nfrontend\u002F          # Vue 3 SPA\n  src\u002F\n    App.vue\n    components\u002F    # TabBar, TerminalPane, MobileKeyboard 等\n    composables\u002F   # useTerminal, useTransport, useSettings 等\n\nsrc-tauri\u002F         # Tauri 桌面客户端\ndocs\u002F              # 设计文档\n```\n\n## WebSocket 协议\n\n通过 `\u002Fws` 传输的 JSON 消息：\n\n| 方向 | `type` | 字段 |\n|------|--------|------|\n| 客户端 → 服务端 | `input` | `data: String` |\n| 客户端 → 服务端 | `resize` | `cols: u16, rows: u16` |\n| 服务端 → 客户端 | `output` | `data: String` |\n| 服务端 → 客户端 | `shell_info` | `shell_type: String` |\n\n## 更多文档\n\n- [部署指南](docs\u002Fdeployment.md) — systemd、Docker、跨平台构建、配置说明\n- [通知系统](docs\u002Fnotifications.md) — HTTP API、Claude Code 集成、Open API\n- [插件系统](docs\u002Fplugins.md) — 安装、清单、API、内置插件\n- [插件开发](docs\u002Fplugin-development.md) — 完整的插件开发文档\n- [贡献指南](docs\u002Fcontributing.md) — 分支策略、Commit 规范、代码风格\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=xichan96\u002Fdinotty&type=Date)](https:\u002F\u002Fstar-history.com\u002F#xichan96\u002Fdinotty&Date)\n\n## 许可证\n\nMIT\n",2,"2026-06-11 04:11:36","CREATED_QUERY"]