dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
A message aggregation platform plugin.
面向个人使用的 DSH 消息聚合插件。以“来源”为配置单位,把评论、issue、PR 和 release 的变化集中到一个入口,分别管理阅读状态、后续处理与发布审核。
当前是开发版本。 已支持通过服务器现有 gh 授权读取 GitHub 仓库,以及通过 Chrome Cookie 读取 B 站视频评论。两条采集路径均只读,真实订阅模型与完整自动处理链路仍需验收。
unknown,不自动重发。详见自动回复。维护使用 dev 开发集成基线和 main 正式基线。分支、正常 Linux 测试、AWS 部署与正式验收步骤见开发与维护流程。
Node.js ^22.19.0 || >=24,DSH 0.2.1-rc.2,Cordis 4.0.5。本版本仅声明这一宿主组合的兼容性,不自动升级宿主。首次使用新版存储时会迁移本插件的旧 JSON 数据,见下文。
npm ci
npm run check
npm run demo打开 http://127.0.0.1:3147。预览使用合成数据和模拟模型,不读取真实账号,不发送消息。每次启动创建独立模拟数据目录;数据、构建临时文件都留在被 Git 忽略的 .local/。
先在隔离的开发 profile 验证。需要已启用的 DSH Agent/会话持久化/Web 服务、标准 dsh-prompt-assembler 1.1.2(固定提交 21183e1),以及用户 Jev fork 0.3.6(固定提交 2ec0510)。
安装 npm 依赖本身不等于在宿主中启用了对应服务。
Assembler 1.1.2 从“插件 → 已安装插件 → dsh-prompt-assembler → 配置当前会话”打开装配编辑器。控制台使用标准 native 后端,不需要核心扩展。依赖固定到包含 DSH owner 认证修复的源码提交及完整性摘要,不假定 npm 已发布此补丁。远程 Web 还需配置 Assembler 的 security.allowRemoteClients: true 与精确 security.allowedHosts,并使用正常 DSH 登录态;网络开关不替代认证。
已有 Assembler 或 Jev 时更新并复用同一个实例,消息插件只调用共享的 decisionModels.ask,不另存 Jev URL 或密钥。
npm run build
npm pack --pack-destination .local
dsh plugin --profile YOUR_DEV_PROFILE add "dsh-prompt-assembler@https://codeload.github.com/Player-MINEPIG/dsh-prompt-assembler/tar.gz/21183e18c9e8e7f7f01fda04b5af4218ce194539"
dsh plugin --profile YOUR_DEV_PROFILE add "dsh-jev-plugin@https://codeload.github.com/Player-MINEPIG/dsh-jev-plugin/tar.gz/2ec0510ffcdabe790df8c93b0b40aee07b93c342"
dsh plugin --profile YOUR_DEV_PROFILE add /absolute/path/to/dsh-message-console/.local/dsh-message-console-0.1.0.tgz包携带 cordis.patch.yml,默认将插件数据放入该 profile 的 DSH 数据目录。可在插件配置中指定:
配置 · 用途 storageDir · 本插件的数据目录;单进程独占 cookieFile · 显式导入的本机Cookie文件路径;不通过状态API返回凭据 autoSchedule · 是否启动抓取/整理计时,默认 true timeoutMs · 单个生成 Agent 的取消期限,默认 300000
从 DSH 左侧插件区域打开“看点什么”,在“全局配置”从宿主目录选择提供商与模型,在“添加来源”绑定已有工作区。dsh-plugin-subscriptions 通过宿主 LLM 提供商接口复用,不单独保存供应商凭据。Jev profile 不配置时使用 Jev 默认 profile;若其输出只有选项而无完整概率,插件会记录失败,不冒充获得置信度。
Jev fork 0.3.6 的 native 普通模型和 custom 路径均已用合成输入验证完整概率、低置信升级、失败记录和人工审核边界。native 的概率是模型自报估计,不是 token 概率或经过校准的置信度;阈值仍需真实样本验证。工作记录保留 Jev 返回的 profile、model、answers 和 usage,不推测服务未提供的概率来源 metadata。未使用真实 Jev 凭据。订阅提供商仍由宿主目录接入,但第三方提供商插件也必须兼容该宿主。dsh-plugin-subscriptions 0.9.9 的 peer 声明尚不包含 0.2.1-rc.2,本轮未验证其真实订阅调用,不应强行跳过依赖检查。
工作模型和监督模型可以使用不同 provider/model;即便使用同一模型,也分别创建独立会话。任务插件不是依赖;Memory Manager 不作为硬依赖。
gh 授权。先在同一用户下确认 gh auth status --hostname github.com,再启动插件。插件调用 gh auth token --hostname github.com,在内存中以该授权读取固定的 api.github.com,并通过 /user 验证登录身份。不会创建或修改授权,不将 token 写入插件配置、数据库、日志或模型输入。每次采集重新读取授权,分页复用该轮内存授权;命令及网络请求均有超时。gh 不存在、授权失效或请求失败时显示错误并保留已有数据,不自动降级匿名访问。需要匿名读取公开仓库时,可在宿主插件配置中明确设置 githubAuth: public;默认值为 gh。无论 gh 授权本身具有什么权限,当前 GitHub 连接器只采集,canPublish 始终为 false。cookieFile 用于 B 站视频评论采集及按来源授权的评论发送。macOS 可显式运行 node scripts/import-chrome-cookies.mjs .local/credentials/chrome-cookies.json。默认 Chrome 的 Default profile,可将 "Profile 1" 作为第三个参数。导入文件权限为 0600,不会自动续期。旧文件中的 GitHub Cookie 不再用于采集。unknown 发布结果需要人工去原平台核实;本版没有自动对账和恢复发送的界面。GitHub 复用 VPS 上 DSH 运行用户的 gh 登录,无需 Chrome 或复制 Cookie。GH_TOKEN 或 GITHUB_TOKEN 环境变量可能优先于 gh 保存的授权,实际身份以插件显示的 /user 结果为准。
B 站 Cookie 连接器运行时不需要 Chrome。可在自己的 macOS 上显式导出,经安全通道传到 VPS 上 DSH 运行用户的私有目录,设置权限 0600,再将 cookieFile 指向该文件。连接器每次请求重读文件;登录失效后需在本机重新登录、导出并替换。VPS 的出口 IP 是否被平台接受、Cookie 有效期和风控限制需要单独实测。
迁移来源数据时还需处理工作区 ID、目录路径及真实 DSH 会话历史,不能只复制插件状态文件。先使用独立的新宿主数据目录验证,再决定是否迁移旧数据。
npm test 覆盖状态、并发审核、发送不确定性、失败恢复、GitHub 协议和 HTTP 入口。开发依赖锁定上述 Jev 提交,默认运行 native/custom 共享服务到工作流与持久记录的离线测试;native 使用真实 DSH LLM 服务和合成适配器,custom 拦截 HTTP 并返回合成响应,生成与监督使用合成执行器。可使用本机 DSH 安装执行额外的离线宿主测试(不加载默认 profile 或真实模型凭据):
DMC_DSH_ROOT=/absolute/path/to/dsh-install node --test test/host.test.js宿主测试使用真实 Agent Loop、标准 Assembler、工作区、JSONL 持久化和冷会话查询,检查标准工具组件、业务工具绑定、输入顺序、尾部 PHI、必需运行上下文及模型目录白名单。宿主测试还覆盖原生工具直接保存 SQLite、独立监督、人工背景重复冷恢复、只读与计划模式拒绝提交,以及存储目录的可写边界检查。模型输出来自离线合成适配器;这些检查不代替 Web 和真实账号验收。未设置该环境变量时,此测试跳过。
使用同一固定 Jev 开发依赖验证指定宿主的服务挂载、profile 目录和经宿主合成模型的调用,不读取凭据或联网:
DMC_DSH_ROOT=/absolute/path/to/dsh-install \
node --test test/host.test.js test/jev-host.test.js这些测试验证合同与分流,不证明真实模型判断准确。Jev 拒绝缺失概率的响应后,本插件保留实际错误且停止后续生成;native 上游流失败在当前 Jev 中可能仅返回“native 响应不完整”,无法从 ask 恢复原始错误详情。
业务模型、连接器和宿主执行层分离,新增平台需要实现代码适配。详见 架构与连接器合同。本项目采用 MIT。
“看点什么”位于 DSH 左侧插件区域,点击后在右侧主面板展示。每个来源必须选择一个已有 DSH 工作区。分析、监督和人工处理会话均在该工作区创建,并登记到宿主工作区的会话列表。更换来源工作区仅影响新会话。工作区删除或目录失效时会停止新建工作会话,并提示重新选择;旧数据与会话链接保留。
添加来源时先输入仓库或视频链接,再选择内容类型。离开链接输入框后,插件读取标题、简介和主题或分类,建议最多12个标签。B站在视频元信息后读取真实视频标签,再加入可用分类和评论类型。标签读取失败时保留标题与简介并提示手动补充,不自动重试。GitHub 支持仓库、issues、pulls 和 releases 列表链接,单条内容链接会被拒绝;B站支持完整视频链接、BV号和av号。关注规则、阶段背景与补充指令来自本地固定模板,元信息读取失败时仍可使用。手改或手动清空的字段会保留,已有来源只在点击“重新识别并填充空白”时填充空白字段。你仍需手动选择工作区并保存;元信息读取不抓取内容、不整理,也不调用模型。
B站来源填写视频BV号、av号或完整视频链接。每个来源可添加独立上下文、文字资料、工作区内的显式文件引用,以及可编辑的post-history补充指令。资料只读取所选工作区内的非隐藏md/txt/json/csv文件,拒绝越界符号链接;单文件128KB、总量256KB。多个来源不会因使用同一工作区而自动共享全部资料。
模型请求保留前置system数据边界,Assembler在history/input之后追加固定提醒及用户补充指令。当前native后端以真实user消息投递尾部提醒,不伪称system消息;Jev决策指令另行附加同样的边界。测试证明消息顺序与持久化,不能保证模型绝不受注入影响。平台内容及资料不插入可信指令。工作会话使用宿主标准工具及两个受绑定约束的业务工具,发布由插件独立检查权限,已授权的B站自动评论另需明确决策、身份标识和独立监督。
顶栏提供“总览”“学习记录”“全局配置”和“添加来源”。“学习记录”跨来源展示历史批次及待确认提案;在来源详情点击“整理用户评价”会直接发起该来源的学习批次并打开对应记录。总览首先显示综合优先级最高的最多三个已有平台,再显示来源卡片。点击“全部平台”或“展开来源”可单独浏览对应列表。点击平台查看该平台的来源,点击来源进入独立来源页。编辑来源入口位于来源页,全局配置只管理全局默认值。
未读变化按内容项计数,一条评论对话无论新增多少条回复都只计一个未读内容项。需要处理按内容项去重,包含待处理、稍后处理及尚未确认关注的审核草稿。标记“已处理”会确认当前关注,保留现有草稿与历史,现有草稿不会再次顶起待处理提示;后续新内容、分析或草稿等事件会重新提醒。
总览来源综合排序按当前版本的分析重要性排序,有明确依据的紧急性只作有限修正,再比较需要处理数、未读数与内容变化时间。
来源内容列表始终先显示需要处理的项,再按重要性及有依据的紧急性排序,同级按最后更新时间排列,默认新到旧,可切换旧到新。最后更新时间优先使用平台内容的 updatedAt,缺失时回退到采集到变化的时间;抓取时间单独显示。
GitHub 列表默认隐藏已关闭 / 已合并内容,勾选“显示全部”可查看,采集仍全量同步,且此开关不改变整理范围。搜索、筛选和显示开关都在服务端分页前应用,改变条件会回到第一页。尚未整理或内容版本已变化的项不显示过期摘要与重要性。
在添加或编辑来源时,可以调整“来源信息与关注规则”“上下文”“资料”“当前内容及讨论”四个数据块的顺序,也可以调整资料内部的顺序。“更新真实预览”会解析所选工作区内显式引用的文件,并装入选定的真实内容项。新来源没有实际内容时显示占位;尚未解析的文件只显示路径。
顺序保存后用于 Agent、Jev 与人工会话背景。system 任务、真实历史和尾部 PHI 的位置固定。Jev 使用独立协议,同序数据块进入 state,PHI 放入问题 instructions。预览展示数据块和固定边界,不代表模型提供商的完整请求。
顺序、上下文或资料变更会使旧草稿失效,并为后续人工处理创建新会话,旧会话自身的完整历史仍保留。“整理已有数据”只处理当前来源尚未分析的历史基线,以及有新内容版本的项;重复点击不会强制重跑当前已完成项。来源背景或学习指导变更保留已有分析、评价和处理状态,新指导用于后续处理。自动整理和“刷新并整理”继续跳过首次接入且从未分析的已读基线。
来源页的“整理已有数据”会显示处理中,并在结束后显示候选、完成、失败、跳过的内容项数量。没有候选时显示原因,失败时保留具体错误。最近一轮结果保存于来源,重新打开页面仍可查看。来源按钮只处理当前来源;独立到期的自动调度仍会处理其他来源。新整理记录标明“手动触发”或“定时触发”,旧记录无依据时显示“触发来源未知”。完成数按内容项统计,不代表模型调用次数;上下文不足的内容可能只标记人工介入,未调用模型。
全局配置和来源覆盖按抓取频率、Jev 轻量决策、生成与分析、独立监督、内容偏好分组。DSH 中配置了 API 连接后,还需在本插件下拉框中选择宿主已有的提供商与模型。Jev 使用独立 profile,可以在没有生成路线时完成忽略或人工介入判断。只有实际进入决策升级、拟稿或分析时才要求生成路线;监督未单独配置的字段继承生成路线。
评论先由 Jev 返回选项概率,低置信时最多调用一次生成模型升级判断。需要拟稿时才生成回复及分析摘要;PR、issue、release 分别执行审查、核实、摘要任务。摘要来自该次生成或分析的输出,没有独立的总结模型调用。Jev 的忽略、人工介入结果显示固定的分流提示,不声称生成了内容摘要。
各角色使用共用数据块与属于该角色的专属背景。当前内容数据块保留采集原文、讨论与前版原文。分析轮的真实输入另附当前分析和既有工作记录引用,原会话的真实历史由宿主保留,不复制其他会话事件。角色任务指令和额外的 decision、draft 不同。工作记录按实际发生的 Jev 调用和 DSH 角色会话展示,并保留失败原因与输入输出。
生成与监督模型从 DSH 的实际提供商和模型目录选择,包含宿主已注册的订阅提供商。模型列表随提供商按需读取,可以显式刷新。Jev 使用单独的 profile 下拉,保留使用 Jev 默认的选项。列表显示名称并辅助显示 ID,不需要手工填写 ID,也不会自动选择第一项。DSH 0.2.1-rc.2 的官方 DeepSeek 适配器在缺少凭据时会返回空模型列表;可先在宿主模型设置中完成配置,再显式刷新目录。插件不自行补写凭据或构造模型列表。旧选择暂不可用时保留原值并提示重新选择;切换提供商会清除相关旧模型,不能跨提供商继承全局模型。
来源配置保留现有上下文、资料、关注规则、PHI 和装配顺序作为共用背景。你可以分别为 Jev 轻量决策、低置信升级、生成与分析、独立监督补充专属上下文和资料。生成与分析按来源能力执行评论拟稿、PR 审查、issue 核实或 release 摘要,没有独立总结调用。
实际请求只装入共用背景与当前阶段的专属背景。来源预览可选择阶段,展示对应数据块;升级的 decision、监督的 draft 在预览中明确占位,实际执行时才附加真实结果。服务端解析所有显式资料以计算来源版本,预览不会触发模型。人工会话使用共用与生成分析背景,原有会话历史完整保留。
阶段默认限时五分钟,超时记录 TIMEOUT、限时和取消来源;用户取消与插件停止另行保留。计时和结算只针对该轮消息,不取消随后排队的用户会话轮。模型请求失败时,插件展示宿主记录的终止代码、消息、可用的 HTTP 状态与原会话 ID,工作记录保留实际角色会话。TRANSPORT 仅表示宿主报告的传输失败,不能据此断言某个网络或账号问题;插件不会自动换模型路线、改代理或凭据。
同内容项、来源、分析角色、工作区和实际目录再次整理时,优先复用最早有效的持久原会话,可暖态继续或冷恢复。会话忙或有待处理输入时本轮失败并保留原归属,不抢占或另建会话绕过。监督、学习和人工角色保持各自语义。每轮使用当前内容/资料版本和独立收据;历史收据不作为新轮提交。自动工作完成或失败后保留原 Agent,你可以在同一会话继续追问。人工处理会话创建后也保持可用,后台不会提前调用模型。实例由 DSH 的创建者生命周期管理,插件卸载或宿主退出时统一清理;会话在此期间占用宿主内存。真实历史持久保存,重启后由宿主从原 ID 恢复。
插件每五秒按游标读取共享会话目录变化,恢复宿主列表中缺失的已有会话。目录监听在离开插件页面后继续生效,没有变化时不遍历历史身份集合。目录恢复不复制或补写历史。升级前已经显示“会话不可用”的页面可重新载入,以恢复原会话的输入框。
工作、监督和人工会话默认显式挂载宿主已安装的 DSH ptc 模式,新会话固定为 workspace-write 和 ask。PTC 保留宿主工具与 AGENTS 等工作区说明,模型通过 run_code 内的 tools.dmc_read_item(...)、tools.dmc_submit_result(...) 查询和保存业务结果。冷恢复保留用户后来选择的模式和权限;只读或计划模式下,业务提交工具拒绝写入。来源原文、评论和资料仍属于待处理数据,不因此获得发布授权。
创建或恢复业务会话时,插件解析存储目录与工作区的真实路径。存储若位于该工作区、/tmp 或宿主临时目录的可写范围,插件会拒绝启用工作会话,并提示选择更具体的工作区或把存储移到宿主私有目录。符号链接也按实际目标检查。标准文件权限不限制所有读取或网络行为,发布审核仍由插件单独执行。
人工背景先进入宿主待用输入。宿主重启后,打开会话触发恢复时,插件从该轮冻结的来源与内容快照恢复尚未接受的背景。首次用户发言后,宿主依次记录系统消息、背景和用户输入;已经接受的背景不会因再次打开而重复加入。仅查看冷历史时,不把待用背景伪装成已执行消息。
dmc_read_item 查询本来源已采集的内容。先用 section: "items" 按页获取内容 ID,再把返回的 id 作为 itemId,沿用 version 读取正文或评论。评论列表返回摘录和评论 ID,section: "comment" 读取该条完整原文。正文按 Unicode 码点计数的 offset、length 分块读取,沿用同一个内容版本,直到 complete: true。这些 ID 是插件返回的稳定标识,不把远端评论号当作本地内容 ID。
dmc_submit_result 是 Agent 结果的正式保存入口。自动工作角色提交分析、升级判断或监督结论;人工处理角色提交草稿。最终助手文字不作为落稿或监督结论的替代输入。一次提交使用固定 operationKey;精确重试返回原收据,同一个键提交不同内容会失败。
来源绑定的分析工作会话(writer、review、investigate)可以使用 dmc_revise_analysis 更新绑定内容项的最新结论,例如收到稍后完成的验证报告。可先读取 dmc_read_item({section: "analysis"}) 查看当前结论,再提交完整 analysis 和修订 reason,可附报告 ID 或链接 evidenceRefs;引用由 Agent 提供,不代表插件已核验报告。每次更新使用新 operationKey,重试沿用原键和内容。
工具根据真实会话绑定确定目标,采用提交时最新的内容、来源配置和分析版本,不要求配置或内容与原整理轮一致,也不要求该轮已有首次分析收据。version、contextVersion、expectedAnalysisRevision 是可省略的旧参数,传入旧值不会阻止更新。不同操作按提交顺序更新最新结论,并各自保存前一版;相同操作的精确重试只返回原收据,不覆盖之后的结论。
修订会更新面板摘要并追加工作记录,原分析、原收据和真实会话历史保留。它不重新执行整理或派发任务。旧的待监督、待审核或被拦截草稿会标为过期,已发送和发送状态待核实的记录保留。首次自动整理仍用 dmc_submit_result 保存本轮结果;修订工具只更新分析,不生成或发布回复,也不会自动接收任务插件的完成通知。
const current = await tools.dmc_read_item({section: "analysis"});
await tools.dmc_revise_analysis({
operationKey: "verification-followup-1",
analysis: {summary: "验证完成,问题已确认", importance: 2, reason: "报告中的证据支持该问题",
urgent: false, urgencyReason: null, intervention: "review", evidence: "confirmed"},
reason: "根据已读取的验证报告更新分析",
evidenceRefs: ["实际报告的 ID 或链接"]
});从插件内容入口创建的人工会话固定当前内容项和输入版本。读取同来源其他项不会改变存稿目标。需要给另一项存稿时,从那一项新开会话。新稿先显示“等待独立监督”;监督失败或会话失败后,已保存正文仍可查看,并可从草稿启动监督。监督通过后显示“等待你审核”。
在已有 DSH 工作区中直接新建或继续普通会话,也可以使用这两个工具。先调用 dmc_read_item({section: "sources"}) 查找当前工作区绑定的来源,再以 sourceId 查询 section: "items",用返回的 itemId 读取 section: "item"。该返回值包含当前 version 和 contextVersion,后者也计入工作区资料文件的内容。普通会话仅可保存草稿,参数为 {kind: "draft", operationKey, itemId, version, contextVersion, body}。同一会话可为不同内容项分别存稿,来源改绑后权限随之更新。没有绑定来源时来源列表为空。
普通会话的模式、权限、提示词与历史由 DSH 保持原状。插件只向现有会话注册工具,并在内容项的工作记录中保留真实会话入口。保存后的草稿可在插件内容详情中找到,仍需独立监督与人工审核。工作区 AGENTS 索引可以记录工具返回的稳定 ID 和版本,后续通过工具读取原文。
草稿正文保存后不可修改。改稿创建新 ID;替换旧稿需提交旧 ID 与 bodyHash,旧稿显示“已被新稿替换”。新稿需重新监督。发送中、结果待核实和已发送的草稿不能通过改稿覆盖。
插件数据目录包含 console.sqlite,运行时还可能有 WAL 和共享内存文件。目录采用进程锁,数据库使用 WAL、完整同步和外键检查。停用插件并等待关闭后再备份整个数据目录;DSH 会话历史与工作区归属另由宿主保存。