@goodandready/dsh-ollama-cloud-provider 0.1.2 → 0.1.3
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 +57 -52
- package/NOTICE +15 -15
- package/README.md +26 -7
- package/README.ru.md +156 -67
- package/README.zh.md +133 -77
- package/cordis.patch.yml +11 -11
- package/package.json +121 -121
package/CHANGELOG.md
CHANGED
|
@@ -1,52 +1,57 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## 0.1.
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.3 — 2026-10-21
|
|
4
|
+
|
|
5
|
+
- Aligned README documentation trio with dsh-documentation-standard: added standardized Hero headers, goodandready.app hub badges, support tables, and Mermaid architecture diagrams across English, Russian, and Chinese documentations.
|
|
6
|
+
- Updated installation instructions and package version parity.
|
|
7
|
+
|
|
8
|
+
## 0.1.2 — 2026-10-21
|
|
9
|
+
|
|
10
|
+
- Test connection falls back to the reasoning text when a thinking model returns
|
|
11
|
+
no content, and uses a 64-token budget (#17).
|
|
12
|
+
- Production acceptance of 0.1.1 confirmed chat, catalog and balance; the probe
|
|
13
|
+
is the only follow-up defect.
|
|
14
|
+
|
|
15
|
+
## 0.1.1 — 2026-10-21
|
|
16
|
+
|
|
17
|
+
Audit fixes (Gitea #1–#15):
|
|
18
|
+
|
|
19
|
+
- A transient transport/timeout/server failure no longer cools down the only
|
|
20
|
+
configured account; the harness retry policy can recover. Credential and quota
|
|
21
|
+
rejections still cool the key (#1).
|
|
22
|
+
- Removed the unimplemented `toolUpdate: 'addition-only'` declaration so the
|
|
23
|
+
model always receives the full tool list (#2).
|
|
24
|
+
- `/dsh-ollama/key` and `/key/clear` only accept this plugin's credential
|
|
25
|
+
references (`apiKeyEnv`, configured account refs and `OLLAMA_*`) (#3).
|
|
26
|
+
- The sidebar quota card honors `showSidebarQuota`, stays unmounted while the
|
|
27
|
+
setting is off and stops polling `/state` (#4).
|
|
28
|
+
- The injected stylesheet carries `data-dsh-plugin` so neighbouring plugin
|
|
29
|
+
cleanup cannot strip it (#5).
|
|
30
|
+
- Analytics uses the shared `estimateCost` implementation and applies
|
|
31
|
+
`priceOverrides` (#7).
|
|
32
|
+
- Empty catch blocks report through `bestEffortFailed` at debug level (#8).
|
|
33
|
+
- Removed unused modules and exports (`quota-runway`, `requireImages`,
|
|
34
|
+
`clearAnalyticsCache`, `PLUGIN_PROVIDERS`, `showUrlFor`) (#9).
|
|
35
|
+
- Heatmap and theme values no longer hardcode colors (#10).
|
|
36
|
+
- Test-connection requests disable thinking and use a 32-token budget (#11).
|
|
37
|
+
- The request log is flushed on shutdown (#12).
|
|
38
|
+
- Architecture documentation moved to `docs/design/ARCHITECTURE.md`; the
|
|
39
|
+
design contract lives in `docs/design/DESIGN.md` (#13).
|
|
40
|
+
- Added wiring, analytics, route-guard and adapter regression tests (#14).
|
|
41
|
+
- Account rows show the 7-day spend without a meaningless percentage (#15).
|
|
42
|
+
|
|
43
|
+
## 0.1.0
|
|
44
|
+
|
|
45
|
+
Initial release.
|
|
46
|
+
|
|
47
|
+
- Registers the `ollama-cloud` provider route for DeepSeek Harness.
|
|
48
|
+
- Native `/api/chat` transport (NDJSON) with thinking, tool calls, images and usage counters.
|
|
49
|
+
- OpenAI-compatible `/v1/chat/completions` transport selectable per model.
|
|
50
|
+
- Live model catalog from `/v1/models` enriched with `/api/tags` capabilities, plus an offline snapshot.
|
|
51
|
+
- Balance from `/api/balance` (credits and legacy percentage windows) and spend from `/api/usage`
|
|
52
|
+
with 24-hour, 7-day and 30-day windows and per-model groups.
|
|
53
|
+
- Multi-account rotation before the first streamed token, persistent cooldowns, sticky sessions and
|
|
54
|
+
model → account glob rules.
|
|
55
|
+
- Price estimates including off-peak rates and per-model overrides.
|
|
56
|
+
- Settings page, sidebar quota card, quota/analytics panel with a request heatmap, `/ollama` command,
|
|
57
|
+
TUI settings section and one-click plugin update.
|
package/NOTICE
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
dsh-ollama-cloud-provider
|
|
2
|
-
Copyright (c) 2026 GooDAnDReaDY
|
|
3
|
-
|
|
4
|
-
This product is MIT-licensed (see LICENSE).
|
|
5
|
-
|
|
6
|
-
Third-party references and attribution:
|
|
7
|
-
|
|
8
|
-
- The plugin structure, cordis lifecycle wiring, HTTP route guards, request log, analytics reader,
|
|
9
|
-
quota runway and generic client widgets were adapted from the author's own
|
|
10
|
-
`@goodandready/dsh-opencode-provider` (MIT).
|
|
11
|
-
- The feature set was informed by `@goodandready/dsh-clinebot` (MIT) and
|
|
12
|
-
`@mars-sea/dsh-commandcode-provider` (MIT). No vendor code from those packages is bundled.
|
|
13
|
-
- DeepSeek Harness packages (`@deepseek-ai/*`) are host-owned peer dependencies and are not bundled.
|
|
14
|
-
- Ollama Cloud API facts were verified against the public documentation and live endpoints on
|
|
15
|
-
2026-10-21. Ollama is a trademark of its respective owner; this plugin is unofficial.
|
|
1
|
+
dsh-ollama-cloud-provider
|
|
2
|
+
Copyright (c) 2026 GooDAnDReaDY
|
|
3
|
+
|
|
4
|
+
This product is MIT-licensed (see LICENSE).
|
|
5
|
+
|
|
6
|
+
Third-party references and attribution:
|
|
7
|
+
|
|
8
|
+
- The plugin structure, cordis lifecycle wiring, HTTP route guards, request log, analytics reader,
|
|
9
|
+
quota runway and generic client widgets were adapted from the author's own
|
|
10
|
+
`@goodandready/dsh-opencode-provider` (MIT).
|
|
11
|
+
- The feature set was informed by `@goodandready/dsh-clinebot` (MIT) and
|
|
12
|
+
`@mars-sea/dsh-commandcode-provider` (MIT). No vendor code from those packages is bundled.
|
|
13
|
+
- DeepSeek Harness packages (`@deepseek-ai/*`) are host-owned peer dependencies and are not bundled.
|
|
14
|
+
- Ollama Cloud API facts were verified against the public documentation and live endpoints on
|
|
15
|
+
2026-10-21. Ollama is a trademark of its respective owner; this plugin is unofficial.
|
package/README.md
CHANGED
|
@@ -5,11 +5,23 @@
|
|
|
5
5
|
<h3>Ollama Cloud LLM Provider for DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
7
|
<p>
|
|
8
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="GoodAndReady Showcase"></a>
|
|
8
9
|
<a href="https://www.npmjs.com/package/@goodandready/dsh-ollama-cloud-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-ollama-cloud-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm version"></a>
|
|
10
|
+
<a href="https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="License"></a>
|
|
9
11
|
</p>
|
|
10
12
|
|
|
11
13
|
</div>
|
|
12
14
|
|
|
15
|
+
<table align="center">
|
|
16
|
+
<tr>
|
|
17
|
+
<td align="center">
|
|
18
|
+
⭐ <strong>If you like this plugin, please star it on GitHub</strong> — it shows me that the plugin is useful to you and motivates me to keep developing it.
|
|
19
|
+
<br><br>
|
|
20
|
+
🐛 <strong>If you find a bug or would like to request a feature</strong>, open a GitHub issue in any language — I will review your proposal and implement useful suggestions in a future plugin version.
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
</table>
|
|
24
|
+
|
|
13
25
|
---
|
|
14
26
|
|
|
15
27
|
Ollama Cloud provider plugin for [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/) (dsh).
|
|
@@ -88,12 +100,20 @@ npm run build
|
|
|
88
100
|
npm pack
|
|
89
101
|
```
|
|
90
102
|
|
|
91
|
-
Install the
|
|
103
|
+
Install the published package:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
dsh plugin --profile web add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
107
|
+
# DSH Desktop:
|
|
108
|
+
dsh plugin --profile desktop add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Or install the packed tarball into a profile:
|
|
92
112
|
|
|
93
113
|
```bash
|
|
94
|
-
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.
|
|
114
|
+
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
95
115
|
# DSH Desktop:
|
|
96
|
-
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.
|
|
116
|
+
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
97
117
|
```
|
|
98
118
|
|
|
99
119
|
Restart dsh (or DSH Desktop), then pick **Ollama Cloud** in the model picker.
|
|
@@ -114,7 +134,7 @@ Restart dsh (or DSH Desktop), then pick **Ollama Cloud** in the model picker.
|
|
|
114
134
|
streamIdleTimeoutMs: 300000
|
|
115
135
|
visibleModels: []
|
|
116
136
|
modelTransports: {}
|
|
117
|
-
# contextWindowOverrides: { "
|
|
137
|
+
# contextWindowOverrides: { "model-id": 131072 }
|
|
118
138
|
# maxOutputTokens: 32768
|
|
119
139
|
accounts:
|
|
120
140
|
- label: Work
|
|
@@ -184,7 +204,7 @@ The Host serves `/dsh-ollama/state`, `/health`, `/analytics`, `/usage`, `/balanc
|
|
|
184
204
|
/ollama accounts # labels, source, active/cooling, 7-day spend
|
|
185
205
|
/ollama models # ids, price, context, capabilities
|
|
186
206
|
/ollama rules # model → account rules
|
|
187
|
-
/ollama test [model] # minimal real request
|
|
207
|
+
/ollama test [model] # minimal real request
|
|
188
208
|
```
|
|
189
209
|
|
|
190
210
|
## Verified API facts
|
|
@@ -213,8 +233,7 @@ node scripts/probe.mjs
|
|
|
213
233
|
|
|
214
234
|
## Visual verification
|
|
215
235
|
|
|
216
|
-
The Ollama Cloud settings page in DSH Desktop (dark theme): configured
|
|
217
|
-
credential, balance and usage, and the connection probe.
|
|
236
|
+
The Ollama Cloud settings page in DSH Desktop (dark theme): configured credential, balance and usage, and the connection probe.
|
|
218
237
|
|
|
219
238
|

|
|
220
239
|
|
package/README.ru.md
CHANGED
|
@@ -1,76 +1,161 @@
|
|
|
1
1
|
# 📦 @goodandready/dsh-ollama-cloud-provider
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<div align="center">
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<h3>Плагин-провайдер Ollama Cloud для DeepSeek Harness</h3>
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
<p>
|
|
8
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="Витрина GoodAndReady"></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-ollama-cloud-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-ollama-cloud-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm версия"></a>
|
|
10
|
+
<a href="https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="Лицензия"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<table align="center">
|
|
16
|
+
<tr>
|
|
17
|
+
<td align="center">
|
|
18
|
+
⭐ <strong>Если вам нравится этот плагин, поставьте ему Star на GitHub</strong> — это покажет мне, что плагин полезен, и добавит мотивации продолжать его развитие.
|
|
19
|
+
<br><br>
|
|
20
|
+
🐛 <strong>Если вы нашли баг или хотите предложить новую функцию</strong>, создайте Issue на GitHub на любом языке — я рассмотрю предложение и реализую полезные улучшения в одной из следующих версий плагина.
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
</table>
|
|
24
|
+
|
|
25
|
+
---
|
|
11
26
|
|
|
12
|
-
|
|
27
|
+
Плагин-провайдер **Ollama Cloud** для [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/) (dsh).
|
|
13
28
|
|
|
14
|
-
|
|
29
|
+
Плагин регистрирует один нативный LLM-маршрут `ollama-cloud` (`https://ollama.com`) и поддерживает два протокола передачи данных:
|
|
30
|
+
|
|
31
|
+
| Транспорт | Эндпоинт | Назначение |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `native` (по умолчанию) | `POST /api/chat` | thinking, вызовы инструментов (tool calls), счётчики usage (NDJSON) |
|
|
34
|
+
| `openai-chat` | `POST /v1/chat/completions` | Совместимость с OpenAI API и резервный транспорт (SSE) |
|
|
35
|
+
|
|
36
|
+
Ключи разрешаются динамически на каждый вызов: смена credential применяется мгновенно без перезапуска сервера.
|
|
37
|
+
|
|
38
|
+
## Архитектура
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph LR
|
|
42
|
+
subgraph DSH["Ядро DeepSeek Harness"]
|
|
43
|
+
Agent["DSH Агент / Чат"]
|
|
44
|
+
Creds["Сервис учетных данных / окружение"]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
subgraph Plugin["dsh-ollama-cloud-provider"]
|
|
48
|
+
Router{"Маршрут: ollama-cloud"}
|
|
49
|
+
Pool["Пул аккаунтов<br/>ротация, cooldown, sticky"]
|
|
50
|
+
Catalog["Живой каталог<br/>/v1/models + /api/tags"]
|
|
51
|
+
Usage["Баланс и расход<br/>/api/balance + /api/usage"]
|
|
52
|
+
|
|
53
|
+
subgraph Transports["Протоколы передачи"]
|
|
54
|
+
T1["Native /api/chat (NDJSON)"]
|
|
55
|
+
T2["OpenAI /v1/chat/completions (SSE)"]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
subgraph Ollama["Ollama Cloud"]
|
|
60
|
+
Chat["ollama.com/api/chat"]
|
|
61
|
+
OpenAI["ollama.com/v1/chat/completions"]
|
|
62
|
+
Billing["/api/balance, /api/usage"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Agent --> Router
|
|
66
|
+
Creds -.-> Pool
|
|
67
|
+
Router --> Pool
|
|
68
|
+
Pool --> Transports
|
|
69
|
+
T1 --> Chat
|
|
70
|
+
T2 --> OpenAI
|
|
71
|
+
Catalog --> Router
|
|
72
|
+
Usage --> Billing
|
|
73
|
+
```
|
|
15
74
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
75
|
+
## Полный обзор возможностей
|
|
76
|
+
|
|
77
|
+
- **Два транспорта**, выбираемые индивидуально для каждой модели: нативный протокол Ollama API (NDJSON) и совместимый шлюз OpenAI (SSE).
|
|
78
|
+
- **Поддержка всех режимов**: текст, reasoning/thinking, вызовы функций/инструментов, изображения (vision), подсчёт токенов и finish reasons на обоих транспортах.
|
|
79
|
+
- **Живой каталог моделей**: автоматическое чтение `GET /v1/models`, дополненное флагами возможностей `capabilities` (`tools`, `thinking`, `vision`) из `GET /api/tags`.
|
|
80
|
+
- **Точные лимиты и метаданные**: контекстное окно, входные модальности, уровни reasoning и значение по умолчанию, статус поддержки инструментов и видимость в API.
|
|
81
|
+
- **Баланс и аналитика расхода**: интеграция с официальными облачными эндпоинтами `/api/balance` и `/api/usage` — включённые и купленные кредиты, расход за 24 часа / 7 дней / 30 дней, а также группировка по моделям.
|
|
82
|
+
- **Пул аккаунтов с авто-ротацией до первого токена**: при получении 401, 403, 429 или ответа об исчерпании квоты ключ переводится в cooldown, а запрос автоматически перенаправляется на следующий доступный аккаунт. Состояния cooldown сохраняются между перезапусками по SHA-256 fingerprint.
|
|
83
|
+
- **Sticky sessions**: закрепление одного аккаунта за конкретным диалогом, плюс гибкие правила `модель ➔ аккаунт` по glob-паттернам.
|
|
84
|
+
- **Оценка стоимости**: тарификация по официальному прайс-листу Ollama Cloud, включая ночные скидки (off-peak rates) и возможность ручного переопределения цен на модель.
|
|
85
|
+
- **Интерфейс в браузере (Web UI)**:
|
|
86
|
+
- **Настройки → Ollama Cloud**: управление ключами, отображение баланса, пул аккаунтов, правила маршрутизации, allowlist моделей, выбор транспорта.
|
|
87
|
+
- **Карточка квоты в сайдбаре**: кольцевой индикатор с наиболее загруженным окном и детализацией остатка кредитов (по умолчанию выключена и не нагружает сеть фоновыми опросами).
|
|
88
|
+
- **Центральная панель квот**: окна расходов, разбивка по моделям, трейс маршрутизации, аналитика токенов и интерактивный heatmap запросов.
|
|
89
|
+
- **Команда `/ollama`**: статус провайдера, квоты, баланс, список аккаунтов, моделей, правил и запуск тестового запроса `test [model]`.
|
|
90
|
+
- **Интеграция с терминалом (TUI)**: специальная секция настроек в терминальном режиме.
|
|
91
|
+
- **One-Click обновление плагина**: прямая проверка npm registry и кнопка обновления в Web UI.
|
|
26
92
|
|
|
27
93
|
## Установка
|
|
28
94
|
|
|
95
|
+
Сборка и упаковка из исходного кода:
|
|
96
|
+
|
|
29
97
|
```bash
|
|
30
98
|
npm install
|
|
31
99
|
npm run build
|
|
32
100
|
npm pack
|
|
33
|
-
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Установка опубликованного пакета из npm:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
dsh plugin --profile web add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
107
|
+
# DSH Desktop:
|
|
108
|
+
dsh plugin --profile desktop add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Либо установка из упакованного tarball:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
34
115
|
# DSH Desktop:
|
|
35
|
-
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.
|
|
116
|
+
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
36
117
|
```
|
|
37
118
|
|
|
38
|
-
После установки перезапустите dsh и выберите **Ollama Cloud** в списке моделей.
|
|
119
|
+
После установки перезапустите dsh (или DSH Desktop) и выберите **Ollama Cloud** в списке моделей.
|
|
39
120
|
|
|
40
|
-
##
|
|
121
|
+
## Конфигурация
|
|
41
122
|
|
|
42
123
|
```yaml
|
|
43
124
|
- id: llm-ollama-cloud
|
|
44
125
|
name: "@goodandready/dsh-ollama-cloud-provider"
|
|
45
126
|
config:
|
|
46
|
-
apiKeyEnv: OLLAMA_API_KEY
|
|
47
|
-
|
|
127
|
+
apiKeyEnv: OLLAMA_API_KEY # имя переменной или credential
|
|
128
|
+
# apiKey: ... # только в composition, не коммитить в git
|
|
129
|
+
transport: native # native | openai-chat
|
|
48
130
|
requestTimeoutMs: 300000
|
|
49
131
|
streamIdleTimeoutMs: 300000
|
|
50
132
|
visibleModels: []
|
|
133
|
+
modelTransports: {}
|
|
51
134
|
accounts:
|
|
52
135
|
- label: Work
|
|
53
136
|
apiKeyEnv: OLLAMA_API_KEY_2
|
|
54
|
-
activeAccount: ''
|
|
137
|
+
activeAccount: '' # метка для принудительного закрепления
|
|
55
138
|
stickySession: true
|
|
56
139
|
showSidebarQuota: false
|
|
57
140
|
```
|
|
58
141
|
|
|
59
|
-
Все поля, кроме `apiKey`, доступны в
|
|
142
|
+
Все поля, кроме `apiKey`, доступны для изменения в интерфейсе настроек DSH.
|
|
60
143
|
|
|
61
|
-
###
|
|
144
|
+
### Получение и хранение ключей
|
|
62
145
|
|
|
63
|
-
1. `config.apiKey`
|
|
64
|
-
2.
|
|
65
|
-
3. Переменные окружения
|
|
146
|
+
1. `config.apiKey` в файле конфигурации (`role('secret')`).
|
|
147
|
+
2. Системный сервис учетных данных DSH по имени `apiKeyEnv` (по умолчанию `OLLAMA_API_KEY`).
|
|
148
|
+
3. Переменные окружения процесса, `.env` проекта или `$DSH_HOME/.env`.
|
|
66
149
|
|
|
67
|
-
Ключ
|
|
150
|
+
Ключ создается в личном кабинете: <https://ollama.com/settings/keys>. Ключи бессрочные; облачный API принимает только заголовок `Authorization: Bearer`.
|
|
68
151
|
|
|
69
|
-
###
|
|
152
|
+
### Пул аккаунтов и ротация
|
|
70
153
|
|
|
71
|
-
Дополнительный аккаунт добавляется в **Настройки → Ollama Cloud → Аккаунты**: имя
|
|
154
|
+
Дополнительный аккаунт добавляется в **Настройки → Ollama Cloud → Аккаунты**: укажите имя метки и credential reference (например, `OLLAMA_API_KEY_2`), вставьте токен и сохраните. Ротация происходит **строго до начала генерации потока**: отклонённый ключ получает cooldown, а запрос повторяется со следующим готовым аккаунтом.
|
|
72
155
|
|
|
73
|
-
|
|
156
|
+
Состояния cooldown сохраняются в `~/.dsh/storages/dsh-ollama/cooldowns.json` по SHA-256 хешу ключа.
|
|
157
|
+
|
|
158
|
+
### Правила привязки «модель ➔ аккаунт»
|
|
74
159
|
|
|
75
160
|
```yaml
|
|
76
161
|
modelAccountRules:
|
|
@@ -78,53 +163,57 @@ modelAccountRules:
|
|
|
78
163
|
account: "Work"
|
|
79
164
|
```
|
|
80
165
|
|
|
81
|
-
Первый совпавший glob
|
|
166
|
+
Первый совпавший glob-паттерн направляет модель на указанный аккаунт, остальные аккаунты остаются в резерве.
|
|
82
167
|
|
|
83
|
-
## Баланс и
|
|
168
|
+
## Баланс и мониторинг расхода
|
|
84
169
|
|
|
85
|
-
- `GET /api/balance` — новый формат (`included.balance_usd`, `allowance_usd`, `period`, `purchased.balance_usd`) и legacy-формат (`session` / `weekly` с `remaining_percent`).
|
|
86
|
-
- `GET /api/usage?range=24h|7d|30d&group_by=model` —
|
|
170
|
+
- `GET /api/balance` — поддерживает новый формат (`included.balance_usd`, `allowance_usd`, `period`, `purchased.balance_usd`) и legacy-формат (`session` / `weekly` с `remaining_percent`).
|
|
171
|
+
- `GET /api/usage?range=24h|7d|30d&group_by=model` — суммарные показатели и разбивка по моделям.
|
|
87
172
|
|
|
88
|
-
|
|
173
|
+
Эндпоинт `/api/usage` ограничен лимитом в **10 запросов в минуту**, поэтому баланс кэшируется на 60 секунд, статистика расхода — на 120 секунд. Фоновых опросов нет; временная недоступность квот не прерывает работу чата.
|
|
89
174
|
|
|
90
|
-
##
|
|
175
|
+
## Страница настроек Web UI
|
|
91
176
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
```
|
|
177
|
+
В разделе **Настройки → Ollama Cloud**:
|
|
178
|
+
- **Key**: статус ключа, вставка, очистка, кнопка **Test connection**.
|
|
179
|
+
- **Balance & Usage**: шкалы кредитов, окна расходов, предупреждения при 80% и 95%.
|
|
180
|
+
- **Accounts**: управление пулом дополнительных учетных записей.
|
|
181
|
+
- **Model rules**: настройка правил ротации по моделям.
|
|
182
|
+
- **Models**: поиск, принудительное обновление каталога моделей, allowlist, переопределение транспорта.
|
|
183
|
+
- **Connection**: базовые адреса, таймауты, лимиты токенов.
|
|
184
|
+
- **Plugin update**: проверка обновлений и кнопка **Update now**.
|
|
101
185
|
|
|
102
|
-
##
|
|
186
|
+
## Визуальная верификация
|
|
187
|
+
|
|
188
|
+
Настройки и баланс Ollama Cloud в интерфейсе DSH Desktop (темная тема):
|
|
103
189
|
|
|
104
|
-
|
|
105
|
-
- `GET https://ollama.com/api/tags` публичный и единственный источник `capabilities` по моделям.
|
|
106
|
-
- Live-каталог вернул 23 облачные модели.
|
|
107
|
-
- Нативный `/api/chat` — NDJSON, счётчики и `done_reason` в финальной строке.
|
|
108
|
-
- OpenAI `/v1/chat/completions` поддерживает стриминг, tools, vision, `reasoning_effort` и `include_usage`.
|
|
109
|
-
- Anthropic-совместимость (`/v1/messages`) частичная и плагином не используется.
|
|
190
|
+

|
|
110
191
|
|
|
111
|
-
##
|
|
192
|
+
## Команды CLI
|
|
112
193
|
|
|
113
194
|
```bash
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
195
|
+
/ollama status # статус провайдера, квоты, модели
|
|
196
|
+
/ollama usage # окна расходов и статистика по моделям
|
|
197
|
+
/ollama balance # баланс кредитов
|
|
198
|
+
/ollama accounts # список аккаунтов и их расход
|
|
199
|
+
/ollama models # каталог моделей и параметры
|
|
200
|
+
/ollama rules # правила модель ➔ аккаунт
|
|
201
|
+
/ollama test [model] # проверочный запрос к модели
|
|
119
202
|
```
|
|
120
203
|
|
|
204
|
+
## Проверенные факты API (2026-10-21)
|
|
205
|
+
|
|
206
|
+
- `GET https://ollama.com/v1/models` возвращает стандартный `data[]` и расширенный массив `models[]` с метаданными контекста и модальностей.
|
|
207
|
+
- `GET https://ollama.com/api/tags` служит источником флагов `capabilities` по моделям.
|
|
208
|
+
- Нативный `/api/chat` передает NDJSON с подробной статистикой токенов в финальном объекте.
|
|
209
|
+
- Совместимый эндпоинт OpenAI `/v1/chat/completions` поддерживает стриминг, инструменты, зрение (vision) и `reasoning_effort`.
|
|
210
|
+
|
|
121
211
|
## Ограничения
|
|
122
212
|
|
|
123
|
-
- Только Ollama Cloud; локальный `http://localhost:11434` не регистрируется.
|
|
124
|
-
-
|
|
125
|
-
- Файловые вложения передаются текстовыми handle
|
|
126
|
-
-
|
|
127
|
-
- UI требует web-профиль; в TUI остаются команда `/ollama` и маршрут модели.
|
|
213
|
+
- Только Ollama Cloud; локальный сервис `http://localhost:11434` данным плагином не регистрируется.
|
|
214
|
+
- Эмбеддинги (embeddings) в облачном API не предоставляются.
|
|
215
|
+
- Файловые вложения передаются текстовыми дескрипторами (handle), а не бинарными байтами.
|
|
216
|
+
- Интерфейс требует web-профиль; в терминальном TUI доступны команда `/ollama` и маршрут модели.
|
|
128
217
|
|
|
129
218
|
## Лицензия
|
|
130
219
|
|
package/README.zh.md
CHANGED
|
@@ -1,76 +1,154 @@
|
|
|
1
1
|
# 📦 @goodandready/dsh-ollama-cloud-provider
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<div align="center">
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<h3>面向 DeepSeek Harness 的 Ollama Cloud 模型提供商插件</h3>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<p>
|
|
8
|
+
<a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="GoodAndReady 展厅"></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@goodandready/dsh-ollama-cloud-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-ollama-cloud-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm 版本"></a>
|
|
10
|
+
<a href="https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="许可证"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<table align="center">
|
|
16
|
+
<tr>
|
|
17
|
+
<td align="center">
|
|
18
|
+
⭐ <strong>如果您喜欢这个插件,请在 GitHub 上为它点亮 Star</strong> — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
|
|
19
|
+
<br><br>
|
|
20
|
+
🐛 <strong>如果您发现 Bug 或希望增加功能</strong>,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
</table>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
面向 [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/)(dsh)的 **Ollama Cloud** 模型提供商插件。
|
|
28
|
+
|
|
29
|
+
插件注册一个原生 LLM 路由 `ollama-cloud`(`https://ollama.com`),支持两种底层传输协议:
|
|
30
|
+
|
|
31
|
+
| 传输协议 | 端点 | 用途 |
|
|
8
32
|
|---|---|---|
|
|
9
|
-
| `native`(默认) | `POST /api/chat` | thinking、工具调用、usage
|
|
10
|
-
| `openai-chat` | `POST /v1/chat/completions` | OpenAI
|
|
33
|
+
| `native`(默认) | `POST /api/chat` | thinking、工具调用、usage 计数(NDJSON) |
|
|
34
|
+
| `openai-chat` | `POST /v1/chat/completions` | OpenAI 兼容部署与备用网关(SSE) |
|
|
35
|
+
|
|
36
|
+
密钥在每次请求时动态解析:在设置中更换凭据无需重启即可立即生效。
|
|
37
|
+
|
|
38
|
+
## 架构示意
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
graph LR
|
|
42
|
+
subgraph DSH["DeepSeek Harness 核心"]
|
|
43
|
+
Agent["DSH 智能体 / 聊天"]
|
|
44
|
+
Creds["凭据服务 / 环境变量"]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
subgraph Plugin["dsh-ollama-cloud-provider"]
|
|
48
|
+
Router{"路由: ollama-cloud"}
|
|
49
|
+
Pool["多账号连接池<br/>轮换、冷却、粘性会话"]
|
|
50
|
+
Catalog["实时模型目录<br/>/v1/models + /api/tags"]
|
|
51
|
+
Usage["余额与用量监控<br/>/api/balance + /api/usage"]
|
|
52
|
+
|
|
53
|
+
subgraph Transports["底层传输协议"]
|
|
54
|
+
T1["Native /api/chat (NDJSON)"]
|
|
55
|
+
T2["OpenAI /v1/chat/completions (SSE)"]
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
subgraph Ollama["Ollama Cloud 云端网关"]
|
|
60
|
+
Chat["ollama.com/api/chat"]
|
|
61
|
+
OpenAI["ollama.com/v1/chat/completions"]
|
|
62
|
+
Billing["/api/balance, /api/usage"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Agent --> Router
|
|
66
|
+
Creds -.-> Pool
|
|
67
|
+
Router --> Pool
|
|
68
|
+
Pool --> Transports
|
|
69
|
+
T1 --> Chat
|
|
70
|
+
T2 --> OpenAI
|
|
71
|
+
Catalog --> Router
|
|
72
|
+
Usage --> Billing
|
|
73
|
+
```
|
|
11
74
|
|
|
12
|
-
|
|
75
|
+
## 功能全貌
|
|
13
76
|
|
|
14
|
-
|
|
77
|
+
- **两种底层传输协议**:按模型选择 Ollama 原生协议(NDJSON)或 OpenAI 兼容协议(SSE)。
|
|
78
|
+
- **全要素流式交互**:文本、深度思考(thinking)、工具调用、多模态图像、Token 统计与 finish reasons。
|
|
79
|
+
- **实时模型目录**:自动从 `GET /v1/models` 获取模型列表,并结合 `GET /api/tags` 补全能力标记(`tools`、`thinking`、`vision`)。
|
|
80
|
+
- **精准模型元数据**:上下文长度、输入模态、推理等级与默认配置、工具支持状态及 API 开放性。
|
|
81
|
+
- **官方余额与用量分析**:集成官方 `/api/balance` 与 `/api/usage`,呈现可用额度、已购额度、24小时/7天/30天支出及按模型细分报表。
|
|
82
|
+
- **多账号智能轮换**:在输出首个 Token 之前,遇到 401/403/429 或额度耗尽自动切换至备用账号。冷却时间通过 SHA-256 哈希安全持久化。
|
|
83
|
+
- **会话粘性与路由规则**:支持单会话锁定同一账号,以及基于 Glob 通配符的 `模型 → 账号` 绑定规则。
|
|
84
|
+
- **成本透明估算**:依据官方发布的价目表(包含闲时优惠折扣)进行费用估算,支持按模型覆盖价格。
|
|
85
|
+
- **Web UI 与交互卡片**:
|
|
86
|
+
- **设置 → Ollama Cloud**:密钥配置、余额显示、账号池管理、模型白名单与协议切换。
|
|
87
|
+
- **侧边栏配额指示卡片**:环形展示最高额度窗口(默认关闭且不产生后台轮询)。
|
|
88
|
+
- **中央用量分析面板**:支出窗口、请求热力图与用量走势。
|
|
89
|
+
- **`/ollama` 快捷指令**:快速查询状态、额度、余额、账号列表与执行联通性测试。
|
|
90
|
+
- **一键热更新**:在 DSH 设置页直接检测 npm 最新版本并快速安装更新。
|
|
15
91
|
|
|
16
|
-
|
|
17
|
-
- 文本、thinking、工具调用、图像、usage 和结束原因。
|
|
18
|
-
- 从 `GET /v1/models` 读取实时模型目录,并用 `GET /api/tags` 的 `capabilities` 补充能力。
|
|
19
|
-
- 模型选择器中的准确元数据:上下文窗口、输入模态、推理等级及默认值、工具支持、API 可见性。
|
|
20
|
-
- 从官方 `/api/balance` 和 `/api/usage` 读取余额与用量:包含额度、购买额度、24 小时 / 7 天 / 30 天支出、按模型支出。
|
|
21
|
-
- 多账号轮换在**首个 token 之前**完成:401/403/429 与配额耗尽会标记密钥并切换到下一个。冷却状态重启后保留。
|
|
22
|
-
- 每个会话的粘性账号,以及 `模型 → 账号` 的 glob 规则。
|
|
23
|
-
- 按 Ollama 公开价目表估算费用,包含 off-peak 价格,并支持按模型覆盖。
|
|
24
|
-
- 浏览器界面:**设置 → Ollama Cloud**、侧边栏配额卡片(默认关闭,关闭时不会轮询 `/state`)、含用量分析、热力图和路由记录的中央面板。
|
|
25
|
-
- `/ollama` 命令、TUI 设置区、一键插件更新。
|
|
92
|
+
## 安装指南
|
|
26
93
|
|
|
27
|
-
|
|
94
|
+
从源码构建与打包:
|
|
28
95
|
|
|
29
96
|
```bash
|
|
30
97
|
npm install
|
|
31
98
|
npm run build
|
|
32
99
|
npm pack
|
|
33
|
-
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.0.tgz
|
|
34
|
-
# DSH Desktop:
|
|
35
|
-
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.0.tgz
|
|
36
100
|
```
|
|
37
101
|
|
|
38
|
-
|
|
102
|
+
从 npm 安装已发布版本:
|
|
39
103
|
|
|
40
|
-
|
|
104
|
+
```bash
|
|
105
|
+
dsh plugin --profile web add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
106
|
+
# DSH 桌面端:
|
|
107
|
+
dsh plugin --profile desktop add @goodandready/dsh-ollama-cloud-provider@0.1.3
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
或通过打包文件安装:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
114
|
+
# DSH 桌面端:
|
|
115
|
+
dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.3.tgz
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
安装完成后重启 dsh 或 DSH 桌面端,在模型列表中选择 **Ollama Cloud** 即可。
|
|
119
|
+
|
|
120
|
+
## 配置示例
|
|
41
121
|
|
|
42
122
|
```yaml
|
|
43
123
|
- id: llm-ollama-cloud
|
|
44
124
|
name: "@goodandready/dsh-ollama-cloud-provider"
|
|
45
125
|
config:
|
|
46
|
-
apiKeyEnv: OLLAMA_API_KEY
|
|
47
|
-
|
|
126
|
+
apiKeyEnv: OLLAMA_API_KEY # 环境变量名或 DSH 凭据名
|
|
127
|
+
# apiKey: ... # 仅本地调试,严禁提交代码库
|
|
128
|
+
transport: native # native | openai-chat
|
|
48
129
|
requestTimeoutMs: 300000
|
|
49
130
|
streamIdleTimeoutMs: 300000
|
|
50
131
|
visibleModels: []
|
|
132
|
+
modelTransports: {}
|
|
51
133
|
accounts:
|
|
52
134
|
- label: Work
|
|
53
135
|
apiKeyEnv: OLLAMA_API_KEY_2
|
|
54
|
-
activeAccount: ''
|
|
136
|
+
activeAccount: '' # 固定指定活跃账号
|
|
55
137
|
stickySession: true
|
|
56
138
|
showSidebarQuota: false
|
|
57
139
|
```
|
|
58
140
|
|
|
59
|
-
除 `apiKey`
|
|
60
|
-
|
|
61
|
-
### 密钥
|
|
141
|
+
除 `apiKey` 外的所有配置项均可在 DSH 设置页直接修改。
|
|
62
142
|
|
|
63
|
-
|
|
64
|
-
2. dsh 凭据服务中的 `apiKeyEnv`(默认 `OLLAMA_API_KEY`)。
|
|
65
|
-
3. 启动环境变量。
|
|
143
|
+
### 密钥配置
|
|
66
144
|
|
|
67
|
-
|
|
145
|
+
1. DSH 配置中的 `config.apiKey`。
|
|
146
|
+
2. DSH 凭据服务中的 `apiKeyEnv`(默认 `OLLAMA_API_KEY`)。
|
|
147
|
+
3. 环境变量或 `$DSH_HOME/.env`。
|
|
68
148
|
|
|
69
|
-
|
|
149
|
+
密钥可在官方后台生成:<https://ollama.com/settings/keys>。云端网关仅接受 `Authorization: Bearer` 请求头。
|
|
70
150
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
### 模型 → 账号规则
|
|
151
|
+
### 模型到账号路由规则
|
|
74
152
|
|
|
75
153
|
```yaml
|
|
76
154
|
modelAccountRules:
|
|
@@ -78,54 +156,32 @@ modelAccountRules:
|
|
|
78
156
|
account: "Work"
|
|
79
157
|
```
|
|
80
158
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
## 余额与用量
|
|
84
|
-
|
|
85
|
-
- `GET /api/balance`:新格式(`included.balance_usd`、`allowance_usd`、`period`、`purchased.balance_usd`)与旧格式(`session` / `weekly` 的 `remaining_percent`)均支持。
|
|
86
|
-
- `GET /api/usage?range=24h|7d|30d&group_by=model`:总计与按模型分组。
|
|
159
|
+
## 界面与视觉验收
|
|
87
160
|
|
|
88
|
-
|
|
161
|
+
DSH Desktop(暗黑主题)中的 Ollama Cloud 设置与用量面板:
|
|
89
162
|
|
|
90
|
-
|
|
163
|
+

|
|
91
164
|
|
|
92
|
-
|
|
93
|
-
/ollama status
|
|
94
|
-
/ollama usage
|
|
95
|
-
/ollama balance
|
|
96
|
-
/ollama accounts
|
|
97
|
-
/ollama models
|
|
98
|
-
/ollama rules
|
|
99
|
-
/ollama test [model]
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## 已验证的 API 事实(2026-10-21)
|
|
103
|
-
|
|
104
|
-
- `GET https://ollama.com/v1/models` 公开,除标准 `data[]` 外还返回非标准 `models[]`,包含上下文、模态、推理等级、`visibility` 和 `supported_in_api`。
|
|
105
|
-
- `GET https://ollama.com/api/tags` 公开,是按模型获取 `capabilities` 的唯一来源。
|
|
106
|
-
- 实时目录返回 23 个云端模型。
|
|
107
|
-
- 原生 `/api/chat` 使用 NDJSON,最后一行包含计数与 `done_reason`。
|
|
108
|
-
- OpenAI `/v1/chat/completions` 支持流式、工具、图像、`reasoning_effort` 与 `include_usage`。
|
|
109
|
-
- Anthropic 兼容接口(`/v1/messages`)仅部分支持,本插件未使用。
|
|
110
|
-
|
|
111
|
-
## 开发
|
|
165
|
+
## 常用指令
|
|
112
166
|
|
|
113
167
|
```bash
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
168
|
+
/ollama status # 查看服务商状态、配额与模型数
|
|
169
|
+
/ollama usage # 7 天支出与按模型细分
|
|
170
|
+
/ollama balance # 包含额度与充值额度
|
|
171
|
+
/ollama accounts # 账号池健康与支出
|
|
172
|
+
/ollama models # 模型目录与参数能力
|
|
173
|
+
/ollama rules # 模型到账号规则
|
|
174
|
+
/ollama test [model] # 发送连通性测试请求
|
|
119
175
|
```
|
|
120
176
|
|
|
121
|
-
##
|
|
177
|
+
## 限制与注意事项
|
|
122
178
|
|
|
123
|
-
- 仅支持 Ollama Cloud
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
179
|
+
- 仅支持 Ollama Cloud 云端模型;不会注册本地 `http://localhost:11434` 路由。
|
|
180
|
+
- 云端 API 暂不提供向量嵌入(Embeddings)模型。
|
|
181
|
+
- 文件附件以文本句柄(handle)形式转发。
|
|
182
|
+
- `/api/usage` 限制为每分钟 10 次请求,插件已内置本地缓存以确保顺畅使用。
|
|
183
|
+
- 完整功能需要 Web 配置文件;TUI 终端环境保留 `/ollama` 命令与模型推理。
|
|
128
184
|
|
|
129
185
|
## 许可证
|
|
130
186
|
|
|
131
|
-
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
|
|
187
|
+
MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)。详见 [LICENSE](./LICENSE) 与 [NOTICE](./NOTICE)。
|
package/cordis.patch.yml
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# dsh-ollama-cloud-provider bundle layer.
|
|
2
|
-
# Registers the `ollama-cloud` provider route. All fields are optional —
|
|
3
|
-
# schema defaults apply.
|
|
4
|
-
#
|
|
5
|
-
# `name` must be the FULL package specifier as installed in the profile's
|
|
6
|
-
# node_modules. Quote it: an unquoted YAML scalar starting with `@` fails.
|
|
7
|
-
- insert:
|
|
8
|
-
- id: llm-ollama-cloud
|
|
9
|
-
name: "@goodandready/dsh-ollama-cloud-provider"
|
|
10
|
-
config:
|
|
11
|
-
apiKeyEnv: OLLAMA_API_KEY
|
|
1
|
+
# dsh-ollama-cloud-provider bundle layer.
|
|
2
|
+
# Registers the `ollama-cloud` provider route. All fields are optional —
|
|
3
|
+
# schema defaults apply.
|
|
4
|
+
#
|
|
5
|
+
# `name` must be the FULL package specifier as installed in the profile's
|
|
6
|
+
# node_modules. Quote it: an unquoted YAML scalar starting with `@` fails.
|
|
7
|
+
- insert:
|
|
8
|
+
- id: llm-ollama-cloud
|
|
9
|
+
name: "@goodandready/dsh-ollama-cloud-provider"
|
|
10
|
+
config:
|
|
11
|
+
apiKeyEnv: OLLAMA_API_KEY
|
package/package.json
CHANGED
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@goodandready/dsh-ollama-cloud-provider",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Ollama Cloud LLM provider plugin for DeepSeek Harness (dsh).",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "./lib/index.js",
|
|
8
|
-
"types": "./lib/index.d.ts",
|
|
9
|
-
"exports": {
|
|
10
|
-
".": {
|
|
11
|
-
"types": "./lib/index.d.ts",
|
|
12
|
-
"default": "./lib/index.js"
|
|
13
|
-
},
|
|
14
|
-
"./client": {
|
|
15
|
-
"default": "./lib/client.js"
|
|
16
|
-
},
|
|
17
|
-
"./package.json": "./package.json",
|
|
18
|
-
"./cordis.patch.yml": "./cordis.patch.yml"
|
|
19
|
-
},
|
|
20
|
-
"files": [
|
|
21
|
-
"lib",
|
|
22
|
-
"!lib/**/*.map",
|
|
23
|
-
"cordis.patch.yml",
|
|
24
|
-
"README.md",
|
|
25
|
-
"README.zh.md",
|
|
26
|
-
"README.ru.md",
|
|
27
|
-
"CHANGELOG.md",
|
|
28
|
-
"LICENSE",
|
|
29
|
-
"NOTICE",
|
|
30
|
-
"media/visual-verification.png"
|
|
31
|
-
],
|
|
32
|
-
"publishConfig": {
|
|
33
|
-
"access": "public"
|
|
34
|
-
},
|
|
35
|
-
"repository": {
|
|
36
|
-
"type": "git",
|
|
37
|
-
"url": "git+https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider.git"
|
|
38
|
-
},
|
|
39
|
-
"bugs": {
|
|
40
|
-
"url": "https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider/issues"
|
|
41
|
-
},
|
|
42
|
-
"homepage": "https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider#readme",
|
|
43
|
-
"dsh": {
|
|
44
|
-
"bundle": {
|
|
45
|
-
"patch": "./cordis.patch.yml"
|
|
46
|
-
},
|
|
47
|
-
"client": {
|
|
48
|
-
"platform": "web",
|
|
49
|
-
"inject": [
|
|
50
|
-
"@deepseek-ai/dsh-client-locale",
|
|
51
|
-
"@deepseek-ai/dsh-client-ui-renderer",
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-settings"
|
|
53
|
-
]
|
|
54
|
-
},
|
|
55
|
-
"compatibility": {
|
|
56
|
-
"dshReleases": {
|
|
57
|
-
"0.2.0-rc.2": "compatible",
|
|
58
|
-
"0.2.1-rc.2": "compatible"
|
|
59
|
-
},
|
|
60
|
-
"dsh": "0.2.0-rc.2 || 0.2.1-rc.2"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
"engines": {
|
|
64
|
-
"node": ">=22",
|
|
65
|
-
"dsh": "0.2.0-rc.2 || 0.2.1-rc.2"
|
|
66
|
-
},
|
|
67
|
-
"scripts": {
|
|
68
|
-
"build": "tsdown",
|
|
69
|
-
"prepare": "tsdown",
|
|
70
|
-
"typecheck": "tsc --noEmit",
|
|
71
|
-
"test": "node --import tsx --test tests/core.test.ts tests/usage.test.ts tests/adapter.test.ts tests/routes.test.ts tests/commands.test.ts tests/tui-settings.test.ts tests/analytics.test.ts tests/apply.test.ts tests/account-rules.test.ts tests/request-log.test.ts tests/image-budget.test.ts tests/tool-schema.test.ts tests/tools.test.ts tests/plugin-updater.test.ts",
|
|
72
|
-
"check": "npm run typecheck && npm test && npm run build",
|
|
73
|
-
"release": "npm run check && npm pack",
|
|
74
|
-
"sync:models": "node scripts/sync-models.mjs"
|
|
75
|
-
},
|
|
76
|
-
"keywords": [
|
|
77
|
-
"dsh",
|
|
78
|
-
"dsh-plugin",
|
|
79
|
-
"deepseek-harness",
|
|
80
|
-
"ollama",
|
|
81
|
-
"ollama-cloud",
|
|
82
|
-
"llm-provider"
|
|
83
|
-
],
|
|
84
|
-
"peerDependencies": {
|
|
85
|
-
"@deepseek-ai/cordis": "~4.0.4 || ~4.0.5",
|
|
86
|
-
"@deepseek-ai/dsh-attachment": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
87
|
-
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
88
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
89
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
90
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
91
|
-
"@deepseek-ai/dsh-commands": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
92
|
-
"@deepseek-ai/dsh-credentials": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
93
|
-
"@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
94
|
-
"@deepseek-ai/dsh-launch-environment": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
95
|
-
"@deepseek-ai/dsh-llm": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
96
|
-
"@deepseek-ai/dsh-settings": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
97
|
-
"@deepseek-ai/schemastery": "~3.18.4 || ~3.18.5",
|
|
98
|
-
"react": "^18.2.0"
|
|
99
|
-
},
|
|
100
|
-
"devDependencies": {
|
|
101
|
-
"@deepseek-ai/cordis": "~4.0.5",
|
|
102
|
-
"@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
|
|
103
|
-
"@deepseek-ai/dsh-client-locale": "^0.2.1-rc.2",
|
|
104
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.1-rc.2",
|
|
105
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.2.1-rc.2",
|
|
106
|
-
"@deepseek-ai/dsh-client-ui-slots": "^0.2.1-rc.2",
|
|
107
|
-
"@deepseek-ai/dsh-commands": "0.2.1-rc.2",
|
|
108
|
-
"@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
|
|
109
|
-
"@deepseek-ai/dsh-host-webserver": "^0.2.1-rc.2",
|
|
110
|
-
"@deepseek-ai/dsh-launch-environment": "0.2.1-rc.2",
|
|
111
|
-
"@deepseek-ai/dsh-llm": "0.2.1-rc.2",
|
|
112
|
-
"@deepseek-ai/dsh-settings": "0.2.1-rc.2",
|
|
113
|
-
"@deepseek-ai/schemastery": "~3.18.5",
|
|
114
|
-
"@types/node": "^22.0.0",
|
|
115
|
-
"@types/react": "^18.3.1",
|
|
116
|
-
"react": "^18.3.1",
|
|
117
|
-
"tsdown": "^0.22.2",
|
|
118
|
-
"tsx": "^4.23.12",
|
|
119
|
-
"typescript": "^5.7.2"
|
|
120
|
-
}
|
|
121
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@goodandready/dsh-ollama-cloud-provider",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Ollama Cloud LLM provider plugin for DeepSeek Harness (dsh).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./lib/index.js",
|
|
8
|
+
"types": "./lib/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./lib/index.d.ts",
|
|
12
|
+
"default": "./lib/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./client": {
|
|
15
|
+
"default": "./lib/client.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json",
|
|
18
|
+
"./cordis.patch.yml": "./cordis.patch.yml"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"lib",
|
|
22
|
+
"!lib/**/*.map",
|
|
23
|
+
"cordis.patch.yml",
|
|
24
|
+
"README.md",
|
|
25
|
+
"README.zh.md",
|
|
26
|
+
"README.ru.md",
|
|
27
|
+
"CHANGELOG.md",
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"NOTICE",
|
|
30
|
+
"media/visual-verification.png"
|
|
31
|
+
],
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider.git"
|
|
38
|
+
},
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider/issues"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://github.com/GooDAnDReaDY/dsh-ollama-cloud-provider#readme",
|
|
43
|
+
"dsh": {
|
|
44
|
+
"bundle": {
|
|
45
|
+
"patch": "./cordis.patch.yml"
|
|
46
|
+
},
|
|
47
|
+
"client": {
|
|
48
|
+
"platform": "web",
|
|
49
|
+
"inject": [
|
|
50
|
+
"@deepseek-ai/dsh-client-locale",
|
|
51
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-settings"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"compatibility": {
|
|
56
|
+
"dshReleases": {
|
|
57
|
+
"0.2.0-rc.2": "compatible",
|
|
58
|
+
"0.2.1-rc.2": "compatible"
|
|
59
|
+
},
|
|
60
|
+
"dsh": "0.2.0-rc.2 || 0.2.1-rc.2"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=22",
|
|
65
|
+
"dsh": "0.2.0-rc.2 || 0.2.1-rc.2"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"build": "tsdown",
|
|
69
|
+
"prepare": "tsdown",
|
|
70
|
+
"typecheck": "tsc --noEmit",
|
|
71
|
+
"test": "node --import tsx --test tests/core.test.ts tests/usage.test.ts tests/adapter.test.ts tests/routes.test.ts tests/commands.test.ts tests/tui-settings.test.ts tests/analytics.test.ts tests/apply.test.ts tests/account-rules.test.ts tests/request-log.test.ts tests/image-budget.test.ts tests/tool-schema.test.ts tests/tools.test.ts tests/plugin-updater.test.ts",
|
|
72
|
+
"check": "npm run typecheck && npm test && npm run build",
|
|
73
|
+
"release": "npm run check && npm pack",
|
|
74
|
+
"sync:models": "node scripts/sync-models.mjs"
|
|
75
|
+
},
|
|
76
|
+
"keywords": [
|
|
77
|
+
"dsh",
|
|
78
|
+
"dsh-plugin",
|
|
79
|
+
"deepseek-harness",
|
|
80
|
+
"ollama",
|
|
81
|
+
"ollama-cloud",
|
|
82
|
+
"llm-provider"
|
|
83
|
+
],
|
|
84
|
+
"peerDependencies": {
|
|
85
|
+
"@deepseek-ai/cordis": "~4.0.4 || ~4.0.5",
|
|
86
|
+
"@deepseek-ai/dsh-attachment": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
90
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
91
|
+
"@deepseek-ai/dsh-commands": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
92
|
+
"@deepseek-ai/dsh-credentials": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
94
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
95
|
+
"@deepseek-ai/dsh-llm": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
96
|
+
"@deepseek-ai/dsh-settings": "0.2.0-rc.2 || 0.2.1-rc.2",
|
|
97
|
+
"@deepseek-ai/schemastery": "~3.18.4 || ~3.18.5",
|
|
98
|
+
"react": "^18.2.0"
|
|
99
|
+
},
|
|
100
|
+
"devDependencies": {
|
|
101
|
+
"@deepseek-ai/cordis": "~4.0.5",
|
|
102
|
+
"@deepseek-ai/dsh-attachment": "0.2.1-rc.2",
|
|
103
|
+
"@deepseek-ai/dsh-client-locale": "^0.2.1-rc.2",
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.2.1-rc.2",
|
|
105
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.2.1-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.2.1-rc.2",
|
|
107
|
+
"@deepseek-ai/dsh-commands": "0.2.1-rc.2",
|
|
108
|
+
"@deepseek-ai/dsh-credentials": "0.2.1-rc.2",
|
|
109
|
+
"@deepseek-ai/dsh-host-webserver": "^0.2.1-rc.2",
|
|
110
|
+
"@deepseek-ai/dsh-launch-environment": "0.2.1-rc.2",
|
|
111
|
+
"@deepseek-ai/dsh-llm": "0.2.1-rc.2",
|
|
112
|
+
"@deepseek-ai/dsh-settings": "0.2.1-rc.2",
|
|
113
|
+
"@deepseek-ai/schemastery": "~3.18.5",
|
|
114
|
+
"@types/node": "^22.0.0",
|
|
115
|
+
"@types/react": "^18.3.1",
|
|
116
|
+
"react": "^18.3.1",
|
|
117
|
+
"tsdown": "^0.22.2",
|
|
118
|
+
"tsx": "^4.23.12",
|
|
119
|
+
"typescript": "^5.7.2"
|
|
120
|
+
}
|
|
121
|
+
}
|