termux-dev 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +214 -166
  2. package/assets/banner.svg +23 -28
  3. package/assets/preview.png +0 -0
  4. package/assets/preview.svg +92 -10
  5. package/dist/cli/banner.js +1 -1
  6. package/dist/cli/clipboard-write.js +55 -0
  7. package/dist/cli/clipboard.js +182 -106
  8. package/dist/cli/colors.js +67 -0
  9. package/dist/cli/confirm.js +50 -0
  10. package/dist/cli/doctor.js +4 -4
  11. package/dist/cli/effort.js +80 -0
  12. package/dist/cli/export.js +3 -3
  13. package/dist/cli/files.js +19 -5
  14. package/dist/cli/headless.js +23 -11
  15. package/dist/cli/index.js +1377 -480
  16. package/dist/cli/keys.js +69 -0
  17. package/dist/cli/liveblock.js +45 -0
  18. package/dist/cli/log.js +19 -0
  19. package/dist/cli/markdown.js +158 -36
  20. package/dist/cli/mcp-panel.js +432 -0
  21. package/dist/cli/permission.js +84 -0
  22. package/dist/cli/picker.js +135 -0
  23. package/dist/cli/prompt.js +256 -56
  24. package/dist/cli/resume.js +15 -0
  25. package/dist/cli/rewind.js +51 -0
  26. package/dist/cli/runtime_errors.js +6 -0
  27. package/dist/cli/server.js +85 -24
  28. package/dist/cli/settings.js +307 -0
  29. package/dist/cli/statusline.js +1 -1
  30. package/dist/cli/theme.js +126 -108
  31. package/dist/cli/transcript.js +114 -0
  32. package/dist/cli/typeahead.js +371 -0
  33. package/dist/cli/ui.js +1021 -0
  34. package/dist/cli/updater.js +23 -21
  35. package/dist/cli/usage-panel.js +242 -0
  36. package/dist/cli/width.js +178 -0
  37. package/dist/core/capabilities.js +433 -0
  38. package/dist/core/catalog-util.js +27 -0
  39. package/dist/core/checkpoint.js +90 -0
  40. package/dist/core/context-stats.js +29 -0
  41. package/dist/core/cost.js +191 -0
  42. package/dist/core/formats.js +199 -0
  43. package/dist/core/history.js +51 -1
  44. package/dist/core/hooks.js +79 -0
  45. package/dist/core/i18n.js +42 -0
  46. package/dist/core/local-config.js +69 -0
  47. package/dist/core/locales/de.js +210 -0
  48. package/dist/core/locales/en.js +221 -0
  49. package/dist/core/locales/es.js +210 -0
  50. package/dist/core/locales/fr.js +210 -0
  51. package/dist/core/locales/ja.js +210 -0
  52. package/dist/core/locales/pt.js +210 -0
  53. package/dist/core/locales/ru.js +210 -0
  54. package/dist/core/locales/uk.js +210 -0
  55. package/dist/core/locales/zh.js +210 -0
  56. package/dist/core/loop.js +125 -49
  57. package/dist/core/memory.js +39 -12
  58. package/dist/core/models.js +33 -20
  59. package/dist/core/network.js +12 -11
  60. package/dist/core/notify.js +54 -0
  61. package/dist/core/planfile.js +43 -0
  62. package/dist/core/price-catalog.json +1 -0
  63. package/dist/core/prices.js +249 -0
  64. package/dist/core/reasoning-catalog.json +1 -0
  65. package/dist/core/reasoning.js +393 -0
  66. package/dist/core/redact.js +41 -0
  67. package/dist/core/secure-file.js +22 -0
  68. package/dist/core/session.js +16 -5
  69. package/dist/core/snapshot.js +14 -2
  70. package/dist/core/title.js +61 -0
  71. package/dist/core/types.js +1 -1
  72. package/dist/core/usage.js +43 -7
  73. package/dist/core/vision-catalog.json +1 -0
  74. package/dist/core/vision.js +123 -0
  75. package/dist/mcp/client.js +36 -5
  76. package/dist/mcp/http-client.js +174 -0
  77. package/dist/mcp/manager.js +330 -93
  78. package/dist/permissions/guard.js +385 -117
  79. package/dist/prompts/builder.js +46 -38
  80. package/dist/providers/anthropic.js +517 -0
  81. package/dist/providers/index.js +18 -1
  82. package/dist/providers/openai.js +138 -125
  83. package/dist/providers/shared.js +116 -0
  84. package/dist/providers/toolguard.js +101 -0
  85. package/dist/tools/bash.js +141 -51
  86. package/dist/tools/diagnostics.js +76 -48
  87. package/dist/tools/fs.js +77 -5
  88. package/dist/tools/index.js +2 -1
  89. package/dist/tools/mcp.js +72 -0
  90. package/dist/tools/packages.js +16 -1
  91. package/dist/tools/plan.js +8 -8
  92. package/dist/tools/questions.js +50 -54
  93. package/dist/tools/server.js +6 -0
  94. package/dist/tools/todo.js +20 -18
  95. package/dist/tools/web.js +143 -8
  96. package/package.json +1 -1
package/README.md CHANGED
@@ -1,75 +1,96 @@
1
1
  <div align="center">
2
2
 
3
- <img src="assets/banner.svg" alt="DEVX" width="800" />
3
+ <img src="assets/banner.svg" alt="DEVX" width="880" />
4
4
 
5
- <br/><br/>
5
+ <br/>
6
6
 
7
7
  **Ultra-fast, autonomous AI pair-programmer & vibe-coding terminal agent.**
8
8
  Built specifically for **Android Termux**, **Windows**, **macOS**, and **Linux**.
9
9
 
10
- [![npm version](https://img.shields.io/npm/v/termux-dev.svg?color=blue)](https://www.npmjs.com/package/termux-dev)
11
- [![CI](https://github.com/apvcode/Termux-Dev/actions/workflows/ci.yml/badge.svg)](https://github.com/apvcode/Termux-Dev/actions/workflows/ci.yml)
12
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
13
- [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org)
14
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.4-blue.svg)](https://www.typescriptlang.org)
15
- [![Platform](https://img.shields.io/badge/Platform-Termux%20%7C%20Windows%20%7C%20macOS%20%7C%20Linux-orange.svg)](#)
10
+ <br/>
11
+
12
+ [![npm](https://img.shields.io/npm/v/termux-dev.svg?style=flat-square&labelColor=0a0c11&color=00c2d1&label=npm)](https://www.npmjs.com/package/termux-dev)
13
+ [![CI](https://img.shields.io/github/actions/workflow/status/apvcode/Termux-Dev/ci.yml?style=flat-square&labelColor=0a0c11&label=CI)](https://github.com/apvcode/Termux-Dev/actions/workflows/ci.yml)
14
+ [![License: MIT](https://img.shields.io/badge/license-MIT-4f8cff.svg?style=flat-square&labelColor=0a0c11)](LICENSE)
15
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D20-3fb950.svg?style=flat-square&labelColor=0a0c11)](https://nodejs.org)
16
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.4-4f8cff.svg?style=flat-square&labelColor=0a0c11)](https://www.typescriptlang.org)
17
+ [![Platform](https://img.shields.io/badge/platform-Termux%20%7C%20Windows%20%7C%20macOS%20%7C%20Linux-d97a3a.svg?style=flat-square&labelColor=0a0c11)](#quick-start)
16
18
 
17
19
  <br/>
18
20
 
19
- [🇬🇧 **English**](#-highlights) &nbsp;•&nbsp; [🇷🇺 **Русский**](#-русский)
21
+ **English** &nbsp;•&nbsp; [Русский](README_ru.md) &nbsp;•&nbsp; [Українська](README_uk.md) &nbsp;•&nbsp; [Deutsch](README_de.md) &nbsp;•&nbsp; [Español](README_es.md) &nbsp;•&nbsp; [Français](README_fr.md) &nbsp;•&nbsp; [Português](README_pt.md) &nbsp;•&nbsp; [Chinese](README_zh.md) &nbsp;•&nbsp; [Japanese](README_ja.md)
20
22
 
21
23
  <br/><br/>
22
24
 
23
- <img src="assets/preview.svg" alt="devx Terminal Interface" width="750" style="border-radius: 8px;" />
25
+ <img src="assets/preview.svg" alt="The devx terminal interface" width="880" />
24
26
 
25
27
  </div>
26
28
 
27
29
  ---
28
30
 
29
- ## 🌟 Highlights
31
+ ## At a glance
32
+
33
+ <table>
34
+ <tr><td valign="top" width="33%"><b>Plan, then act</b><br/>PLAN and AGENT modes, one-click approval, a plan sized to the task</td><td valign="top" width="33%"><b>Safe by default</b><br/>asks before risky actions, hides secrets in output, undo through git, an optional cost limit</td><td valign="top" width="33%"><b>Any model</b><br/>OpenRouter, Gemini, DeepSeek, Groq, Mistral, OpenAI, Anthropic, Ollama and more</td></tr><tr><td valign="top" width="33%"><b>MCP built in</b><br/>a panel, remote servers over HTTP, and the agent can set servers up itself</td><td valign="top" width="33%"><b>Made for the terminal</b><br/>phone-friendly layouts, 18 themes, reasoning and output you can fold</td><td valign="top" width="33%"><b>Costs you can see</b><br/>live cost per session, reasoning effort per model, a limit when you want one</td></tr>
35
+ </table>
36
+
37
+ ## Quick start
38
+
39
+ ```bash
40
+ npm install -g termux-dev
41
+ devx
42
+ ```
43
+
44
+ On Android, first run `pkg install nodejs-lts` in Termux.
45
+
46
+ ---
47
+
48
+ ## Highlights
30
49
 
31
- The terminal interface uses a compact layout on both desktop and Termux. Switch to the original ASCII layout in `/settings` → `Interface`.
50
+ The terminal interface is built around a framed prompt that carries the status in its borders — mode (`agent` / `plan` / `yolo`), model, folder, git branch, context meter and cost — a header card, a shaded echo of your message, a `●` gutter for the assistant, `◆` lines for tool calls with quiet one-line results and diff boxes for edits, and a live working indicator. Every layout has a narrow variant for Termux in portrait and measures emoji and CJK text correctly. Switch to the original ASCII layout in `/settings` → `Interface`.
32
51
 
33
- - **🧠 Dual-Brain Architecture (PLAN & AGENT Modes):**
52
+ - **Dual-Brain Architecture (PLAN & AGENT Modes):**
34
53
  Instantly toggle between **PLAN** (safe architect, interactive requirements questionnaire, no code dumps) and **AGENT** (autonomous file edits, terminal commands, auto-installer).
35
- - **🚀 One-Click Plan Approval (`[🚀 Go / ✏️ Other]`):**
54
+ - **One-Click Plan Approval (`[Go / Other]`):**
36
55
  When an architectural plan is finalized, review and confirm with `Go` to immediately unleash the coder agent.
37
- - **🖼️ Multimodal Vision Attachments:**
38
- Paste screenshots directly from clipboard (`/image` or `Ctrl+P`) with smart duplicate badges `[1.png 203kb]`, `[1(copy).png 421kb]`.
39
- - **🌐 Built-in Live Web Server (`/serve`):**
56
+ - **Multimodal Vision Attachments:**
57
+ Paste screenshots straight from the clipboard with `Ctrl+V` or `Alt+V` (also `/image`, or a pasted file path). They appear as badges like `[Image #1 203kb]` and are sent to the model as real images, unless the model is known to read text only. Needs `wl-clipboard` on Wayland, `xclip` on X11, `pngpaste` on macOS.
58
+ - **Built-in Live Web Server (`/serve`):**
40
59
  Instantly preview web apps and HTML5 games on port 3000. Seamlessly opens on Android via `termux-open-url`.
41
- - **⏪ Instant Snapshot Rollback (`/undo`):**
42
- Every change made by the AI is recorded. Roll back unwanted edits cleanly with a single command.
43
- - **🩺 Self-Healing Diagnostics & Auto-Installer:**
60
+ - **Instant Snapshot Rollback (`/undo`):**
61
+ Every edit made with the file tools (`write_file`, `edit_file`) is recorded and can be rolled back with a single command. Changes made by shell commands (`bash`) are **not** tracked, and snapshots live in memory for the current session only.
62
+ - **Self-Healing Diagnostics & Auto-Installer:**
44
63
  Built-in support for TypeScript (`tsc`), JavaScript (`node --check`), Python (`py_compile`), and Rust (`cargo check`). The AI automatically finds and fixes errors before finishing turns.
45
- - **🧠 Project Memory Bank (`.devx/memory.md`):**
64
+ - **Project Memory Bank (`.devx/memory.md`):**
46
65
  Persistent project context across sessions with `/memory add <rule>`.
47
- - **🎨 Pure Black Obsidian Theme (`#0a0a0c`):**
48
- Deep OLED black background designed for distraction-free CLI vibe-coding.
49
- - **📜 Smart Session History (`/resume` & `/session`):**
66
+ - **18 Colour Themes on a Pure Black Background (`#0a0a0c`):**
67
+ Deep OLED black for distraction-free CLI vibe-coding, with full palettes instead of a single accent: Cyan Cyber, Synthwave Purple, Matrix Hacker, Solar Amber, Ruby Crimson, Pure Monochrome, Nord Frost, Dracula, Tokyo Night, Gruvbox, Catppuccin Mocha, Solarized Dark, Rose Pine, Monokai, GitHub Dark, Deep Ocean, Sunset Glow and Forest Moss. See [Themes](#themes).
68
+ - **Smart Session History (`/resume` & `/session`):**
50
69
  Resume sessions with last 20 messages neatly rendered in full Markdown and track unique session IDs (`#a8f9z`).
51
- - **🔍 Smart Multi-Line Editor (`edit_file 2.0`):**
70
+ - **Smart Multi-Line Editor (`edit_file 2.0`):**
52
71
  Collision-safe code editing with line-number error reporting on duplicate matches and `replaceAll` support.
53
- - **🧪 Comprehensive Test Suite (Vitest):**
72
+ - **Comprehensive Test Suite (Vitest):**
54
73
  Full test coverage across core agent loop, file systems, security guard, snapshots, and context history with automated CI.
55
- - **⚡ Universal AI Provider Support:**
74
+ - **Interface in 9 Languages:**
75
+ English (default), Русский, Українська, Deutsch, Español, Français, Português, 中文 and 日本語. Pick one in `/settings` → `Language`; it applies at once and is remembered. Messages, hints and the settings screen are translated; code, tool names and the model's own answers are not.
76
+ - **Universal AI Provider Support:**
56
77
  **OpenRouter**, **Google Gemini**, **DeepSeek**, **Groq**, **Mistral**, **OpenAI**, **Anthropic**, **Alibaba**, and local models (**Ollama**, **LM Studio**).
57
78
 
58
79
  ---
59
80
 
60
- ## 📦 Installation & Setup
81
+ ## Installation & Setup
61
82
 
62
83
  ### Prerequisites
63
84
  - **Node.js**: `v20.0.0` or higher
64
85
  - **npm**, **pnpm**, or **yarn**
65
86
 
66
- ### ⚡ Fast Global Install (Recommended)
87
+ ### Fast Global Install (Recommended)
67
88
 
68
89
  ```bash
69
90
  npm install -g termux-dev
70
91
  ```
71
92
 
72
- ### 📱 Android (Termux) Setup
93
+ ### Android (Termux) Setup
73
94
 
74
95
  ```bash
75
96
  # 1. Update packages & install NodeJS
@@ -82,7 +103,7 @@ npm install -g termux-dev
82
103
  devx
83
104
  ```
84
105
 
85
- ### 🛠️ Build from Source (Developers)
106
+ ### Build from Source (Developers)
86
107
 
87
108
  ```bash
88
109
  git clone https://github.com/apvcode/Termux-Dev.git
@@ -91,7 +112,7 @@ npm install
91
112
  npm link
92
113
  ```
93
114
 
94
- ### 🗑️ Complete Uninstallation
115
+ ### Complete Uninstallation
95
116
 
96
117
  To completely remove `devx` along with all configuration, saved sessions, and data:
97
118
 
@@ -108,7 +129,7 @@ Remove-Item -Recurse -Force "$HOME\.devx", "$HOME\.devxrc.json" -ErrorAction Sil
108
129
 
109
130
  ---
110
131
 
111
- ## 🚀 Getting Started
132
+ ## Getting Started
112
133
 
113
134
  Launch `devx` in any project folder:
114
135
 
@@ -129,7 +150,7 @@ devx
129
150
 
130
151
  ---
131
152
 
132
- ## ⌨️ Slash Commands
153
+ ## Slash Commands
133
154
 
134
155
  Type `/` in the prompt to open the autocomplete command palette:
135
156
 
@@ -138,13 +159,17 @@ Type `/` in the prompt to open the autocomplete command palette:
138
159
  | **`/plan`** | Switch to **PLAN** mode (architect & requirements planner) |
139
160
  | **`/agent`** | Switch to **AGENT** mode (coder & autonomous executor) |
140
161
  | **`/mcp`** | Manage Model Context Protocol (MCP) servers & external tools (`/mcp reload`) |
141
- | **`/usage`** | View live network bandwidth (KB/MB), token costs, and API request counts |
162
+ | **`/usage`** | A panel (close with `Esc`): what fills the context window (system prompt, tool schemas, messages, tool results, images), the session cost and how sure it is, tokens, cached input, traffic |
142
163
  | **`/export`** | Export session conversation to a clean GitHub-Flavored Markdown transcript |
143
- | **`/theme`** | Switch UI color theme (Cyan, Purple, Matrix, Amber, Crimson, Monochrome) |
164
+ | **`/theme [name]`** | Switch the UI theme: searchable list of 18 palettes with a live preview (see [Themes](#themes)) |
144
165
  | **`/doctor`** | Run environment health diagnostics (Node, Termux, Compilers, API keys) |
145
- | **`/image`** | Paste image from clipboard as `[1.png 203kb]` |
166
+ | **`/image`** | Paste the image from the clipboard (same as `Ctrl+V` / `Alt+V`) |
146
167
  | **`/serve [port]`** | Start local HTTP server for web/game preview (`/serve stop` to halt) |
147
168
  | **`/memory`** | View, add (`/memory add <fact>`), or clear project memory bank |
169
+ | **`/copy`** | Copy the **last answer** of the AI to the clipboard, in full (works over ssh too) |
170
+ | **`/rename`** | Rename the chat: `/rename <name>`, or without a name the AI names it again (`/title` is the same) |
171
+ | **`/permissions`** | What is allowed without asking (`Session` / `Always` on an approval card); `/permissions clear` resets it |
172
+ | **`/rewind`** | Go back to one of **your messages**: the chat after it is removed (the model forgets it too), the message returns to the input line to be edited; the files can go back as well (with git) |
148
173
  | **`/undo`** | Revert all file changes from the last AI turn |
149
174
  | **`/diff`** | View colored git diff of modified project files |
150
175
  | **`/commit`** | AI-generated semantic commit message & git commit |
@@ -152,193 +177,216 @@ Type `/` in the prompt to open the autocomplete command palette:
152
177
  | **`/session`** | View active session ID, stats, and metadata |
153
178
  | **`/resume`** | Browse and resume saved chat sessions |
154
179
  | **`/session del`** | Selectively or bulk delete saved sessions |
155
- | **`/settings`** | Configure YOLO auto-approve, project memory, theme, and update checks |
180
+ | **`/settings`** | Configure theme, interface, YOLO auto-approve, project memory, update checks and the interface language |
156
181
  | **`/update`** | Check and install latest updates from GitHub |
157
182
  | **`/model`** | Switch model for the active provider with live search |
183
+ | **`/effort [level]`** | Set the reasoning effort. Only the levels the current model supports are offered (see [Reasoning effort](#reasoning-effort)) |
158
184
  | **`/provider`** | Switch provider (OpenRouter, Gemini, Groq, DeepSeek, Local) |
159
185
  | **`/compact`** | Compact and summarize chat context tokens |
160
- | **`/clear`** | Clear screen without deleting conversation history |
186
+ | **`/clear`** | Clear the context and start a new session (the old one stays saved, see `/resume`) |
161
187
  | **`/init`** | Generate `AGENTS.md` developer guide in project root |
162
188
  | **`/help`** | Display all available commands |
163
189
  | **`/exit`** | Exit devx cleanly |
164
190
 
165
191
  ---
166
192
 
167
- ## ⌨️ Keybindings
193
+ ## Keybindings
168
194
 
169
195
  - **`Tab`** — Instantly toggle between **PLAN** and **AGENT** modes without losing your draft text.
170
- - **`Ctrl+P`** / **`Ctrl+V`** — Paste image from clipboard directly into prompt.
196
+ - **`Ctrl+V`** / **`Alt+V`** — Paste image from clipboard directly into prompt.
171
197
  - **`@filename`** — Fast fuzzy file autocomplete and full file embedding.
172
198
  - **`Backspace`** — Atomically deletes entire badges `[Pasted text #1]` and `[1.png 203kb]` in one press.
199
+ - **`Ctrl+Backspace`** / **`Alt+Backspace`** — Erase the text word by word (also while the agent works).
200
+ - **`Ctrl+Enter`** — While the agent works: stop its current task and send your message right now (`Alt+Enter` does the same on terminals that cannot tell `Ctrl+Enter` from `Enter`).
201
+ - **`Ctrl+P`** / **`Ctrl+O`** — Unfold or fold the reasoning of the model (`Ctrl+P`) and the commands with their output (`Ctrl+O`) in the whole chat, also what is already above. Both are folded by default; works while the agent works and at the prompt.
173
202
  - **`Ctrl+C`** — Stop current generation immediately or exit.
174
203
 
175
204
  ---
176
205
 
177
- ## ⭐️ Support the Project
206
+ ## Reasoning effort
178
207
 
179
- If you find **devx** useful, please consider giving it a ⭐️ star on [GitHub](https://github.com/apvcode/Termux-Dev) — it helps the project grow and motivates further development!
208
+ `/effort` sets how much the model thinks before it answers: `off`, `low`, `normal`, `high`, `xhigh`, `max` or `auto` (the model's own default, nothing is sent). Models differ, so the menu offers **only the levels the current model supports**:
180
209
 
181
- <br/>
182
- <hr/>
183
- <br/>
184
-
185
- # 🇷🇺 Русский
186
-
187
- Компактный интерфейс используется по умолчанию и на ПК, и в Termux. Исходный ASCII-вариант можно включить в `/settings` → `Interface`.
188
-
189
- ## 🌟 Главные возможности
190
-
191
- - **🧠 Двухрежимная архитектура (PLAN и AGENT):**
192
- Мгновенное переключение между **PLAN** (безопасный архитектор, интерактивные опросники, запрет на несанкционированные правки) и **AGENT** (автономное создание/редактирование файлов, выполнение bash-команд, авто-установка пакетов).
193
- - **🚀 Утверждение плана в 1 клик (`[🚀 Go / ✏️ Other]`):**
194
- Когда архитектурный план готов, подтвердите его кнопкой `Go` — агент мгновенно переключится в режим кодера и приступит к реализации.
195
- - **🖼️ Мультимодальное зрение и вставка скриншотов:**
196
- Вставляйте изображения прямо из буфера обмена (`/image` или `Ctrl+P`) с авто-бейджами `[1.png 203kb]`, `[1(copy).png 421kb]`.
197
- - **🌐 Встроенный локальный веб-сервер (`/serve`):**
198
- Мгновенный предпросмотр веб-приложений и HTML5-игр на порту 3000. На Android автоматически открывается через `termux-open-url`.
199
- - **⏪ Мгновенный откат изменений (`/undo`):**
200
- Каждое действие AI логируется в снимки состояния. Любые нежелательные правки отменяются одной командой.
201
- - **🩺 Самодиагностика и авто-исправление ошибок:**
202
- Встроенная проверка кода для TypeScript (`tsc`), JavaScript (`node --check`), Python (`py_compile`) и Rust (`cargo check`). AI сам находит и исправляет синтаксические ошибки перед завершением ответа.
203
- - **🧠 Банк памяти проекта (`.devx/memory.md`):**
204
- Долгосрочная память правил и архитектурных решений между сессиями (`/memory add <правило>`).
205
- - **🎨 Чисто чёрная тема Obsidian Black (`#0a0a0c`):**
206
- Глубокий OLED-чёрный фон в стиле OpenCode для комфортной ночной разработки.
207
- - **📜 История сессий с уникальными ID (`/resume` и `/session`):**
208
- Восстановление сессий с предпросмотром последних 20 сообщений в Markdown и короткими хэш-ID (`#a8f9z`).
209
- - **🔍 Умный редактор `edit_file 2.0`:**
210
- Безопасная замена фрагментов кода с защитой от коллизий при дубликатах, указанием номеров строк и поддержкой `replaceAll`.
211
- - **🧪 Тестовый фундамент (Vitest):**
212
- Полное покрытие юнит-тестами ядра агента, файловой системы, безопасности, снимков и истории контекста с авто-тестами в CI.
213
- - **⚡ Поддержка любых провайдеров:**
214
- **OpenRouter**, **Google Gemini**, **DeepSeek**, **Groq**, **Mistral**, **OpenAI**, **Anthropic**, **Alibaba**, а также локальные **Ollama** и **LM Studio**.
210
+ ```
211
+ ╭─ effort ─────────────────────────────────── claude-sonnet-4-5 ─╮
212
+ │ ❯ ● auto model default, nothing is sent │
213
+ │ ○ off no reasoning │
214
+ │ ○ normal balanced (~6k thinking tokens) │
215
+ │ ○ high deep reasoning (~16k thinking tokens) │
216
+ │ │
217
+ │ Not offered by this model: max. │
218
+ ╰─────────────────────────────────────────────────────────────────╯
219
+ ```
215
220
 
216
- ---
221
+ - `/effort` opens the menu, `/effort high` sets a level directly (`medium`, `none`, `maximum` and similar work as aliases), `/effort auto` goes back to the model default, `/effort refresh` updates the data the menu is built from (see below).
222
+ - The choice is remembered **per model**. After switching to a model that does not offer a saved level, nothing is sent. The current level is shown next to the model name (`o3 · think high`; `think auto` means the model's own default). While the agent works, the status line shows how many tokens the model has written for your request so far (`↓ 364 tokens`), and the line after the turn sums it up (`18.1k in · 59 out`).
223
+ - `devx -p "task" --effort high` sets a level for one run only (it is never saved).
224
+ - If an endpoint answers 400 and complains about the reasoning parameter, devx repeats the request once without it, tells you, and stops sending it.
225
+
226
+ **Where the levels come from** (the first source that knows the model wins; the menu says which one it used):
227
+
228
+ 1. **Your own profile** in `~/.devxrc.json` (`reasoningProfiles`, below).
229
+ 2. **The endpoint itself.** OpenRouter lists reasoning metadata for every model (which efforts it accepts, whether it can be switched off); Ollama reports a "thinking" capability; LiteLLM and many gateways add flags to their model list. A **custom or third-party provider is asked once**: a few small requests to *its own* base URL, with the key you configured (`GET /models`, on a local machine also `POST /api/show`, for LiteLLM `GET /model/info`). The answer is cached for a day in `~/.devx/capabilities.json`. The big vendors (OpenAI, Anthropic, Google...) are not asked, their lists say nothing about reasoning. Turn it off with `"probeEndpoints": false` in `~/.devxrc.json`.
230
+ 3. **The [models.dev](https://models.dev) catalogue**: reasoning options of about 5700 models of 213 providers (efforts, toggle, token budgets). A snapshot ships with devx, so nothing is downloaded by default. `/effort refresh` fetches the current one into `~/.devx/` and asks the endpoint again; it is the only time devx contacts models.dev, and only because you ran that command. The same download refreshes the prices used for the cost display (see Cost).
231
+ 4. **Rules by model name**, the fallback for everything the sources do not describe (table below).
232
+
233
+ How a level is written into the request still depends on the API in your base URL, so that part is built into devx.
234
+
235
+ Rules by model name (the fallback):
236
+
237
+ | Model | Levels | Sent as |
238
+ | :--- | :--- | :--- |
239
+ | OpenAI o-series, gpt-oss | low, normal, high | `reasoning_effort` (`reasoning.effort` on OpenRouter) |
240
+ | GPT-5, 5.1, 5.2 | off (minimal on GPT-5), low, normal, high, plus xhigh from 5.2 | `reasoning_effort` |
241
+ | Grok 3 mini | low, high | `reasoning_effort` |
242
+ | Claude 3.7 / 4 / 4.5 | off, low, normal, high, xhigh, max (Opus 4 and 4.1 without max) | `thinking.budget_tokens` (Anthropic), `reasoning.max_tokens` (OpenRouter) |
243
+ | Gemini 2.5 Pro / Flash | low to max (Flash also off) | `thinking_budget` (Google), `reasoning.max_tokens` (OpenRouter) |
244
+ | Qwen3 | off, low, normal, high, max | `enable_thinking` / `thinking_budget` (DashScope) |
245
+ | DeepSeek V3.1+, GLM 4.5+ | off, normal | `reasoning.enabled`, `thinking.type` |
246
+ | DeepSeek-R1, QwQ, Grok 4, Magistral | none: they always reason | nothing |
247
+
248
+ A model that none of the sources describes gets no levels instead of a guess. If you know how it takes a reasoning setting, describe it in `~/.devxrc.json`:
249
+
250
+ ```json
251
+ {
252
+ "reasoningProfiles": {
253
+ "my-model": {
254
+ "levels": ["off", "normal", "high"],
255
+ "param": "reasoning_effort",
256
+ "values": { "off": "none", "normal": "medium", "high": "high" }
257
+ }
258
+ }
259
+ }
260
+ ```
217
261
 
218
- ## 📦 Установка и запуск
262
+ `param` may be nested (`"reasoning.effort"`). A profile also overrides the built-in table for that model id.
219
263
 
220
- ### Требования
221
- - **Node.js**: `v20.0.0` или выше
222
- - **npm**, **pnpm** или **yarn**
264
+ ---
223
265
 
224
- ### ⚡ Быстрая глобальная установка (Рекомендуется)
266
+ ## Typing while the agent works
225
267
 
226
- ```bash
227
- npm install -g termux-dev
228
- ```
268
+ The prompt frame stays at the bottom of the terminal during a task (with the live context and cost), and the agent's work scrolls above it. Type into it while the agent reads files, runs commands or thinks, and press Enter: the message is queued and the agent receives it **at its next step**, between two tool calls, so it carries on with its work but takes your remark into account. A message typed while the model writes its final answer gets an answer of its own instead of being dropped. `Ctrl+Enter` does not wait for the next step: it stops the task the agent is on and sends your message at once (your terminal must report the key; `Alt+Enter` is the fallback). `Ctrl+Backspace` erases a word. `Esc` clears the line, `Ctrl+C` still stops the agent and puts what you typed back into the next prompt. `@file` mentions work in these messages too. While an approval card or a question is on screen the line steps aside, so your `y` / `n` never ends up in the message. Turn it off with `"ui": { "typeAhead": false }` in `~/.devxrc.json`.
229
269
 
230
- ### 📱 Установка на Android (Termux)
270
+ ---
231
271
 
232
- ```bash
233
- # 1. Обновляем пакеты и ставим NodeJS
234
- pkg update && pkg install -y nodejs-lts
272
+ ## Context window
235
273
 
236
- # 2. Устанавливаем devx глобально через npm
237
- npm install -g termux-dev
274
+ The size of the window is looked up, not made up. In this order: `contextLimits` in `~/.devxrc.json` (your own number per model id), the [models.dev](https://models.dev) catalogue (the maker's own number for about 5000 models; a snapshot ships with devx, `/effort refresh` downloads the current one), the value saved when you chose the model, devx's table of models, a rule by model name, and only then a default of 128k. `/usage` says which of them was used and warns when it is a guess. Old messages are dropped above 85% of the window, so a window that is too small makes devx forget too early, and one that is too large makes the provider refuse the request (devx then shortens the history and tries again).
238
275
 
239
- # 3. Запускаем devx в любой папке!
240
- devx
276
+ ```json
277
+ { "contextLimits": { "my-model": 65536 } }
241
278
  ```
242
279
 
243
- ### 🛠️ Сборка из исходников (Для разработчиков)
280
+ ---
244
281
 
245
- ```bash
246
- git clone https://github.com/apvcode/Termux-Dev.git
247
- cd Termux-Dev
248
- npm install
249
- npm link
250
- ```
282
+ ## API formats (OpenAI and Anthropic)
251
283
 
252
- ### 🗑️ Полное удаление
284
+ Two wire formats exist: **OpenAI** (`/v1/chat/completions`) and **Anthropic** (`/v1/messages`). The native Anthropic format carries signed reasoning blocks, prompt caching and exact cache accounting, so Claude models work best through it. devx speaks both and picks the format **per model, by itself, with one key**:
253
285
 
254
- Чтобы полностью удалить `devx` вместе с конфигурацией, историей сессий и сохранёнными данными:
286
+ - `api.anthropic.com` and base URLs with an `/anthropic/` path (MiniMax, Z.ai and similar) use the Anthropic format.
287
+ - For any other custom gateway devx asks for the model list twice (a few small `GET {root}/v1/models` requests to your own base URL with your own key): once as an OpenAI client and once as an Anthropic client. Models that only the second list has (typically Claude) are sent through the Anthropic format, everything else through the OpenAI format. `/model` shows both lists in one picker and marks the Anthropic ones. Set the base URL once (`https://gateway.example.com/v1` or without `/v1`); there is nothing to configure per model.
288
+ - The answer is cached for a day in `~/.devx/formats.json` (model ids only, never the key). `"probeEndpoints": false` turns the probing off, `"apiFormat": "openai"` or `"anthropic"` in `~/.devxrc.json` forces one format for everything.
289
+ - Reasoning levels (`/effort`) are written the way the Anthropic API expects (`thinking.budget_tokens`) whenever the Anthropic format is used, even behind a gateway. Reasoning blocks are kept and sent back with the next request, so the model does not lose its thread between tool calls. If a gateway rejects them, the cache markers, a too large `max_tokens` or the reasoning setting, devx retries once without the offending part and says so.
255
290
 
256
- ```bash
257
- # 1. Удаляем глобальный npm-пакет
258
- npm uninstall -g termux-dev
291
+ ## Cost
259
292
 
260
- # 2. Удаляем конфиг и историю сессий (Linux / macOS / Termux)
261
- rm -rf ~/.devx ~/.devxrc.json
293
+ The number next to the context meter is the money spent in this session. It says how sure devx is:
262
294
 
263
- # (Windows PowerShell)
264
- Remove-Item -Recurse -Force "$HOME\.devx", "$HOME\.devxrc.json" -ErrorAction SilentlyContinue
295
+ | Shown | Meaning |
296
+ | :--- | :--- |
297
+ | `$0.0123` | exact: reported by the provider, or priced from the vendor's own price list |
298
+ | `~$0.0123` | an estimate: priced with the [models.dev](https://models.dev) price of the same model (a gateway may charge differently) |
299
+ | `$0.0123+` | at least this much: some requests have no known price and are not counted |
300
+ | `n/a` | no price is known for the model |
301
+
302
+ Prices are looked up in this order, the first that knows the model wins: the cost the provider put into its response (OpenRouter `usage.cost`, LiteLLM) - your own `prices` in `~/.devxrc.json` - the endpoint's own price list (OpenRouter, LiteLLM) - the models.dev catalogue (about 8500 models; a snapshot ships with devx, `/effort refresh` downloads the current one). Cached input tokens, cache writes and long-context tiers are priced separately, as the vendors do. A model that is not found is never shown as free: only `:free` models and local servers cost nothing. `/usage` also lists the cached input and how many requests could not be priced.
303
+
304
+ ```json
305
+ {
306
+ "prices": {
307
+ "my-model": { "input": 0.5, "output": 2.0, "cacheRead": 0.05 }
308
+ }
309
+ }
265
310
  ```
266
311
 
312
+ Values are USD per one million tokens.
313
+
267
314
  ---
268
315
 
269
- ## 🚀 Начало работы
316
+ ## Themes
270
317
 
271
- Запустите команду в папке любого вашего проекта:
318
+ `/theme` opens a list you can filter by typing; the highlighted theme is previewed in its own colours below the list. `/theme nord` (or an alias such as `tokyo`, `mocha`, `gh`, or a number from 1 to 18) switches directly, and the choice is saved.
272
319
 
273
- ```bash
274
- devx
275
- ```
320
+ A theme is a complete palette: accent, a second colour for plan mode, success / warning / error colours, a colour for YOLO mode, four steps of grey for text, secondary text, hints and borders, and the background of your echoed message. Every theme is checked in the tests for readable contrast on the dark background.
276
321
 
277
- * При первом запуске откроется мастер настройки: выберите любимого AI-провайдера и введите API-ключ.
278
- * Запуск сразу в режиме архитектора:
279
- ```bash
280
- devx --plan
281
- ```
282
- * Запуск в **Headless One-Shot режиме** (скрипты, CI/CD, Termux:Widget):
283
- ```bash
284
- devx -p "проверь последний git diff и найди баги"
285
- devx -p "исправь ошибки сборки" --yolo
286
- ```
322
+ | Theme | Character |
323
+ | :--- | :--- |
324
+ | `cyan` Cyan Cyber (default) | electric cyan and obsidian |
325
+ | `purple` Synthwave Purple | neon magenta, retro violet |
326
+ | `matrix` Matrix Hacker | phosphor green |
327
+ | `amber` Solar Amber | warm CRT gold |
328
+ | `crimson` Ruby Crimson | scarlet red |
329
+ | `monochrome` Pure Monochrome | white and grey only |
330
+ | `nord` Nord Frost | arctic blues |
331
+ | `dracula` Dracula | purple with pink and green |
332
+ | `tokyonight` Tokyo Night | indigo and blue |
333
+ | `gruvbox` Gruvbox | retro yellow and orange |
334
+ | `catppuccin` Catppuccin Mocha | pastel mauve |
335
+ | `solarized` Solarized Dark | low-glare teal and olive |
336
+ | `rosepine` Rose Pine | soft rose and gold |
337
+ | `monokai` Monokai | lime and magenta |
338
+ | `github` GitHub Dark | clean blue and green |
339
+ | `ocean` Deep Ocean | deep sea cyan |
340
+ | `sunset` Sunset Glow | coral and violet |
341
+ | `forest` Forest Moss | mossy greens |
342
+
343
+ Colours are exact on terminals with truecolor support (`COLORTERM=truecolor`); on 256-colour terminals each colour is mapped to the closest palette entry. Set `DEVX_COLOR=256` or `DEVX_COLOR=truecolor` to force one of the two.
287
344
 
288
345
  ---
289
346
 
290
- ## ⌨️ Слэш-команды
347
+ ## Hooks, limits and permissions
291
348
 
292
- Напишите `/` в строке ввода, чтобы открыть интерактивное меню команд:
349
+ - **Cost limit.** `/settings` → `Cost limit` (or `"maxCostPerSession": 5` in `~/.devxrc.json`, USD). At 80% devx warns you; at the limit it stops the task, and before the next message it asks whether to spend more (continuing raises the limit of that session only).
350
+ - **Allowed without asking.** On an approval card, `Session` allows a command (by program and subcommand, like `npm test`) or an MCP tool until you close devx; `Always` keeps it in `~/.devxrc.json` (`bashAllowlist`, `allowedTools`). Dangerous commands, reads of secrets, chains (`&&`, `;`, `|`) and redirections are never remembered. `/permissions` lists it, `/permissions clear` removes it.
351
+ - **Hooks.** Commands run around the tools of the agent, set in `~/.devxrc.json`:
293
352
 
294
- | Команда | Описание |
295
- | :--- | :--- |
296
- | **`/plan`** | Переключиться в режим архитектора (**PLAN**) |
297
- | **`/agent`** | Переключиться в режим исполнителя (**AGENT**) |
298
- | **`/mcp`** | Управление MCP-серверами и внешними инструментами (`/mcp reload`) |
299
- | **`/usage`** | Показать сетевой трафик (КБ/МБ), токены, число запросов и расходы ($) |
300
- | **`/export`** | Экспортировать сессию диалога в чистый GitHub Markdown файл |
301
- | **`/theme`** | Сменить цветовую тему (Cyan, Purple, Matrix, Amber, Crimson, Monochrome) |
302
- | **`/doctor`** | Запустить системную диагностику (Node, Termux, Компиляторы, Ключи) |
303
- | **`/image`** | Вставить картинку из буфера обмена как `[1.png 203kb]` |
304
- | **`/serve [порт]`** | Запустить локальный веб-сервер (`/serve stop` для остановки) |
305
- | **`/memory`** | Посмотреть, добавить (`/memory add <факт>`) или очистить банк памяти |
306
- | **`/undo`** | Откатить все изменения файлов за последний шаг AI |
307
- | **`/diff`** | Показать цветной git diff изменённых файлов |
308
- | **`/commit`** | Сгенерировать сообщение коммита с помощью AI и закоммитить в git |
309
- | **`/status`** | Показать текущий статус Git репозитория |
310
- | **`/session`** | Показать ID, статистику и файл активной сессии |
311
- | **`/resume`** | Выбрать и восстановить сохранённую сессию с историей |
312
- | **`/session del`** | Выборочно или полностью удалить сессии |
313
- | **`/settings`** | Настройки авто-подтверждения, памяти, темы и проверки обновлений |
314
- | **`/update`** | Проверить и установить последние обновления с GitHub |
315
- | **`/model`** | Сменить модель текущего провайдера с живым поиском |
316
- | **`/provider`** | Сменить AI-провайдера (OpenRouter, Gemini, Groq, DeepSeek, Local) |
317
- | **`/compact`** | Сжать контекст диалога для экономии токенов |
318
- | **`/clear`** | Очистить экран терминала, сохранив историю диалога |
319
- | **`/init`** | Создать файл инструкций `AGENTS.md` в корне проекта |
320
- | **`/help`** | Показать список всех доступных команд |
321
- | **`/exit`** | Завершить работу devx |
353
+ ```json
354
+ {
355
+ "hooks": {
356
+ "PreToolUse": [{ "matcher": "bash", "command": "./check-command.sh" }],
357
+ "PostToolUse": [{ "matcher": "write_file|edit_file", "command": "npx prettier --write ." }]
358
+ }
359
+ }
360
+ ```
322
361
 
323
- ---
362
+ `matcher` is a regular expression for the tool name (none or `*`: every tool). The command gets the call as JSON on stdin (`event`, `tool_name`, `tool_input`, and for `PostToolUse` `tool_result`) and `DEVX_HOOK_EVENT` / `DEVX_TOOL_NAME` in the environment. Exit code `2` of a `PreToolUse` hook stops the tool and tells the model what the command wrote to stderr; exit code `2` of a `PostToolUse` hook adds that text to the result. Hooks of a project (`.devx.json`) count only in a trusted workspace; a hook has 10 seconds.
363
+ - **Secrets in output.** Keys and tokens in the output of a tool (`sk-…`, `ghp_…`, `Bearer …`, `"apiKey": "…"`, private keys) are replaced with `[hidden secret]` before the model, the chat and the saved session see them.
364
+ - **Undo for everything.** With git, `/undo` puts the whole folder back to how it was before the last turn, including what shell commands did (files in `.gitignore` are not touched).
365
+ - **The approved plan** is saved in `.devx/plan.md` and given to the agent for 24 hours. **Project memory** longer than ~4000 characters is cut to the newest facts for the model.
366
+ - **MCP.** `/mcp add <name> <command> [args]` or `/mcp add <name> <https-url>` (a remote server over HTTP; put a token in `headers` as `"Bearer ${TOKEN}"`), `/mcp remove <name>`, `/mcp import` (from Claude Code).
367
+
368
+ ## Security Model
324
369
 
325
- ## ⌨️ Горячие клавиши
370
+ `devx` runs commands and edits files on your machine on behalf of an AI model, so it is conservative by default:
326
371
 
327
- - **`Tab`** — Мгновенное переключение между режимами **PLAN** и **AGENT** без потери набранного текста.
328
- - **`Ctrl+P`** / **`Ctrl+V`** — Вставка скриншота/картинки из буфера обмена.
329
- - **`@файл`** — Умное автодополнение файлов и прикрепление их содержимого к запросу.
330
- - **`Backspace`** — Атомарное удаление бейджей `[Pasted text #1]` и `[1.png 203kb]` за одно нажатие.
331
- - **`Ctrl+C`** — Мгновенная остановка генерации ответа или выход.
372
+ - **Workspace trust.** The first time you open a folder you are asked whether to trust it (default: no). In an untrusted folder, `provider`, `apiKey`, `baseUrl`, `autoApprove` and `bashAllowlist` from the project's `.devx.json` are **ignored**. A cloned repository cannot redirect your API key to its own server or switch on YOLO.
373
+ - **Project MCP servers need approval.** MCP servers declared by a project (`.mcp.json`, `.devx/mcp.json`, `.claude/mcp.json`, `.devx.json`) are programs that would run on your machine. You review the exact commands once; if they change, you are asked again. In headless mode (`-p`) unapproved project servers are skipped. Servers from `~/.devxrc.json` and `~/.devx/mcp.json` always start.
374
+ - **Confirmations.** In safe mode `bash`, `install_package`, MCP tools, the preview server and every read or write **outside the project folder** require confirmation.
375
+ - **YOLO (`--yolo`) is not a sandbox.** It skips routine confirmations, but still asks before dangerous shell commands (recursive deletes outside the project, `find -delete` on broad paths, `curl … | sh`, `sudo`, `git push --force`, …) and before touching credentials (`~/.ssh`, `~/.aws`, `~/.devxrc.json`, `.env`, private keys). The shell check analyses commands token by token, but a deliberately obfuscated command can still slip through, so use YOLO only in folders and environments you can afford to lose. In headless mode those confirmations cannot be shown, so the action is denied.
376
+ - **`fetch_url`** refuses localhost, private networks and cloud metadata addresses (also after redirects). Set `DEVX_ALLOW_PRIVATE_NETWORK=1` to allow local documentation servers.
377
+ - **`/serve`** listens on your local network (that is how the phone QR code works). It never serves dotfiles, keys, `node_modules`, or symlinks leaving the project, does not send permissive CORS headers and rejects requests addressed to a public host name.
378
+ - **Secrets at rest.** `~/.devxrc.json`, `~/.devx/` and saved sessions are created readable by you only (`0600` / `0700`). Session files contain the full conversation, including file contents the agent read.
379
+ - **Limits.** `bash` stops commands after 120 s by default (the model can pass `timeout_seconds`, max 1800) and closes stdin. Long output keeps its beginning and its end. `read_file` returns at most ~60 000 characters per call and supports `startLine` / `endLine`.
332
380
 
333
381
  ---
334
382
 
335
- ## ⭐️ Поддержите проект
383
+ ## Support the Project
336
384
 
337
- Если вам понравился **devx**, пожалуйста, поставьте ⭐️ звёздочку на [GitHub](https://github.com/apvcode/Termux-Dev) — это помогает проекту расти и мотивирует добавлять новые крутые возможности!
385
+ If you find **devx** useful, please consider giving it a star on [GitHub](https://github.com/apvcode/Termux-Dev) — it helps the project grow and motivates further development!
338
386
 
339
387
  ---
340
388
 
341
- ## 📄 License
389
+ ## License
342
390
 
343
391
  This project is licensed under the [MIT License](LICENSE).
344
392
 
@@ -346,6 +394,6 @@ This project is licensed under the [MIT License](LICENSE).
346
394
 
347
395
  <div align="center">
348
396
 
349
- Made with ❤️ by [ApvCode](https://github.com/ApvCode) for developers, vibe-coders, and Termux hackers.
397
+ Made by [ApvCode](https://github.com/ApvCode) for developers, vibe-coders, and Termux hackers.
350
398
 
351
399
  </div>
package/assets/banner.svg CHANGED
@@ -1,33 +1,28 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 180" width="100%" height="180">
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 280" width="100%" role="img" aria-label="DEVX: the terminal-native AI coding agent">
2
+ <title>DEVX - the terminal-native AI coding agent</title>
2
3
  <defs>
3
- <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" stop-color="#0a0a0c"/>
5
- <stop offset="100%" stop-color="#111116"/>
4
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
5
+ <stop offset="0" stop-color="#000000"/>
6
+ <stop offset="1" stop-color="#000000"/>
6
7
  </linearGradient>
7
- <linearGradient id="cyanGrad" x1="0%" y1="0%" x2="100%" y2="0%">
8
- <stop offset="0%" stop-color="#00f2fe"/>
9
- <stop offset="50%" stop-color="#4facfe"/>
10
- <stop offset="100%" stop-color="#00f2fe"/>
11
- </linearGradient>
12
- <filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
13
- <feGaussianBlur stdDeviation="5" result="blur" />
14
- <feComposite in="SourceGraphic" in2="blur" operator="over" />
15
- </filter>
8
+ <clipPath id="card"><rect x="1.5" y="1.5" width="997" height="277" rx="18"/></clipPath>
16
9
  </defs>
17
-
18
- <!-- Container Box -->
19
- <rect x="2" y="2" width="846" height="176" rx="12" fill="url(#bgGrad)" stroke="#22222c" stroke-width="1.5"/>
20
-
21
- <!-- Logo Text DEVX -->
22
- <g filter="url(#glow)">
23
- <text x="425" y="105" font-family="'Courier New', 'Consolas', 'Fira Code', monospace" font-size="78" font-weight="900" fill="url(#cyanGrad)" text-anchor="middle" letter-spacing="12">DEVX</text>
10
+ <style>
11
+ .cursor { animation: blink 1.1s steps(1) infinite; }
12
+ @keyframes blink { 0%,55% { opacity: 1 } 56%,100% { opacity: 0 } }
13
+ @media (prefers-reduced-motion: reduce) { .cursor { animation: none } }
14
+ </style>
15
+ <g clip-path="url(#card)">
16
+ <rect width="1000" height="280" fill="url(#bg)"/>
17
+ </g>
18
+ <rect x="1.5" y="1.5" width="997" height="277" rx="18" fill="none" stroke="#23252c" stroke-width="1.5"/>
19
+ <text x="500.0" y="70" text-anchor="middle" font-family="'Inter',system-ui,-apple-system,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif" font-size="13" font-weight="600" letter-spacing="5" fill="#7d8896">THE TERMINAL-NATIVE AI CODING AGENT<tspan dx="16" fill="#2fe3ee" font-weight="700">v1.8.0</tspan></text>
20
+ <g>
21
+ <text x="500.0" y="178" text-anchor="middle" font-family="'JetBrains Mono','Fira Code','SF Mono',ui-monospace,Menlo,Consolas,'DejaVu Sans Mono',monospace" font-size="112" font-weight="800" letter-spacing="14" fill="#2fe3ee">DEVX</text>
22
+ </g>
23
+ <g font-family="'JetBrains Mono','Fira Code','SF Mono',ui-monospace,Menlo,Consolas,'DejaVu Sans Mono',monospace" font-size="20">
24
+ <text x="338" y="238" fill="#2fe3ee" font-weight="700">❯</text>
25
+ <text x="364" y="238" fill="#c9d3df">npm install -g termux-dev</text>
24
26
  </g>
25
-
26
- <!-- Tagline & Badge -->
27
- <text x="425" y="142" font-family="system-ui, -apple-system, sans-serif" font-size="14" font-weight="600" fill="#8b949e" text-anchor="middle" letter-spacing="3">
28
- THE TERMINAL-NATIVE AI CODING AGENT <tspan fill="#00f2fe" font-weight="bold">v1.6.0</tspan>
29
- </text>
30
-
31
- <!-- Top Accent Line -->
32
- <rect x="325" y="12" width="200" height="2" rx="1" fill="url(#cyanGrad)" opacity="0.8"/>
27
+ <rect class="cursor" x="668" y="221" width="12" height="22" fill="#2fe3ee"/>
33
28
  </svg>
Binary file