mozi-bot 1.0.0
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/LICENSE +190 -0
- package/README.md +467 -0
- package/dist/agents/agent.d.ts +118 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +686 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/compaction.d.ts +78 -0
- package/dist/agents/compaction.d.ts.map +1 -0
- package/dist/agents/compaction.js +350 -0
- package/dist/agents/compaction.js.map +1 -0
- package/dist/agents/failover-error.d.ts +42 -0
- package/dist/agents/failover-error.d.ts.map +1 -0
- package/dist/agents/failover-error.js +171 -0
- package/dist/agents/failover-error.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/model-fallback.d.ts +54 -0
- package/dist/agents/model-fallback.d.ts.map +1 -0
- package/dist/agents/model-fallback.js +227 -0
- package/dist/agents/model-fallback.js.map +1 -0
- package/dist/agents/session-store.d.ts +53 -0
- package/dist/agents/session-store.d.ts.map +1 -0
- package/dist/agents/session-store.js +217 -0
- package/dist/agents/session-store.js.map +1 -0
- package/dist/agents/system-prompt.d.ts +29 -0
- package/dist/agents/system-prompt.d.ts.map +1 -0
- package/dist/agents/system-prompt.js +299 -0
- package/dist/agents/system-prompt.js.map +1 -0
- package/dist/channels/common/base.d.ts +40 -0
- package/dist/channels/common/base.d.ts.map +1 -0
- package/dist/channels/common/base.js +23 -0
- package/dist/channels/common/base.js.map +1 -0
- package/dist/channels/common/index.d.ts +21 -0
- package/dist/channels/common/index.d.ts.map +1 -0
- package/dist/channels/common/index.js +66 -0
- package/dist/channels/common/index.js.map +1 -0
- package/dist/channels/dingtalk/api.d.ts +30 -0
- package/dist/channels/dingtalk/api.d.ts.map +1 -0
- package/dist/channels/dingtalk/api.js +149 -0
- package/dist/channels/dingtalk/api.js.map +1 -0
- package/dist/channels/dingtalk/events.d.ts +80 -0
- package/dist/channels/dingtalk/events.d.ts.map +1 -0
- package/dist/channels/dingtalk/events.js +92 -0
- package/dist/channels/dingtalk/events.js.map +1 -0
- package/dist/channels/dingtalk/index.d.ts +51 -0
- package/dist/channels/dingtalk/index.d.ts.map +1 -0
- package/dist/channels/dingtalk/index.js +231 -0
- package/dist/channels/dingtalk/index.js.map +1 -0
- package/dist/channels/dingtalk/stream.d.ts +31 -0
- package/dist/channels/dingtalk/stream.d.ts.map +1 -0
- package/dist/channels/dingtalk/stream.js +116 -0
- package/dist/channels/dingtalk/stream.js.map +1 -0
- package/dist/channels/feishu/api.d.ts +33 -0
- package/dist/channels/feishu/api.d.ts.map +1 -0
- package/dist/channels/feishu/api.js +120 -0
- package/dist/channels/feishu/api.js.map +1 -0
- package/dist/channels/feishu/events.d.ts +87 -0
- package/dist/channels/feishu/events.d.ts.map +1 -0
- package/dist/channels/feishu/events.js +163 -0
- package/dist/channels/feishu/events.js.map +1 -0
- package/dist/channels/feishu/index.d.ts +46 -0
- package/dist/channels/feishu/index.d.ts.map +1 -0
- package/dist/channels/feishu/index.js +207 -0
- package/dist/channels/feishu/index.js.map +1 -0
- package/dist/channels/feishu/websocket.d.ts +32 -0
- package/dist/channels/feishu/websocket.d.ts.map +1 -0
- package/dist/channels/feishu/websocket.js +121 -0
- package/dist/channels/feishu/websocket.js.map +1 -0
- package/dist/channels/index.d.ts +9 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +9 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +468 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/index.d.ts +54 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +171 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/config/index.d.ts +201 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +261 -0
- package/dist/config/index.js.map +1 -0
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/server.d.ts +42 -0
- package/dist/gateway/server.d.ts.map +1 -0
- package/dist/gateway/server.js +235 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/hooks/index.d.ts +168 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +148 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +94 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +282 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/plugins/index.d.ts +57 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +103 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/providers/anthropic-compatible.d.ts +48 -0
- package/dist/providers/anthropic-compatible.d.ts.map +1 -0
- package/dist/providers/anthropic-compatible.js +380 -0
- package/dist/providers/anthropic-compatible.js.map +1 -0
- package/dist/providers/base.d.ts +26 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +58 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/custom-openai.d.ts +66 -0
- package/dist/providers/custom-openai.d.ts.map +1 -0
- package/dist/providers/custom-openai.js +255 -0
- package/dist/providers/custom-openai.js.map +1 -0
- package/dist/providers/dashscope.d.ts +15 -0
- package/dist/providers/dashscope.d.ts.map +1 -0
- package/dist/providers/dashscope.js +237 -0
- package/dist/providers/dashscope.js.map +1 -0
- package/dist/providers/deepseek.d.ts +10 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +57 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/index.d.ts +33 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +142 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/kimi.d.ts +10 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +83 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/minimax.d.ts +20 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +252 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/modelscope.d.ts +15 -0
- package/dist/providers/modelscope.d.ts.map +1 -0
- package/dist/providers/modelscope.js +237 -0
- package/dist/providers/modelscope.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +57 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +193 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/stepfun.d.ts +10 -0
- package/dist/providers/stepfun.d.ts.map +1 -0
- package/dist/providers/stepfun.js +125 -0
- package/dist/providers/stepfun.js.map +1 -0
- package/dist/providers/zhipu.d.ts +15 -0
- package/dist/providers/zhipu.d.ts.map +1 -0
- package/dist/providers/zhipu.js +247 -0
- package/dist/providers/zhipu.js.map +1 -0
- package/dist/sessions/index.d.ts +6 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +6 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +45 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +268 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +110 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +6 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/tools/builtin/apply-patch.d.ts +8 -0
- package/dist/tools/builtin/apply-patch.d.ts.map +1 -0
- package/dist/tools/builtin/apply-patch.js +272 -0
- package/dist/tools/builtin/apply-patch.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts +25 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -0
- package/dist/tools/builtin/bash.js +212 -0
- package/dist/tools/builtin/bash.js.map +1 -0
- package/dist/tools/builtin/browser.d.ts +12 -0
- package/dist/tools/builtin/browser.d.ts.map +1 -0
- package/dist/tools/builtin/browser.js +693 -0
- package/dist/tools/builtin/browser.js.map +1 -0
- package/dist/tools/builtin/filesystem.d.ts +29 -0
- package/dist/tools/builtin/filesystem.d.ts.map +1 -0
- package/dist/tools/builtin/filesystem.js +484 -0
- package/dist/tools/builtin/filesystem.js.map +1 -0
- package/dist/tools/builtin/image.d.ts +13 -0
- package/dist/tools/builtin/image.d.ts.map +1 -0
- package/dist/tools/builtin/image.js +126 -0
- package/dist/tools/builtin/image.js.map +1 -0
- package/dist/tools/builtin/index.d.ts +30 -0
- package/dist/tools/builtin/index.d.ts.map +1 -0
- package/dist/tools/builtin/index.js +55 -0
- package/dist/tools/builtin/index.js.map +1 -0
- package/dist/tools/builtin/process-registry.d.ts +71 -0
- package/dist/tools/builtin/process-registry.d.ts.map +1 -0
- package/dist/tools/builtin/process-registry.js +172 -0
- package/dist/tools/builtin/process-registry.js.map +1 -0
- package/dist/tools/builtin/process-tool.d.ts +8 -0
- package/dist/tools/builtin/process-tool.d.ts.map +1 -0
- package/dist/tools/builtin/process-tool.js +279 -0
- package/dist/tools/builtin/process-tool.js.map +1 -0
- package/dist/tools/builtin/subagent.d.ts +33 -0
- package/dist/tools/builtin/subagent.d.ts.map +1 -0
- package/dist/tools/builtin/subagent.js +185 -0
- package/dist/tools/builtin/subagent.js.map +1 -0
- package/dist/tools/builtin/system.d.ts +11 -0
- package/dist/tools/builtin/system.d.ts.map +1 -0
- package/dist/tools/builtin/system.js +144 -0
- package/dist/tools/builtin/system.js.map +1 -0
- package/dist/tools/builtin/web.d.ts +9 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js +87 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/common.d.ts +45 -0
- package/dist/tools/common.d.ts.map +1 -0
- package/dist/tools/common.js +129 -0
- package/dist/tools/common.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +33 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +174 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +58 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +11 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/index.d.ts +280 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +34 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +35 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +114 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +94 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/web/index.d.ts +7 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +7 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/static.d.ts +12 -0
- package/dist/web/static.d.ts.map +1 -0
- package/dist/web/static.js +1260 -0
- package/dist/web/static.js.map +1 -0
- package/dist/web/types.d.ts +95 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +5 -0
- package/dist/web/types.js.map +1 -0
- package/dist/web/websocket.d.ts +58 -0
- package/dist/web/websocket.d.ts.map +1 -0
- package/dist/web/websocket.js +371 -0
- package/dist/web/websocket.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置工具 - 系统工具
|
|
3
|
+
*/
|
|
4
|
+
import { Type } from "@sinclair/typebox";
|
|
5
|
+
import { jsonResult, readStringParam, readNumberParam } from "../common.js";
|
|
6
|
+
/** 当前时间工具 */
|
|
7
|
+
export function createCurrentTimeTool() {
|
|
8
|
+
return {
|
|
9
|
+
name: "current_time",
|
|
10
|
+
label: "Current Time",
|
|
11
|
+
description: "Get the current date and time.",
|
|
12
|
+
parameters: Type.Object({
|
|
13
|
+
timezone: Type.Optional(Type.String({ description: "Timezone (e.g., 'Asia/Shanghai', 'UTC')" })),
|
|
14
|
+
format: Type.Optional(Type.String({ description: "Format: 'iso', 'locale', or 'unix'" })),
|
|
15
|
+
}),
|
|
16
|
+
execute: async (_toolCallId, args) => {
|
|
17
|
+
const params = args;
|
|
18
|
+
const timezone = readStringParam(params, "timezone") ?? "Asia/Shanghai";
|
|
19
|
+
const format = readStringParam(params, "format") ?? "locale";
|
|
20
|
+
const now = new Date();
|
|
21
|
+
let formatted;
|
|
22
|
+
switch (format) {
|
|
23
|
+
case "unix":
|
|
24
|
+
formatted = Math.floor(now.getTime() / 1000);
|
|
25
|
+
break;
|
|
26
|
+
case "iso":
|
|
27
|
+
formatted = now.toISOString();
|
|
28
|
+
break;
|
|
29
|
+
case "locale":
|
|
30
|
+
default:
|
|
31
|
+
formatted = now.toLocaleString("zh-CN", { timeZone: timezone });
|
|
32
|
+
}
|
|
33
|
+
return jsonResult({
|
|
34
|
+
status: "success",
|
|
35
|
+
time: formatted,
|
|
36
|
+
timezone,
|
|
37
|
+
timestamp: now.getTime(),
|
|
38
|
+
iso: now.toISOString(),
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** 计算器工具 */
|
|
44
|
+
export function createCalculatorTool() {
|
|
45
|
+
return {
|
|
46
|
+
name: "calculator",
|
|
47
|
+
label: "Calculator",
|
|
48
|
+
description: "Perform mathematical calculations. Supports basic arithmetic and common functions.",
|
|
49
|
+
parameters: Type.Object({
|
|
50
|
+
expression: Type.String({ description: "Mathematical expression to evaluate (e.g., '2 + 2', 'sqrt(16)', 'sin(PI/2)')" }),
|
|
51
|
+
}),
|
|
52
|
+
execute: async (_toolCallId, args) => {
|
|
53
|
+
const params = args;
|
|
54
|
+
const expression = readStringParam(params, "expression", { required: true });
|
|
55
|
+
try {
|
|
56
|
+
// 安全的数学表达式求值
|
|
57
|
+
const result = evaluateMathExpression(expression);
|
|
58
|
+
return jsonResult({
|
|
59
|
+
status: "success",
|
|
60
|
+
expression,
|
|
61
|
+
result,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return jsonResult({
|
|
66
|
+
status: "error",
|
|
67
|
+
expression,
|
|
68
|
+
error: error instanceof Error ? error.message : String(error),
|
|
69
|
+
}, true);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** 安全的数学表达式求值 */
|
|
75
|
+
function evaluateMathExpression(expr) {
|
|
76
|
+
// 替换常量
|
|
77
|
+
let sanitized = expr
|
|
78
|
+
.replace(/\bPI\b/gi, String(Math.PI))
|
|
79
|
+
.replace(/\bE\b/g, String(Math.E));
|
|
80
|
+
// 替换函数
|
|
81
|
+
const mathFunctions = {
|
|
82
|
+
sqrt: Math.sqrt,
|
|
83
|
+
abs: Math.abs,
|
|
84
|
+
sin: Math.sin,
|
|
85
|
+
cos: Math.cos,
|
|
86
|
+
tan: Math.tan,
|
|
87
|
+
asin: Math.asin,
|
|
88
|
+
acos: Math.acos,
|
|
89
|
+
atan: Math.atan,
|
|
90
|
+
log: Math.log,
|
|
91
|
+
log10: Math.log10,
|
|
92
|
+
exp: Math.exp,
|
|
93
|
+
floor: Math.floor,
|
|
94
|
+
ceil: Math.ceil,
|
|
95
|
+
round: Math.round,
|
|
96
|
+
};
|
|
97
|
+
for (const [name, fn] of Object.entries(mathFunctions)) {
|
|
98
|
+
const regex = new RegExp(`\\b${name}\\s*\\(([^)]+)\\)`, "gi");
|
|
99
|
+
sanitized = sanitized.replace(regex, (_, arg) => {
|
|
100
|
+
const value = evaluateMathExpression(arg);
|
|
101
|
+
return String(fn(value));
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// 只允许数字、运算符和括号
|
|
105
|
+
if (!/^[\d\s+\-*/().]+$/.test(sanitized)) {
|
|
106
|
+
throw new Error("Invalid expression: contains disallowed characters");
|
|
107
|
+
}
|
|
108
|
+
// 使用 Function 安全求值 (只允许数学运算)
|
|
109
|
+
const result = Function(`"use strict"; return (${sanitized})`)();
|
|
110
|
+
if (typeof result !== "number" || !Number.isFinite(result)) {
|
|
111
|
+
throw new Error("Result is not a valid number");
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/** 延迟工具 (用于测试) */
|
|
116
|
+
export function createDelayTool() {
|
|
117
|
+
return {
|
|
118
|
+
name: "delay",
|
|
119
|
+
label: "Delay",
|
|
120
|
+
description: "Wait for a specified duration. Useful for testing or rate limiting.",
|
|
121
|
+
parameters: Type.Object({
|
|
122
|
+
seconds: Type.Number({ description: "Duration to wait in seconds (max 30)" }),
|
|
123
|
+
}),
|
|
124
|
+
execute: async (_toolCallId, args, signal) => {
|
|
125
|
+
const params = args;
|
|
126
|
+
const seconds = readNumberParam(params, "seconds", { required: true, min: 0, max: 30 });
|
|
127
|
+
const ms = seconds * 1000;
|
|
128
|
+
const start = Date.now();
|
|
129
|
+
await new Promise((resolve, reject) => {
|
|
130
|
+
const timeout = setTimeout(resolve, ms);
|
|
131
|
+
signal?.addEventListener("abort", () => {
|
|
132
|
+
clearTimeout(timeout);
|
|
133
|
+
reject(new Error("Aborted"));
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
return jsonResult({
|
|
137
|
+
status: "success",
|
|
138
|
+
requested: seconds,
|
|
139
|
+
actual: (Date.now() - start) / 1000,
|
|
140
|
+
});
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../../src/tools/builtin/system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/web.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,aAAa;AACb,wBAAgB,mBAAmB,IAAI,IAAI,CAyB1C;AAED,aAAa;AACb,wBAAgB,kBAAkB,IAAI,IAAI,CA2DzC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置工具 - 网络搜索和获取
|
|
3
|
+
*/
|
|
4
|
+
import { Type } from "@sinclair/typebox";
|
|
5
|
+
import { jsonResult, errorResult, readStringParam, readNumberParam } from "../common.js";
|
|
6
|
+
/** 网络搜索工具 */
|
|
7
|
+
export function createWebSearchTool() {
|
|
8
|
+
return {
|
|
9
|
+
name: "web_search",
|
|
10
|
+
label: "Web Search",
|
|
11
|
+
description: "Search the web for information. Returns search results with titles, snippets, and URLs.",
|
|
12
|
+
parameters: Type.Object({
|
|
13
|
+
query: Type.String({ description: "Search query" }),
|
|
14
|
+
maxResults: Type.Optional(Type.Number({ description: "Maximum number of results (default: 5)" })),
|
|
15
|
+
}),
|
|
16
|
+
execute: async (_toolCallId, args) => {
|
|
17
|
+
const params = args;
|
|
18
|
+
const query = readStringParam(params, "query", { required: true });
|
|
19
|
+
const maxResults = readNumberParam(params, "maxResults", { min: 1, max: 10 }) ?? 5;
|
|
20
|
+
// 这里可以集成实际的搜索 API (如 Bing, Google, SerpAPI 等)
|
|
21
|
+
// 目前返回模拟结果
|
|
22
|
+
return jsonResult({
|
|
23
|
+
status: "success",
|
|
24
|
+
query,
|
|
25
|
+
message: "Web search requires API integration. Configure a search provider.",
|
|
26
|
+
results: [],
|
|
27
|
+
note: "Integrate with Bing Search API, Google Custom Search, or SerpAPI",
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** 网页获取工具 */
|
|
33
|
+
export function createWebFetchTool() {
|
|
34
|
+
return {
|
|
35
|
+
name: "web_fetch",
|
|
36
|
+
label: "Web Fetch",
|
|
37
|
+
description: "Fetch content from a URL. Returns the page content as text.",
|
|
38
|
+
parameters: Type.Object({
|
|
39
|
+
url: Type.String({ description: "URL to fetch" }),
|
|
40
|
+
maxLength: Type.Optional(Type.Number({ description: "Maximum content length (default: 10000)" })),
|
|
41
|
+
}),
|
|
42
|
+
execute: async (_toolCallId, args) => {
|
|
43
|
+
const params = args;
|
|
44
|
+
const url = readStringParam(params, "url", { required: true });
|
|
45
|
+
const maxLength = readNumberParam(params, "maxLength", { min: 100 }) ?? 10000;
|
|
46
|
+
try {
|
|
47
|
+
// 验证 URL
|
|
48
|
+
new URL(url);
|
|
49
|
+
const response = await fetch(url, {
|
|
50
|
+
headers: {
|
|
51
|
+
"User-Agent": "Mozilla/5.0 (compatible; MoziBot/1.0)",
|
|
52
|
+
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
return errorResult(`HTTP ${response.status}: ${response.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
59
|
+
let content = await response.text();
|
|
60
|
+
// 截断过长内容
|
|
61
|
+
if (content.length > maxLength) {
|
|
62
|
+
content = content.slice(0, maxLength) + "\n...[truncated]";
|
|
63
|
+
}
|
|
64
|
+
// 简单的 HTML 清理 (移除脚本和样式)
|
|
65
|
+
if (contentType.includes("text/html")) {
|
|
66
|
+
content = content
|
|
67
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
|
|
68
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
|
|
69
|
+
.replace(/<[^>]+>/g, " ")
|
|
70
|
+
.replace(/\s+/g, " ")
|
|
71
|
+
.trim();
|
|
72
|
+
}
|
|
73
|
+
return jsonResult({
|
|
74
|
+
status: "success",
|
|
75
|
+
url,
|
|
76
|
+
contentType,
|
|
77
|
+
length: content.length,
|
|
78
|
+
content,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
return errorResult(error instanceof Error ? error.message : String(error));
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/tools/builtin/web.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具系统 - 通用工具函数
|
|
3
|
+
*/
|
|
4
|
+
import type { ToolResult } from "./types.js";
|
|
5
|
+
/** 创建 JSON 结果 */
|
|
6
|
+
export declare function jsonResult(payload: unknown, isError?: boolean): ToolResult;
|
|
7
|
+
/** 创建文本结果 */
|
|
8
|
+
export declare function textResult(text: string, details?: unknown, isError?: boolean): ToolResult;
|
|
9
|
+
/** 创建错误结果 */
|
|
10
|
+
export declare function errorResult(error: string | Error): ToolResult;
|
|
11
|
+
/** 创建图片结果 */
|
|
12
|
+
export declare function imageResult(params: {
|
|
13
|
+
label: string;
|
|
14
|
+
base64: string;
|
|
15
|
+
mimeType: string;
|
|
16
|
+
extraText?: string;
|
|
17
|
+
details?: Record<string, unknown>;
|
|
18
|
+
}): ToolResult;
|
|
19
|
+
/** 读取字符串参数 */
|
|
20
|
+
export declare function readStringParam(params: Record<string, unknown>, key: string, options?: {
|
|
21
|
+
required?: boolean;
|
|
22
|
+
trim?: boolean;
|
|
23
|
+
label?: string;
|
|
24
|
+
}): string | undefined;
|
|
25
|
+
/** 读取数字参数 */
|
|
26
|
+
export declare function readNumberParam(params: Record<string, unknown>, key: string, options?: {
|
|
27
|
+
required?: boolean;
|
|
28
|
+
min?: number;
|
|
29
|
+
max?: number;
|
|
30
|
+
label?: string;
|
|
31
|
+
}): number | undefined;
|
|
32
|
+
/** 读取布尔参数 */
|
|
33
|
+
export declare function readBooleanParam(params: Record<string, unknown>, key: string, options?: {
|
|
34
|
+
defaultValue?: boolean;
|
|
35
|
+
}): boolean;
|
|
36
|
+
/** 读取字符串数组参数 */
|
|
37
|
+
export declare function readStringArrayParam(params: Record<string, unknown>, key: string, options?: {
|
|
38
|
+
required?: boolean;
|
|
39
|
+
label?: string;
|
|
40
|
+
}): string[] | undefined;
|
|
41
|
+
/** 截断文本 */
|
|
42
|
+
export declare function truncateToolText(text: string, maxLength?: number): string;
|
|
43
|
+
/** 提取工具结果文本 */
|
|
44
|
+
export declare function extractToolResultText(result: ToolResult): string;
|
|
45
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAEhE,iBAAiB;AACjB,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,UAAU,CAWxE;AAED,aAAa;AACb,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,UAAQ,GAAG,UAAU,CAMvF;AAED,aAAa;AACb,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,CAY7D;AAED,aAAa;AACb,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GAAG,UAAU,CASb;AAED,cAAc;AACd,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,MAAM,GAAG,SAAS,CAapB;AAED,aAAa;AACb,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,MAAM,GAAG,SAAS,CAsBpB;AAED,aAAa;AACb,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,OAAO,CAUT;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,MAAM,EAAE,GAAG,SAAS,CAkBtB;AAED,WAAW;AACX,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,MAAM,CAGvE;AAED,eAAe;AACf,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAKhE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具系统 - 通用工具函数
|
|
3
|
+
*/
|
|
4
|
+
/** 创建 JSON 结果 */
|
|
5
|
+
export function jsonResult(payload, isError = false) {
|
|
6
|
+
return {
|
|
7
|
+
content: [
|
|
8
|
+
{
|
|
9
|
+
type: "text",
|
|
10
|
+
text: JSON.stringify(payload, null, 2),
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
details: payload,
|
|
14
|
+
isError,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** 创建文本结果 */
|
|
18
|
+
export function textResult(text, details, isError = false) {
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: "text", text }],
|
|
21
|
+
details,
|
|
22
|
+
isError,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** 创建错误结果 */
|
|
26
|
+
export function errorResult(error) {
|
|
27
|
+
const message = error instanceof Error ? error.message : error;
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: JSON.stringify({ status: "error", error: message }, null, 2),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
details: { status: "error", error: message },
|
|
36
|
+
isError: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** 创建图片结果 */
|
|
40
|
+
export function imageResult(params) {
|
|
41
|
+
const content = [
|
|
42
|
+
{ type: "text", text: params.extraText ?? `[Image: ${params.label}]` },
|
|
43
|
+
{ type: "image", data: params.base64, mimeType: params.mimeType },
|
|
44
|
+
];
|
|
45
|
+
return {
|
|
46
|
+
content,
|
|
47
|
+
details: params.details,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** 读取字符串参数 */
|
|
51
|
+
export function readStringParam(params, key, options = {}) {
|
|
52
|
+
const raw = params[key];
|
|
53
|
+
if (typeof raw !== "string") {
|
|
54
|
+
if (options.required) {
|
|
55
|
+
throw new Error(`${options.label ?? key} is required`);
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const value = options.trim !== false ? raw.trim() : raw;
|
|
60
|
+
if (!value && options.required) {
|
|
61
|
+
throw new Error(`${options.label ?? key} is required`);
|
|
62
|
+
}
|
|
63
|
+
return value || undefined;
|
|
64
|
+
}
|
|
65
|
+
/** 读取数字参数 */
|
|
66
|
+
export function readNumberParam(params, key, options = {}) {
|
|
67
|
+
const raw = params[key];
|
|
68
|
+
if (raw === undefined || raw === null) {
|
|
69
|
+
if (options.required) {
|
|
70
|
+
throw new Error(`${options.label ?? key} is required`);
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const value = typeof raw === "number" ? raw : Number(raw);
|
|
75
|
+
if (Number.isNaN(value)) {
|
|
76
|
+
throw new Error(`${options.label ?? key} must be a number`);
|
|
77
|
+
}
|
|
78
|
+
if (options.min !== undefined && value < options.min) {
|
|
79
|
+
throw new Error(`${options.label ?? key} must be >= ${options.min}`);
|
|
80
|
+
}
|
|
81
|
+
if (options.max !== undefined && value > options.max) {
|
|
82
|
+
throw new Error(`${options.label ?? key} must be <= ${options.max}`);
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
/** 读取布尔参数 */
|
|
87
|
+
export function readBooleanParam(params, key, options = {}) {
|
|
88
|
+
const raw = params[key];
|
|
89
|
+
if (raw === undefined || raw === null) {
|
|
90
|
+
return options.defaultValue ?? false;
|
|
91
|
+
}
|
|
92
|
+
if (typeof raw === "boolean")
|
|
93
|
+
return raw;
|
|
94
|
+
if (typeof raw === "string") {
|
|
95
|
+
return raw.toLowerCase() === "true" || raw === "1";
|
|
96
|
+
}
|
|
97
|
+
return Boolean(raw);
|
|
98
|
+
}
|
|
99
|
+
/** 读取字符串数组参数 */
|
|
100
|
+
export function readStringArrayParam(params, key, options = {}) {
|
|
101
|
+
const raw = params[key];
|
|
102
|
+
if (raw === undefined || raw === null) {
|
|
103
|
+
if (options.required) {
|
|
104
|
+
throw new Error(`${options.label ?? key} is required`);
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
if (Array.isArray(raw)) {
|
|
109
|
+
return raw.map((item) => String(item));
|
|
110
|
+
}
|
|
111
|
+
if (typeof raw === "string") {
|
|
112
|
+
return raw.split(",").map((s) => s.trim()).filter(Boolean);
|
|
113
|
+
}
|
|
114
|
+
throw new Error(`${options.label ?? key} must be an array`);
|
|
115
|
+
}
|
|
116
|
+
/** 截断文本 */
|
|
117
|
+
export function truncateToolText(text, maxLength = 8000) {
|
|
118
|
+
if (text.length <= maxLength)
|
|
119
|
+
return text;
|
|
120
|
+
return text.slice(0, maxLength) + "\n...[truncated]";
|
|
121
|
+
}
|
|
122
|
+
/** 提取工具结果文本 */
|
|
123
|
+
export function extractToolResultText(result) {
|
|
124
|
+
return result.content
|
|
125
|
+
.filter((item) => item.type === "text")
|
|
126
|
+
.map((item) => item.text)
|
|
127
|
+
.join("\n");
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具注册表和策略过滤
|
|
3
|
+
*/
|
|
4
|
+
import type { Tool, ToolPolicy, ToolCall, ToolCallResult } from "./types.js";
|
|
5
|
+
/** 注册工具 */
|
|
6
|
+
export declare function registerTool(tool: Tool): void;
|
|
7
|
+
/** 批量注册工具 */
|
|
8
|
+
export declare function registerTools(tools: Tool[]): void;
|
|
9
|
+
/** 获取工具 */
|
|
10
|
+
export declare function getTool(name: string): Tool | undefined;
|
|
11
|
+
/** 获取所有工具 */
|
|
12
|
+
export declare function getAllTools(): Tool[];
|
|
13
|
+
/** 清除所有工具 */
|
|
14
|
+
export declare function clearTools(): void;
|
|
15
|
+
/** 按策略过滤工具 */
|
|
16
|
+
export declare function filterToolsByPolicy(tools: Tool[], policy?: ToolPolicy): Tool[];
|
|
17
|
+
/** 执行单个工具调用 */
|
|
18
|
+
export declare function executeToolCall(toolCall: ToolCall, signal?: AbortSignal): Promise<ToolCallResult>;
|
|
19
|
+
/** 批量执行工具调用 */
|
|
20
|
+
export declare function executeToolCalls(toolCalls: ToolCall[], options?: {
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
parallel?: boolean;
|
|
23
|
+
}): Promise<ToolCallResult[]>;
|
|
24
|
+
/** 将工具转换为 OpenAI 函数格式 */
|
|
25
|
+
export declare function toolsToOpenAIFunctions(tools: Tool[]): Array<{
|
|
26
|
+
type: "function";
|
|
27
|
+
function: {
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
parameters: unknown;
|
|
31
|
+
};
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAUzF,WAAW;AACX,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAG7C;AAED,aAAa;AACb,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAIjD;AAED,WAAW;AACX,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEtD;AAED,aAAa;AACb,wBAAgB,WAAW,IAAI,IAAI,EAAE,CAEpC;AAED,aAAa;AACb,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AA2DD,cAAc;AACd,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,CAqB9E;AAID,eAAe;AACf,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA2CzB;AAED,eAAe;AACf,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACA,OAAO,CAAC,cAAc,EAAE,CAAC,CAsB3B;AAED,yBAAyB;AACzB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3D,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;CACH,CAAC,CASD"}
|