# dsh-temp-note

**DeepSeek Harness 右侧边栏里的一张临时笔记。** 那个刚要忘掉的念头、一段要复用的片段、一个刚做的决定，随手记下来，不用离开当前会话——可以只属于这个会话、这个工作区，或者所有地方。

[English](README.md) · [安装](#安装) · [使用](#使用) · [一键优化怎么工作](#一键优化怎么工作)

[![npm](https://img.shields.io/npm/v/dsh-temp-note?style=flat-square)](https://www.npmjs.com/package/dsh-temp-note)
[![DSH 0.2.x](https://img.shields.io/badge/DSH-0.2.x-4A6CF7?style=flat-square)](https://github.com/deepseek-ai/deepseek-harness)
[![license: MIT](https://img.shields.io/badge/license-MIT-2EA44F?style=flat-square)](LICENSE)
[![dependencies: none](https://img.shields.io/badge/dependencies-none-2EA44F?style=flat-square)](#开发)

---

## 痛点

DeepSeek Harness 很适合**和 Agent 一起想事情**，但没有地方**在旁边想自己的事**。

- **输入框是麦克风，不是便签纸。** 在里面打一句只给自己看的提醒，会发给模型、写进会话日志。有些笔记是给自己的，不是给这一轮的。
- **工作区文件是项目的，不是你的。** 往仓库里丢一个 `scratch.md`，会带来 diff 噪音、评审评论，以及一个活过头的文件。`.gitignore` 是绕路，不是工作流。
- **切到另一个笔记应用，上下文就断了。** 跳去 Notion、Obsidian 或者便签小组件，回来时对话、文件和刚才那条线索都不在原地了。
- **一个桶永远不够用。** 「这个会话里记一下」「这个项目一直这么做」「这段代码我到处都要粘」是三种不同的生命周期。只有一层的草稿本，最后会变成垃圾场。

## 功能

`dsh-temp-note` 在右侧边栏——和 Files、Chat、Terminal 同一个 dock——加一个 **临时笔记** 标签页，并在会话头部加一个笔记按钮。

| | |
|---|---|
| **一篇笔记，三种范围** | 会话级 / 工作区级 / 全局。默认工作区级，切换范围即切换笔记。 |
| **没有笔记管理** | 没有「新建」按钮，没有目录树，不用起标题。每个范围只有一篇，自动存在、一直在。 |
| **自动保存** | 每次输入即写入本地存储。刷新、切标签页、切会话，内容都还在。 |
| **一键复制** | 整篇笔记写入剪贴板，可以直接粘进提示词、issue 或 PR 描述。 |
| **一键优化** | 用 Harness 的默认模型把笔记整理成更清晰的 Markdown 并覆盖，一眼不满意可以「撤销优化」。 |
| **默认本地** | 笔记不进入会话日志，也不会发给 Agent。只有你主动点「一键优化」时，内容才会发给已配置的模型。 |

### 三种范围

| 范围 | 按什么归档 | 适合放什么 |
|---|---|---|
| **会话** | 当前会话 id | 「只在这个对话里」：私人的提醒、一个假设、这轮结束前要验证的事 |
| **工作区** | 当前工作区目录 | 项目约定、已做的决定、可复用命令——同一工作区的所有会话共享 |
| **全局** | 所有工作区共一篇 | 到处都要粘的个人片段 |

范围选择按会话记住：新会话默认 **工作区级**，之后回到上次的选择。这里刻意没有「新建笔记」：每个范围永远只有一篇。

## 安装

需要带 Web GUI 的 DeepSeek Harness 0.2.x（已在 `0.2.1-rc.2` 上验证）。

### 桌面端

**设置 → 插件 → 添加插件**，粘贴：

```text
dsh-temp-note
```

桌面端独占 `desktop` profile，请用它的界面安装，不要用 CLI。

### `dsh web` / CLI

```sh
dsh plugin --profile web add dsh-temp-note
```

把 `web` 换成你实际使用的 profile。也可以直接从源码安装：

```sh
dsh plugin --profile web add github:GuihaiHU/dsh-temp-note
# 或本地 checkout
git clone https://github.com/GuihaiHU/dsh-temp-note.git
dsh plugin --profile web add /absolute/path/to/dsh-temp-note
```

已发布到 npm：[dsh-temp-note](https://www.npmjs.com/package/dsh-temp-note)。

安装后刷新 Web 页面。插件没有构建步骤，也没有运行时依赖。

## 使用

1. **打开。** 点会话头部的笔记图标，或点右侧边栏的 `+`，在向导里选「临时笔记」。它和普通侧边栏标签页一样，可以停靠、拆分、拖成浮动面板或全屏。
2. **选范围。** `会话 · 工作区 · 全局`。默认工作区级，切换器下方的说明会告诉你当前范围覆盖什么。
3. **写。** 每次输入自动保存，底部显示字数与最近保存时间。
4. **复制。** 一键把整篇笔记放进剪贴板。
5. **优化。** 一键用默认模型重写为更清晰的 Markdown；上一版留在「撤销优化」里。

## 一键优化怎么工作

插件的 Host 半只注册一个路由：

```text
POST /api/dsh-temp-note/optimize
{ "text": "<笔记>" }  ->  { "ok": true, "text": "<整理后的笔记>" }
```

- 它用**设置 → 模型**里选定的默认模型调用 `ctx.llm.stream()`，并使用一段固定指令：保留全部事实、保持原语言、用 Markdown 组织、只输出笔记正文。
- 只接受本机、同源的请求；路由不保存任何内容，也不记录笔记文本。笔记本身存在浏览器里，不在 Host 上。
- 没有配置默认模型时，按钮会直接说明，而不是猜一个。
- 这个路由要求页面通过 HTTP 提供（`dsh web` 或桌面端的 Web GUI）。如果渲染层是 `file://`，优化按钮会提示接口不可达；笔记、范围、自动保存和复制不受影响。

## 数据与隐私

| 内容 | 位置 |
|---|---|
| 笔记正文 | 浏览器 `localStorage`：`dsh.temp-note.v1.global`、`…workspace.<编码后的路径>`、`…session.<会话 id>` |
| 范围选择 | `dsh.temp-note.v1.scope.<会话 id>` |
| 笔记写入会话日志 | 从不 |
| 笔记被发送 | 仅在你主动点「一键优化」时，发给已配置的模型提供方 |

清除浏览器站点数据会清掉笔记。笔记按浏览器隔离，不跨设备同步。

## 兼容性

- 在 **DSH `0.2.1-rc.2`**（macOS）上构建并验证。
- 使用右侧边栏类型注册表（`sidebarRightTabs`、`sidebarRight`）和 `conversation.session.header.utilities` 插槽，需要带右侧边栏的 0.2.x 构建。
- Host 半依赖 `llm` 和 `webServer` 服务，二者都在 Web profile 中。
- 无运行时依赖、无安装脚本、无构建步骤；浏览器半是单个手写的 `client.js`，通过 `__ModuleLoader__.load` 加载。

## 开发

```sh
git clone https://github.com/GuihaiHU/dsh-temp-note.git
cd dsh-temp-note

# 语法检查
node --check index.js
node --check client.js
node -e "JSON.parse(require('fs').readFileSync('package.json','utf8'))"

# 把当前 checkout 装进 profile
dsh plugin --profile web add "$PWD"
```

仓库结构：

```text
index.js            Host 半：仅本机可用的 /api/dsh-temp-note/optimize
client.js           浏览器半：侧边栏标签页、头部按钮、范围、存储
cordis.patch.yml    profile 中插入的 Host 插件行
locale/en.json      插件管理器显示元数据
locale/zh.json
icon.svg
```

## 限制

- 只存浏览器本地，不跨设备同步。
- 每个范围只有一篇笔记，这是设计选择。
- 编辑器是纯文本 textarea，整理后的 Markdown 不在标签页内预览。
- 一键优化依赖已配置的默认模型和可访问的 HTTP Host。

## License

[MIT](LICENSE)
