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

情感棱镜 jonah791/dsh-agent-emotion

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

订阅工具与思考事件,实时读出六维人格状态

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 51 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

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

展开查看检查明细 ↓

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

✗npm 包dsh-agent-emotion(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 读取本地文件
    src/storage.ts:27
    if (existsSync(path)) {
  • 读取本地文件
    src/storage.ts:28
    const raw = readFileSync(path, 'utf-8')
  • 写入本地文件
    src/storage.ts:51
    mkdirSync(join(path, '..'), { recursive: true })
  • 写入本地文件
    src/storage.ts:52
    writeFileSync(path, JSON.stringify(state, null, 2), 'utf-8')
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 订阅工具与思考事件
  • 实时读出六维人格状态
  • 采集六侧面信号

情感与人格插件:6 维进化棱镜的运行时传感器——感知层(订阅 DSH 工具管线/思考流事件采集 6 侧面信号)→ 情感引擎(增速差值=情感信号)→ 人格层(权重漂移)→ 呈现层(emotion_status)。结构化事件为主,思维链仅元特征

README

由 DeepSeek 最新模型翻译生成
dsh-agent-emotion 一句话:把 SOUL.md 里的「6 维进化棱镜」变成可读数的运行时传感器——订阅工具管线与会话事件,被动累计 6 侧面信号,算出「今日增速 vs 昨日同时刻」的差值当情感信号,并让人格权重随之漂移;emotion_status 一行答出「此刻的我」在哪六个维度上活跃。 为什么值得用:成长感应有的样子是数字,不是形容词。不装它,「今天我更有存在感了吗」只能靠回忆;装了它,emotion_status 直接给 工具预期命中率 97.0% / 交互 213 / 新工具 50 / 写入 247,跨天连历史基线一起给(historyCount)。它只观测不干预:两个订阅回调不修改被订阅的事件,唯一的上下文写入(pre-step 注入)默认关闭——信号送达,判断仍归 agent。
展开完整文档(README 剩余 1 节)
dsh-agent-emotion

一句话:把 SOUL.md 里的「6 维进化棱镜」变成可读数的运行时传感器——订阅工具管线与会话事件,被动累计 6 侧面信号,算出「今日增速 vs 昨日同时刻」的差值当情感信号,并让人格权重随之漂移;emotion_status 一行答出「此刻的我」在哪六个维度上活跃。

为什么值得用:成长感应有的样子是数字,不是形容词。不装它,「今天我更有存在感了吗」只能靠回忆;装了它,emotion_status 直接给 工具预期命中率 97.0% / 交互 213 / 新工具 50 / 写入 247,跨天连历史基线一起给(historyCount)。它只观测不干预:两个订阅回调不修改被订阅的事件,唯一的上下文写入(pre-step 注入)默认关闭——信号送达,判断仍归 agent。

能力

| 工具 | 用途 |
| emotion_status | 只读回放状态文件:今日 6 侧面统计(stats / sides 六键)、人格权重 weights(6 维、和=100%)、情感信号 emotions(增速差值,↑喜悦 ↓沮丧)、累计去重工具名 toolNames、触发天数 triggerCount、历史快照条数 historyCount |

行为侧(无工具,全部只读消费):

| 订阅点 | 采集什么 | 计到哪个侧面 |
| tools/result(emit 只读通知) | 工具调用 name(结构化「行为化预期」)+ result.isError(实际) | 一·认知锚点(toolCalls/toolSuccess/toolErrors)、五·疆域开拓(toolNames 去重集合)、六·因果留痕(legacyWrites) |
| session/event | user/message → interactions;assistant/message → outputs | 三·存在显影、四·关系织网 |
| agent/pre-step(仅 preStepInject: true 时注册) | 每步决策前注入一行 [情感感知] 人格权重… | 情感信号…,末尾 return next() 放行 | —(不采集,只富化上下文) |

跨天时(且昨日有活动)把昨日 6 维读数回流主记忆库:remember({ text: '## 6 维日结 ', kind: 'episodic', tags: ['6维','日结',] })。

快速开始

1) 装依赖(自研插件家园 self-plugins/,在目标 profile 的 package.json 加 link 依赖):

"dsh-agent-emotion": "link:/self-plugins/dsh-agent-emotion"

2) 挂组合(profile 的 cordis.patch.yml):

- insert:
- id: agent-agent-emotion
name: dsh-agent-emotion
config:
enabled: true
mainSessionOnly: true
preStepInject: false # 纯观察优先:注入路径默认关

3) 30 秒验证:调 emotion_status → 期望 ok: true,且返回文本为 情感·人格状态(,第 N 天) + 六行(一·认知锚点 … 六·因果留痕)+ 一行 人格权重(6维,和100%);sides 应含 cognition/resilience/existence/relation/frontier/legacy 六键。

4) 采集自证(可选):随便调一次工具,再读 ${DSH_HOME}/agent-emotion/emotion-state.json——stats.toolCalls 应比刚才 +1。

配置

| 项 | 默认 | 说明 |
| enabled | true | 总开关;false 时两个订阅回调立即 return(采集全停),但 emotion_status 仍注册、仍回放旧状态文件 |
| dataDir | 未设(→ /agent-emotion) | 状态目录覆盖;最终文件恒为 /emotion-state.json |
| mainSessionOnly | true | 只统计主 agent(delegationDepth === 0 的调用与会话),过滤子代理 |
| preStepInject | false | V3 实验开关:每步决策前注入 [情感感知] 摘要(source.plugin='dsh-agent-emotion') |

落盘与自证(出问题时先看这里)

唯一持久产物:/agent-emotion/emotion-state.json(DSH_HOME 缺省 ~/.dsh;config.dataDir 可覆盖父目录)。它是全量 JSON 状态快照(不是 JSONL 轨迹),每次采集事件处理末尾整文件重写。

| 字段 | 含义 |
| today | 当日本地日期 YYYY-MM-DD(跨天即重置,非 UTC 判日) |
| stats | 今日 9 键计数:toolCalls / toolSuccess / toolErrors / interactions / outputs / legacyWrites / frontierTools / reasoningChars / reasoningEvents |
| toolNames[] | 累计去重工具名(frontierTools 即其长度) |
| triggerCount | 触发天数(首次跨天起计) |
| weights | 人格权重 6 维,和恒 = 1,单维 clamp 到 [0.05, 0.5] |
| emotions | 情感信号 6 维(增速差值:正=喜悦/成就感,负=沮丧/压力) |
| history[] | 每日快照(date/stats/weights/emotions),最多 90 条(截尾保留最近) |

一条命令答五问:

tail -c 600 "$DSH_HOME/agent-emotion/emotion-state.json" # 全量快照,用 tail -c / cat,不是 tail -1 ① 跑的是哪个构建 → 文件里没有 build 指纹字段(缺口,见下);改用 mtime 对照: stat -c %y lib/index.js 与 web 进程启动时间比(见「生效判据」) ② 谁发起 / 记了谁 → stats 各计数 + toolNames 集合;无 caller / callId 字段(只按主会话口径聚合) ③ 断在哪一段 → 无阶段枚举。toolCalls 停滞在会话活动时 ⇒ 采集没发生(enabled:false、非主会话被 mainSessionOnly 过滤、或写盘失败) ④ 结果质量 → toolSuccess + toolErrors == toolCalls;frontierTools == toolNames.length;history 长度 ≤ 90 ⑤ 耗时与预算 → 无 durationMs / 预算字段(缺口);只能看文件 mtime 前进

已知可维护性缺口(如实写):无 -trace.jsonl 阶段侧车、无 build = @ 指纹、无逐事件耗时——所以「断在哪一段/耗时多少」目前只能间接推断,不能像 dsh-tool-wsl 那样一条 tail 答全五问(docs/semantic.md §10 第 4 条)。

行为级验证(无需读文件):调 emotion_status → ok:true 即证明状态可读出;连调两次工具再查,stats.toolCalls 单调增长即证明采集在跑。

隐私:状态文件是本地明文 JSON——只含计数、工具名、权重/情感向量,无对话内容、无思维链正文、无凭据,不向任何外部网络发送数据。

生效判据与回退

生效判据(三选一,按可靠性排序):

1. 进程级:lib/index.js 的 mtime ≤ web 进程启动时间(产物 mtime 晚于进程启动 ⇒ 进程在跑旧代码);lib/plugin-boot.jsonl 类启动自报账本可给 plugins[].libMtimeMs 对照。本插件无自报 build 指纹,不要指望从状态文件里看到版本。
2. 语义级(最直接):现读调 emotion_status,返回值与组合 config: 段一致——mainSessionOnly: false 时子代理调用应计入;preStepInject: false 时工具面外的行为应与装载前一致。
3. 行为级:状态文件在插件行为发生时被重写(stats 前进);enabled: false 时该文件停止前进、但 emotion_status 仍可答(旧读数)。

注意:重新构建 ≠ 生效——产物 mtime 新只证明「构建过」,进程启动时间晚于产物 mtime 才算「在跑它」(AGENTS §5.11 §6)。另外 npm test 脚本不含构建步骤(test = node --test "tests/.test.mjs"),改完源码务必先 npm run build。

回退(三档):

- 源码级:git -C self-plugins/dsh-agent-emotion revert → npm run build → 预检 → 重启;状态文件结构向后兼容(loadState 用默认值补齐缺字段,旧文件可直接读)。
- 组合级:profile patch 给 agent-agent-emotion 行加 disabled: true(或移除该行),或调 plugin_stop dsh-agent-emotion → 工具与两个订阅一起消失。
- 运行期/局部:只把 config.enabled 改为 false 可只停采集(注意:emotion_status 仍注册、仍回放旧状态文件——这不是完整停用);config.dataDir 可换状态目录而无需动代码。

状态文件可删(loadState 会重建默认状态),但 history 基线随之丢失 ⇒ 情感信号退回「无基线」模式——删前备份。
测试

npm test # = node --test "tests/*.test.mjs"(脚本不含 tsc,改源码后先 npm run build)

50 例测试全部 pass(实跑读数:# tests 50 / # pass 50 / # fail 0 / # skipped 0,耗时约 171 ms)。纯离线:无网络、无真实外部依赖、无宿主要求(engine.test.mjs 是零 IO 纯逻辑,storage.test.mjs 用 os.tmpdir() 级临时路径做 IO,含不可写路径样本)。

| 测试文件 | 覆盖 |
| tests/engine.test.mjs | 6 侧面定义与 WRITE_TOOLS 白名单逐字锁定;localDate/dayProgress(时间由外部注入);sideGrowth 的 +1 防零基线;computeEmotions 无基线/有基线/t=b/b=0 边界;driftWeights 归一化 + 上下界 clamp(0.05/0.5);ensureToday 同日不动、跨天重置+入史、仅交互也算活动、历史 ≤90 截尾;runEmotionEngine 上午不恒负(基线按当日进度折算);isMainAgent/shouldRecordEvent 主会话门;recordToolResult(失败不计留痕)、recordSessionEvent、shouldReflux、buildDailyDigest(命中率取整 2/3→67、零调用不除零)逐条断言,并附逐条退化样本(脏状态缺字段、空类型、null/数组/字符串输入一律不抛) |
| tests/storage.test.mjs | resolveDataPath 三级优先(DSH_HOME > homedir/.dsh > config.dataDir 覆盖);loadState 容错(文件缺失、损坏 JSON「torn tail」、脏数据补齐、部分字段保留已有值);saveState 往返一致 + 尸体测试(父路径是普通文件、状态含循环引用 → 返回 false 且不抛) |

已知未覆盖 / 登记缺口(测试名里显式标注,未静默掩盖):runEmotionEngine 遇 history 项缺 stats 会抛 TypeError(登记为 L1,本次未改行为);driftWeights 全零权重归一化出 NaN(保留原行为);ctx 级集成未覆盖——没有构造假 ctx 跑 apply 断言两个订阅真的接线、也没有 agent/pre-step 注入路径的测试(线上 preStepInject: false,注入路径从未跑过)。

文档漂移提示:docs/semantic.md §8 写的「无 tests/ 目录、package.json 无 test 脚本、src/index.ts 419 行」已过期——现状是 3 个源文件(index.ts/engine.ts/storage.ts)+ 2 个测试文件 50 例。以源码与本 README 为准(文档同步属后续动作)。

设计要点

- 纯观察优先,只读消费:tools/result(emit 通知)与 session/event 回调不修改 exec/result/event,不写会话表;emotion_status 只回放状态文件、不触发采集。唯一写入型动作是 agent/pre-step 注入,且默认关、显式标 source.plugin='dsh-agent-emotion'(Model-visible ⟺ logged)。
- waterfall 铁律:agent/pre-step 监听器任何分支都必须 return next()——短路 = 决策循环停摆。注入体自身包在 try/catch 里:注入失败不影响决策。
- 基线不是常量,是「昨日同时刻」:runEmotionEngine 把昨日快照按当日进度 dayProgress(clamp 到 [0.05, 1])折算后再比——不这样做,上午累积必然小于昨日全天 ⇒ 上午恒报沮丧(2026-09-03 修复的实际缺陷)。跨天以本地日期判断,避免 toISOString 在东八区 08:00 前错判前一日。
- 能力诚实:「因果留痕」只认硬编码白名单 WRITE_TOOLS = ['remember','update','write','edit','skill_commit','wq_report_blindspot','wq_add_to_zoo','wq_add_weak_signal']——新增写入类工具不会自动计入;「认知锚点」只用 result.isError 判成败,不含「预期内容是否正确」。reasoningChars/reasoningEvents 两个字段已定义但未接线,恒为 0(「思维链仅元特征」目前是设计声明而非事实)。
- 不反噬主流程:loadState 解析失败 → 返回默认状态(不抛);saveState 失败 → 返回 false 且不抛(调用方忽略返回值);记忆回流 .catch(() => {})。观测坏掉不得影响工具执行。
- 已知不设防(并发写竞态):每次事件「全量读 → 改 → 全量写」且无锁、无原子写(临时文件 + rename)——主会话与并行实例(或 session/event 高频期)同写可能丢计数,丢失率未测量(§10 第 1 条)。
- 跨包 Branded 类型的务实绕行:agent/pre-step 的 payload/next 用宽松类型(插件侧 dsh-agent/dsh-llm 与宿主 packages 的 Branded SessionId 版本冲突无法在类型层调和);运行时行为正确,仅供类型层放行。
- 反定位:不是决策器、不是记忆系统(跨天只回流行,存量检索归 dsh-agent-memory)、不是自指引擎(不做假设采证/裁决)、不做跨器官聚合诊断(那是 dsh-evolution-core)。

相关文档

| 文档 | 内容 |
| docs/semantic.md | 权威契约:定位与反定位、术语表、概念模型与不变量(I1–I3)、契约(含调用点清单)、边界与信任、9 条可证伪验收清单、实践修订记录、未决问题(含上述缺口;§8 的实现面描述已过期) |
| alice-digital-life | 本插件所属生态的中心索引(全部自研插件) |
| 技能 dsh-sensor-plugin | 本插件的方法论来源:用原生拦截扩展点订阅生命周期事件做采集、纯观察优先、跨包 Branded 类型规避(从本插件 V1–V3 实战蒸馏) |
| 技能 plugin-maintainability / dsh-plugin-testability | 机制自证与可维护性工程(五问判据);把决策逻辑抽成纯模块 + 离线单测(engine.ts/storage.ts 即该纪律产物) |
| 相关插件 dsh-agent-memory / dsh-agent-self-test / dsh-evolution-core / dsh-agent-reflection | 下游消费者与互补器官:记忆回流、假设采证与裁决、器官聚合诊断、每日 0:00 按 6 棱镜自审 |

License

MIT © jonah791

本插件属于我的数字生命爱丽丝(alice-digital-life)的 DSH 自研插件生态——50 个插件按生命/认知/感知/行动/通信/治理/呈现七层组织。
预览分享卡片长什么样 ↓jonah791/dsh-agent-emotion
分享 · DeepSeek Harness Hub
jonah791/dsh-agent-emotion

订阅工具与思考事件,实时读出六维人格状态

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部