@router-ai/dsh-plugin-routerai 0.0.0-stage → 0.2.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/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +113 -2
- package/cordis.patch.yml +10 -0
- package/docs/DETAIL.md +21 -0
- package/docs/DETAIL.ru.md +21 -0
- package/icon.svg +1 -0
- package/lib/client.js +1565 -0
- package/lib/index.js +1721 -0
- package/locale/en.json +7 -0
- package/locale/ru.json +7 -0
- package/package.json +138 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# История изменений
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
- Агент рисует картинки: попросите его нарисовать иллюстрацию, логотип или схему — картинка появится в чате
|
|
6
|
+
и сохранится в папку `routerai-media` проекта. Модель выбирается в настройках, там же рисование можно выключить.
|
|
7
|
+
- Голосовой ввод: RouterAI работает как служба распознавания речи для плагина «Голосовой ввод» DeepSeek Harness.
|
|
8
|
+
Модель распознавания выбирается в настройках.
|
|
9
|
+
- Стоимость картинок входит в стоимость сессии — это точная сумма, которую сообщает RouterAI.
|
|
10
|
+
- Остаток в боковой панели обновляется быстрее после входа через команду `/routerai`.
|
|
11
|
+
|
|
12
|
+
## 0.1.0
|
|
13
|
+
|
|
14
|
+
Первый выпуск.
|
|
15
|
+
|
|
16
|
+
- Модели RouterAI в пикере DeepSeek Harness: у каждой видны цена в рублях за миллион токенов и размер контекста.
|
|
17
|
+
- Вход через браузер: routerai.ru выдаёт приложению ключ с лимитом расходов. Готовый ключ `sk-…` тоже можно вставить.
|
|
18
|
+
- Раздел «RouterAI» в настройках: баланс, лимит и расход ключа, выбор и порядок моделей, поиск по каталогу, готовые наборы.
|
|
19
|
+
- Остаток на счёте в боковой панели и стоимость текущей сессии под полем ввода.
|
|
20
|
+
- Команда `/routerai`: `login`, `key`, `logout`, `status`, `models`, `find`.
|
|
21
|
+
- Отказы из-за денег (пустой баланс, лимит ключа, отключённый ключ) объясняются по-человечески и со ссылкой.
|
|
22
|
+
- Названия сессий и сжатие контекста выполняет недорогая служебная модель — её можно сменить или отключить.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 RouterAI (https://routerai.ru)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,114 @@
|
|
|
1
|
-
#
|
|
1
|
+
# RouterAI для DeepSeek Harness
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[RouterAI](https://routerai.ru) — российский агрегатор языковых моделей: Claude, GPT, Gemini, DeepSeek, Qwen
|
|
4
|
+
и сотни других по одному ключу, с оплатой в рублях. Этот плагин подключает RouterAI к
|
|
5
|
+
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) как провайдера моделей.
|
|
6
|
+
|
|
7
|
+
## Установка
|
|
8
|
+
|
|
9
|
+
В приложении: **Плагины → Добавить плагин**, имя пакета `@router-ai/dsh-plugin-routerai`.
|
|
10
|
+
|
|
11
|
+
Из терминала:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
dsh plugin --profile desktop add @router-ai/dsh-plugin-routerai
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
После установки перезапустите приложение.
|
|
18
|
+
|
|
19
|
+
## Первые шаги
|
|
20
|
+
|
|
21
|
+
1. Откройте **Настройки → RouterAI** и нажмите **Войти через RouterAI**. В браузере откроется routerai.ru:
|
|
22
|
+
подтвердите доступ и при желании задайте лимит расходов. Ключ сохранится автоматически.
|
|
23
|
+
2. Отметьте в каталоге модели, которые хотите видеть в пикере, и нажмите **Применить**.
|
|
24
|
+
3. Выберите модель RouterAI в пикере под полем ввода.
|
|
25
|
+
|
|
26
|
+
Если ключ уже есть (его можно создать на [routerai.ru/settings/keys](https://routerai.ru/settings/keys)),
|
|
27
|
+
вставьте его в том же разделе настроек.
|
|
28
|
+
|
|
29
|
+
## Возможности
|
|
30
|
+
|
|
31
|
+
| | |
|
|
32
|
+
|---|---|
|
|
33
|
+
| Модели в пикере | цена в ₽ за миллион токенов и размер контекста прямо в списке |
|
|
34
|
+
| Настройки | баланс, лимит и расход ключа; выбор и порядок моделей; поиск по каталогу; готовые наборы |
|
|
35
|
+
| Боковая панель | остаток на счёте, предупреждение, когда деньги заканчиваются |
|
|
36
|
+
| Под полем ввода | стоимость текущей сессии, токены, доля входа из кэша |
|
|
37
|
+
| Отказы из-за денег | понятное сообщение и ссылка вместо кода ошибки |
|
|
38
|
+
| Служебная модель | названия сессий и сжатие контекста на недорогой модели |
|
|
39
|
+
| Картинки | агент рисует по просьбе: картинка в чате и файл в папке `routerai-media` проекта |
|
|
40
|
+
| Голосовой ввод | распознавание речи RouterAI для плагина «Голосовой ввод» |
|
|
41
|
+
|
|
42
|
+
Стоимость сессии — расчёт по числу токенов и ценам каталога; стоимость картинок RouterAI сообщает точно.
|
|
43
|
+
Итоговые списания показывает кабинет RouterAI.
|
|
44
|
+
|
|
45
|
+
### Картинки
|
|
46
|
+
|
|
47
|
+
Попросите агента: «нарисуй логотип для…», «сделай иллюстрацию к…». Модель для картинок выбирается в
|
|
48
|
+
**Настройки → RouterAI → Дополнительно**; там же рисование можно выключить, и тогда агент не будет тратить на него деньги.
|
|
49
|
+
Каждая картинка оплачивается отдельно, цена указана рядом с моделью.
|
|
50
|
+
|
|
51
|
+
### Голосовой ввод
|
|
52
|
+
|
|
53
|
+
Голосовой ввод в DeepSeek Harness — отдельный экспериментальный плагин. Включите его
|
|
54
|
+
(пакет `@deepseek-ai/dsh-experimental-voice-input-bundle`) и выберите службу распознавания **RouterAI**.
|
|
55
|
+
Модель распознавания задаётся в тех же настройках RouterAI.
|
|
56
|
+
|
|
57
|
+
## Команда `/routerai`
|
|
58
|
+
|
|
59
|
+
| Команда | Что делает |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `/routerai login` | вход через routerai.ru |
|
|
62
|
+
| `/routerai key sk-…` | сохранить готовый ключ |
|
|
63
|
+
| `/routerai logout` | удалить сохранённый ключ |
|
|
64
|
+
| `/routerai status` | баланс аккаунта и состояние ключа |
|
|
65
|
+
| `/routerai models` | модели, которые показывает пикер |
|
|
66
|
+
| `/routerai find <текст>` | поиск по каталогу RouterAI |
|
|
67
|
+
|
|
68
|
+
## Настройка без интерфейса
|
|
69
|
+
|
|
70
|
+
Ключ можно передать переменной окружения `ROUTERAI_API_KEY` или записать в `.env`.
|
|
71
|
+
Параметры плагина задаются в `~/.dsh/profiles/<профиль>/cordis.patch.yml`:
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
- id: llm-routerai
|
|
75
|
+
config:
|
|
76
|
+
models:
|
|
77
|
+
- anthropic/claude-sonnet-5.5
|
|
78
|
+
- deepseek/deepseek-v4.1-flash
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
| Параметр | По умолчанию | Назначение |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `models` | набор «На каждый день» | модели пикера по порядку; выбор в настройках приложения важнее |
|
|
84
|
+
| `apiKeyEnv` | `ROUTERAI_API_KEY` | имя, под которым хранится ключ |
|
|
85
|
+
| `baseURL` | `https://routerai.ru/api/v1` | адрес API |
|
|
86
|
+
| `catalogRefreshHours` | `4` | как часто обновлять каталог и цены |
|
|
87
|
+
|
|
88
|
+
Идентификаторы моделей — как в [каталоге RouterAI](https://routerai.ru/models): `производитель/модель`.
|
|
89
|
+
|
|
90
|
+
## Совместимость
|
|
91
|
+
|
|
92
|
+
DeepSeek Harness 0.2.x. Harness пока выходит в предварительных версиях, поэтому совместимость с каждой
|
|
93
|
+
новой сборкой проверяется автоматически раз в сутки.
|
|
94
|
+
|
|
95
|
+
## Разработка
|
|
96
|
+
|
|
97
|
+
Нужен Node.js 24.
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
npm ci
|
|
101
|
+
npm run typecheck
|
|
102
|
+
npm test
|
|
103
|
+
npm run build
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Выпуск версии: обновить `version` в `package.json`, добавить раздел в `CHANGELOG.md`, поставить тег
|
|
107
|
+
`vX.Y.Z`. Публикацию в npm и релиз на GitHub выполняет `.github/workflows/release.yml`.
|
|
108
|
+
|
|
109
|
+
## Поддержка и лицензия
|
|
110
|
+
|
|
111
|
+
Вопросы и ошибки — в [задачах репозитория](https://github.com/router-ai/dsh-plugin-routerai/issues)
|
|
112
|
+
или на [routerai.ru/support](https://routerai.ru/support).
|
|
113
|
+
|
|
114
|
+
Лицензия MIT.
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Что этот пакет добавляет в профиль DeepSeek Harness при установке:
|
|
2
|
+
# плагин llm-routerai — маршрут `routerai`, раздел настроек и команда /routerai.
|
|
3
|
+
#
|
|
4
|
+
# Изменить его параметры можно в ~/.dsh/profiles/<профиль>/cordis.patch.yml, например:
|
|
5
|
+
# - id: llm-routerai
|
|
6
|
+
# config:
|
|
7
|
+
# models: [anthropic/claude-sonnet-5.5, deepseek/deepseek-v4.1-flash]
|
|
8
|
+
- insert:
|
|
9
|
+
- id: llm-routerai
|
|
10
|
+
name: '@router-ai/dsh-plugin-routerai'
|
package/docs/DETAIL.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# RouterAI
|
|
2
|
+
|
|
3
|
+
[RouterAI](https://routerai.ru) puts models from many vendors — Anthropic, OpenAI, Google, DeepSeek, Qwen and
|
|
4
|
+
others — behind a single key and bills in rubles. This plugin adds those models to DeepSeek Harness.
|
|
5
|
+
|
|
6
|
+
## Getting started
|
|
7
|
+
|
|
8
|
+
1. Open **Settings → RouterAI** and press **Sign in with RouterAI**. Approve access on routerai.ru and the key
|
|
9
|
+
is saved for you. You can also paste an existing key there.
|
|
10
|
+
2. Tick the models you want in the catalog and press **Apply**.
|
|
11
|
+
3. Pick a RouterAI model in the model picker.
|
|
12
|
+
|
|
13
|
+
## What you get
|
|
14
|
+
|
|
15
|
+
- Price per million tokens and context size right in the model list.
|
|
16
|
+
- Balance in the sidebar and the session cost under the composer.
|
|
17
|
+
- Clear messages when the balance runs out or the key hits its spending limit.
|
|
18
|
+
- Savings: session titles and context compaction run on an inexpensive utility model.
|
|
19
|
+
- Images: ask the agent to draw — the result appears in the chat and in the project's `routerai-media` folder.
|
|
20
|
+
- Voice input: RouterAI recognizes speech for the Voice input plugin.
|
|
21
|
+
- The `/routerai` command for the same actions from the chat: `login`, `key`, `logout`, `status`, `models`, `find`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# RouterAI
|
|
2
|
+
|
|
3
|
+
[RouterAI](https://routerai.ru) собирает модели разных производителей — Anthropic, OpenAI, Google, DeepSeek,
|
|
4
|
+
Qwen и многих других — за одним ключом и принимает оплату в рублях. Плагин добавляет эти модели в DeepSeek Harness.
|
|
5
|
+
|
|
6
|
+
## Как начать
|
|
7
|
+
|
|
8
|
+
1. Откройте **Настройки → RouterAI** и нажмите **Войти через RouterAI**. Подтвердите доступ на routerai.ru —
|
|
9
|
+
ключ сохранится сам. Готовый ключ можно вставить там же.
|
|
10
|
+
2. Отметьте нужные модели в каталоге и нажмите **Применить**.
|
|
11
|
+
3. Выберите модель RouterAI в пикере.
|
|
12
|
+
|
|
13
|
+
## Что вы получаете
|
|
14
|
+
|
|
15
|
+
- Цена за миллион токенов и размер контекста — прямо в списке моделей.
|
|
16
|
+
- Баланс в боковой панели и стоимость сессии под полем ввода.
|
|
17
|
+
- Понятные сообщения, если закончились деньги или ключ упёрся в лимит.
|
|
18
|
+
- Экономия: названия сессий и сжатие контекста делает недорогая служебная модель.
|
|
19
|
+
- Картинки: попросите агента нарисовать — результат появится в чате и в папке `routerai-media` проекта.
|
|
20
|
+
- Голосовой ввод: RouterAI распознаёт речь для плагина «Голосовой ввод».
|
|
21
|
+
- Команда `/routerai` для тех же действий из чата: `login`, `key`, `logout`, `status`, `models`, `find`.
|
package/icon.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="#2d67f6" d="M8.22 21.06a4.09 4.09 0 0 0 7.55 0 4.1 4.1 0 0 0 5.34-5.32 4.08 4.08 0 0 0 0-7.53 4.07 4.07 0 0 0-5.34-5.33 4.09 4.09 0 0 0-7.55 0A4.1 4.1 0 0 0 2.9 8.21a4.08 4.08 0 0 0 0 7.53 4.07 4.07 0 0 0 5.33 5.32"/><path fill="#fff" d="M23.25 11.97a3.7 3.7 0 0 0-2.28-3.42l-.35-.14.14-.35a3.7 3.7 0 0 0-4.84-4.83l-.35.14-.14-.34A3.7 3.7 0 0 0 12.29.76L12 .75c-1.54 0-2.87.94-3.43 2.28l-.14.34-.35-.14a3.72 3.72 0 0 0-4.85 4.83l.15.35-.35.14a3.7 3.7 0 0 0-2.28 3.42v.29a3.7 3.7 0 0 0 2.28 3.13l.35.14-.15.35a3.7 3.7 0 0 0 4.85 4.83l.35-.14.14.35a3.71 3.71 0 0 0 6.86 0l.14-.35.35.14a3.72 3.72 0 0 0 4.85-4.83l-.15-.35.35-.14a3.7 3.7 0 0 0 2.28-3.42M12 1.97c1.03 0 1.91.63 2.29 1.53l.61 1.48 1.49-.61a2.48 2.48 0 0 1 3.23 3.23l-.6 1.47 1.47.62c.9.37 1.53 1.26 1.53 2.28v.09a2.5 2.5 0 0 1-1.53 2.2l-1.48.6.61 1.49a2.47 2.47 0 0 1-3.23 3.23l-1.49-.61-.61 1.47a2.48 2.48 0 0 1-4.58 0l-.61-1.47-1.49.6a2.48 2.48 0 0 1-3.23-3.22l.6-1.48-1.47-.62a2.5 2.5 0 0 1-1.53-2.28v-.09c.04-.99.66-1.83 1.53-2.2l1.48-.6-.61-1.48A2.47 2.47 0 0 1 7.6 4.37l1.49.6.61-1.47A2.5 2.5 0 0 1 12 1.98m0 15.8q-.36 0-.66.13l-1.6.66.66 1.6a1.73 1.73 0 0 0 3.2 0l.67-1.6-1.61-.66q-.3-.13-.66-.13m-6.93-1.14a1.72 1.72 0 0 0 2.26 2.25l1.6-.65-.66-1.6a1.7 1.7 0 0 0-.93-.93l-1.61-.67zm11.6-.93a1.7 1.7 0 0 0-.94.93l-.66 1.6 1.6.65a1.74 1.74 0 0 0 2.26-2.25l-.66-1.6zM6.18 11.97q0-.36-.13-.66l-.66-1.6-1.6.67c-.61.25-1.04.84-1.07 1.52v.08c0 .7.44 1.32 1.07 1.58l1.6.67.66-1.6q.13-.3.13-.66m8.89 0q0-.71.21-1.36a4.5 4.5 0 0 1-1.93-1.92 4.5 4.5 0 0 1-2.72 0A4.4 4.4 0 0 1 8.7 10.6a4.4 4.4 0 0 1 0 2.72 4.5 4.5 0 0 1 1.93 1.92 4.5 4.5 0 0 1 2.72 0 4.4 4.4 0 0 1 1.93-1.92 4 4 0 0 1-.21-1.36M7.33 5.06A1.74 1.74 0 0 0 5.07 7.3l.66 1.6 1.6-.66a1.7 1.7 0 0 0 .94-.93l.66-1.6zm11.22.37c-.5-.5-1.25-.63-1.88-.37l-1.6.66.66 1.6a1.7 1.7 0 0 0 .93.93l1.61.66.66-1.6c.26-.63.13-1.37-.38-1.88M12 2.73c-.72 0-1.34.43-1.6 1.06l-.67 1.6 1.61.66a1.7 1.7 0 0 0 1.32 0l1.6-.67-.66-1.6A1.7 1.7 0 0 0 12 2.74m-5.06 9.24q0 .5-.19.94l-.61 1.48 1.48.62a2.5 2.5 0 0 1 1.34 1.33l.61 1.48 1.49-.61a2.5 2.5 0 0 1 1.88 0l1.49.6.61-1.47A2.5 2.5 0 0 1 16.38 15l1.48-.62-.61-1.48a2.5 2.5 0 0 1 0-1.88l.6-1.48-1.47-.61a2.5 2.5 0 0 1-1.34-1.34l-.61-1.47-1.49.6a2.5 2.5 0 0 1-1.88 0l-1.49-.6-.61 1.47a2.5 2.5 0 0 1-1.34 1.34l-1.48.61.61 1.48q.19.43.19.94m8.89 0q0 .76.27 1.41l.15.35-.35.14a3.7 3.7 0 0 0-2 2l-.14.34-.35-.14a3.7 3.7 0 0 0-2.82 0l-.35.14-.14-.34a3.7 3.7 0 0 0-2-2l-.35-.14.15-.35a3.7 3.7 0 0 0 0-2.82l-.15-.34.35-.15a3.7 3.7 0 0 0 2-2l.14-.34.35.15a3.7 3.7 0 0 0 2.82 0l.35-.15.14.35a3.7 3.7 0 0 0 2 2l.35.14-.15.34q-.26.65-.27 1.41m1.98 0q0 .36.13.66l.66 1.6 1.6-.67a1.7 1.7 0 0 0 1.07-1.52v-.2a1.7 1.7 0 0 0-1.07-1.46l-1.6-.67-.66 1.6q-.12.3-.13.66m6.19 0c0 1.73-.98 3.22-2.42 3.96a4.44 4.44 0 0 1-5.61 5.6 4.46 4.46 0 0 1-7.94 0 4.47 4.47 0 0 1-5.6-5.6A4.5 4.5 0 0 1 0 12.14v-.17c0-1.72.98-3.22 2.42-3.96a4.44 4.44 0 0 1 5.61-5.6A4.5 4.5 0 0 1 12 0h.17a4.5 4.5 0 0 1 3.8 2.41 4.47 4.47 0 0 1 5.6 5.6A4.5 4.5 0 0 1 24 11.97"/><path fill="#fff" d="M10.44 8.22a4 4 0 0 0 3.12 0 4 4 0 0 0 2.2 2.2 4 4 0 0 0 0 3.1 4 4 0 0 0-2.2 2.2 4 4 0 0 0-3.12 0 4 4 0 0 0-2.2-2.2 4 4 0 0 0 0-3.1 4 4 0 0 0 2.2-2.2"/></svg>
|