{"_id":"@cnife/pi-obsidian-diary","_rev":"2-2cba82665ac34f6f2d6043535633bac5","name":"@cnife/pi-obsidian-diary","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@cnife/pi-obsidian-diary","version":"0.1.0","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-obsidian-diary@0.1.0","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"a31619fe2d240f8e78f909c4e75fc38e5823f6e2","tarball":"https://registry.npmjs.org/@cnife/pi-obsidian-diary/-/pi-obsidian-diary-0.1.0.tgz","fileCount":3,"integrity":"sha512-HrhQrFeicZQee1d/PqWLKrmDhBPRfM2Y/JXfUAOHs+FrYbrCyGfLvtS4Dvx9D3Pw46AdSUexSI9GDnFB2tGvsA==","signatures":[{"sig":"MEUCIG6DdFjy9d4qwXsI/hrXJ+rpFTKNUjO5crc3qoW89kzVAiEAsfxZbRF07mpMdqMK+LEbasTQDUww2lsvAR3XoimYIpc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23466},"gitHead":"43cb2ae15c05b39149be37fe555c054d9ffc6cb5","private":false,"_npmUser":{"name":"cnife","email":"CNife@vip.qq.com"},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.16.0","description":"Summarize the current session into an Obsidian diary entry","directories":{},"_nodeVersion":"26.3.1","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-obsidian-diary_0.1.0_1782290981579_0.37106300470803566","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cnife/pi-obsidian-diary","version":"0.1.1","private":false,"keywords":["pi-package"],"description":"[Deprecated] Summarize the current session into an Obsidian diary entry","homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"license":"MIT","author":{"name":"CNife","email":"CNife@vip.qq.com"},"repository":{"type":"git","url":"git+https://github.com/CNife/pi-extensions.git"},"publishConfig":{"access":"public","provenance":true},"pi":{"extensions":["./extensions"]},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"gitHead":"eba63033985654d883f203180c55b31c94623ea8","_id":"@cnife/pi-obsidian-diary@0.1.1","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-OPBmMnXreBansMQ2/svQRjc0gT5SU+sIWA6stmW5Q6HsNjDKbIUSThqPUDVqiE4fvFu6ObIdtKJ+4lD2CKOMyQ==","shasum":"044bf0bc4350d216532c2376260c8d155c7dbd98","tarball":"https://registry.npmjs.org/@cnife/pi-obsidian-diary/-/pi-obsidian-diary-0.1.1.tgz","fileCount":3,"unpackedSize":23523,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-obsidian-diary@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC5oquyyoxcRO0aozhsEOdi1rgnZxHRYEEkJKMjUg0fqgIhAOnXHKQM/MTB5YP0/+pLGZkbdlHpY7dn2GckA8UdVrs7"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:16d644c1-b658-4c47-be8d-7ee09ae9fca1"}},"directories":{},"maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-obsidian-diary_0.1.1_1783764352096_0.7591269211533473"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-24T08:49:41.382Z","modified":"2026-07-11T10:05:52.598Z","0.1.0":"2026-06-24T08:49:41.728Z","0.1.1":"2026-07-11T10:05:52.238Z"},"bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","homepage":"https://github.com/CNife/pi-extensions#readme","keywords":["pi-package"],"repository":{"type":"git","url":"git+https://github.com/CNife/pi-extensions.git"},"description":"[Deprecated] Summarize the current session into an Obsidian diary entry","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"readme":"# @cnife/pi-obsidian-diary\n\n> ⚠️ Deprecated, no longer maintained.\n\n将当前 pi 会话总结为 Obsidian 日记草稿，并通过 `sendUserMessage` 发给主 Agent，由主 Agent 在用户确认后写入日记文件。\n\n## 功能\n\n- 注册 `/diary` slash 命令，按需触发（命令驱动，非事件驱动）。\n- 读取当前会话 transcript（`ctx.sessionManager.getBranch()`，不截断全量）。\n- 扫描 Obsidian vault 下的未完成待办（近 14 天）、近期日记（近 10 天前 3 篇各前 30 行）、今日日记全文。\n- 按旧中文日期格式计算今日日记路径：`{base}/{diary_dir}/{year}/{month:02d}/{year}年{month}月{day}日{星期}.md`。\n- 调用 `completeSimple()` 做语义总结，返回结构化 JSON `{variant, summary, instructions}`。\n- 通过 `pi.sendUserMessage(json, {deliverAs:\"followUp\"})` 发到当前会话，主 Agent 展示草稿给用户确认后写入。\n\n**架构不变量**：扩展层零写入日记文件，唯一写操作是配置缺失时写模板配置文件。日记写入完全委托主 Agent 在用户确认后执行。\n\n## 安装\n\n```bash\npi install npm:@cnife/pi-obsidian-diary\n```\n\n## 本地测试\n\n```bash\npi --no-extensions --no-skills -e packages/obsidian-diary/extensions/index.ts --no-session\n```\n\n## 配置\n\n配置文件路径为 `<agent-dir>/cnife-obsidian-diary.json`。`<agent-dir>` 由 `PI_CODING_AGENT_DIR` 环境变量决定，默认是 `~/.pi/agent`。\n\n首次调用 `/diary` 时若配置缺失会自动写入模板配置。**配置加载为硬失败**：缺失、损坏或字段类型非法时直接报错退出，绝不使用猜测的配置写入日记。\n\n```json\n{\n  \"model\": null,\n  \"vaults\": {\n    \"work\": {\n      \"base\": \"/path/to/obsidian/work-vault\",\n      \"diary_dir\": \"工作日志\",\n      \"template\": \"日志模板.md\",\n      \"exclude_meta\": [\"AGENTS.md\", \"任务.md\", \"日志模板.md\"]\n    },\n    \"personal\": {\n      \"base\": \"/path/to/obsidian/personal-vault\",\n      \"diary_dir\": \"个人日记\",\n      \"template\": \"日记模板.md\",\n      \"exclude_meta\": [\"AGENTS.md\"]\n    }\n  }\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `model` | `\"provider/modelId\"` 指定模型，`null` 用当前会话 `ctx.model`。 |\n| `vaults.{work,personal}.base` | Obsidian vault 根目录（支持 `~` 展开）。 |\n| `vaults.{work,personal}.diary_dir` | 日记子目录名。 |\n| `vaults.{work,personal}.template` | 模板文件名（主 Agent 据此从模板创建新日记）。 |\n| `vaults.{work,personal}.exclude_meta` | 扫描时排除的文件名列表（含所有 `*模板.md`）。 |\n\n## 用法\n\n```text\n/diary             # 自动判断 work/personal 变体，扫描两个 vault\n/diary --work      # 固定为 work 变体，只扫描 work vault\n/diary --personal  # 固定为 personal 变体，只扫描 personal vault\n```\n\n## 行为说明\n\n- `/diary` 触发后，扩展走 fail-fast 线性链：配置加载 → 参数解析 → 读取 transcript → 扫描待办/近期/今日日记 → 路径越界校验 → 模型选择与认证 → LLM 语义总结 → 发送结构化消息。\n- 每个失败路径都在发送消息前 return，确保无错误中间状态。\n- `sendUserMessage` 返回 `void` 不可 await，发完即返回，消息进队列由主 Agent 处理。\n- 主 Agent 收到的消息包含强指令：**禁止未经用户确认直接写入，必须先展示草稿等待确认**。\n\n## 故障排查\n\n| 现象 | 原因 | 处理 |\n|------|------|------|\n| 提示\"配置缺失或损坏\" | 配置文件不存在或 JSON/字段非法 | 按提示路径编辑配置后重试 `/diary`。 |\n| 提示\"日记路径越界\" | `base` 配置异常，计算出的日记路径不在 vault 内 | 检查 `base` 是否正确，是否含 `../` 逃逸。 |\n| 提示\"认证失败\" | API key 未配置或模型无效 | 检查 `model` 配置或 pi 的 API key 设置。 |\n| 提示\"Diary gen failed\" | LLM 调用出错或被中止 | 查看 `stopReason`，超长会话可能触发 `length`。 |\n| 提示\"当前会话无记录可总结\" | 会话 transcript 为空 | 先进行一些对话再调用 `/diary`。 |\n","readmeFilename":"README.md"}