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

智能辅导助手 TecFancy/dsh-deeptutor

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

面向 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-deeptutor
npm 源 · dsh-deeptutor 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · search
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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。
预览分享卡片长什么样 ↓TecFancy/dsh-deeptutor
分享 · DeepSeek Harness Hub
TecFancy/dsh-deeptutor

面向 DeepSeek Harness dsh 的学习辅助扩展。它将 HKUDS/DeepTutor 辅导服务接入你的…

这是你的仓库?认领条目

回到顶部