在本地群聊里同时和多个 AI 人格对话,还能 @ 点名插话
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add qm654246695-source/dsh-glm-fanzhuo该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · skill
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 10 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 99 处,展示前 53 条)
- 读取本地文件agent/glm-chat.mjs:65
try { return readFileSync(BACKEND_FILE, 'utf8').trim().toLowerCase(); } catch { return ''; } - 读取密钥环境变量agent/glm-chat.mjs:100
if (process.env.GLM_API_KEY) return clean(process.env.GLM_API_KEY); - 读取本地文件agent/glm-chat.mjs:104
if (p && existsSync(p)) return clean(readFileSync(p, 'utf8').trim().split(/ ? /)[0]); - 读取本地文件agent/glm-chat.mjs:104
if (p && existsSync(p)) return clean(readFileSync(p, 'utf8').trim().split(/ ? /)[0]); - 读取本地文件agent/glm-chat.mjs:112
if (existsSync(p)) return readFileSync(p, 'utf8').trim(); - 读取本地文件agent/glm-chat.mjs:112
if (existsSync(p)) return readFileSync(p, 'utf8').trim(); - 写入本地文件agent/glm-chat.mjs:113
mkdirSync(HOME, { recursive: true }); - 写入本地文件agent/glm-chat.mjs:114
writeFileSync(p, DEFAULT_PERSONA, 'utf8'); - 读取本地文件agent/glm-chat.mjs:226
const items = readdirSync(abs, { withFileTypes: true }).map((d) => (d.isDirectory() ? d.name + '/' : d.name)); - 写入本地文件agent/glm-chat.mjs:245
mkdirSync(dirname(abs), { recursive: true }); - 写入本地文件agent/glm-chat.mjs:246
writeFileSync(abs, args.content ?? '', 'utf8'); - 写入本地文件agent/glm-chat.mjs:251
mkdirSync(dirname(abs), { recursive: true }); - 写入本地文件agent/glm-chat.mjs:252
appendFileSync(abs, args.content ?? '', 'utf8'); - 删除本地文件递归agent/glm-chat.mjs:268
rmSync(src, { recursive: true, force: true }); - 发起网络请求agent/glm-chat.mjs:451
const r = await fetch(opts.base || BASE, { - 发起网络请求agent/glm-chat.mjs:478
const r = await fetch(opts.base || BASE, { - 删除本地文件agent/glm-chat.mjs:931
if (cur.pid === process.pid) unlinkSync(SERVER_JSON); - 读取密钥环境变量agent/glm-chat.mjs:974
try { const k = readKey() || ''; console.log(` key: len=${k.length} prefix=${k.slice(0, 5)} env=${process.env.GLM_API_KEY ? 'yes' : 'no'}`); } - 读取密钥环境变量agent/glm.mjs:29
if (process.env.GLM_API_KEY) return process.env.GLM_API_KEY.trim(); - 读取本地文件agent/glm.mjs:31
if (p && existsSync(p)) return readFileSync(p, 'utf8').trim().split(/ ? /)[0].trim(); - 读取本地文件agent/glm.mjs:31
if (p && existsSync(p)) return readFileSync(p, 'utf8').trim().split(/ ? /)[0].trim(); - 发起网络请求agent/glm.mjs:48
const r = await fetch(BASE, { - 读取本地文件agent/glm.mjs:89
const buf = readFileSync(abs); - 发起网络请求group-chat/say.mjs:15
const r = await fetch(`http://127.0.0.1:${port}/as`, { - 读取本地文件group-chat/server.mjs:19
const CONFIG = JSON.parse(readFileSync(join(HERE, 'config.json'), 'utf8')); - 读取本地文件group-chat/server.mjs:28
if (!existsSync(ROOM)) return []; - 读取本地文件group-chat/server.mjs:29
return readFileSync(ROOM, 'utf8').split(/ ? /).filter(Boolean).map((l) => { - 写入本地文件group-chat/server.mjs:36
appendFileSync(ROOM, JSON.stringify(m) + '\n', 'utf8'); - 读取本地文件group-chat/server.mjs:50
const raw = readFileSync(API_TXT, 'utf8').split(/ ? /)[0] || ''; - 请求外部主机api.deepseek.comgroup-chat/server.mjs:56
const r = await fetch('https://api.deepseek.com/v1/chat/completions', { - 发起网络请求group-chat/server.mjs:56
const r = await fetch('https://api.deepseek.com/v1/chat/completions', { - 写入本地文件group-chat/server.mjs:79
writeFileSync(tmp, JSON.stringify(CONFIG, null, 2) + '\n', 'utf8'); - 写入本地文件group-chat/server.mjs:80
renameSync(tmp, p); - 读取本地文件group-chat/server.mjs:89
if (!existsSync(file)) return; - 读取本地文件group-chat/server.mjs:90
const size = statSync(file).size; - 写入本地文件group-chat/server.mjs:95
mkdirSync(dir, { recursive: true }); - 写入本地文件group-chat/server.mjs:99
writeFileSync(join(dir, sid + '.jsonl'), '', 'utf8'); - 发起网络请求group-chat/server.mjs:117
const r = await fetch(endpoint, { - 发起网络请求group-chat/server.mjs:147
const r = await fetch(member.base, { - 写入本地文件group-chat/server.mjs:310
writeFileSync(join(HERE, '.server.pid'), String(process.pid), 'utf8'); - 发起网络请求plugins/glm-panel/client.js:138
const res = await fetch(API + path, body - 发起网络请求plugins/glm-panel/client.js:280
const r = await fetch('/glm-panel/backend', { cache: 'no-store' }); - 发起网络请求plugins/glm-panel/client.js:342
const r = await fetch('/glm-panel/backend', { - 发起网络请求plugins/glm-panel/client.js:424
const res = await fetch(API + '/send', { - 写入本地文件plugins/glm-panel/index.js:57
mkdirSync(CHAT_DIR, { recursive: true }); - 写入本地文件plugins/glm-panel/index.js:58
appendFileSync(LOG_FILE, text + '\n', 'utf8'); - 读取本地文件plugins/glm-panel/index.js:68
const j = JSON.parse(readFileSync(SERVER_JSON, 'utf8')); - 读取本地文件plugins/glm-panel/index.js:79
const raw = readFileSync(BACKEND_FILE, 'utf8').trim().toLowerCase(); - 读取本地文件plugins/glm-panel/index.js:112
if (existsSync(candidate)) return candidate; - 读取本地文件plugins/glm-panel/index.js:182
if (!existsSync(AGENT)) throw new Error('找不到她的 agent 脚本:' + AGENT); - 执行外部命令来自配置/变量plugins/glm-panel/index.js:199
const c = spawn(node, args, { - 写入本地文件plugins/glm-panel/index.js:267
mkdirSync(CHAT_DIR, { recursive: true }); - 写入本地文件plugins/glm-panel/index.js:268
writeFileSync(BACKEND_FILE, mode, 'utf8');
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:api.deepseek.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
GLM在dsh的部署和包含大肥鱼和GLM的饭桌群聊
README
由 DeepSeek 最新模型翻译生成GLM 工 + 饭桌
一套小工具,让 GLM 住进你自己的电脑。全部零依赖,Node / Python 单文件,住在 Windows 上一块专属盘里。
两个东西:
- GLM 工:命令行单次调用 + 带围栏屋子的可续对话智能体(原生 function calling 七个工具,含 read_image 看图)+ 一个本地 9B 推理服务(GLM-4.6V-Flash,4-bit,16 GB 显卡可跑)。
- 饭桌:一个本地群聊,你可以同时和几个 AI 说话(本仓库自带「肥鱼」「GLM」两个人格位,可自己加)。成员之间看得到彼此的发言,可以 @ 点名、可以单独喊某一位插话。她还能往 home/outbox/ 丢 .md,群聊每 2 秒收一次当「主动开口」。
- 附带两个 DSH 左侧栏插件(plugins/):glm-panel(单聊面板)与 group-chat-panel(饭桌的同源转发)。
仓库不含模型权重。19 GB 的权重请自己按下面「本地 9B」一节下载。
展开完整文档(README 剩余 1 节)
GLM 工 + 饭桌
一套小工具,让 GLM 住进你自己的电脑。全部零依赖,Node / Python 单文件,住在 Windows 上一块专属盘里。
两个东西:
- GLM 工:命令行单次调用 + 带围栏屋子的可续对话智能体(原生 function calling 七个工具,含 read_image 看图)+ 一个本地 9B 推理服务(GLM-4.6V-Flash,4-bit,16 GB 显卡可跑)。
- 饭桌:一个本地群聊,你可以同时和几个 AI 说话(本仓库自带「肥鱼」「GLM」两个人格位,可自己加)。成员之间看得到彼此的发言,可以 @ 点名、可以单独喊某一位插话。她还能往 home/outbox/ 丢 .md,群聊每 2 秒收一次当「主动开口」。
- 附带两个 DSH 左侧栏插件(plugins/):glm-panel(单聊面板)与 group-chat-panel(饭桌的同源转发)。
仓库不含模型权重。19 GB 的权重请自己按下面「本地 9B」一节下载。
目录
agent/ glm.mjs(单次调用)、glm-chat.mjs(对话 agent + --serve 面板后端)、 local_glm_server.py(本地 9B 的 OpenAI 兼容服务)、启动器 home/ 她的屋子骨架:PERSONA.md(人格)、README.md;notes/ inbox/ .chat/ 运行时自建 group-chat/ 饭桌:server.mjs + index.html + config.json + say.mjs + 看门狗脚本 plugins/ DSH 插件:glm-panel(左侧栏聊天面板)、group-chat-panel(/group-chat/* 转发) docs/ 架构.md:端口、数据落点、两套会话存储、谁在说话、眼睛与信箱、看门狗、纯本地、三个坑
快速开始
需要:Windows 10/11、Node ≥ 22、Python 3.12+(本地 9B 用)。宿主要是 DSH(桌面版)才需要 plugins/。
1) 把本仓库放到你的数据盘,例如 H:\GLM
2) 放 key:agent\.key 里写智谱 API key(或设环境变量 GLM_API_KEY)
node agent\glm.mjs "你好" # 单次调用(默认 glm-5.3-flash)
node agent\glm-chat.mjs "盘一下 notes" # 带屋子的对话(续上次会话)
node agent\glm-chat.mjs --new --model glm-5.2 --no-think "快问快答"
node agent\glm.mjs --image a.png "描述这张图" # 看图(glm-4v / glm-4.6v)
饭桌:
cd group-chat
node server.mjs # → http://127.0.0.1:41300
或者双击 start.bat(隐藏窗口后台)
成员在 group-chat/config.json 里配:kind 支持 deepseek(云端,读 Api.txt 第一行 key)、 openai(任何 OpenAI 兼容端点,如本地 11434)、glmserve(走 glm-chat.mjs --serve,带工具)。
真肥鱼(人)想亲自插话:node group-chat/say.mjs "要说的话"。
本地 9B(可选)
agent/local_glm_server.py 是给 GLM-4.6V-Flash 9B 用的 OpenAI 兼容服务。
1. 从 ModelScope 拉官方权重(大文件走国内源,HuggingFace 在本机不通): ZhipuAI/GLM-4.6V-Flash 的 4 个 safetensors + config/tokenizer,放到 models\glm46v-flash-official\。
2. 建 venv,装 transformers>=5.9、accelerate、bitsandbytes、pillow(torch 按你的卡装 CUDA 版)。
3. 启动:
agent\start-local-glm.bat # 127.0.0.1:11434,bnb 4-bit
实测(RTX 5080 16 GB):显存 6.7 GiB、加载约 30 秒、17–19 tok/s,支持看图与工具调用。
配置与端口
| 项 | 默认 | 说明 |
| 饭桌 | 127.0.0.1:41300 | GROUP_PORT 可改;/say /nudge /state /events(SSE) |
| 面板后端 | 127.0.0.1:41234 | glm-chat.mjs --serve,端口写 home/.chat/server.json |
| 本地 9B | 127.0.0.1:11434 | GLM_LOCAL_BASE 可改 |
| 后端开关 | home/.chat/backend | 写 local(纯本地,失败不兜云)/ cloud / auto(分流互兜),插件 30 秒内自动切换 |
环境变量:GLM_API_KEY、GLM_BASE、GLM_LOCAL_BASE、GLM_HOME、GROUP_PORT、GLM_VERBOSE、GLM_SHOW_USAGE。
踩过的坑(写下来省你两天)
- 端口活着 ≠ 服务活着:本地 9B 会「假活」——/health 照回 200,但所有生成请求永远不响应(生成被中断过一次之后)。看门狗必须发一次极小生成(比如 1 token)才判得出来,只探端口会一直报 ok。真挂了就杀掉重拉,加载约 30 秒。
- 纯本地下别把「本地暂时不可达」当降级:9B 重启那几十秒里如果面板把 local 服务换成 cloud,既违背「纯本地」又把在途对话掐断。规则应是保留现有 local 服务,等它回来。
- 图片别落进会话 jsonl:看图给模型的是 data URL,但落盘只存路径,否则会话文件涨到 MB 级、每轮重喂整张图。
- 思考型模型会「只思考不出正文」:5.3 系列给多少 max_tokens,就往 reasoning 里烧多少。glm.mjs 内置三轮重试(原样 → 加长 → 8192+降 effort)。reasoning_effort 只认 low|high|max。
- thinking:{type:"disabled"} 对 5.3 系列无效(HTTP 400 1210),对 4.6/5.2/5-turbo 有效。
- GLM 的工具调用是文本 XML(<tool_call>name<arg_key>…),local_glm_server.py 把它解析回 OpenAI tool_calls。
- --serve 有两套会话存储:命令行用 .chat/sessions/,面板用 .chat/panel/sessions/(+ current、index.json)。
- PS 5.1 + curl 发中文 JSON:必须写文件再 --data-binary "@file";Out-File -Encoding utf8 会带 BOM,服务端要 strip。
- DSH 的配置档 package.json 必须 UTF-8 无 BOM,否则宿主 JSON.parse 直接崩(启动即挂)。
- 脚本里带了绝对路径 H:\GLM,换盘记得全局替换(agent/、group-chat/)。
许可
MIT,见 LICENSE。人格与文案随仓库一起开源,自行取用。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
qm654246695-source/dsh-glm-fanzhuo
在本地群聊里同时和多个 AI 人格对话,还能 @ 点名插话
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份系统提示词,喂给多个 coding…
★ 931已汉化DSH
73.8
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7