@dsh-plugin/dsh-synapse 0.0.0-stage → 0.1.0-dev.41044228975

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.
Files changed (150) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE.md +18 -0
  3. package/README.md +136 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/bot.cjs +8314 -0
  6. package/lib/bot.cjs.map +7 -0
  7. package/lib/build.json +1 -0
  8. package/lib/client.js +46 -0
  9. package/lib/host/agent.d.ts +21 -0
  10. package/lib/host/agent.js +151 -0
  11. package/lib/host/agent.js.map +1 -0
  12. package/lib/host/bot.d.ts +17 -0
  13. package/lib/host/bot.js +158 -0
  14. package/lib/host/bot.js.map +1 -0
  15. package/lib/host/client.d.ts +2 -0
  16. package/lib/host/client.js +19 -0
  17. package/lib/host/client.js.map +1 -0
  18. package/lib/host/config.d.ts +24 -0
  19. package/lib/host/config.js +192 -0
  20. package/lib/host/config.js.map +1 -0
  21. package/lib/host/files.d.ts +29 -0
  22. package/lib/host/files.js +188 -0
  23. package/lib/host/files.js.map +1 -0
  24. package/lib/host/gateway.d.ts +33 -0
  25. package/lib/host/gateway.js +237 -0
  26. package/lib/host/gateway.js.map +1 -0
  27. package/lib/host/github.d.ts +47 -0
  28. package/lib/host/github.js +219 -0
  29. package/lib/host/github.js.map +1 -0
  30. package/lib/host/http.d.ts +4 -0
  31. package/lib/host/http.js +41 -0
  32. package/lib/host/http.js.map +1 -0
  33. package/lib/host/index.d.ts +32 -0
  34. package/lib/host/index.js +192 -0
  35. package/lib/host/index.js.map +1 -0
  36. package/lib/host/inference-worker.d.ts +1 -0
  37. package/lib/host/inference-worker.js +72 -0
  38. package/lib/host/inference-worker.js.map +1 -0
  39. package/lib/host/mcp.d.ts +138 -0
  40. package/lib/host/mcp.js +104 -0
  41. package/lib/host/mcp.js.map +1 -0
  42. package/lib/host/memory.d.ts +26 -0
  43. package/lib/host/memory.js +155 -0
  44. package/lib/host/memory.js.map +1 -0
  45. package/lib/host/panel.d.ts +1 -0
  46. package/lib/host/panel.html +174 -0
  47. package/lib/host/panel.js +388 -0
  48. package/lib/host/panel.js.map +1 -0
  49. package/lib/host/runtime.d.ts +21 -0
  50. package/lib/host/runtime.js +145 -0
  51. package/lib/host/runtime.js.map +1 -0
  52. package/lib/host/types.d.ts +112 -0
  53. package/lib/host/types.js +2 -0
  54. package/lib/host/types.js.map +1 -0
  55. package/package.json +94 -4
  56. package/scripts/build.mjs +90 -0
  57. package/scripts/check.mjs +13 -0
  58. package/scripts/dump-npm-latest.mjs +30 -0
  59. package/scripts/model-smoke.mjs +25 -0
  60. package/src/agent.ts +203 -0
  61. package/src/bot.ts +173 -0
  62. package/src/client.ts +20 -0
  63. package/src/config.ts +217 -0
  64. package/src/files.ts +206 -0
  65. package/src/gateway.ts +276 -0
  66. package/src/github.ts +263 -0
  67. package/src/http.ts +41 -0
  68. package/src/index.ts +227 -0
  69. package/src/inference-worker.ts +89 -0
  70. package/src/mcp.ts +112 -0
  71. package/src/memory.ts +178 -0
  72. package/src/panel.html +174 -0
  73. package/src/panel.ts +440 -0
  74. package/src/runtime.ts +164 -0
  75. package/src/types.ts +106 -0
  76. package/test/core.test.mjs +279 -0
  77. package/test/fixtures/mcp-server.mjs +14 -0
  78. package/test/integration.test.mjs +253 -0
  79. package/test/panel.test.mjs +73 -0
  80. package/tsconfig.json +18 -0
  81. package/vendor/gugle-chat-bot/LICENSE +661 -0
  82. package/vendor/gugle-chat-bot/package.json +57 -0
  83. package/vendor/gugle-chat-bot/src/allow-rule.yml +9345 -0
  84. package/vendor/gugle-chat-bot/src/api.json +4285 -0
  85. package/vendor/gugle-chat-bot/src/command/index.ts +141 -0
  86. package/vendor/gugle-chat-bot/src/config/features.ts +548 -0
  87. package/vendor/gugle-chat-bot/src/config/index.ts +184 -0
  88. package/vendor/gugle-chat-bot/src/config/manager.ts +357 -0
  89. package/vendor/gugle-chat-bot/src/constants/index.ts +13 -0
  90. package/vendor/gugle-chat-bot/src/custom.ts +548 -0
  91. package/vendor/gugle-chat-bot/src/event/index.ts +118 -0
  92. package/vendor/gugle-chat-bot/src/features/admin/index.ts +414 -0
  93. package/vendor/gugle-chat-bot/src/features/bili/image/impl/video.ts +39 -0
  94. package/vendor/gugle-chat-bot/src/features/bili/image/index.ts +37 -0
  95. package/vendor/gugle-chat-bot/src/features/bili/index.ts +65 -0
  96. package/vendor/gugle-chat-bot/src/features/bili/template/style/video.css +97 -0
  97. package/vendor/gugle-chat-bot/src/features/bili/template/video.html +57 -0
  98. package/vendor/gugle-chat-bot/src/features/discord-bridge/index.ts +1128 -0
  99. package/vendor/gugle-chat-bot/src/features/discord-bridge/markdown.ts +105 -0
  100. package/vendor/gugle-chat-bot/src/features/discord-bridge/slash.ts +355 -0
  101. package/vendor/gugle-chat-bot/src/features/discord-bridge/source.ts +96 -0
  102. package/vendor/gugle-chat-bot/src/features/discord-bridge/template/message.html +14 -0
  103. package/vendor/gugle-chat-bot/src/features/discord-bridge/template/style/message.css +144 -0
  104. package/vendor/gugle-chat-bot/src/features/github/api.ts +93 -0
  105. package/vendor/gugle-chat-bot/src/features/github/binding.ts +161 -0
  106. package/vendor/gugle-chat-bot/src/features/github/image/impl/issue.ts +132 -0
  107. package/vendor/gugle-chat-bot/src/features/github/image/impl/pr.ts +144 -0
  108. package/vendor/gugle-chat-bot/src/features/github/image/impl/release.ts +160 -0
  109. package/vendor/gugle-chat-bot/src/features/github/image/index.ts +310 -0
  110. package/vendor/gugle-chat-bot/src/features/github/index.ts +302 -0
  111. package/vendor/gugle-chat-bot/src/features/github/template/issue.html +118 -0
  112. package/vendor/gugle-chat-bot/src/features/github/template/pull_request.html +125 -0
  113. package/vendor/gugle-chat-bot/src/features/github/template/release.html +53 -0
  114. package/vendor/gugle-chat-bot/src/features/github/template/style/issue.css +468 -0
  115. package/vendor/gugle-chat-bot/src/features/github/template/style/pull_request.css +469 -0
  116. package/vendor/gugle-chat-bot/src/features/github/template/style/release.css +412 -0
  117. package/vendor/gugle-chat-bot/src/features/hermes/client.ts +184 -0
  118. package/vendor/gugle-chat-bot/src/features/hermes/config.ts +210 -0
  119. package/vendor/gugle-chat-bot/src/features/hermes/context.ts +67 -0
  120. package/vendor/gugle-chat-bot/src/features/hermes/history.ts +86 -0
  121. package/vendor/gugle-chat-bot/src/features/hermes/index.ts +1533 -0
  122. package/vendor/gugle-chat-bot/src/features/hermes/message.ts +319 -0
  123. package/vendor/gugle-chat-bot/src/features/hermes/reaction.ts +181 -0
  124. package/vendor/gugle-chat-bot/src/features/hermes/render.ts +118 -0
  125. package/vendor/gugle-chat-bot/src/features/hermes/reply-units.ts +331 -0
  126. package/vendor/gugle-chat-bot/src/features/hermes/skills.ts +406 -0
  127. package/vendor/gugle-chat-bot/src/features/hermes/template/approval.html +30 -0
  128. package/vendor/gugle-chat-bot/src/features/hermes/template/progress.html +21 -0
  129. package/vendor/gugle-chat-bot/src/features/hermes/template/style/approval.css +81 -0
  130. package/vendor/gugle-chat-bot/src/features/hermes/template/style/progress.css +120 -0
  131. package/vendor/gugle-chat-bot/src/features/hermes/trigger.ts +86 -0
  132. package/vendor/gugle-chat-bot/src/features/hermes/types.ts +327 -0
  133. package/vendor/gugle-chat-bot/src/features/management/index.ts +156 -0
  134. package/vendor/gugle-chat-bot/src/features/minecraft/index.ts +127 -0
  135. package/vendor/gugle-chat-bot/src/features/modrinth/index.ts +71 -0
  136. package/vendor/gugle-chat-bot/src/features/parentheses/index.ts +117 -0
  137. package/vendor/gugle-chat-bot/src/features/peak-valley-timer/index.ts +452 -0
  138. package/vendor/gugle-chat-bot/src/features/poke/index.ts +24 -0
  139. package/vendor/gugle-chat-bot/src/features/version-tracker/index.ts +78 -0
  140. package/vendor/gugle-chat-bot/src/features/welcome/index.ts +58 -0
  141. package/vendor/gugle-chat-bot/src/github-ip.json +5814 -0
  142. package/vendor/gugle-chat-bot/src/image/index.ts +278 -0
  143. package/vendor/gugle-chat-bot/src/index.ts +695 -0
  144. package/vendor/gugle-chat-bot/src/logger/index.ts +54 -0
  145. package/vendor/gugle-chat-bot/src/result.json +359 -0
  146. package/vendor/gugle-chat-bot/src/type/bili.d.ts +825 -0
  147. package/vendor/gugle-chat-bot/src/type/event.d.ts +146 -0
  148. package/vendor/gugle-chat-bot/src/type/github.d.ts +446 -0
  149. package/vendor/gugle-chat-bot/src/type/index.d.ts +254 -0
  150. package/vendor/gugle-chat-bot/tsconfig.json +46 -0
package/README.md CHANGED
@@ -1,3 +1,137 @@
1
- # Temporary Holding Version
1
+ # @dsh-plugin/dsh-synapse
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 基于 **dsh-loader 2.0 API** 的 TypeScript 插件:完整保留 gugle-chat-bot 的 QQ、Discord、群管理及通知模块,增加 DSH 管理面板、GitHub 自动审查、本地混合记忆与 Skill 自总结。
4
+
5
+ ## 安装与启动
6
+
7
+ 要求 Node.js **24.9+**、npm、dsh-loader 2.0、OneBot 11 HTTP/正向 WebSocket 服务。可接入 NapCat 或提供同等 OneBot API 的 Snowluma。图片卡片功能还需要本机 Chrome/Chromium;在面板填写可执行文件路径。
8
+
9
+ ```sh
10
+ git clone https://github.com/dsh-plugins/dsh-synapse.git
11
+ cd dsh-synapse
12
+ npm ci
13
+ npm run build
14
+ npm pack
15
+ ```
16
+
17
+ 在目标 DSH profile 安装 `@dsh-plugin/dsh-loader@next` 和本地生成的 `dsh-plugin-dsh-synapse-0.1.0.tgz`,然后按 DSH 的 bundle 安装流程加载。仓库提供 `cordis.patch.yml`。当前开发依赖固定到已发布的 `2.0.0-dev.41037890182`,peer range `^2.0.0-0` 同时接受 2.0 预发布与稳定版。
18
+
19
+ 在 DSH 插件配置中填写 OneBot 地址、访问令牌、模型 API,并启用机器人。管理面板入口位于 DSH 设置导航的 **Synapse · 通道与记忆**,也可在同一个已登录 DSH 域名打开 **`/synapse`**。自动 profile 定位失败时,在 loader 原生配置中填写 profile 绝对路径即可恢复。
20
+
21
+ 默认不开启机器人或 GitHub 发布操作。RAG 在首次实际使用时安装运行时并下载模型;启用机器人后会预热嵌入模型。无网络时,可预先填充相同目录结构的运行时和模型缓存。下载失败会明确报错,不会以随机向量代替本地模型。
22
+
23
+ ## QQ、Discord 与上游功能
24
+
25
+ 固定上游提交:[`018cd46565149877ee6822968a817932f7390ef8`](https://github.com/Gu-ZT/gugle-chat-bot/tree/018cd46565149877ee6822968a817932f7390ef8)。全部 TypeScript 源码位于 `vendor/gugle-chat-bot`,构建时只应用明确列出的适配补丁,详见 `NOTICE.md` 与 `scripts/build.mjs`。
26
+
27
+ | 上游模块 | Synapse 接入方式 |
28
+ | --- | --- |
29
+ | QQ 群聊、私聊、OneBot 事件 | 独立子进程运行完整 QQBot |
30
+ | Discord 双向桥、图片附件、回复映射、`/send`、斜杠命令 | 保留原模块,使用 discord-bridge JSON 配置 |
31
+ | Hermes 多模态、会话历史、表情回应、进度卡片、审批 | 本地 agent 实现 runs/SSE 协议;外部 Hermes 模式透传原有审批及工具能力 |
32
+ | GitHub 订阅、富文本引用、绑定/白名单 | 签名通过的 Webhook 经 IPC 转发原模块 |
33
+ | 群管理、黑名单、入群请求、欢迎语、戳一戳 | 保留原模块和配置 |
34
+ | B 站订阅、Minecraft 查询、Modrinth、版本跟踪 | 保留原模块(上游默认未调度的任务保持原行为) |
35
+ | 括号匹配、峰谷提醒、Markdown 图片渲染 | 保留原模块;峰谷配置也可从面板修改 |
36
+ | `/help`、`/reload`、`/reboot`、`/shutdown` | 保留权限检查;重启交给父进程;关闭仅作用于机器人进程 |
37
+
38
+ 面板的「载入上游功能 JSON 以预览 / 修改」读取当前配置,可编辑全部上游参数。该操作可能显示 Token,请只在可信设备使用。普通 loader 配置接口会遮蔽密码。每个功能可单独编辑 JSON;配置修订号冲突返回错误并保留草稿。
39
+
40
+ QQ 需在 `command.groups`、`hermes.groups` 等功能列表中添加群号。例如 Hermes:
41
+
42
+ ```json
43
+ {"version":1,"groups":[123456],"requireMention":true,"forwardImages":true}
44
+ ```
45
+
46
+ Discord 的 `discord-bridge` 示例(频道键为服务器 ID 和频道名称):
47
+
48
+ ```json
49
+ {
50
+ "version": 1,
51
+ "token": "YOUR_DISCORD_BOT_TOKEN",
52
+ "bridges": {
53
+ "123456789#general": {"group":"123456","need_reply":"false","need_cmd":"false"}
54
+ }
55
+ }
56
+ ```
57
+
58
+ Discord Bot 需要 Message Content Intent;斜杠命令需要 `applications.commands`。桥接群使用上游共享会话逻辑,QQ/Discord 使用同一聊天长期记忆库。OneBot 私聊/群聊和 Discord 的门控、管理员身份仍由上游执行。
59
+
60
+ 本地 AI 支持 OpenAI 兼容 `/chat/completions`。外部 Hermes 模式将请求代理到配置的 Hermes 地址,注入共享人设、记忆和匹配的 Skill,保留 SSE、停止与审批接口。外部 Hermes 使用自己的工具执行环境;面板配置的 MCP 自动调用用于 Synapse 本地 AI 模式。
61
+
62
+ ## 提示词、记忆与 Skill
63
+
64
+ ```text
65
+ <dsh_home>/SOUL.md 聊天默认人设
66
+ <dsh_home>/AGENTS.md 审查默认规则
67
+ <dsh_home>/profiles/<profile>/SOUL.md 聊天覆盖
68
+ <dsh_home>/profiles/<profile>/AGENTS.md 审查覆盖
69
+ <profile>/config/dsh-synapse/config.json loader 配置
70
+ <profile>/skills/<name>/SKILL.md 手动与自动 Skill
71
+ <profile>/data/dsh-synapse/
72
+ memory.sqlite 记忆及审查队列
73
+ runtime/ 动态安装的推理依赖
74
+ models/ Hugging Face 模型缓存
75
+ bot/configs/ 上游生效配置
76
+ bot/data/ 上游历史与运行状态
77
+ bot/logs/ 上游日志
78
+ ```
79
+
80
+ 提示词每次请求读取,profile 文件优先,支持无需重启修改。Home 的 Skill 作为继承项,profile 同名项覆盖它。前端支持 Markdown 导入、纯文本安全预览、编辑、删除;写入使用修订摘要防止并发覆盖。自动生成的 `auto-chat-*` 和 `auto-review-*` Skill 使用相同目录与管理入口,分别用于对应通道。Skill 调用表现为检索适用操作步骤并加入当前推理上下文,不执行文档中任意脚本。
81
+
82
+ 聊天与审查记忆按 `chat` / `review` 分区。完成回答后可总结重要事项并提炼可复用 Skill,普通闲聊允许不生成内容。自动总结由配置的语言模型完成;生成结果可在面板检查。聊天记忆在当前 profile 的 QQ/Discord 通道间共享,请将需要彼此隔离的用户群部署到不同 profile。
83
+
84
+ Hermes 导入支持普通 Markdown、frontmatter、标题分节、代码块和长段分块。导入前可以预览,再选择聊天或审查分类;批量嵌入成功后以事务提交,相同分类和内容去重。未知 Hermes 私有方言作为普通 Markdown 保留,不会猜测不存在的结构字段。
85
+
86
+ ## 本地 RAG 与推理隔离
87
+
88
+ - 主插件内置 `better-sqlite3` + `sqlite-vec`,FTS5 对中文文本做字符分词,向量 KNN 与全文排名使用 RRF 融合。
89
+ - 默认初步召回 50 条,再截取配置数量;启用重排时,对候选 `(query, document)` 做本地交叉编码评分。
90
+ - 嵌入:`Xenova/bge-small-zh-v1.5`(BAAI 对应模型的 ONNX 转换,q8/int8、512 维、CLS pooling、归一化)。
91
+ - 重排:`Xenova/bge-reranker-base`,`AutoModelForSequenceClassification` + 配对 tokenizer,按 sigmoid(logit) 排序。
92
+ - `@huggingface/transformers@3.8.1` 只动态安装到当前 profile 的 `runtime/`,Worker 从此处解析依赖,主插件依赖树不包含它。
93
+ - 模型加载先访问 `huggingface.co`,失败后自动以 `hf-mirror.com` 重试。推理在 Worker 中串行执行,下载/推理队列有上限和超时。
94
+
95
+ 模型来源和使用方式参见 [嵌入模型卡](https://huggingface.co/Xenova/bge-small-zh-v1.5)、[重排模型卡](https://huggingface.co/Xenova/bge-reranker-base)、[sqlite-vec Node.js 文档](https://alexgarcia.xyz/sqlite-vec/js.html)。需要代理时,在启动 DSH 前设置 `HTTPS_PROXY`,Node 24 可配合 `NODE_USE_ENV_PROXY=1`。
96
+
97
+ ## MCP
98
+
99
+ 面板支持 stdio、Streamable HTTP、SSE 服务,参数、环境变量和请求头均持久化。可以增删、修改配置并预览实际工具列表(含分页)。只有管理员在「允许自动调用的工具名称」中逐行列出的工具会进入本地聊天工具循环。空列表不自动调用任何工具。GitHub 审查不执行 MCP 工具。
100
+
101
+ stdio 服务以当前用户权限运行,其环境默认仅继承 PATH / SystemRoot 及显式配置值。MCP 与自动学习的 Skill 相互独立:Skill 不能扩大工具允许列表。
102
+
103
+ ## GitHub 自动审查
104
+
105
+ Webhook URL:`https://<DSH域名>/hooks/dsh-synapse/github`。配置 `application/json`、相同的 Webhook Secret,以及 PR、Issue、Release 事件。允许列表支持 `owner/repo` 或 `owner/*`。API Token 需要目标仓库读取权限;开启发布时还需相应 Issues / Pull requests 写权限。
106
+
107
+ 插件验证原始请求体 HMAC-SHA256,按 delivery ID 去重并持久化任务。PR 抓取分页文件差异、固定 head SHA,发布前再次核对 head;过期事件跳过。超过差异上限会明确标记截断。Issue 生成分诊建议。默认在管理面板预览结果;启用「自动发布审查评论」后创建 PR 的 COMMENT review 或 Issue comment,不自动 approve 或 merge。每条评论带 delivery 标记,重试前检查远程标记以避免重复发布。
108
+
109
+ 失败任务保留错误,可从面板重试;重启恢复运行中的任务。Webhook 通知同时转发上游 GitHub 订阅功能。旧上游未认证监听端口被禁用。
110
+
111
+ ## 开发与验证
112
+
113
+ ```sh
114
+ npm run typecheck
115
+ npm test
116
+ npm pack --dry-run
117
+ # 可选:实际下载模型,产生的 .runtime-test 被 Git 忽略
118
+ node scripts/model-smoke.mjs --rerank
119
+ ```
120
+
121
+ 自动测试使用真实 SQLite/vec、模拟 OneBot、实际 MCP stdio 服务和 DOM 管理面板,测试不向真实账号发送消息。跨平台 CI 覆盖 Windows、Linux、macOS。真实 QQ/Discord、GitHub 发布以及浏览器图片渲染仍需部署者提供凭据和浏览器后联调。
122
+
123
+ ## npm 自动发布
124
+
125
+ 工作流为 `.github/workflows/npm-publish.yml`,沿用其他 DSH 插件的发布约定:
126
+
127
+ - PR 和手动运行:执行 Linux、Windows、macOS 的类型检查、构建、测试与打包检查。
128
+ - 推送 `main`:三平台检查全部成功后,将 `X.Y.Z-dev.<GitHub run ID>` 发布到 npm 的 `next` 标签;重跑已发布的同一版本会跳过发布。
129
+ - 推送 `vX.Y.Z` 标签:必须与 `package.json` 的稳定版本号完全一致,检查成功后发布到 `latest`,并将 npm 元数据写入 `npm-latest.json`、提交回 `main`。
130
+
131
+ 开发版只在发布任务的临时检出中修改 `package.json` 和锁文件;仓库保持稳定的 `X.Y.Z` 基础版本。正式发布前先更新两个文件中的版本号,再推送对应 Git 标签。
132
+
133
+ 使用 npm Trusted Publishing 的 GitHub OIDC 身份和 provenance,无需 `NPM_TOKEN`。npm 包的 Trusted Publisher 应配置组织 `dsh-plugins`、仓库 `dsh-synapse`、工作流文件名 **`npm-publish.yml`**;本工作流未使用 GitHub Environment,并执行直接 `npm publish`,对应配置需允许该发布动作。Node.js 24 提供支持 OIDC 的 npm 11。配置要求参见 [npm Trusted Publishing 文档](https://docs.npmjs.com/trusted-publishers/)。
134
+
135
+ 开发版发布后,可在目标 DSH profile 中安装 `@dsh-plugin/dsh-synapse@next`。
136
+
137
+ AGPL-3.0-only。保留上游许可证、作者说明与完整对应源码,详见 `NOTICE.md`。
@@ -0,0 +1,3 @@
1
+ - insert:
2
+ - id: dsh-synapse
3
+ name: '@dsh-plugin/dsh-synapse'