DeepTutor v1.4.4 技能中心化与知识库预览实战:Hub Skills 一条命令接入、安全导入门禁与 Office 文档浏览器内预览
DeepTutor v1.4.4 技能中心化与知识库预览实战Hub Skills 一条命令接入、安全导入门禁与 Office 文档浏览器内预览【免费下载链接】DeepTutorDeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor本文对应仓库 assets/releases/past_releases/ver1-4-4.mdDeepTutor v1.4.4 Release Notes发布日期 2026.06.13。v1.4.4 是一次聚焦迭代技能库向更大的 Agent-Skills 生态打开支持从外部技能注册中心用一条命令安装社区技能知识库文件预览补齐为与聊天文件查看器一致的浏览器内 Word/Excel 渲染。整版完全可替换升级drop-in无迁移、无破坏性变更。读完本文你可以掌握Hub 技能的引用语法与搜索/安装命令、每一条导入背后经过的安全门禁及其源码实现位置、多用户模式下“安装≠授权”的管理语义、知识库纯文本预览接口以及 Markdown 中 base64 内嵌图片得以安全渲染的前端白名单机制。版本定位一次无侵入的能力扩展v1.4.4 建立在 v1.4.3 之上改动集中在两处主线上技能库外部化DeepTutor 的技能Skill与 Agent-Skills 生态共用同一套文件格式SKILL.md 支持文件因此外部注册中心天然可以成为技能库的来源deeptutor skill子命令组新增了 hub 搜索与安装能力预览体验拉齐知识库KB文件的浏览体验与聊天里 v1.4.3 引入的文件查看器保持一致并新增按需提取纯文本的预览端点。值得先说明一点版本差异v1.4.4 发布说明中以clawhub.ai作为默认注册中心的示例而在当前仓库主线deeptutor/services/skill/hub.py中代码注释与DEFAULT_HUB eduhub表明默认 hub 已演进为 DeepTutor 自有的教育技能注册中心EduHubEduHub 与 ClawHub 使用同一套 HTTP API 协议因此 v1.4.4 建立的“裸 slug 默认解析到一个 hub、hub:slug[version]显式指定”的机制完全延续。仓库根 README.md 的 “Ecosystem — EduHub the Skills Community” 一节是这条演进线的最新写照。Hub Skills一条命令把社区技能装进技能库命令与引用格式v1.4.4 为deeptutor skill子命令组补上了 hub 侧的能力四条核心命令如下与发布说明一致deeptutor skill search git release notes # 对 hub 做语义检索 deeptutor skill install clawhub:gh-release-notes # verify → fetch → register 三阶段安装 deeptutor skill install some-skill1.2.0 # 省略 hub 前缀时走默认 hub 固定版本 deeptutor skill list # 列出本地技能并标注 hub 来源命令行的完整实现位于 deeptutor_cli/skill.py。技能引用遵循parse_hub_ref解析的hub:slug[version]语法hub.py其中hub 前缀可省略省略时解析为默认 hub见下方default_hubversion用于固定版本不带版本时拉取latestdist-tagslug 允许[a-z0-9][a-z0-9._-]{0,127}hub 名与版本号也各有长度与字符约束非法引用会在进入网络请求前被正则拦下。search子命令支持--hub与--limit150选项install子命令支持--name以新名字安装、--force覆盖同名已有技能与--allow-unverified见下文安全门禁。“安装≠格式翻译”fetch adapt install 管道从外部导入并非把技能格式翻译成内部表示而是“拉取 适配 安装”。hub.py 的模块 docstring 明确定义了三阶段管道verify向 hub 查询该软件包的安全裁定security verdict。裁定为suspicious时默认中止安装除非调用方显式传入allow_unverified文档指出这类注册中心历史上确实出过恶意包fetch下载并在临时目录安全解压zip-slip / zip-bomb 防护位于此层installSkillService.install_tree施加导入策略frontmatter 适配、always剥离、后缀白名单并把来源信息记录进.hub-lock.json。整体编排函数是install_from_hubhub.py逻辑可概括为suspicious 判定 allow_unverifiedFalse → 抛 SkillImportError 拒绝安装 verify 通过 → fetch 解压 → install_tree(extra_tags[hub], origin{hub, slug, version, verdict, installed_at}) → 最终清理临时目录 → 返回 HubInstallOutcome(result, ref, verdict)安装成功后源 hub 会被作为额外 tag 打在该技能上例如eduhubtag使导入技能在技能列表中天然分组CLI 与 UI 因而能显示 “from eduhub1.2.0” 这类可审计的来源信息。同一道安全门禁无论技能来自哪里发布说明强调“无论来源如何每次导入都经过相同的安全闸门”。这些闸门在仓库中逐条可验证安全措施实现位置关键参数/行为hub 安全裁定预检hub.pyverify请求/skills/{slug}/verifysuspicious除非--allow-unverified否则拒绝zip-slip 防护hub.py拒绝绝对路径与..越界段、拒绝__MACOSX/与隐藏文件写入路径再次 resolve 校验兜底zip-bomb 防护同上条目数 ≤ 600、单条 ≤ 4MB、总大小 ≤ 40MB、压缩比 ≤ 200文件类型白名单service.py仅放行 md/txt/代码/配置/文档等文本型后缀.sh、.py等在列无后缀文本文件LICENSE、Makefile放行二进制永不落盘导入体积上限service.py单文件 ≤ 1MB、总大小 ≤ 20MB、文件数 ≤ 500超限即整体失败fail closedalways:强制剥离service.py_compose_imported_frontmatter丢弃always键同时把平铺的bins:/env:折入requires.*其余未知键原样保留符号链接拒绝service.py链接可指向包外内容_copy_support_tree直接中止导入来源记录service.py成功安装后写.hub-lock.json删除技能时同步清理该记录其中“always:frontmatter 被剥离”是注入向量防御的关键技能正文正常情况下不会整体注入系统提示词唯独always: true的技能会 eager 注入每一轮对话见 service.py 的load_always_for_context与 manifest 机制。若放行下载包携带always字段就等于允许任意下载内容自注入系统提示词——因此导入管道无条件丢弃该字段这是“下载的软件包永远不能把自己注入每个 system prompt”这条发布承诺的代码级实现。发布说明中还有一处细节解压层保留相对目录结构。这与知识库上传用的“拍平路径”解压器刻意不同因为技能的references/目录布局必须在导入中存活hub.py。注册中心即插即用settings/skill_hubs.jsonClawHub 之外更多注册中心通过 settings/skill_hubs.json 接入。文件结构、provider 分型与默认 hub 解析均由 hub.py 读取{ hubs: { myhub: {type: command, fetch_cmd: myhub pull {slug} --out {dest}}, mirror: {type: clawhub, base_url: https://mirror.example/api/v1} } }v1 提供两种 provider 形态clawhub型ClawHubProvider直接讲 ClawHub HTTP APIsearch / download / verify无需 Node 工具链。_BUILTIN_HUBS内置了clawhub与eduhub两个开箱即用的入口二者base_url分别指向https://clawhub.ai/api/v1与https://eduhub.deeptutor.info/api/v1无需任何配置即可使用用户的skill_hubs.json叠加其上并可覆盖内置条目例如把eduhub指向本地开发服务器command型CommandProvider为只发布 CLI 的注册中心包装任意抓取命令。命令模板收到{slug}、{version}未固定版本时为空串与{dest}必须把软件包放进{dest}。命令不经 shell 执行管道、替换都不可用——这正是设计意图shlex.split拆词后subprocess.run直接执行超时 120 秒之后与普通导入走完全一致的安装闸门唯一区别是 verdict 恒为unknown无裁定接口。default_hub()支持在skill_hubs.json顶层写default: eduhub来改变裸 slug 的解析目标部署方无需 fork 代码即可把无前缀install slug指向自己的注册中心缺省回退到内置默认。解析失败的引用未知 hub、缺失fetch_cmd、未知 type都会得到明确的HubError。多用户部署管理员安装安装不等于授权在启用了多用户multi-user的部署中v1.4.4 明确了 hub 技能安装的管控语义——发布说明给出的端点是POST /api/v1/multi-user/admin/skills/install。对应实现在 deeptutor/multi_user/router.py该端点依赖require_admin只有管理员可安装安装目标被固定为管理员目录的技能根SkillService(rootadmin workspace/skills)技能落入/admin/resources可见的同一资源池安装 ≠ 授权assign技能对其他用户不可见直到某条 grant 把它指派给用户。这样管理员可以在自己的会话里先试用、审查 hub 技能确认安全后再批量下放。此外deeptutor_cli/skill.py的模块 docstring 也说明CLI 在多用户部署中操作的是 owneradmin工作区效果与上述端点一致。与此同时面向单用户/普通用户的技能 API 路由位于 deeptutor/api/routers/skills.py并提供/hub/catalog、/hub/detail这类供应用内“浏览 hub、一键导入”使用的代理端点README 中所说 Web 端Learning Space → Skills → Import from EduHub即是该流程。两类安装都会把动作写入管理审计日志log_admin_action(skill_hub_install, …)。安装进本地用户技能层的子命令还做了可见性反馈若某技能的requires门禁bins/env/sandbox当前不满足install后会打印unavailable until: …被后缀白名单拦下或超限跳过的支持文件会以skipped rel — reason逐条列出而非整体失败。知识库文件预览真正在浏览器里看到内容v1.4.4 的第二个主题是知识库文件浏览体验。KB Files 标签页现在可以在浏览器里直接渲染 WordDOCX与 ExcelXLSX文档——也就是 v1.4.3 里聊天文件查看器用到的同一套 docx/xlsx 渲染器。前端实现位于 web/components/chat/preview/previewers/DocxPreview.tsx 与 web/components/chat/preview/previewers/XlsxPreview.tsx知识库侧的文件选择逻辑见 web/components/knowledge/KbFilesTab.tsx 与 web/components/knowledge/KbFilePreview.tsx。新增 file-preview-text 端点PowerPoint 等“无原生浏览器渲染器”的办公文档不再退化成下载按钮而是按需提取纯文本后以内联文本预览。新增端点在 knowledge.pyGET /api/v1/kb/{kb_name}/file-preview-text/{filename}处理链为先经_resolve_kb_raw_file_or_404把文件名沙箱化解析到该 KB 的raw/目录内越界路径一律 404/403再由extract_text_from_path抽取文本并同时受两个上限约束DocumentValidator.MAX_FILE_SIZE文件字节上限与MAX_EXTRACTED_CHARS_PER_DOC返回字符上限超限/失败返回 422 或 404。抽取成功以text/plain; charsetutf-8返回前端据此把任何可抽取文本的文档渲染成文本预览而不是甩出一个下载链接。该端点与沙箱化的原始文件服务端点GET /{kb_name}/files/{filename}内联content_dispositioninline相互配合形成“能渲染原格式就渲染原格式、否则回退纯文本”的预览策略。DOCX 预览器学会缩放发布说明同时提到DOCX 预览器学会了把页面缩放以适应窄侧栏而不是裁切页面。这解决了同一套渲染器在聊天抽屉与知识库窄面板中复用时页面被裁掉的问题。Markdown 预览开始渲染内嵌图片自包含 Markdown 文件里用 base64 内嵌的截图如今可以正常显示。这背后的原理值得展开react-markdown 的默认 URL 策略会把所有data:URL 一律剥离而 DeepTutor 的渲染器在 web/lib/markdown-display.ts 实现了白名单式的 URL 变换markdownUrlTransform仅当 URL 出现在img标签的src上并且匹配SAFE_RASTER_DATA_IMAGE_REGEX——即data:image/(png|jpe?g|gif|webp|bmp|tiff|avif);base64,...——才放行其余协议白名单SAFE_MARKDOWN_PROTOCOL_REGEX仅包含http(s)、irc(s)、mailto、xmpp与内部attachment扩展javascript:、data:text/html、data:image/svgxmlSVG 内可嵌脚本这类具备脚本能力的 scheme 依旧被正则拦截见 HTML 不安全 URL 属性正则行 162-163事件属性on*、style属性、srcdoc等同样被清理。即安全的光栅图rasterdata:image/*放行可执行内容的入口保持封锁。这是“图片能显示”与“不引入 XSS 面”两者之间的精确边界。多语言 README 重新同步v1.4.4 同时把所有十份翻译版 README中文、日本語、Español、Français、…对照最新英文 README 重建纳入 Partners 模块、v1.4.x 版本历史与刷新后的版式。十份译文现在存放于仓库 assets/READMEREADME_CN.md、README_JA.md、README_ES.md、README_FR.md、README_AR.md、README_HI.md、README_RU.md、README_PL.md、README_PT.md、README_TH.md。升级方式与兼容性边界发布说明的升级指引与当前仓库 README.md 的版本区段互相印证如下从 v1.4.3 平滑替换drop-inpip install -U deeptutorDocker 用户拉取最新镜像即可。无数据迁移隔离/离线air-gapped网络deeptutor skill install通过 HTTPS 与 hub 通信隔离部署可在 settings/skill_hubs.json 中把一个镜像或抓取型 CLI 指到对应 hubtype: clawhub配base_url或type: command包一层 fetch 命令同时在default键中指定默认解析目标需要强调的适用前提hub 安装、知识库预览均随完整后端server与 Web 前端一起生效仅使用纯 CLI 技能管理时多用户安装端点与知识库预览标签页属于服务端/前端能力。源码索引想深入可以继续读这些文件围绕本文主题可在当前仓库继续下钻的关键实现与测试如下Hub 管道与 providerdeeptutor/services/skill/hub.pyinstall_from_hub、ClawHubProvider、CommandProvider、parse_hub_ref、default_hub导入策略与 provenancedeeptutor/services/skill/service.pyinstall_tree、_compose_imported_frontmatter、.hub-lock.json读写、manifest 渲染CLI 子命令deeptutor_cli/skill.pysearch / install / list / remove / login / logout / publish / updateHTTP 路由deeptutor/api/routers/skills.pyhub catalog/detail/install、deeptutor/multi_user/router.pyadmin skills install、deeptutor/api/routers/knowledge.pyfile-preview-text端点前端渲染与 URL 策略web/lib/markdown-display.tsmarkdownUrlTransform、光栅图白名单、web/components/chat/preview/previewers/DocxPreview.tsx、web/components/knowledge/KbFilePreview.tsx测试佐证tests/services/skill/test_skill_hub.py、tests/api/test_knowledge_router.py覆盖 hub 安装门禁与文件预览路由行为README 生态章节README.mdEduHub / ClawHub 双 hub 现状与 Web 端导入流程一句话收束v1.4.4 的意义不在于炫目的新功能而在于把“技能生态”与“文档预览”这两条日常链路补完整了——社区技能在严格安全门禁下变成一条命令可得的普通资源而知识库里的 Office 文档终于可以不离开浏览器就直接阅读理解本文列出的每道闸门与每个白名单的代码位置比记住命令本身更有长期价值。【免费下载链接】DeepTutorDeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.项目地址: https://gitcode.com/GitHub_Trending/dee/DeepTutor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考