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

全局待办 LUgABeEEE/dsh-global-todo

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

给 DeepSeek Harness 用的全局待办插件——一份 JSON 清单,人和智能体都能往里写

42/100
综合分
11
GitHub 星标
2,178
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-global-todo
npm 源 · dsh-global-todo 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功(非静态推断);本次验证针对插件 v0.22.0,当前版本为 v0.20.0
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 06:41:30

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

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 33 处,展示前 33 条)
  • 写入本地文件
    lib/index.js:221
    void writeFile(recentFile, `${JSON.stringify({ id: sessionId, at: Date.now() })}\n`, 'utf8').catch(() => {})
  • 读取本地文件
    lib/index.js:225
    void readFile(recentFile, 'utf8')
  • 读取本地文件
    lib/index.js:729
    diskVersion = JSON.parse(readFileSync(path.join(import.meta.dirname, '..', 'package.json'), 'utf8')).version
  • 发起网络请求
    lib/client.js:960
    void fetch(`${API}/diagnostics`, {
  • 发起网络请求
    lib/client.js:990
    const response = await fetch(`${API}/${path}${query}`, {
  • 写入剪贴板
    lib/client.js:2196
    navigator.clipboard.writeText(value)
  • 写入本地文件
    lib/settings.js:254
    await chmod(options.file, 0o600).catch(() => {})
  • 读取本地文件
    lib/settings.js:266
    text = await readFile(options.file, 'utf8')
  • 读取本地文件
    lib/diagnostics.js:41
    const text = await readFile(options.file, 'utf8')
  • 写入本地文件
    lib/diagnostics.js:99
    await appendFile(options.file, `${JSON.stringify(entry)}\n`, 'utf8')
  • 读取本地文件
    lib/diagnostics.js:101
    const text = await readFile(options.file, 'utf8')
  • 读取本地文件
    lib/routes.js:363
    const info = await stat(candidate).catch(() => undefined)
  • 读取本地文件
    lib/routes.js:372
    const info = await stat(base).catch(() => undefined)
  • 读取本地文件
    lib/routes.js:374
    const entries = await readdir(base, { withFileTypes: true })
  • 读取本地文件
    lib/routes.js:479
    const info = await stat(link.value).catch(() => null)
  • 读取本地文件
    lib/routes.js:484
    const bytes = await readFile(link.value)
  • 读取本地文件
    lib/service.js:116
    return existsSync(candidate)
  • 读取本地文件
    lib/store.js:157
    text = await readFile(file, 'utf8')
  • 读取本地文件
    lib/store.js:167
    observe(await stat(file).catch(() => null))
  • 写入本地文件
    lib/store.js:196
    await mkdir(directory, { recursive: true })
  • 读取本地文件
    lib/store.js:239
    remember(await stat(file).catch(() => null))
  • 读取本地文件
    lib/store.js:313
    const text = await readFile(file, 'utf8')
  • 读取本地文件
    lib/sync.js:137
    text = await withTimeout(readFile(hubFile, 'utf8'), HUB_TIMEOUT_MS, '读取共享待办')
  • 读取本地文件
    lib/sync.js:202
    await withTimeout(stat(path.dirname(dir)), HUB_TIMEOUT_MS, '检查共享目录')
  • 写入本地文件
    lib/sync.js:210
    await withTimeout(mkdir(dir, { recursive: true }), HUB_TIMEOUT_MS, '创建共享目录')
  • 读取本地文件
    tools/doctor-lib.mjs:21
    return JSON.parse(await readFile(file, 'utf8'))
  • 读取本地文件
    tools/doctor-lib.mjs:29
    const info = await stat(file)
  • 读取本地文件
    tools/doctor-lib.mjs:84
    const files = localeExists ? (await readdir(localeDir).catch(() => [])).filter((name) => name.endsWith('.json')) : []
  • 读取本地文件
    tools/doctor-lib.mjs:103
    const libFiles = (await exists(libDir)) ? (await readdir(libDir).catch(() => [])).filter((name) => name.endsWith('.js')) : []
  • 读取本地文件
    lib/lockfile.js:75
    const text = await readFile(file, 'utf8')
  • 读取本地文件
    lib/lockfile.js:106
    info = await stat(file)
  • 删除本地文件
    lib/lockfile.js:124
    await unlink(file)
  • 删除本地文件
    lib/lockfile.js:176
    await unlink(file)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v0.22.02026-10-31
进入清单的规则只有一条:没有截止时间,就不进清单。 · 没有截止时间的智能体记录留在收件箱里。改动前统计:357 条记录中有 354 条由智能体写入(约每天 16 条),86 条未完成记录里有 40 条标了「高」,其中 34 条根本没有截止时间。三个入口共用同一个宽松阈值——每轮提示词没有拦截,无人值守提问又沿用了手动「抓一下待办」的说法。现在智能体写入的记录若没有 dueAt 就进收件箱(收下 / 丢弃,七天清理),原因写在记录上;你自己录入的记录永远不受拦截。 · 每天八条,之后排队等待——不丢任何东西。智能体写入的记录进入清单有每日额度,额度从记录本身推算,不靠计数器,所以重启、第二个 Host 或同步都不会对不上。 · 级别由截止时间决定。没有日期 = P3,7 天内 = P2,48 小时内 = P1,已逾期 = P0。模型原本要求的级别保留在 suggestedPriority 里;你手动改过就锁定记录,规则不再覆盖。 · 收件箱不计入清单的数字,所以「全部 / 未完成」指的就是清单本身。 · 本轮已经记过东西就不再追问——智能体在这一轮写过待办,就跳过无人值守提问,而且它的提示词现在是独立的、更严格的文本。 · 面板会自己解释:收件箱每行写明原因,详情里说明级别是按截止时间推出来的、被你锁定的,还是智能体建议的。 · 升级后首次启动做一次清理:没有截止时间、没人动过的未完成智能体记录移入收件箱,受规则管理的级别重新计算。这台机器上是 68 条进收件箱、6 条级别变化、清单从 87 条降到 19 条——而每一条人改过的记录都原封不动。 · 手机上的触摸目标现在会实测了。一个探针从每个控件向外走,直到该点不再命中它,发现四个样式表一直自信地写着「没问题」的地方:搜索框是 44px 外框里的 20px 盒子,附件标签 22px,详情页的分段控件 29px,纯文字按钮 20px。已修复;npm run check:mobile 现在会在真实浏览器里对三个手机视图做这项测量。 · 截图基线固定在一个时刻,所以 CSS 没动时,提交的图片不再每天漂移。 · 新增:docs/RELEASING.md —— 发布流程,以及每道防线各自防住的事故。 测试:393 项,契约检查 101/101,三个手机视图的移动端契约全部通过。 完整更新日志:CHANGELOG.md
v0.21.02026-10-29
两台机器共用一份清单,手机页面还能折叠。 · 每台机器各存自己的清单,在同一个目录里汇合。把 storePath 指向 NAS,会让每个面板都走一次网络往返,离线笔记本连自己的待办都打不开。改成两台机器都通过共享目录里的 todos.hub.json 折叠(同步目录在 设置 → 多端同步,0 = 仅手动)。合并时每条记录以较新的 updatedAt 为准,seq 按记录集重新编号,折叠可交换、幂等,没改动就不写盘。 · 删除会留下墓碑。以前 remove 直接删掉记录,另一台机器下次同步又把它带回来。现在文档带 trash: [{ id, at, by }];撤销是收回墓碑,而不是让墓碑再删掉恢复的副本。读清单从不碰共享目录——挂载失效也卡不住面板,/health.sync 会说明上次同步的结果。 · 手机页面能折叠,折叠靠手势。宽度 600px 及以下时,面板自己量宽度:44px 标题行、三行工具栏(筛选 / 搜索 / 分组)、66px 行高、44px 点击区,并避开安全区。下滑超过 80px 收起搜索行——先补回它让出的 110px,否则内容会在拇指下跳走——上滑 48px 再展开;每次翻转后 300ms 内两个方向都不响应。折叠后的行保留标题和影响下一步操作的信号;展开的行保持完整。派发摘要和自动收集开关从手机工具栏移到设置面板,dsh-mobile 无需配置。 · 按工作区分组是真的。第一种模式是工作写入的目录(originDir,取不到就用会话目录),标题取路径最后一段,完整路径作提示;工作区分组从不自动折叠,按组豁免的键就是分组本身。标签:工作区 / 时间 / 待办等级。 · 顺手修了两个静默故障。/sync 每条路径注册了两次;Host 只按路径匹配精确路由,第二次就抛错,而打包时整份路由表一次注册——于是 /sync 之后的所有路由都消失了,读还在应答,写却只返回裸 404。主按钮用画布 token(--dsw-alias-bg-base)画文字,壁纸主题把它设成透明:白药丸上一个字都没有。修了五处,另加一条测试,禁止在 color / fill / stroke 里用 surface token。 · 测试:381 项,契约矩阵 85/85,两套截图都重新生成。Schema 2——共用 hub 的每台机器都要 0.21.0 或更新,0.20.0 的主机会明确拒绝版本 2 文件,而不是丢掉墓碑。 完整更新日志:CHANGELOG.md
v0.20.02026-10-27
列表不再和记忆存储争抢同一句话。 · 与记忆插件搭一座桥,靠一句话而不是一条线。装了 dsh-mnemon 后,提示词多出一节——动作归这个列表,事实归记忆,同一件事别存两遍——已完成的 todo 的工具结果会提示用 mnemon_remember 记下结论,正文里带上 todo id。两者只在 mnemonMemory 存在时才生效:ctx.inject(['systemPrompt','mnemonMemory'], …) 控制这一节是否出现,createTools({ hasMemory }) 每次调用时询问。点名部署里没有的工具,正是工具组闸门早已拦下的失败。 · 两处拒绝,记在 docs/DESIGN.md。不读写它的 SQLite 存储(私有 schema,它唯一的服务是定义注册表,不是「记住」调用),本仓库也不放 mnemon-source-global-todo 包(第二个 bundle,带 peer 依赖;这个必须能单独跑)。它发布的扩展 SDK 是文档写明的路径,想让召回看到未完成项就走这条。 · 测试:memoryGuidanceFor 的闸门、有记忆插件和没记忆插件时的完成提示行,以及三项契约检查,防止这座桥点名核心部署没有的工具。 · 对照 DSH 0.2.1-rc.3 验证过。它给左侧栏加了 More 菜单(浏览其他插件、创建插件),给会话视图标签页和右侧栏指南也加了;修了 New Session 丢失未发送草稿的问题;还改了 DeepSeek API-key 适配器刷新模型列表的方式。这些都不改插件声明:packages/boot/hmr/src/package-manifest.ts 和 packages/client/modules/src/client/manifest.ts 在 rc.2 与 rc.3 之间逐字节相同,侧栏入口的注册方式也没变——新菜单只是列出条目,不改声明方式。 · 声明的范围本来就容纳新版本,现在写明了原因。engines.dsh 仍是 >=0.2.0-rc.1 <0.3.0;Host 用 includePrerelease: true 匹配(dsh-app-boot 的 satisfies),所以 0.2.1-rc.3 落在下界写着 0.2.0 预发布版的范围内。scripts/matrix.mjs 加了这个用例和一条警告:把范围「清理」成 ^0.2.1 会同时拒绝 0.2.1-rc.2 和 0.2.1-rc.3。两份 README 和快速上手现在都写明验证过的版本,不再含糊其辞。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
中文说明 中文版就是仓库首页的 README.md;英文版在 README.en.md。 两份开头都有一行「中文 · English」可以互相跳转。 这个文件只为让旧链接(0.17.0 及更早的 npm 页面、外部目录里的条目)还能落地,不是第二份正文。
预览分享卡片长什么样 ↓LUgABeEEE/dsh-global-todo
分享 · DeepSeek Harness Hub
LUgABeEEE/dsh-global-todo

给 DeepSeek Harness 用的全局待办插件——一份 JSON 清单,人和智能体都能往里写

这是你的仓库?认领条目

回到顶部