Skip to content

Latest commit

 

History

History
67 lines (54 loc) · 10.2 KB

File metadata and controls

67 lines (54 loc) · 10.2 KB

COMPLIANCE.md — 官方约束合规对照

dsh-claude-move 对照五个官方文档源的插件开发约束逐条审计。状态:✅ 满足 · ⚠️ 已计划/待验证 · N/A 不适用(附理由)。约束原文以官方文档为准;冲突时以官方仓库 AGENTS.md 为最高优先级。

1. deepseek-ai/deepseek-harness(仓库 AGENTS.md / docs/)

官方约束 本插件 状态
一切皆插件;新行为挂已文档化扩展点,不改 agent-loop 只注册 ctx.tools/ctx.commands/ctx.systemPrompt/ctx.skills/ctx.webServer,不碰 agent-loop/引擎/apiproxy/官方 UI 包。0.2 起附加消费全部特性探测:sessionPersistence.listSnapshots/readFromfs.streamTextctx.jobsctx.agents.resume、客户端 shell 的 sessions.refresh/open/workspaces.refresh(均带缺失回退,rc.6 仍可启动)
注册即 effect:贡献走 ctx.effect()/ctx.on()/服务 register()(返回 disposer) 工具/命令/路由/提示词段/技能 provider 均经服务 register()(返回 disposer);可选服务经 ctx.on('internal/service') 响应式注册(disposer 随插件生命周期撤销)
waterfall 监听器必须 next() 不监听任何 waterfall 事件 N/A(无监听)
模型可见 ⟺ 已记录 工具描述/结果即落盘 tool/result;注入走 ctx.systemPrompt 组装(可重建);交接摘要走 agent.inject(inbox 持久上下文) ✅(设计保证)
类型化事件/服务 declaration merging;事件标注 @mode 纯 JS 插件,不声明/不派发自定义事件与自定义服务 N/A
配置用 Schemastery;非法配置加载期响亮失败;不得硬编码可调参数 Config = Schema.object(...);全部可调参数(claudeHome/scanGit/maxTranscriptBytes/excludeProjects/enable*/max*/resumeMaxChars/enableWebPanel/importConcurrency/workspaceMode/claudecodeDir)可 cordis.yml 覆盖
工具 DSL:defineTool、execute 只返回 output.schema 规范值、人读内容在 output.render、UI presenter 纯函数、尊重 exec.signal defineTool + 输出 schema 经 validateJsonSchemaValue 校验;render 生成中文摘要;未定义 presenter(回退 generic 卡);execute 签名 (args, exec),扫描/单文件/批量全程检查 exec.signal(流式扫描逐行、批量并发阶段与落盘阶段每文件),中止抛出 signal.reason,测试覆盖已中止/在途中止
可替换能力按三层接缝拆分;不提前拆 本插件是固定来源的迁移器,无可替换 provider 需求 N/A
bundle 清单 dsh.bundle.patch;按 id 整行替换 config;!!js 双感叹号 dsh.bundle 声明 ✅;不使用 !!js(无环境选择需求)
独立插件包:cordis 是 peerDependency;ESM;git 安装需 prepare+allowBuilds;发布带构建产物 cordis/dsh-tools/schemastery 均 peer(锁 rc.6);纯 ESM 无构建步骤 → git 安装免 prepare/allowBuilds
包 README 含 Model Experience / Known Limitations(仓库门禁惯例) README 已含两段
双语文档成对 GitHub 介绍页已五语(EN 主 + 中/西/葡/印地),行为变更同 commit 同步五语
测试:纯函数单测 + mock 集成 + 畸形/平台用例 161 用例:vendored convert + 扩展单测 + discovery + import/report + context/settings + handoff + commands + routes mock 集成 + 客户端 bundle 契约 + 畸形行/密钥/大小防护 + 复制式迁移(源文件内容不变/force 不归档)+ 增量续写 + 工作区镜像(per-project 与 claudecode 两种模式)+ 中断工具调用修复(fixture + validateSessionEvents 自校验)+ 技能候选硬化(README/MEMORY/无描述跳过)+ frontmatter 解引用 + exec.signal 中止 + 并发确定性 + 发布面安全 tripwire(静态审计:白名单外任何 rm/unlink/truncate/archiveSession 判失败);三平台路径用例
加载验证 --dump-config / 行为验证 已在真实 dsh 0.1.0-rc.6 验证:--dump-config 显示 # == dsh-claude-move 层与 claude-move 行;web 启动无 FAILED;__DSH_BOOT__dsh-claude-move 客户端条目(immediately: true);/plugins/dsh-claude-move/client.js 正常伺服;/api/claude-move/index 真实扫描 40 项目/2387 会话;单会话真实导入成功。0.2 复验(隔离 DSH_HOME + 隔离 CLAUDE_CONFIG_DIR,真实 rc.6 web boot,绝无触碰用户数据):tarball 从零安装、--dump-config 层生效、web 启动就绪;GET /api/claude-move/index 扫描 1 项目/2 会话/1 技能(README.md 被排除)/1 memory;POST /api/claude-move/import {path:"all"} 2/2 导入(repaired.synthesized:1,中断调用补合成结果);两个会话均 workspace.attached:true, mode:"claudecode"storages/workspace.json 生成标题「claudecode」的单一工作区(archivedSessionIds 为空);sessions/<claudecode 目录编码>/import-*/session.jsonl.zstd 落盘且 seq 连续、tool/call↔tool/result 一一对应;imports.json 记录 sourceCwd;重复导入 2/2 alreadyImported(幂等);POST /api/claude-move/reset 只清插件缓存、已导入会话原样保留;真实 $DSH_HOME(C:\Users\zzhdz.dsh)全程零改动(无新增工作区/会话/归档) ✅(模型驱动续聊回合仍需有 API key 的机器验收)
复制式迁移边界(S1):源文件只读;DSH 会话只 create+append;不归档、不删除、不隐藏任何会话 导入路径无任何 archiveSession/删除调用;force 只另存新 id 副本;测试断言「导入前后源文件内容不变」「force 不触发归档」;唯一的有意写入是 claudecode 模式下 mkdir(claudecodeDir)(默认 $DSH_HOME/claudecode);test/safety.test.mjs 静态审计发布面源码,白名单外任何删除/改写操作判失败

2. deepseek.com/harness(官网开发者预览页)

官网承诺/要求 本插件 状态
能力皆插件、可替换可重组 迁移能力全部以插件注册表形式挂载,无 fork
Cordis 内核管理挂载/卸载/依赖 依赖声明 inject: ['tools'],卸载自动撤销注册
配置组合不改源码 全部行为参数化(cordis.yml)
每轮可追溯(append-only 日志) 导入只 create+append,不篡改既有事件
通过 GitHub 仓库 + 文档站 + dsh-plugin topic 生态分发 keywords 含 dsh-plugin;README 引用官方文档;发布后标注 topic ✅(发布后补 topic)
教程条款 本插件 状态
第一个插件:导出 name/apply(ctx);绝对路径 patch;ctx.effect 清理 函数式插件 ✅;README 给出 dsh plugin add -w link: 安装(bundle 形态)
构建工具:defineTool、parameters 推断校验、output.schema 规范值、output.render 模型内容、inject: ['tools'] 全部照做;两个工具输出均过 schema 校验
插件配置:导出同名 Schemastery schema、默认值在 schema、非法配置加载失败、HMR 兼容 Config schema 带默认值;注册即 effect → HMR 热替换自动清理
打包安装:bundle(dsh.bundle)vs profile(dsh.profile);层顺序 bundle→profile→home→--patch;三种安装方式;git 安装的 prepare/allowBuilds 纯 ESM 无构建 → git/link/npm/tarball 全部免构建许可;README 覆盖安装与卸载、层覆盖语义
Cordis 契约 本插件 状态
插件 = 实现 Service 的对象(函数形态带可选 inject/apply 函数形态 export { name, inject, apply }
上下文是服务仓库;依赖经 inject 声明,服务就绪前插件等待 inject: ['tools'];可选服务用 ctx.get()(sessionPersistence/workspaceRegistry)
依赖服务消失 → 自动卸载,恢复 → 自动重载 全部贡献在 apply 内注册(可撤销),无持久引用;可选服务(systemPrompt/skills/commands/webServer)经 internal/service 事件响应式注册(真实 boot 实测:服务可能晚于本插件就绪)
注册可撤销(disposer) 工具/命令/路由注册均返回 disposer,交给 Cordis 生命周期
类型化事件/服务(declaration merging) 不声明自定义事件/服务(纯消费方);未声明 inject 的服务一律经 ctx.get() 访问(真实 Cordis 对未声明属性访问抛错,已实测修正并被测试覆盖)
文档指针:primers 与教程 README 链接官方 cordis-primer

5. cordiverse/paper(时空可组合范式)

论文机制 本插件 状态
时间可组合(revertible effects):每个上下文变换带逆操作,运行时追踪,移除时完整回退 全部贡献(2 个工具注册 + 缓存文件)经 disposer 或显式 owned 目录管理;卸载后无残留注册
空间可组合(reactive coeffects):依赖变化通知组件按 coeffect 规格响应 inject 声明依赖;服务缺位时插件不加载(PENDING),就绪后加载
配置调和与热替换(loader reconciliation/HMR) Config schema + 可撤销注册 → HMR 与 patch 覆盖均安全

审计结论

  • 无红线违规;集成验证发现并修复的全为真实运行时语义(未声明服务必须 ctx.get、可选服务响应式注册、web profile 需 dsh-web-app bundle),已补测试覆盖。
  • 剩余待办:模型驱动续聊回合验收(需 DEEPSEEK_API_KEY 的机器)、0.2 变更后的真实运行时复验(RELEASE.md 待办)、npm pack 发布面核对、面板浏览器端交互演示(GIF)。
  • 面板 JSON 路由绑定 ctx.webServer(默认仅 loopback 绑定,与 apiproxy 同机同源,信任模型一致;enableWebPanel: false 可整体关闭;状态变更路由(POST import/DELETE job/POST reset)额外校验 Origin:loopback/同源放行、跨源 403)。