@nexface/tools 0.1.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/dist/browser/controller.d.ts +30 -0
- package/dist/browser/controller.js +783 -0
- package/dist/browser/controller.js.map +1 -0
- package/dist/browser/dom.d.ts +43 -0
- package/dist/browser/dom.js +438 -0
- package/dist/browser/dom.js.map +1 -0
- package/dist/browser/feedback.d.ts +4 -0
- package/dist/browser/feedback.js +5 -0
- package/dist/browser/feedback.js.map +1 -0
- package/dist/browser/locator.d.ts +19 -0
- package/dist/browser/locator.js +277 -0
- package/dist/browser/locator.js.map +1 -0
- package/dist/browser/prompt.d.ts +5 -0
- package/dist/browser/prompt.generated.d.ts +1 -0
- package/dist/browser/prompt.generated.js +50 -0
- package/dist/browser/prompt.generated.js.map +1 -0
- package/dist/browser/prompt.js +9 -0
- package/dist/browser/prompt.js.map +1 -0
- package/dist/browser/snapshot.d.ts +7 -0
- package/dist/browser/snapshot.js +424 -0
- package/dist/browser/snapshot.js.map +1 -0
- package/dist/browser/toolset.d.ts +35 -0
- package/dist/browser/toolset.js +383 -0
- package/dist/browser/toolset.js.map +1 -0
- package/dist/browser/types.d.ts +129 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/browser/worker-runner.d.ts +11 -0
- package/dist/browser/worker-runner.js +400 -0
- package/dist/browser/worker-runner.js.map +1 -0
- package/dist/definition.d.ts +16 -0
- package/dist/definition.js +72 -0
- package/dist/definition.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-react.d.ts +12 -0
- package/dist/internal-react.js +23 -0
- package/dist/internal-react.js.map +1 -0
- package/dist/internal-types.d.ts +11 -0
- package/dist/internal-types.js +2 -0
- package/dist/internal-types.js.map +1 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +5 -0
- package/dist/internal.js.map +1 -0
- package/dist/react.d.ts +25 -0
- package/dist/react.js +258 -0
- package/dist/react.js.map +1 -0
- package/dist/runtime.d.ts +93 -0
- package/dist/runtime.js +492 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.js +46 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/webmcp.d.ts +2 -0
- package/dist/webmcp.js +73 -0
- package/dist/webmcp.js.map +1 -0
- package/package.json +26 -0
- package/src/browser/controller.ts +984 -0
- package/src/browser/dom.ts +507 -0
- package/src/browser/feedback.ts +5 -0
- package/src/browser/locator.ts +383 -0
- package/src/browser/prompt.generated.ts +50 -0
- package/src/browser/prompt.ts +10 -0
- package/src/browser/snapshot.ts +542 -0
- package/src/browser/toolset.ts +522 -0
- package/src/browser/types.ts +172 -0
- package/src/browser/worker-runner.ts +468 -0
- package/src/definition.ts +115 -0
- package/src/index.ts +35 -0
- package/src/internal-react.tsx +62 -0
- package/src/internal-types.ts +12 -0
- package/src/internal.ts +36 -0
- package/src/react.tsx +397 -0
- package/src/runtime.ts +722 -0
- package/src/schema.ts +52 -0
- package/src/types.ts +123 -0
- package/src/webmcp.ts +102 -0
- package/tsconfig.json +8 -0
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
import { isValidAgentContextName } from "./definition.js";
|
|
2
|
+
import { validateAgentToolInput } from "./schema.js";
|
|
3
|
+
import { createBrowserToolset, } from "./browser/toolset.js";
|
|
4
|
+
const CONTEXT_ERROR_CODES = [
|
|
5
|
+
"CONTEXT_DISPOSED",
|
|
6
|
+
"CONTEXT_NAME_MISMATCH",
|
|
7
|
+
"DUPLICATE_CONTEXT",
|
|
8
|
+
"INVALID_CONTEXT",
|
|
9
|
+
];
|
|
10
|
+
const TOOL_ERROR_CODES = [
|
|
11
|
+
"ACTION_IN_FLIGHT",
|
|
12
|
+
"ACTION_NOT_HANDLED",
|
|
13
|
+
"ACTION_TARGET_UNAVAILABLE",
|
|
14
|
+
"BROWSER_EXECUTION_FAILED",
|
|
15
|
+
"BROWSER_SNAPSHOT_REQUIRED",
|
|
16
|
+
"BROWSER_TOOLS_UNAVAILABLE",
|
|
17
|
+
"CONTRACT_MISMATCH",
|
|
18
|
+
"DUPLICATE_BINDING",
|
|
19
|
+
"INVALID_INPUT",
|
|
20
|
+
"INVALID_TOOL_RUNTIME",
|
|
21
|
+
"TOOL_CANCELLED",
|
|
22
|
+
"TOOL_REGISTRATION_TIMEOUT",
|
|
23
|
+
"TOOL_SKIPPED",
|
|
24
|
+
"TOOL_UNAVAILABLE",
|
|
25
|
+
"UNKNOWN_TOOL",
|
|
26
|
+
];
|
|
27
|
+
const CONTEXT_ERROR_CODE_SET = new Set(CONTEXT_ERROR_CODES);
|
|
28
|
+
const TOOL_ERROR_CODE_SET = new Set(TOOL_ERROR_CODES);
|
|
29
|
+
export function isToolRuntimeError(error) {
|
|
30
|
+
if (!error || typeof error !== "object")
|
|
31
|
+
return false;
|
|
32
|
+
const candidate = error;
|
|
33
|
+
if (candidate.type !== "tool_runtime_error"
|
|
34
|
+
|| typeof candidate.message !== "string"
|
|
35
|
+
|| typeof candidate.code !== "string") {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (candidate.domain === "tool") {
|
|
39
|
+
return TOOL_ERROR_CODE_SET.has(candidate.code);
|
|
40
|
+
}
|
|
41
|
+
if (candidate.domain === "context") {
|
|
42
|
+
return CONTEXT_ERROR_CODE_SET.has(candidate.code);
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
function copyBrowserToolsConfig(config) {
|
|
47
|
+
if (config === undefined)
|
|
48
|
+
return false;
|
|
49
|
+
if (typeof config === "boolean")
|
|
50
|
+
return config;
|
|
51
|
+
return {
|
|
52
|
+
...config,
|
|
53
|
+
...(config.limits ? { limits: { ...config.limits } } : {}),
|
|
54
|
+
...(config.snapshotLimits
|
|
55
|
+
? { snapshotLimits: { ...config.snapshotLimits } }
|
|
56
|
+
: {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function compareStrings(left, right) {
|
|
60
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
61
|
+
}
|
|
62
|
+
function assertContextName(name) {
|
|
63
|
+
if (!isValidAgentContextName(name)) {
|
|
64
|
+
throw new AgentContextError("INVALID_CONTEXT", `Invalid or reserved context name: ${name}.`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function normalizeContextValue(value, path = "value", seen = new WeakSet()) {
|
|
68
|
+
if (value === null
|
|
69
|
+
|| typeof value === "string"
|
|
70
|
+
|| typeof value === "boolean") {
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
if (typeof value === "number") {
|
|
74
|
+
if (!Number.isFinite(value)) {
|
|
75
|
+
throw new AgentContextError("INVALID_CONTEXT", `${path} must contain only finite numbers.`);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
if (!value || typeof value !== "object") {
|
|
80
|
+
throw new AgentContextError("INVALID_CONTEXT", `${path} must be JSON serializable.`);
|
|
81
|
+
}
|
|
82
|
+
if (seen.has(value)) {
|
|
83
|
+
throw new AgentContextError("INVALID_CONTEXT", `${path} contains a circular reference.`);
|
|
84
|
+
}
|
|
85
|
+
seen.add(value);
|
|
86
|
+
try {
|
|
87
|
+
if (Array.isArray(value)) {
|
|
88
|
+
return value.map((item, index) => normalizeContextValue(item, `${path}[${index}]`, seen));
|
|
89
|
+
}
|
|
90
|
+
const prototype = Object.getPrototypeOf(value);
|
|
91
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
92
|
+
throw new AgentContextError("INVALID_CONTEXT", `${path} must contain only plain objects.`);
|
|
93
|
+
}
|
|
94
|
+
return Object.fromEntries(Object.keys(value)
|
|
95
|
+
.sort(compareStrings)
|
|
96
|
+
.map((key) => [
|
|
97
|
+
key,
|
|
98
|
+
normalizeContextValue(value[key], `${path}.${key}`, seen),
|
|
99
|
+
]));
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
seen.delete(value);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function normalizeContext(context) {
|
|
106
|
+
assertContextName(context.name);
|
|
107
|
+
if (!context.description.trim()) {
|
|
108
|
+
throw new AgentContextError("INVALID_CONTEXT", "Context description is required.");
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
name: context.name,
|
|
112
|
+
description: context.description,
|
|
113
|
+
value: normalizeContextValue(context.value),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
class DetailEvent extends Event {
|
|
117
|
+
detail;
|
|
118
|
+
constructor(type, detail) {
|
|
119
|
+
super(type);
|
|
120
|
+
this.detail = detail;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export class AgentToolError extends Error {
|
|
124
|
+
code;
|
|
125
|
+
details;
|
|
126
|
+
type = "tool_runtime_error";
|
|
127
|
+
domain = "tool";
|
|
128
|
+
constructor(code, message, details) {
|
|
129
|
+
super(message);
|
|
130
|
+
this.code = code;
|
|
131
|
+
this.details = details;
|
|
132
|
+
this.name = "ToolRuntimeError";
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export class AgentContextError extends Error {
|
|
136
|
+
code;
|
|
137
|
+
type = "tool_runtime_error";
|
|
138
|
+
domain = "context";
|
|
139
|
+
constructor(code, message) {
|
|
140
|
+
super(message);
|
|
141
|
+
this.code = code;
|
|
142
|
+
this.name = "ToolRuntimeError";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const runtimeInternals = new WeakMap();
|
|
146
|
+
export function createToolRuntime(options = {}) {
|
|
147
|
+
return new ToolRuntimeImplementation(options);
|
|
148
|
+
}
|
|
149
|
+
export function getInternalToolRuntime(runtime) {
|
|
150
|
+
const internal = runtimeInternals.get(runtime);
|
|
151
|
+
if (!internal) {
|
|
152
|
+
throw new AgentToolError("INVALID_TOOL_RUNTIME", "ToolRuntime must be created by createToolRuntime().");
|
|
153
|
+
}
|
|
154
|
+
return internal;
|
|
155
|
+
}
|
|
156
|
+
export class ToolRuntimeImplementation extends EventTarget {
|
|
157
|
+
#browserToolsConfig;
|
|
158
|
+
#bindings = new Map();
|
|
159
|
+
#contexts = new Map();
|
|
160
|
+
#contextRevision = 0;
|
|
161
|
+
#browserToolset;
|
|
162
|
+
#executionTail;
|
|
163
|
+
constructor(options = {}) {
|
|
164
|
+
super();
|
|
165
|
+
this.#browserToolsConfig = copyBrowserToolsConfig(options.browserTools);
|
|
166
|
+
runtimeInternals.set(this, this);
|
|
167
|
+
}
|
|
168
|
+
register(definition, execute, options = {}) {
|
|
169
|
+
if (this.#bindings.has(definition.name)) {
|
|
170
|
+
throw new AgentToolError("DUPLICATE_BINDING", `Tool "${definition.name}" already has an active binding.`);
|
|
171
|
+
}
|
|
172
|
+
const binding = { definition, execute };
|
|
173
|
+
this.#bindings.set(definition.name, binding);
|
|
174
|
+
this.dispatchEvent(new DetailEvent("toolchange", {
|
|
175
|
+
name: definition.name,
|
|
176
|
+
registered: true,
|
|
177
|
+
}));
|
|
178
|
+
let disposed = false;
|
|
179
|
+
const dispose = () => {
|
|
180
|
+
if (disposed || this.#bindings.get(definition.name) !== binding)
|
|
181
|
+
return;
|
|
182
|
+
disposed = true;
|
|
183
|
+
options.signal?.removeEventListener("abort", dispose);
|
|
184
|
+
this.#bindings.delete(definition.name);
|
|
185
|
+
this.dispatchEvent(new DetailEvent("toolchange", {
|
|
186
|
+
name: definition.name,
|
|
187
|
+
registered: false,
|
|
188
|
+
}));
|
|
189
|
+
};
|
|
190
|
+
if (options.signal?.aborted)
|
|
191
|
+
dispose();
|
|
192
|
+
else
|
|
193
|
+
options.signal?.addEventListener("abort", dispose, { once: true });
|
|
194
|
+
return dispose;
|
|
195
|
+
}
|
|
196
|
+
registerContext(input, options = {}) {
|
|
197
|
+
const initial = normalizeContext(input);
|
|
198
|
+
if (this.#contexts.has(initial.name)) {
|
|
199
|
+
throw new AgentContextError("DUPLICATE_CONTEXT", `Context "${initial.name}" already has an active registration.`);
|
|
200
|
+
}
|
|
201
|
+
this.#contexts.set(initial.name, initial);
|
|
202
|
+
this.#notifyContextChange(initial.name, "registered");
|
|
203
|
+
let disposed = false;
|
|
204
|
+
const dispose = () => {
|
|
205
|
+
if (disposed)
|
|
206
|
+
return;
|
|
207
|
+
disposed = true;
|
|
208
|
+
options.signal?.removeEventListener("abort", dispose);
|
|
209
|
+
if (this.#contexts.delete(initial.name)) {
|
|
210
|
+
this.#notifyContextChange(initial.name, "disposed");
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
const update = (nextInput) => {
|
|
214
|
+
if (disposed) {
|
|
215
|
+
throw new AgentContextError("CONTEXT_DISPOSED", `Context "${initial.name}" registration has been disposed.`);
|
|
216
|
+
}
|
|
217
|
+
const next = normalizeContext(nextInput);
|
|
218
|
+
if (next.name !== initial.name) {
|
|
219
|
+
throw new AgentContextError("CONTEXT_NAME_MISMATCH", `Context registration "${initial.name}" cannot be updated to "${next.name}".`);
|
|
220
|
+
}
|
|
221
|
+
if (JSON.stringify(this.#contexts.get(initial.name)) === JSON.stringify(next))
|
|
222
|
+
return;
|
|
223
|
+
this.#contexts.set(initial.name, next);
|
|
224
|
+
this.#notifyContextChange(initial.name, "updated");
|
|
225
|
+
};
|
|
226
|
+
if (options.signal?.aborted)
|
|
227
|
+
dispose();
|
|
228
|
+
else
|
|
229
|
+
options.signal?.addEventListener("abort", dispose, { once: true });
|
|
230
|
+
return { update, dispose };
|
|
231
|
+
}
|
|
232
|
+
getContextsNow() {
|
|
233
|
+
return [...this.#contexts.values()]
|
|
234
|
+
.sort((left, right) => compareStrings(left.name, right.name))
|
|
235
|
+
.map(normalizeContext);
|
|
236
|
+
}
|
|
237
|
+
getContextRevision() {
|
|
238
|
+
return this.#contextRevision;
|
|
239
|
+
}
|
|
240
|
+
async getContexts(options = {}) {
|
|
241
|
+
options.signal?.throwIfAborted();
|
|
242
|
+
await Promise.resolve();
|
|
243
|
+
await new Promise((resolve, reject) => {
|
|
244
|
+
let settled = false;
|
|
245
|
+
let frameId;
|
|
246
|
+
let timeoutId;
|
|
247
|
+
const cleanup = () => {
|
|
248
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
249
|
+
if (frameId !== undefined && typeof cancelAnimationFrame === "function") {
|
|
250
|
+
cancelAnimationFrame(frameId);
|
|
251
|
+
}
|
|
252
|
+
if (timeoutId !== undefined)
|
|
253
|
+
clearTimeout(timeoutId);
|
|
254
|
+
};
|
|
255
|
+
const settle = () => {
|
|
256
|
+
if (settled)
|
|
257
|
+
return;
|
|
258
|
+
settled = true;
|
|
259
|
+
cleanup();
|
|
260
|
+
resolve();
|
|
261
|
+
};
|
|
262
|
+
const onAbort = () => {
|
|
263
|
+
if (settled)
|
|
264
|
+
return;
|
|
265
|
+
settled = true;
|
|
266
|
+
cleanup();
|
|
267
|
+
reject(options.signal?.reason);
|
|
268
|
+
};
|
|
269
|
+
const afterTask = () => {
|
|
270
|
+
timeoutId = undefined;
|
|
271
|
+
if (typeof requestAnimationFrame !== "function") {
|
|
272
|
+
settle();
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
frameId = requestAnimationFrame(settle);
|
|
276
|
+
timeoutId = setTimeout(settle, 50);
|
|
277
|
+
};
|
|
278
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
279
|
+
if (options.signal?.aborted) {
|
|
280
|
+
onAbort();
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
timeoutId = setTimeout(afterTask, 0);
|
|
284
|
+
});
|
|
285
|
+
await Promise.resolve();
|
|
286
|
+
options.signal?.throwIfAborted();
|
|
287
|
+
return this.getContextsNow();
|
|
288
|
+
}
|
|
289
|
+
#notifyContextChange(name, change) {
|
|
290
|
+
this.#contextRevision += 1;
|
|
291
|
+
this.dispatchEvent(new DetailEvent("contextchange", {
|
|
292
|
+
name,
|
|
293
|
+
change,
|
|
294
|
+
revision: this.#contextRevision,
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
getApplicationTools() {
|
|
298
|
+
return [...this.#bindings.values()]
|
|
299
|
+
.map(({ definition }) => definition)
|
|
300
|
+
.sort((left, right) => compareStrings(left.name, right.name));
|
|
301
|
+
}
|
|
302
|
+
isRegistered(name) {
|
|
303
|
+
return this.#bindings.has(name);
|
|
304
|
+
}
|
|
305
|
+
getTools() {
|
|
306
|
+
const browserTools = this.#getBrowserToolset()?.definitions ?? [];
|
|
307
|
+
return [...this.getApplicationTools(), ...browserTools]
|
|
308
|
+
.sort((left, right) => compareStrings(left.name, right.name));
|
|
309
|
+
}
|
|
310
|
+
waitForTool(definition, options = {}) {
|
|
311
|
+
const isTargetRegistered = () => this.#bindings.has(definition.name);
|
|
312
|
+
if (isTargetRegistered())
|
|
313
|
+
return Promise.resolve();
|
|
314
|
+
const timeoutMs = Math.max(1, options.timeoutMs ?? 5_000);
|
|
315
|
+
return new Promise((resolve, reject) => {
|
|
316
|
+
let settled = false;
|
|
317
|
+
const cleanup = () => {
|
|
318
|
+
this.removeEventListener("toolchange", onToolChange);
|
|
319
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
320
|
+
clearTimeout(timeoutId);
|
|
321
|
+
};
|
|
322
|
+
const settle = (callback) => {
|
|
323
|
+
if (settled)
|
|
324
|
+
return;
|
|
325
|
+
settled = true;
|
|
326
|
+
cleanup();
|
|
327
|
+
callback();
|
|
328
|
+
};
|
|
329
|
+
const onToolChange = (event) => {
|
|
330
|
+
const detail = event.detail;
|
|
331
|
+
if (detail?.name !== definition.name || !detail.registered)
|
|
332
|
+
return;
|
|
333
|
+
if (isTargetRegistered())
|
|
334
|
+
settle(resolve);
|
|
335
|
+
};
|
|
336
|
+
const onAbort = () => settle(() => reject(options.signal?.reason));
|
|
337
|
+
const timeoutId = setTimeout(() => {
|
|
338
|
+
settle(() => reject(new AgentToolError("TOOL_REGISTRATION_TIMEOUT", `Tool "${definition.name}" did not register within ${timeoutMs}ms.`, {
|
|
339
|
+
toolName: definition.name,
|
|
340
|
+
timeoutMs,
|
|
341
|
+
retryable: false,
|
|
342
|
+
browserFallbackAllowed: true,
|
|
343
|
+
toolExecuted: false,
|
|
344
|
+
})));
|
|
345
|
+
}, timeoutMs);
|
|
346
|
+
this.addEventListener("toolchange", onToolChange);
|
|
347
|
+
if (options.signal?.aborted)
|
|
348
|
+
onAbort();
|
|
349
|
+
else
|
|
350
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
351
|
+
if (isTargetRegistered())
|
|
352
|
+
settle(resolve);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
execute(definition, input, options = {}) {
|
|
356
|
+
const name = definition.name;
|
|
357
|
+
const binding = this.#bindings.get(name);
|
|
358
|
+
if (binding) {
|
|
359
|
+
if (binding.definition !== definition) {
|
|
360
|
+
return Promise.reject(new AgentToolError("CONTRACT_MISMATCH", `Tool "${name}" is registered with a different Definition.`));
|
|
361
|
+
}
|
|
362
|
+
return this.#enqueue(() => this.#executeApplication(name, input, options, binding), options.signal);
|
|
363
|
+
}
|
|
364
|
+
try {
|
|
365
|
+
const browserToolset = this.#getBrowserToolset();
|
|
366
|
+
const browserHandler = browserToolset?.handlers.get(name);
|
|
367
|
+
if (!browserHandler) {
|
|
368
|
+
return Promise.reject(new AgentToolError("UNKNOWN_TOOL", `Unknown tool: ${name}.`));
|
|
369
|
+
}
|
|
370
|
+
if (!browserToolset?.definitions.some((candidate) => candidate === definition)) {
|
|
371
|
+
return Promise.reject(new AgentToolError("CONTRACT_MISMATCH", `Tool "${name}" is registered with a different Definition.`));
|
|
372
|
+
}
|
|
373
|
+
return this.#enqueue(async () => {
|
|
374
|
+
const signal = options.signal ?? new AbortController().signal;
|
|
375
|
+
signal.throwIfAborted();
|
|
376
|
+
return browserHandler.execute(input, {
|
|
377
|
+
signal,
|
|
378
|
+
});
|
|
379
|
+
}, options.signal);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
return Promise.reject(error);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
executeApplicationTool(name, input, options = {}) {
|
|
386
|
+
const binding = this.#bindings.get(name);
|
|
387
|
+
if (!binding) {
|
|
388
|
+
return Promise.reject(new AgentToolError("UNKNOWN_TOOL", `Unknown tool: ${name}.`));
|
|
389
|
+
}
|
|
390
|
+
return this.#enqueue(() => {
|
|
391
|
+
const activeBinding = this.#bindings.get(name);
|
|
392
|
+
if (!activeBinding) {
|
|
393
|
+
throw new AgentToolError("UNKNOWN_TOOL", `Unknown tool: ${name}.`);
|
|
394
|
+
}
|
|
395
|
+
if (options.expectedDefinition
|
|
396
|
+
&& activeBinding.definition !== options.expectedDefinition) {
|
|
397
|
+
throw new AgentToolError("CONTRACT_MISMATCH", `Tool "${name}" changed after the model request was sent.`);
|
|
398
|
+
}
|
|
399
|
+
return this.#executeApplication(name, input, options, activeBinding);
|
|
400
|
+
}, options.signal);
|
|
401
|
+
}
|
|
402
|
+
#enqueue(execute, signal) {
|
|
403
|
+
const previous = this.#executionTail;
|
|
404
|
+
let removeQueuedAbort = () => { };
|
|
405
|
+
const queuedExecution = previous
|
|
406
|
+
? previous.then(() => {
|
|
407
|
+
removeQueuedAbort();
|
|
408
|
+
signal?.throwIfAborted();
|
|
409
|
+
return execute();
|
|
410
|
+
})
|
|
411
|
+
: execute();
|
|
412
|
+
let execution = queuedExecution;
|
|
413
|
+
if (previous && signal) {
|
|
414
|
+
execution = new Promise((resolve, reject) => {
|
|
415
|
+
const onAbort = () => {
|
|
416
|
+
removeQueuedAbort();
|
|
417
|
+
reject(signal.reason);
|
|
418
|
+
};
|
|
419
|
+
removeQueuedAbort = () => signal.removeEventListener("abort", onAbort);
|
|
420
|
+
queuedExecution.then(resolve, reject);
|
|
421
|
+
if (signal.aborted)
|
|
422
|
+
onAbort();
|
|
423
|
+
else
|
|
424
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
const tail = queuedExecution.then(() => undefined, () => undefined);
|
|
428
|
+
this.#executionTail = tail;
|
|
429
|
+
void tail.then(() => {
|
|
430
|
+
if (this.#executionTail === tail)
|
|
431
|
+
this.#executionTail = undefined;
|
|
432
|
+
});
|
|
433
|
+
return execution;
|
|
434
|
+
}
|
|
435
|
+
async #executeApplication(name, input, options, binding) {
|
|
436
|
+
const id = globalThis.crypto?.randomUUID?.()
|
|
437
|
+
?? `${Date.now()}-${Math.random()}`;
|
|
438
|
+
const startedAt = Date.now();
|
|
439
|
+
const running = {
|
|
440
|
+
id,
|
|
441
|
+
name,
|
|
442
|
+
status: "running",
|
|
443
|
+
startedAt,
|
|
444
|
+
input,
|
|
445
|
+
};
|
|
446
|
+
this.dispatchEvent(new DetailEvent("toolexecution", running));
|
|
447
|
+
try {
|
|
448
|
+
if (this.#bindings.get(name) !== binding) {
|
|
449
|
+
throw new AgentToolError("UNKNOWN_TOOL", `Tool "${name}" is no longer registered for this call.`);
|
|
450
|
+
}
|
|
451
|
+
const errors = validateAgentToolInput(binding.definition.inputSchema, input);
|
|
452
|
+
if (errors.length) {
|
|
453
|
+
throw new AgentToolError("INVALID_INPUT", errors.join(" "), { errors });
|
|
454
|
+
}
|
|
455
|
+
const signal = options.signal ?? new AbortController().signal;
|
|
456
|
+
signal.throwIfAborted();
|
|
457
|
+
const result = await binding.execute(input, {
|
|
458
|
+
signal,
|
|
459
|
+
waitForTool: (definition, waitOptions = {}) => this.waitForTool(definition, { signal, ...waitOptions }),
|
|
460
|
+
});
|
|
461
|
+
signal.throwIfAborted();
|
|
462
|
+
this.dispatchEvent(new DetailEvent("toolexecution", {
|
|
463
|
+
...running,
|
|
464
|
+
status: "success",
|
|
465
|
+
finishedAt: Date.now(),
|
|
466
|
+
result,
|
|
467
|
+
}));
|
|
468
|
+
return result;
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
this.dispatchEvent(new DetailEvent("toolexecution", {
|
|
472
|
+
...running,
|
|
473
|
+
status: "error",
|
|
474
|
+
finishedAt: Date.now(),
|
|
475
|
+
error,
|
|
476
|
+
}));
|
|
477
|
+
throw error;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
#getBrowserToolset() {
|
|
481
|
+
if (this.#browserToolsConfig === false)
|
|
482
|
+
return undefined;
|
|
483
|
+
if (!this.#browserToolset) {
|
|
484
|
+
const options = this.#browserToolsConfig === true
|
|
485
|
+
? {}
|
|
486
|
+
: this.#browserToolsConfig;
|
|
487
|
+
this.#browserToolset = createBrowserToolset(options);
|
|
488
|
+
}
|
|
489
|
+
return this.#browserToolset;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
package/dist/schema.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
function typeMatches(schema, value) {
|
|
2
|
+
switch (schema.type) {
|
|
3
|
+
case undefined:
|
|
4
|
+
return true;
|
|
5
|
+
case "null":
|
|
6
|
+
return value === null;
|
|
7
|
+
case "array":
|
|
8
|
+
return Array.isArray(value);
|
|
9
|
+
case "object":
|
|
10
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
11
|
+
case "integer":
|
|
12
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
13
|
+
default:
|
|
14
|
+
return typeof value === schema.type;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function validateAgentToolInput(schema, value, path = "input") {
|
|
18
|
+
if (!typeMatches(schema, value)) {
|
|
19
|
+
return [`${path} must be ${schema.type}.`];
|
|
20
|
+
}
|
|
21
|
+
if (schema.enum && !schema.enum.some((item) => Object.is(item, value))) {
|
|
22
|
+
return [`${path} must be one of the declared enum values.`];
|
|
23
|
+
}
|
|
24
|
+
if (schema.type === "array" && Array.isArray(value) && schema.items) {
|
|
25
|
+
return value.flatMap((item, index) => validateAgentToolInput(schema.items, item, `${path}[${index}]`));
|
|
26
|
+
}
|
|
27
|
+
if (schema.type !== "object" || value === null || typeof value !== "object") {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const record = value;
|
|
31
|
+
const errors = [];
|
|
32
|
+
for (const key of schema.required ?? []) {
|
|
33
|
+
if (!(key in record))
|
|
34
|
+
errors.push(`${path}.${key} is required.`);
|
|
35
|
+
}
|
|
36
|
+
for (const [key, item] of Object.entries(record)) {
|
|
37
|
+
const property = schema.properties?.[key];
|
|
38
|
+
if (property)
|
|
39
|
+
errors.push(...validateAgentToolInput(property, item, `${path}.${key}`));
|
|
40
|
+
else if (schema.additionalProperties === false) {
|
|
41
|
+
errors.push(`${path}.${key} is not allowed.`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return errors;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAEA,SAAS,WAAW,CAAC,MAAkB,EAAE,KAAc;IACrD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,IAAI,CAAC;QACxB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9E,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D;YACE,OAAO,OAAO,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAkB,EAClB,KAAc,EACd,IAAI,GAAG,OAAO;IAEd,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,IAAI,YAAY,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,IAAI,2CAA2C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnC,sBAAsB,CAAC,MAAM,CAAC,KAAM,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CACjE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,eAAe,CAAC,CAAC;IACnE,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;aAClF,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,kBAAkB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type JsonSchema = {
|
|
2
|
+
type?: "object" | "array" | "string" | "number" | "integer" | "boolean" | "null";
|
|
3
|
+
description?: string;
|
|
4
|
+
properties?: Record<string, JsonSchema>;
|
|
5
|
+
required?: readonly string[];
|
|
6
|
+
items?: JsonSchema;
|
|
7
|
+
enum?: readonly unknown[];
|
|
8
|
+
additionalProperties?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type AgentToolInputSchema = JsonSchema & {
|
|
11
|
+
type: "object";
|
|
12
|
+
};
|
|
13
|
+
type Simplify<TValue> = {
|
|
14
|
+
[TKey in keyof TValue]: TValue[TKey];
|
|
15
|
+
};
|
|
16
|
+
type RequiredPropertyKeys<TSchema extends JsonSchema, TProperties extends Record<string, JsonSchema>> = TSchema extends {
|
|
17
|
+
readonly required: readonly (infer TKey)[];
|
|
18
|
+
} ? Extract<TKey, keyof TProperties> : never;
|
|
19
|
+
type InferObjectSchema<TSchema extends JsonSchema, TProperties extends Record<string, JsonSchema>> = keyof TProperties extends never ? TSchema extends {
|
|
20
|
+
readonly additionalProperties: false;
|
|
21
|
+
} ? Record<string, never> : Record<string, unknown> : Simplify<{
|
|
22
|
+
[TKey in RequiredPropertyKeys<TSchema, TProperties>]-?: InferJsonSchema<TProperties[TKey]>;
|
|
23
|
+
} & {
|
|
24
|
+
[TKey in Exclude<keyof TProperties, RequiredPropertyKeys<TSchema, TProperties>>]?: InferJsonSchema<TProperties[TKey]>;
|
|
25
|
+
}> & (TSchema extends {
|
|
26
|
+
readonly additionalProperties: false;
|
|
27
|
+
} ? unknown : Record<string, unknown>);
|
|
28
|
+
export type InferJsonSchema<TSchema extends JsonSchema> = TSchema extends {
|
|
29
|
+
readonly enum: readonly (infer TValue)[];
|
|
30
|
+
} ? TValue : TSchema extends {
|
|
31
|
+
readonly type: "string";
|
|
32
|
+
} ? string : TSchema extends {
|
|
33
|
+
readonly type: "number" | "integer";
|
|
34
|
+
} ? number : TSchema extends {
|
|
35
|
+
readonly type: "boolean";
|
|
36
|
+
} ? boolean : TSchema extends {
|
|
37
|
+
readonly type: "null";
|
|
38
|
+
} ? null : TSchema extends {
|
|
39
|
+
readonly type: "array";
|
|
40
|
+
readonly items: infer TItem extends JsonSchema;
|
|
41
|
+
} ? InferJsonSchema<TItem>[] : TSchema extends {
|
|
42
|
+
readonly type: "array";
|
|
43
|
+
} ? unknown[] : TSchema extends {
|
|
44
|
+
readonly type: "object";
|
|
45
|
+
readonly properties: infer TProperties extends Record<string, JsonSchema>;
|
|
46
|
+
} ? InferObjectSchema<TSchema, TProperties> : TSchema extends {
|
|
47
|
+
readonly type: "object";
|
|
48
|
+
} ? TSchema extends {
|
|
49
|
+
readonly additionalProperties: false;
|
|
50
|
+
} ? Record<string, never> : Record<string, unknown> : unknown;
|
|
51
|
+
export type AgentContextValue = string | number | boolean | null | readonly AgentContextValue[] | {
|
|
52
|
+
readonly [key: string]: AgentContextValue;
|
|
53
|
+
};
|
|
54
|
+
export interface AgentContextEntry {
|
|
55
|
+
name: string;
|
|
56
|
+
description: string;
|
|
57
|
+
value: AgentContextValue;
|
|
58
|
+
}
|
|
59
|
+
export type AgentContextInput = AgentContextEntry;
|
|
60
|
+
export interface AgentContextRegistration {
|
|
61
|
+
update(context: AgentContextInput): void;
|
|
62
|
+
dispose(): void;
|
|
63
|
+
}
|
|
64
|
+
export interface AgentToolMetadata {
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
inputSchema: AgentToolInputSchema;
|
|
68
|
+
}
|
|
69
|
+
export interface AgentToolDefinition<TInput = Record<string, unknown>, TResult = unknown> extends AgentToolMetadata {
|
|
70
|
+
readonly __input?: TInput;
|
|
71
|
+
readonly __result?: TResult;
|
|
72
|
+
}
|
|
73
|
+
export interface AgentToolExecutionContext {
|
|
74
|
+
signal: AbortSignal;
|
|
75
|
+
waitForTool(definition: AgentToolDefinition<any, any>, options?: {
|
|
76
|
+
timeoutMs?: number;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
export type AgentToolExecutor<TInput, TResult> = (input: TInput, context: AgentToolExecutionContext) => TResult | Promise<TResult>;
|
|
80
|
+
export {};
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/webmcp.d.ts
ADDED