dsh-local-ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/LICENSE +201 -0
- package/README.es.md +211 -0
- package/README.hi.md +211 -0
- package/README.md +211 -0
- package/README.pt.md +211 -0
- package/README.zh.md +211 -0
- package/THIRD_PARTY_NOTICES.md +20 -0
- package/cordis.patch.yml +44 -0
- package/lib/index.js +1334 -0
- package/lib/types/adapter.d.ts +39 -0
- package/lib/types/adapter.d.ts.map +1 -0
- package/lib/types/adapter.js +190 -0
- package/lib/types/adapter.js.map +1 -0
- package/lib/types/config.d.ts +109 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/config.js +161 -0
- package/lib/types/config.js.map +1 -0
- package/lib/types/health.d.ts +64 -0
- package/lib/types/health.d.ts.map +1 -0
- package/lib/types/health.js +92 -0
- package/lib/types/health.js.map +1 -0
- package/lib/types/index.d.ts +43 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +232 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/ollama.d.ts +91 -0
- package/lib/types/ollama.d.ts.map +1 -0
- package/lib/types/ollama.js +184 -0
- package/lib/types/ollama.js.map +1 -0
- package/lib/types/route.d.ts +52 -0
- package/lib/types/route.d.ts.map +1 -0
- package/lib/types/route.js +119 -0
- package/lib/types/route.js.map +1 -0
- package/lib/types/sanitize.d.ts +58 -0
- package/lib/types/sanitize.d.ts.map +1 -0
- package/lib/types/sanitize.js +110 -0
- package/lib/types/sanitize.js.map +1 -0
- package/lib/types/serialize.d.ts +65 -0
- package/lib/types/serialize.d.ts.map +1 -0
- package/lib/types/serialize.js +149 -0
- package/lib/types/serialize.js.map +1 -0
- package/lib/types/translate.d.ts +57 -0
- package/lib/types/translate.d.ts.map +1 -0
- package/lib/types/translate.js +169 -0
- package/lib/types/translate.js.map +1 -0
- package/lib/types/version.d.ts +6 -0
- package/lib/types/version.d.ts.map +1 -0
- package/lib/types/version.js +6 -0
- package/lib/types/version.js.map +1 -0
- package/package.json +141 -0
- package/src/adapter.ts +158 -0
- package/src/config.ts +243 -0
- package/src/health.ts +133 -0
- package/src/index.ts +279 -0
- package/src/ollama.ts +274 -0
- package/src/route.ts +127 -0
- package/src/sanitize.ts +114 -0
- package/src/serialize.ts +178 -0
- package/src/translate.ts +205 -0
- package/src/version.ts +5 -0
package/README.hi.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# ЁЯдЦ dsh-local-ai
|
|
4
|
+
|
|
5
|
+
**DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп-рдореЙрдбрд▓ (Ollama) рдПрдХреАрдХрд░рдгред**
|
|
6
|
+
|
|
7
|
+
*рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рдЦреЛрдЬреЗрдВ, рдЦреАрдВрдЪреЗрдВ, рд╣рдЯрд╛рдПрдБ рдФрд░ рдЬрд╛рдБрдЪреЗрдВ; рдХрд╛рд░реНрдп-рдкреНрд░рдХрд╛рд░ рдпрд╛ рдХреАрд╡рд░реНрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рдкрд░ рд░реВрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рд╕реНрд╡рддрдГ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ; `/ollama` рд╕реЗ рдПрдХ-рдЭрдЯрдХреЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕рд╛рд░рд╛рдВрд╢ рдкрд╛рдПрдБред*
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/topics/dsh-plugin)
|
|
11
|
+
[](#)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-local-ai/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-local-ai/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-local-ai)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-local-ai)
|
|
16
|
+
|
|
17
|
+
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README.zh.md) ┬╖ [Espa├▒ol](README.es.md) ┬╖ [Portugu├кs](README.pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README.hi.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
| рд╕рддрд╣ | рд╕реНрдерд┐рддрд┐ |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.6` |
|
|
28
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
29
|
+
| Backend | [Ollama](https://ollama.com) (рд╕реНрдерд╛рдиреАрдп HTTP API + CLI рдЬрд╛рдБрдЪ) |
|
|
30
|
+
| Model | рдХреЗрд╡рд▓-рдкрд╛рда рд░реВрдЯ (`inputModalities: ['text']`); рдЯреВрд▓ рдХреЙрд▓ рд╡ рдкрд░рд┐рдгрд╛рдо рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ |
|
|
31
|
+
|
|
32
|
+
## What you get
|
|
33
|
+
|
|
34
|
+
`dsh-local-ai` Ollama рдХреЛ DeepSeek Harness рдореЗрдВ рдПрдХ рдкреНрд░рдердо-рд╢реНрд░реЗрдгреА рд╕реНрдерд╛рдиреАрдп рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рддрд╛ рд╣реИ:
|
|
35
|
+
|
|
36
|
+
- **рдЦреЛрдЬ рд╡ рдкреНрд░рдмрдВрдзрди** тАФ `ollama_list` (рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдореЙрдбрд▓, рдЪрд╛рд▓реВ рдореЙрдбрд▓, рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧ), `ollama_show` (рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдХрд╛рд░, рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди, рд╕рдВрджрд░реНрдн рд▓рдВрдмрд╛рдИ), `ollama_pull`, рдФрд░ `ollama_remove`ред
|
|
37
|
+
- **рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ** тАФ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдХреНрд░рд┐рдпрддрд╛ (`ollama` CLI рдХреЗ рдЬрд╝рд░рд┐рдП) рдФрд░ API рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (`/api/version` рдХреЗ рдЬрд╝рд░рд┐рдП), рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред
|
|
38
|
+
- **рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдбрд╛рдкреНрдЯрд░** тАФ `ollama` рдкреНрд░рджрд╛рддрд╛ рд░реВрдЯ `ctx.llm.registerAdapter` (`LlmAdapter`) рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЙрдбрд▓ рдореИрдкрд┐рдВрдЧ рдФрд░ temperature / max-tokens / stop рдЕрдиреБрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИред
|
|
39
|
+
- **рд╕реНрдерд╛рдиреАрдп рд░реВрдЯрд┐рдВрдЧ** тАФ `model_route` рдирд┐рдпрдо рдХрд╛рд░реНрдп-рдкреНрд░рдХрд╛рд░ (`purpose`), рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджреА рдХреАрд╡рд░реНрдб, рдпрд╛ `always` рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рдкрд░ рд░реВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдЯ рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рддрдГ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВред
|
|
40
|
+
- **`/ollama` рдХрдорд╛рдВрдб** тАФ рдПрдХ-рдЭрдЯрдХреЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕рд╛рд░рд╛рдВрд╢: рдореЙрдбрд▓, рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧ, рд╕реНрд╡рд╛рд╕реНрдереНрдп рдФрд░ рд╕реБрдЭрд╛рд╡ред
|
|
41
|
+
- **рд╢реВрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛, HTTP рдкрд╣рд▓реЗ** тАФ рд╕рдм рдХреБрдЫ Ollama рдХреА HTTP API рд╕реЗ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ (CLI рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП); рдХреЛрдИ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдВрдбрд▓ рдирд╣реАрдВ рдХреА рдЬрд╛рддреАред
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
request (loop)
|
|
45
|
+
тФВ llm/stream рдЬрд▓рдкреНрд░рдкрд╛рдд
|
|
46
|
+
тФЬтФА рдирд┐рдпрдо рдореЗрд▓? тФАтФАтЦ╢ ollama рдкрд░ рд░реВрдЯ тФАтФАтЦ╢ Ollama /api/chat (NDJSON рд╕реНрдЯреНрд░реАрдо)
|
|
47
|
+
тФВ тФФтФА рдкрд╣рд▓реЗ рд╡рд┐рдлрд▓ тФАтЦ╢ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╡рд╛рдкрд╕ (next())
|
|
48
|
+
тФФтФА рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВ тФАтФАтЦ╢ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛
|
|
49
|
+
tools тФАтФАтЦ╢ /api/tags ┬╖ /api/ps ┬╖ /api/show ┬╖ /api/pull ┬╖ /api/delete
|
|
50
|
+
health тФАтФАтЦ╢ /api/version (API) + ollama list (рдкреНрд░рдХреНрд░рд┐рдпрд╛)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
# 1. рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдВрдбрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
|
|
57
|
+
dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"
|
|
58
|
+
|
|
59
|
+
# рдпрд╛ npm рд╕реЗ (рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг)
|
|
60
|
+
dsh plugin --profile web add dsh-local-ai
|
|
61
|
+
|
|
62
|
+
# 2. рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ (cordis.yml) рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ
|
|
63
|
+
dsh --profile web
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
рдиреНрдпреВрдирддрдо рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдирд┐рдпрдо `cordis.patch.yml` рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ):
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
- insert:
|
|
70
|
+
- id: dsh-local-ai
|
|
71
|
+
name: dsh-local-ai
|
|
72
|
+
config:
|
|
73
|
+
route:
|
|
74
|
+
- model: llama3.2
|
|
75
|
+
keywords: ["confidential", "offline"]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
рдлрд┐рд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдкрдВрдХреНрддрд┐ рдорд╛рдЙрдВрдЯ рд╣реБрдИ:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Install & uninstall
|
|
85
|
+
|
|
86
|
+
- **git рдЪреИрдирд▓** (рдирд╡реАрдирддрдо `main`): `dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"` тАФ `prepare` рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рд╕реЗ рдмрдирд╛рддреА рд╣реИред
|
|
87
|
+
- **npm рдЪреИрдирд▓** (рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг): `dsh plugin --profile web add dsh-local-ai`ред
|
|
88
|
+
- **tarball рдЪреИрдирд▓**: рдЗрд╕ рд░рд┐рдкреЛ рдореЗрдВ `pnpm pack`, рдлрд┐рд░ `dsh plugin --profile web add ./dsh-local-ai-<version>.tgz`ред
|
|
89
|
+
- **рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓**: `dsh plugin --profile web remove dsh-local-ai` (рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреИрдЪ рд╕реЗ рдкрдВрдХреНрддрд┐ рд╣рдЯрд╛рдПрдБ)ред
|
|
90
|
+
|
|
91
|
+
> рдпрджрд┐ pnpm рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП `ERR_PNPM_IGNORED_BUILDS` рджрд┐рдЦрд╛рдП, рддреЛ рдЕрдкрдиреЗ `pnpm-workspace.yaml` рдореЗрдВ `allowBuilds: { esbuild: true }` рдЬреЛрдбрд╝реЗрдВ тАФ `dsh` CLI рд╕рдЯреАрдХ рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
|
|
92
|
+
|
|
93
|
+
## Configuration
|
|
94
|
+
|
|
95
|
+
рд╕рднреА рдЯреНрдпреВрдиреЗрдмрд▓ Schemastery `Config` рдлрд╝реАрд▓реНрдб рд╣реИрдВ (cordis.yml рд╕реЗ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред id-рд▓рдХреНрд╖рд┐рдд рдУрд╡рд░рд░рд╛рдЗрдб рдкреВрд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ тАФ рдЬрд┐рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛ рдЙрдиреНрд╣реЗрдВ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦреЗрдВред `cordis.patch.yml` рд╣рд░ рдХреБрдВрдЬреА рдХреЛ рдЗрдирд▓рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
|
|
96
|
+
|
|
97
|
+
| Key | Default | Meaning |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `baseURL` | `http://127.0.0.1:11434` | Ollama HTTP API рдЖрдзрд╛рд░ URL; `/api/*` рдкрде рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ |
|
|
100
|
+
| `requestTimeoutMs` | `30000` | рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз HTTP рдЯрд╛рдЗрдордЖрдЙрдЯ (рдорд┐рд▓реАрд╕реЗрдХрдВрдб) |
|
|
101
|
+
| `graceMs` | `15000` | рд╕реНрд╡рд╛рд╕реНрдереНрдп-рдЬрд╛рдБрдЪ CLI рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рд╕рдорд╛рдкреНрддрд┐ рдХреА рдЫреВрдЯ |
|
|
102
|
+
| `defaultContextWindow` | `8192` | рдЬрдм рдореЙрдбрд▓ рдХрд╛ рдХреЛрдИ рд╕рдЯреАрдХ рдорд╛рди рди рд╣реЛ рддреЛ рд╕рдВрджрд░реНрдн рдХреНрд╖рдорддрд╛ |
|
|
103
|
+
| `maxTokens` | `4096` | рдЬрдм рдореЙрдбрд▓ рдХрд╛ рдХреЛрдИ рд╕рдЯреАрдХ рдорд╛рди рди рд╣реЛ рддреЛ рдкреНрд░рддрд┐-рдЕрдиреБрд░реЛрдз рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдорд╛ |
|
|
104
|
+
| `temperature` | *(none)* | рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рддрд╛рдкрдорд╛рди (0..2); рдЫреЛрдбрд╝рдиреЗ рдкрд░ рдкреНрд░рджрд╛рддрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд╣рддрд╛ рд╣реИ |
|
|
105
|
+
| `models` | `[]` | Harness-рджреГрд╢реНрдп рдирд╛рдо тЖТ Ollama рдореЙрдбрд▓ рдореИрдкрд┐рдВрдЧ |
|
|
106
|
+
| `models[].name` | *(required)* | Harness-рджреГрд╢реНрдп рдореЙрдбрд▓ рдирд╛рдо (`GenerateOptions.model`) |
|
|
107
|
+
| `models[].model` | `= name` | Ollama рдореЙрдбрд▓ id |
|
|
108
|
+
| `models[].contextWindow` | *(none)* | рдкреНрд░рддрд┐-рдореЙрдбрд▓ рд╕рдВрджрд░реНрдн рдХреНрд╖рдорддрд╛ |
|
|
109
|
+
| `models[].maxTokens` | *(none)* | рдкреНрд░рддрд┐-рдореЙрдбрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдорд╛ |
|
|
110
|
+
| `models[].temperature` | *(none)* | рдкреНрд░рддрд┐-рдореЙрдбрд▓ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рддрд╛рдкрдорд╛рди |
|
|
111
|
+
| `route` | `[]` | рд╕реНрдерд╛рдиреАрдп-рдореЙрдбрд▓ рд░реВрдЯрд┐рдВрдЧ рдирд┐рдпрдо (рдкрд╣рд▓рд╛ рдореЗрд▓ рдЬреАрддрддрд╛ рд╣реИ) |
|
|
112
|
+
| `route[].model` | *(required)* | рд▓рдХреНрд╖реНрдп рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рдирд╛рдо |
|
|
113
|
+
| `route[].purpose` | *(none)* | рдХрд╛рд░реНрдп-рдкреНрд░рдХрд╛рд░ рдореЗрд▓: `compaction` / `session-title` |
|
|
114
|
+
| `route[].keywords` | `[]` | рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджреА рдЕрдиреБрд░реЛрдз рдХреАрд╡рд░реНрдб |
|
|
115
|
+
| `route[].always` | `false` | рд╣рд░ рдкрд╛рддреНрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдЗрд╕ рдореЙрдбрд▓ рдкрд░ рд░реВрдЯ рдХрд░реЗрдВ |
|
|
116
|
+
|
|
117
|
+
## Tools & surfaces
|
|
118
|
+
|
|
119
|
+
| рд╕рддрд╣ | рдкреНрд░рдХрд╛рд░ | рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `ollama_list` | рдЯреВрд▓ | рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдореЙрдбрд▓, рдЪрд╛рд▓реВ рдореЙрдбрд▓ рдФрд░ рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ |
|
|
122
|
+
| `ollama_show` | рдЯреВрд▓ | рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдХрд╛рд░, рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди, рд╕рдВрджрд░реНрдн рд▓рдВрдмрд╛рдИ, family, format рджрд┐рдЦрд╛рддрд╛ рд╣реИ |
|
|
123
|
+
| `ollama_pull` | рдЯреВрд▓ | рдореЙрдбрд▓ рдЦреАрдВрдЪрддрд╛ (рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛) рд╣реИ |
|
|
124
|
+
| `ollama_remove` | рдЯреВрд▓ | рдореЙрдбрд▓ рд╣рдЯрд╛рддрд╛ рд╣реИ |
|
|
125
|
+
| `ollama_health` | рдЯреВрд▓ | рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдХреНрд░рд┐рдпрддрд╛ + API рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ |
|
|
126
|
+
| `/ollama` | рдХрдорд╛рдВрдб | рдПрдХ-рдЭрдЯрдХреЗ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕рд╛рд░рд╛рдВрд╢ (рдореЙрдбрд▓ + рд╕реНрд╡рд╛рд╕реНрдереНрдп + рд╕реБрдЭрд╛рд╡) |
|
|
127
|
+
|
|
128
|
+
**рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ** рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ host рд╕реЗрд╡рд╛рдПрдБ `ctx.llm` (`registerAdapter`), `ctx.tools`, `ctx.subprocess` (CLI рдЬрд╛рдБрдЪ), рдФрд░ `ctx.commands`ред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ `llm/stream` рдХреЛ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ тАФ рд░реВрдЯрд┐рдВрдЧ рд╢реНрд░реЛрддрд╛ рддрдм рддрдХ рдЖрдЧреЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ (`next()`) рдЬрдм рддрдХ рдХреЛрдИ рдирд┐рдпрдо рдореЗрд▓ рди рдЦрд╛рдПред
|
|
129
|
+
|
|
130
|
+
## Permissions & data
|
|
131
|
+
|
|
132
|
+
- **рдЕрдиреБрдорддрд┐рдпрд╛рдБ**: рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП Ollama рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП `network:outbound`; рдХреЛрдИ рдиреЗрдЯрд┐рд╡ рдХреЛрдб рдирд╣реАрдВ, рдХреЛрдИ рдлрд╝рд╛рдЗрд▓-рд╕рд┐рд╕реНрдЯрдо рдкрд╣реБрдБрдЪ рдирд╣реАрдВ, рдХреЛрдИ рд╕реНрдЯреЛрд░реЗрдЬ рдирд╣реАрдВред
|
|
133
|
+
- **рдбреЗрдЯрд╛**: рдореЙрдбрд▓ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣рд░ рдореЙрдбрд▓ рд╕реВрдЪреА/рд╡рд┐рд╡рд░рдг, рд╕реНрд╡рд╛рд╕реНрдереНрдп рддрдереНрдп рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВ (рдПрдВрдбрдкреЙрдЗрдВрдЯ userinfo рд╡ рдЧреБрдкреНрдд рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдг рд╣рдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓рдВрдмрд╛рдИ рд╕реАрдорд┐рдд рд╣реЛрддреА рд╣реИ)ред рдЯреВрд▓ рд╡ рдХрдорд╛рдВрдб рдкрд░рд┐рдгрд╛рдо harness рдХреЗ рдЕрдкрдиреЗ tool/command рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдЧ рд╣реЛрддреЗ рд╣реИрдВред
|
|
134
|
+
- **рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓**: рдкреНрд▓рдЧрдЗрди рдХреЛрдИ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдпрд╛ рдкрдврд╝рддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕реНрдерд╛рдиреАрдп `ollama list` рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред
|
|
135
|
+
|
|
136
|
+
## Security boundaries
|
|
137
|
+
|
|
138
|
+
- **рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдИ рдкреБрдирдГ-рд░реВрдЯрд┐рдВрдЧ рдирд╣реАрдВ** тАФ `route` рд╕реВрдЪреА рддрдм рддрдХ рдЦрд╛рд▓реА рд╣реИ рдЬрдм рддрдХ рдЖрдк рд╕рд╣рдорддрд┐ рди рджреЗрдВ; рдЕрдиреБрд░реЛрдз рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рддрдХ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо рдпрд╛ `ollama` рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЪрдпрди рд╕реЗ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред
|
|
139
|
+
- **рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝** тАФ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрддреЗ рд╡ рд╕реНрдерд╛рдиреАрдп рдкрде рдЯреВрд▓ рдЖрдЙрдЯрдкреБрдЯ, `/ollama` рдХрдорд╛рдВрдб рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред
|
|
140
|
+
- **рд╢реВрдиреНрдп рдмрдВрдбрд▓ рдореЙрдбрд▓** тАФ рдбрд╛рдЙрдирд▓реЛрдб рд╡ рд╕реНрдЯреЛрд░реЗрдЬ Ollama рдХреА рдЕрдкрдиреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ; рдкреИрдХреЗрдЬ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ред
|
|
141
|
+
- **рд╡рд┐рдлрд▓рддрд╛ рдЬрд╝реЛрд░рджрд╛рд░, рд╡рд┐рдлрд▓рддрд╛ рд╕реАрдорд┐рдд** тАФ рдЕрдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧ рдорд╛рдЙрдВрдЯ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░рддрд╛ рд╣реИ; рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдлрд▓ рд╕реНрдерд╛рдиреАрдп рд░реВрдЯ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИ (`next()`), рдЗрд╕рд▓рд┐рдП рдмрдВрдж Ollama рдХрднреА рдмрд╛рддрдЪреАрдд рдХреЛ рдЕрдЯрдХрд╛рддрд╛ рдирд╣реАрдВред
|
|
142
|
+
- **рдореЙрдбрд▓-рджреГрд╢реНрдп тЯ║ рд▓реЙрдЧ** тАФ рд░реВрдЯрд┐рдВрдЧ рдХреЗрд╡рд▓ рдпрд╣ рдмрджрд▓рддреА рд╣реИ рдХрд┐ рдХреМрди-рд╕рд╛ рдкреНрд░рджрд╛рддрд╛ рдЕрдиреБрд░реЛрдз рд╕реЗрд╡рд╛ рдХрд░рддрд╛ рд╣реИ (assistant рд╕рдВрджреЗрд╢ рдЕрдкрдиреА `ollama` рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИ); рдХреЛрдИ рдирдпрд╛ рдореЙрдбрд▓-рджреГрд╢реНрдп рдЗрдирдкреБрдЯ рдирд╣реАрдВ рдЧрдврд╝рд╛ рдЬрд╛рддрд╛ред
|
|
143
|
+
|
|
144
|
+
## Known limitations
|
|
145
|
+
|
|
146
|
+
- **рдХреЗрд╡рд▓ rc.6** тАФ `@deepseek-ai/dsh@0.1.0-rc.6` рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╡рд┐рдХрд╕рд┐рдд рд╡ рдкрд░реАрдХреНрд╖рд┐рдд; рдирдП harness рдмреЗрд╕рд▓рд╛рдЗрди рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ, рдкрд░ рдорд╛рд╕рд┐рдХ compat workflow рдЙрдиреНрд╣реЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
|
|
147
|
+
- **рдХреЗрд╡рд▓-рдкрд╛рда рд░реВрдЯ** тАФ рдЫрд╡рд┐ рд╕рд╛рдордЧреНрд░реА рдЕрд╕реНрд╡реАрдХреГрдд рд╣реЛрддреА рд╣реИ (`UNSUPPORTED_CONTENT`); рдорд▓реНрдЯреАрдореЙрдбрд▓ рд╕реНрдерд╛рдиреАрдп рдореЙрдбрд▓ рдЕрднреА рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред
|
|
148
|
+
- **рдордзреНрдп-рд╕реНрдЯреНрд░реАрдо рд╡рд╛рдкрд╕реА** тАФ рдПрдХ рдмрд╛рд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдЯ рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗ, рддреЛ рдмрд╛рдж рдХреА рд╡рд┐рдлрд▓рддрд╛ рдЖрдЧреЗ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ (рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓реА рдЬрд╛рддреА); рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЯреЛрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд▓реМрдЯрддреА рд╣реИред
|
|
149
|
+
|
|
150
|
+
## Development
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
pnpm install # node ^22.19 || >=24
|
|
154
|
+
pnpm run typecheck # tsc: src + рдкрд░реАрдХреНрд╖рдг, рдкреНрд░рдХрд╛рд╢рд┐рдд 0.1.0-rc.6 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз
|
|
155
|
+
pnpm run typecheck:ci # рд╕рдЦреНрдд tsc, рдкреНрд░рдХрд╛рд╢рд┐рдд rc.6 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд░реБрджреНрдз (skipLibCheck рдмрдВрдж)
|
|
156
|
+
pnpm test # vitest: рд╡рд╛рд╕реНрддрд╡рд┐рдХ Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess рд╕реАрдо
|
|
157
|
+
pnpm run test:coverage # рдХрд╡рд░реЗрдЬ рджреНрд╡рд╛рд░ (90/80/90/90)
|
|
158
|
+
pnpm run build # tsdown рдмрдВрдбрд▓ + tsc рдШреЛрд╖рдгрд╛рдПрдБ (lib/)
|
|
159
|
+
pnpm run verify:self-contained # рдирд┐рд░реНрднрд░рддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ registry рд╕реЗ рд╣рд▓ рд╣реЛрддреЗ рд╣реИрдВ
|
|
160
|
+
pnpm run verify:artifacts # рдирд┐рд░реНрдорд┐рдд ESM рдлрд▓рдХ + рдмрдВрдбрд▓ рдкреИрдЪ рдореМрдЬреВрдж
|
|
161
|
+
node scripts/check-readme-sync.mjs # рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ README рд╕рдордиреНрд╡рдп рджреНрд╡рд╛рд░
|
|
162
|
+
pnpm pack # рдкреНрд░рдХрд╛рд╢рд┐рдд tarball
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Topics
|
|
166
|
+
|
|
167
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
|
|
168
|
+
|
|
169
|
+
## Contributors
|
|
170
|
+
|
|
171
|
+
- [@PerryLink](https://github.com/PerryLink) тАФ рдирд┐рд░реНрдорд╛рддрд╛ рд╡ рдЕрдиреБрд░рдХреНрд╖рдХ: рдПрдбрд╛рдкреНрдЯрд░, рд░реВрдЯрд┐рдВрдЧ, рдЯреВрд▓, рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ, рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдкрд╛рдБрдЪ-рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред
|
|
172
|
+
|
|
173
|
+
## PerryLink DSH Plugin Family
|
|
174
|
+
|
|
175
|
+
рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ [PerryLink](https://github.com/PerryLink) рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░рдХреНрд╖рд┐рдд [29 DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ](https://github.com/PerryLink) рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдХреА рднреА рдХрд░реЗрдВрдЧреЗ:
|
|
176
|
+
|
|
177
|
+
| Plugin | One-liner |
|
|
178
|
+
|---|---|
|
|
179
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | рдЕрдиреБрдореЛрджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рджреВрд╕рд░реЗ рдореЙрдбрд▓ рд╕реЗ рд╕реНрд╡рддрдГ-рд╕рдореАрдХреНрд╖рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рдлрд▓-рдмрдВрдж |
|
|
180
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Web UI рд╕рд╛рдЗрдбрдмрд╛рд░, рд╕рдВрджреЗрд╢ рдФрд░ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдпреА рдкреГрд╖реНрдарднреВрдорд┐ рдЪрд╛рдЗрд▓реНрдб рдПрдЬреЗрдВрдЯ |
|
|
181
|
+
| [dsh-budget](https://github.com/PerryLink/dsh-budget) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдкреНрд░рд╢рд╛рд╕рди: рдмрдЬрдЯ, рдХрд╛рд░реНрдмрди рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рдПрдХ рдкреИрдирд▓ рдореЗрдВред |
|
|
182
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-рд╕рдорддреБрд▓реНрдп: рд╕реНрдиреИрдкрд╢реЙрдЯ, рд╕рддреНрд░ рдлреЛрд░реНрдХ, рдПрдХ-рдмрд╛рд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрди |
|
|
183
|
+
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Claude Code рд╕рддреНрд░, рд╕реНрдореГрддрд┐, skills рдФрд░ CLAUDE.md рдХреЛ DSH рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ |
|
|
184
|
+
| [dsh-click](https://github.com/PerryLink/dsh-click) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдиреЗрдЯрд┐рд╡ рдбреЗрд╕реНрдХрдЯреЙрдк рдирд┐рдпрдВрддреНрд░рдг тАФ Windows рдкрд╣рд▓реЗред |
|
|
185
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Web рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓-рд╢реИрд▓реА рдЗрдирдкреБрдЯ рдЗрддрд┐рд╣рд╛рд╕: рддреАрд░, Ctrl+R рдЦреЛрдЬ |
|
|
186
|
+
| [dsh-defend](https://github.com/PerryLink/dsh-defend) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ-рдЗрдВрдЬреЗрдХреНрд╢рди, рдЬреЗрд▓рдмреНрд░реЗрдХ рдФрд░ рд╕реАрдХреНрд░реЗрдЯ-рд▓реАрдХ рд░рдХреНрд╖рд╛ред |
|
|
187
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ-рдЕрдиреБрд╢рд╛рд╕рди рдЧрд╛рд░реНрдб: рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдкреВрдЫрддрд╛рдЫ, рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░, рд╡рд┐рд░реЛрдзреА рд╕рдореАрдХреНрд╖рд╛ |
|
|
188
|
+
| [dsh-draw](https://github.com/PerryLink/dsh-draw) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рд╕реНрдереИрддрд┐рдХ-рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд░реВрдЯрд┐рдВрдЧред |
|
|
189
|
+
| [dsh-fast](https://github.com/PerryLink/dsh-fast) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓-рдкрдарди рдкреНрд░рджрд░реНрд╢рди рдирд┐рджрд╛рдиред |
|
|
190
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | DSH рдХреЗ рд▓рд┐рдП GitHub PR/issues рдПрдХреАрдХрд░рдг, рд╣рд░ рд▓реЗрдЦрди рдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд |
|
|
191
|
+
| [dsh-library](https://github.com/PerryLink/dsh-library) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреНрдЮрд╛рдирдХреЛрд╢ред |
|
|
192
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп-рдореЙрдбрд▓ (Ollama) рдПрдХреАрдХрд░рдгред |
|
|
193
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | рднрд╛рд╖рд╛ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ LSP рдирд┐рджрд╛рди, рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдкреВрд░реНрдгрддрд╛, рдХреЛрдб рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдирд╛рдо рдмрджрд▓рдирд╛ |
|
|
194
|
+
| [dsh-mask](https://github.com/PerryLink/dsh-mask) | DeepSeek Harness рдХреЗ рд▓рд┐рдП PII рдорд╛рд╕реНрдХрд┐рдВрдЧ рдорд┐рдбрд▓рд╡реЗрдпрд░ тАФ рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдЕрдирд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдкрд░рдд рдкрд░ рдмрд╣рд╛рд▓ рдХрд░рддрд╛ рд╣реИред |
|
|
195
|
+
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | рдХреЗрд╡рд▓-рдкрдарди MCP рд░рдирдЯрд╛рдЗрдо рдкреИрдирд▓: /mcp рдХрдорд╛рдВрдб + рд╕реНрдерд┐рддрд┐, рдЯреВрд▓ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдЯреИрдм |
|
|
196
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | рдЕрдиреБрдореЛрджрди-рджреНрд╡рд╛рд░рд┐рдд рдХреНрд░реЙрд╕-рд╕рддреНрд░ рд╕реНрдореГрддрд┐: ctx.memory seam + SQLite + memory рдЯреВрд▓ |
|
|
197
|
+
| [dsh-observe](https://github.com/PerryLink/dsh-observe) | DeepSeek Harness рдХреЗ рд▓рд┐рдП OpenTelemetry рдФрд░ Langfuse рдЕрд╡рд▓реЛрдХрдиреАрдпрддрд╛ рдирд┐рд░реНрдпрд╛рддрдХред |
|
|
198
|
+
| [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-рд╕рдорддреБрд▓реНрдп рд░рдирдЯрд╛рдЗрдо рд╢реИрд▓реА рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ |
|
|
199
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-рд╢реИрд▓реА рдШреЛрд╖рдгрд╛рддреНрдордХ allow/deny/ask рдЕрдиреБрдорддрд┐ рдирд┐рдпрдо, рдСрдбрд┐рдЯ рдХреЗ рд╕рд╛рде |
|
|
200
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | рдорд╛рдБрдЧ-рдкрд░ рдПрдЬреЗрдВрдЯ рд╕реНрдХрд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрди-рд╡рд┐рдХрд╛рд╕ рдЬреНрдЮрд╛рдирдХреЛрд╢ |
|
|
201
|
+
| [dsh-score](https://github.com/PerryLink/dsh-score) | DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдЖрдпрд╛рдореА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реНрдХреЛрд░рд┐рдВрдЧред |
|
|
202
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Web рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рд╕рддреНрд░ рдкрд┐рди рдХрд░реЗрдВ, рд╕реНрдерд╛рдпреА рдХреНрд░рдо рдХреЗ рд╕рд╛рде |
|
|
203
|
+
| [dsh-session-sync](https://github.com/PerryLink/dsh-session-sync) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрд░ рд╕рд┐рдВрдХ тАФ рдЖрдкрдХреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рд╕рдорд░реНрдкрд┐рдд git рдорд┐рд░рд░ред |
|
|
204
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | рд╕реБрд░рдХреНрд╖рд╛-рдСрдбрд┐рдЯ рд╕реНрдХрд┐рд▓ рдкреИрдХ: рд╕реАрдХреНрд░реЗрдЯ рд╕реНрдХреИрди, рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЖрдкреВрд░реНрддрд┐-рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдореАрдХреНрд╖рд╛ |
|
|
205
|
+
| [dsh-talk](https://github.com/PerryLink/dsh-talk) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рдЖрд╡рд╛рдЬрд╝-рдкреНрд░рдердо рд╕рддреНрд░ рд▓реВрдк: рдмреЛрд▓реЗрдВ рдФрд░ рдЙрддреНрддрд░ рд╕реБрдиреЗрдВред |
|
|
206
|
+
| [dsh-test-drive](https://github.com/PerryLink/dsh-test-drive) | DeepSeek Harness рдкреНрд▓рдЧрдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреГрдердХ рдЗрдВрд╕реНрдЯреЙрд▓-рдФрд░-рд╕реНрдореЛрдХ рдкрд░реАрдХреНрд╖рдгред |
|
|
207
|
+
| [dsh-translate](https://github.com/PerryLink/dsh-translate) | DeepSeek Harness рдХреЗ рд▓рд┐рдП рд╡реЗрдВрдбрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд╡рд╛рдж рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ JSON рдорд░рдореНрдорддред |
|
|
208
|
+
|
|
209
|
+
## License
|
|
210
|
+
|
|
211
|
+
[Apache License 2.0](LICENSE) ┬й 2026 dsh-local-ai contributors
|
package/README.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# ЁЯдЦ dsh-local-ai
|
|
4
|
+
|
|
5
|
+
**Local-model (Ollama) integration for DeepSeek Harness.**
|
|
6
|
+
|
|
7
|
+
*Discover, pull, remove, and inspect local models, route requests to them by task type or keyword with automatic fallback to the cloud, and get a one-shot status overview via `/ollama`.*
|
|
8
|
+
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/topics/dsh-plugin)
|
|
11
|
+
[](#)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-local-ai/actions)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-local-ai/releases)
|
|
14
|
+
[](https://www.npmjs.com/package/dsh-local-ai)
|
|
15
|
+
[](https://www.npmjs.com/package/dsh-local-ai)
|
|
16
|
+
|
|
17
|
+
[English](README.md) ┬╖ [чоАф╜Уф╕нцЦЗ](README.zh.md) ┬╖ [Espa├▒ol](README.es.md) ┬╖ [Portugu├кs](README.pt.md) ┬╖ [рд╣рд┐рдиреНрджреА](README.hi.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
| Surface | Status |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Harness | DeepSeek Harness `0.1.0-rc.6` |
|
|
28
|
+
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
29
|
+
| Backend | [Ollama](https://ollama.com) (local HTTP API + CLI probe) |
|
|
30
|
+
| Model | Text-only route (`inputModalities: ['text']`); tool calls and tool results are supported |
|
|
31
|
+
|
|
32
|
+
## What you get
|
|
33
|
+
|
|
34
|
+
`dsh-local-ai` makes Ollama a first-class local provider in DeepSeek Harness:
|
|
35
|
+
|
|
36
|
+
- **Discovery & management** тАФ `ollama_list` (installed models, running models, disk usage), `ollama_show` (parameter size, quantization, context length), `ollama_pull`, and `ollama_remove`.
|
|
37
|
+
- **Health check** тАФ process liveness (via the `ollama` CLI) and API responsiveness (via `/api/version`), reported as two independent signals.
|
|
38
|
+
- **Official adapter** тАФ the `ollama` provider route is registered through `ctx.llm.registerAdapter` (`LlmAdapter`), with configurable model mapping and temperature / max-tokens / stop translation.
|
|
39
|
+
- **Local routing** тАФ `model_route` rules route requests to a local model by task type (`purpose`), case-insensitive keyword, or `always`, with automatic fallback to the cloud when the local route fails before producing content.
|
|
40
|
+
- **`/ollama` command** тАФ a one-shot status overview: models, disk usage, health, and suggestions.
|
|
41
|
+
- **Zero dependencies, HTTP first** тАФ everything talks to Ollama's HTTP API (the CLI is used only for the process probe); no model files are bundled.
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
request (loop)
|
|
45
|
+
тФВ llm/stream waterfall
|
|
46
|
+
тФЬтФА rule matches? тФАтФАтЦ╢ route to ollama тФАтФАтЦ╢ Ollama /api/chat (NDJSON stream)
|
|
47
|
+
тФВ тФФтФА fails first тФАтЦ╢ fall back to cloud (next())
|
|
48
|
+
тФФтФА no match тФАтФАтЦ╢ cloud provider
|
|
49
|
+
tools тФАтФАтЦ╢ /api/tags ┬╖ /api/ps ┬╖ /api/show ┬╖ /api/pull ┬╖ /api/delete
|
|
50
|
+
health тФАтФАтЦ╢ /api/version (API) + ollama list (process)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
# 1. install the bundle into your profile
|
|
57
|
+
dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"
|
|
58
|
+
|
|
59
|
+
# or from npm (published releases)
|
|
60
|
+
dsh plugin --profile web add dsh-local-ai
|
|
61
|
+
|
|
62
|
+
# 2. configure routing in your profile patch (cordis.yml) and restart
|
|
63
|
+
dsh --profile web
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Minimal routing configuration (the rule ships commented out in `cordis.patch.yml`):
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
- insert:
|
|
70
|
+
- id: dsh-local-ai
|
|
71
|
+
name: dsh-local-ai
|
|
72
|
+
config:
|
|
73
|
+
route:
|
|
74
|
+
- model: llama3.2
|
|
75
|
+
keywords: ["confidential", "offline"]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Then verify the row mounts:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Install & uninstall
|
|
85
|
+
|
|
86
|
+
- **git channel** (latest `main`): `dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"` тАФ the `prepare` script builds with production dependencies only.
|
|
87
|
+
- **npm channel** (published releases): `dsh plugin --profile web add dsh-local-ai`.
|
|
88
|
+
- **tarball channel**: `pnpm pack` in this repo, then `dsh plugin --profile web add ./dsh-local-ai-<version>.tgz`.
|
|
89
|
+
- **uninstall**: `dsh plugin --profile web remove dsh-local-ai` (or remove the row from the profile patch).
|
|
90
|
+
|
|
91
|
+
> If pnpm reports `ERR_PNPM_IGNORED_BUILDS` for this package, add `allowBuilds: { esbuild: true }` to your `pnpm-workspace.yaml` тАФ the `dsh` CLI prints the exact snippet.
|
|
92
|
+
|
|
93
|
+
## Configuration
|
|
94
|
+
|
|
95
|
+
All tunables are Schemastery `Config` fields (changeable from cordis.yml). An id-targeted override replaces the whole row тАФ restate every key you need. `cordis.patch.yml` documents each key inline.
|
|
96
|
+
|
|
97
|
+
| Key | Default | Meaning |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `baseURL` | `http://127.0.0.1:11434` | Ollama HTTP API base URL; `/api/*` paths are appended |
|
|
100
|
+
| `requestTimeoutMs` | `30000` | Per-request HTTP timeout (milliseconds) |
|
|
101
|
+
| `graceMs` | `15000` | Subprocess terminate grace for the health-check CLI probe |
|
|
102
|
+
| `defaultContextWindow` | `8192` | Context capacity used when a model has no exact value |
|
|
103
|
+
| `maxTokens` | `4096` | Per-request output cap used when a model has no exact value |
|
|
104
|
+
| `temperature` | *(none)* | Default sampling temperature (0..2); omitted leaves the provider default |
|
|
105
|
+
| `models` | `[]` | Harness-visible тЖТ Ollama model mappings |
|
|
106
|
+
| `models[].name` | *(required)* | Harness-visible model name (`GenerateOptions.model`) |
|
|
107
|
+
| `models[].model` | `= name` | Ollama model id |
|
|
108
|
+
| `models[].contextWindow` | *(none)* | Per-model context capacity |
|
|
109
|
+
| `models[].maxTokens` | *(none)* | Per-model output cap |
|
|
110
|
+
| `models[].temperature` | *(none)* | Per-model sampling temperature |
|
|
111
|
+
| `route` | `[]` | Local-model routing rules (first match wins) |
|
|
112
|
+
| `route[].model` | *(required)* | Target local model name |
|
|
113
|
+
| `route[].purpose` | *(none)* | Task type match: `compaction` / `session-title` |
|
|
114
|
+
| `route[].keywords` | `[]` | Case-insensitive request keywords |
|
|
115
|
+
| `route[].always` | `false` | Route every eligible request to this model |
|
|
116
|
+
|
|
117
|
+
## Tools & surfaces
|
|
118
|
+
|
|
119
|
+
| Surface | Kind | What it does |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `ollama_list` | tool | List installed models, running models, and disk usage |
|
|
122
|
+
| `ollama_show` | tool | Show parameter size, quantization, context length, family, format |
|
|
123
|
+
| `ollama_pull` | tool | Pull (download) a model |
|
|
124
|
+
| `ollama_remove` | tool | Remove a model |
|
|
125
|
+
| `ollama_health` | tool | Process liveness + API responsiveness |
|
|
126
|
+
| `/ollama` | command | One-shot status overview (models + health + suggestions) |
|
|
127
|
+
|
|
128
|
+
**Consumes** the public host services `ctx.llm` (`registerAdapter`), `ctx.tools`, `ctx.subprocess` (CLI probe), and `ctx.commands`. It registers no `llm/stream` short-circuit by default тАФ the routing listener passes through (`next()`) unless a rule matches.
|
|
129
|
+
|
|
130
|
+
## Permissions & data
|
|
131
|
+
|
|
132
|
+
- **Permissions**: `network:outbound` to the Ollama endpoint you configure; no native code, no filesystem access, no storage.
|
|
133
|
+
- **Data**: every model list/detail, health fact, and error message shown to the model or the user is sanitized (endpoint userinfo and secret query params dropped, control characters stripped, lengths bounded) before display. Tool and command results are logged by the harness's own tool/command seams.
|
|
134
|
+
- **Credentials**: the plugin stores and reads no credentials. It only issues HTTP requests to the endpoint you configure, plus the local `ollama list` process probe.
|
|
135
|
+
|
|
136
|
+
## Security boundaries
|
|
137
|
+
|
|
138
|
+
- **No re-routing by default** тАФ the `route` list is empty unless you opt in; a request reaches a local model only through an explicit rule or an explicit `ollama` provider selection.
|
|
139
|
+
- **Sanitize before display** тАФ endpoint addresses and local paths are sanitized before they reach tool output, the `/ollama` command, or error messages.
|
|
140
|
+
- **Zero bundled models** тАФ downloads and storage are Ollama's own responsibility; nothing is shipped in the package.
|
|
141
|
+
- **Failure loud, failure contained** тАФ invalid config fails the mount; a local route that fails before producing content falls back to the cloud (`next()`), so a down Ollama never bricks a conversation.
|
|
142
|
+
- **Model-visible тЯ║ logged** тАФ routing only changes which provider serves a request (the assistant message is logged with its `ollama` provenance); no new model-visible input is invented.
|
|
143
|
+
|
|
144
|
+
## Known limitations
|
|
145
|
+
|
|
146
|
+
- **rc.6 only** тАФ developed and tested against `@deepseek-ai/dsh@0.1.0-rc.6`; newer harness baselines are expected to work but are verified by the monthly compat workflow.
|
|
147
|
+
- **Text-only route** тАФ image content is rejected (`UNSUPPORTED_CONTENT`); multimodal local models are not wired up yet.
|
|
148
|
+
- **Mid-stream fallback** тАФ once a local route has started producing content, a later failure is forwarded (not retracted); only a failure before the first token falls back to the cloud.
|
|
149
|
+
|
|
150
|
+
## Development
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
pnpm install # node ^22.19 || >=24
|
|
154
|
+
pnpm run typecheck # tsc: src + tests against the published 0.1.0-rc.6 types
|
|
155
|
+
pnpm run typecheck:ci # strict tsc against published rc.6 types (skipLibCheck off)
|
|
156
|
+
pnpm test # vitest: real Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess seams
|
|
157
|
+
pnpm run test:coverage # coverage gate (90/80/90/90)
|
|
158
|
+
pnpm run build # tsdown bundle + tsc declarations (lib/)
|
|
159
|
+
pnpm run verify:self-contained # dependency specs resolve from the registry
|
|
160
|
+
pnpm run verify:artifacts # built ESM face + bundle patch present
|
|
161
|
+
node scripts/check-readme-sync.mjs # five-language README sync gate
|
|
162
|
+
pnpm pack # the published tarball
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Topics
|
|
166
|
+
|
|
167
|
+
`dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `ollama`, `local-llm`, `local-models`, `offline`, `privacy`, `model-routing`
|
|
168
|
+
|
|
169
|
+
## Contributors
|
|
170
|
+
|
|
171
|
+
- [@PerryLink](https://github.com/PerryLink) тАФ creator and maintainer: adapter, routing, tools, health check, sanitization, and the five-language docs.
|
|
172
|
+
|
|
173
|
+
## PerryLink DSH Plugin Family
|
|
174
|
+
|
|
175
|
+
This project is one of the [29 DeepSeek Harness plugins](https://github.com/PerryLink) maintained by [PerryLink](https://github.com/PerryLink). If this one helps you, the others likely will too:
|
|
176
|
+
|
|
177
|
+
| Plugin | One-liner |
|
|
178
|
+
|---|---|
|
|
179
|
+
| [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) | Second-model auto-review on the approval chain, fail-closed by default |
|
|
180
|
+
| [dsh-background-agents](https://github.com/PerryLink/dsh-background-agents) | Durable background child agents with a Web UI sidebar, messaging and interrupt |
|
|
181
|
+
| [dsh-budget](https://github.com/PerryLink/dsh-budget) | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
|
|
182
|
+
| [dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind) | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
|
|
183
|
+
| [dsh-claude-move](https://github.com/PerryLink/dsh-claude-move) | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
|
|
184
|
+
| [dsh-click](https://github.com/PerryLink/dsh-click) | Cross-platform native desktop control for DeepSeek Harness тАФ Windows first. |
|
|
185
|
+
| [dsh-composer-history](https://github.com/PerryLink/dsh-composer-history) | Terminal-style input history for the web composer: arrows, Ctrl+R search |
|
|
186
|
+
| [dsh-defend](https://github.com/PerryLink/dsh-defend) | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
|
|
187
|
+
| [dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck) | Engineering-discipline guard: requirements grill, test gates, adversary review |
|
|
188
|
+
| [dsh-draw](https://github.com/PerryLink/dsh-draw) | Unified static-image generation routing for DeepSeek Harness. |
|
|
189
|
+
| [dsh-fast](https://github.com/PerryLink/dsh-fast) | Read-only performance diagnostics for DeepSeek Harness. |
|
|
190
|
+
| [dsh-github](https://github.com/PerryLink/dsh-github) | GitHub PR/issues integration for DSH, every write gated by approval |
|
|
191
|
+
| [dsh-library](https://github.com/PerryLink/dsh-library) | Local document knowledge base for DeepSeek Harness. |
|
|
192
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | Local-model (Ollama) integration for DeepSeek Harness. |
|
|
193
|
+
| [dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions) | LSP diagnostics, formatting, completion, code actions and rename over language servers |
|
|
194
|
+
| [dsh-mask](https://github.com/PerryLink/dsh-mask) | PII masking middleware for DeepSeek Harness тАФ anonymize personal data before it reaches the model, restore it at the display layer. |
|
|
195
|
+
| [dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel) | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
|
|
196
|
+
| [dsh-memento](https://github.com/PerryLink/dsh-memento) | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
|
|
197
|
+
| [dsh-observe](https://github.com/PerryLink/dsh-observe) | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
|
|
198
|
+
| [dsh-output-styles](https://github.com/PerryLink/dsh-output-styles) | Claude Code outputStyles-equivalent runtime style switching |
|
|
199
|
+
| [dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules) | Claude Code-style declarative allow/deny/ask permission rules with audit |
|
|
200
|
+
| [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) | Plugin-development knowledge base as an on-demand agent skill |
|
|
201
|
+
| [dsh-score](https://github.com/PerryLink/dsh-score) | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
|
|
202
|
+
| [dsh-session-pin](https://github.com/PerryLink/dsh-session-pin) | Pin sessions in the Web sidebar with durable ordering |
|
|
203
|
+
| [dsh-session-sync](https://github.com/PerryLink/dsh-session-sync) | Cross-device session sync for DeepSeek Harness тАФ a dedicated git mirror of your session store. |
|
|
204
|
+
| [dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security) | Security-audit skill pack: secret scan, dependency and supply-chain review |
|
|
205
|
+
| [dsh-talk](https://github.com/PerryLink/dsh-talk) | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
|
|
206
|
+
| [dsh-test-drive](https://github.com/PerryLink/dsh-test-drive) | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
|
|
207
|
+
| [dsh-translate](https://github.com/PerryLink/dsh-translate) | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
|
|
208
|
+
|
|
209
|
+
## License
|
|
210
|
+
|
|
211
|
+
[Apache License 2.0](LICENSE) ┬й 2026 dsh-local-ai contributors
|