reactive-resume
amruthpillai
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!
PerryLink/dsh-local-ai
Local-model (Ollama) integration for DeepSeek Harness: 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.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:PerryLink/dsh-local-ai
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
Local-model (Ollama) integration for DeepSeek Harness.
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.
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness 0.1.0-rc.6 |
| Node | ^22.19.0 \|\| >=24.0.0 |
| Backend | Ollama (local HTTP API + CLI probe) |
| Model | Text-only route (inputModalities: ['text']); tool calls and tool results are supported |
dsh-local-ai makes Ollama a first-class local provider in DeepSeek Harness:
ollama_list (installed models, running models, disk usage), ollama_show (parameter size, quantization, context length), ollama_pull, and ollama_remove.ollama CLI) and API responsiveness (via /api/version), reported as two independent signals.ollama provider route is registered through ctx.llm.registerAdapter (LlmAdapter), with configurable model mapping and temperature / max-tokens / stop translation.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./ollama command — a one-shot status overview: models, disk usage, health, and suggestions.request (loop)
│ llm/stream waterfall
├─ rule matches? ──▶ route to ollama ──▶ Ollama /api/chat (NDJSON stream)
│ └─ fails first ─▶ fall back to cloud (next())
└─ no match ──▶ cloud provider
tools ──▶ /api/tags · /api/ps · /api/show · /api/pull · /api/delete
health ──▶ /api/version (API) + ollama list (process)
# 1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"
# or from npm (published releases)
dsh plugin --profile web add dsh-local-ai
# 2. configure routing in your profile patch (cordis.yml) and restart
dsh --profile web
Minimal routing configuration (the rule ships commented out in cordis.patch.yml):
- insert:
- id: dsh-local-ai
name: dsh-local-ai
config:
route:
- model: llama3.2
keywords: ["confidential", "offline"]
Then verify the row mounts:
dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'
main): dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main" — the prepare script builds with production dependencies only.dsh plugin --profile web add dsh-local-ai.pnpm pack in this repo, then dsh plugin --profile web add ./dsh-local-ai-<version>.tgz.dsh plugin --profile web remove dsh-local-ai (or remove the row from the profile patch).If pnpm reports
ERR_PNPM_IGNORED_BUILDSfor this package, addallowBuilds: { esbuild: true }to yourpnpm-workspace.yaml— thedshCLI prints the exact snippet.
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.
| Key | Default | Meaning |
|---|---|---|
baseURL |
http://127.0.0.1:11434 |
Ollama HTTP API base URL; /api/* paths are appended |
requestTimeoutMs |
30000 |
Per-request HTTP timeout (milliseconds) |
graceMs |
15000 |
Subprocess terminate grace for the health-check CLI probe |
defaultContextWindow |
8192 |
Context capacity used when a model has no exact value |
maxTokens |
4096 |
Per-request output cap used when a model has no exact value |
temperature |
(none) | Default sampling temperature (0..2); omitted leaves the provider default |
models |
[] |
Harness-visible → Ollama model mappings |
models[].name |
(required) | Harness-visible model name (GenerateOptions.model) |
models[].model |
= name |
Ollama model id |
models[].contextWindow |
(none) | Per-model context capacity |
models[].maxTokens |
(none) | Per-model output cap |
models[].temperature |
(none) | Per-model sampling temperature |
route |
[] |
Local-model routing rules (first match wins) |
route[].model |
(required) | Target local model name |
route[].purpose |
(none) | Task type match: compaction / session-title |
route[].keywords |
[] |
Case-insensitive request keywords |
route[].always |
false |
Route every eligible request to this model |
| Surface | Kind | What it does |
|---|---|---|
ollama_list |
tool | List installed models, running models, and disk usage |
ollama_show |
tool | Show parameter size, quantization, context length, family, format |
ollama_pull |
tool | Pull (download) a model |
ollama_remove |
tool | Remove a model |
ollama_health |
tool | Process liveness + API responsiveness |
/ollama |
command | One-shot status overview (models + health + suggestions) |
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.
network:outbound to the Ollama endpoint you configure; no native code, no filesystem access, no storage.ollama list process probe.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./ollama command, or error messages.next()), so a down Ollama never bricks a conversation.ollama provenance); no new model-visible input is invented.@deepseek-ai/dsh@0.1.0-rc.6; newer harness baselines are expected to work but are verified by the monthly compat workflow.UNSUPPORTED_CONTENT); multimodal local models are not wired up yet.pnpm install # node ^22.19 || >=24
pnpm run typecheck # tsc: src + tests against the published 0.1.0-rc.6 types
pnpm run typecheck:ci # strict tsc against published rc.6 types (skipLibCheck off)
pnpm test # vitest: real Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess seams
pnpm run test:coverage # coverage gate (90/80/90/90)
pnpm run build # tsdown bundle + tsc declarations (lib/)
pnpm run verify:self-contained # dependency specs resolve from the registry
pnpm run verify:artifacts # built ESM face + bundle patch present
node scripts/check-readme-sync.mjs # five-language README sync gate
pnpm pack # the published tarball
dsh, dsh-plugin, deepseek-harness, deepseek, cordis, ollama, local-llm, local-models, offline, privacy, model-routing
This project is one of the 29 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware for DeepSeek Harness — anonymize personal data before it reaches the model, restore it at the display layer. |
| dsh-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
Apache License 2.0 © 2026 dsh-local-ai contributors
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: model-routing、privacy。