dsh-tiddlywiki 0.14.0 → 0.16.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 +23 -15
- package/docs/seed-initialization.md +78 -40
- package/lib/client.bundle.js +157 -36
- package/lib/client.js +157 -36
- package/lib/index.js +413 -11
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/index.ts +14 -0
- package/src/client/panel.ts +59 -0
- package/src/client/settings-page.ts +77 -7
- package/src/client/styles.ts +132 -12
- package/src/client/tool-views.ts +594 -0
- package/src/host/admin.ts +27 -1
- package/src/host/routes.ts +66 -5
- package/src/host/seed-all-articles.ts +17 -0
- package/src/host/seed-home.ts +28 -0
- package/src/host/seed-menubar-theme.ts +18 -0
- package/src/host/seed-notes.ts +17 -0
- package/src/host/seed-render.ts +66 -0
- package/src/host/seed-send-to-agent.ts +10 -0
- package/src/host/seeds.ts +352 -228
- package/src/index.ts +46 -9
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://github.com/bbqisbbq/dsh-tiddlywiki)
|
|
8
8
|
[](https://awesome-dsh-plugin.com)
|
|
9
9
|
|
|
10
|
-
> 📚 **文档索引**:[🧩 初始化(一次性预置)](#🧩-初始化一次性预置) · [docs/seed-initialization.md](docs/seed-initialization.md)(统一 seed 注册表 / ONE-SHOT
|
|
10
|
+
> 📚 **文档索引**:[🧩 初始化(一次性预置)](#🧩-初始化一次性预置) · [docs/seed-initialization.md](docs/seed-initialization.md)(统一 seed 注册表 / 核心项与可选项 / ONE-SHOT / force / 反初始化 / 后台 API / 重新生成内置常量)
|
|
11
11
|
|
|
12
12
|
等 Agent 干活的时候,人常是干坐着的——想随手写点什么,又不想切来切去。TiddlyWiki 单文件、纯文本、wiki 语法、自带 git 同步,天生适合**随手写点小东西**。于是把它做成 DSH 原生插件:不用离开当前界面,聊天区右下角就有快速笔记;要正经编辑,弹出 TW 原生编辑器;写下的内容自动进 git,既是知识库也是备份。
|
|
13
13
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
| 🌗 **跟随 DSH 主题** | 嵌入式 TW(中央面板 +「在 TW 中编辑」弹窗)**自适应 DSH 深浅主题**:暗色自动切深色 palette、浅色恢复原 palette;**纯内存切换,不写回 wiki、不进 git**;设置页可关可换深色 palette |
|
|
24
24
|
| 📝 **快速笔记** | 右下角「知识库」悬浮按钮 → 快速笔记卡片:**CodeMirror 6** Markdown 编辑器(语法高亮 + 撤销/重做)、文件上传、多选/自动补全 tag、**草稿自动保存(刷新不丢)**、**「🕘 最近」一键载入旧笔记**,Ctrl+Enter 保存;可整体隐藏 |
|
|
25
25
|
| 🔄 **一键同步** | 「知识库」按钮 →「🔁 同步」:pull → commit → push;FAB 上的状态点实时反映 git 状态(已同步/待提交/可更新/离线) |
|
|
26
|
-
| ⚙️ **设置页** | DSH 设置 →「TiddlyWiki 知识库」:插件/主题/语言管理与运行配置,应用后自动重启 TW;**「初始化」区块**列出所有一次性预置项(说明笔记/发送按钮/首页/所有文章/**menubar
|
|
26
|
+
| ⚙️ **设置页** | DSH 设置 →「TiddlyWiki 知识库」:插件/主题/语言管理与运行配置,应用后自动重启 TW;**「初始化」区块**列出所有一次性预置项(说明笔记/发送按钮/首页/所有文章/**menubar 顶栏主题自适应**/同源代理基址)的实时状态:**功能必需项**(发送按钮 + 代理基址)启动自动写入,**可选项默认不写入、不强绑定**——每项可手动**重新初始化**,可选项可**反初始化**(移除);**「所有文章」每页条数**可在配置里调整(实时生效,无需重新初始化) |
|
|
27
27
|
| 🛡 **零摩擦生命周期** | 随 dsh 自动启停;TW 子进程崩溃自动重启(退避);端口/目录/首次 git init 全自动 |
|
|
28
28
|
| 💾 **数据即备份** | wiki 文件夹本身就是一个 git 仓库;自动 commit(60s 防抖,可关),配置随 dsh-market 迁移 |
|
|
29
29
|
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
> 最近几个主要版本的一句话更新记录(完整变更见 git log / Releases)。
|
|
35
35
|
|
|
36
|
+
- **v0.15.0**(2026-09-05):**初始化不强制 + 可反初始化 + 设置页样式修复**。① **不给用户强绑定**——seed 注册表拆两层:启动只自动写入**功能必需项**(「发送给 Agent」按钮 + TW 前端 API 基址);**可选项**(说明笔记 / 首页 / 所有文章 / menubar 顶栏主题自适应)默认不写入,设置页「初始化」区块可随时「重新初始化」写入;② **「反初始化」**——可选 seed 每项(及「全部反初始化」)可一键删除其写入的 tiddler + marker,恢复未初始化状态(核心项不可移除;home-index 反初始化会顺带把 `$:/DefaultTiddlers` 从 `[[主页]]` 恢复为 GettingStarted);后台新增 `POST /admin/seeds/remove`;③ **menubar 顶栏主题自适应不再自动写入**(改的不对可去——本 wiki 已移除该样式表,顶栏恢复默认外观;想要可随时在设置页重新初始化);④ **设置页样式修复**——说明/次要文字不再依赖可能缺失的 `label-dimmed` token,改由主题主文字色派生(任意深浅主题下可读,不再出现白色文字);配置字段标签改为自然换行、输入框右对齐限宽,行内名称/说明单行省略,长选项不再断行错乱。
|
|
36
37
|
- **v0.14.0**(2026-09-05):TW「**发送给 Agent**」一键发送三处优化。① **工具栏按钮修复**——之前按钮在 控制台→外观→工具栏 里**不显示图标与说明**(还和「导出此条目」用同一个导出图标):现为按钮补上 `icon`/`caption`/`description` 字段,并在 bundle 里**自带独立的「发送」图标**(不再借用 core 的 export-button),工具栏设置与条目标题栏都显示独立图标;后续小修:图标改用**更饱满的实心纸飞机**并遵循核心图标约定(`\parameters (size:"22pt")` + `width/height` + `tc-image-button` class + `$:/tags/Image` 标签),修复宽度比相邻图标窄的问题;同时 bundle **shadow 覆盖核心 `$:/core/ui/ControlPanel/Toolbars/ItemTemplate`**(镜像 EditorItemTemplate),让 查看/页面/编辑工具栏 的设置列表**也显示每个按钮的图标**(原来只有编辑器工具栏列表显示);**再修「图标裂了」**——根因是 bundle 里 icon tiddler 被设了 `type: image/svg+xml`:`{{icon}}` 会走 imageparser 渲染成 `<img src="data:image/svg+xml,...">`,数据 URI 保留原始文本(开头的 `\parameters` 与未展开的 `width=<<size>>` 不是合法独立 SVG),Chrome/Edge 直接加载失败显示裂图;核心图标**不带 type 字段**(默认 wikitext),`{{icon}}` 被 wiki 化成语法展开后的**内联 `<svg width="22pt">`**。修复:icon tiddler 去掉 type 字段(保持 wikitext,与核心一致),已在真实浏览器验证图标渲染尺寸与核心图标完全一致(32.9×24.7)且无裂图;② **可选「附加说明」**——发送弹层新增文本输入框,填写的说明会以 `【附加说明】` 段随消息一起发给 Agent(不填则无此段);③ **可选「权限」**——弹层新增「权限(权限预设)」选择器(来自 DSH `permissionPresets`,如 工作区写入+询问 / 完全访问+免确认),**新建会话并发送**时 `/agent/create` 传 `permission` → 创建后对会话日志应用该预设(`permission/preset` + `sandbox/mode` + `approval/policy` 事件),覆盖部署默认;对旧宿主**向后兼容**:权限服务缺失时选择器降级为提示、不发送该字段。bundle 源码收进仓库 `scripts/bundle/send-to-agent/`(startup.js/button.tid/icon.svg/item-template.tid)+ 组装脚本 `scripts/build-send-to-agent-bundle.mjs`,改按钮后重跑组装 → gen-seed → build 即可。
|
|
37
38
|
- **v0.13.1**(2026-09-04):**客户端 bundle 压缩(minify)**。CodeMirror 6 + Lezer markdown 让 `lib/client.js`(`./client` 导出)达到 1.06MB,超过插件目录注册表(如 dsh.pub 收录校验)经 GitHub Contents API 检查的 **1MB 上限**,导致 dsh.pub 收录 PR 首轮校验失败(`invalid_file`);开启 tsdown `minify` 后产物降到 **0.58MB**(gzip ~193KB),浏览器加载更快,dsh.pub 收录 PR #83 校验全绿并已合并。构建配置见 `tsdown.client.config.ts`。
|
|
38
39
|
- **v0.13.0**(2026-09-04):**menubar 顶栏主题自适应**。tiddlywiki/menubar 顶栏背景原来一直停在默认色映射的蓝色(`$:/config/DefaultColourMappings/` → `#5778d8`),不随 DSH 深浅主题变化——根因是大部分浅色 palette(Vanilla/Blanca…)不定义 `menubar-background`,`<<colour menubar-background>>` 落回插件硬编码的蓝色。新增 seed `menubar-theme`:写入样式表覆盖 `$:/plugins/dsh-tiddlywiki/menubar-theme`(tag `$:/tags/Stylesheet`),把顶栏改为跟随**活动 palette** 的 `background`/`foreground`(`!important` 压过插件自身规则);嵌入式 TW 的 `$:/palette` 由主题同步随 DSH 翻转时,TW 会实时重渲染全部样式表,menubar 即自动换色。作为新 seed 进统一注册表(`menubar-theme`),首次启动自动写入(ONE-SHOT,不覆盖你的改动),设置页「初始化」可单独/全部**重新初始化**。
|
|
@@ -63,7 +64,7 @@ dsh plugin --profile web add github:bbqisbbq/dsh-tiddlywiki
|
|
|
63
64
|
dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
64
65
|
```
|
|
65
66
|
|
|
66
|
-
首次启动会自动完成:**初始化 wiki 目录**、**`git init` 并提交基线**、把「与 dsh
|
|
67
|
+
首次启动会自动完成:**初始化 wiki 目录**、**`git init` 并提交基线**、把「与 dsh 联动、功能必需」的一次性项写入 wiki(**统一 seed 注册表**,见「初始化」):**写入一次**「发送给 Agent」TW 按钮插件(`$:/plugins/dsh/send-to-agent`)、把 `$:/config/tiddlyweb/host` 指向同源代理。它们都是 ONE-SHOT:只写缺失、不覆盖你的改动、删掉重启也不会自动恢复。**可选项不自动写入、不强制**:说明笔记 / 首页 / 所有文章 / menubar 顶栏主题自适应 需要时在设置页「初始化」手动「重新初始化」,不想要可「反初始化」移除。
|
|
67
68
|
|
|
68
69
|
---
|
|
69
70
|
|
|
@@ -155,7 +156,7 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
155
156
|
| 插件管理 | 自带官方插件勾选(可搜索)→ 应用并自动重启 TW |
|
|
156
157
|
| 主题管理 | 自带主题**多选加载 + 单选活动** → 应用并自动重启 TW |
|
|
157
158
|
| 语言管理 | 自带官方语言包勾选(含 zh-Hans 简体)→ 应用并自动重启 TW |
|
|
158
|
-
| **初始化** | 一次性预置项实时状态(说明笔记/发送按钮/首页/所有文章/menubar 顶栏主题自适应/同源代理基址)→
|
|
159
|
+
| **初始化** | 一次性预置项实时状态(说明笔记/发送按钮/首页/所有文章/menubar 顶栏主题自适应/同源代理基址)→ 每项「重新初始化」;可选 seed 另有「反初始化」+ 「全部反初始化」 |
|
|
159
160
|
|
|
160
161
|
- 配置写入 wiki 内的 `$:/plugins/dsh-tiddlywiki/config` tiddler(JSON),随 git 同步,作为 **cordis `config:` 块之上的覆盖层**(tiddler 优先)。
|
|
161
162
|
- git 类配置修改后**重启 dsh web 生效**(bootstrap 时读取)。
|
|
@@ -170,24 +171,28 @@ dsh plugin --profile web add link:/path/to/your/dsh-tiddlywiki
|
|
|
170
171
|
|
|
171
172
|
### 🧩 初始化(一次性预置)
|
|
172
173
|
|
|
173
|
-
插件与 dsh 联动、需要在 wiki 里预置 tiddler/配置的项,全部收在**统一 seed 注册表**中(`SEED_DEFS
|
|
174
|
+
插件与 dsh 联动、需要在 wiki 里预置 tiddler/配置的项,全部收在**统一 seed 注册表**中(`SEED_DEFS`),分两层(v0.15.0):
|
|
174
175
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
|
179
|
-
|
|
180
|
-
| `
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
176
|
+
- **核心项**(功能必需):「发送给 Agent」按钮 + TW 前端 API 基址——**首次启动自动写入**(非 force:只写缺失、绝不覆盖你的改动);
|
|
177
|
+
- **可选项**:说明笔记 / 首页 / 所有文章 / menubar 顶栏主题自适应——**默认不写入、不强制**,可在设置页「**初始化**」区块随时手动「**重新初始化**」(force:重写内置内容)或「**反初始化**」(移除写入的 tiddler + marker)。
|
|
178
|
+
|
|
179
|
+
| seed id | 层级 | 预置内容 | 与 dsh 的联动 | ONE-SHOT 语义 |
|
|
180
|
+
|---|---|---|---|---|
|
|
181
|
+
| `send-to-agent` | **核心** | 「发送给 Agent」TW 按钮插件 `$:/plugins/dsh/send-to-agent` | 一键把笔记注入 dsh 会话的入口 | marker 门控:只写一次,删掉重启不复活 |
|
|
182
|
+
| `tw-web-host` | **核心** | `$:/config/tiddlyweb/host` → `/dsh-tiddlywiki/tw/` | 嵌入式 TW 编辑器的同源代理 API 基址(远程访问模式前提) | 非 force = 缺失/旧默认才写、用户自定义保留;force = 强制写回代理基址 |
|
|
183
|
+
| `doc-note` | 可选 | 「dsh-tiddlywiki 插件说明」笔记(tag `docs`) | 新手引导 | marker 门控:只写一次,删掉重启不复活;可反初始化 |
|
|
184
|
+
| `home-index` | 可选 | 默认主页「主页 / 所有标签 / 标签笔记」+ `$:/DefaultTiddlers` → 主页 | **首页**:四象限待办 + 「所有标签」「所有文章」入口 + 标签统计 + **Agent 区块**(纯 Agent / Agent+人工 分区,主标签列表排除 `agent-written`) | 同上;反初始化会一并把 `$:/DefaultTiddlers` 恢复为 GettingStarted |
|
|
185
|
+
| `all-articles` | 可选 | 「所有文章」——两列(🤖 Agent 撰写 / 👤 人工·人类)各自分页 | 全部条目的分栏总览;每页条数实时读 `ui.allArticles.pageSize`(设置页可调) | 同上;可反初始化 |
|
|
186
|
+
| `menubar-theme` | 可选 | `$:/plugins/dsh-tiddlywiki/menubar-theme` 样式表(tag `$:/tags/Stylesheet`) | 把 tiddlywiki/menubar 顶栏从默认蓝色改为跟随活动 palette 的 `background`/`foreground`,随 DSH 深浅主题自动换色 | 同上;可反初始化 |
|
|
183
187
|
|
|
184
188
|
**用法**:
|
|
185
189
|
- **查看状态**:设置页 →「初始化」→ 每项一个状态点(✓ 已就绪 / ✗ 缺失)+ 说明。
|
|
186
190
|
- **重新初始化单项**:点该项「重新初始化」——force 重写内置内容(覆盖你对该 tiddler 的改动)并重记 marker,用于「我把首页改坏了想恢复模板」「按钮被我删了想补回」「menubar 又变回蓝色了」等场景。
|
|
191
|
+
- **反初始化**:可选 seed 每项(及「全部反初始化」)——删除其写入的 tiddler + marker,恢复未初始化状态(核心项不可移除;点击前有确认弹窗)。
|
|
187
192
|
- **全部重新初始化**:底部「全部重新初始化」一键重跑全部。
|
|
188
193
|
- **为什么删掉重启不会自动恢复**:ONE-SHOT marker(`$:/plugins/dsh-tiddlywiki/seed-*`)记录「已提供过」,之后归用户所有——想恢复请手动「重新初始化」,而非依赖重启。
|
|
189
194
|
|
|
190
|
-
详细设计(后台 API、force 语义、如何重新生成内置常量)见 [docs/seed-initialization.md](docs/seed-initialization.md)。
|
|
195
|
+
详细设计(后台 API、force / remove 语义、如何重新生成内置常量)见 [docs/seed-initialization.md](docs/seed-initialization.md)。
|
|
191
196
|
|
|
192
197
|
### 🌐 界面语言(中文)
|
|
193
198
|
|
|
@@ -307,6 +312,9 @@ node scripts/gen-seed-home.mjs '<wiki>/tiddlers/主页.tid' '<wiki>/tiddlers/所
|
|
|
307
312
|
| `/dsh-tiddlywiki/agent/create` | POST | 按 cwd 新建/复用 Workspace + 会话(工作区优先);可选 `mode`(Agent 预设)、可选 `permission`(权限预设,创建后经 `permissionPresets.set` 应用到会话日志,v0.14.0;未知预设 400 拒绝) |
|
|
308
313
|
| `/dsh-tiddlywiki/api/*` | any | 透传到 TW 服务(JSON) |
|
|
309
314
|
| `/dsh-tiddlywiki/tw/*` | any | **同源 TW 代理**:整个 TW 前端(index + `/files/*` + TiddlyWeb API)→ 回环 TW(v0.6.0,远程访问核心) |
|
|
315
|
+
| `/dsh-tiddlywiki/admin/seeds` | GET | 一次性预置项实时状态(含 `removable` 标记) |
|
|
316
|
+
| `/dsh-tiddlywiki/admin/seeds/run` | POST | 运行一个/全部 seed(`force` = 重新初始化) |
|
|
317
|
+
| `/dsh-tiddlywiki/admin/seeds/remove` | POST | 反初始化:移除一个/全部可选 seed(核心项 400 拒绝) |
|
|
310
318
|
|
|
311
319
|
---
|
|
312
320
|
|
|
@@ -362,7 +370,7 @@ src/
|
|
|
362
370
|
|
|
363
371
|
- **GitHub(公开)**:https://github.com/bbqisbbq/dsh-tiddlywiki
|
|
364
372
|
- **npm**:`dsh-tiddlywiki`(https://www.npmjs.com/package/dsh-tiddlywiki)
|
|
365
|
-
- **说明笔记**:插件在**首次启动**时把「与 dsh
|
|
373
|
+
- **说明笔记**:插件在**首次启动**时把「与 dsh 联动、**功能必需**」的一次性项写入 wiki(**统一 seed 注册表**,见 [🧩 初始化](#🧩-初始化一次性预置)):「发送给 Agent」按钮插件(`$:/plugins/dsh/send-to-agent`)、`$:/config/tiddlyweb/host` 同源代理基址——只写一次、手动编辑不被覆盖、**删除后重启不会自动恢复**(一次性标记)。**可选项**(`dsh-tiddlywiki 插件说明` 笔记、默认主页「主页/所有标签/标签笔记」+ `$:/DefaultTiddlers`、「所有文章」两列分页页、`menubar` 顶栏主题自适应样式表 `$:/plugins/dsh-tiddlywiki/menubar-theme`)**默认不写入、不强制**——需要时设置页「初始化」手动「重新初始化」,不想要可「反初始化」移除。
|
|
366
374
|
|
|
367
375
|
**可被检索的标准字段**(为 GitHub / npm / 搜索引擎发现):
|
|
368
376
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# 统一 seed 注册表 &
|
|
1
|
+
# 统一 seed 注册表 & 后台「重新初始化 / 反初始化」
|
|
2
2
|
|
|
3
|
-
> 本文档说明 dsh-tiddlywiki
|
|
3
|
+
> 本文档说明 dsh-tiddlywiki 的「一次性预置」机制:哪些东西需要随插件初始化写入 wiki、它们与 dsh 的联动关系、**核心项 / 可选项**两层划分、ONE-SHOT / force / remove 语义、后台 API 与设置页操作,以及开发时如何重新生成内置常量。
|
|
4
|
+
>
|
|
5
|
+
> 版本沿革:v0.10.0 引入统一注册表 + 后台「重新初始化」;v0.13.0 新增 `menubar-theme` seed;**v0.15.0 拆成核心/可选两层**——启动只自动写**功能必需**项(发送给 Agent 按钮 + TW 前端 API 基址),可选项默认不写入、不强制,设置页可随时「重新初始化」写入或「反初始化」移除。
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -8,16 +10,16 @@
|
|
|
8
10
|
|
|
9
11
|
插件与 dsh 有多个联动功能,**前提是 wiki 里存在特定 tiddler / 配置**。这些项历史上靠手工往 wiki 里塞(只存在于个别 wiki 的 git 历史中),**初次安装插件的新用户拿不到**,导致联动功能残缺:
|
|
10
12
|
|
|
11
|
-
| 联动功能 | 依赖的 wiki 预置 | 缺失时的表现 |
|
|
12
|
-
|
|
13
|
-
| 一键发送给 Agent | `$:/plugins/dsh/send-to-agent` 按钮插件 | TW 工具栏没有「发送给 Agent」按钮,后端路由在但无入口 |
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
| menubar 顶栏主题自适应 | `$:/plugins/dsh-tiddlywiki/menubar-theme` 样式表(tag `$:/tags/Stylesheet`) | tiddlywiki/menubar 顶栏停留在默认色映射的蓝色(`$:/config/DefaultColourMappings/` → `#5778d8
|
|
18
|
-
| 新手引导 | 「dsh-tiddlywiki 插件说明」笔记 | 新用户没有入门说明 |
|
|
13
|
+
| 联动功能 | 依赖的 wiki 预置 | 缺失时的表现 | 层级 |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| 一键发送给 Agent | `$:/plugins/dsh/send-to-agent` 按钮插件 | TW 工具栏没有「发送给 Agent」按钮,后端路由在但无入口 | **核心**(功能必需) |
|
|
16
|
+
| 嵌入式 TW 编辑器 | `$:/config/tiddlyweb/host` 指向同源代理 | iframe 里的 TW 前端 API 基址指向错误的 origin,编辑/保存失效 | **核心**(功能必需) |
|
|
17
|
+
| 首页(待办四象限 / 标签统计 / Agent 区块) | 「主页」「所有标签」「标签笔记」三个 tiddler + `$:/DefaultTiddlers` → 主页 | 没有承诺的首页;TW 打开的是 GettingStarted | 可选(不强制) |
|
|
18
|
+
| 所有文章(两列分页总览) | 「所有文章」tiddler | 没有一键总览全部条目的入口 | 可选(不强制) |
|
|
19
|
+
| menubar 顶栏主题自适应 | `$:/plugins/dsh-tiddlywiki/menubar-theme` 样式表(tag `$:/tags/Stylesheet`) | tiddlywiki/menubar 顶栏停留在默认色映射的蓝色(`$:/config/DefaultColourMappings/` → `#5778d8`) | 可选(不强制) |
|
|
20
|
+
| 新手引导 | 「dsh-tiddlywiki 插件说明」笔记 | 新用户没有入门说明 | 可选(不强制) |
|
|
19
21
|
|
|
20
|
-
v0.
|
|
22
|
+
**v0.15.0 原则:不给用户强绑定。** 启动路径只自动预置**核心**项(发送给 Agent 按钮、TW 前端 API 基址——它们与插件自身功能强关联);其余**可选项**(说明笔记 / 首页 / 所有文章 / menubar 顶栏主题自适应)默认**不自动写入**,需要时在设置页「初始化」区块手动「重新初始化」,不想要了可随时「反初始化」移除。
|
|
21
23
|
|
|
22
24
|
---
|
|
23
25
|
|
|
@@ -30,25 +32,28 @@ interface SeedDef {
|
|
|
30
32
|
id: string // doc-note / send-to-agent / home-index / tw-web-host
|
|
31
33
|
title: string // 设置页显示名
|
|
32
34
|
description: string // 说明
|
|
33
|
-
|
|
35
|
+
core: boolean // true=功能必需(启动自动 seed);false=可选(不强制,可反初始化)
|
|
36
|
+
check(ctx): Promise<SeedStatus> // 当前状态(present / removable / detail),供 UI 展示
|
|
34
37
|
run(ctx, force): Promise<SeedRunResult> // 执行;force=false 保持 ONE-SHOT,force=true 重写内置内容
|
|
38
|
+
remove?(ctx): Promise<SeedRunResult> // 反初始化:删除写入的 tiddler + marker(仅可选 seed 实现)
|
|
35
39
|
}
|
|
36
40
|
```
|
|
37
41
|
|
|
38
|
-
| id | 实现 | 写什么 | marker |
|
|
39
|
-
|
|
40
|
-
| `doc-note` | `seed-notes.ts` → `seedDocNote` | 「dsh-tiddlywiki 插件说明」(tag `docs`) | `$:/plugins/dsh-tiddlywiki/seed-doc-note` |
|
|
41
|
-
| `send-to-agent` | `seed-send-to-agent.ts` → `seedSendToAgent` | `$:/plugins/dsh/send-to-agent` 按钮 bundle(`application/json`) | `$:/plugins/dsh-tiddlywiki/seed-send-to-agent` |
|
|
42
|
-
| `home-index` | `seed-home.ts` → `seedHomeIndex` | 「主页」+「所有标签」+「标签笔记」(tag `索引`),并把 `$:/DefaultTiddlers` 指向 `[[主页]]` | `$:/plugins/dsh-tiddlywiki/seed-home-index` |
|
|
43
|
-
| `all-articles` | `seed-all-articles.ts` → `seedAllArticles` | 「所有文章」(tag `索引`)——两列分页总览,每页条数实时读 `ui.allArticles.pageSize`(默认 10) | `$:/plugins/dsh-tiddlywiki/seed-all-articles` |
|
|
44
|
-
| `menubar-theme` | `seed-menubar-theme.ts` → `seedMenubarTheme` | `$:/plugins/dsh-tiddlywiki/menubar-theme`(tag `$:/tags/Stylesheet`)——覆盖 tiddlywiki/menubar 顶栏:把 `<<colour menubar-background>>` 的「默认色映射蓝色」改为跟随活动 palette 的 `background`/`foreground`,随 DSH 主题切换(`$:/palette` 翻转)自动换色 | `$:/plugins/dsh-tiddlywiki/seed-menubar-theme` |
|
|
45
|
-
| `tw-web-host` | `seeds.ts` 内联 | `$:/config/tiddlyweb/host` → `/dsh-tiddlywiki/tw/` | 无 marker(ensure 型,见 §4) |
|
|
42
|
+
| id | 实现 | 写什么 | marker | 层级 |
|
|
43
|
+
|---|---|---|---|---|
|
|
44
|
+
| `doc-note` | `seed-notes.ts` → `seedDocNote` / `unseedDocNote` | 「dsh-tiddlywiki 插件说明」(tag `docs`) | `$:/plugins/dsh-tiddlywiki/seed-doc-note` | 可选 |
|
|
45
|
+
| `send-to-agent` | `seed-send-to-agent.ts` → `seedSendToAgent` | `$:/plugins/dsh/send-to-agent` 按钮 bundle(`application/json`) | `$:/plugins/dsh-tiddlywiki/seed-send-to-agent` | **核心** |
|
|
46
|
+
| `home-index` | `seed-home.ts` → `seedHomeIndex` / `unseedHomeIndex` | 「主页」+「所有标签」+「标签笔记」(tag `索引`),并把 `$:/DefaultTiddlers` 指向 `[[主页]]` | `$:/plugins/dsh-tiddlywiki/seed-home-index` | 可选 |
|
|
47
|
+
| `all-articles` | `seed-all-articles.ts` → `seedAllArticles` / `unseedAllArticles` | 「所有文章」(tag `索引`)——两列分页总览,每页条数实时读 `ui.allArticles.pageSize`(默认 10) | `$:/plugins/dsh-tiddlywiki/seed-all-articles` | 可选 |
|
|
48
|
+
| `menubar-theme` | `seed-menubar-theme.ts` → `seedMenubarTheme` / `unseedMenubarTheme` | `$:/plugins/dsh-tiddlywiki/menubar-theme`(tag `$:/tags/Stylesheet`)——覆盖 tiddlywiki/menubar 顶栏:把 `<<colour menubar-background>>` 的「默认色映射蓝色」改为跟随活动 palette 的 `background`/`foreground`,随 DSH 主题切换(`$:/palette` 翻转)自动换色 | `$:/plugins/dsh-tiddlywiki/seed-menubar-theme` | 可选 |
|
|
49
|
+
| `tw-web-host` | `seeds.ts` 内联 | `$:/config/tiddlyweb/host` → `/dsh-tiddlywiki/tw/` | 无 marker(ensure 型,见 §4) | **核心** |
|
|
46
50
|
|
|
47
51
|
### 统一入口(`src/index.ts` 导出)
|
|
48
52
|
|
|
49
|
-
- `runAllSeeds(ctx)` ——
|
|
50
|
-
- `checkAllSeeds(ctx)` ——
|
|
53
|
+
- `runAllSeeds(ctx)` —— **启动路径**:**只 seed 核心项**(`core: true`:发送给 Agent 按钮 + TW 前端 API 基址),非 force(只写缺失)。可选项**不自动写入**。启动时序在 `configStore.load()` 之后、`bootstrapGit()` 之前,保证 seed 写入的内容进入首次 git 提交。
|
|
54
|
+
- `checkAllSeeds(ctx)` —— 返回每项当前状态数组(设置页「初始化」区块数据源,含 `removable` 标记)。
|
|
51
55
|
- `runSeedById(ctx, id?, force)` —— 单跑(`id` 指定)或全跑(`id` 为 `undefined`);`force` 为手动「重新初始化」;未知 `id` 返回显式错误结果而非抛异常。
|
|
56
|
+
- `removeSeedById(ctx, id?)` —— **反初始化**:删除单个(或全部)可选 seed 写入的 tiddler + marker,恢复「从未初始化」状态;核心项拒绝移除。
|
|
52
57
|
|
|
53
58
|
---
|
|
54
59
|
|
|
@@ -84,6 +89,15 @@ interface SeedDef {
|
|
|
84
89
|
|
|
85
90
|
> ⚠️ force 会**覆盖你对目标 tiddler 的编辑**,仅用于明确想要恢复内置内容时。日常「补缺失」不需要 force——启动流程与「全部重新初始化」之外的场景由 ONE-SHOT 语义兜底。
|
|
86
91
|
|
|
92
|
+
### 反初始化(remove,v0.15.0)
|
|
93
|
+
|
|
94
|
+
设置页「初始化」区块的「反初始化」按钮(以及后台 `POST /admin/seeds/remove`)触发,**只对可选 seed 提供**:
|
|
95
|
+
|
|
96
|
+
- 删除该 seed 写入的全部 tiddler **与** 一次性 marker,把 wiki 恢复到「从未初始化」状态;
|
|
97
|
+
- 之后该 seed 在设置页状态为「缺失」,需要时可再用「重新初始化」写回;
|
|
98
|
+
- `home-index` 反初始化时,若 `$:/DefaultTiddlers` 仍指向 seed 写出的 `[[主页]]`,一并恢复为 `[[GettingStarted]]`(用户自定义的默认页不受影响);
|
|
99
|
+
- **核心 seed(发送给 Agent 按钮 / TW 前端 API 基址)不可反初始化**——它们与插件自身功能强关联,移除会破坏对应能力;「全部反初始化」也只处理可选 seed。
|
|
100
|
+
|
|
87
101
|
---
|
|
88
102
|
|
|
89
103
|
## 5. 后台 API
|
|
@@ -98,17 +112,18 @@ interface SeedDef {
|
|
|
98
112
|
{
|
|
99
113
|
"ok": true,
|
|
100
114
|
"items": [
|
|
101
|
-
{ "id": "doc-note", "title": "插件说明笔记", "description": "…", "present": true, "detail": "已存在" },
|
|
102
|
-
{ "id": "send-to-agent", "title": "「发送给 Agent」按钮", "description": "…", "present": true, "detail": "已存在" },
|
|
103
|
-
{ "id": "home-index", "title": "首页(主页 / 所有标签 / 标签笔记)", "description": "…", "present": false, "detail": "缺失:主页" },
|
|
104
|
-
{ "id": "all-articles", "title": "所有文章(两列分页总览)", "description": "…", "present": true, "detail": "已存在" },
|
|
105
|
-
{ "id": "menubar-theme", "title": "menubar 顶栏主题自适应", "description": "…", "present": true, "detail": "已存在" },
|
|
106
|
-
{ "id": "tw-web-host", "title": "TW 前端 API 基址(同源代理)", "description": "…", "present": true, "detail": "已指向 /dsh-tiddlywiki/tw/" }
|
|
115
|
+
{ "id": "doc-note", "title": "插件说明笔记", "description": "…", "present": true, "removable": true, "detail": "已存在" },
|
|
116
|
+
{ "id": "send-to-agent", "title": "「发送给 Agent」按钮", "description": "…", "present": true, "removable": false, "detail": "已存在" },
|
|
117
|
+
{ "id": "home-index", "title": "首页(主页 / 所有标签 / 标签笔记)", "description": "…", "present": false, "removable": true, "detail": "缺失:主页" },
|
|
118
|
+
{ "id": "all-articles", "title": "所有文章(两列分页总览)", "description": "…", "present": true, "removable": true, "detail": "已存在" },
|
|
119
|
+
{ "id": "menubar-theme", "title": "menubar 顶栏主题自适应", "description": "…", "present": true, "removable": true, "detail": "已存在" },
|
|
120
|
+
{ "id": "tw-web-host", "title": "TW 前端 API 基址(同源代理)", "description": "…", "present": true, "removable": false, "detail": "已指向 /dsh-tiddlywiki/tw/" }
|
|
107
121
|
]
|
|
108
122
|
}
|
|
109
123
|
```
|
|
110
124
|
|
|
111
|
-
|
|
125
|
+
- `removable: true` = 可选 seed(可「反初始化」移除);`false` = 核心 seed(功能必需,不可移除)。
|
|
126
|
+
- wiki 服务未运行时返回 `503 { ok: false, error: "wiki service is not running" }`。
|
|
112
127
|
|
|
113
128
|
### `POST /dsh-tiddlywiki/admin/seeds/run`
|
|
114
129
|
|
|
@@ -136,17 +151,40 @@ wiki 服务未运行时返回 `503 { ok: false, error: "wiki service is not runn
|
|
|
136
151
|
- 未知 `id` → `400 { ok: false, results: [{ id, ok: false, error: "unknown seed: <id>" }] }`;
|
|
137
152
|
- 请求体过大(> 1MB)或非法 JSON → `400`。
|
|
138
153
|
|
|
154
|
+
### `POST /dsh-tiddlywiki/admin/seeds/remove`
|
|
155
|
+
|
|
156
|
+
反初始化(v0.15.0)。请求体:
|
|
157
|
+
|
|
158
|
+
| 字段 | 类型 | 说明 |
|
|
159
|
+
|---|---|---|
|
|
160
|
+
| `id` | string, 可选 | 指定移除单项;缺省 = 全部可选 seed |
|
|
161
|
+
|
|
162
|
+
响应与 `/admin/seeds/run` 同构(`results[]`):
|
|
163
|
+
|
|
164
|
+
```jsonc
|
|
165
|
+
{
|
|
166
|
+
"ok": true,
|
|
167
|
+
"results": [
|
|
168
|
+
{ "id": "menubar-theme", "ok": true, "wrote": false, "detail": "已移除:$:/plugins/dsh-tiddlywiki/menubar-theme、$:/plugins/dsh-tiddlywiki/seed-menubar-theme" }
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
- 核心 seed(发送给 Agent 按钮 / TW 前端 API 基址)**不可移除**——指定它们 → `400 { ok: false, results: [{ id, ok: false, error: "该 seed 为核心项(功能必需),不可反初始化" }] }`;「全部反初始化」会自动跳过核心项;
|
|
174
|
+
- 未知 `id` → `400`,`error: "unknown seed: <id>"`;
|
|
175
|
+
- wiki 服务未运行时 → `503`。
|
|
176
|
+
|
|
139
177
|
---
|
|
140
178
|
|
|
141
179
|
## 6. 设置页操作
|
|
142
180
|
|
|
143
181
|
DSH 设置 →「TiddlyWiki 知识库」→ 最底部「**初始化(一次性预置)**」区块:
|
|
144
182
|
|
|
145
|
-
- 顶部状态行:`共 N 项,M
|
|
146
|
-
- 每项一行:状态点(✓ 已就绪 / ✗ 缺失)+ 名称 + 实时详情(如缺失了哪个 tiddler)+
|
|
147
|
-
- 底部:「**全部重新初始化**」按钮(force
|
|
183
|
+
- 顶部状态行:`共 N 项,M 项已就绪;可移除 K 项`;
|
|
184
|
+
- 每项一行:状态点(✓ 已就绪 / ✗ 缺失)+ 名称 + 实时详情(如缺失了哪个 tiddler)+ 「重新初始化」按钮;**可选 seed 另有「反初始化」按钮**(核心 seed 不显示);
|
|
185
|
+
- 底部:「**全部重新初始化**」按钮(force 全部)+「**全部反初始化**」按钮(移除全部可选 seed,核心项保留;点击前有确认弹窗)。
|
|
148
186
|
|
|
149
|
-
前端源码:`src/client/settings-page.ts` 的 `renderSeedsSection`;样式 `src/client/styles.ts`(状态点 `ok` / `missing`)。
|
|
187
|
+
前端源码:`src/client/settings-page.ts` 的 `renderSeedsSection`;样式 `src/client/styles.ts`(状态点 `ok` / `missing`、危险按钮 `dsh-tw-settings-danger`)。
|
|
150
188
|
|
|
151
189
|
---
|
|
152
190
|
|
|
@@ -175,9 +213,9 @@ npm run typecheck && npm run build && npm run selftest
|
|
|
175
213
|
|
|
176
214
|
新增一个 seed 的步骤:
|
|
177
215
|
|
|
178
|
-
1. 写实现(或复用现有 `seedXxx(client, { force? })`
|
|
179
|
-
2. 在 `src/host/seeds.ts` 的 `SEED_DEFS` 里登记(`check` + `run`);
|
|
180
|
-
3.
|
|
216
|
+
1. 写实现(或复用现有 `seedXxx(client, { force? })` 模式;可选 seed 再补 `unseedXxx(client)` 返回 `{ removed: string[] }`);
|
|
217
|
+
2. 在 `src/host/seeds.ts` 的 `SEED_DEFS` 里登记(`core` + `check` + `run`,可选 seed 加 `remove`);
|
|
218
|
+
3. 核心 seed 会被启动路径 `runAllSeeds` 自动覆盖;可选 seed 仅设置页手动触发;
|
|
181
219
|
4. selftest 增加对应断言段,跑 `verify-seeds-admin.mjs` 验证后台 API;
|
|
182
220
|
5. bump 版本、更新本文档与 README。
|
|
183
221
|
|
|
@@ -186,13 +224,13 @@ npm run typecheck && npm run build && npm run selftest
|
|
|
186
224
|
## 8. 验证
|
|
187
225
|
|
|
188
226
|
- `npm run typecheck` / `npm run build`:编译与打包;
|
|
189
|
-
- `npm run selftest`:5d
|
|
190
|
-
- `node scripts/verify-seeds-admin.mjs`:全新 wiki + 真实 HTTP,端到端验证 `GET /admin/seeds` 状态流转(全缺失 →
|
|
227
|
+
- `npm run selftest`:5d 段覆盖注册表清单(含 `core` / `removable`)、**启动只 seed 核心项**、手动全跑只写缺失、单跑幂等、force 重写、unknown id、tw-web-host 三分支(custom 保留 / force 写回 / legacy 修复)、**反初始化**(单移除 / 核心拒绝 / unknown / 全部移除保留核心);
|
|
228
|
+
- `node scripts/verify-seeds-admin.mjs`:全新 wiki + 真实 HTTP,端到端验证 `GET /admin/seeds` 状态流转(全缺失 → 启动后仅核心就绪)与 `POST /admin/seeds/run`(force 单跑恢复被改坏的首页、非 force 不覆盖用户内容、force-all 恢复代理基址、unknown id 400)+ `POST /admin/seeds/remove`(移除可选、核心 400、remove-all 仅剩核心)。
|
|
191
229
|
|
|
192
230
|
---
|
|
193
231
|
|
|
194
232
|
## 9. 生效方式
|
|
195
233
|
|
|
196
234
|
- seed 注册表属插件源码逻辑:**重启 dsh web** 后生效(会中断当前会话,注意时机)。
|
|
197
|
-
- 本 wiki(已存在上述 tiddler
|
|
198
|
-
- 新装 wiki
|
|
235
|
+
- 本 wiki(已存在上述 tiddler):重启后启动路径**只补核心项**(发送给 Agent 按钮 / TW 前端 API 基址,缺才写),**不覆盖任何现有内容**;可选项维持现状,可在设置页「初始化」手动「重新初始化」或「反初始化」。
|
|
236
|
+
- 新装 wiki:首次启动只自动获得**核心预置**(发送按钮 + 代理基址);说明笔记 / 首页 / 所有文章 / menubar 顶栏主题自适应为可选项,需要时在设置页写入,不想要也不会被强制。
|