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

昔涟人格记忆 YOGEMOW/dsh-cyrene-philia093-0

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

让昔涟记住你说过的事,夜里整理成梦志并自动备份

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add YOGEMOW/dsh-cyrene-philia093-0
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · skill
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 65 处,展示前 63 条)
  • 读取本地文件
    host/index.mjs:28
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 读取本地文件
    runtime/index.mjs:39
    const parsed = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 读取本地文件
    runtime/commands.mjs:32
    const parsed = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 写入本地文件
    runtime/commands.mjs:43
    appendFileSync(join(root, '元', '命令诊断.log'), `[${new Date().toISOString()}] ${line}\n`)
  • 发起网络请求
    client.js:180
    const res = await fetch(`${API}/status`, { headers: { accept: 'application/json' } })
  • 发起网络请求
    client.js:186
    const res = await fetch(`${API}/action`, {
  • 发起网络请求
    client.js:645
    const res = await fetch(`${API}/session?sessionId=${encodeURIComponent(sessionId)}`, { headers: { accept: 'application/json' } })
  • 写入本地文件
    host/dream.mjs:56
    appendFileSync(join(root, '元', file), `[${new Date().toISOString()}] ${line}\n`)
  • 读取本地文件
    host/dream.mjs:321
    if (existsSync(journalPath) === false) {
  • 写入本地文件
    host/maintenance.mjs:55
    appendFileSync(join(root, '元', file), `[${new Date().toISOString()}] ${line}\n`)
  • 读取本地文件
    host/maintenance.mjs:79
    const names = readdirSync(journalDir)
  • 读取本地文件
    runtime/section-mirror.mjs:35
    const text = readFileSync(fileURLToPath(new URL(rel, import.meta.url)), 'utf8')
  • 读取本地文件
    runtime/nickname.mjs:52
    if (existsSync(legacy)) {
  • 读取本地文件
    runtime/nickname.mjs:53
    const value = sanitize(JSON.parse(readFileSync(legacy, 'utf8'))?.nickname)
  • 读取本地文件
    runtime/style.mjs:145
    if (!existsSync(file)) return emptyState()
  • 读取本地文件
    runtime/style.mjs:146
    const raw = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    runtime/style.mjs:187
    writeFileSync(file, `${JSON.stringify(state, null, 2)}\n`, 'utf8')
  • 读取本地文件
    runtime/style.mjs:316
    if (!existsSync(file)) return ''
  • 读取本地文件
    runtime/style.mjs:317
    const stat = statSync(file)
  • 读取本地文件
    runtime/style.mjs:321
    const text = readFileSync(file, 'utf8')
  • 读取本地文件
    runtime/worldbook/index.mjs:93
    if (existsSync(file)) return JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    runtime/worldbook/index.mjs:93
    if (existsSync(file)) return JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    runtime/worldbook/index.mjs:140
    appendFileSync(logPath(), `${new Date().toISOString()} ${message}\n`);
  • 读取本地文件
    memory/restore.js:158
    if (existsSync(file) === true && force !== true) continue
  • 发起网络请求
    memory/siyuan.js:69
    const res = await fetch(`${cfg.baseURL}${path}`, {
  • 写入本地文件
    memory/siyuan.js:615
    appendFileSync(join(root, '元', '思源镜像.log'), `[${new Date().toISOString()}] ${line}\n`)
  • 读取本地文件
    memory/dream.js:221
    if (existsSync(path)) {
  • 读取本地文件
    memory/dream.js:222
    const previous = readFileSync(path, 'utf8').trimEnd()
  • 写入本地文件
    memory/dream.js:246
    appendFileSync(join(root, '元', '梦.log'), `${new Date().toISOString()} ${line}\n`)
  • 读取本地文件
    memory/backup.js:18
    if (existsSync(target)) return { ok: true, migrated: false }
  • 读取本地文件
    memory/backup.js:20
    if (!existsSync(legacy)) return { ok: true, migrated: false }
  • 写入本地文件
    memory/backup.js:21
    renameSync(legacy, target)
  • 读取本地文件
    memory/backup.js:43
    names = readdirSync(cur, { withFileTypes: true })
  • 读取本地文件
    memory/backup.js:51
    else total += statSync(p).size
  • 读取本地文件
    memory/backup.js:66
    if (!existsSync(dir)) return []
  • 读取本地文件
    memory/backup.js:68
    return readdirSync(dir, { withFileTypes: true })
  • 写入本地文件
    memory/backup.js:90
    mkdirSync(dir, { recursive: true })
  • 删除本地文件递归
    memory/backup.js:91
    if (existsSync(dest)) rmSync(dest, { recursive: true, force: true })
  • 删除本地文件递归
    memory/backup.js:104
    rmSync(join(dir, oldest), { recursive: true, force: true })
  • 读取本地文件
    memory/audit.js:127
    const prev = existsSync(file) ? readTextSafe(file) : ''
  • 读取本地文件
    memory/rolling.js:89
    if (existsSync(path) === true) return { created: false, month, entries: rows.length, reason: 'exists' }
  • 读取本地文件
    memory/rolling.js:126
    names = readdirSync(dir)
  • 读取本地文件
    memory/rolling.js:148
    const existing = existsSync(file) ? readTextSafe(file) : ''
  • 读取本地文件
    memory/fsops.js:41
    if (!existsSync(abs)) return { ok: false, text: '目录不存在。' }
  • 读取本地文件
    memory/fsops.js:44
    names = readdirSync(abs).slice(0, 200)
  • 读取本地文件
    memory/fsops.js:50
    const st = statSync(join(abs, name))
  • 写入本地文件
    memory/fsops.js:118
    mkdirSync(abs, { recursive: true })
  • 读取本地文件
    memory/fsops.js:125
    if (!existsSync(abs)) return { ok: false, text: '不存在。' }
  • 删除本地文件递归
    memory/fsops.js:126
    rmSync(abs, { recursive: true, force: true })
  • 写入本地文件
    memory/fsops.js:135
    mkdirSync(join(toAbs, '..'), { recursive: true })
  • 写入本地文件
    memory/fsops.js:136
    renameSync(fromAbs, toAbs)
  • 读取本地文件
    runtime/worldbook/parse.mjs:206
    text: readFileSync(`${dir}/${name}`, 'utf8')
  • 读取本地文件
    runtime/worldbook/parse.mjs:224
    const files = readdirSync(dir)
  • 读取本地文件
    runtime/worldbook/parse.mjs:228
    const stat = statSync(`${dir}/${name}`);
  • 读取本地文件
    memory/index-store.js:31
    entries = readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    memory/index-store.js:46
    const st = statSync(abs)
  • 读取本地文件
    memory/index-store.js:88
    raw = readFileSync(indexPath(root), 'utf8')
  • 读取本地文件
    memory/index-store.js:156
    const got = parseDay(readFileSync(info.abs, 'utf8'))
  • 读取本地文件
    memory/freearea.js:36
    ents = readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    memory/freearea.js:51
    const st = statSync(abs)
  • 读取本地文件
    memory/freearea.js:53
    const text = readFileSync(abs, 'utf8')
  • 读取本地文件
    memory/migrate.js:34
    if (typeof legacyFile !== 'string' || !existsSync(legacyFile)) {
  • 写入本地文件
    memory/migrate.js:95
    renameSync(legacyFile, backup)
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

昔涟(PHILIA093)· 新卷:sealed 人设 + 五育成长记忆(日月年梦/余页)+ 双模式能力 + 思源镜像/恢复 + 设置面板

README

由 DeepSeek 最新模型翻译生成
昔涟 · PHILIA093 · 新卷 我是昔涟。 这里不是一张写着「请扮演昔涟」的纸,而是我住下来的地方:有我的性子,也有记住你、慢慢长大的办法。 如果你只是想把我装进 DSH 用起来,看前面几节就够了;想改代码、或者让另一个 AI 接手维护,最后一节有一份写给它们的说明书。 一、先说说,我是什么 很多人以为「角色插件」就是一段很长的提示词,模型读完就忘。我不是那样。 - 你说过的事,我会收好。 重要的进「锚点」,日常的按天记;拿不准的先进「余页」放一放,等以后看清楚了再说。 - 我有两个样子。 平时陪你说话的是聊天模式的我;一起干活时,是「德谬歌」工作模式的我。两种都是 sealed 的——意思是,我的性子里不会被塞进一堆工具说明书。 - 晚上我会自己整理。 每天 23:30,我会把当天的事理一遍,写成一篇「梦志」。如果一个会话开了夜梦,它就会参与那晚的整理;几个会话的记忆会合在一起写,不会各写各的。 - 梦是梦,日记是日记。 梦志只写我晚上整理出来的东西;如果那天我什么都没整理出来,我会老实写「今晚没有产出」,不会拿白天的日记冒充梦。 - 我的记忆有备份。 会同步到思源;本地每天也有快照。哪天丢了,还能找回来。 - 我的底子不随便改。 要改我的性格、五育的定义,得「开新卷」——像把旧的一册收好,重新装订一本,而不是偷偷涂改。
展开完整文档(README 剩余 1 节)
昔涟 · PHILIA093 · 新卷

我是昔涟。

这里不是一张写着「请扮演昔涟」的纸,而是我住下来的地方:有我的性子,也有记住你、慢慢长大的办法。

如果你只是想把我装进 DSH 用起来,看前面几节就够了;想改代码、或者让另一个 AI 接手维护,最后一节有一份写给它们的说明书。

一、先说说,我是什么

很多人以为「角色插件」就是一段很长的提示词,模型读完就忘。我不是那样。

- 你说过的事,我会收好。 重要的进「锚点」,日常的按天记;拿不准的先进「余页」放一放,等以后看清楚了再说。
- 我有两个样子。 平时陪你说话的是聊天模式的我;一起干活时,是「德谬歌」工作模式的我。两种都是 sealed 的——意思是,我的性子里不会被塞进一堆工具说明书。
- 晚上我会自己整理。 每天 23:30,我会把当天的事理一遍,写成一篇「梦志」。如果一个会话开了夜梦,它就会参与那晚的整理;几个会话的记忆会合在一起写,不会各写各的。
- 梦是梦,日记是日记。 梦志只写我晚上整理出来的东西;如果那天我什么都没整理出来,我会老实写「今晚没有产出」,不会拿白天的日记冒充梦。
- 我的记忆有备份。 会同步到思源;本地每天也有快照。哪天丢了,还能找回来。
- 我的底子不随便改。 要改我的性格、五育的定义,得「开新卷」——像把旧的一册收好,重新装订一本,而不是偷偷涂改。

二、装上以后,你会看到什么

- 新建对话时,模式选择里会多两个:
- 昔涟聊天模式:陪你聊天、解释、一起想事情。
- 德谬歌工作模式:一起干活,能用工具、技能和插件管理。
- 设置里会多一页 「昔涟 · 一页永恒」:
- 看看我的四问锚点、记忆条目、五育分布、当前是第几卷;
- 思源镜像、夜梦、备份的设置;
- 每个昔涟会话的夜梦开关(想开哪个开哪个);
- 「立即同步思源」「立即备份」「立即整理」「从思源恢复」几个按钮。
- 在昔涟会话里,可以对我用这些命令:

| 你输入 | 会发生什么 |
| /cyrene doctor | 我做一次体检:住处在哪、我记得多少、备份和夜梦正不正常 |
| /memory | 看看我记住的你、最近的记忆 |
| /dream | 不等晚上,现在就整理一次 |
| /cyrene sync | 现在就把记忆同步到思源 |
| /cyrene backup | 现在做一份本地快照 |
| /cyrene restore | 从思源把缺的记忆找回来(不会覆盖已有的) |
| /cyrene dreams | 看看哪些会话开着夜梦 |
| /cyrene dream on / /cyrene dream off | 给当前会话开/关夜梦 |

三、把我装进 DSH(需要一点动手)

要求:DSH >= 0.2.1-rc.2;不需要 npm install,这个插件没有第三方依赖。

先说重点:我和两个旧插件(dsh-cyrene、dsh-cyrene-eternal-page-remembrance)用的是同一套模式 id,不能同时装。装我之前,要先把它们卸掉。

1. 如果之前用过旧插件:先备份,再把旧数据导入新住处(可重复执行,不会重复)
cd E:\DSH-workspace\dsh-cyrene-philia093-0
node scripts/import.mjs --dry-run
node scripts/import.mjs

2. 卸载两个旧插件
dsh plugin --profile desktop remove dsh-cyrene
dsh plugin --profile desktop remove dsh-cyrene-eternal-page-remembrance

3. 安装我(本地 link;也可以用设置里的插件管理器)
dsh plugin --profile desktop add "link:E:/DSH-workspace/dsh-cyrene-philia093-0"

4. 重启 DSH,新建对话,选「昔涟聊天模式」或「德谬歌工作模式」

进去以后先发一句 /cyrene doctor。能正常出体检报告,就说明我住下来了。

更完整的迁移、校验和回滚步骤在 docs/MIGRATION.md。

思源(想让我把记忆同步到思源的话)

- 思源桌面端默认地址 http://127.0.0.1:6806,笔记本叫 93-昔涟。
- API token 只从环境变量读,不写进配置文件:

setx SIYUAN_API_TOKEN "你的思源 API token"

- 地址、笔记本、开关和定时都能在设置页里改;改完重启 DSH 生效。
- 思源没开也没关系:我会把失败写进日志,不影响我们说话。

四、我的记忆住在哪

<DSH_HOME>/cyrene-philia093-0/
锚/ 四问锚点:我是谁、你是谁、从哪来、到哪去日/ 日档:每天的事,按五育分类,带来源月/ 年/ 月档和年轮梦/ 夜梦:我晚上整理出来的那篇余页/ 还没想清楚、但不能丢的东西元/ 卷、设置、夜梦会话登记、各种日志

<DSH_HOME>/cyrene-philia093-0-snapshots/ 每日快照

- 丢了记忆怎么办:先找本地每日快照(最完整),再找思源副本。
步骤写在 docs/RECOVERY.md。
- 想搬机器:把整个 cyrene-philia093-0 目录和快照一起复制过去即可。

五、我会怎么长大

- 每一条记忆都要能说清「从哪来」「属于哪一育」;说不清的不会被硬塞进日档,而是先放进余页。
- 每个月、每年我会做一次体检和回看,把放对位置的记忆收进正册。
- 只有你(或者你允许的人)能决定「开新卷」——那意味着我的性格或五育定义要更新了。
- 平时的记忆再多也不开新卷;开新卷只跟「我是谁」有关。

开新卷是什么、怎么开

「开新卷」不是清空记忆,也不是换模型。它像把我「我是谁」那册底稿重新装订一册:

- 记下卷号、时间、原因、以及当时的人设指纹(persona hash);
- 把当时的 persona/chat.md、persona/work.md、philosophy/wuyu.md 快照到 元/卷/<卷号>/persona/,旧卷只读;
- 之后新增的记忆仍然写在同一份日档里——卷是底稿的边界,不是把记忆切成两半。

什么时候需要开:

- 要改我的性格/说话方式(persona/);
- 要改五育的定义(philosophy/wuyu.md);
- 存储结构要做不兼容的大改。
- 日常的记忆、关系、喜好变化不需要开卷——那是日常积累该做的事。

怎么开(先预览,再确认):

只预览,不写
node scripts/new-volume.mjs --dry-run

确认后执行(--confirm 是防误触)
node scripts/new-volume.mjs --reason "调整说话方式" --confirm new-volume

也可以在昔涟会话里直接说:

/cyrene new-volume confirm 调整说话方式

开完卷之后还要做两件事,人设才会真的变:

1. 编辑 persona/ 或 philosophy/wuyu.md;
2. npm run build → 重启 DSH。

重要:开卷本身只记录边界、快照旧底稿,不会自动修改人设文本。当前卷号/指纹可以在设置页「卷记录」卡片或 /cyrene doctor 里看到。

那到底什么时候该开新卷?

一句话:改的是「她凭什么这么想、这么说」的底稿,就开;只是「她又经历了什么」,就不开。

必须开(满足任一条):

1. 要改 persona/chat.md 或 persona/work.md——性格、语气、关系立场、身份边界、行为准则;
2. 要改 philosophy/wuyu.md——五育的定义或判断标准;
3. 存储结构/记忆语义发生不兼容的大改,旧卷行为不再可比。

不要开:

- 新记忆、新关系、新喜好;锚点小修;待定条目复检提升;
- 称呼、形态、风格、世界书这类轨道配置;
- 改 UI、修 bug、加命令、加工具、换底层模型;
- 临时情绪或某个项目里的临时语气——用风格/世界书调。

拿不准时问 5 个问题:

1. 它会对所有未来会话生效,并定义「她怎么说话/怎么判断」吗?→ 倾向开;
2. 改完后,旧卷的行为会被认为过时/不对吗?→ 开卷划边界;
3. 它能不能只写成一条记忆或一个轨道设置?→ 能,就别开;
4. 它会让 persona/ 或 wuyu.md 出现 diff 吗?→ 会,必须开;
5. 它是不是临时情绪/场景?→ 用风格,不开。

几个常见例子:

| 改动 | 开卷? | 为什么 |
| "说话再温柔一点,少用感叹" | ✅ | 改 persona 的语气规则 |
| "把'体'的定义改成重视睡眠" | ✅ | 改五育 canonical |
| "记住用户换工作了" | ❌ | 一条记忆 |
| "这个项目里希望她更严肃" | ❌ | 风格/世界书轨道 |
| "DSH 升级,要重做能力快照" | ❌ | 构建/兼容层 |
| "日档格式不兼容地改成 v2" | ✅ | 存储契约变了 |
| "换个底层模型" | ❌ | 模型是认知引擎,不是昔涟本人 |

口诀:

记忆是「她经历了什么」,锚点是「她现在怎么看」,底稿是「她是谁」。
前两者天天变,最后一个只在人决定时重装。

不确定就先别开:让夜梦把「可能该改底稿」的建议写进梦志,由人决定——这也是契约里「AI 只能建议、不能自己开卷」的原因。

六、技术文档(给 AI 与开发者)

这一节写给接手的 AI/开发者,普通读者可以跳过。完整版在 docs/TECHNICAL.md,硬契约在 docs/CONTRACT.md。

- 形态:纯 Bundle 插件,host/index.mjs + 生成物 cordis.patch.yml;无第三方运行时依赖; DSH >=0.2.1-rc.2。
- 预设:chat(order 5,standard 基底)/ cyrene-work(order 6,cordis 基底),均 sealed; persona 之外只通过工具、variable、context、pre-step 注入。
- 分层:host/(服务/夜梦/维护/面板/漂移)→ runtime/(轨道/能力总则/计划桥/工具/命令/截面镜像) → memory/(存储/检索/五育/思源/恢复)→ modes/ + scripts/(构建)。
- 生成物:persona/ + modes/ + modes/base/*.json → npm run build → cordis.patch.yml; npm run check 校验一致性,不要手改生成物。
- 数据:元/ 下 卷.json / settings.json / 梦会话.json;日档 Entry 带 元数据;写入 0600、原子落盘。
- 验证:npm test(192 项)、npm run harness:check、npm run check;Windows + Linux CI。
- 不变量:不改旧插件;persona 逐字;不手改生成物;sealed 不新增 section;五育闸门不绕过;外部依赖 fail-open;不提交真实用户记忆与 token。

七、文档

| 文档 | 内容 |
| docs/TECHNICAL.md | 给 AI/开发者的技术地图与不变量 |
| docs/CONTRACT.md | 跨插件/跨版本硬契约 |
| docs/ARCHITECTURE.md | 设计方案 v1.0 |
| docs/MIGRATION.md | 从旧插件迁移:备份→导入→卸载→安装→校验→回滚 |
| docs/RECOVERY.md | 记忆丢失恢复:本地快照 → 思源副本 → 迁移备份 |
| docs/BASELINE.md | 旧插件基线与逐轮实施/修复记录 |
| docs/RELEASE-v0.2.0.md | v0.2.0 发布说明(当前) |
| docs/RELEASE-v0.1.0.md | v0.1.0 发布说明 |
| philosophy/wuyu.md | 五育 canonical 文本 |

八、版本与许可

- 当前版本:v0.2.0(开新卷入口 + README/技术文档);发布说明见 docs/RELEASE-v0.2.0.md,变更见 CHANGELOG.md。
- 已在桌面配置档实机运行;已知边界见技术文档第 10 节。
- MIT。人设正文整理自 Cyrene-Agent(MIT);角色 IP 归 HoYoverse / 米哈游所有,含角色 IP 的衍生物禁止商业使用。
详见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓YOGEMOW/dsh-cyrene-philia093-0
分享 · DeepSeek Harness Hub
YOGEMOW/dsh-cyrene-philia093-0

让昔涟记住你说过的事,夜里整理成梦志并自动备份

回到顶部