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

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 +49 -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
@@ -0,0 +1,192 @@
1
+ import { defineConfig } from "@dsh-plugin/dsh-loader/config";
2
+ const text = (key, label, value = "", type = "text") => ({ type, key, label, default: value });
3
+ const flag = (key, label, value = false) => ({
4
+ type: "boolean",
5
+ key,
6
+ label,
7
+ default: value,
8
+ });
9
+ const num = (key, label, value, min, max) => ({ type: "number", key, label, default: value, min, max });
10
+ export const FEATURES = [
11
+ "management",
12
+ "parentheses",
13
+ "poke",
14
+ "minecraft",
15
+ "modrinth",
16
+ "bili",
17
+ "command",
18
+ "github",
19
+ "welcome",
20
+ "discord-bridge",
21
+ "hermes",
22
+ "peak-valley-timer",
23
+ ];
24
+ export const template = defineConfig({
25
+ id: "dsh-synapse",
26
+ packageName: "@dsh-plugin/dsh-synapse",
27
+ title: "Synapse · 通道与记忆",
28
+ description: "保存后重新连接通道。Skill、MCP、Hermes 导入位于 Synapse 管理面板。密码仅保存在当前 profile。",
29
+ fields: [
30
+ flag("enabled", "启用机器人"),
31
+ text("profileDir", "当前 profile 绝对路径(自动定位失败时填写)"),
32
+ text("homeDir", "DSH Home 绝对路径(默认 profile 上两级)"),
33
+ {
34
+ type: "group",
35
+ label: "OneBot · NapCat / Snowluma",
36
+ fields: [
37
+ text("httpUrl", "HTTP 地址", "http://127.0.0.1:3000"),
38
+ text("wsUrl", "WebSocket 地址", "ws://127.0.0.1:3001"),
39
+ text("httpToken", "HTTP Token", "", "password"),
40
+ text("wsToken", "WS Token", "", "password"),
41
+ text("chromePath", "Chrome / Chromium 路径"),
42
+ text("botJson", "上游 bot-config 扩展 JSON", "{}", "textarea"),
43
+ ],
44
+ },
45
+ {
46
+ type: "group",
47
+ label: "AI 对话 / 审查",
48
+ fields: [
49
+ text("llmUrl", "OpenAI 兼容 API 地址", "https://api.deepseek.com/v1"),
50
+ text("llmKey", "API Key", "", "password"),
51
+ text("model", "模型", "deepseek-chat"),
52
+ num("timeoutSec", "请求超时(秒)", 120, 5, 600),
53
+ num("maxToolRounds", "工具轮数上限", 6, 1, 20),
54
+ flag("externalHermes", "使用外部 Hermes(保留其工具及审批)"),
55
+ text("hermesUrl", "Hermes API 地址", "http://127.0.0.1:8642"),
56
+ text("hermesKey", "Hermes Key", "", "password"),
57
+ ],
58
+ },
59
+ {
60
+ type: "group",
61
+ label: "GitHub",
62
+ fields: [
63
+ flag("githubEnabled", "启用 Webhook 审查"),
64
+ text("githubToken", "GitHub Token", "", "password"),
65
+ text("webhookSecret", "Webhook Secret", "", "password"),
66
+ text("repositories", "允许的 owner/repo(每行一个,支持 owner/*)", "", "textarea"),
67
+ flag("publishReviews", "自动发布审查评论"),
68
+ num("maxDiffChars", "最大差异字符数", 80000, 1000, 500000),
69
+ ],
70
+ },
71
+ {
72
+ type: "group",
73
+ label: "RAG / Skill 自总结",
74
+ fields: [
75
+ flag("ragEnabled", "启用本地混合记忆", true),
76
+ num("recallK", "初步召回数量", 50, 1, 200),
77
+ num("memoryK", "上下文记忆条数", 8, 1, 50),
78
+ flag("reranker", "启用本地 bge-reranker-base"),
79
+ flag("learnMemory", "总结重要事项到长期记忆", true),
80
+ flag("learnSkills", "自动总结 Skill", true),
81
+ num("maxMemories", "最大记忆条数", 20000, 100, 1000000),
82
+ ],
83
+ },
84
+ {
85
+ type: "array",
86
+ key: "features",
87
+ label: "gugle-chat-bot 全量功能配置(JSON)",
88
+ default: FEATURES.map((id) => ({
89
+ id,
90
+ json: JSON.stringify(id === "github"
91
+ ? { version: 2, groups: {} }
92
+ : id === "welcome"
93
+ ? { version: 1, welcomes: [] }
94
+ : id === "discord-bridge"
95
+ ? { version: 1, token: "", bridges: {} }
96
+ : { version: 1, groups: [] }, null, 2),
97
+ })),
98
+ item: {
99
+ type: "object",
100
+ label: "功能",
101
+ fields: [
102
+ {
103
+ type: "select",
104
+ key: "id",
105
+ label: "模块",
106
+ options: FEATURES.map((value) => ({ label: value, value })),
107
+ },
108
+ text("json", "配置 JSON(可能含密钥)", "{}", "password"),
109
+ ],
110
+ },
111
+ },
112
+ {
113
+ type: "array",
114
+ key: "mcp",
115
+ label: "MCP 服务",
116
+ item: {
117
+ type: "object",
118
+ label: "服务",
119
+ fields: [
120
+ text("name", "名称"),
121
+ flag("enabled", "启用", true),
122
+ {
123
+ type: "select",
124
+ key: "transport",
125
+ label: "传输",
126
+ options: [
127
+ { label: "stdio", value: "stdio" },
128
+ { label: "Streamable HTTP", value: "http" },
129
+ { label: "SSE", value: "sse" },
130
+ ],
131
+ },
132
+ text("command", "命令"),
133
+ text("argsJson", "参数 JSON", "[]", "textarea"),
134
+ text("envJson", "环境变量 JSON", "{}", "password"),
135
+ text("url", "URL"),
136
+ text("headersJson", "HTTP 请求头 JSON", "{}", "password"),
137
+ text("allowedTools", "允许自动调用的工具名称(每行一个)", "", "textarea"),
138
+ ],
139
+ },
140
+ },
141
+ ],
142
+ });
143
+ export function parseObject(raw) {
144
+ const value = JSON.parse(raw);
145
+ if (!value || typeof value !== "object" || Array.isArray(value))
146
+ throw new Error("需要 JSON 对象");
147
+ return value;
148
+ }
149
+ export function validateConfig(c) {
150
+ parseObject(c.botJson);
151
+ const ids = new Set();
152
+ for (const f of c.features) {
153
+ if (!FEATURES.includes(f.id) || ids.has(f.id))
154
+ throw new Error("功能 ID 无效或重复");
155
+ ids.add(f.id);
156
+ parseObject(f.json);
157
+ }
158
+ const names = new Set();
159
+ for (const s of c.mcp) {
160
+ if (!/^[a-zA-Z0-9_-]{1,32}$/.test(s.name) || names.has(s.name))
161
+ throw new Error("MCP 名称无效或重复");
162
+ names.add(s.name);
163
+ const args = JSON.parse(s.argsJson);
164
+ if (!Array.isArray(args) || args.some((x) => typeof x !== "string"))
165
+ throw new Error("MCP 参数必须是字符串数组");
166
+ for (const raw of [s.envJson, s.headersJson])
167
+ if (Object.values(parseObject(raw)).some((x) => typeof x !== "string"))
168
+ throw new Error("MCP 环境变量和请求头必须是字符串");
169
+ if (s.transport !== "stdio" && !/^https?:\/\//.test(s.url))
170
+ throw new Error("MCP URL 无效");
171
+ }
172
+ if (c.githubEnabled &&
173
+ (!c.webhookSecret || !c.githubToken || !c.repositories.trim()))
174
+ throw new Error("启用 GitHub 需要 Secret、Token 和仓库允许列表");
175
+ for (const k of [
176
+ "recallK",
177
+ "memoryK",
178
+ "maxMemories",
179
+ "maxToolRounds",
180
+ "timeoutSec",
181
+ "maxDiffChars",
182
+ ])
183
+ if (!Number.isInteger(c[k]))
184
+ throw new Error(`${k} 必须是整数`);
185
+ for (const key of ["httpUrl", "llmUrl", "hermesUrl"])
186
+ if (!/^https?:\/\//.test(c[key]))
187
+ throw new Error(`${key} 必须是 HTTP(S) URL`);
188
+ if (!/^wss?:\/\//.test(c.wsUrl))
189
+ throw new Error("wsUrl 必须是 WS(S) URL");
190
+ return c;
191
+ }
192
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAC/E,MAAM,IAAI,GAAG,CACX,GAAG,EACH,KAAK,EACL,KAAK,GAAG,EAAE,EACV,OAA4B,MAAM,EACrB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAe,EAAE,CAAC,CAAC;IACxD,IAAI,EAAE,SAAS;IACf,GAAG;IACH,KAAK;IACL,OAAO,EAAE,KAAK;CACf,CAAC,CAAC;AACH,MAAM,GAAG,GAAG,CACV,GAAG,EACH,KAAK,EACL,KAAa,EACb,GAAW,EACX,GAAW,EACE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,WAAW;IACX,UAAU;IACV,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,gBAAgB;IAChB,QAAQ;IACR,mBAAmB;CACpB,CAAC;AACF,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;IACnC,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,yBAAyB;IACtC,KAAK,EAAE,iBAAiB;IACxB,WAAW,EACT,gEAAgE;IAClE,MAAM,EAAE;QACN,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,4BAA4B,CAAC;QAChD,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC;QAChD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE;gBACN,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,uBAAuB,CAAC;gBACnD,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,qBAAqB,CAAC;gBACpD,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,CAAC;gBAC/C,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,CAAC;gBAC3C,IAAI,CAAC,YAAY,EAAE,sBAAsB,CAAC;gBAC1C,IAAI,CAAC,SAAS,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,CAAC;aAC3D;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE;gBACN,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,6BAA6B,CAAC;gBACjE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,CAAC;gBACzC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC;gBACpC,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;gBACzC,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;gBAC/C,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,uBAAuB,CAAC;gBAC3D,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,CAAC;aAChD;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE;gBACN,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;gBACtC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,CAAC;gBACnD,IAAI,CAAC,eAAe,EAAE,gBAAgB,EAAE,EAAE,EAAE,UAAU,CAAC;gBACvD,IAAI,CACF,cAAc,EACd,iCAAiC,EACjC,EAAE,EACF,UAAU,CACX;gBACD,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;gBAClC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;aACpD;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE;gBACN,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC;gBACpC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;gBACpC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC;gBAC1C,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;gBACxC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC;gBACvC,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC;aAClD;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7B,EAAE;gBACF,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,KAAK,QAAQ;oBACb,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;oBAC5B,CAAC,CAAC,EAAE,KAAK,SAAS;wBAChB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;wBAC9B,CAAC,CAAC,EAAE,KAAK,gBAAgB;4BACvB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;4BACxC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAClC,IAAI,EACJ,CAAC,CACF;aACF,CAAC,CAAC;YACH,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,QAAQ;wBACd,GAAG,EAAE,IAAI;wBACT,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;qBAC5D;oBACD,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,CAAC;iBACjD;aACF;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE;oBACN,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;oBAClB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;oBAC3B;wBACE,IAAI,EAAE,QAAQ;wBACd,GAAG,EAAE,WAAW;wBAChB,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE;4BACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;4BAClC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE;4BAC3C,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;yBAC/B;qBACF;oBACD,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;oBACrB,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC;oBAC7C,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC;oBAC9C,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;oBAClB,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,CAAC;oBACtD,IAAI,CACF,cAAc,EACd,mBAAmB,EACnB,EAAE,EACF,UAAU,CACX;iBACF;aACF;SACF;KACF;CACF,CAAC,CAAC;AACH,MAAM,UAAU,WAAW,CAAC,GAAG;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,CAAC;IAC9B,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACd,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC;YAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,IACE,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAE9D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI;QACd,SAAS;QACT,SAAS;QACT,aAAa;QACb,eAAe;QACf,YAAY;QACZ,cAAc;KACf;QACC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,kBAAkB,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { PluginPaths, Skill } from "./types.js";
2
+ export declare const ID = "dsh-synapse";
3
+ export declare function pathsFor(ctx: any, c: any): {
4
+ profile: any;
5
+ home: any;
6
+ data: string;
7
+ skills: string;
8
+ };
9
+ export declare function safePath(root: any, ...parts: any[]): Promise<string>;
10
+ export declare function atomicWrite(file: any, content: any): Promise<void>;
11
+ export declare function promptFor(paths: any, channel: any): Promise<string>;
12
+ export declare function skillName(name: any): any;
13
+ export declare const revisionOf: (text: any) => string;
14
+ export declare class SkillStore {
15
+ paths: PluginPaths;
16
+ queue: Promise<unknown>;
17
+ constructor(paths: PluginPaths);
18
+ list(): Promise<Skill[]>;
19
+ mutate(fn: any): Promise<unknown>;
20
+ save(name: any, content: any, revision?: any): Promise<unknown>;
21
+ remove(name: any, revision: any): Promise<unknown>;
22
+ retrieve(query: any, channel: any): Promise<{
23
+ score: any;
24
+ name: string;
25
+ content: string;
26
+ revision: string;
27
+ inherited: boolean;
28
+ }[]>;
29
+ }
@@ -0,0 +1,188 @@
1
+ import { mkdir, readFile, writeFile, rename, lstat, readdir, unlink, } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { randomUUID, createHash } from "node:crypto";
5
+ export const ID = "dsh-synapse";
6
+ export function pathsFor(ctx, c) {
7
+ let profile = c.profileDir;
8
+ const url = ctx.baseUrl ??
9
+ ctx.get?.("loader")?.ctx?.baseUrl ??
10
+ ctx.get?.("loader")?.config?.baseUrl;
11
+ if (!profile && typeof url === "string" && url.startsWith("file:"))
12
+ profile = fileURLToPath(new URL(".", url));
13
+ if (!profile || !path.isAbsolute(profile))
14
+ throw new Error("无法定位当前 profile;请填写 profileDir 绝对路径");
15
+ const home = c.homeDir || path.resolve(profile, "../..");
16
+ if (!path.isAbsolute(home))
17
+ throw new Error("homeDir 必须是绝对路径");
18
+ return {
19
+ profile,
20
+ home,
21
+ data: path.join(profile, "data", ID),
22
+ skills: path.join(profile, "skills"),
23
+ };
24
+ }
25
+ export async function safePath(root, ...parts) {
26
+ const target = path.resolve(root, ...parts), relative = path.relative(path.resolve(root), target);
27
+ if (relative.startsWith("..") || path.isAbsolute(relative))
28
+ throw new Error("路径越界");
29
+ // System ancestors may be symlinks (macOS /var -> /private/var).
30
+ // The configured root itself and every path inside it must stay link-free.
31
+ let current = path.resolve(root);
32
+ for (const part of ["", ...relative.split(path.sep).filter(Boolean)]) {
33
+ current = path.join(current, part);
34
+ try {
35
+ if ((await lstat(current)).isSymbolicLink())
36
+ throw new Error("不允许符号链接路径");
37
+ }
38
+ catch (e) {
39
+ if (e.code !== "ENOENT")
40
+ throw e;
41
+ }
42
+ }
43
+ return target;
44
+ }
45
+ export async function atomicWrite(file, content) {
46
+ await mkdir(path.dirname(file), { recursive: true });
47
+ const tmp = `${file}.${randomUUID()}.tmp`;
48
+ try {
49
+ await writeFile(tmp, content, {
50
+ encoding: "utf8",
51
+ flag: "wx",
52
+ mode: 0o600,
53
+ });
54
+ await rename(tmp, file);
55
+ }
56
+ finally {
57
+ await unlink(tmp).catch((e) => {
58
+ if (e.code !== "ENOENT")
59
+ throw e;
60
+ });
61
+ }
62
+ }
63
+ export async function promptFor(paths, channel) {
64
+ const name = channel === "review" ? "AGENTS.md" : "SOUL.md";
65
+ for (const root of [paths.profile, paths.home]) {
66
+ try {
67
+ return await readFile(await safePath(root, name), "utf8");
68
+ }
69
+ catch (e) {
70
+ if (e.code !== "ENOENT")
71
+ throw e;
72
+ }
73
+ }
74
+ return channel === "review"
75
+ ? "Review changes for concrete defects. Explain evidence and actionable fixes."
76
+ : "你是一位友善、准确的聊天助手。";
77
+ }
78
+ export function skillName(name) {
79
+ if (!/^[a-z0-9][a-z0-9_-]{0,63}$/.test(name) ||
80
+ /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(name))
81
+ throw new Error("Skill 名称无效");
82
+ return name;
83
+ }
84
+ export const revisionOf = (text) => createHash("sha256").update(text).digest("hex");
85
+ export class SkillStore {
86
+ paths;
87
+ queue;
88
+ constructor(paths) {
89
+ this.paths = paths;
90
+ this.queue = Promise.resolve();
91
+ }
92
+ async list() {
93
+ const found = new Map();
94
+ for (const root of [
95
+ path.join(this.paths.home, "skills"),
96
+ this.paths.skills,
97
+ ]) {
98
+ let names;
99
+ try {
100
+ names = await readdir(await safePath(root));
101
+ }
102
+ catch (e) {
103
+ if (e.code === "ENOENT")
104
+ continue;
105
+ throw e;
106
+ }
107
+ for (const entry of names) {
108
+ const name = entry.endsWith(".md") ? entry.slice(0, -3) : entry;
109
+ try {
110
+ skillName(name);
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ const file = await safePath(root, entry, ...(entry.endsWith(".md") ? [] : ["SKILL.md"]));
116
+ try {
117
+ const content = await readFile(file, "utf8");
118
+ found.set(name, {
119
+ name,
120
+ content,
121
+ revision: revisionOf(content),
122
+ inherited: root !== this.paths.skills,
123
+ });
124
+ }
125
+ catch (e) {
126
+ if (!["ENOENT", "EISDIR", "ENOTDIR"].includes(e.code))
127
+ throw e;
128
+ }
129
+ }
130
+ }
131
+ return [...found.values()];
132
+ }
133
+ mutate(fn) {
134
+ const task = this.queue.then(fn);
135
+ this.queue = task.catch(() => { });
136
+ return task;
137
+ }
138
+ save(name, content, revision = null) {
139
+ return this.mutate(async () => {
140
+ skillName(name);
141
+ if (typeof content !== "string" ||
142
+ !content.trim() ||
143
+ content.length > 200000)
144
+ throw new Error("Skill 文档为空或过大");
145
+ const current = (await this.list()).find((x) => x.name === name);
146
+ if ((current?.revision ?? null) !== revision)
147
+ throw Object.assign(new Error("Skill 已变更,请重新载入"), {
148
+ status: 409,
149
+ });
150
+ const flat = await safePath(this.paths.skills, `${name}.md`);
151
+ const useFlat = await lstat(flat).then(() => true, (e) => {
152
+ if (e.code === "ENOENT")
153
+ return false;
154
+ throw e;
155
+ });
156
+ await atomicWrite(useFlat ? flat : await safePath(this.paths.skills, name, "SKILL.md"), content);
157
+ return { name, revision: revisionOf(content) };
158
+ });
159
+ }
160
+ remove(name, revision) {
161
+ return this.mutate(async () => {
162
+ skillName(name);
163
+ const current = (await this.list()).find((x) => x.name === name);
164
+ if (!current || current.inherited)
165
+ throw new Error("只能删除当前 profile 的 Skill");
166
+ if (current.revision !== revision)
167
+ throw Object.assign(new Error("Skill 已变更"), { status: 409 });
168
+ for (const parts of [[name, "SKILL.md"], [`${name}.md`]])
169
+ await unlink(await safePath(this.paths.skills, ...parts)).catch((e) => {
170
+ if (e.code !== "ENOENT")
171
+ throw e;
172
+ });
173
+ });
174
+ }
175
+ async retrieve(query, channel) {
176
+ const terms = query.toLowerCase().match(/[\p{L}\p{N}]{2,}/gu) || [];
177
+ return (await this.list())
178
+ .filter((x) => !x.name.startsWith("auto-") || x.name.startsWith(`auto-${channel}-`))
179
+ .map((x) => ({
180
+ ...x,
181
+ score: terms.reduce((n, t) => n + (x.content.toLowerCase().includes(t) ? 1 : 0), 0),
182
+ }))
183
+ .filter((x) => x.score > 0)
184
+ .sort((a, b) => b.score - a.score)
185
+ .slice(0, 3);
186
+ }
187
+ }
188
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ConfigSource, ErrorSink } from "./types.js";
2
+ interface Run {
3
+ created: number;
4
+ events: any[];
5
+ listeners: Set<(event: any) => void>;
6
+ done: boolean;
7
+ controller: AbortController;
8
+ task?: Promise<void>;
9
+ }
10
+ export declare class Gateway {
11
+ agent: import("./agent.js").Agent;
12
+ config: ConfigSource;
13
+ onError: ErrorSink;
14
+ token: string;
15
+ runs: Map<string, Run>;
16
+ external: Map<string, {
17
+ input: any;
18
+ created: number;
19
+ }>;
20
+ controllers: Set<AbortController>;
21
+ closed: boolean;
22
+ server: import("node:http").Server;
23
+ url: string;
24
+ gc: NodeJS.Timeout;
25
+ background: Set<Promise<unknown>>;
26
+ shutdown: AbortController;
27
+ constructor(agent: import("./agent.js").Agent, config: ConfigSource, onError: ErrorSink);
28
+ start(): Promise<void>;
29
+ handle(req: any, res: any): Promise<void>;
30
+ proxy(req: any, res: any, pathname: any, c: any): Promise<void>;
31
+ close(): Promise<void>;
32
+ }
33
+ export {};