@glodon-aiot/bot-client-sdk 3.25.1-alpha.7 → 3.26.0-alpha.5
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 +572 -98
- package/dist/es/AgentSession.mjs +230 -165
- package/dist/es/BotClient.mjs +186 -136
- package/dist/es/Config.mjs +89 -26
- package/dist/es/Session.mjs +12 -0
- package/dist/es/api/index.mjs +42 -33
- package/dist/es/builtinTools/browserRuntime/BrowserCommandRunner.mjs +201 -0
- package/dist/es/builtinTools/browserRuntime/PythonRunner.mjs +356 -0
- package/dist/es/builtinTools/browserRuntime/WorkspaceBashFs.mjs +350 -0
- package/dist/es/builtinTools/browserRuntime/assets.mjs +9 -0
- package/dist/es/builtinTools/browserRuntime/loadBash.mjs +17 -0
- package/dist/es/builtinTools/browserRuntime/pyodideRunner.py.mjs +96 -0
- package/dist/es/builtinTools/browserRuntime/pyodideWorker.mjs +242 -0
- package/dist/es/builtinTools/command.mjs +56 -0
- package/dist/es/builtinTools/constants.mjs +10 -0
- package/dist/es/builtinTools/createBuiltinToolsPlugin.mjs +236 -0
- package/dist/es/builtinTools/overview.mjs +77 -0
- package/dist/es/builtinTools/paths.mjs +63 -0
- package/dist/es/builtinTools/schemas.mjs +216 -0
- package/dist/es/builtinTools/tools.mjs +471 -0
- package/dist/es/index.mjs +69 -9
- package/dist/es/localFiles/adapters/FileSystemAccessAdapter.mjs +264 -0
- package/dist/es/localFiles/adapters/HostBridgeAdapter.mjs +233 -0
- package/dist/es/localFiles/adapters/MemoryWorkspaceAdapter.mjs +197 -0
- package/dist/es/localFiles/adapters/WorkspaceFileAdapter.mjs +54 -0
- package/dist/es/localFiles/adapters/fsaTypes.mjs +9 -0
- package/dist/es/localFiles/constants.mjs +47 -0
- package/dist/es/localFiles/createLocalFilesPlugin.mjs +255 -0
- package/dist/es/localFiles/errors.mjs +57 -0
- package/dist/es/localFiles/host/connectHostBridge.mjs +54 -0
- package/dist/es/localFiles/host/protocol.mjs +27 -0
- package/dist/es/localFiles/limits.mjs +22 -0
- package/dist/es/localFiles/schemas.mjs +312 -0
- package/dist/es/localFiles/security/downloadUrlPolicy.mjs +39 -0
- package/dist/es/localFiles/security/glob.mjs +28 -0
- package/dist/es/localFiles/security/pathPolicy.mjs +59 -0
- package/dist/es/localFiles/security/sensitiveFiles.mjs +115 -0
- package/dist/es/localFiles/tools/readTools.mjs +333 -0
- package/dist/es/localFiles/tools/runtime.mjs +108 -0
- package/dist/es/localFiles/tools/transferTools.mjs +228 -0
- package/dist/es/localFiles/tools/writeTools.mjs +173 -0
- package/dist/es/localFiles/transfer/SessionFileTransfer.mjs +111 -0
- package/dist/es/localFiles/validate.mjs +66 -0
- package/dist/es/localFiles/workspace/LocalWorkspace.mjs +358 -0
- package/dist/es/localFiles/workspace/handleStore.mjs +79 -0
- package/dist/es/localFiles/workspace/watchDirectory.mjs +38 -0
- package/dist/es/package.json.mjs +38 -29
- package/dist/lib/index.js +373 -5
- package/dist/src/AgentSession.d.ts +9 -0
- package/dist/src/BotClient.d.ts +12 -2
- package/dist/src/Config.d.ts +22 -0
- package/dist/src/Session.d.ts +5 -1
- package/dist/src/api/index.d.ts +3 -1
- package/dist/src/builtinTools/browserRuntime/BrowserCommandRunner.d.ts +26 -0
- package/dist/src/builtinTools/browserRuntime/PythonRunner.d.ts +67 -0
- package/dist/src/builtinTools/browserRuntime/WorkspaceBashFs.d.ts +51 -0
- package/dist/src/builtinTools/browserRuntime/assets.d.ts +13 -0
- package/dist/src/builtinTools/browserRuntime/loadBash.d.ts +3 -0
- package/dist/src/builtinTools/browserRuntime/pyodideWorker.d.ts +44 -0
- package/dist/src/builtinTools/command.d.ts +26 -0
- package/dist/src/builtinTools/constants.d.ts +17 -0
- package/dist/src/builtinTools/createBuiltinToolsPlugin.d.ts +11 -0
- package/dist/src/builtinTools/overview.d.ts +5 -0
- package/dist/src/builtinTools/paths.d.ts +15 -0
- package/dist/src/builtinTools/schemas.d.ts +3 -0
- package/dist/src/builtinTools/tools.d.ts +60 -0
- package/dist/src/index.d.ts +4 -2
- package/dist/src/localFiles/adapters/FileSystemAccessAdapter.d.ts +20 -0
- package/dist/src/localFiles/adapters/HostBridgeAdapter.d.ts +43 -0
- package/dist/src/localFiles/adapters/MemoryWorkspaceAdapter.d.ts +21 -0
- package/dist/src/localFiles/adapters/WorkspaceFileAdapter.d.ts +40 -0
- package/dist/src/localFiles/adapters/fsaTypes.d.ts +41 -0
- package/dist/src/localFiles/constants.d.ts +51 -0
- package/dist/src/localFiles/createLocalFilesPlugin.d.ts +11 -0
- package/dist/src/localFiles/createLocalPythonPlugin.d.ts +12 -0
- package/dist/src/localFiles/errors.d.ts +34 -0
- package/dist/src/localFiles/host/connectHostBridge.d.ts +6 -0
- package/dist/src/localFiles/host/protocol.d.ts +46 -0
- package/dist/src/localFiles/index.d.ts +22 -0
- package/dist/src/localFiles/limits.d.ts +3 -0
- package/dist/src/localFiles/schemas.d.ts +29 -0
- package/dist/src/localFiles/security/downloadUrlPolicy.d.ts +4 -0
- package/dist/src/localFiles/security/glob.d.ts +3 -0
- package/dist/src/localFiles/security/pathPolicy.d.ts +14 -0
- package/dist/src/localFiles/security/sensitiveFiles.d.ts +23 -0
- package/dist/src/localFiles/tools/readTools.d.ts +7 -0
- package/dist/src/localFiles/tools/runtime.d.ts +43 -0
- package/dist/src/localFiles/tools/transferTools.d.ts +4 -0
- package/dist/src/localFiles/tools/writeTools.d.ts +4 -0
- package/dist/src/localFiles/transfer/SessionFileTransfer.d.ts +40 -0
- package/dist/src/localFiles/types.d.ts +319 -0
- package/dist/src/localFiles/validate.d.ts +2 -0
- package/dist/src/localFiles/workspace/LocalWorkspace.d.ts +111 -0
- package/dist/src/localFiles/workspace/handleStore.d.ts +11 -0
- package/dist/src/localFiles/workspace/watchDirectory.d.ts +7 -0
- package/package.json +13 -4
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
var C = Object.defineProperty, $ = Object.defineProperties;
|
|
2
|
+
var k = Object.getOwnPropertyDescriptors;
|
|
3
|
+
var q = Object.getOwnPropertySymbols;
|
|
4
|
+
var v = Object.prototype.hasOwnProperty, z = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var A = (t, e, a) => e in t ? C(t, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : t[e] = a, H = (t, e) => {
|
|
6
|
+
for (var a in e || (e = {}))
|
|
7
|
+
v.call(e, a) && A(t, a, e[a]);
|
|
8
|
+
if (q)
|
|
9
|
+
for (var a of q(e))
|
|
10
|
+
z.call(e, a) && A(t, a, e[a]);
|
|
11
|
+
return t;
|
|
12
|
+
}, W = (t, e) => $(t, k(e));
|
|
13
|
+
var h = (t, e, a) => new Promise((r, n) => {
|
|
14
|
+
var s = (o) => {
|
|
15
|
+
try {
|
|
16
|
+
d(a.next(o));
|
|
17
|
+
} catch (c) {
|
|
18
|
+
n(c);
|
|
19
|
+
}
|
|
20
|
+
}, f = (o) => {
|
|
21
|
+
try {
|
|
22
|
+
d(a.throw(o));
|
|
23
|
+
} catch (c) {
|
|
24
|
+
n(c);
|
|
25
|
+
}
|
|
26
|
+
}, d = (o) => o.done ? r(o.value) : Promise.resolve(o.value).then(s, f);
|
|
27
|
+
d((a = a.apply(t, e)).next());
|
|
28
|
+
});
|
|
29
|
+
import { ToolError as l, ToolCode as w } from "../errors.mjs";
|
|
30
|
+
import { normalizeWorkspacePath as F, parentPath as N } from "../security/pathPolicy.mjs";
|
|
31
|
+
import { assertNotSensitive as D, hasUtf8Bom as P, decodeUtf8Strict as S, tooLarge as B, statOrNull as T, requireFile as _, readBytes as j, sha256 as O } from "./runtime.mjs";
|
|
32
|
+
const u = new Uint8Array([239, 187, 191]);
|
|
33
|
+
function y(t, e) {
|
|
34
|
+
return new l(w.Conflict, e, {
|
|
35
|
+
currentHash: t
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function b(t, e) {
|
|
39
|
+
return h(this, null, function* () {
|
|
40
|
+
var n;
|
|
41
|
+
if (((n = (yield _(t.adapter, e)).size) != null ? n : 0) > t.limits.maxWriteBytes)
|
|
42
|
+
throw B(t.limits.maxWriteBytes, "目标文件");
|
|
43
|
+
const r = yield j(yield t.adapter.readFile(e));
|
|
44
|
+
return {
|
|
45
|
+
bytes: r,
|
|
46
|
+
hash: yield O(r)
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function R(t, e, a) {
|
|
51
|
+
return h(this, null, function* () {
|
|
52
|
+
const {
|
|
53
|
+
hash: r
|
|
54
|
+
} = yield b(t, e);
|
|
55
|
+
if (r !== a)
|
|
56
|
+
throw y(r, "文件在确认期间已被修改,本次写入已取消。请重新读取后再修改。");
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function m(t, e) {
|
|
60
|
+
const a = new TextEncoder().encode(t);
|
|
61
|
+
if (!e)
|
|
62
|
+
return a;
|
|
63
|
+
const r = new Uint8Array(u.byteLength + a.byteLength);
|
|
64
|
+
return r.set(u, 0), r.set(a, u.byteLength), r;
|
|
65
|
+
}
|
|
66
|
+
function M(t, e) {
|
|
67
|
+
let a = 0, r = t.indexOf(e);
|
|
68
|
+
for (; r >= 0; )
|
|
69
|
+
a++, r = t.indexOf(e, r + e.length);
|
|
70
|
+
return a;
|
|
71
|
+
}
|
|
72
|
+
function E(t, e) {
|
|
73
|
+
return !e || t.includes(`\r
|
|
74
|
+
`) ? t : t.replace(/\n/g, `\r
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
function U(t, e, a, r = !1) {
|
|
78
|
+
return h(this, null, function* () {
|
|
79
|
+
return t.progress({
|
|
80
|
+
stage: "writing",
|
|
81
|
+
loaded: 0,
|
|
82
|
+
total: a.byteLength,
|
|
83
|
+
path: e
|
|
84
|
+
}), yield t.adapter.writeFile(e, a, {
|
|
85
|
+
createDirectories: r,
|
|
86
|
+
signal: t.signal
|
|
87
|
+
}), {
|
|
88
|
+
path: e,
|
|
89
|
+
hash: yield O(a),
|
|
90
|
+
size: a.byteLength
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
const Q = (t, e) => h(void 0, null, function* () {
|
|
95
|
+
const a = F(t.path);
|
|
96
|
+
if (D(e, a, "write"), !t.edits.length)
|
|
97
|
+
throw new l(w.BadRequest, "参数 edits 不能为空。");
|
|
98
|
+
const {
|
|
99
|
+
bytes: r,
|
|
100
|
+
hash: n
|
|
101
|
+
} = yield b(e, a);
|
|
102
|
+
if (n !== t.expectedHash)
|
|
103
|
+
throw y(n, "expectedHash 与文件当前内容不一致,请重新读取文件后再修改。");
|
|
104
|
+
const s = P(r), f = S(s ? r.subarray(3) : r), d = f.includes(`\r
|
|
105
|
+
`);
|
|
106
|
+
let o = f;
|
|
107
|
+
t.edits.forEach((i, p) => {
|
|
108
|
+
if (typeof (i == null ? void 0 : i.oldText) != "string" || !i.oldText || typeof i.newText != "string")
|
|
109
|
+
throw new l(w.BadRequest, `第 ${p + 1} 条修改无效:oldText 必须是非空字符串,newText 必须是字符串。`);
|
|
110
|
+
const x = E(i.oldText, d), L = E(i.newText, d), g = M(o, x);
|
|
111
|
+
if (g === 0)
|
|
112
|
+
throw new l(w.Conflict, `第 ${p + 1} 条修改的 oldText 在文件中不存在,请重新读取文件确认当前内容。`);
|
|
113
|
+
if (g > 1 && !i.replaceAll)
|
|
114
|
+
throw new l(w.BadRequest, `第 ${p + 1} 条修改的 oldText 在文件中出现了 ${g} 次,请补充上下文使其唯一,或设置 replaceAll。`);
|
|
115
|
+
o = i.replaceAll ? o.split(x).join(L) : o.replace(x, () => L);
|
|
116
|
+
});
|
|
117
|
+
const c = m(o, s);
|
|
118
|
+
if (c.byteLength > e.limits.maxWriteBytes)
|
|
119
|
+
throw B(e.limits.maxWriteBytes, "修改后的内容");
|
|
120
|
+
return yield e.requestApproval(a, {
|
|
121
|
+
type: "text",
|
|
122
|
+
before: f,
|
|
123
|
+
after: o,
|
|
124
|
+
created: !1
|
|
125
|
+
}), yield R(e, a, n), {
|
|
126
|
+
data: yield U(e, a, c)
|
|
127
|
+
};
|
|
128
|
+
}), V = (t, e) => h(void 0, null, function* () {
|
|
129
|
+
const a = F(t.path);
|
|
130
|
+
D(e, a, "write");
|
|
131
|
+
const r = yield T(e.adapter, a);
|
|
132
|
+
if ((r == null ? void 0 : r.kind) === "directory")
|
|
133
|
+
throw new l(w.BadRequest, "目标是目录,不能写入文件。");
|
|
134
|
+
let n, s;
|
|
135
|
+
if (r) {
|
|
136
|
+
const o = yield b(e, a);
|
|
137
|
+
if (s = o.hash, !t.expectedHash)
|
|
138
|
+
throw y(s, "目标文件已存在,覆盖前需要提供 expectedHash(可通过 read_file 或 stat_file 获取)。");
|
|
139
|
+
if (t.expectedHash !== s)
|
|
140
|
+
throw y(s, "expectedHash 与文件当前内容不一致,请重新读取文件后再写入。");
|
|
141
|
+
n = new TextDecoder("utf-8").decode(o.bytes);
|
|
142
|
+
} else if (!t.createDirectories) {
|
|
143
|
+
const o = N(a), c = o ? yield T(e.adapter, o) : {
|
|
144
|
+
kind: "directory"
|
|
145
|
+
};
|
|
146
|
+
if (!c)
|
|
147
|
+
throw new l(w.NotFound, "父目录不存在,可设置 createDirectories 自动创建。");
|
|
148
|
+
if (c.kind !== "directory")
|
|
149
|
+
throw new l(w.BadRequest, "父路径不是目录。");
|
|
150
|
+
}
|
|
151
|
+
const f = new TextEncoder().encode(t.content);
|
|
152
|
+
if (f.byteLength > e.limits.maxWriteBytes)
|
|
153
|
+
throw B(e.limits.maxWriteBytes, "写入内容");
|
|
154
|
+
if (yield e.requestApproval(a, {
|
|
155
|
+
type: "text",
|
|
156
|
+
before: n,
|
|
157
|
+
after: t.content,
|
|
158
|
+
created: !r
|
|
159
|
+
}), s)
|
|
160
|
+
yield R(e, a, s);
|
|
161
|
+
else if (yield T(e.adapter, a))
|
|
162
|
+
throw new l(w.Conflict, "目标文件在确认期间被创建,本次写入已取消。请重新检查后再写入。");
|
|
163
|
+
const d = yield U(e, a, f, t.createDirectories);
|
|
164
|
+
return {
|
|
165
|
+
data: W(H({}, d), {
|
|
166
|
+
created: !r
|
|
167
|
+
})
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
export {
|
|
171
|
+
Q as applyPatch,
|
|
172
|
+
V as writeFile
|
|
173
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
var h = (u, c, l) => new Promise((r, f) => {
|
|
2
|
+
var i = (e) => {
|
|
3
|
+
try {
|
|
4
|
+
t(l.next(e));
|
|
5
|
+
} catch (d) {
|
|
6
|
+
f(d);
|
|
7
|
+
}
|
|
8
|
+
}, a = (e) => {
|
|
9
|
+
try {
|
|
10
|
+
t(l.throw(e));
|
|
11
|
+
} catch (d) {
|
|
12
|
+
f(d);
|
|
13
|
+
}
|
|
14
|
+
}, t = (e) => e.done ? r(e.value) : Promise.resolve(e.value).then(i, a);
|
|
15
|
+
t((l = l.apply(u, c)).next());
|
|
16
|
+
});
|
|
17
|
+
import { ToolError as n, ToolCode as o } from "../errors.mjs";
|
|
18
|
+
function w() {
|
|
19
|
+
return new n(o.Internal, "平台文件服务请求失败,请稍后重试。");
|
|
20
|
+
}
|
|
21
|
+
function F(u, c = () => {
|
|
22
|
+
}) {
|
|
23
|
+
const l = () => {
|
|
24
|
+
const i = u();
|
|
25
|
+
if (!i)
|
|
26
|
+
throw w();
|
|
27
|
+
return i;
|
|
28
|
+
}, r = () => {
|
|
29
|
+
const i = c();
|
|
30
|
+
if (!i)
|
|
31
|
+
throw w();
|
|
32
|
+
return i;
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
upload(i, a, t) {
|
|
36
|
+
return h(this, null, function* () {
|
|
37
|
+
if (!a.sessionId)
|
|
38
|
+
throw new n(o.BadRequest, "当前没有可用的会话,无法上传文件。");
|
|
39
|
+
try {
|
|
40
|
+
t == null || t({
|
|
41
|
+
loaded: 0,
|
|
42
|
+
total: i.size
|
|
43
|
+
});
|
|
44
|
+
const e = yield r().postFile(i, (d, p) => t == null ? void 0 : t({
|
|
45
|
+
loaded: d,
|
|
46
|
+
total: p
|
|
47
|
+
}));
|
|
48
|
+
if (!(e != null && e.id) || !e.url)
|
|
49
|
+
throw w();
|
|
50
|
+
return t == null || t({
|
|
51
|
+
loaded: i.size,
|
|
52
|
+
total: i.size
|
|
53
|
+
}), {
|
|
54
|
+
fileId: e.id,
|
|
55
|
+
url: e.url
|
|
56
|
+
};
|
|
57
|
+
} catch (e) {
|
|
58
|
+
throw e instanceof n ? e : w();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
resolveDownload(i, a) {
|
|
63
|
+
return h(this, null, function* () {
|
|
64
|
+
if (i.type === "platformFile")
|
|
65
|
+
return I(r(), i.fileId);
|
|
66
|
+
if (!a.sessionId)
|
|
67
|
+
throw new n(o.BadRequest, "当前没有可用的会话,无法下载会话文件。");
|
|
68
|
+
let t;
|
|
69
|
+
try {
|
|
70
|
+
t = yield l().getApplicationIdSessionFile(a.applicationId, a.sessionId, i.fileId);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
throw w();
|
|
73
|
+
}
|
|
74
|
+
if (!(t != null && t.url))
|
|
75
|
+
throw new n(o.NotFound, "会话文件不存在或暂不可下载。");
|
|
76
|
+
return {
|
|
77
|
+
url: t.url,
|
|
78
|
+
name: t.name,
|
|
79
|
+
size: t.size
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function I(u, c) {
|
|
86
|
+
return h(this, null, function* () {
|
|
87
|
+
let l;
|
|
88
|
+
try {
|
|
89
|
+
l = yield u.getFile(c);
|
|
90
|
+
} catch (f) {
|
|
91
|
+
throw w();
|
|
92
|
+
}
|
|
93
|
+
if (!(l != null && l.url))
|
|
94
|
+
throw new n(o.NotFound, "平台文件不存在或暂不可下载。");
|
|
95
|
+
let r;
|
|
96
|
+
try {
|
|
97
|
+
r = new URL(l.url);
|
|
98
|
+
} catch (f) {
|
|
99
|
+
throw new n(o.Internal, "平台返回的下载地址无效。");
|
|
100
|
+
}
|
|
101
|
+
if (r.protocol !== "https:")
|
|
102
|
+
throw new n(o.Internal, "平台返回的下载地址无效。");
|
|
103
|
+
return {
|
|
104
|
+
url: l.url,
|
|
105
|
+
size: l.bytes
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
F as createDefaultSessionFileTransfer
|
|
111
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var c = Object.defineProperty, j = Object.defineProperties;
|
|
2
|
+
var L = Object.getOwnPropertyDescriptors;
|
|
3
|
+
var $ = Object.getOwnPropertySymbols;
|
|
4
|
+
var p = Object.prototype.hasOwnProperty, A = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var g = (i, n, r) => n in i ? c(i, n, { enumerable: !0, configurable: !0, writable: !0, value: r }) : i[n] = r, k = (i, n) => {
|
|
6
|
+
for (var r in n || (n = {}))
|
|
7
|
+
p.call(n, r) && g(i, r, n[r]);
|
|
8
|
+
if ($)
|
|
9
|
+
for (var r of $(n))
|
|
10
|
+
A.call(n, r) && g(i, r, n[r]);
|
|
11
|
+
return i;
|
|
12
|
+
}, x = (i, n) => j(i, L(n));
|
|
13
|
+
import { ToolError as I, ToolCode as O } from "./errors.mjs";
|
|
14
|
+
function o(i, n) {
|
|
15
|
+
throw new I(O.BadRequest, i ? `参数 ${i} ${n}` : `参数${n}`);
|
|
16
|
+
}
|
|
17
|
+
function w(i, n) {
|
|
18
|
+
return typeof i != "string" ? i : (n.type === "integer" || n.type === "number") && /^-?\d+(\.\d+)?$/.test(i.trim()) ? Number(i) : n.type === "boolean" && (i === "true" || i === "false") ? i === "true" : i;
|
|
19
|
+
}
|
|
20
|
+
function y(i, n, r) {
|
|
21
|
+
switch (i = w(i, n), n.type) {
|
|
22
|
+
case "string":
|
|
23
|
+
typeof i != "string" && o(r, "必须是字符串。"), n.minLength !== void 0 && i.length < n.minLength && o(r, "不能为空。"), n.maxLength !== void 0 && i.length > n.maxLength && o(r, `不能超过 ${n.maxLength} 字。`);
|
|
24
|
+
break;
|
|
25
|
+
case "integer":
|
|
26
|
+
(typeof i != "number" || !Number.isInteger(i)) && o(r, "必须是整数。");
|
|
27
|
+
break;
|
|
28
|
+
case "number":
|
|
29
|
+
(typeof i != "number" || !Number.isFinite(i)) && o(r, "必须是数字。");
|
|
30
|
+
break;
|
|
31
|
+
case "boolean":
|
|
32
|
+
typeof i != "boolean" && o(r, "必须是布尔值。");
|
|
33
|
+
break;
|
|
34
|
+
case "array":
|
|
35
|
+
if (Array.isArray(i) || o(r, "必须是数组。"), n.minItems !== void 0 && i.length < n.minItems && o(r, "不能为空。"), n.items) {
|
|
36
|
+
const e = n.items;
|
|
37
|
+
return i.map((f, m) => y(f, e, `${r}[${m}]`));
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case "object":
|
|
41
|
+
return s(i, n, r);
|
|
42
|
+
}
|
|
43
|
+
return n.enum && !n.enum.includes(i) && o(r, `必须是 ${n.enum.join("、")} 之一。`), typeof i == "number" && (n.minimum !== void 0 && i < n.minimum && o(r, `不能小于 ${n.minimum}。`), n.maximum !== void 0 && i > n.maximum && o(r, `不能大于 ${n.maximum}。`)), i;
|
|
44
|
+
}
|
|
45
|
+
function s(i, n, r) {
|
|
46
|
+
var m, d;
|
|
47
|
+
(!i || typeof i != "object" || Array.isArray(i)) && o(r, "必须是对象。");
|
|
48
|
+
const e = i, f = {};
|
|
49
|
+
for (const t of (m = n.required) != null ? m : [])
|
|
50
|
+
(e[t] === void 0 || e[t] === null) && o(r ? `${r}.${t}` : t, "是必填项。");
|
|
51
|
+
for (const [t, b] of Object.entries((d = n.properties) != null ? d : {})) {
|
|
52
|
+
if (e[t] === void 0 || e[t] === null)
|
|
53
|
+
continue;
|
|
54
|
+
const u = r ? `${r}.${t}` : t;
|
|
55
|
+
f[t] = b.oneOf ? (y(e[t], x(k({}, b), {
|
|
56
|
+
oneOf: void 0
|
|
57
|
+
}), u), e[t]) : y(e[t], b, u);
|
|
58
|
+
}
|
|
59
|
+
return f;
|
|
60
|
+
}
|
|
61
|
+
function q(i, n) {
|
|
62
|
+
return s(i, n, "");
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
q as validateToolInput
|
|
66
|
+
};
|