clawdbot-dingtalk 0.1.7 → 0.1.9
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.
- package/README.md +17 -0
- package/clawdbot.plugin.json +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/src/channel.d.ts.map +1 -1
- package/dist/src/channel.js +30 -8
- package/dist/src/channel.js.map +1 -1
- package/dist/src/config-schema.d.ts +74 -0
- package/dist/src/config-schema.d.ts.map +1 -1
- package/dist/src/config-schema.js +24 -0
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/dashscope/index.d.ts +8 -0
- package/dist/src/dashscope/index.d.ts.map +1 -0
- package/dist/src/dashscope/index.js +7 -0
- package/dist/src/dashscope/index.js.map +1 -0
- package/dist/src/dashscope/proxy.d.ts +10 -0
- package/dist/src/dashscope/proxy.d.ts.map +1 -0
- package/dist/src/dashscope/proxy.js +142 -0
- package/dist/src/dashscope/proxy.js.map +1 -0
- package/dist/src/dashscope/service.d.ts +9 -0
- package/dist/src/dashscope/service.d.ts.map +1 -0
- package/dist/src/dashscope/service.js +129 -0
- package/dist/src/dashscope/service.js.map +1 -0
- package/dist/src/dashscope/thinking-models.d.ts +15 -0
- package/dist/src/dashscope/thinking-models.d.ts.map +1 -0
- package/dist/src/dashscope/thinking-models.js +49 -0
- package/dist/src/dashscope/thinking-models.js.map +1 -0
- package/dist/src/dashscope/types.d.ts +45 -0
- package/dist/src/dashscope/types.d.ts.map +1 -0
- package/dist/src/dashscope/types.js +5 -0
- package/dist/src/dashscope/types.js.map +1 -0
- package/dist/src/monitor.d.ts.map +1 -1
- package/dist/src/monitor.js +83 -17
- package/dist/src/monitor.js.map +1 -1
- package/dist/src/util/directive-tags.d.ts +19 -0
- package/dist/src/util/directive-tags.d.ts.map +1 -0
- package/dist/src/util/directive-tags.js +50 -0
- package/dist/src/util/directive-tags.js.map +1 -0
- package/dist/src/util/prefix.d.ts +14 -0
- package/dist/src/util/prefix.d.ts.map +1 -0
- package/dist/src/util/prefix.js +16 -0
- package/dist/src/util/prefix.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,6 +12,9 @@ npm install -g clawdbot
|
|
|
12
12
|
npm install -g clawdbot-dingtalk
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
> Plugin ID: `dingtalk` (used in `plugins.allow` / `plugins.entries`)
|
|
16
|
+
> NPM package: `clawdbot-dingtalk`
|
|
17
|
+
|
|
15
18
|
## Configuration
|
|
16
19
|
|
|
17
20
|
Edit `~/.clawdbot/clawdbot.json`:
|
|
@@ -70,6 +73,20 @@ clawdbot gateway
|
|
|
70
73
|
| `showToolResult` | boolean | `false` | Show tool results |
|
|
71
74
|
| `thinking` | string | `"off"` | Thinking mode (off/minimal/low/medium/high) |
|
|
72
75
|
|
|
76
|
+
## Chat Commands
|
|
77
|
+
|
|
78
|
+
The following chat switches are supported in DingTalk:
|
|
79
|
+
|
|
80
|
+
- `/new` - Reset session context
|
|
81
|
+
- `/think [off|minimal|low|medium|high]` - Set thinking level
|
|
82
|
+
- `/model <provider/model>` - Switch model
|
|
83
|
+
- `/models [provider]` - List providers or models under a provider
|
|
84
|
+
- `/verbose on|off|full` - Toggle non-final updates (tool/block)
|
|
85
|
+
|
|
86
|
+
Notes:
|
|
87
|
+
- Commands respect `allowFrom` and `requirePrefix` (in group chats).
|
|
88
|
+
- Inline usage is supported (e.g., "帮我看看 /model openai/gpt-4o").
|
|
89
|
+
|
|
73
90
|
### Multi-account Configuration
|
|
74
91
|
|
|
75
92
|
```json
|
package/clawdbot.plugin.json
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQ7D,QAAA,MAAM,MAAM;;;;;kBAKI,iBAAiB;CAKhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk";
|
|
2
2
|
import { dingtalkPlugin } from "./src/channel.js";
|
|
3
|
+
import { DINGTALK_PLUGIN_ID } from "./src/config-schema.js";
|
|
3
4
|
import { setDingTalkRuntime } from "./src/runtime.js";
|
|
5
|
+
import { createDashScopeProxyService } from "./src/dashscope/service.js";
|
|
4
6
|
const plugin = {
|
|
5
|
-
id:
|
|
7
|
+
id: DINGTALK_PLUGIN_ID,
|
|
6
8
|
name: "DingTalk",
|
|
7
9
|
description: "DingTalk (钉钉) channel plugin for enterprise messaging",
|
|
8
10
|
configSchema: emptyPluginConfigSchema(),
|
|
9
11
|
register(api) {
|
|
10
12
|
setDingTalkRuntime(api.runtime);
|
|
11
13
|
api.registerChannel({ plugin: dingtalkPlugin });
|
|
14
|
+
api.registerService(createDashScopeProxyService());
|
|
12
15
|
},
|
|
13
16
|
};
|
|
14
17
|
export default plugin;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,uDAAuD;IACpE,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,eAAe,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACrD,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,uBAAuB,EAK7B,MAAM,eAAe,CAAC;AA2DvB;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EAKd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,uBAAuB,EAK7B,MAAM,eAAe,CAAC;AA2DvB;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,uBAAuB,CA4OjE,CAAC"}
|
package/dist/src/channel.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* DingTalk Channel Plugin for Clawdbot.
|
|
3
3
|
*/
|
|
4
4
|
import { listDingTalkAccountIds, resolveDingTalkAccount, resolveDefaultDingTalkAccountId, isDingTalkAccountConfigured, } from "./accounts.js";
|
|
5
|
-
import { DEFAULT_ACCOUNT_ID } from "./config-schema.js";
|
|
5
|
+
import { DEFAULT_ACCOUNT_ID, DINGTALK_CHANNEL_ID, DINGTALK_NPM_PACKAGE } from "./config-schema.js";
|
|
6
6
|
import { chunkMarkdownText } from "./send/chunker.js";
|
|
7
7
|
import { monitorDingTalkProvider } from "./monitor.js";
|
|
8
8
|
import { probeDingTalk } from "./probe.js";
|
|
@@ -36,13 +36,13 @@ function adaptLogger(log) {
|
|
|
36
36
|
* Channel metadata.
|
|
37
37
|
*/
|
|
38
38
|
const meta = {
|
|
39
|
-
id:
|
|
39
|
+
id: DINGTALK_CHANNEL_ID,
|
|
40
40
|
label: "DingTalk",
|
|
41
41
|
selectionLabel: "钉钉 (DingTalk)",
|
|
42
42
|
blurb: "Enterprise messaging platform by Alibaba",
|
|
43
43
|
docsPath: "/docs/channels/dingtalk",
|
|
44
44
|
order: 50,
|
|
45
|
-
aliases: ["dingding", "钉钉"],
|
|
45
|
+
aliases: ["dingding", "钉钉", DINGTALK_NPM_PACKAGE],
|
|
46
46
|
systemImage: "dingtalk",
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
@@ -60,7 +60,7 @@ const capabilities = {
|
|
|
60
60
|
* DingTalk channel plugin.
|
|
61
61
|
*/
|
|
62
62
|
export const dingtalkPlugin = {
|
|
63
|
-
id:
|
|
63
|
+
id: DINGTALK_CHANNEL_ID,
|
|
64
64
|
meta,
|
|
65
65
|
capabilities,
|
|
66
66
|
reload: { configPrefixes: ["channels.dingtalk"] },
|
|
@@ -73,9 +73,9 @@ export const dingtalkPlugin = {
|
|
|
73
73
|
clientId: { type: "string" },
|
|
74
74
|
clientSecret: { type: "string" },
|
|
75
75
|
clientSecretFile: { type: "string" },
|
|
76
|
-
replyMode: { type: "string", enum: ["text", "markdown"], default: "
|
|
76
|
+
replyMode: { type: "string", enum: ["text", "markdown"], default: "text" },
|
|
77
77
|
maxChars: { type: "number", default: 1800 },
|
|
78
|
-
tableMode: { type: "string", enum: ["off", "
|
|
78
|
+
tableMode: { type: "string", enum: ["off", "code"], default: "code" },
|
|
79
79
|
responsePrefix: { type: "string" },
|
|
80
80
|
requirePrefix: { type: "string" },
|
|
81
81
|
allowFrom: { type: "array", items: { type: "string" } },
|
|
@@ -83,6 +83,16 @@ export const dingtalkPlugin = {
|
|
|
83
83
|
apiBase: { type: "string" },
|
|
84
84
|
openPath: { type: "string" },
|
|
85
85
|
subscriptionsJson: { type: "string" },
|
|
86
|
+
thinkingProxy: {
|
|
87
|
+
type: "object",
|
|
88
|
+
properties: {
|
|
89
|
+
enabled: { type: "boolean", default: false },
|
|
90
|
+
port: { type: "number", default: 18788 },
|
|
91
|
+
bind: { type: "string", default: "127.0.0.1" },
|
|
92
|
+
thinkingBudget: { type: "number", default: 0 },
|
|
93
|
+
thinkingModels: { type: "string" },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
86
96
|
},
|
|
87
97
|
},
|
|
88
98
|
uiHints: {
|
|
@@ -92,14 +102,26 @@ export const dingtalkPlugin = {
|
|
|
92
102
|
clientSecretFile: { label: "Client Secret 文件", help: "包含 Client Secret 的文件路径(替代直接配置)", advanced: true },
|
|
93
103
|
replyMode: { label: "回复模式", help: "消息格式:text(纯文本)或 markdown" },
|
|
94
104
|
maxChars: { label: "最大字符数", help: "单条消息最大字符数(超出将分段发送)" },
|
|
95
|
-
tableMode: { label: "表格模式", help: "Markdown 表格处理方式:off(保留)、
|
|
96
|
-
responsePrefix: { label: "回复前缀", help: "添加到回复开头的文本(支持 {
|
|
105
|
+
tableMode: { label: "表格模式", help: "Markdown 表格处理方式:off(保留)、code(转为代码块)", advanced: true },
|
|
106
|
+
responsePrefix: { label: "回复前缀", help: "添加到回复开头的文本(支持 {model}/{provider}/{identity} 变量)", advanced: true },
|
|
97
107
|
requirePrefix: { label: "触发前缀", help: "群聊中需要以此前缀开头才会响应", advanced: true },
|
|
98
108
|
allowFrom: { label: "允许发送者", help: "允许发送消息的用户 ID 列表(空表示允许所有)", advanced: true },
|
|
99
109
|
selfUserId: { label: "机器人用户 ID", help: "机器人自身的用户 ID,用于过滤自己的消息", advanced: true },
|
|
100
110
|
apiBase: { label: "API 基础 URL", help: "钉钉 API 基础地址(默认:https://api.dingtalk.com)", advanced: true },
|
|
101
111
|
openPath: { label: "Open Path", help: "Stream 连接路径(默认:/v1.0/gateway/connections/open)", advanced: true },
|
|
102
112
|
subscriptionsJson: { label: "订阅配置 JSON", help: "自定义订阅配置 JSON(高级用法)", advanced: true },
|
|
113
|
+
thinkingProxy: {
|
|
114
|
+
label: "Thinking 代理",
|
|
115
|
+
help: "为 DashScope 模型自动注入 thinking 参数(需设置 DASHSCOPE_API_KEY 环境变量)",
|
|
116
|
+
advanced: true,
|
|
117
|
+
nested: {
|
|
118
|
+
enabled: { label: "启用", help: "是否启用 thinking 代理服务" },
|
|
119
|
+
port: { label: "端口", help: "代理服务监听端口(默认 18788)" },
|
|
120
|
+
bind: { label: "绑定地址", help: "代理服务绑定地址(默认 127.0.0.1)" },
|
|
121
|
+
thinkingBudget: { label: "思考预算", help: "思考模式的 token 预算(0 表示无限制)" },
|
|
122
|
+
thinkingModels: { label: "支持的模型", help: "支持思考模式的模型列表(逗号分隔,留空使用默认列表)" },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
103
125
|
},
|
|
104
126
|
},
|
|
105
127
|
config: {
|
package/dist/src/channel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAEL,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,40 @@ export declare const CoalesceConfigSchema: z.ZodObject<{
|
|
|
18
18
|
maxChars?: number;
|
|
19
19
|
idleMs?: number;
|
|
20
20
|
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Canonical channel id + plugin id (used for config compatibility).
|
|
23
|
+
*/
|
|
24
|
+
export declare const DINGTALK_CHANNEL_ID = "dingtalk";
|
|
25
|
+
export declare const DINGTALK_PLUGIN_ID = "dingtalk";
|
|
26
|
+
export declare const DINGTALK_NPM_PACKAGE = "clawdbot-dingtalk";
|
|
27
|
+
/**
|
|
28
|
+
* Thinking 代理配置 schema(简化版)
|
|
29
|
+
* API Key 从环境变量 DASHSCOPE_API_KEY 读取
|
|
30
|
+
*/
|
|
31
|
+
export declare const ThinkingProxyConfigSchema: z.ZodObject<{
|
|
32
|
+
/** 是否启用代理 */
|
|
33
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
/** 监听端口 */
|
|
35
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
/** 绑定地址 */
|
|
37
|
+
bind: z.ZodDefault<z.ZodString>;
|
|
38
|
+
/** 思考预算 (0=无限制) */
|
|
39
|
+
thinkingBudget: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
/** 支持思考的模型列表 (逗号分隔) */
|
|
41
|
+
thinkingModels: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
enabled?: boolean;
|
|
44
|
+
port?: number;
|
|
45
|
+
bind?: string;
|
|
46
|
+
thinkingBudget?: number;
|
|
47
|
+
thinkingModels?: string;
|
|
48
|
+
}, {
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
port?: number;
|
|
51
|
+
bind?: string;
|
|
52
|
+
thinkingBudget?: number;
|
|
53
|
+
thinkingModels?: string;
|
|
54
|
+
}>;
|
|
21
55
|
/**
|
|
22
56
|
* DingTalk channel configuration schema.
|
|
23
57
|
* Maps from YAML config under `channels.dingtalk.*`
|
|
@@ -70,6 +104,31 @@ export declare const DingTalkConfigSchema: z.ZodObject<{
|
|
|
70
104
|
maxChars?: number;
|
|
71
105
|
idleMs?: number;
|
|
72
106
|
}>>;
|
|
107
|
+
/** DashScope 代理配置 */
|
|
108
|
+
thinkingProxy: z.ZodOptional<z.ZodObject<{
|
|
109
|
+
/** 是否启用代理 */
|
|
110
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
111
|
+
/** 监听端口 */
|
|
112
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
113
|
+
/** 绑定地址 */
|
|
114
|
+
bind: z.ZodDefault<z.ZodString>;
|
|
115
|
+
/** 思考预算 (0=无限制) */
|
|
116
|
+
thinkingBudget: z.ZodDefault<z.ZodNumber>;
|
|
117
|
+
/** 支持思考的模型列表 (逗号分隔) */
|
|
118
|
+
thinkingModels: z.ZodOptional<z.ZodString>;
|
|
119
|
+
}, "strip", z.ZodTypeAny, {
|
|
120
|
+
enabled?: boolean;
|
|
121
|
+
port?: number;
|
|
122
|
+
bind?: string;
|
|
123
|
+
thinkingBudget?: number;
|
|
124
|
+
thinkingModels?: string;
|
|
125
|
+
}, {
|
|
126
|
+
enabled?: boolean;
|
|
127
|
+
port?: number;
|
|
128
|
+
bind?: string;
|
|
129
|
+
thinkingBudget?: number;
|
|
130
|
+
thinkingModels?: string;
|
|
131
|
+
}>>;
|
|
73
132
|
/** Show tool status messages (🔧 正在执行...) */
|
|
74
133
|
showToolStatus: z.ZodDefault<z.ZodBoolean>;
|
|
75
134
|
/** Show tool result messages (✅ ... 完成) */
|
|
@@ -185,6 +244,13 @@ export declare const DingTalkConfigSchema: z.ZodObject<{
|
|
|
185
244
|
maxChars?: number;
|
|
186
245
|
idleMs?: number;
|
|
187
246
|
};
|
|
247
|
+
thinkingProxy?: {
|
|
248
|
+
enabled?: boolean;
|
|
249
|
+
port?: number;
|
|
250
|
+
bind?: string;
|
|
251
|
+
thinkingBudget?: number;
|
|
252
|
+
thinkingModels?: string;
|
|
253
|
+
};
|
|
188
254
|
showToolStatus?: boolean;
|
|
189
255
|
showToolResult?: boolean;
|
|
190
256
|
thinking?: "off" | "minimal" | "low" | "medium" | "high";
|
|
@@ -236,6 +302,13 @@ export declare const DingTalkConfigSchema: z.ZodObject<{
|
|
|
236
302
|
maxChars?: number;
|
|
237
303
|
idleMs?: number;
|
|
238
304
|
};
|
|
305
|
+
thinkingProxy?: {
|
|
306
|
+
enabled?: boolean;
|
|
307
|
+
port?: number;
|
|
308
|
+
bind?: string;
|
|
309
|
+
thinkingBudget?: number;
|
|
310
|
+
thinkingModels?: string;
|
|
311
|
+
};
|
|
239
312
|
showToolStatus?: boolean;
|
|
240
313
|
showToolResult?: boolean;
|
|
241
314
|
thinking?: "off" | "minimal" | "low" | "medium" | "high";
|
|
@@ -268,6 +341,7 @@ export declare const DingTalkConfigSchema: z.ZodObject<{
|
|
|
268
341
|
}>;
|
|
269
342
|
export type DingTalkConfig = z.infer<typeof DingTalkConfigSchema>;
|
|
270
343
|
export type CoalesceConfig = z.infer<typeof CoalesceConfigSchema>;
|
|
344
|
+
export type ThinkingProxyConfig = z.infer<typeof ThinkingProxyConfigSchema>;
|
|
271
345
|
/**
|
|
272
346
|
* Default values for coalesce config
|
|
273
347
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,iCAAiC;;IAGjC,wCAAwC;;IAGxC,4CAA4C;;IAG5C,4CAA4C;;IAG5C,oCAAoC;;IAGpC,4BAA4B;;IAG5B,uBAAuB;;IAGvB,2CAA2C;;IAG3C,mCAAmC;;IAGnC,2CAA2C;;IAG3C,kDAAkD;;IAGlD,8CAA8C;;IAG9C,uEAAuE;;IAGvE,6EAA6E;;IAG7E,yCAAyC;;IAGzC,uCAAuC;;;;;;;;;;;;;;;;;IAGvC,6CAA6C;;IAG7C,2CAA2C;;IAG3C,iCAAiC;;IAGjC,kCAAkC
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,yBAAyB;IACpC,aAAa;;IAEb,WAAW;;IAEX,WAAW;;IAEX,mBAAmB;;IAEnB,uBAAuB;;;;;;;;;;;;;;EAEvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;IAC/B,iCAAiC;;IAGjC,wCAAwC;;IAGxC,4CAA4C;;IAG5C,4CAA4C;;IAG5C,oCAAoC;;IAGpC,4BAA4B;;IAG5B,uBAAuB;;IAGvB,2CAA2C;;IAG3C,mCAAmC;;IAGnC,2CAA2C;;IAG3C,kDAAkD;;IAGlD,8CAA8C;;IAG9C,uEAAuE;;IAGvE,6EAA6E;;IAG7E,yCAAyC;;IAGzC,uCAAuC;;;;;;;;;;;;;;;;;IAGvC,qBAAqB;;QAjErB,aAAa;;QAEb,WAAW;;QAEX,WAAW;;QAEX,mBAAmB;;QAEnB,uBAAuB;;;;;;;;;;;;;;;IA4DvB,6CAA6C;;IAG7C,2CAA2C;;IAG3C,iCAAiC;;IAGjC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BlC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAK9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAC"}
|
|
@@ -8,6 +8,28 @@ export const CoalesceConfigSchema = z.object({
|
|
|
8
8
|
maxChars: z.number().min(800).default(1200),
|
|
9
9
|
idleMs: z.number().min(0).default(1000),
|
|
10
10
|
});
|
|
11
|
+
/**
|
|
12
|
+
* Canonical channel id + plugin id (used for config compatibility).
|
|
13
|
+
*/
|
|
14
|
+
export const DINGTALK_CHANNEL_ID = "dingtalk";
|
|
15
|
+
export const DINGTALK_PLUGIN_ID = "dingtalk";
|
|
16
|
+
export const DINGTALK_NPM_PACKAGE = "clawdbot-dingtalk";
|
|
17
|
+
/**
|
|
18
|
+
* Thinking 代理配置 schema(简化版)
|
|
19
|
+
* API Key 从环境变量 DASHSCOPE_API_KEY 读取
|
|
20
|
+
*/
|
|
21
|
+
export const ThinkingProxyConfigSchema = z.object({
|
|
22
|
+
/** 是否启用代理 */
|
|
23
|
+
enabled: z.boolean().default(false),
|
|
24
|
+
/** 监听端口 */
|
|
25
|
+
port: z.number().min(1024).max(65535).default(18788),
|
|
26
|
+
/** 绑定地址 */
|
|
27
|
+
bind: z.string().default("127.0.0.1"),
|
|
28
|
+
/** 思考预算 (0=无限制) */
|
|
29
|
+
thinkingBudget: z.number().min(0).default(0),
|
|
30
|
+
/** 支持思考的模型列表 (逗号分隔) */
|
|
31
|
+
thinkingModels: z.string().optional(),
|
|
32
|
+
});
|
|
11
33
|
/**
|
|
12
34
|
* DingTalk channel configuration schema.
|
|
13
35
|
* Maps from YAML config under `channels.dingtalk.*`
|
|
@@ -45,6 +67,8 @@ export const DingTalkConfigSchema = z.object({
|
|
|
45
67
|
tableMode: z.enum(["code", "off"]).default("code"),
|
|
46
68
|
/** Message coalescing configuration */
|
|
47
69
|
coalesce: CoalesceConfigSchema.optional(),
|
|
70
|
+
/** DashScope 代理配置 */
|
|
71
|
+
thinkingProxy: ThinkingProxyConfigSchema.optional(),
|
|
48
72
|
/** Show tool status messages (🔧 正在执行...) */
|
|
49
73
|
showToolStatus: z.boolean().default(false),
|
|
50
74
|
/** Show tool result messages (✅ ... 完成) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 代理模块导出
|
|
3
|
+
*/
|
|
4
|
+
export { createDashScopeProxyService } from "./service.js";
|
|
5
|
+
export { createDashScopeProxy } from "./proxy.js";
|
|
6
|
+
export { createThinkingChecker, DEFAULT_THINKING_MODELS } from "./thinking-models.js";
|
|
7
|
+
export type { DashScopeProxyConfig, ProxyHandle, ProxyLogger } from "./types.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dashscope/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 代理模块导出
|
|
3
|
+
*/
|
|
4
|
+
export { createDashScopeProxyService } from "./service.js";
|
|
5
|
+
export { createDashScopeProxy } from "./proxy.js";
|
|
6
|
+
export { createThinkingChecker, DEFAULT_THINKING_MODELS } from "./thinking-models.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dashscope/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 代理服务
|
|
3
|
+
* 为 DashScope API 请求注入 enable_thinking 参数
|
|
4
|
+
*/
|
|
5
|
+
import type { DashScopeProxyConfig, ProxyLogger, ProxyHandle } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* 创建 DashScope 代理服务
|
|
8
|
+
*/
|
|
9
|
+
export declare function createDashScopeProxy(config: DashScopeProxyConfig, logger: ProxyLogger): Promise<ProxyHandle>;
|
|
10
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/dashscope/proxy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGjF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC,CAsKtB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 代理服务
|
|
3
|
+
* 为 DashScope API 请求注入 enable_thinking 参数
|
|
4
|
+
*/
|
|
5
|
+
import http from "node:http";
|
|
6
|
+
import { createThinkingChecker } from "./thinking-models.js";
|
|
7
|
+
/**
|
|
8
|
+
* 创建 DashScope 代理服务
|
|
9
|
+
*/
|
|
10
|
+
export async function createDashScopeProxy(config, logger) {
|
|
11
|
+
const { port, bind, targetUrl, apiKey, thinkingEnabled, thinkingBudget, thinkingModels, } = config;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
throw new Error("DashScope API key is required");
|
|
14
|
+
}
|
|
15
|
+
const supportsThinking = createThinkingChecker(thinkingModels);
|
|
16
|
+
const server = http.createServer(async (req, res) => {
|
|
17
|
+
// 只处理 POST 请求到 chat/completions
|
|
18
|
+
if (req.method !== "POST" || !req.url?.includes("/chat/completions")) {
|
|
19
|
+
res.writeHead(404, { "Content-Type": "application/json" });
|
|
20
|
+
res.end(JSON.stringify({ error: "Not found" }));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
// 读取请求体
|
|
25
|
+
const chunks = [];
|
|
26
|
+
for await (const chunk of req) {
|
|
27
|
+
chunks.push(chunk);
|
|
28
|
+
}
|
|
29
|
+
const bodyBuffer = Buffer.concat(chunks);
|
|
30
|
+
let body;
|
|
31
|
+
try {
|
|
32
|
+
body = JSON.parse(bodyBuffer.toString("utf-8"));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
36
|
+
res.end(JSON.stringify({ error: "Invalid JSON body" }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const model = body.model || "";
|
|
40
|
+
const isStream = body.stream === true;
|
|
41
|
+
// 检查是否需要注入思考参数
|
|
42
|
+
if (thinkingEnabled && supportsThinking(model)) {
|
|
43
|
+
// 注入 enable_thinking
|
|
44
|
+
body.enable_thinking = true;
|
|
45
|
+
// 如果有预算限制,设置 thinking_budget
|
|
46
|
+
if (thinkingBudget && thinkingBudget > 0) {
|
|
47
|
+
body.thinking_budget = thinkingBudget;
|
|
48
|
+
}
|
|
49
|
+
logger.debug({ model, enable_thinking: true, thinking_budget: thinkingBudget || "unlimited" }, "Injected thinking parameters");
|
|
50
|
+
}
|
|
51
|
+
// 构建转发请求的 headers
|
|
52
|
+
const headers = {
|
|
53
|
+
"Content-Type": "application/json",
|
|
54
|
+
Authorization: `Bearer ${apiKey}`,
|
|
55
|
+
};
|
|
56
|
+
// 复制原始请求中的部分 headers
|
|
57
|
+
if (req.headers["x-request-id"]) {
|
|
58
|
+
headers["X-Request-Id"] = req.headers["x-request-id"];
|
|
59
|
+
}
|
|
60
|
+
const targetFullUrl = `${targetUrl}/chat/completions`;
|
|
61
|
+
logger.info({
|
|
62
|
+
model,
|
|
63
|
+
stream: isStream,
|
|
64
|
+
target: targetFullUrl,
|
|
65
|
+
enable_thinking: body.enable_thinking,
|
|
66
|
+
thinking_budget: body.thinking_budget,
|
|
67
|
+
}, "Proxying request to DashScope");
|
|
68
|
+
// 输出完整请求体用于调试
|
|
69
|
+
logger.debug({ requestBody: JSON.stringify(body).slice(0, 2000) }, "Full request body");
|
|
70
|
+
// 发起转发请求
|
|
71
|
+
const response = await fetch(targetFullUrl, {
|
|
72
|
+
method: "POST",
|
|
73
|
+
headers,
|
|
74
|
+
body: JSON.stringify(body),
|
|
75
|
+
});
|
|
76
|
+
// 复制响应 headers
|
|
77
|
+
const responseHeaders = {};
|
|
78
|
+
for (const [key, value] of response.headers) {
|
|
79
|
+
// 跳过一些不需要转发的 headers
|
|
80
|
+
if (key.toLowerCase() === "transfer-encoding")
|
|
81
|
+
continue;
|
|
82
|
+
if (key.toLowerCase() === "content-encoding")
|
|
83
|
+
continue;
|
|
84
|
+
responseHeaders[key] = value;
|
|
85
|
+
}
|
|
86
|
+
res.writeHead(response.status, responseHeaders);
|
|
87
|
+
if (isStream && response.body) {
|
|
88
|
+
// 流式响应:直接 pipe
|
|
89
|
+
const reader = response.body.getReader();
|
|
90
|
+
try {
|
|
91
|
+
while (true) {
|
|
92
|
+
const { done, value } = await reader.read();
|
|
93
|
+
if (done)
|
|
94
|
+
break;
|
|
95
|
+
res.write(value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
reader.releaseLock();
|
|
100
|
+
res.end();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// 非流式响应
|
|
105
|
+
const data = await response.arrayBuffer();
|
|
106
|
+
res.end(Buffer.from(data));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
logger.error({ err: { message: err?.message } }, "Proxy error");
|
|
111
|
+
if (!res.headersSent) {
|
|
112
|
+
res.writeHead(502, { "Content-Type": "application/json" });
|
|
113
|
+
res.end(JSON.stringify({
|
|
114
|
+
error: "Proxy error",
|
|
115
|
+
message: err?.message,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
res.end();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
server.on("error", (err) => {
|
|
125
|
+
logger.error({ err: { message: err?.message } }, "Proxy server error");
|
|
126
|
+
reject(err);
|
|
127
|
+
});
|
|
128
|
+
server.listen(port, bind, () => {
|
|
129
|
+
logger.info({ port, bind, target: targetUrl, thinkingEnabled }, "DashScope proxy started");
|
|
130
|
+
resolve({
|
|
131
|
+
server,
|
|
132
|
+
stop: () => new Promise((res) => {
|
|
133
|
+
server.close(() => {
|
|
134
|
+
logger.info({}, "DashScope proxy stopped");
|
|
135
|
+
res();
|
|
136
|
+
});
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/dashscope/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/dashscope/service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAkH7B;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,qBAAqB,CA8DnE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 代理插件服务
|
|
3
|
+
*/
|
|
4
|
+
import { createDashScopeProxy } from "./proxy.js";
|
|
5
|
+
/** DashScope API 默认目标地址 */
|
|
6
|
+
const DEFAULT_DASHSCOPE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
|
|
7
|
+
/** 可能的 DashScope provider 名称 */
|
|
8
|
+
const DASHSCOPE_PROVIDER_NAMES = ["dashscope", "qwen", "alibaba"];
|
|
9
|
+
/**
|
|
10
|
+
* 从 Clawdbot 配置中解析 Thinking 代理配置
|
|
11
|
+
*/
|
|
12
|
+
function resolveThinkingProxyConfig(cfg) {
|
|
13
|
+
const dingtalk = cfg.channels?.dingtalk;
|
|
14
|
+
const proxyConfig = dingtalk?.thinkingProxy;
|
|
15
|
+
if (!proxyConfig?.enabled)
|
|
16
|
+
return null;
|
|
17
|
+
return {
|
|
18
|
+
enabled: true,
|
|
19
|
+
port: proxyConfig.port,
|
|
20
|
+
bind: proxyConfig.bind,
|
|
21
|
+
thinkingBudget: proxyConfig.thinkingBudget,
|
|
22
|
+
thinkingModels: proxyConfig.thinkingModels,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 从 models.providers 配置中查找 DashScope 配置
|
|
27
|
+
*/
|
|
28
|
+
function resolveDashScopeModelConfig(cfg) {
|
|
29
|
+
const models = cfg.models;
|
|
30
|
+
const providers = models?.providers;
|
|
31
|
+
if (!providers)
|
|
32
|
+
return null;
|
|
33
|
+
// 先尝试精确匹配 provider 名称
|
|
34
|
+
for (const name of DASHSCOPE_PROVIDER_NAMES) {
|
|
35
|
+
const provider = providers[name];
|
|
36
|
+
if (provider?.apiKey) {
|
|
37
|
+
return {
|
|
38
|
+
providerName: name,
|
|
39
|
+
baseUrl: provider.baseUrl || DEFAULT_DASHSCOPE_URL,
|
|
40
|
+
apiKey: provider.apiKey,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 然后尝试通过 baseUrl 匹配
|
|
45
|
+
for (const [name, provider] of Object.entries(providers)) {
|
|
46
|
+
const baseUrl = provider?.baseUrl;
|
|
47
|
+
if (baseUrl?.includes("dashscope.aliyuncs.com") && provider?.apiKey) {
|
|
48
|
+
return {
|
|
49
|
+
providerName: name,
|
|
50
|
+
baseUrl,
|
|
51
|
+
apiKey: provider.apiKey,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 适配 Clawdbot PluginLogger 到 ProxyLogger 接口
|
|
59
|
+
*/
|
|
60
|
+
function adaptLogger(logger) {
|
|
61
|
+
return {
|
|
62
|
+
info: (obj, msg) => {
|
|
63
|
+
const message = msg ?? (typeof obj === "string" ? obj : JSON.stringify(obj));
|
|
64
|
+
logger.info?.(message);
|
|
65
|
+
},
|
|
66
|
+
debug: (obj, msg) => {
|
|
67
|
+
const message = msg ?? (typeof obj === "string" ? obj : JSON.stringify(obj));
|
|
68
|
+
logger.debug?.(message);
|
|
69
|
+
},
|
|
70
|
+
warn: (obj, msg) => {
|
|
71
|
+
const message = msg ?? (typeof obj === "string" ? obj : JSON.stringify(obj));
|
|
72
|
+
logger.warn?.(message);
|
|
73
|
+
},
|
|
74
|
+
error: (obj, msg) => {
|
|
75
|
+
const message = msg ?? (typeof obj === "string" ? obj : JSON.stringify(obj));
|
|
76
|
+
logger.error?.(message);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 创建 DashScope 代理服务
|
|
82
|
+
*/
|
|
83
|
+
export function createDashScopeProxyService() {
|
|
84
|
+
let proxyHandle = null;
|
|
85
|
+
return {
|
|
86
|
+
id: "dingtalk-thinking-proxy",
|
|
87
|
+
async start(ctx) {
|
|
88
|
+
const proxyConfig = resolveThinkingProxyConfig(ctx.config);
|
|
89
|
+
if (!proxyConfig) {
|
|
90
|
+
ctx.logger.debug?.("Thinking proxy not enabled");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// 从 models.providers 配置中读取 DashScope 配置
|
|
94
|
+
const dashscopeConfig = resolveDashScopeModelConfig(ctx.config);
|
|
95
|
+
if (!dashscopeConfig) {
|
|
96
|
+
ctx.logger.warn?.("DashScope provider not found in models.providers, thinking proxy disabled. " +
|
|
97
|
+
"Please configure models.providers.dashscope with baseUrl and apiKey.");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const logger = adaptLogger(ctx.logger);
|
|
101
|
+
const port = proxyConfig.port ?? 18788;
|
|
102
|
+
const bind = proxyConfig.bind ?? "127.0.0.1";
|
|
103
|
+
try {
|
|
104
|
+
const config = {
|
|
105
|
+
enabled: true,
|
|
106
|
+
port,
|
|
107
|
+
bind,
|
|
108
|
+
targetUrl: dashscopeConfig.baseUrl,
|
|
109
|
+
apiKey: dashscopeConfig.apiKey,
|
|
110
|
+
thinkingEnabled: true,
|
|
111
|
+
thinkingBudget: proxyConfig.thinkingBudget ?? 0,
|
|
112
|
+
thinkingModels: proxyConfig.thinkingModels,
|
|
113
|
+
};
|
|
114
|
+
proxyHandle = await createDashScopeProxy(config, logger);
|
|
115
|
+
ctx.logger.info?.(`Thinking proxy started on ${bind}:${port} (provider: ${dashscopeConfig.providerName})`);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
ctx.logger.error?.(`Thinking proxy failed to start: ${err?.message}`);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
async stop() {
|
|
122
|
+
if (proxyHandle) {
|
|
123
|
+
await proxyHandle.stop();
|
|
124
|
+
proxyHandle = null;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/dashscope/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 思考模式模型注册表
|
|
3
|
+
* 定义支持 enable_thinking 参数的模型列表
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 默认支持思考模式的模型集合
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_THINKING_MODELS: Set<string>;
|
|
9
|
+
/**
|
|
10
|
+
* 创建思考模式检查器
|
|
11
|
+
* @param configModels - 逗号分隔的模型列表(可选,覆盖默认)
|
|
12
|
+
* @returns 检查函数
|
|
13
|
+
*/
|
|
14
|
+
export declare function createThinkingChecker(configModels?: string): (modelId: string) => boolean;
|
|
15
|
+
//# sourceMappingURL=thinking-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-models.d.ts","sourceRoot":"","sources":["../../../src/dashscope/thinking-models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB,aAUlC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAuB9B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope 思考模式模型注册表
|
|
3
|
+
* 定义支持 enable_thinking 参数的模型列表
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 默认支持思考模式的模型集合
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_THINKING_MODELS = new Set([
|
|
9
|
+
// Qwen 系列
|
|
10
|
+
"qwen-plus",
|
|
11
|
+
"qwen-plus-latest",
|
|
12
|
+
"qwen-flash",
|
|
13
|
+
// QwQ 系列
|
|
14
|
+
"qwq-plus",
|
|
15
|
+
// 其他支持思考的模型
|
|
16
|
+
"glm-4.7",
|
|
17
|
+
"deepseek-v3.2",
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* 创建思考模式检查器
|
|
21
|
+
* @param configModels - 逗号分隔的模型列表(可选,覆盖默认)
|
|
22
|
+
* @returns 检查函数
|
|
23
|
+
*/
|
|
24
|
+
export function createThinkingChecker(configModels) {
|
|
25
|
+
let models = DEFAULT_THINKING_MODELS;
|
|
26
|
+
if (configModels?.trim()) {
|
|
27
|
+
const customModels = configModels
|
|
28
|
+
.split(",")
|
|
29
|
+
.map((s) => s.trim())
|
|
30
|
+
.filter(Boolean);
|
|
31
|
+
if (customModels.length > 0) {
|
|
32
|
+
models = new Set(customModels);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return function supportsThinking(modelId) {
|
|
36
|
+
if (!modelId)
|
|
37
|
+
return false;
|
|
38
|
+
// 精确匹配
|
|
39
|
+
if (models.has(modelId))
|
|
40
|
+
return true;
|
|
41
|
+
// 前缀匹配(处理带日期后缀的模型如 qwen-plus-2025-01-01)
|
|
42
|
+
for (const m of models) {
|
|
43
|
+
if (modelId.startsWith(`${m}-`))
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=thinking-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-models.js","sourceRoot":"","sources":["../../../src/dashscope/thinking-models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IAC7C,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,YAAY;IACZ,SAAS;IACT,UAAU;IACV,YAAY;IACZ,SAAS;IACT,eAAe;CAChB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAqB;IAErB,IAAI,MAAM,GAAG,uBAAuB,CAAC;IAErC,IAAI,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,YAAY;aAC9B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,gBAAgB,CAAC,OAAe;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO;QACP,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,yCAAyC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashScope Proxy 类型定义
|
|
3
|
+
*/
|
|
4
|
+
import type { Server } from "node:http";
|
|
5
|
+
/**
|
|
6
|
+
* DashScope 代理配置
|
|
7
|
+
*/
|
|
8
|
+
export interface DashScopeProxyConfig {
|
|
9
|
+
/** 是否启用代理 */
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** 监听端口 */
|
|
12
|
+
port: number;
|
|
13
|
+
/** 绑定地址 */
|
|
14
|
+
bind: string;
|
|
15
|
+
/** DashScope API 目标地址 */
|
|
16
|
+
targetUrl: string;
|
|
17
|
+
/** DashScope API Key */
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
/** 是否启用思考模式 */
|
|
20
|
+
thinkingEnabled: boolean;
|
|
21
|
+
/** 思考预算 (0=无限制) */
|
|
22
|
+
thinkingBudget: number;
|
|
23
|
+
/** 支持思考的模型列表 (逗号分隔) */
|
|
24
|
+
thinkingModels?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 代理日志接口
|
|
28
|
+
* 适配 Clawdbot 的 PluginLogger 接口
|
|
29
|
+
*/
|
|
30
|
+
export interface ProxyLogger {
|
|
31
|
+
info: (obj: unknown, msg?: string) => void;
|
|
32
|
+
debug: (obj: unknown, msg?: string) => void;
|
|
33
|
+
warn: (obj: unknown, msg?: string) => void;
|
|
34
|
+
error: (obj: unknown, msg?: string) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 代理服务句柄
|
|
38
|
+
*/
|
|
39
|
+
export interface ProxyHandle {
|
|
40
|
+
/** HTTP 服务器实例 */
|
|
41
|
+
server: Server;
|
|
42
|
+
/** 停止代理服务 */
|
|
43
|
+
stop: () => Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/dashscope/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dashscope/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAkB,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAkB,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAO1F,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,uBAAuB,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAiDD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA8N7B"}
|
package/dist/src/monitor.js
CHANGED
|
@@ -4,14 +4,10 @@
|
|
|
4
4
|
import { getDingTalkRuntime } from "./runtime.js";
|
|
5
5
|
import { startDingTalkStreamClient } from "./stream/client.js";
|
|
6
6
|
import { buildSessionKey, startsWithPrefix } from "./stream/message-parser.js";
|
|
7
|
-
import { sendReplyViaSessionWebhook
|
|
7
|
+
import { sendReplyViaSessionWebhook } from "./send/reply.js";
|
|
8
8
|
import { convertMarkdownForDingTalk } from "./send/markdown.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*/
|
|
12
|
-
function isGroupChat(chatType) {
|
|
13
|
-
return /group|chat|2|multi/i.test(chatType);
|
|
14
|
-
}
|
|
9
|
+
import { stripDirectiveTags, isOnlyDirectiveTags } from "./util/directive-tags.js";
|
|
10
|
+
import { applyResponsePrefix, isGroupChatType, shouldEnforcePrefix } from "./util/prefix.js";
|
|
15
11
|
/**
|
|
16
12
|
* Derive provider name from model string.
|
|
17
13
|
*/
|
|
@@ -31,6 +27,42 @@ function deriveProvider(model) {
|
|
|
31
27
|
return model.split("/")[0];
|
|
32
28
|
return undefined;
|
|
33
29
|
}
|
|
30
|
+
const ALLOWED_COMMAND_RE = /(?:^|\s)\/(new|think|thinking|model|models|verbose|v)(?=$|\s|:)/i;
|
|
31
|
+
const VERBOSE_COMMAND_RE = /(?:^|\s)\/(verbose|v)(?=$|\s|:)/i;
|
|
32
|
+
const RESET_COMMAND_RE = /(?:^|\s)\/new(?=$|\s|:)/i;
|
|
33
|
+
function hasAllowedCommandToken(text) {
|
|
34
|
+
if (!text?.trim())
|
|
35
|
+
return false;
|
|
36
|
+
return ALLOWED_COMMAND_RE.test(text);
|
|
37
|
+
}
|
|
38
|
+
function parseVerboseOverride(text) {
|
|
39
|
+
if (!text?.trim())
|
|
40
|
+
return undefined;
|
|
41
|
+
const match = text.match(VERBOSE_COMMAND_RE);
|
|
42
|
+
if (!match || match.index === undefined)
|
|
43
|
+
return undefined;
|
|
44
|
+
let i = match.index + match[0].length;
|
|
45
|
+
while (i < text.length && /\s/.test(text[i]))
|
|
46
|
+
i += 1;
|
|
47
|
+
if (text[i] === ":") {
|
|
48
|
+
i += 1;
|
|
49
|
+
while (i < text.length && /\s/.test(text[i]))
|
|
50
|
+
i += 1;
|
|
51
|
+
}
|
|
52
|
+
const argStart = i;
|
|
53
|
+
while (i < text.length && /[A-Za-z-]/.test(text[i]))
|
|
54
|
+
i += 1;
|
|
55
|
+
const raw = argStart < i ? text.slice(argStart, i).toLowerCase() : "";
|
|
56
|
+
if (!raw)
|
|
57
|
+
return undefined;
|
|
58
|
+
if (["off", "false", "no", "0", "disable", "disabled"].includes(raw))
|
|
59
|
+
return "off";
|
|
60
|
+
if (["full", "all", "everything"].includes(raw))
|
|
61
|
+
return "full";
|
|
62
|
+
if (["on", "true", "yes", "1", "minimal"].includes(raw))
|
|
63
|
+
return "on";
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
34
66
|
/**
|
|
35
67
|
* Start monitoring DingTalk for incoming messages.
|
|
36
68
|
*/
|
|
@@ -54,6 +86,8 @@ export async function monitorDingTalkProvider(opts) {
|
|
|
54
86
|
};
|
|
55
87
|
// Track response prefix per session (only apply once per conversation)
|
|
56
88
|
const prefixApplied = new Set();
|
|
89
|
+
// Track per-session verbose overrides for delivering non-final updates
|
|
90
|
+
const verboseOverrides = new Map();
|
|
57
91
|
const client = await startDingTalkStreamClient({
|
|
58
92
|
clientId: account.clientId,
|
|
59
93
|
clientSecret: account.clientSecret,
|
|
@@ -78,6 +112,7 @@ export async function monitorDingTalkProvider(opts) {
|
|
|
78
112
|
}, { once: true });
|
|
79
113
|
}
|
|
80
114
|
async function handleInboundMessage(chat) {
|
|
115
|
+
const isGroup = isGroupChatType(chat.chatType);
|
|
81
116
|
// Filter: skip self messages
|
|
82
117
|
if (account.selfUserId && chat.senderId === account.selfUserId) {
|
|
83
118
|
return;
|
|
@@ -90,11 +125,23 @@ export async function monitorDingTalkProvider(opts) {
|
|
|
90
125
|
}
|
|
91
126
|
}
|
|
92
127
|
// Filter: require prefix (for group chats)
|
|
93
|
-
if (account.requirePrefix && !startsWithPrefix(chat.text, account.requirePrefix)) {
|
|
128
|
+
if (shouldEnforcePrefix(account.requirePrefix, chat.chatType) && !startsWithPrefix(chat.text, account.requirePrefix)) {
|
|
94
129
|
return;
|
|
95
130
|
}
|
|
96
131
|
const sessionKey = buildSessionKey(chat);
|
|
97
|
-
const
|
|
132
|
+
const commandAuthorized = hasAllowedCommandToken(chat.text);
|
|
133
|
+
if (RESET_COMMAND_RE.test(chat.text)) {
|
|
134
|
+
verboseOverrides.delete(sessionKey);
|
|
135
|
+
}
|
|
136
|
+
const verboseOverride = parseVerboseOverride(chat.text);
|
|
137
|
+
if (verboseOverride) {
|
|
138
|
+
verboseOverrides.set(sessionKey, verboseOverride);
|
|
139
|
+
}
|
|
140
|
+
const allowNonFinal = verboseOverrides.get(sessionKey) === "off"
|
|
141
|
+
? false
|
|
142
|
+
: verboseOverrides.has(sessionKey)
|
|
143
|
+
? true
|
|
144
|
+
: account.showToolStatus || account.showToolResult;
|
|
98
145
|
log?.info?.({
|
|
99
146
|
eventType: chat.eventType,
|
|
100
147
|
senderId: chat.senderId,
|
|
@@ -118,6 +165,7 @@ export async function monitorDingTalkProvider(opts) {
|
|
|
118
165
|
ChatType: isGroup ? "group" : "direct",
|
|
119
166
|
SenderName: chat.senderName,
|
|
120
167
|
SenderId: chat.senderId,
|
|
168
|
+
CommandAuthorized: commandAuthorized,
|
|
121
169
|
Provider: "dingtalk",
|
|
122
170
|
Surface: "dingtalk",
|
|
123
171
|
OriginatingChannel: "dingtalk",
|
|
@@ -130,21 +178,39 @@ export async function monitorDingTalkProvider(opts) {
|
|
|
130
178
|
const dispatcherOptions = {
|
|
131
179
|
deliver: async (payload, info) => {
|
|
132
180
|
log?.info?.({ kind: info.kind, hasText: !!payload.text, textLength: payload.text?.length ?? 0 }, "deliver called");
|
|
181
|
+
if (info.kind !== "final" && !allowNonFinal) {
|
|
182
|
+
log?.debug?.({ kind: info.kind, sessionKey }, "Skipping non-final reply (verbose off)");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
133
185
|
const text = payload.text;
|
|
134
186
|
if (!text?.trim()) {
|
|
135
187
|
log?.info?.("deliver: empty text, skipping");
|
|
136
188
|
return;
|
|
137
189
|
}
|
|
190
|
+
// Check if text is only directive tags (no actual content)
|
|
191
|
+
if (isOnlyDirectiveTags(text)) {
|
|
192
|
+
log?.debug?.({ token: text.slice(0, 30) }, "Filtering directive-only text");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Strip directive tags like [[reply_to_current]], [[audio_as_voice]] etc.
|
|
196
|
+
let processedText = stripDirectiveTags(text);
|
|
197
|
+
if (!processedText) {
|
|
198
|
+
log?.debug?.({ original: text.slice(0, 30) }, "Empty after stripping directives");
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
138
201
|
// Apply response prefix to first message only
|
|
139
|
-
|
|
140
|
-
if (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
202
|
+
const shouldApplyPrefix = firstReply && account.responsePrefix && !prefixApplied.has(sessionKey);
|
|
203
|
+
if (shouldApplyPrefix) {
|
|
204
|
+
processedText = applyResponsePrefix({
|
|
205
|
+
originalText: text,
|
|
206
|
+
cleanedText: processedText,
|
|
207
|
+
responsePrefix: account.responsePrefix,
|
|
208
|
+
context: {
|
|
209
|
+
model: undefined, // Will be filled from agent response
|
|
210
|
+
provider: undefined,
|
|
211
|
+
},
|
|
212
|
+
applyPrefix: true,
|
|
144
213
|
});
|
|
145
|
-
if (prefix) {
|
|
146
|
-
processedText = `${prefix} ${text}`;
|
|
147
|
-
}
|
|
148
214
|
prefixApplied.add(sessionKey);
|
|
149
215
|
}
|
|
150
216
|
firstReply = false;
|
package/dist/src/monitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 清理 Clawdbot 输出中的内联指令标记
|
|
3
|
+
*
|
|
4
|
+
* Clawdbot 使用类似 [[reply_to_current]] 的标记来控制消息行为,
|
|
5
|
+
* 这些标记应该在发送给用户之前被移除。
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 清理文本中的指令标记
|
|
9
|
+
* @param text - 原始文本
|
|
10
|
+
* @returns 清理后的文本
|
|
11
|
+
*/
|
|
12
|
+
export declare function stripDirectiveTags(text: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* 检查文本是否只包含指令标记(没有实际内容)
|
|
15
|
+
* @param text - 原始文本
|
|
16
|
+
* @returns 是否只有标记
|
|
17
|
+
*/
|
|
18
|
+
export declare function isOnlyDirectiveTags(text: string): boolean;
|
|
19
|
+
//# sourceMappingURL=directive-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directive-tags.d.ts","sourceRoot":"","sources":["../../../src/util/directive-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAevD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIzD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 清理 Clawdbot 输出中的内联指令标记
|
|
3
|
+
*
|
|
4
|
+
* Clawdbot 使用类似 [[reply_to_current]] 的标记来控制消息行为,
|
|
5
|
+
* 这些标记应该在发送给用户之前被移除。
|
|
6
|
+
*/
|
|
7
|
+
// 匹配 [[audio_as_voice]] 标记
|
|
8
|
+
const AUDIO_TAG_RE = /\[\[\s*audio_as_voice\s*\]\]/gi;
|
|
9
|
+
// 匹配 [[reply_to_current]] 或 [[reply_to:<id>]] 标记
|
|
10
|
+
const REPLY_TAG_RE = /\[\[\s*(?:reply_to_current|reply_to\s*:\s*[^\]\n]+)\s*\]\]/gi;
|
|
11
|
+
// 匹配其他可能的控制标记 [[...]]
|
|
12
|
+
const GENERIC_TAG_RE = /\[\[\s*[a-z_]+(?:\s*:\s*[^\]\n]*)?\s*\]\]/gi;
|
|
13
|
+
/**
|
|
14
|
+
* 规范化空白字符
|
|
15
|
+
*/
|
|
16
|
+
function normalizeWhitespace(text) {
|
|
17
|
+
return text
|
|
18
|
+
.replace(/[ \t]+/g, " ")
|
|
19
|
+
.replace(/[ \t]*\n[ \t]*/g, "\n")
|
|
20
|
+
.trim();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 清理文本中的指令标记
|
|
24
|
+
* @param text - 原始文本
|
|
25
|
+
* @returns 清理后的文本
|
|
26
|
+
*/
|
|
27
|
+
export function stripDirectiveTags(text) {
|
|
28
|
+
if (!text)
|
|
29
|
+
return "";
|
|
30
|
+
let cleaned = text;
|
|
31
|
+
// 移除 audio 标记
|
|
32
|
+
cleaned = cleaned.replace(AUDIO_TAG_RE, " ");
|
|
33
|
+
// 移除 reply 标记
|
|
34
|
+
cleaned = cleaned.replace(REPLY_TAG_RE, " ");
|
|
35
|
+
// 移除其他 [[...]] 格式的标记(作为兜底)
|
|
36
|
+
cleaned = cleaned.replace(GENERIC_TAG_RE, " ");
|
|
37
|
+
return normalizeWhitespace(cleaned);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 检查文本是否只包含指令标记(没有实际内容)
|
|
41
|
+
* @param text - 原始文本
|
|
42
|
+
* @returns 是否只有标记
|
|
43
|
+
*/
|
|
44
|
+
export function isOnlyDirectiveTags(text) {
|
|
45
|
+
if (!text)
|
|
46
|
+
return true;
|
|
47
|
+
const cleaned = stripDirectiveTags(text);
|
|
48
|
+
return !cleaned || cleaned.length === 0;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=directive-tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directive-tags.js","sourceRoot":"","sources":["../../../src/util/directive-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2BAA2B;AAC3B,MAAM,YAAY,GAAG,gCAAgC,CAAC;AAEtD,iDAAiD;AACjD,MAAM,YAAY,GAAG,8DAA8D,CAAC;AAEpF,sBAAsB;AACtB,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAErE;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,cAAc;IACd,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE7C,cAAc;IACd,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAE7C,2BAA2B;IAC3B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAE/C,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function isGroupChatType(chatType?: string): boolean;
|
|
2
|
+
export declare function shouldEnforcePrefix(requirePrefix: string | undefined, chatType?: string): boolean;
|
|
3
|
+
export declare function applyResponsePrefix(params: {
|
|
4
|
+
originalText: string;
|
|
5
|
+
cleanedText?: string;
|
|
6
|
+
responsePrefix?: string;
|
|
7
|
+
context?: {
|
|
8
|
+
model?: string;
|
|
9
|
+
provider?: string;
|
|
10
|
+
identity?: string;
|
|
11
|
+
};
|
|
12
|
+
applyPrefix?: boolean;
|
|
13
|
+
}): string;
|
|
14
|
+
//# sourceMappingURL=prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefix.d.ts","sourceRoot":"","sources":["../../../src/util/prefix.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAET;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAcT"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { resolveResponsePrefix } from "../send/reply.js";
|
|
2
|
+
export function isGroupChatType(chatType) {
|
|
3
|
+
return /group|chat|2|multi/i.test(chatType ?? "");
|
|
4
|
+
}
|
|
5
|
+
export function shouldEnforcePrefix(requirePrefix, chatType) {
|
|
6
|
+
return Boolean(requirePrefix) && isGroupChatType(chatType);
|
|
7
|
+
}
|
|
8
|
+
export function applyResponsePrefix(params) {
|
|
9
|
+
const { originalText, cleanedText, responsePrefix, context, applyPrefix, } = params;
|
|
10
|
+
const baseText = cleanedText?.trim() ? cleanedText : originalText;
|
|
11
|
+
if (!applyPrefix || !responsePrefix)
|
|
12
|
+
return baseText;
|
|
13
|
+
const prefix = resolveResponsePrefix(responsePrefix, context ?? {});
|
|
14
|
+
return prefix ? `${prefix} ${baseText}` : baseText;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefix.js","sourceRoot":"","sources":["../../../src/util/prefix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,aAAiC,EACjC,QAAiB;IAEjB,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAMnC;IACC,MAAM,EACJ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,GACZ,GAAG,MAAM,CAAC;IACX,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;IAElE,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC;IAErD,MAAM,MAAM,GAAG,qBAAqB,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrD,CAAC"}
|
package/package.json
CHANGED