@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 CHANGED
@@ -1,52 +1,57 @@
1
- # Changelog
2
-
3
- ## 0.1.2 — 2026-10-21
4
-
5
- - Test connection falls back to the reasoning text when a thinking model returns
6
- no content, and uses a 64-token budget (#17).
7
- - Production acceptance of 0.1.1 confirmed chat, catalog and balance; the probe
8
- is the only follow-up defect.
9
-
10
- ## 0.1.1 — 2026-10-21
11
-
12
- Audit fixes (Gitea #1–#15):
13
-
14
- - A transient transport/timeout/server failure no longer cools down the only
15
- configured account; the harness retry policy can recover. Credential and quota
16
- rejections still cool the key (#1).
17
- - Removed the unimplemented `toolUpdate: 'addition-only'` declaration so the
18
- model always receives the full tool list (#2).
19
- - `/dsh-ollama/key` and `/key/clear` only accept this plugin's credential
20
- references (`apiKeyEnv`, configured account refs and `OLLAMA_*`) (#3).
21
- - The sidebar quota card honors `showSidebarQuota`, stays unmounted while the
22
- setting is off and stops polling `/state` (#4).
23
- - The injected stylesheet carries `data-dsh-plugin` so neighbouring plugin
24
- cleanup cannot strip it (#5).
25
- - Analytics uses the shared `estimateCost` implementation and applies
26
- `priceOverrides` (#7).
27
- - Empty catch blocks report through `bestEffortFailed` at debug level (#8).
28
- - Removed unused modules and exports (`quota-runway`, `requireImages`,
29
- `clearAnalyticsCache`, `PLUGIN_PROVIDERS`, `showUrlFor`) (#9).
30
- - Heatmap and theme values no longer hardcode colors (#10).
31
- - Test-connection requests disable thinking and use a 32-token budget (#11).
32
- - The request log is flushed on shutdown (#12).
33
- - Architecture documentation moved to `docs/design/ARCHITECTURE.md`; the
34
- design contract lives in `docs/design/DESIGN.md` (#13).
35
- - Added wiring, analytics, route-guard and adapter regression tests (#14).
36
- - Account rows show the 7-day spend without a meaningless percentage (#15).
37
-
38
- ## 0.1.0
39
-
40
- Initial release.
41
-
42
- - Registers the `ollama-cloud` provider route for DeepSeek Harness.
43
- - Native `/api/chat` transport (NDJSON) with thinking, tool calls, images and usage counters.
44
- - OpenAI-compatible `/v1/chat/completions` transport selectable per model.
45
- - Live model catalog from `/v1/models` enriched with `/api/tags` capabilities, plus an offline snapshot.
46
- - Balance from `/api/balance` (credits and legacy percentage windows) and spend from `/api/usage`
47
- with 24-hour, 7-day and 30-day windows and per-model groups.
48
- - Multi-account rotation before the first streamed token, persistent cooldowns, sticky sessions and
49
- model → account glob rules.
50
- - Price estimates including off-peak rates and per-model overrides.
51
- - Settings page, sidebar quota card, quota/analytics panel with a request heatmap, `/ollama` command,
52
- TUI settings section and one-click plugin update.
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 packed tarball into a profile:
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.0.tgz
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.0.tgz
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: { "gpt-oss:120b": 131072 }
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, default gpt-oss:120b
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
  ![Ollama Cloud settings](media/visual-verification.png)
220
239
 
package/README.ru.md CHANGED
@@ -1,76 +1,161 @@
1
1
  # 📦 @goodandready/dsh-ollama-cloud-provider
2
2
 
3
- Провайдер **Ollama Cloud** для DeepSeek Harness (dsh).
3
+ <div align="center">
4
4
 
5
- Плагин регистрирует один маршрут `ollama-cloud` (`https://ollama.com`) и два протокола:
5
+ <h3>Плагин-провайдер Ollama Cloud для DeepSeek Harness</h3>
6
6
 
7
- | Транспорт | Endpoint | Когда используется |
8
- |---|---|---|
9
- | `native` (по умолчанию) | `POST /api/chat` | thinking, вызовы инструментов, счётчики usage |
10
- | `openai-chat` | `POST /v1/chat/completions` | OpenAI-совместимые развёртывания и запасной путь |
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
- Ключ разрешается на каждый запрос, поэтому смена credential применяется без перезапуска.
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
- - Текст, reasoning/thinking, tool calls, изображения, usage и finish reasons.
18
- - Живой каталог из `GET /v1/models`, дополненный `capabilities` из `GET /api/tags`.
19
- - Точные метаданные для picker: контекст, модальности, уровни reasoning и уровень по умолчанию, поддержка инструментов, видимость в API.
20
- - Баланс и расход из официальных `/api/balance` и `/api/usage`: включённые и купленные кредиты, расход за 24 часа / 7 дней / 30 дней, расход по моделям.
21
- - Мультиаккаунт с ротацией **до первого токена** на 401/403/429 и исчерпанную квоту; cooldown'ы сохраняются между перезапусками.
22
- - Липкий аккаунт на диалог и правила `модель → аккаунт` по glob.
23
- - Оценка стоимости по published-тарифу Ollama, включая off-peak, с ручными overrides.
24
- - UI: страница **Настройки → Ollama Cloud**, карточка квоты в сайдбаре (по умолчанию выключена и не опрашивает `/state`, пока выключена), панель с расходом, аналитикой и heatmap.
25
- - Команда `/ollama`, секция TUI и обновление плагина в один клик.
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
- dsh plugin --profile web add /absolute/path/to/goodandready-dsh-ollama-cloud-provider-0.1.0.tgz
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.0.tgz
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
- transport: native # native | openai-chat
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`, доступны в настройках DSH.
142
+ Все поля, кроме `apiKey`, доступны для изменения в интерфейсе настроек DSH.
60
143
 
61
- ### Ключи
144
+ ### Получение и хранение ключей
62
145
 
63
- 1. `config.apiKey` — только в composition, `role('secret')`.
64
- 2. Credential-сервис по имени `apiKeyEnv` (по умолчанию `OLLAMA_API_KEY`).
65
- 3. Переменные окружения запуска.
146
+ 1. `config.apiKey` в файле конфигурации (`role('secret')`).
147
+ 2. Системный сервис учетных данных DSH по имени `apiKeyEnv` (по умолчанию `OLLAMA_API_KEY`).
148
+ 3. Переменные окружения процесса, `.env` проекта или `$DSH_HOME/.env`.
66
149
 
67
- Ключ создаётся на <https://ollama.com/settings/keys>, не истекает. Принимается только `Authorization: Bearer`; `x-api-key` cloud отклоняет.
150
+ Ключ создается в личном кабинете: <https://ollama.com/settings/keys>. Ключи бессрочные; облачный API принимает только заголовок `Authorization: Bearer`.
68
151
 
69
- ### Аккаунты и ротация
152
+ ### Пул аккаунтов и ротация
70
153
 
71
- Дополнительный аккаунт добавляется в **Настройки → Ollama Cloud → Аккаунты**: имя + ссылка на credential (например `OLLAMA_API_KEY_2`), затем ключ и «Сохранить». Ротация происходит до стриминга: отклонённый ключ получает cooldown, запрос повторяется следующим ключом. Cooldown'ы лежат в `~/.dsh/storages/dsh-ollama/cooldowns.json` и хранятся по SHA-256 fingerprint — сырые ключи не пишутся.
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 ставит аккаунт первым; остальные остаются fallback.
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` — totals и группы по моделям.
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
- У `/api/usage` лимит **10 запросов в минуту на пользователя**, поэтому баланс кэшируется на 60 с, usage — на 120 с, ошибки — на 30 с. Фонового опроса нет. Недоступность квот не блокирует чат.
173
+ Эндпоинт `/api/usage` ограничен лимитом в **10 запросов в минуту**, поэтому баланс кэшируется на 60 секунд, статистика расхода — на 120 секунд. Фоновых опросов нет; временная недоступность квот не прерывает работу чата.
89
174
 
90
- ## Команда
175
+ ## Страница настроек Web UI
91
176
 
92
- ```
93
- /ollama status
94
- /ollama usage
95
- /ollama balance
96
- /ollama accounts
97
- /ollama models
98
- /ollama rules
99
- /ollama test [model]
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
- ## Проверенные факты API (2026-10-21)
186
+ ## Визуальная верификация
187
+
188
+ Настройки и баланс Ollama Cloud в интерфейсе DSH Desktop (темная тема):
103
189
 
104
- - `GET https://ollama.com/v1/models` публичный и, кроме стандартного `data[]`, отдаёт нестандартный `models[]` с контекстом, модальностями, уровнями reasoning, `visibility` и `supported_in_api`.
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
+ ![Настройки Ollama Cloud](media/visual-verification.png)
110
191
 
111
- ## Разработка
192
+ ## Команды CLI
112
193
 
113
194
  ```bash
114
- npm run typecheck
115
- npm test
116
- npm run build
117
- npm run check
118
- node scripts/probe.mjs
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
- - Embeddings не поддерживаются: ни одна облачная модель не объявляет capability `embedding`.
125
- - Файловые вложения передаются текстовыми handle-заглушками, не байтами.
126
- - Стоимость — оценка по опубликованному тарифу; финальным авторитетом остаётся gateway.
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
- DeepSeek Harness(dsh)的 **Ollama Cloud** 模型提供方插件。
3
+ <div align="center">
4
4
 
5
- 插件注册一个路由 `ollama-cloud`(`https://ollama.com`),支持两种传输协议:
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
- 重启 dsh,然后在模型列表中选择 **Ollama Cloud**。
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
- transport: native # native | openai-chat
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` 外的所有字段都是 volatile,可直接在 dsh 设置中编辑。
60
-
61
- ### 密钥
141
+ 除 `apiKey` 外的所有配置项均可在 DSH 设置页直接修改。
62
142
 
63
- 1. `config.apiKey`:仅用于 composition,`role('secret')`。
64
- 2. dsh 凭据服务中的 `apiKeyEnv`(默认 `OLLAMA_API_KEY`)。
65
- 3. 启动环境变量。
143
+ ### 密钥配置
66
144
 
67
- 在 <https://ollama.com/settings/keys> 创建密钥,密钥不会过期。云端只接受 `Authorization: Bearer`,不接受 `x-api-key`。
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
- 在 **设置 → Ollama Cloud → 账号** 中添加账号:填写名称与凭据引用(如 `OLLAMA_API_KEY_2`),粘贴密钥并保存。轮换发生在流式输出之前;被拒绝的密钥进入冷却,请求由下一个可用密钥继续。冷却信息保存在 `~/.dsh/storages/dsh-ollama/cooldowns.json`,仅使用 SHA-256 指纹,不写入原始密钥。
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
- 第一个匹配的 glob 优先使用指定账号,其余账号仍作后备。
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
- `/api/usage` 限制为**每位用户每分钟 10 次请求**,因此余额缓存 60 秒、用量缓存 120 秒、失败缓存 30 秒,不做后台轮询。配额不可用不影响聊天。
161
+ DSH Desktop(暗黑主题)中的 Ollama Cloud 设置与用量面板:
89
162
 
90
- ## 命令
163
+ ![Ollama Cloud 设置](media/visual-verification.png)
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
- npm run typecheck
115
- npm test
116
- npm run build
117
- npm run check
118
- node scripts/probe.mjs
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;不注册本地 `http://localhost:11434`。
124
- - 不支持 embeddings:实时目录中没有模型声明 `embedding` 能力。
125
- - 文件附件以确定的文本句柄传递,而不是内联字节。
126
- - 费用为公开价目表的估算值,最终以网关为准。
127
- - UI 需要 web profile;TUI 保留 `/ollama` 命令与模型路由。
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)。参见 [LICENSE](./LICENSE) 与 [NOTICE](./NOTICE)。
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.2",
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
+ }