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.
- package/README.md +214 -166
- package/assets/banner.svg +23 -28
- package/assets/preview.png +0 -0
- package/assets/preview.svg +92 -10
- package/dist/cli/banner.js +1 -1
- package/dist/cli/clipboard-write.js +55 -0
- package/dist/cli/clipboard.js +182 -106
- package/dist/cli/colors.js +67 -0
- package/dist/cli/confirm.js +50 -0
- package/dist/cli/doctor.js +4 -4
- package/dist/cli/effort.js +80 -0
- package/dist/cli/export.js +3 -3
- package/dist/cli/files.js +19 -5
- package/dist/cli/headless.js +23 -11
- package/dist/cli/index.js +1377 -480
- package/dist/cli/keys.js +69 -0
- package/dist/cli/liveblock.js +45 -0
- package/dist/cli/log.js +19 -0
- package/dist/cli/markdown.js +158 -36
- package/dist/cli/mcp-panel.js +432 -0
- package/dist/cli/permission.js +84 -0
- package/dist/cli/picker.js +135 -0
- package/dist/cli/prompt.js +256 -56
- package/dist/cli/resume.js +15 -0
- package/dist/cli/rewind.js +51 -0
- package/dist/cli/runtime_errors.js +6 -0
- package/dist/cli/server.js +85 -24
- package/dist/cli/settings.js +307 -0
- package/dist/cli/statusline.js +1 -1
- package/dist/cli/theme.js +126 -108
- package/dist/cli/transcript.js +114 -0
- package/dist/cli/typeahead.js +371 -0
- package/dist/cli/ui.js +1021 -0
- package/dist/cli/updater.js +23 -21
- package/dist/cli/usage-panel.js +242 -0
- package/dist/cli/width.js +178 -0
- package/dist/core/capabilities.js +433 -0
- package/dist/core/catalog-util.js +27 -0
- package/dist/core/checkpoint.js +90 -0
- package/dist/core/context-stats.js +29 -0
- package/dist/core/cost.js +191 -0
- package/dist/core/formats.js +199 -0
- package/dist/core/history.js +51 -1
- package/dist/core/hooks.js +79 -0
- package/dist/core/i18n.js +42 -0
- package/dist/core/local-config.js +69 -0
- package/dist/core/locales/de.js +210 -0
- package/dist/core/locales/en.js +221 -0
- package/dist/core/locales/es.js +210 -0
- package/dist/core/locales/fr.js +210 -0
- package/dist/core/locales/ja.js +210 -0
- package/dist/core/locales/pt.js +210 -0
- package/dist/core/locales/ru.js +210 -0
- package/dist/core/locales/uk.js +210 -0
- package/dist/core/locales/zh.js +210 -0
- package/dist/core/loop.js +125 -49
- package/dist/core/memory.js +39 -12
- package/dist/core/models.js +33 -20
- package/dist/core/network.js +12 -11
- package/dist/core/notify.js +54 -0
- package/dist/core/planfile.js +43 -0
- package/dist/core/price-catalog.json +1 -0
- package/dist/core/prices.js +249 -0
- package/dist/core/reasoning-catalog.json +1 -0
- package/dist/core/reasoning.js +393 -0
- package/dist/core/redact.js +41 -0
- package/dist/core/secure-file.js +22 -0
- package/dist/core/session.js +16 -5
- package/dist/core/snapshot.js +14 -2
- package/dist/core/title.js +61 -0
- package/dist/core/types.js +1 -1
- package/dist/core/usage.js +43 -7
- package/dist/core/vision-catalog.json +1 -0
- package/dist/core/vision.js +123 -0
- package/dist/mcp/client.js +36 -5
- package/dist/mcp/http-client.js +174 -0
- package/dist/mcp/manager.js +330 -93
- package/dist/permissions/guard.js +385 -117
- package/dist/prompts/builder.js +46 -38
- package/dist/providers/anthropic.js +517 -0
- package/dist/providers/index.js +18 -1
- package/dist/providers/openai.js +138 -125
- package/dist/providers/shared.js +116 -0
- package/dist/providers/toolguard.js +101 -0
- package/dist/tools/bash.js +141 -51
- package/dist/tools/diagnostics.js +76 -48
- package/dist/tools/fs.js +77 -5
- package/dist/tools/index.js +2 -1
- package/dist/tools/mcp.js +72 -0
- package/dist/tools/packages.js +16 -1
- package/dist/tools/plan.js +8 -8
- package/dist/tools/questions.js +50 -54
- package/dist/tools/server.js +6 -0
- package/dist/tools/todo.js +20 -18
- package/dist/tools/web.js +143 -8
- 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="
|
|
3
|
+
<img src="assets/banner.svg" alt="DEVX" width="880" />
|
|
4
4
|
|
|
5
|
-
<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
|
-
|
|
11
|
-
|
|
12
|
-
[](https://www.npmjs.com/package/termux-dev)
|
|
13
|
+
[](https://github.com/apvcode/Termux-Dev/actions/workflows/ci.yml)
|
|
14
|
+
[](LICENSE)
|
|
15
|
+
[](https://nodejs.org)
|
|
16
|
+
[](https://www.typescriptlang.org)
|
|
17
|
+
[](#quick-start)
|
|
16
18
|
|
|
17
19
|
<br/>
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
**English** • [Русский](README_ru.md) • [Українська](README_uk.md) • [Deutsch](README_de.md) • [Español](README_es.md) • [Français](README_fr.md) • [Português](README_pt.md) • [Chinese](README_zh.md) • [Japanese](README_ja.md)
|
|
20
22
|
|
|
21
23
|
<br/><br/>
|
|
22
24
|
|
|
23
|
-
<img src="assets/preview.svg" alt="devx
|
|
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
|
-
##
|
|
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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
38
|
-
Paste screenshots
|
|
39
|
-
-
|
|
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
|
-
-
|
|
42
|
-
Every
|
|
43
|
-
-
|
|
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
|
-
-
|
|
64
|
+
- **Project Memory Bank (`.devx/memory.md`):**
|
|
46
65
|
Persistent project context across sessions with `/memory add <rule>`.
|
|
47
|
-
-
|
|
48
|
-
Deep OLED black
|
|
49
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
##
|
|
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
|
-
###
|
|
87
|
+
### Fast Global Install (Recommended)
|
|
67
88
|
|
|
68
89
|
```bash
|
|
69
90
|
npm install -g termux-dev
|
|
70
91
|
```
|
|
71
92
|
|
|
72
|
-
###
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
-
##
|
|
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
|
-
##
|
|
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`** |
|
|
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
|
|
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 `
|
|
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,
|
|
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
|
|
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
|
-
##
|
|
193
|
+
## Keybindings
|
|
168
194
|
|
|
169
195
|
- **`Tab`** — Instantly toggle between **PLAN** and **AGENT** modes without losing your draft text.
|
|
170
|
-
- **`Ctrl+
|
|
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
|
-
##
|
|
206
|
+
## Reasoning effort
|
|
178
207
|
|
|
179
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
270
|
+
---
|
|
231
271
|
|
|
232
|
-
|
|
233
|
-
# 1. Обновляем пакеты и ставим NodeJS
|
|
234
|
-
pkg update && pkg install -y nodejs-lts
|
|
272
|
+
## Context window
|
|
235
273
|
|
|
236
|
-
|
|
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
|
-
|
|
240
|
-
|
|
276
|
+
```json
|
|
277
|
+
{ "contextLimits": { "my-model": 65536 } }
|
|
241
278
|
```
|
|
242
279
|
|
|
243
|
-
|
|
280
|
+
---
|
|
244
281
|
|
|
245
|
-
|
|
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
|
-
|
|
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
|
-
|
|
257
|
-
# 1. Удаляем глобальный npm-пакет
|
|
258
|
-
npm uninstall -g termux-dev
|
|
291
|
+
## Cost
|
|
259
292
|
|
|
260
|
-
|
|
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
|
-
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
-
|
|
328
|
-
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
- **`
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
|
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
|
|
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="
|
|
4
|
-
<stop offset="0
|
|
5
|
-
<stop offset="
|
|
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
|
-
<
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
<g
|
|
23
|
-
<
|
|
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>
|
package/assets/preview.png
CHANGED
|
Binary file
|