🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

织板看板 Yeezone/kanweave

DeepSeek Harness
Yeezone13 天前有提交已提供中文文档扫描:含敏感能力

自建项目看板,拖拽卡片并实时协作

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Yeezone/kanweave
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 21 处,展示前 21 条)
  • 发起网络请求
    src/host/dingtalk.ts:158
    const tokenResponse = await fetch(TOKEN_ENDPOINT, {
  • 发起网络请求
    src/host/dingtalk.ts:178
    const profileResponse = await fetch(PROFILE_ENDPOINT, {
  • 写入本地文件
    src/host/media.ts:74
    await mkdir(this.root, { recursive: true })
  • 读取本地文件
    src/host/media.ts:98
    const stats = await stat(file)
  • 读取本地文件
    src/host/media.ts:107
    const stats = await stat(this.partPathFor(slot))
  • 写入本地文件
    src/host/media.ts:117
    await mkdir(dirname(partPath), { recursive: true })
  • 写入本地文件
    src/host/media.ts:119
    const writable = createWriteStream(partPath, { flags: existing > 0 ? 'a' : 'w' })
  • 删除本地文件
    src/host/media.ts:164
    await rm(partPath, { force: true })
  • 读取本地文件
    src/host/media.ts:172
    const stats = await stat(partPath)
  • 写入本地文件
    src/host/media.ts:173
    await rename(partPath, finalPath)
  • 读取本地文件
    src/host/media.ts:179
    return createReadStream(this.pathFor(slot), { start: range.start, end: range.end })
  • 删除本地文件
    src/host/media.ts:183
    await rm(this.pathFor(slot), { force: true })
  • 删除本地文件
    src/host/media.ts:184
    await rm(this.partPathFor(slot), { force: true })
  • 读取本地文件
    src/host/media.ts:189
    return readFile(this.pathFor(slot))
  • 读取本地文件
    src/host/service.ts:118
    const raw = readFileSync(join(dataDir, 'cloud.json'), 'utf8')
  • 读取本地文件
    src/host/service.ts:163
    const raw = readFileSync(join(dataDir, 'dingtalk.json'), 'utf8')
  • 写入本地文件
    src/host/store.ts:312
    if (options.file !== ':memory:') mkdirSync(dirname(options.file), { recursive: true })
  • 读取本地文件
    src/host/ui.ts:89
    const stats = await stat(target)
  • 读取本地文件
    src/host/ui.ts:91
    content = await readFile(target)
  • 读取本地文件
    src/host/ui.ts:96
    content = await readFile(target)
  • 发起网络请求
    src/standalone/api.ts:432
    response = await fetch(apiUrl(path), {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

自托管的看板项目管理:项目、列表和卡片支持图片/视频附件,钉钉登录,按项目分配角色和邀请,多用户实时同步。可作为独立 Web 应用运行,也可作为 DeepSeek Harness 插件运行。

README

由 DeepSeek 最新模型翻译生成
KanWeave · 织板 一个项目管理产品,能自己部署,也能装进 DeepSeek Harness:项目 → 栏目 → 卡片,卡片里能贴图、传视频、写 Markdown 评论;支持钉钉扫码登录、按项目邀请成员并设置管理员;多人同时看看板会实时同步。 零运行时 npm 依赖:数据库用 Node 内置的 node:sqlite,HTTP 用 node:http,构建产物是几个 .js 文件,拷到服务器上 node lib/standalone.js 就能跑。 看板 功能 - 项目 / 栏目 / 卡片:项目下自定义栏目(可排序),卡片可在栏目间拖动、排序、标记完成;每张卡片有项目内编号(如 LAUNCH-12)。 - 卡片详情:优先级、截止日期、负责人、Markdown 描述(带安全预览)、评论区。 - 媒体附件:图片、视频、音频、PDF、Office/压缩包;支持拖拽、粘贴上传、分片续传;视频用 Range 流式播放(可以拖进度条)。 - 实时协作:SSE 推送项目变更与在线成员,顶部显示「N 人在看板」,断线自动退回轮询。 - 账号:邮箱密码注册/登录、钉钉扫码登录(企业内部应用 OAuth2,按 (corpId, unionId) 绑定)、邀请链接自带注册。
展开完整文档(README 剩余 1 节)
KanWeave · 织板

一个项目管理产品,能自己部署,也能装进 DeepSeek Harness:项目 → 栏目 → 卡片,卡片里能贴图、传视频、写 Markdown 评论;支持钉钉扫码登录、按项目邀请成员并设置管理员;多人同时看看板会实时同步。

零运行时 npm 依赖:数据库用 Node 内置的 node:sqlite,HTTP 用 node:http,构建产物是几个 .js 文件,拷到服务器上 node lib/standalone.js 就能跑。

看板

功能

- 项目 / 栏目 / 卡片:项目下自定义栏目(可排序),卡片可在栏目间拖动、排序、标记完成;每张卡片有项目内编号(如 LAUNCH-12)。
- 卡片详情:优先级、截止日期、负责人、Markdown 描述(带安全预览)、评论区。
- 媒体附件:图片、视频、音频、PDF、Office/压缩包;支持拖拽、粘贴上传、分片续传;视频用 Range 流式播放(可以拖进度条)。
- 实时协作:SSE 推送项目变更与在线成员,顶部显示「N 人在看板」,断线自动退回轮询。
- 账号:邮箱密码注册/登录、钉钉扫码登录(企业内部应用 OAuth2,按 (corpId, unionId) 绑定)、邀请链接自带注册。
- 权限:项目级角色 —— 拥有者 / 管理员 / 成员 / 观察者;管理员可邀请成员,只有拥有者能转让/删除项目。
- 双形态:独立 Web 站点(浏览器打开)+ DeepSeek Harness 侧边栏插件(同一个 UI,可指向云端同一个空间)。

卡片详情

快速开始(本机 1 分钟)

需要 Node.js 24+(或 22.19+)和 pnpm。

git clone https://github.com/<your-account>/kanweave.git
cd kanweave
pnpm install
pnpm build
pnpm start # http://localhost:4280/kanweave/ui/

首次打开会要求创建初始管理员账号,随后在左侧 + 新建项目即可。数据默认在 ./.data(可用 KW_DATA_DIR 改)。

不想装 Node?用 Docker:

docker build -t kanweave .
docker run -d --name kanweave -p 4280:4280 -v kanweave-data:/data kanweave

连构建都省了:从 Releases 下载 kanweave-<版本>-standalone.zip,解压后直接 node lib/standalone.js(压缩包里已含 lib/ 与 public/,无需 pnpm install)。

部署给团队用(云端一份数据)

目标形态:一台云服务器 + 一个域名,任何设备打开同一个看板,DSH 插件也指向它。

cp .env.example .env # 填 KW_PUBLIC_URL / 钉钉应用 / KW_DATA_DIR
docker compose up -d --build
反代(自动 HTTPS)
sudo cp deploy/Caddyfile /etc/caddy/Caddyfile && sudo systemctl reload caddy

插件端只需一个文件让侧边栏面板连到云端:

// ~/.dsh/kanweave/cloud.json
{ "url": "https://pm.example.com" }

完整步骤(服务器/域名、HTTPS、钉钉回调、备份升级、排错表):

- docs/deploy-cloud.md — Docker 一键部署(推荐)
- docs/deploy-internet.md — 裸机 systemd + Caddy/Nginx
- docs/dingtalk.md — 钉钉应用配置与登录原理

装成 DeepSeek Harness 插件

方式一:脚本(写 profile 的依赖与 bundles,然后重启 DSH)
node scripts/install-dsh-plugin.mjs --profile desktop

方式二:命令行
dsh plugin --profile desktop add link:E:/Projects/ProjectEdit # 换成你自己的仓库路径

重启 DeepSeek Harness 后,侧边栏出现「织板」入口,面板内就是完整的看板。卸载:node scripts/install-dsh-plugin.mjs --profile desktop --remove。

插件默认使用本机数据目录 ~/.dsh/kanweave;配好 cloud.json 后改为转发到云端,本机不存项目数据(见 docs/deploy-cloud.md 第 4 节)。

开启钉钉扫码登录

按钮出现需要三个条件同时成立:

1. 服务端拿到凭据:KW_DINGTALK_ 环境变量,或数据目录里的 dingtalk.json(插件/桌面端推荐后者,因为桌面启动器不便设环境变量);
2. 看到登录页:插件形态默认以「本机用户」身份自动登录,要点左下角的「登录其他账号」才进入登录页,「使用钉钉登录」按钮在那里;
3. 钉钉控制台的重定向 URL 与配置逐字一致(含协议、端口、路径)。

开关脚本(插件数据目录默认 ~/.dsh/kanweave,独立站默认 ./.data):

node scripts/set-dingtalk.mjs --status # 当前是否启用
node scripts/set-dingtalk.mjs --mock # 离线演示:按钮可点,不需要钉钉应用,只用于确认 UI
node scripts/set-dingtalk.mjs --clear # 关闭

接真实钉钉(企业内部应用,免审核,扫码登录不需要发布到工作台):

node scripts/set-dingtalk.mjs \
--app-key dingxxxxxxxxxxxx \
--app-secret 你的AppSecret \
--corp-id dingyyyyyyyyyyyy \
--redirect-uri https://pm.example.com/kanweave/api/auth/dingtalk/callback

脚本写入的就是这个文件(权限 0600,字段名同时接受钉钉控制台的 appKey/appSecret 和 OAuth2 的 clientId/clientSecret):

{
"appKey": "dingxxxxxxxxxxxx",
"appSecret": "你的AppSecret", "corpId": "dingyyyyyyyyyyyy", "redirectUri": "https://pm.example.com/kanweave/api/auth/dingtalk/callback" }

重定向 URL 选哪个:云端部署后固定用 https://<域名>/kanweave/api/auth/dingtalk/callback,任何设备、任何插件实例都能回调,推荐。
本机直连 http://127.0.0.1:<端口>/kanweave/api/auth/dingtalk/callback 也能回调(钉钉允许 localhost),但 DSH 每次启动端口会变,要同步改配置,只适合临时调试。
改完文件后必须重启 DeepSeek Harness(或独立站进程)才生效;GET /kanweave/api/health 的 dingtalk 字段(configured / mock)可以直接确认,登录页是否有按钮取决于 api/auth/state 的 capabilities.dingtalkLogin。

配置项(常用)

| 变量 | 默认 | 说明 |
| KW_PORT / KW_HOST | 4280 / 127.0.0.1 | 独立站点监听地址 |
| KW_DATA_DIR | ./.data(插件为 ~/.dsh/kanweave) | SQLite + 附件目录 |
| KW_PUBLIC_URL | 空 | 公网地址;https:// 开头会自动给会话 Cookie 加 Secure |
| KW_COOKIE_SECURE | 跟随 KW_PUBLIC_URL | 纯 HTTP 演示需显式设 0 |
| KW_MAX_ATTACHMENT_BYTES | 1 GiB | 单附件上限(反代要同步放宽) |
| KW_ALLOW_REGISTRATION | 开 | 自助注册;外网可关掉只留邀请链接 |
| KW_CLOUD_URL | 空 | 插件反向代理到云端部署的地址 |
| KW_DINGTALK_CLIENT_ID / _CLIENT_SECRET / _CORP_ID / _REDIRECT_URI | 空 | 钉钉扫码登录 |

完整清单见 .env.example。

权限模型

| 动作 | 观察者 | 成员 | 管理员 | 拥有者 |
| 查看项目 / 卡片 | ✅ | ✅ | ✅ | ✅ |
| 新建/编辑卡片、评论、上传附件 | ❌ | ✅ | ✅ | ✅ |
| 删除他人的卡片/评论/附件 | ❌ | ❌ | ✅ | ✅ |
| 管理栏目、项目设置 | ❌ | ❌ | ✅ | ✅ |
| 邀请成员、改角色 | ❌ | ❌ | ✅(不能授予管理员) | ✅ |
| 归档/删除项目、转让 | ❌ | ❌ | ❌ | ✅ |

架构

src/core/ 协议类型、错误码、权限矩阵、媒体类型、Markdown 渲染(纯函数,浏览器可用) src/host/ HTTP 路由、SQLite 存储、鉴权、钉钉 OAuth2、媒体存储、SSE、云端代理 src/client/ DeepSeek Harness 面板(React,iframe 承载同一个 SPA) src/standalone/ 浏览器 SPA(React,无框架依赖,构建成 public/app.js) public/ SPA 外壳(index.html + CSS)

- 一份代码两副面孔:宿主插件提供 /kanweave/ 的 HTTP 与存储;浏览器 SPA 只依赖 src/core 的类型与纯函数。
- 接口契约集中在 src/core/protocol.ts,业务错误统一返回 HTTP 200 + {ok:false,error:{code,message}}。
- 数据是单实例单写入者:SQLite(WAL)+ media/ 文件目录,备份就是复制这两样。

开发

pnpm typecheck # 零错误
pnpm test # vitest:真实 HTTP 集成测试 + 纯函数单测
pnpm build # tsdown 打包 lib/ 与 public/app.js,并跑客户端产物护栏
node scripts/smoke.mjs # 起真实服务跑冒烟
node scripts/check-client-bundle.mjs
工程约定见 AGENTS.md;参与贡献见 CONTRIBUTING.md;安全问题见 SECURITY.md。

已知边界

- 单实例部署,没有多副本,也没有共享数据库;实时事件走全量重取(几百张卡片的规模可以接受)。
- 钉钉只用于登录,不同步通讯录;没有邮件通知、甘特图、工时。
- 附件存本地磁盘,未接对象存储。

许可

Apache-2.0 © 2026 KanWeave contributors
预览分享卡片长什么样 ↓Yeezone/kanweave
分享 · DeepSeek Harness Hub
Yeezone/kanweave

自建项目看板,拖拽卡片并实时协作

这是你的仓库?认领条目

回到顶部