Skip to content
dsh.fish
Bundle

@dsh-external/xiashuo

虾说 — DSH 创作者 AI 工作台插件:首页项目管理 + 课程/公文/小说/论文/自定义多类型 + 可编辑工作流 + 九阶段门禁式流程 + 知识图谱 + 资料库注入 + 本地导入 + AI 润色 + 教案诊断,开箱即用。

Source
bettermen
stars
1 stars
License
MIT
Updated
Updated yesterday

Readme

<p align="center">
  <img src="./assets/brand/banner.svg" alt="虾说 — 创作者 AI 工作台" width="100%">
</p>

# 虾说(xiashuo)

> **AI creator workspace plugin for [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart) (DSH)** — project-managed home page · course/official/novel/thesis + custom kinds · editable workflow · three-pane workspace · gated pipeline · lorebook & knowledge graph · TXT/Word export · share & collaborate.

一个面向 [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/guide/quickstart)(DSH)的 **创作者 AI 辅助工作台**插件:
**首页项目管理 + 多类型(课程 / 公文 / 小说 / 论文 / 自定义)+ 可编辑工作流 + 三栏式工作台 + 门禁式编写流程 + 导出(TXT/Word)+ 分享协作**。

- 中文 | [English](./README.en.md)

<p align="center">
  <img src="./assets/brand/logo.png" alt="虾说 Logo" width="120">
</p>

让 DSH 像一位专业的创作搭档与你协同:通过 AI 对话管理你的创作 —— 首页集中管理所有项目,每种类型(课程、公文、小说、论文,乃至自定义类型)都有一套可自由增删改序的工作流;从选题到成稿,每一步有方法、有门禁、可校验、可导出,并配有资料库与知识图谱把知识点结构固化下来。

---

## ✨ 功能特性

### 🏠 首页项目管理
- **项目列表**:卡片 / 列表双视图,展示类型徽章、状态、进度条、课时数、字数、最近更新
- **筛选排序**:按类型 / 状态(含"未归档")/ 关键词搜索,按更新时间 / 创建时间 / 名称 / 字数 / 进度排序
- **新建 / 编辑 / 删除 / 复制 / 归档**:卡片右键菜单一键操作;删除可"保留稿件"或"连稿件一并删"
- **空态引导**:无项目时一键创建示例项目快速上手

### 🗂 多类型 + 可编辑工作流
- **四种内置类型**:课程(九阶段)、公文(七阶段)、小说(九阶段)、论文(八阶段),每种类型自带默认工作流与题材口径
- **自定义类型**:用户可自建类型(名称 + 图标 + 题材列表 + 初始流程)
- **工作流自由编辑**(工作台左栏「流程」页):阶段**拖拽排序 / 增删 / 改名**,编辑每个阶段的**门禁 / 必交产物 / AI 提示词 / 评审标准 / 可跳过**,一键**恢复默认**、**另存为模板**、浏览与应用模板库

### 三栏式工作台
- **左栏**:章节 / 阶段 / 流程三视图 —— 章节列表(**拖拽排序** + 悬停删除 + 右键菜单)、阶段门禁导航(进度、锁定/进行中/已通过状态)、流程编辑器
- **中栏**:Markdown 编辑 + 分屏预览 + 章节名编辑 + 手动保存 / 自动保存(停止输入 2 秒自动落盘)
- **右栏**:资料库(知识点管理)/ 知识图谱(可视化知识结构)

### 项目管理
- **新建项目**:类型卡(课程/公文/小说/论文/自定义)+ 题材联动下拉 + 简介 + 工作流模板选择
- **重命名 / 删除 / 复制 / 归档**:一键操作,删除二次确认

### 资料库(知识点管理)
- 知识点**新增 / 编辑 / 停用 / 启用 / 删除 / 预览**(弹窗表单,含名称、内容、关键词)
- 关键词逗号分隔,按项目隔离(每个项目独立栏目)

### 知识图谱
- 可视化项目知识点与关联关系
- 节点标签沿圆周径向分布,防重叠;长标签截断 + 悬停查看完整

### 导出
- **TXT** 文本导出
- **Word(.docx)** 标准 Office 格式(标题层级 + 章节样式)

### 分享协作
- 生成**只读 / 可编辑**分享链接,他人免登录即可访问
- 可编辑协作带**版本记录**与**冲突检测**(多人编辑冲突时提示覆盖或加载最新)

### 门禁式编写流程(每类型一套)
- **阶段门禁**:前一阶段未批准不能进入下一阶段
- **产物版本快照**:每次提交留档,可回退
- **审计日志**:每次操作写入 audit.jsonl

### 窗口控制
- 全屏 / 缩小 50%(可拖拽调整大小)/ 关闭
- 三栏宽度可拖拽调整

<p align="center">
  <img src="./assets/screenshots/shot-gui.png" alt="虾说三栏式工作台" width="820">
</p>

### 🎭 创作模式预设(agent 预设)
插件随包装载一个 **「虾说」agent 预设**,在 DSH 新建会话时的模式选择器里即可选用——选中即"一键进入创作工作台模式"。

**三通道协同,约束模型行为**:
1. **模式锚定(本预设)**——预设锚定"创作者工作台" persona;
2. **软引导(技能)**——随 enabling 自动注册的 `course-writing-workflow` 技能,进入会话后加载完整创作方法论(多类型流程定义、模板用法、工具写法);
3. **硬轨道(工具)**——host 注册的 `course_*` / `lorebook_*` 工具随预设全程可调,项目管理、工作流编辑、阶段推进、产物提交、校验、写正文都走工具。

**使用方式**:新建会话 → 预设选择器选「虾说」→ 直接开始创作;或安装后自动同步到本地 `~/.dsh/.agent-presets/course-writer/`。

---

## 🎯 使用场景

| 场景 | 怎么做 |
| --- | --- |
| 从零写一门新课程 | 打开首页 → 「+ 新建项目」→ 选「课程」→ 按九阶段逐章编写 |
| 起草一份公文 | 新建项目选「公文」→ 需求确认 → 材料 → 提纲 → 初稿 → 校核签发 |
| 写一部小说 | 新建项目选「小说」→ 选题/设定/人设 → 大纲/细纲 → 正文 → 修订 |
| 写一篇论文 | 新建项目选「论文」→ 选题 → 文献综述 → 设计 → 正文 → 规范答辩 |
| 自定义创作类型 | 首页自建类型(名称 + 图标 + 题材 + 初始流程)→ 按自定义流程推进 |
| 已有大纲/知识点 | 建好项目后,把知识点录入资料库,正文引用 |
| 团队协作编文档 | 「分享」生成可编辑链接,多人协作 + 冲突检测 |
| 交付 Word 文档 | 「导出」→ Word(.docx) 一键下载 |
| 查看知识结构 | 右栏「知识图谱」可视化知识点关联 |

---

## 📦 安装

> 需已装 DSH(跨 Windows/macOS/Linux;运行时 Node ≥18)。**务必安装最新版**(当前 v0.8.0)。

### ① 一句话让 AI 装(推荐)
把下面这段发给能执行命令的 AI:

> 帮我安装 DSH 插件「虾说」(xiashuo),**只装最新版**。步骤:从 `https://github.com/bettermen/xiashuo/releases/latest` 下载最新的 `dsh-external-xiashuo-*.tgz`(版本号最大的那个)→ 执行 `dsh plugin --profile web add <该 tgz 绝对路径>` → `dsh plugin list` 确认在列且已启用 → 提醒我刷新 DSH 页面(Ctrl+Shift+R)后侧边栏出现「虾说」。遇到报错先告诉我再处理。

### ② 手动下载装
从 https://github.com/bettermen/xiashuo/releases/latest 下载最新的 `dsh-external-xiashuo-*.tgz`,然后:

```bash
dsh plugin --profile web add <该文件路径>
dsh plugin list        # 看到 xiashuo 即成功
```

### ③ 源码构建装(进阶)
需 Node ≥22 与 Git:

```bash
git clone https://github.com/bettermen/xiashuo.git && cd xiashuo
npm install && npm run build && npm pack
dsh plugin --profile web add ./dsh-external-xiashuo-0.8.0.tgz
```

**装完**:侧边栏出现「虾说」、设置页出现同名卡片即完成;没有就刷新页面/重启 DSH 并在插件列表确认已启用。

---

## 🚀 快速开始

1. 打开侧边栏「虾说」→ 进入**首页** → 「+ 新建项目」→ 选类型(课程/公文/小说/论文/自定义)+ 题材
2. 点击项目卡片进入工作台,左栏点章节切换,中栏写正文(Markdown),停止输入 2 秒自动保存
3. 左栏「流程」页可随时调整工作流(拖拽排序、增删阶段、改门禁);右栏「资料库」录入知识点,「知识图谱」查看结构
4. 顶部「导出」→ 选 TXT 或 Word 下载;「分享」→ 生成协作链接

数据目录默认 `~/.dsh/xiashuo/`:

```
lorebook/       资料库(entries)
projects/       项目(book.json + workflow.json + chapters/ + audit.jsonl + ...)
templates/      用户工作流模板
```

---

## 📖 功能使用指南

### 0️⃣ 首页项目管理
- 侧边栏入口进首页:卡片/列表查看项目,按类型/状态/关键词筛选、排序
- 「+ 新建项目」:选类型(图标卡)、题材联动下拉、填简介、选工作流模板
- 卡片右键:打开 / 编辑 / 创建副本 / 归档 / 删除(可保留或删除稿件)

### 1️⃣ 编辑工作流(左栏「流程」页)
- 进入项目后,左栏切换「流程」:查看当前流程的阶段列表(门禁色点 + 序号 + 名称)
- **拖拽**排序、点「+ 添加阶段」新增、点击阶段打开属性面板(门禁/说明/必交产物/AI 提示词/评审标准/可跳过)
- 「恢复默认」回到该类型默认流程;「另存为模板」把当前流程存进模板库;「模板库」浏览并应用内置/我的模板

### 2️⃣ 编写正文(CodeMirror 编辑器)
- 左栏章节列表点击切换;中栏为 **CodeMirror 6 Markdown 编辑器**
- Markdown 语法高亮(标题、加粗、斜体、删除线、引用、列表、链接、行内代码、代码块)
- 软换行;列表 / 块引用按回车自动续行;引号与括号自动配对
- 支持撤销 / 重做、查找替换、行号显示
- 章节名可自定义(顶部输入框)
- 保存:手动点「保存」,或停止输入 2 秒自动保存(底部显示「● 未保存 / ✓ 已保存」)
- 搜索面板来自 CodeMirror 官方组件,面板文案为英文;快捷键 ⌘F 查找、⌘Z 撤销

### 2.5️⃣ 编辑器工具栏(手动排版)
中栏编辑器顶部有一条 **Apple 风格工具栏**,不用记 Markdown 语法也能手动排版,16 个按钮分 5 组:

- **历史**:撤销 / 重做(⌘Z / ⇧⌘Z)
- **段落样式**:正文 / 标题 H1–H3 / 引用 / 无序列表 / 有序列表 / 任务列表 / 代码块
- **行内**:加粗 / 斜体 / 删除线 / 行内代码
- **外观**:字体(默认 / 宋体衬线 / 黑体 / 等宽 / 楷体)+ 字体颜色(14 色)+ 文字高亮(8 色,可选"无")
- **插入**:链接 / 图片 / 表格(6×8 网格,悬停预览行列)/ 分割线
- **视图**:查找 / 行号开关

说明:

- 所有操作走**一次撤销步**(撤销即整段回退),并保持光标定位
- 字体颜色 / 高亮在 Markdown 中以内联 `<span style="…">` 落地(预览器**白名单**还原,仅放行安全的 CSS 属性,`url()` / `expression` / `javascript:` 一律拦截,内容可安全分享)
- 颜色 / 高亮再次点击同色即**取消**;字体再次选择并入同一 span,不嵌套

### 2.6️⃣ 删除与拖拽排序
- **删除**:悬停章节行 → 右侧浮现 ✕ 按钮;或在章节上**右键 → 删除课时**(二次确认后生效)
- **排序**:直接拖动章节行到目标位置,落点显示蓝色插入条,松手即保存
- 右键菜单另有:预览 / 新建课时 / 复制标题
- 语义说明:
  - 删除**不重编号**(保留稀疏编号,如删掉第 2 课后为 1、3),避免外部引用(分享链接、账本、AI 上下文)失效;新建课时取 `max(no)+1`,不会撞号
  - 拖拽**统一重编号为 1..N**,并同步修正一致性账本的课时归属、按新顺序重放项目变量
  - 两者都写入审计日志(`action: delete` / `reorder`)

### 3️⃣ 资料库(知识点)
- 右栏「资料库」Tab → 「+ 新建知识点」→ 填名称 / 内容 / 关键词(逗号分隔)
- 每条知识点支持**预览 / 编辑 / 停用启用 / 删除**
- 知识点按项目隔离

### 4️⃣ 知识图谱
- 右栏「知识图谱」Tab → 可视化当前项目知识点关联
- 节点标签防重叠,悬停查看完整名称

### 5️⃣ 导出
- 顶部「导出」→ 选 **TXT** 或 **Word(.docx)** → 直接下载

### 6️⃣ 分享协作
- 顶部「分享」→ 选权限(只读 / 可编辑)→ 生成链接 → 复制发给他人
- 可编辑协作:保存时带版本号,多人冲突时提示「覆盖 or 加载最新」
- 可撤销任意分享链接

---

## ⚙️ 配置

| 设置 | 默认 | 说明 |
| --- | --- | --- |
| enabled | true | 插件总开关(关闭即注销工具/技能,数据保留) |
| dataDir | `~/.dsh/xiashuo` | 数据根目录 |
| uiHidden | false | 隐藏侧边栏「虾说」入口 |

---

## 🔌 与 DSH 的交互

- **agent 工具**:`course_*`(项目 CRUD / 工作流编辑 / 阶段推进 / 写正文 / 校验 / 导出…)+ `lorebook_*`(资料库 CRUD)
  - 项目管理:`course_projects` / `course_create_project` / `course_project_update` / `course_project_delete` / `course_clone_project`
  - 工作流:`course_workflow`(list / add / rename / update / delete / reorder / reset)
  - 编写:`course_phase` / `course_commit` / `course_write_chapter` / `course_commit_chapter` / `course_override`
- **技能**:`course-writing-workflow`(多类型创作方法论指导)
- **GUI 数据面**:`/api/xiashuo/*`(项目/工作流/章节/导出/分享/资料库,fence 头校验)

---

## ❓ 常见问题(FAQ)

**Q:为什么保存后没有跳回第 1 课?**
A:这是刻意设计——保存后停留当前章节,只刷新章节列表,方便连续编写。

**Q:编辑后切章节会丢内容吗?**
A:不会。有未保存改动时切章节/切项目/关闭都会先弹确认,避免误丢。

**Q:修改项目类型(课程→小说)会怎样?**
A:类型决定工作流,改类型会连带把工作流重置为新类型的默认流程;已有内容的项目建议新建后导入,避免进度丢失。

**Q:分享链接安全吗?**
A:分享走独立 `/share/` 公开路径 + token 鉴权,不暴露管理密码;可随时撤销。

**Q:Word 导出是标准格式吗?**
A:是标准 `.docx`(零依赖生成器),Word / WPS / Google Docs 均可打开,保留标题与章节层级。

---

## 🧪 开发

```bash
npm run typecheck   # host + client 双段
npm test            # vitest
npm run build       # tsc host + tsdown client
npm pack            # 打包为 tgz
```

---

## 🛡 安全模型

- 数据仅存本地 `~/.dsh/xiashuo/`,不联网上传
- 所有写操作走审计日志
- GUI 路由带自定义头校验(防 CSRF/dns-rebinding)
- 分享接口 token 鉴权 + nginx 独立放行,不暴露管理凭据

## 📄 许可

MIT

Install

dsh plugin --profile web add github:bettermen/xiashuo

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source