@dsh-plugin/dsh-synapse 0.1.0-dev.41044228975 → 0.1.0-dev.41051739681

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 (52) hide show
  1. package/README.md +12 -24
  2. package/lib/host/agent.d.ts +8 -4
  3. package/lib/host/agent.js +16 -99
  4. package/lib/host/agent.js.map +1 -1
  5. package/lib/host/bot.js +9 -7
  6. package/lib/host/bot.js.map +1 -1
  7. package/lib/host/config-migration.d.ts +3 -0
  8. package/lib/host/config-migration.js +103 -0
  9. package/lib/host/config-migration.js.map +1 -0
  10. package/lib/host/config.d.ts +4 -18
  11. package/lib/host/config.js +77 -130
  12. package/lib/host/config.js.map +1 -1
  13. package/lib/host/feature-config.d.ts +20 -0
  14. package/lib/host/feature-config.js +264 -0
  15. package/lib/host/feature-config.js.map +1 -0
  16. package/lib/host/gateway.d.ts +4 -6
  17. package/lib/host/gateway.js +42 -104
  18. package/lib/host/gateway.js.map +1 -1
  19. package/lib/host/github.d.ts +2 -2
  20. package/lib/host/harness.d.ts +23 -0
  21. package/lib/host/harness.js +209 -0
  22. package/lib/host/harness.js.map +1 -0
  23. package/lib/host/index.js +22 -12
  24. package/lib/host/index.js.map +1 -1
  25. package/lib/host/mcp.d.ts +1 -1
  26. package/lib/host/mcp.js +15 -11
  27. package/lib/host/mcp.js.map +1 -1
  28. package/lib/host/panel.html +2 -1
  29. package/lib/host/panel.js +40 -24
  30. package/lib/host/panel.js.map +1 -1
  31. package/lib/host/types.d.ts +104 -16
  32. package/package.json +1 -1
  33. package/scripts/dump-npm-latest.mjs +29 -10
  34. package/scripts/host-smoke.mjs +139 -0
  35. package/src/agent.ts +34 -114
  36. package/src/bot.ts +9 -7
  37. package/src/config-migration.ts +148 -0
  38. package/src/config.ts +116 -152
  39. package/src/feature-config.ts +351 -0
  40. package/src/gateway.ts +48 -115
  41. package/src/harness.ts +253 -0
  42. package/src/index.ts +25 -18
  43. package/src/mcp.ts +23 -11
  44. package/src/panel.html +2 -1
  45. package/src/panel.ts +53 -24
  46. package/src/types.ts +75 -13
  47. package/test/config-migration.test.mjs +137 -0
  48. package/test/core.test.mjs +82 -16
  49. package/test/fixtures/host.mjs +133 -0
  50. package/test/harness.test.mjs +90 -0
  51. package/test/integration.test.mjs +10 -12
  52. package/test/panel.test.mjs +71 -3
@@ -1,31 +1,14 @@
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
- ];
1
+ import { defineConfig, validateValues } from "@dsh-plugin/dsh-loader/config";
2
+ import { text, flag, num, object, array, strings, select, moduleFields, } from "./feature-config.js";
3
+ const pairs = (key, label) => array(key, label, object("item", "条目", [
4
+ text("name", "名称"),
5
+ text("value", "值", "", "password"),
6
+ ]));
24
7
  export const template = defineConfig({
25
8
  id: "dsh-synapse",
26
9
  packageName: "@dsh-plugin/dsh-synapse",
27
10
  title: "Synapse · 通道与记忆",
28
- description: "保存后重新连接通道。Skill、MCP、Hermes 导入位于 Synapse 管理面板。密码仅保存在当前 profile。",
11
+ description: "聊天、审查和自总结使用当前 DSH 的默认模型与 Agent 运行时。各功能在下方直接配置;Skill、MCP 工具预览与记忆导入位于 Synapse 管理面板。",
29
12
  fields: [
30
13
  flag("enabled", "启用机器人"),
31
14
  text("profileDir", "当前 profile 绝对路径(自动定位失败时填写)"),
@@ -38,27 +21,28 @@ export const template = defineConfig({
38
21
  text("wsUrl", "WebSocket 地址", "ws://127.0.0.1:3001"),
39
22
  text("httpToken", "HTTP Token", "", "password"),
40
23
  text("wsToken", "WS Token", "", "password"),
24
+ text("tokenParams", "WebSocket Token 查询参数前缀", "?access_token="),
41
25
  text("chromePath", "Chrome / Chromium 路径"),
42
- text("botJson", "上游 bot-config 扩展 JSON", "{}", "textarea"),
26
+ text("userAgent", "HTTP User-Agent", "Mozilla/5.0"),
27
+ select("logLevel", "日志级别", [
28
+ ["info", "信息"],
29
+ ["warn", "警告"],
30
+ ["error", "错误"],
31
+ ["debug", "调试"],
32
+ ]),
43
33
  ],
44
34
  },
45
35
  {
46
36
  type: "group",
47
- label: "AI 对话 / 审查",
37
+ label: "任务运行限制",
48
38
  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"),
39
+ num("timeoutSec", "单次任务超时(秒)", 120, 5, 600),
40
+ num("maxToolRounds", "单次任务最大步骤数", 6, 1, 20),
57
41
  ],
58
42
  },
59
43
  {
60
44
  type: "group",
61
- label: "GitHub",
45
+ label: "GitHub Webhook",
62
46
  fields: [
63
47
  flag("githubEnabled", "启用 Webhook 审查"),
64
48
  text("githubToken", "GitHub Token", "", "password"),
@@ -81,112 +65,75 @@ export const template = defineConfig({
81
65
  num("maxMemories", "最大记忆条数", 20000, 100, 1000000),
82
66
  ],
83
67
  },
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
- ],
68
+ object("modules", "聊天与通知功能", moduleFields),
69
+ array("mcpServers", "MCP 服务", object("item", "服务", [
70
+ {
71
+ type: "text",
72
+ key: "name",
73
+ label: "名称",
74
+ required: true,
75
+ pattern: "^[a-zA-Z0-9_-]{1,32}$",
139
76
  },
140
- },
77
+ flag("enabled", "启用", true),
78
+ select("transport", "传输", [
79
+ ["stdio", "stdio"],
80
+ ["http", "Streamable HTTP"],
81
+ ["sse", "SSE"],
82
+ ]),
83
+ text("command", "启动命令"),
84
+ strings("args", "命令参数(每项一个参数)"),
85
+ pairs("env", "环境变量"),
86
+ text("url", "服务 URL"),
87
+ pairs("headers", "HTTP 请求头"),
88
+ strings("allowedTools", "允许自动调用的工具名称"),
89
+ ])),
141
90
  ],
142
91
  });
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
92
  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 环境变量和请求头必须是字符串");
93
+ validateValues(template.fields, c);
94
+ const unique = (values, label) => {
95
+ if (new Set(values).size !== values.length)
96
+ throw new Error(`${label}不能重复`);
97
+ };
98
+ unique(c.mcpServers.map((s) => s.name), "MCP 名称");
99
+ for (const s of c.mcpServers) {
100
+ for (const [entries, label] of [
101
+ [s.env, "环境变量"],
102
+ [s.headers, "HTTP 请求头"],
103
+ ]) {
104
+ unique(entries.map((e) => e.name.toLowerCase()), label);
105
+ if (entries.some((e) => !e.name || /[\r\n=]/.test(e.name)))
106
+ throw new Error(`${label}名称无效`);
107
+ }
108
+ if (s.enabled && s.transport === "stdio" && !s.command.trim())
109
+ throw new Error("MCP 启动命令不能为空");
169
110
  if (s.transport !== "stdio" && !/^https?:\/\//.test(s.url))
170
111
  throw new Error("MCP URL 无效");
171
112
  }
113
+ unique(c.modules.discord.bridges.map((b) => `${b.guildId}#${b.channelName}`), "Discord 频道映射");
114
+ for (const b of c.modules.discord.bridges)
115
+ if (!/^\d+$/.test(b.guildId) ||
116
+ !/^\d+$/.test(b.group) ||
117
+ !b.channelName.trim())
118
+ throw new Error("Discord 桥接需要服务器 ID、频道名称和 QQ 群号");
119
+ unique(c.modules.github.subscriptions.map((s) => s.repository.toLowerCase()), "GitHub 订阅仓库");
120
+ for (const s of c.modules.github.subscriptions)
121
+ if (!/^[\w.-]+\/[\w.-]+$/.test(s.repository))
122
+ throw new Error("GitHub 订阅仓库格式应为 owner/repo");
172
123
  if (c.githubEnabled &&
173
124
  (!c.webhookSecret || !c.githubToken || !c.repositories.trim()))
174
125
  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`);
126
+ const integers = (value) => {
127
+ if (typeof value === "number" && !Number.isSafeInteger(value))
128
+ throw new Error("数量和号码必须是安全整数");
129
+ if (value && typeof value === "object")
130
+ Object.values(value).forEach(integers);
131
+ };
132
+ integers(c);
133
+ if (!/^https?:\/\//.test(c.httpUrl))
134
+ throw new Error("HTTP 地址必须是 HTTP(S) URL");
188
135
  if (!/^wss?:\/\//.test(c.wsUrl))
189
- throw new Error("wsUrl 必须是 WS(S) URL");
136
+ throw new Error("WebSocket 地址必须是 WS(S) URL");
190
137
  return c;
191
138
  }
192
139
  //# sourceMappingURL=config.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ConfigField } from "@dsh-plugin/dsh-loader/config";
2
+ import type { SynapseConfig } from "./types.js";
3
+ export declare const text: (key: string, label: string, value?: string, type?: ConfigField["type"]) => ConfigField;
4
+ export declare const flag: (key: string, label: string, value?: boolean) => ConfigField;
5
+ export declare const num: (key: string, label: string, value: number, min?: number, max?: number) => ConfigField;
6
+ export declare const object: (key: string, label: string, fields: ConfigField[]) => ConfigField;
7
+ export declare const array: (key: string, label: string, item: ConfigField) => ConfigField;
8
+ export declare const strings: (key: string, label: string) => ConfigField;
9
+ export declare const ids: (key?: string, label?: string) => ConfigField;
10
+ export declare const select: (key: string, label: string, options: [string, string][], value?: string) => ConfigField;
11
+ export declare const moduleFields: ConfigField[];
12
+ /** Only this boundary translates the visual form to the upstream file formats. */
13
+ export declare function featureFiles(c: SynapseConfig): {
14
+ id: string;
15
+ value: any;
16
+ }[];
17
+ export declare function modulesFromFiles(base: SynapseConfig["modules"], files: {
18
+ id: string;
19
+ value: any;
20
+ }[]): SynapseConfig["modules"];
@@ -0,0 +1,264 @@
1
+ export const text = (key, label, value = "", type = "text") => ({ type, key, label, default: value });
2
+ export const flag = (key, label, value = false) => ({ type: "boolean", key, label, default: value });
3
+ export const num = (key, label, value, min = 0, max = Number.MAX_SAFE_INTEGER) => ({ type: "number", key, label, default: value, min, max });
4
+ export const object = (key, label, fields) => ({ type: "object", key, label, fields });
5
+ export const array = (key, label, item) => ({ type: "array", key, label, item });
6
+ export const strings = (key, label) => array(key, label, text("item", "值"));
7
+ export const ids = (key = "groups", label = "启用的 QQ 群") => array(key, label, num("item", "号码", 1, 1));
8
+ export const select = (key, label, options, value = options[0][0]) => ({
9
+ type: "select",
10
+ key,
11
+ label,
12
+ options: options.map(([value, label]) => ({ value, label })),
13
+ default: value,
14
+ });
15
+ const days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
16
+ export const moduleFields = [
17
+ object("management", "群管理与管理员", [
18
+ ids(),
19
+ ids("operators", "QQ 管理员"),
20
+ strings("discordOperators", "Discord 管理员 ID"),
21
+ ]),
22
+ ...[
23
+ ["parentheses", "括号匹配"],
24
+ ["poke", "戳一戳"],
25
+ ["minecraft", "Minecraft 查询"],
26
+ ["modrinth", "Modrinth 查询"],
27
+ ["command", "命令入口"],
28
+ ].map(([id, label]) => object(id, label, [ids()])),
29
+ object("bili", "B 站视频与订阅", [ids(), ids("follow", "关注的 B 站 UID")]),
30
+ object("github", "GitHub 仓库通知", [
31
+ array("subscriptions", "仓库订阅", object("item", "订阅", [text("repository", "owner/repo"), ids()])),
32
+ ]),
33
+ object("welcome", "新人欢迎", [
34
+ array("welcomes", "欢迎规则", object("item", "规则", [
35
+ ids("group", "适用 QQ 群"),
36
+ text("msg", "欢迎语(${at} 表示新成员)", "欢迎 ${at} 加入群聊", "textarea"),
37
+ ])),
38
+ ]),
39
+ object("discord", "Discord 跨平台桥接", [
40
+ text("token", "Discord Bot Token", "", "password"),
41
+ array("bridges", "频道与 QQ 群映射", object("item", "桥接", [
42
+ text("guildId", "Discord 服务器 ID"),
43
+ text("channelName", "Discord 频道名称"),
44
+ text("group", "QQ 群号"),
45
+ flag("needReply", "QQ → Discord 仅转发对桥消息的回复"),
46
+ flag("needCmd", "双向仅转发 /send 与桥消息回复"),
47
+ ])),
48
+ ]),
49
+ object("chat", "QQ / Discord 消息行为", [
50
+ text("botName", "机器人展示名称", "小喵"),
51
+ ids(),
52
+ ids("admins", "对话管理员 QQ"),
53
+ ids("allowedUsers", "允许对话的 QQ 用户(空为全部)"),
54
+ ids("blockedUsers", "屏蔽的 QQ 用户"),
55
+ flag("requireMention", "群聊需要 @机器人", true),
56
+ strings("keywordTriggers", "触发关键词"),
57
+ num("progressRateLimitSec", "进度更新最小间隔(秒)", 15),
58
+ flag("progressAsImage", "进度使用图片卡片", true),
59
+ num("progressMaxTools", "进度卡片最多工具数", 12),
60
+ num("maxMessageLength", "单条消息最大字符数", 1200, 1),
61
+ flag("forwardImages", "转发图片到 DSH", true),
62
+ flag("replyPerSentence", "逐句发送回复", true),
63
+ num("compactMaxChars", "合并转发字符阈值(0 关闭)", 300),
64
+ num("compactMaxLines", "合并转发行数阈值(0 关闭)", 5),
65
+ num("localHistoryMaxMessages", "会话上下文消息数", 24),
66
+ flag("persistHistoryEnabled", "保存会话历史", true),
67
+ num("persistHistoryMax", "历史保留消息数", 100),
68
+ flag("approvalEnabled", "在聊天通道显示 DSH 审批", true),
69
+ num("approvalTimeoutSec", "审批超时自动拒绝(秒,0 不超时)", 300),
70
+ flag("reactionEnabled", "处理期间使用表情回应", true),
71
+ text("reactionEmojiQq", "QQ 回应表情 ID", "76"),
72
+ text("reactionEmojiDiscord", "Discord 回应表情", "👀"),
73
+ flag("privateReactionFallbackText", "私聊表情失败时发送文字回执", true),
74
+ text("privateReceiptText", "私聊文字回执", "🤔 收到,正在思考…"),
75
+ ]),
76
+ object("peakValley", "峰谷时段提醒", [
77
+ ids(),
78
+ select("mode", "默认时段类型", [
79
+ ["peak", "峰"],
80
+ ["valley", "谷"],
81
+ ]),
82
+ {
83
+ ...array("time", "时段", object("item", "时段", [
84
+ {
85
+ ...text("start", "开始时间", "09:00"),
86
+ pattern: "^([01]?\\d|2[0-3]):[0-5]\\d$",
87
+ },
88
+ {
89
+ ...text("end", "结束时间", "12:00"),
90
+ pattern: "^([01]?\\d|2[0-3]):[0-5]\\d$",
91
+ },
92
+ {
93
+ type: "multiselect",
94
+ key: "days",
95
+ label: "重复日期",
96
+ default: days.slice(0, 5),
97
+ options: days.map((value, i) => ({
98
+ value,
99
+ label: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"][i],
100
+ })),
101
+ },
102
+ select("mode", "时段类型", [
103
+ ["", "使用默认类型"],
104
+ ["peak", "峰"],
105
+ ["valley", "谷"],
106
+ ]),
107
+ text("msg", "此时段提醒(留空使用默认)", "", "textarea"),
108
+ ])),
109
+ default: [
110
+ {
111
+ start: "09:00",
112
+ end: "12:00",
113
+ days: days.slice(0, 5),
114
+ mode: "",
115
+ msg: "",
116
+ },
117
+ {
118
+ start: "14:00",
119
+ end: "18:00",
120
+ days: days.slice(0, 5),
121
+ mode: "",
122
+ msg: "",
123
+ },
124
+ ],
125
+ },
126
+ text("peak_msg", "峰时段提醒", "梁文峰时间到!\n当前时间是${time}", "textarea"),
127
+ text("valley_msg", "谷时段提醒", "梁文谷时间到!\n当前时间是${time}", "textarea"),
128
+ text("cmd_peak_msg", "峰时段查询回复", "当前时间是${time},梁文峰时间!", "textarea"),
129
+ text("cmd_valley_msg", "谷时段查询回复", "当前时间是${time},梁文谷时间!", "textarea"),
130
+ ]),
131
+ ];
132
+ /** Only this boundary translates the visual form to the upstream file formats. */
133
+ export function featureFiles(c) {
134
+ const m = c.modules;
135
+ return [
136
+ ...[
137
+ "management",
138
+ "parentheses",
139
+ "poke",
140
+ "minecraft",
141
+ "modrinth",
142
+ "command",
143
+ ].map((id) => ({ id, value: { version: 1, ...m[id] } })),
144
+ {
145
+ id: "bili",
146
+ value: {
147
+ version: 1,
148
+ groups: m.bili.groups,
149
+ extra: { follow: m.bili.follow },
150
+ },
151
+ },
152
+ {
153
+ id: "github",
154
+ value: {
155
+ version: 2,
156
+ groups: Object.fromEntries(m.github.subscriptions.map((s) => [s.repository, s.groups])),
157
+ },
158
+ },
159
+ { id: "welcome", value: { version: 1, welcomes: m.welcome.welcomes } },
160
+ {
161
+ id: "discord-bridge",
162
+ value: {
163
+ version: 1,
164
+ token: m.discord.token,
165
+ bridges: Object.fromEntries(m.discord.bridges.map((b) => [
166
+ `${b.guildId}#${b.channelName}`,
167
+ {
168
+ group: b.group,
169
+ need_reply: String(b.needReply),
170
+ need_cmd: String(b.needCmd),
171
+ },
172
+ ])),
173
+ },
174
+ },
175
+ { id: "hermes", value: { version: 1, ...m.chat, systemPrompt: "" } },
176
+ {
177
+ id: "peak-valley-timer",
178
+ value: {
179
+ ...m.peakValley,
180
+ time: m.peakValley.time.map((t) => ({
181
+ ...t,
182
+ ...(t.mode ? {} : { mode: undefined }),
183
+ })),
184
+ },
185
+ },
186
+ ];
187
+ }
188
+ export function modulesFromFiles(base, files) {
189
+ const m = structuredClone(base);
190
+ for (const { id, value: v } of files) {
191
+ if ([
192
+ "management",
193
+ "parentheses",
194
+ "poke",
195
+ "minecraft",
196
+ "modrinth",
197
+ "command",
198
+ ].includes(id))
199
+ m[id] = { ...m[id], ...v };
200
+ else if (id === "bili")
201
+ m.bili = { groups: v.groups ?? [], follow: v.extra?.follow ?? [] };
202
+ else if (id === "github")
203
+ m.github.subscriptions = Object.entries(Array.isArray(v.groups)
204
+ ? { "Anvil-Dev/AnvilCraft": v.groups }
205
+ : (v.groups ?? {})).map(([repository, groups]) => ({
206
+ repository,
207
+ groups: groups,
208
+ }));
209
+ else if (id === "welcome")
210
+ m.welcome.welcomes = (v.welcomes ?? []).map((w) => ({
211
+ group: w.group,
212
+ msg: Array.isArray(w.msg) ? w.msg.join("\n") : w.msg,
213
+ }));
214
+ else if (id === "discord-bridge")
215
+ m.discord = {
216
+ token: v.token ?? "",
217
+ bridges: Object.entries(v.bridges ?? {}).map(([key, entry]) => ({
218
+ guildId: key.slice(0, key.indexOf("#")),
219
+ channelName: key.slice(key.indexOf("#") + 1),
220
+ group: String(entry.group),
221
+ needReply: String(entry.need_reply) === "true",
222
+ needCmd: String(entry.need_cmd) === "true",
223
+ })),
224
+ };
225
+ else if (id === "hermes") {
226
+ const { apiUrl, apiKey, systemPrompt, version, ...behavior } = v;
227
+ m.chat = { ...m.chat, ...behavior };
228
+ }
229
+ else if (id === "peak-valley-timer")
230
+ m.peakValley = {
231
+ ...m.peakValley,
232
+ ...v,
233
+ time: (v.time ?? m.peakValley.time).map(timeRange),
234
+ };
235
+ }
236
+ return m;
237
+ }
238
+ function timeRange(raw) {
239
+ if (typeof raw !== "string")
240
+ return { ...raw, mode: raw.mode ?? "", msg: raw.msg ?? "" };
241
+ const match = raw.match(/^(\d{1,2}:\d{2})-(\d{1,2}:\d{2})(?:\s+(.+))?$/);
242
+ if (!match)
243
+ throw new Error(`无法迁移时段:${raw}`);
244
+ const selected = new Set();
245
+ for (const token of (match[3] ?? "Mon-Sun").split(/[,\s]+/)) {
246
+ const [start, end = start] = token.split("-");
247
+ let i = days.indexOf(start);
248
+ if (i < 0 || !days.includes(end))
249
+ throw new Error(`无法迁移日期:${token}`);
250
+ for (let n = 0; n < 7; n++, i = (i + 1) % 7) {
251
+ selected.add(days[i]);
252
+ if (days[i] === end)
253
+ break;
254
+ }
255
+ }
256
+ return {
257
+ start: match[1],
258
+ end: match[2],
259
+ days: [...selected],
260
+ mode: "",
261
+ msg: "",
262
+ };
263
+ }
264
+ //# sourceMappingURL=feature-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-config.js","sourceRoot":"","sources":["../../src/feature-config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ConfigSource, ErrorSink } from "./types.js";
2
+ import type { ApprovalAnswer } from "./harness.js";
2
3
  interface Run {
3
4
  created: number;
4
5
  events: any[];
@@ -6,6 +7,8 @@ interface Run {
6
7
  done: boolean;
7
8
  controller: AbortController;
8
9
  task?: Promise<void>;
10
+ approval?: (answer: ApprovalAnswer) => void;
11
+ approvalQueue: Promise<unknown>;
9
12
  }
10
13
  export declare class Gateway {
11
14
  agent: import("./agent.js").Agent;
@@ -13,11 +16,6 @@ export declare class Gateway {
13
16
  onError: ErrorSink;
14
17
  token: string;
15
18
  runs: Map<string, Run>;
16
- external: Map<string, {
17
- input: any;
18
- created: number;
19
- }>;
20
- controllers: Set<AbortController>;
21
19
  closed: boolean;
22
20
  server: import("node:http").Server;
23
21
  url: string;
@@ -27,7 +25,7 @@ export declare class Gateway {
27
25
  constructor(agent: import("./agent.js").Agent, config: ConfigSource, onError: ErrorSink);
28
26
  start(): Promise<void>;
29
27
  handle(req: any, res: any): Promise<void>;
30
- proxy(req: any, res: any, pathname: any, c: any): Promise<void>;
28
+ private askApproval;
31
29
  close(): Promise<void>;
32
30
  }
33
31
  export {};