dsh-tiddlywiki 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -25
- package/lib/client.bundle.js +903 -386
- package/lib/client.js +903 -386
- package/lib/index.js +796 -32
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
- package/src/client/index.ts +10 -4
- package/src/client/knowledge-fab.ts +232 -0
- package/src/client/markdown-editor.ts +5 -0
- package/src/client/note-widget.ts +725 -475
- package/src/client/panel.ts +27 -62
- package/src/client/settings-page.ts +3 -3
- package/src/client/styles.ts +110 -0
- package/src/client/sync-button.ts +191 -188
- package/src/host/git.ts +21 -0
- package/src/host/routes.ts +145 -8
- package/src/host/seed-notes.ts +7 -5
- package/src/host/tools.ts +589 -281
- package/src/host/tw-api.ts +80 -6
- package/src/host/wiki.ts +12 -0
- package/src/index.ts +46 -6
- package/src/sdk.ts +8 -2
package/README.md
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
| 能力 | 说明 |
|
|
16
16
|
|---|---|
|
|
17
|
-
| 🤖 **Agent 工具** | `tiddlywiki_search` / `get` / `put` / `delete` / `git_sync`
|
|
18
|
-
| 🧭 **内嵌编辑器** | 侧边栏「TiddlyWiki」入口 → 中央列内嵌完整 TW 5
|
|
19
|
-
| 📝 **快速笔记** |
|
|
20
|
-
| 🔄 **一键同步** |
|
|
17
|
+
| 🤖 **Agent 工具** | `tiddlywiki_search` / `get` / `put` / `batch_put` / `rename` / `delete` / `recent` / `list_tags` / `git_sync` / `git_resolve` 十个工具:检索、读写、批量、重命名、删除、git 同步与冲突解决 |
|
|
18
|
+
| 🧭 **内嵌编辑器** | 侧边栏「TiddlyWiki」入口 → 中央列内嵌完整 TW 5 编辑器(**同源代理**,经 DSH origin 访问,Tailscale/内网/域名/HTTPS 均可用) |
|
|
19
|
+
| 📝 **快速笔记** | 右下角「知识库」悬浮按钮 → 快速笔记卡片:**CodeMirror 6** Markdown 编辑器(语法高亮 + 撤销/重做)、文件上传、多选/自动补全 tag、**草稿自动保存(刷新不丢)**、**「🕘 最近」一键载入旧笔记**,Ctrl+Enter 保存;可整体隐藏 |
|
|
20
|
+
| 🔄 **一键同步** | 「知识库」按钮 →「🔁 同步」:pull → commit → push;FAB 上的状态点实时反映 git 状态(已同步/待提交/可更新/离线) |
|
|
21
21
|
| ⚙️ **设置页** | DSH 设置 →「TiddlyWiki 知识库」:插件/主题/语言管理与运行配置,应用后自动重启 TW |
|
|
22
22
|
| 🛡 **零摩擦生命周期** | 随 dsh 自动启停;TW 子进程崩溃自动重启(退避);端口/目录/首次 git init 全自动 |
|
|
23
23
|
| 💾 **数据即备份** | wiki 文件夹本身就是一个 git 仓库;自动 commit(60s 防抖,可关),配置随 dsh-market 迁移 |
|
|
@@ -46,10 +46,10 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
46
46
|
## 🚀 快速开始(2 分钟上手)
|
|
47
47
|
|
|
48
48
|
1. **安装并重启** dsh web(见上)。
|
|
49
|
-
2. 点左侧侧边栏「**TiddlyWiki**」→ 中央打开完整 TW
|
|
50
|
-
3.
|
|
51
|
-
4. **正经排版**:在笔记里点「✏️ 在 TW 中编辑」,弹出 TW
|
|
52
|
-
5.
|
|
49
|
+
2. 点左侧侧边栏「**TiddlyWiki**」→ 中央打开完整 TW 编辑器;此时右下角已有「**知识库**」悬浮按钮(内含快速笔记/同步/TW 面板入口)。
|
|
50
|
+
3. **随手记**:点右下角「知识库」→「📝 快速笔记」,写两行、打上 tag,`Ctrl+Enter` 保存——它成为一个独立 tiddler,并自动进入 git;草稿会自动保存到本地,关掉/刷新都不丢。
|
|
51
|
+
4. **正经排版**:在笔记里点「✏️ 在 TW 中编辑」,弹出 TW 原生编辑器小窗继续写;想接着改旧笔记,点「🕘 最近」一键载入。
|
|
52
|
+
5. **收工同步**:点「知识库」→「🔁 同步」,一键 pull → commit → push,把今天的记录推到远端备份。
|
|
53
53
|
6. **让 Agent 参与**:直接在聊天里说「把刚才的会议纪要存进知识库」——Agent 会用 `tiddlywiki_*` 工具读写。
|
|
54
54
|
|
|
55
55
|
> 想直接看 Agent 侧完整能力?跳到 [📖 使用指南](#-使用指南)。
|
|
@@ -58,21 +58,27 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
58
58
|
|
|
59
59
|
## 📖 使用指南
|
|
60
60
|
|
|
61
|
-
### 🤖 给 Agent:
|
|
61
|
+
### 🤖 给 Agent:10 个工具
|
|
62
62
|
|
|
63
63
|
| 工具 | 参数 | 说明 |
|
|
64
64
|
|---|---|---|
|
|
65
|
-
| `tiddlywiki_search` | `query`, `tag?` | 检索非系统 tiddler
|
|
65
|
+
| `tiddlywiki_search` | `query`, `tags?[]`, `tag?`, `since?`, `type?`, `limit?` | 检索非系统 tiddler,返回标题/标签/修改时间/摘要;`tags` 为 AND 标签,`since` 按修改时间过滤,`limit` 上限 200 |
|
|
66
|
+
| `tiddlywiki_recent` | `limit?`, `since?` | 最近修改的笔记(倒序),开工快速了解近期动态 |
|
|
67
|
+
| `tiddlywiki_list_tags` | — | 现有非系统 tag 及各自计数(按使用次数降序) |
|
|
66
68
|
| `tiddlywiki_get` | `title` | 读单个 tiddler 全文 |
|
|
67
69
|
| `tiddlywiki_put` | `title`, `text`, `tags?`, `fields?` | 写/覆盖 tiddler;`fields` 可带业务字段(如 `{"type":"meeting","date":"2026-09-02"}`) |
|
|
70
|
+
| `tiddlywiki_batch_put` | `items[]`, `overwrite?` | 批量写入;`overwrite=false` 跳过已存在标题 |
|
|
71
|
+
| `tiddlywiki_rename` | `oldTitle`, `newTitle`, `updateRefs?` | 重命名 + 尽量更新其他 tiddler 里的 `[[旧]]`/`{{旧}}` 引用 |
|
|
68
72
|
| `tiddlywiki_delete` | `title` | 删除 tiddler(幂等) |
|
|
69
73
|
| `tiddlywiki_git_sync` | `action: pull\|push\|sync`, `message?` | git 操作 |
|
|
74
|
+
| `tiddlywiki_git_resolve` | `files[]`, `strategy: keep-local\|keep-remote\|list` | pull 冲突后按 tiddler 二选一解决(keep-remote 需已配置远端) |
|
|
70
75
|
|
|
71
|
-
|
|
76
|
+
**知识库同步纪律(四条)**:
|
|
72
77
|
|
|
73
78
|
1. 开工先 `tiddlywiki_git_sync action=pull`(rebase + autostash;真冲突会自动 abort 并报冲突文件)。
|
|
74
|
-
2.
|
|
75
|
-
3.
|
|
79
|
+
2. 冲突后:`tiddlywiki_git_resolve files=[冲突文件] strategy=keep-local|keep-remote` 按 tiddler 二选一解决,再重新 sync。
|
|
80
|
+
3. 收工 `tiddlywiki_git_sync action=sync`(pull → commit → push)。
|
|
81
|
+
4. 插件自动 commit 兜底(60s 防抖,可关),手动 sync 用于需要主动推送的场合。
|
|
76
82
|
|
|
77
83
|
> ⚠️ pull 若拉到新内容,`pull` / `sync` 会自动**重启 TW(同端口)**,后续读写/搜索都是最新快照,不会读到旧缓存。
|
|
78
84
|
|
|
@@ -80,17 +86,22 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
80
86
|
|
|
81
87
|
### 🧑💻 给人:界面操作
|
|
82
88
|
|
|
83
|
-
**🧭 中央列编辑器** — 侧边栏「TiddlyWiki
|
|
89
|
+
**🧭 中央列编辑器** — 侧边栏「TiddlyWiki」按钮开关中央编辑器面板(**同源代理**:iframe 指向 `<DSH origin>/dsh-tiddlywiki/tw/`,由 DSH 转发到回环上的 TW 服务),完整 TW 5 编辑器。
|
|
84
90
|
|
|
85
|
-
**📝 快速笔记** —
|
|
91
|
+
**📝 快速笔记** — 右下角「**知识库**」悬浮按钮 →「📝 快速笔记」(可折叠):
|
|
86
92
|
- **CodeMirror 6 编辑器**:真正的 Markdown 语法树高亮(标题/列表/代码/链接/表格/任务清单/删除线等,GFM),支持撤销/重做与行内编辑体验;
|
|
87
|
-
-
|
|
93
|
+
- **草稿自动保存**:正文/标题/标签 500ms 防抖写入本地,关掉卡片或刷新页面都不丢;重开自动恢复,可一键「丢弃」;
|
|
94
|
+
- **🕘 最近**:一键列出最近修改的笔记,点标题直接载入编辑器继续改(不需要开完整 TW 去找);
|
|
95
|
+
- **文件上传**:点「📎 上传」或直接把文件拖进编辑器——文件存到 wiki 的 `files/` 文件夹并随 git 同步;图片插入 ``、其它文件插入 `[名](/dsh-tiddlywiki/tw/files/名)`(**同源代理 URL**,在 TW 与快速笔记预览里都能打开);
|
|
88
96
|
- **Ctrl+Enter 保存**为独立 tiddler;笔记 `type` 自动设为 `text/markdown`,所以上传的图片/链接在 TW 里按 Markdown 正常渲染;
|
|
89
97
|
- 点「**✏️ 在 TW 中编辑**」→ 保存后弹出**独立小窗**(可拖动/缩放)加载 TW 原生编辑器编辑该条。
|
|
90
98
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
**🔧 一键同步 + 面板** —「知识库」按钮是一个**统一入口**,替代了旧版三个叠在右下角的悬浮按钮:
|
|
100
|
+
- **🖥 打开/收起 TW 面板** 与 **🔄 重载 TW 面板**(`ui.showPanelStatus` 控制);
|
|
101
|
+
- **📝 快速笔记**(`ui.showQuickNote` 控制);
|
|
102
|
+
- **🔁 同步**:pull → commit → push;FAB 右下角的**状态点**实时反映 git 状态:
|
|
103
|
+
🟢 已同步 · 🟡 有未提交改动 · 🔴 落后于远端 · ⚪ 离线;悬停可看分支/领先/落后/上次同步时间;每 30s 自动刷新。
|
|
104
|
+
若这次 pull 拉到了新内容,TW 服务自动重启(同端口),界面立即显示最新快照(无需手动去面板点「重启 TW」)。
|
|
94
105
|
|
|
95
106
|
**🔧 面板异常** — 面板服务异常时显示错误 +「重试」按钮(POST `/dsh-tiddlywiki/restart`)。
|
|
96
107
|
|
|
@@ -99,7 +110,7 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
99
110
|
| 区块 | 内容 |
|
|
100
111
|
|---|---|
|
|
101
112
|
| 状态/重启 | TW 运行状态 + git 概览 + 「同步」按钮 + 「重启 TW」按钮 |
|
|
102
|
-
| 常规配置 | 快速笔记默认 tag、git 自动 commit/防抖/远端/分支、ui
|
|
113
|
+
| 常规配置 | 快速笔记默认 tag、git 自动 commit/防抖/远端/分支、ui 开关(快速笔记/面板状态/同步按钮——分别控制「知识库」按钮里的对应入口)——改了什么保存什么 |
|
|
103
114
|
| 插件管理 | 自带官方插件勾选(可搜索)→ 应用并自动重启 TW |
|
|
104
115
|
| 主题管理 | 自带主题**多选加载 + 单选活动** → 应用并自动重启 TW |
|
|
105
116
|
| 语言管理 | 自带官方语言包勾选(含 zh-Hans 简体)→ 应用并自动重启 TW |
|
|
@@ -123,6 +134,20 @@ TW 的界面语言由**语言插件**决定,不是某个配置字符串。tidd
|
|
|
123
134
|
- **配置自动应用**:在常规配置写入 `uiLanguage: "zh-Hans"`,每次启动 dsh web 时自动启用该语言并固定 `$:/language`(若尚未启用)。留空则不干预。
|
|
124
135
|
- **想换繁中**:语言管理里改勾 `zh-Hant` / `zh-TW` 再应用。
|
|
125
136
|
|
|
137
|
+
### 🌐 远程访问(Tailscale / 内网 / 域名 / HTTPS)
|
|
138
|
+
|
|
139
|
+
TW 子进程只监听 **127.0.0.1 回环**(更安全),**agent 工具、快速笔记、git 同步本来就全程走 DSH 宿主进程→回环 TW**,所以无论你从哪个入口访问 DSH,这些能力都不受影响。唯一受影响的是**浏览器里的 TW 编辑器 iframe**:早期版本让 iframe 直接指向 `http://127.0.0.1:<port>`——只有浏览器和 DSH 在同一台机器时才行;一旦通过 Tailscale / 内网 IP / 域名访问 DSH,`127.0.0.1` 会指向浏览器自己那台机器,编辑器就加载不出来了。
|
|
140
|
+
|
|
141
|
+
从 **v0.6.0** 起,内嵌编辑器改为**同源代理**:
|
|
142
|
+
|
|
143
|
+
- 浏览器里的 TW 编辑器 iframe 指向 `<DSH origin>/dsh-tiddlywiki/tw/`(与 DSH 同源),DSH 把整个 TW 前端(页面 + `/files/*` + TiddlyWeb API)透传到回环上的 TW 服务;
|
|
144
|
+
- TW 前端的 API 基址由 wiki 内的 `$:/config/tiddlyweb/host` 控制,插件启动时把它固定为 `/dsh-tiddlywiki/tw/`(仅当缺失或仍是旧默认值时写入,用户自定义会被保留);
|
|
145
|
+
- 因为代理 URL 与端口无关,TW 重启也不会让编辑器 iframe 重新加载,编辑中的内容不丢。
|
|
146
|
+
|
|
147
|
+
效果:**DSH 跑在服务器上、你用 Tailscale / 域名 / 内网 IP 从任意设备打开 DSH Web 时,中央列编辑器和「在 TW 中编辑」弹窗都正常工作**;以后 DSH 挂到域名 + HTTPS 反向代理后面也同样成立(同源、无 mixed-content、无 CORS)。
|
|
148
|
+
|
|
149
|
+
> ⚠️ 迁移说明:v0.6.0 之前上传的文件在笔记里写的是根路径 `/files/名`,本插件**不再**占用 DSH 根命名空间(避免与其他插件冲突),所以这些旧链接在嵌入编辑器里会失效;新上传的文件使用 `/dsh-tiddlywiki/tw/files/名` 前缀 URL,可直接打开。若需要旧链接,可在 TW 里把对应笔记的 `/files/` 前缀改回 `/dsh-tiddlywiki/tw/files/`。
|
|
150
|
+
|
|
126
151
|
---
|
|
127
152
|
|
|
128
153
|
## 🔄 同步与数据
|
|
@@ -153,9 +178,9 @@ TW 的界面语言由**语言插件**决定,不是某个配置字符串。tidd
|
|
|
153
178
|
note:
|
|
154
179
|
tag: "inbox"
|
|
155
180
|
ui:
|
|
156
|
-
showQuickNote: true #
|
|
157
|
-
showPanelStatus: true #
|
|
158
|
-
showSyncButton: true #
|
|
181
|
+
showQuickNote: true # 是否显示「知识库」按钮里的「快速笔记」入口
|
|
182
|
+
showPanelStatus: true # 是否显示「知识库」按钮里的 TW 面板/重载入口与状态行
|
|
183
|
+
showSyncButton: true # 是否显示「知识库」按钮里的「同步」入口与 git 状态点
|
|
159
184
|
auth:
|
|
160
185
|
username: "" # 默认 loopback 匿名;暴露到非 loopback 时才需要
|
|
161
186
|
password: ""
|
|
@@ -163,6 +188,8 @@ TW 的界面语言由**语言插件**决定,不是某个配置字符串。tidd
|
|
|
163
188
|
|
|
164
189
|
> **运行时配置**:设置页写入的 `$:/plugins/dsh-tiddlywiki/config` tiddler 是 `config:` 块之上的覆盖层(tiddler 优先、随 wiki 的 git 同步)。无需改动 cordis 也能改 note tag / git 开关 / ui 开关等。
|
|
165
190
|
> `config:` 块随 profile 被 dsh-market 带走;wiki 数据走 git,不走 dsh-market。
|
|
191
|
+
>
|
|
192
|
+
> **远程访问(v0.6.0)**:TW 前端的 API 基址来自 `$:/config/tiddlyweb/host`,插件启动时固定为 `/dsh-tiddlywiki/tw/`(同源代理)。TW 子进程始终只监听 `127.0.0.1`;`auth.username/password` 仅在你想把 TW 直接暴露到非回环地址(绕过 DSH)时才需要,正常情况下无需配置。
|
|
166
193
|
|
|
167
194
|
---
|
|
168
195
|
|
|
@@ -191,10 +218,13 @@ npm run selftest # headless:spawn TW → REST 读写 → git → 退出
|
|
|
191
218
|
| `/dsh-tiddlywiki/note` | POST | 快速笔记 → 独立 tiddler |
|
|
192
219
|
| `/dsh-tiddlywiki/edit` | POST | 打开 TW 原生编辑器(draft) |
|
|
193
220
|
| `/dsh-tiddlywiki/tags` | GET | 现有非系统 tag(自动补全) |
|
|
221
|
+
| `/dsh-tiddlywiki/recent` | GET | 最近修改的笔记(快速笔记「最近」入口) |
|
|
222
|
+
| `/dsh-tiddlywiki/get` | GET | 读单个 tiddler(快速笔记「最近」载入) |
|
|
194
223
|
| `/dsh-tiddlywiki/sync` | POST | 一键 pull → commit → push |
|
|
195
224
|
| `/dsh-tiddlywiki/upload` | POST | 文件上传到 `files/`(原始 body + `X-Filename`) |
|
|
196
225
|
| `/dsh-tiddlywiki/restart` | POST | 重启 TW 子进程 |
|
|
197
226
|
| `/dsh-tiddlywiki/api/*` | any | 透传到 TW 服务(JSON) |
|
|
227
|
+
| `/dsh-tiddlywiki/tw/*` | any | **同源 TW 代理**:整个 TW 前端(index + `/files/*` + TiddlyWeb API)→ 回环 TW(v0.6.0,远程访问核心) |
|
|
198
228
|
|
|
199
229
|
---
|
|
200
230
|
|
|
@@ -216,10 +246,10 @@ src/
|
|
|
216
246
|
├── index.ts # host 入口:装配 WikiServer/路由/工具/prompt/自动 commit
|
|
217
247
|
├── sdk.ts # 自包含 defineTool + dshHomePath(零 @deepseek-ai 运行时依赖)
|
|
218
248
|
├── host/
|
|
219
|
-
│ ├── wiki.ts # WikiServer:spawn/kill
|
|
249
|
+
│ ├── wiki.ts # WikiServer:spawn/kill/自愈/端口探测/就绪轮询;TW_PROXY_PATH 同源代理路径
|
|
220
250
|
│ ├── tw-api.ts # TiddlyWeb REST 客户端
|
|
221
251
|
│ ├── git.ts # git init/commit/pull/push/sync/status + AutoCommitter
|
|
222
|
-
│ ├── routes.ts # /status /note /edit /tags /sync /upload /restart /api/* 路由
|
|
252
|
+
│ ├── routes.ts # /status /note /edit /tags /sync /upload /restart /api/* /tw/* 路由
|
|
223
253
|
│ ├── admin.ts # 设置页后台:tiddlywiki.info 读写 + 目录枚举 + /admin/* 路由
|
|
224
254
|
│ ├── config.ts # ConfigStore:cordis config 基底 + 配置 tiddler 覆盖层
|
|
225
255
|
│ ├── seed-notes.ts # 首次启动一次性写入「插件说明」笔记
|