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

跨工具项目记忆 reshuibuduo/tmcra-plugin-deepseek-harness

DeepSeek Harness
reshuibuduo58 天前有提交已提供中文文档扫描:含敏感能力

在多个编码工具间共享项目记忆,切换会话无需重述背景

29.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add reshuibuduo/tmcra-plugin-deepseek-harness
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 58 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-tmcra-memory(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 02:03:24

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

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

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 69 处,展示前 55 条)
  • 发起网络请求
    dist/index.mjs:596
    const response = await this.request(`v1/scopes/${encodeURIComponent(scopeName)}/exports/${encodeURIComponent(exportId)}`, { method: "GET" }, {
  • 发起网络请求
    dist/index.mjs:697
    const response = await this.request(path, init, options);
  • 读取本地文件
    dist/index.mjs:2009
    if (existsSync(marker)) {
  • 读取本地文件
    dist/index.mjs:2010
    if (statSync(marker).isDirectory()) return marker;
  • 读取本地文件
    dist/index.mjs:2011
    const directive = readFileSync(marker, "utf8").match(/^gitdir: *(.+)$/im)?.[1]?.trim();
  • 读取本地文件
    dist/index.mjs:2015
    if (!existsSync(commonDirectivePath)) return worktreeGitDirectory;
  • 读取本地文件
    dist/index.mjs:2016
    return resolve(worktreeGitDirectory, readFileSync(commonDirectivePath, "utf8").trim());
  • 读取本地文件
    dist/index.mjs:2041
    if (!existsSync(configPath)) return void 0;
  • 发起网络请求
    dist/index.mjs:2284
    const outcome = await approval.request({
  • 发起网络请求
    dist/index.mjs:2297
    const response = await fetch(`${connection.baseUrl.replace(/ +$/u, "")}${path}`, {
  • 执行外部命令来自配置/变量
    dist/cli.mjs:131
    const child = spawn(command, args, {
  • 读取本地文件
    dist/cli.mjs:144
    if (process.platform === "win32" || !existsSync(path)) return;
  • 读取本地文件
    dist/cli.mjs:145
    if (((await stat(path)).mode & 63) !== 0) throw new Error(`TMCRA refuses to update ${path} until its permissions are limited to the owner (chmod 600).
  • 写入本地文件
    dist/cli.mjs:161
    await mkdir(dirname(path), { recursive: true });
  • 读取本地文件
    dist/cli.mjs:164
    const document = credentialsDocument(existsSync(path) ? await readFile(path, "utf8") : "");
  • 读取本地文件
    dist/cli.mjs:164
    const document = credentialsDocument(existsSync(path) ? await readFile(path, "utf8") : "");
  • 写入本地文件
    dist/cli.mjs:176
    if (process.platform !== "win32") await chmod(path, 384);
  • 读取本地文件
    dist/cli.mjs:190
    if (!existsSync(path)) return {
  • 读取本地文件
    dist/cli.mjs:195
    const value = credentialsDocument(await readFile(path, "utf8")).toJS();
  • 读取密钥环境变量
    dist/cli.mjs:211
    const apiKey = process.env.TMCRA_API_KEY || values[CREDENTIAL_KEYS.apiKey];
  • 写入本地文件
    dist/cli.mjs:223
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    dist/cli.mjs:228
    if (process.platform !== "win32") await chmod(path, 384);
  • 删除本地文件
    dist/cli.mjs:259
    await rm(pendingPath, { force: true });
  • 删除本地文件
    dist/cli.mjs:270
    await rm(path, { force: true });
  • 删除本地文件
    dist/cli.mjs:274
    await rm(path, { force: true });
  • 删除本地文件
    dist/cli.mjs:403
    await rm(pendingDeliveryPath(dshHome), { force: true });
  • 执行外部命令来自配置/变量
    dist/cli.mjs:420
    const child = spawn(process.execPath, [script, ...forwarded], {
  • 发起网络请求
    dist/cli.mjs:460
    const response = await fetch(`${connection.baseUrl.replace(/ +$/u, "")}${path}`, {
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:37
    const state = JSON.parse(await readFile(join(controlsRoot(), `${key}.json`), "utf8"));
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:47
    await mkdir(controlsRoot(), {
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:73
    await rename(temporary, join(controlsRoot(), `${key}.json`));
  • 删除本地文件
    dist/local-provider-config-CDBjMheh.mjs:76
    if (temporary) await unlink(temporary).catch(() => {});
  • 删除本地文件
    dist/local-provider-config-CDBjMheh.mjs:78
    await unlink(lockPath);
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:327
    await chmod(path, 384);
  • 执行外部命令固定命令
    dist/local-provider-config-CDBjMheh.mjs:330
    const identity = spawnSync("whoami.exe", [
  • 执行外部命令固定命令
    dist/local-provider-config-CDBjMheh.mjs:341
    if (spawnSync("icacls.exe", [
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:436
    if (!existsSync(path)) return null;
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:437
    return assertStoredConfig(JSON.parse(await readFile(path, "utf8")));
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:473
    await mkdir(dirname(path), {
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:479
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, {
  • 写入本地文件
    dist/local-provider-config-CDBjMheh.mjs:485
    await rename(temporary, path);
  • 删除本地文件
    dist/local-provider-config-CDBjMheh.mjs:488
    await rm(temporary, { force: true }).catch(() => void 0);
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:597
    ].filter(Boolean).find((path) => existsSync(join(path, "deploy/Install-TmcraLocal.ps1")));
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:602
    return JSON.parse(await readFile(path, "utf8"));
  • 发起网络请求
    dist/local-provider-config-CDBjMheh.mjs:623
    const response = await fetch(`http://127.0.0.1:${installed.api_port}/readyz`, {
  • 执行外部命令固定命令
    dist/local-provider-config-CDBjMheh.mjs:666
    const child = spawn("powershell.exe", [
  • 执行外部命令来自配置/变量
    dist/local-provider-config-CDBjMheh.mjs:720
    const child = spawn(join(dataRoot, "venv/Scripts/python.exe"), [
  • 执行外部命令来自配置/变量
    dist/local-provider-config-CDBjMheh.mjs:744
    const child = spawn(join(dataRoot, "venv/Scripts/python.exe"), [
  • 执行外部命令来自配置/变量
    dist/local-provider-config-CDBjMheh.mjs:771
    const child = spawn(command, args, {
  • 读取本地文件
    dist/local-provider-config-CDBjMheh.mjs:905
    const html = await readFile(new URL("../resources/memory-center.html", import.meta.url));
  • 读取本地文件
    dist/full-local-config-BiZAIc60.mjs:10
    binding = JSON.parse(await readFile(path, "utf8"));
  • 读取本地文件
    dist/full-local-config-BiZAIc60.mjs:21
    if (JSON.parse(await readFile(configPath, "utf8")).deploymentMode !== "local") throw Error("The selected memory installation is not a local identity."
  • 读取本地文件
    dist/full-local-config-BiZAIc60.mjs:27
    const selected = JSON.parse(await readFile(path, "utf8"));
  • 发起网络请求
    dist/full-local-config-BiZAIc60.mjs:38
    return fetch(input, {
  • 读取本地文件
    dist/full-local-config-BiZAIc60.mjs:47
    const value = JSON.parse(await readFile(path, "utf8"));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-atomic-write@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-agent-loop-testkit@deepseek-ai/dsh-attachment@deepseek-ai/dsh-brand@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-credentials@deepseek-ai/dsh-invariants
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 跨工具共享项目记忆
  • 切换会话免重述背景

TMCRA 集成——给 DeepSeek Harness 提供生命周期记忆。

README

由 DeepSeek 最新模型翻译生成
TMCRA × DeepSeek Harness:跨软件、跨会话的项目记忆 在 DeepSeek Harness、Codex 和其他已接入 TMCRA 的工具之间切换,也不需要重新介绍项目。 每轮收到用户问题后,插件会并行召回“用户全局记忆”和“当前项目记忆”,把证据写入 Harness 可审计的会话记录。回答完成后,用户陈述与 Agent 回答会以两个角色明确的记录写回 TMCRA。 仓库在 src/sdk/ 中附带适配器实际使用、可审查的 TypeScript 客户端与生命周期模块。托管 API、账号、计费、控制面、数据库、部署配置和生产记忆引擎代码均不在公开范围内。 当前状态:技术预览。已针对 @deepseek-ai/dsh 0.1.1-rc.2 与 TMCRA API 0.2.2 验证。DeepSeek Harness 本身仍处于 Developer Preview,后续可能出现破坏性兼容变更。 换软件、换会话,继续同一个项目 TMCRA 为每个账号维护一份用户全局记忆,并为每个项目建立相互隔离的项目记忆。两个受支持的工具使用同一个 TMCRA 账号,并识别到同一个项目身份时,就会读取和更新同一份项目记忆。因此,在 Harness 中完成的工作可以在之后的 Codex 会话中被召回;Codex 写入的新进度,也能在切回 Harness 后继续使用。
展开完整文档(README 剩余 1 节)
TMCRA × DeepSeek Harness:跨软件、跨会话的项目记忆

在 DeepSeek Harness、Codex 和其他已接入 TMCRA 的工具之间切换,也不需要重新介绍项目。

每轮收到用户问题后,插件会并行召回“用户全局记忆”和“当前项目记忆”,把证据写入 Harness 可审计的会话记录。回答完成后,用户陈述与 Agent 回答会以两个角色明确的记录写回 TMCRA。

仓库在 src/sdk/ 中附带适配器实际使用、可审查的 TypeScript 客户端与生命周期模块。托管 API、账号、计费、控制面、数据库、部署配置和生产记忆引擎代码均不在公开范围内。

当前状态:技术预览。已针对 @deepseek-ai/dsh 0.1.1-rc.2 与 TMCRA API 0.2.2 验证。DeepSeek Harness 本身仍处于 Developer Preview,后续可能出现破坏性兼容变更。

换软件、换会话,继续同一个项目

TMCRA 为每个账号维护一份用户全局记忆,并为每个项目建立相互隔离的项目记忆。两个受支持的工具使用同一个 TMCRA 账号,并识别到同一个项目身份时,就会读取和更新同一份项目记忆。因此,在 Harness 中完成的工作可以在之后的 Codex 会话中被召回;Codex 写入的新进度,也能在切回 Harness 后继续使用。

Agent 回答前,TMCRA 会找回与当前问题有关的用户要求、决策、偏好、Agent 工作进度、实现结果、测试结论、未解决问题和下一步计划。当前回合完成后,新的用户陈述与 Agent 结果会分角色更新到同一份记忆中,并保留来源信息。切换软件或新开会话时,用户无需从头解释项目背景。

跨软件衔接只使用已经进入 TMCRA 的记忆,并要求两端识别到同一个项目身份。TMCRA 不会把无关项目混在一起:.tmcra/project.json、Git 项目标识和账号下发的项目 Scope 前缀共同维持稳定边界;session_id 只承担项目内部的来源追踪,不会形成第三个召回孤岛。

已实现能力

1.0.0-rc.1 新增任务接续、会话模式、完整证据块预算和本机记忆控制台。使用 dsh-tmcra-memory memory --scope --session 打开面板;可管理任务、查看来源、纠错、忽略或恢复。三种模式为 normal、recall_only、off。关闭期间的内容不会在恢复后补写;已提交的远端任务保持原状态。有效纠错需要服务端反馈接口同步更新,线上服务须单独升级验收。

工作台现已集成 Writer / 后台整理 API 配置、个人知识库和知识图谱。模型密钥只在本机表单输入并保存在受保护文件中,读取配置仅返回是否已保存;测试使用虚构 JSON 推理样本。知识与图谱分别读取已有服务接口,支持范围切换、搜索、节点选择及原始证据追溯。

在支持工具与原生 ApprovalService 的 DSH 中,tmcra_memory_control 会对真实的记忆纠错请求先暂停该回合的自动写入,然后在聊天内展示来源、拟修改内容和范围,请用户确认。拒绝、取消或无确认渠道均不提交;已标识的其他正常回合不受影响。语义识别由宿主 Agent 按工具说明完成,假设性讨论不构成修改授权。此流程已通过 DSH 0.1.1-rc.2 原生工具/确认服务的隔离测试。

预算默认 12000 字符;仅在证据仍位于实际模型上下文时跨轮去重。任务状态按凭据指纹和项目隔离;多个本机适配器可使用同一个 TMCRA_MEMORY_STATE_DIR。不同登录凭据的本机任务独立,已提交的长期记忆通过相同服务端项目 scope 共享。

- 同一个项目可以在 Codex、DeepSeek Harness 等 TMCRA 接入工具之间继续推进。
- 每轮第一次模型请求前自动召回,无需 Agent 主动调用工具。
- 新开一个 Harness 对话后,可以继续同一项目的工作进度。
- session_id 用于项目内部的来源追踪,不会被设计成第三个独立召回范围。
- 用户内容与 Agent 回答分别保存为 user、assistant 记录。
- 主 Agent 与子 Agent 共享项目记忆,同时保留 Agent 身份、角色、父会话与委派深度。
- 优先根据 Git origin 识别项目,其次使用 Git 公共目录,最后使用规范化工作目录。
- 内容送往 TMCRA 前,会清理常见 API key、Bearer Token、密码、私钥、验证码和带凭据的 URL。
- 召回异常默认不阻断 Harness 回答;写入失败会进入本地持久化待写队列,下次提问前重试。

让每一次项目协作都成为可继续使用的知识

一个长期项目中,真正有价值的信息通常散落在许多轮对话里:需求为什么这样确定、方案受过哪些约束、哪些尝试已经失败、代码改到了哪里、测试得到什么结果、下一步还要完成什么。对话窗口关闭以后,这些上下文很容易被遗忘。再次开始工作时,用户往往需要重新解释项目,Agent 也可能重复调查、重复试错,甚至沿用已经失效的结论。

接入 TMCRA 后,Harness 会在协作过程中自动记录用户表达的目标、要求、决定、修正和工作偏好,同时记录 Agent 完成的分析、实现、测试、问题定位与进度。用户说过的话和 Agent 做过的工作会被分别保存,后续能够判断一项内容是用户作出的决定、Agent 给出的建议,还是已经完成并验证的结果。

随着项目推进,这些协作记录会逐步整理为:

- 项目现状:当前目标、需求与约束、已经完成的工作、正在处理的问题、未完成事项和建议的下一步;
- 决策与实施过程:方案选择及其原因、重要变更、实验与测试结果、失败尝试、故障原因和最终处理方法;
- 可复用的经验:经过实际项目验证的方法、排障路径、设计原则、研究笔记、领域知识和容易踩到的坑;
- 个人工作背景:用户明确表达的偏好、习惯、常用工具、协作方式和长期关注的主题。

这些内容会随项目继续推进而更新。新的结论形成后,系统会更新项目的当前状态,同时保留此前的过程和依据。不同项目分别组织;同一项目中的多次对话可以共享已经积累的背景。用户开始一轮新对话时,Agent 可以先取得与当前问题相关的项目知识,再继续回答和执行任务。

用户可以在 TMCRA 网页端或桌面应用中查看记忆库和知识图谱,搜索项目经历,回到原始对话核对内容,并删除错误、过时或不希望继续保留的记忆。启用本地知识库同步后,稳定的项目知识也可以继续整理到 Obsidian,成为个人可长期维护的资料。

这套能力适合持续数周或数月的开发、研究、产品设计与多 Agent 协作。它减少重复说明、重复调查和重复试错,让项目进度能够跨对话延续,也让一次项目中形成的经验在之后的工作中继续发挥作用。

环境要求

- Node.js 22.19.0 或更新版本
- DeepSeek Harness 0.1.1-rc.2
- Harness 管理插件时需要 pnpm 位于 PATH
- 一个 TMCRA 账号。登录命令会自动创建插件所需的范围令牌。

发布初期,TMCRA 账号免费使用,暂不设置记忆写入与召回额度上限。后续如果调整免费政策,会提前公告,并在用户确认后生效。

安装技术预览包

dsh plugin --profile web add https://github.com/reshuibuduo/tmcra-plugin-deepseek-harness/releases/download/v1.0.0-rc.1/dsh-tmcra-memory-1.0.0-rc.1.tgz
dsh plugin --profile web exec dsh-tmcra-memory login
dsh --profile web --dump-config
dsh web

Harness Web UI 默认地址为 http://127.0.0.1:3080。

压缩包内含 cordis.patch.yml,安装后会自动加入指定 Profile 的配置层。建议使用 Release 中已经构建好的 .tgz。下载到本地后,也可以执行 dsh plugin --profile web add ./dsh-tmcra-memory-1.0.0-rc.1.tgz。从 Git 源码安装可能还需要在 pnpm 中单独允许构建脚本。

DSH 0.1.1-rc.2 的 Windows 版仍可能把包含空格或非 ASCII 字符的本地包路径错误重组。请先把压缩包复制到纯 ASCII 短路径,例如 D:\\dsh-packages\\dsh-tmcra-memory-1.0.0-rc.1.tgz;上面的 Release URL 不受影响。

连接 TMCRA 账号

安装后执行:

dsh plugin --profile web exec dsh-tmcra-memory login

命令会启动带 PKCE 保护的设备授权,并打开 tmcra.com。首次使用需要注册 TMCRA 账号;已有账号可直接登录。核对权限并确认页面上的设备代码后,TMCRA 会签发仅含 memory:read、memory:write 权限的令牌,同时下发账户全局 scope 和项目 scope 前缀。插件会把这些值保存到 Harness 管理的 $DSH_HOME/.credentials.yaml,用户无需手工复制 API key。

dsh plugin --profile web exec dsh-tmcra-memory status
dsh plugin --profile web exec dsh-tmcra-memory logout

status 只显示当前 Profile 的连接状态,不输出令牌。logout 只删除 TMCRA 相关凭据,其他 Harness 凭据会原样保留。电脑遗失或不再可信时,还应在 TMCRA 个人控制台中撤销该连接。

Harness 不会把凭据值写入普通设置或模型请求。如果模型控制的工具和 Harness 使用同一个系统用户,它仍可能读取该系统用户有权访问的本地文件,因此只应在可信本地账号中保留连接。

配置本地 Writer 与后台整理模型

完整本地部署预览

插件包内置完整后端,提供 E5/MiniLM、BGE-M3/BGE reranker、Qwen3 embedding/reranker 三档。装入 DSH 后运行 dsh-tmcra-memory local-install,免登录打开安装页并选择档位。Python、依赖和校验后的模型自动准备,本机身份自动生成,重启 DSH 后自动发现连接。支持 Windows x64,无需预装 Python、TMCRA 账号或 TMCRA 服务器。首次下载需要联网。原云端凭据保留;本地选择生效后,旧云端连接和后台云模型请求会被拦截,安装失败也保持本地选择。高级用户应先清除显式 TMCRA_CONFIG_FILE 覆盖。

CPU 合成写入和原文召回已通过;复杂编译超时,后台整理和完整重启恢复仍待验收。轻量启动需约 6.3GiB 空闲内存。详见验收说明。宿主主模型在云端时,召回证据仍可能由宿主发往云端。

配置独立模型 API

安装后执行:

dsh plugin --profile web exec dsh-tmcra-memory setup

命令会在 127.0.0.1 启动带随机令牌的临时配置页。Writer 与后台整理可以共用一个模型服务,也可以分别填写 Provider、Base URL、模型名称和 API Key。Codex 与 Harness 共用 ~/.config/tmcra/local-providers.json;Key 只保存在当前系统用户的本地文件中,连接测试时只发往填写的模型服务。Provider 或 Base URL 改变后需要重新填写 Key。macOS/Linux 使用 0600 权限;Windows 移除继承 ACL,只授权当前用户与 SYSTEM。

Harness 运行期间,保存后的配置立即生效。写入请求会把 Writer 任务(包括强制慢速阶段)交给经过账号认证的本机执行器;显式整理请求同样会把后台 Organizer 任务交给本机。执行器只领取由当前设备凭据创建的任务,调用所配置的 OpenAI 兼容接口,并仅向 TMCRA 回传解析后的 JSON、标准化 Token 用量和 Provider Request ID。模型 API Key 与供应商原始响应始终留在当前用户的本机进程。

插件默认配置:

- insert:
- id: tmcra-memory
name: dsh-tmcra-memory
config:
baseUrl: https://api.tmcra.com
baseUrlEnv: TMCRA_API_BASE_URL
apiKeyEnv: TMCRA_API_KEY
globalScopeEnv: TMCRA_GLOBAL_SCOPE
projectScopePrefixEnv: TMCRA_PROJECT_SCOPE_PREFIX
evidenceMode: auto
recallFailureMode: continue
waitForIngest: false
recallTimeoutMs: 30000
ingestTimeoutMs: 30000

受控部署可以显式填写 globalScope、projectScopePrefix 与 projectScope。个人电脑上的常规使用建议保留自动项目识别:不同项目相互隔离,同一个项目里的不同会话可以继续彼此的进度。Harness 接入与 Codex 接入共用 .tmcra/project.json 标记和 Git 项目 scope 公式,因此两种工具能够落到同一张项目记忆图。

自动链路

用户提问 -> 等待同项目上一轮写入 -> 恢复本地待写队列 -> 并行召回全局与项目记忆 -> 注入可审计的 TMCRA 证据 -> Harness 模型与工具循环 -> 本轮正常完成 -> USER / ASSISTANT 分角色写回

召回证据使用 Harness 的持久插件消息形式(form: recall),会保留到 Harness 执行上下文压缩。插件不会隐藏或改写用户本地的 Harness 会话记录。

验证

npm run typecheck
npm test
npm run build
npm run test:dsh-compat
npm run pack:check
pnpm audit --prod

公开单元测试覆盖生命周期 Hook、Scope 推导、角色分离、敏感信息清理、召回注入和持久化 Outbox。生产服务契约测试会导入 TMCRA 控制面模块,因此继续保留在私有环境;下方公开验收结果,但不公开服务端实现。

远端测试会连接真实 TMCRA 账户,并创建两个互相独立的 Harness 会话:

TMCRA_REMOTE_API_KEY=... \
TMCRA_REMOTE_CLEANUP_API_KEY=... \
TMCRA_REMOTE_GLOBAL_SCOPE=... \
TMCRA_REMOTE_PROJECT_SCOPE_PREFIX=... \
npm run test:remote

它核验写入、任务完成、新会话召回与待写队列清空。TMCRA_REMOTE_CLEANUP_API_KEY 是可选项,只用于删除一次性测试会话;插件日常令牌仍只需要 memory:read 与 memory:write。回答端使用记录型测试 Adapter,因此不会消耗外部回答模型的 Token 或费用;TMCRA 记忆处理链路自身的模型用量仍会单独计入服务端账本。

2026 年 8 月 14 日,技术预览通过了生产 API 验收:全新项目的两个完整回合写成四条分角色记忆,第二个独立 Harness 会话成功取回用户检查点与 Agent 进度。服务端账本在 deepseek_harness 平台下记录了两次写入事件(共 53 个估算写入 Token)和两次召回请求:第一次面向全新 Scope,按设计容错放行;第二次完成有效的跨会话召回。记忆处理链路另记录 7,894 个模型 Token,已知模型 API 成本为 ¥0.00。验收结束后,两个一次性 Session 均已删除;相关记忆记录、服务消息、Session 记录、活动 Base/Delta 索引指针和外键错误均为 0。测试设备连接、上游范围令牌与本地 Harness 凭据也已全部注销或移除。

当前边界

- 账号连接和本地模型配置采用 CLI 引导加浏览器确认;Harness 内部暂时没有嵌入式 TMCRA 设置页。
- 暂未提供 Harness 历史会话导入。
- 长会话中的上下文增长遵循 Harness 的召回消息与压缩机制,仍需补充长时间工作负载测试。
- 当前精确锁定并验证 Harness 0.1.1-rc.2;DSH 仍快速迭代,每次发布新版本都需要重新跑兼容性验收。
- npm 包尚未正式发布;当前安装产物是已经审计的 .tgz。
- 使用真实 DeepSeek 模型完成回答,需要用户自己的 DeepSeek 凭据;记忆生命周期测试本身不依赖该凭据。
- 记忆库和知识图谱通过 TMCRA 网页端或桌面应用查看;Harness 接入在对话过程中后台运行。

许可

Apache License 2.0。Copyright 2026 Yu Haoxin and TMCRA contributors.
预览分享卡片长什么样 ↓reshuibuduo/tmcra-plugin-deepseek-harness
分享 · DeepSeek Harness Hub
reshuibuduo/tmcra-plugin-deepseek-harness

在多个编码工具间共享项目记忆,切换会话无需重述背景

这是你的仓库?认领条目

回到顶部