面向 DeepSeek Harness dsh 的学习辅助扩展。它将 HKUDS/DeepTutor 辅导服务接入你的…
39.4/100
综合分
7
GitHub 星标
1,037
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-deeptutornpm 源 · dsh-deeptutor 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-deeptutor @ 0.1.11
✓Node 引擎要求 >=20.11 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 07:30:47
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 37 处,展示前 37 条)
- 读取本地文件scripts/install-profile.mjs:82
if (existsSync(file)) return { file, args: [], shell: false, describe: file }; - 读取本地文件scripts/install-profile.mjs:86
if (existsSync(file)) { - 读取本地文件scripts/install-profile.mjs:91
if (existsSync(ps1)) { - 执行外部命令来自配置/变量scripts/install-profile.mjs:120
return spawnSync(dsh.file, args, { - 读取本地文件scripts/install-profile.mjs:215
if (!existsSync(SKILLS_DIR)) { - 读取本地文件scripts/install-profile.mjs:221
for (const entry of readdirSync(SKILLS_DIR, { withFileTypes: true })) { - 写入本地文件scripts/install-profile.mjs:225
mkdirSync(dest, { recursive: true }); - 执行外部命令来自配置/变量lib/cli-exec.js:53
const child = execFile(file, args, { - 执行外部命令固定命令lib/cli-exec.js:70
spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }); - 写入本地文件lib/cli-exec.js:155
writeFileSync(tmp, content, "utf8"); - 删除本地文件lib/cli-exec.js:157
rmSync(tmp, { force: true }); - 发起网络请求lib/http-api.js:19
const res = await fetch(`${API_BASE}/api/v1/system/status`, { - 执行外部命令固定命令lib/http-api.js:36
tunnelProc = spawn("ssh", [ - 发起网络请求lib/http-api.js:84
const res = await fetch(`${API_BASE}${path}`, { ...init, signal: controller.signal }); - 读取本地文件lib/html-render.js:28
if (!existsSync(HTML_DOC_SCRIPT)) { - 写入本地文件lib/html-render.js:31
mkdirSync(dirname(htmlPath), { recursive: true }); - 写入本地文件lib/html-render.js:32
writeFileSync(mdPath, answer || "(no answer)", "utf8"); - 执行外部命令来自配置/变量lib/html-render.js:34
execFile(process.execPath, [HTML_DOC_SCRIPT, mdPath, "--out", htmlPath, "--title", title, "--toc"], { windowsHide: true, timeout: 60_000 }, (err, _std - 执行外部命令来自配置/变量scripts/check-dsh-compat.mjs:49
return spawnSync(command, args, { - 写入本地文件scripts/check-dsh-compat.mjs:69
mkdirSync(profileDir, { recursive: true }); - 写入本地文件scripts/check-dsh-compat.mjs:70
writeFileSync( - 删除本地文件递归scripts/check-dsh-compat.mjs:107
if (!keepWorkspace) rmSync(workspace, { recursive: true, force: true }); - 读取本地文件scripts/check-dsh-compat.mjs:119
const tarball = readdirSync(workspace).find((name) => name.endsWith(".tgz")); - 读取本地文件scripts/sync-skills.mjs:34
if (!existsSync(from)) { - 写入本地文件scripts/sync-skills.mjs:39
mkdirSync(dirname(to), { recursive: true }); - 写入本地文件scripts/sync-skills.mjs:40
copyFileSync(from, to); - 执行外部命令来自配置/变量src/cli-exec.ts:69
const child = execFile( - 执行外部命令固定命令src/cli-exec.ts:93
spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }); - 写入本地文件src/cli-exec.ts:204
writeFileSync(tmp, content, "utf8"); - 删除本地文件src/cli-exec.ts:209
rmSync(tmp, { force: true }); - 读取本地文件src/html-render.ts:36
if (!existsSync(HTML_DOC_SCRIPT)) { - 写入本地文件src/html-render.ts:39
mkdirSync(dirname(htmlPath), { recursive: true }); - 写入本地文件src/html-render.ts:40
writeFileSync(mdPath, answer || "(no answer)", "utf8"); - 执行外部命令来自配置/变量src/html-render.ts:42
execFile( - 发起网络请求src/http-api.ts:21
const res = await fetch(`${API_BASE}/api/v1/system/status`, { - 执行外部命令固定命令src/http-api.ts:36
tunnelProc = spawn( - 发起网络请求src/http-api.ts:90
const res = await fetch(`${API_BASE}${path}`, { ...init, signal: controller.signal });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 深度讲解知识点
- 生成自测题
- 规划学习路径
README
由 DeepSeek 最新模型翻译生成dsh-deeptutor
面向 DeepSeek Harness (dsh) 的学习辅助扩展。它将 HKUDS/DeepTutor 辅导服务接入你的 agent,让 dsh 会话能够深度讲解知识点、出题自测、规划学习路径、检索你的个人知识库,并把学习笔记归档到 notebook —— 全程不出 harness。
只要对 agent 说 "给我讲讲 async/await",它就能跑一次 deep-solve,把答案渲染成可在浏览器打开的自包含 HTML 学习页,再把摘要归档进你的笔记本。
本扩展由 pi 编码 agent 扩展迁移而来(TecFancy/pi-extensions,extensions/deeptutor + skills/deeptutor)。
它带来什么
三个 agent 可见工具,当你请求学习帮助时由模型调用:
| 工具 | 作用 |
| deeptutor_run | 执行一次学习调用: deep_solve(深度讲解)/ deep_question(自测题)/ deep_research / chat / mastery_path(学习路径规划)/ visualize / math_animator(可视化)。
展开完整文档(README 剩余 1 节)
dsh-deeptutor
面向 DeepSeek Harness (dsh) 的学习辅助扩展。它将 HKUDS/DeepTutor 辅导服务接入你的 agent,让 dsh 会话能够深度讲解知识点、出题自测、规划学习路径、检索你的个人知识库,并把学习笔记归档到 notebook —— 全程不出 harness。
只要对 agent 说 "给我讲讲 async/await",它就能跑一次 deep-solve,把答案渲染成可在浏览器打开的自包含 HTML 学习页,再把摘要归档进你的笔记本。
本扩展由 pi 编码 agent 扩展迁移而来(TecFancy/pi-extensions,extensions/deeptutor + skills/deeptutor)。
它带来什么
三个 agent 可见工具,当你请求学习帮助时由模型调用:
| 工具 | 作用 |
| deeptutor_run | 执行一次学习调用: deep_solve(深度讲解)/ deep_question(自测题)/ deep_research / chat / mastery_path(学习路径规划)/ visualize / math_animator(可视化)。可挂载你的知识库(kbs)与工具(rag、web_search、reason、code_execution 等);返回 session_id,后续轮次可延续同一上下文。 |
| deeptutor_kb | 列出 / 搜索 / 查看你的个人知识库(RAG) |
| deeptutor_note | 把 Markdown 学习笔记(计划、总结、错题等)归档到服务器 notebook |
上表 7 个 capability 是 deeptutor_run 工具接受的固定枚举。底层 DeepTutor CLI 可能支持更多命令 —— 用 deeptutor --help / deeptutor <cmd> --help 可枚举完整命令集。deeptutor skill 会指示 agent 以这种方式动态发现命令;当工具的枚举未覆盖某能力时,agent 可直接调用 CLI(本地二进制或经 SSH)来驱动。
示例会话
一次典型的"求学习帮助"流程:
1. 提问 —— "用我的 dotnet 知识库讲讲 C# 泛型协变,并生成学习页。"
2. agent 先检索你的自有资料:deeptutor_kb(action=search,kb=dotnet)。
3. 再执行深度讲解:deeptutor_run(capability=deep_solve,kbs=[dotnet],html=data/study/csharp-covariance.html)—— 答案返回的同时,自包含 HTML 学习页(及配套 .md 源文件)写入磁盘。
4. 最后归档摘要:deeptutor_note(notebook=dotnet-learning,type=solve)。
以上不是固定脚本 —— agent 会根据你的提问自由选择工具与参数。
以下是该流程的真实录制(async/await 状态机 deep-solve,挂载 dotnet-csharp 知识库,渲染 HTML 学习页,归档笔记本):
最终答复
生成的 HTML 学习页
环境要求
- 可用的 DeepSeek Harness (dsh) 安装,0.1.0-rc.6 或更新版本。清单里只写下限不写上限,新版本 dsh 发布后不会再在安装时被拒绝;替代办法是定时拿 npm 上 latest 和 next 两个通道的宿主各冷启动一次,插件起不来就开 issue。dsh plugin add 自动登记 bundle 已在 dsh CLI 0.1.0-rc.6、0.2.1-rc.2 与 0.2.1-rc.3 上验证。
- 一个 DeepTutor 部署,二选一:
- 本地 —— 本机运行 deeptutor serve,或 PATH 上有 deeptutor CLI(作为回退);
- 远程 —— DeepTutor 在服务器上,通过自动建立的 SSH 隧道访问(含 SSH CLI 回退)。
安装到 profile(bundle 方式)
包已发布到 npm(dsh-deeptutor)。推荐一条命令 —— 运行随包发布的安装器(scripts/install-profile.mjs,以 dsh-deeptutor 二进制暴露),它包装 dsh plugin add 并自动处理下文所述的 pnpm workspace-root 检查:
pnpm dlx dsh-deeptutor --profile web
从本仓库检出目录运行同一个安装器:
node scripts/install-profile.mjs --profile web
或者自己执行底层命令:dsh plugin add 会转发给 pnpm 安装依赖,并把 profile 的 dsh.profile.bundles 与已安装状态对账,因此声明了 dsh.bundle 的包(如本插件)会被自动登记:
dsh plugin --profile web add dsh-deeptutor -w
坑:pnpm workspace-root 检查。 dsh 的 profile 脚手架总是写入 pnpm-workspace.yaml(packages: ["."]、nodeLinker: hoisted),profile 目录本身就是 pnpm workspace 根。在 pnpm ≥ 8 上,pnpm add 在 workspace 根目录执行会因 ERR_PNPM_ADDING_TO_ROOT 中止,必须显式加 workspace-root 标志,所以上面的命令追加了 -w/--workspace-root(注意:Windows 上 pnpm 把这条错误打在 stdout,看起来像警告,实际是失败)。两种处理方式:
1. 使用安装器 / 命令保留 -w(推荐 —— 安装器先试裸命令,只有检查触发时才自动补 -w)。
2. 或者永久放行裸命令:在 ~/.dsh/profiles/<name>/pnpm-workspace.yaml 中加入 ignore-workspace-root-check: true,之后 dsh plugin --profile web add dsh-deeptutor 按原样即可。
验证挂载,然后重启 dsh(bundle 列表在启动时解析):
dsh --profile web --dump-config | grep dsh-deeptutor
如果你的 dsh CLI 不会自动登记 bundle(旧版本,或手动安装依赖),请在 profile 清单(~/.dsh/profiles/<name>/package.json)中手动加入,再运行 dsh plugin --profile web install:
{
"dependencies": { "dsh-deeptutor": "^0.1.0" },
"dsh": {
"profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-deeptutor"] }
}
}
也可以不动清单,改用用户 patch 层挂载 bundle(仍需先安装 npm 包):
overlay.yml —— 通过用户 patch 层插入 bundle 行
- insert:
- id: dsh-deeptutor
name: 'dsh-deeptutor'
dsh web --patch ./overlay.yml
bundle 清单(dsh.bundle.patch → cordis.patch.yml)负责插入插件行;上层 patch 层可按 id 覆盖或禁用。
Skills
本包携带两个 skill(.agents/skills/deeptutor 与 .agents/skills/html-doc),随包安装器每次运行时都会把它们复制到 <DSH_HOME>/skills/<name>/(dsh 自动发现)—— 所以 pnpm dlx dsh-deeptutor 一次装齐插件 和 skill:
- deeptutor — 面向 agent 的学习工作流(~/.dsh/skills/deeptutor/SKILL.md)
- html-doc — 将学习内容渲染为自包含 HTML 页面(~/.dsh/skills/html-doc/);deeptutor_run 传入 html 路径时,插件内部使用同一转换器(scripts/md-to-html.js)
升级包版本时会就地覆盖 skill 文件;包未携带的文件不会被删除。
skills/ 下的文件与 TecFancy/pi-extensions 中的同名技能逐字节一致(以 pi 仓库为唯一来源,保持 agent 中立)。上游修改后执行 node scripts/sync-skills.mjs ../pi-extensions 同步。
配置(环境变量,与 agent 无关)
远程部署(DeepTutor 在服务器上,通过 SSH 隧道访问)
export DEEPTUTOR_SSH_HOST="tencent-cloud" # SSH 主机别名(设置 = 远程模式)
export DEEPTUTOR_API_BASE="http://127.0.0.1:8001" # 本地隧道地址
export DEEPTUTOR_REMOTE_BIN="/home/ubuntu/my-deeptutor/.venv/bin/deeptutor"
export DEEPTUTOR_REMOTE_HOME="/home/ubuntu/my-deeptutor"
本地部署 —— 不要设置 DEEPTUTOR_SSH_HOST
export DEEPTUTOR_API_BASE="http://127.0.0.1:8001" # 本地 serve 端口
export DEEPTUTOR_LOCAL_BIN="deeptutor" # 本地 CLI 路径(默认: PATH 上的 deeptutor)
修改环境变量后需重启 dsh。
工作原理
插件自动适配部署模式:若 DeepTutor API 可达(本地 serve,或经隧道的远程服务器),学习回合走 HTTP/WebSocket;否则回退到 CLI —— 本地的 deeptutor 二进制,或经 SSH 的远程二进制。远程模式按需启动 SSH 隧道,插件卸载时自动拆除。
源码开发(无需发布)
dsh web --patch /path/to/dsh-deeptutor/cordis.yml
构建与发布
npm install
npm run build # tsc → lib/(相对 .ts import 改写为 .js)
npm run typecheck
npm test # node:test + type stripping
npm pack # 检查 dsh-deeptutor-<version>.tgz
npm publish
通过 --patch 直接加载 src/*.ts 需要 Node ≥ 22.6(type stripping);发布的 bundle 自带编译后的 lib/,安装到 profile 后仅需普通 Node ≥ 20 ESM。
目录结构
src/ # TypeScript 源码(开发加载、类型检查) lib/ # 编译产物(发布入口,由 npm run build 生成) scripts/md-to-html.js # 零依赖 Markdown → HTML 转换器 scripts/install-profile.mjs # 一键 profile 安装器(以 dsh-deeptutor 二进制暴露) .agents/skills/ # 随包 skill:deeptutor/ + html-doc/(安装到 <DSH_HOME>/skills/) cordis.yml # 开发 overlay:按绝对路径插入 src/index.ts cordis.patch.yml # bundle patch:按包名插入插件
src/index.ts 注册工具;config.ts 环境配置;cli-exec.ts 本地/SSH CLI 执行;http-api.ts API 探测 + SSH 隧道;turn.ts 单次学习回合(WebSocket / CLI 事件折叠与格式化);html-render.ts 答案 → 自包含 HTML。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
TecFancy/dsh-deeptutor
面向 DeepSeek Harness dsh 的学习辅助扩展。它将 HKUDS/DeepTutor 辅导服务接入你的…
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,379已汉化DSH
72
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,228已汉化DSH
71.3
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 695已汉化DSH
69.8
动画花园资源检索yjl9903/AnimeGarden
動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口
★ 1,391已汉化DSH
69.2
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 510已汉化MCP
67.9
这是你的仓库?认领条目