🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Ollama 本地模型路由 Palkaro/dsh-local-ai

DeepSeek Harnessv0.2.23
Palkaro22 天前有提交已提供中文文档扫描:含敏感能力

管理 Ollama 模型,本地路由 AI 请求,失败时自动回退到云端,全靠 DeepSeek Harness。

32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:npm 同名包「dsh-local-ai」归属 perrylink/dsh-local-ai,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Palkaro/dsh-local-ai
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · model
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-local-ai」归属 perrylink/dsh-local-ai,装到的可能不是本插件

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-local-ai @ 0.2.23
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 15:44:49

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 20 条)
  • 执行外部命令来自配置/变量
    scripts/prepare.mjs:21
    const result = spawnSync(process.execPath, [bin, ...args], { stdio: 'inherit' })
  • 读取本地文件
    scripts/changelog-section.mjs:22
    const changelog = readFileSync(resolve(import.meta.dirname, '..', 'CHANGELOG.md'), 'utf8')
  • 读取本地文件
    scripts/check-readme-sync.mjs:48
    if (!existsSync(refPath)) {
  • 读取本地文件
    scripts/check-readme-sync.mjs:52
    const refText = readFileSync(refPath, 'utf8')
  • 读取本地文件
    scripts/check-readme-sync.mjs:58
    if (!existsSync(filePath)) {
  • 读取本地文件
    scripts/check-readme-sync.mjs:62
    const text = readFileSync(filePath, 'utf8')
  • 执行外部命令来自配置/变量
    scripts/release.mjs:44
    execFileSync(command, args, {
  • 执行外部命令固定命令
    scripts/release.mjs:54
    return execFileSync('git', args, { cwd: root, stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' }).trim()
  • 读取本地文件
    scripts/release.mjs:65
    const pkg = JSON.parse(readFileSync(packagePath, 'utf8'))
  • 写入本地文件
    scripts/release.mjs:71
    writeFileSync(packagePath, `${JSON.stringify(pkg, null, 2)}\n`)
  • 读取本地文件
    scripts/release.mjs:76
    let versionSource = readFileSync(versionSourcePath, 'utf8')
  • 写入本地文件
    scripts/release.mjs:84
    writeFileSync(versionSourcePath, versionSource)
  • 读取本地文件
    scripts/release.mjs:87
    let changelog = readFileSync(changelogPath, 'utf8')
  • 写入本地文件
    scripts/release.mjs:95
    writeFileSync(changelogPath, changelog)
  • 读取本地文件
    scripts/verify-artifacts.mjs:18
    if (!existsSync(path.join(root, rel))) throw new Error(`missing artifact: ${rel}`)
  • 执行外部命令来自配置/变量
    scripts/verify-artifacts.mjs:22
    execFileSync(process.execPath, ['--check', path.join(root, 'lib/index.js')], { stdio: 'inherit' })
  • 读取本地文件
    scripts/verify-self-contained.mjs:9
    const pkg = JSON.parse(readFileSync(path.join(root, 'package.json'), 'utf8'))
  • 发起网络请求
    src/adapter.ts:58
    return this.options.fetchImpl ?? ((input: string, init?: RequestInit) => globalThis.fetch(input, init))
  • 发起网络请求
    src/adapter.ts:99
    const iterator = this.request(options, resolved, watchdog.signal)[Symbol.asyncIterator]()
  • 发起网络请求
    src/index.ts:132
    const fetchImpl: FetchLike = (input, init) => globalThis.fetch(input, init)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-subprocess-local@deepseek-ai/dsh-commands@deepseek-ai/dsh-timeout@deepseek-ai/dsh-session@deepseek-ai/dsh-system-prompt
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 管理Ollama模型
  • 本地路由AI请求
  • 失败自动回退云端

README

由 DeepSeek 最新模型翻译生成
🤖 dsh-local-ai DeepSeek Harness 的本地模型(Ollama)接入。 发现、拉取、删除、查看本地模型,按任务类型或关键词把请求分流到本地模型并在失败时自动回退云端,通过 /ollama 一键查看状态总览。 English · 简体中文 · Español · Português · हिन्दी Compatibility | 项目 | 状态 | | Harness | DeepSeek Harness 0.1.0-rc.6 | | Node | ^22.19.0 \|\| >=24.0.0 | | 后端 | Ollama(本地 HTTP API + CLI 探测) | | 模型 | 纯文本路由(inputModalities: ['text']);支持工具调用与工具结果 | What you get dsh-local-ai 让 Ollama 成为 DeepSeek Harness 的一等本地模型提供方: - 发现与管理 — ollama_list(已安装模型 / 运行中 / 磁盘占用)、ollama_show(参数尺寸、量化、上下文长度)、ollama_pull、ollama_remove。 - 健康检查 — 进程存活(经 ollama CLI)与 API 响应(经 /api/version),作为两个独立信号报告。
展开完整文档(README 剩余 1 节)
🤖 dsh-local-ai

DeepSeek Harness 的本地模型(Ollama)接入。

发现、拉取、删除、查看本地模型,按任务类型或关键词把请求分流到本地模型并在失败时自动回退云端,通过 /ollama 一键查看状态总览。

English · 简体中文 · Español · Português · हिन्दी

Compatibility

| 项目 | 状态 |
| Harness | DeepSeek Harness 0.1.0-rc.6 |
| Node | ^22.19.0 \|\| >=24.0.0 |
| 后端 | Ollama(本地 HTTP API + CLI 探测) |
| 模型 | 纯文本路由(inputModalities: ['text']);支持工具调用与工具结果 |

What you get

dsh-local-ai 让 Ollama 成为 DeepSeek Harness 的一等本地模型提供方:

- 发现与管理 — ollama_list(已安装模型 / 运行中 / 磁盘占用)、ollama_show(参数尺寸、量化、上下文长度)、ollama_pull、ollama_remove。
- 健康检查 — 进程存活(经 ollama CLI)与 API 响应(经 /api/version),作为两个独立信号报告。
- 官方适配器 — 通过 ctx.llm.registerAdapter(LlmAdapter)注册 ollama 提供方路由,支持配置模型映射与 temperature / max-tokens / stop 参数翻译。
- 本地路由 — model_route 规则按任务类型(purpose)、不区分大小写的关键词或 always 分流到本地模型,本地路由在产出内容前失败时自动回退云端。
- /ollama 命令 — 一键状态总览:模型、磁盘占用、健康、建议。
- 零依赖、HTTP 优先 — 一切走 Ollama HTTP API(CLI 仅用于进程探测);不捆绑模型文件。

request (loop)
│ llm/stream 瀑布 ├─ 命中规则? ──▶ 路由到 ollama ──▶ Ollama /api/chat(NDJSON 流) │ └─ 先失败 ─▶ 回退云端(next()) └─ 未命中 ──▶ 云端提供方 tools ──▶ /api/tags · /api/ps · /api/show · /api/pull · /api/delete health ──▶ /api/version(API)+ ollama list(进程)

Quick start

1. 把 bundle 安装进你的 profile
dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main"

或从 npm(正式发布版)
dsh plugin --profile web add dsh-local-ai

2. 在 profile patch(cordis.yml)里配置路由并重启
dsh --profile web

最小路由配置(该规则在 cordis.patch.yml 里以注释形式给出):

- insert:
- id: dsh-local-ai
name: dsh-local-ai
config:
route:
- model: llama3.2
keywords: ["confidential", "offline"]

验证 row 是否挂载:

dsh --profile web --dump-config | grep -A2 'id: dsh-local-ai'

Install & uninstall

- git 通道(最新 main):dsh plugin --profile web add "github:PerryLink/dsh-local-ai#main" —— prepare 脚本只使用生产依赖构建。
- npm 通道(正式发布版):dsh plugin --profile web add dsh-local-ai。
- tarball 通道:在本仓库 pnpm pack,然后 dsh plugin --profile web add ./dsh-local-ai-<version>.tgz。
- 卸载:dsh plugin --profile web remove dsh-local-ai(或从 profile patch 移除该 row)。

如果 pnpm 对本包报告 ERR_PNPM_IGNORED_BUILDS,请在 pnpm-workspace.yaml 里加 allowBuilds: { esbuild: true } —— dsh CLI 会打印精确片段。

Configuration

所有可调参数都是 Schemastery Config 字段(可在 cordis.yml 中修改)。按 id 覆盖会替换整个 row —— 重述你需要的每个键。cordis.patch.yml 对每个键都有行内注释。

| Key | Default | Meaning |
| baseURL | http://127.0.0.1:11434 | Ollama HTTP API 基础 URL;会追加 /api/ 路径 |
| requestTimeoutMs | 30000 | 单次请求 HTTP 超时(毫秒) |
| graceMs | 15000 | 健康检查 CLI 探测的子进程终止宽限 |
| defaultContextWindow | 8192 | 模型无精确值时的上下文容量 |
| maxTokens | 4096 | 模型无精确值时的单请求输出上限 |
| temperature | (none)* | 默认采样温度(0..2);省略则用提供方默认值 |
| models | [] | Harness 可见名 → Ollama 模型映射 |
| models[].name | (required) | Harness 可见模型名(GenerateOptions.model) |
| models[].model | = name | Ollama 模型 id |
| models[].contextWindow | (none) | 该模型的上下文容量 |
| models[].maxTokens | (none) | 该模型的输出上限 |
| models[].temperature | (none) | 该模型的采样温度 |
| route | [] | 本地模型路由规则(首个命中生效) |
| route[].model | (required) | 目标本地模型名 |
| route[].purpose | (none) | 任务类型匹配:compaction / session-title |
| route[].keywords | [] | 不区分大小写的请求关键词 |
| route[].always | false | 把所有符合条件的请求路由到此模型 |

Tools & surfaces

| 界面 | 类型 | 作用 |
| ollama_list | 工具 | 列出已安装模型、运行中模型与磁盘占用 |
| ollama_show | 工具 | 显示参数尺寸、量化、上下文长度、family、format |
| ollama_pull | 工具 | 拉取(下载)模型 |
| ollama_remove | 工具 | 删除模型 |
| ollama_health | 工具 | 进程存活 + API 响应 |
| /ollama | 命令 | 一键状态总览(模型 + 健康 + 建议) |

消费 公开 host 服务 ctx.llm(registerAdapter)、ctx.tools、ctx.subprocess(CLI 探测)、ctx.commands。默认不短路 llm/stream —— 路由监听器在无规则命中时透传(next())。

Permissions & data

- 权限:对您配置的 Ollama 端点的 network:outbound;无原生代码、无文件系统访问、无存储。
- 数据:展示给模型或用户的每个模型列表/详情、健康事实与错误消息在展示前都经过脱敏(去除端点 userinfo 与密钥查询参数、剥离控制字符、限制长度)。工具与命令结果由 harness 自身的 tool/command 机制记录。
- 凭据:插件不存储也不读取任何凭据。它只向您配置的端点发起 HTTP 请求,外加本地 ollama list 进程探测。

Security boundaries

- 默认不重路由 —— route 列表默认为空;请求只有通过显式规则或显式选择 ollama 提供方才会到达本地模型。
- 展示前脱敏 —— 端点地址与本地路径在进入工具输出、/ollama 命令或错误消息前都会被脱敏。
- 零捆绑模型 —— 下载与存储是 Ollama 自己的事;包内不含任何模型。
- 失败响亮、失败可控 —— 非法配置导致挂载失败;本地路由在产出内容前失败会回退云端(next()),因此 Ollama 宕机不会卡死对话。
- 模型可见 ⟺ 已记录 —— 路由只改变由哪个提供方服务请求(assistant 消息会以 ollama 来源记录);不凭空新增模型可见输入。

Known limitations

- 仅 rc.6 —— 针对 @deepseek-ai/dsh@0.1.0-rc.6 开发与测试;更新版本的 harness 基线预期可用,但由每月 compat workflow 验证。
- 纯文本路由 —— 图片内容会被拒绝(UNSUPPORTED_CONTENT);多模态本地模型尚未接入。
- 中途失败不回退 —— 本地路由一旦开始产出内容,之后的失败会透传(无法撤回);只有首个 token 前的失败才回退云端。

Development

pnpm install # node ^22.19 || >=24
pnpm run typecheck # tsc:src + 测试,对发布版 0.1.0-rc.6 类型
pnpm run typecheck:ci # 严格 tsc,对发布版 rc.6 类型(关闭 skipLibCheck)
pnpm test # vitest:真实 Context/LlmRuntime/ToolRuntime/CommandRuntime/subprocess 机制
pnpm run test:coverage # 覆盖率门禁(90/80/90/90)
pnpm run build # tsdown 打包 + tsc 声明(lib/)
pnpm run verify:self-contained # 依赖声明均来自 registry
pnpm run verify:artifacts # 构建产物 ESM 面 + bundle patch 存在
node scripts/check-readme-sync.mjs # 五语 README 同步门禁
pnpm pack # 发布用 tarball

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, ollama, local-llm, local-models, offline, privacy, model-routing

Contributors

- @PerryLink — 创建者与维护者:适配器、路由、工具、健康检查、脱敏与五语文档。

PerryLink DSH Plugin Family

本项目是由 PerryLink 维护的 29 个 DeepSeek Harness 插件之一。如果这个对你有用,其他插件很可能也会:

| Plugin | One-liner |
| dsh-auto-review | 审批链上的第二模型自动审查,默认失败关闭 |
| dsh-background-agents | 持久化后台子代理,带 Web UI 侧边栏、消息与打断 |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排与延迟一屏呈现。 |
| dsh-checkpoint-rewind | Claude Code /rewind 等价物:快照、会话分叉、一次性恢复 |
| dsh-claude-move | 将 Claude Code 会话、记忆、技能与 CLAUDE.md 迁入 DSH |
| dsh-click | 跨平台原生桌面控制(DeepSeek Harness),Windows 优先。 |
| dsh-composer-history | Web 输入框的终端式输入历史:方向键、Ctrl+R 搜索 |
| dsh-defend | DeepSeek Harness 的提示注入、越狱与密钥泄露防护。 |
| dsh-doublecheck | 工程纪律门禁:需求质询、测试门禁、对抗式审查 |
| dsh-draw | DeepSeek Harness 的统一静态图像生成路由。 |
| dsh-fast | DeepSeek Harness 的只读性能诊断。 |
| dsh-github | DSH 的 GitHub PR/issue 集成,每次写入都经审批门 |
| dsh-library | DeepSeek Harness 的本地文档知识库。 |
| dsh-local-ai | DeepSeek Harness 的本地模型(Ollama)接入。 |
| dsh-lsp-actions | 经语言服务器的 LSP 诊断、格式化、补全、代码操作与重命名 |
| dsh-mask | DeepSeek Harness 的 PII 脱敏中间件——数据到模型前匿名化,展示层还原。 |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 带状态、工具与错误的设置页 |
| dsh-memento | 带审批门的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 |
| dsh-observe | DeepSeek Harness 的 OpenTelemetry 与 Langfuse 可观测导出器。 |
| dsh-output-styles | Claude Code outputStyles 等价的运行时样式切换 |
| dsh-permission-rules | Claude Code 风格声明式 allow/deny/ask 权限规则,带审计 |
| dsh-plugin-guide | 按需 agent 技能形式的插件开发知识库 |
| dsh-score | DeepSeek Harness 插件的多指标质量评分。 |
| dsh-session-pin | 在 Web 侧边栏置顶会话,顺序持久化 |
| dsh-session-sync | DeepSeek Harness 的跨设备会话同步——会话存储的专用 git 镜像。 |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖与供应链审查 |
| dsh-talk | DeepSeek Harness 的语音优先会话闭环:对它说,听它答。 |
| dsh-test-drive | DeepSeek Harness 插件的隔离式安装冒烟实测。 |
| dsh-translate | DeepSeek Harness 的厂商参数翻译与确定性 JSON 修复。 |

License

Apache License 2.0 © 2026 dsh-local-ai contributors
预览分享卡片长什么样 ↓Palkaro/dsh-local-ai
分享 · DeepSeek Harness Hub
Palkaro/dsh-local-ai

管理 Ollama 模型,本地路由 AI 请求,失败时自动回退到云端,全靠 DeepSeek Harness。

这是你的仓库?认领条目

回到顶部