@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.
Files changed (82) hide show
  1. package/dist/browser/controller.d.ts +30 -0
  2. package/dist/browser/controller.js +783 -0
  3. package/dist/browser/controller.js.map +1 -0
  4. package/dist/browser/dom.d.ts +43 -0
  5. package/dist/browser/dom.js +438 -0
  6. package/dist/browser/dom.js.map +1 -0
  7. package/dist/browser/feedback.d.ts +4 -0
  8. package/dist/browser/feedback.js +5 -0
  9. package/dist/browser/feedback.js.map +1 -0
  10. package/dist/browser/locator.d.ts +19 -0
  11. package/dist/browser/locator.js +277 -0
  12. package/dist/browser/locator.js.map +1 -0
  13. package/dist/browser/prompt.d.ts +5 -0
  14. package/dist/browser/prompt.generated.d.ts +1 -0
  15. package/dist/browser/prompt.generated.js +50 -0
  16. package/dist/browser/prompt.generated.js.map +1 -0
  17. package/dist/browser/prompt.js +9 -0
  18. package/dist/browser/prompt.js.map +1 -0
  19. package/dist/browser/snapshot.d.ts +7 -0
  20. package/dist/browser/snapshot.js +424 -0
  21. package/dist/browser/snapshot.js.map +1 -0
  22. package/dist/browser/toolset.d.ts +35 -0
  23. package/dist/browser/toolset.js +383 -0
  24. package/dist/browser/toolset.js.map +1 -0
  25. package/dist/browser/types.d.ts +129 -0
  26. package/dist/browser/types.js +2 -0
  27. package/dist/browser/types.js.map +1 -0
  28. package/dist/browser/worker-runner.d.ts +11 -0
  29. package/dist/browser/worker-runner.js +400 -0
  30. package/dist/browser/worker-runner.js.map +1 -0
  31. package/dist/definition.d.ts +16 -0
  32. package/dist/definition.js +72 -0
  33. package/dist/definition.js.map +1 -0
  34. package/dist/index.d.ts +7 -0
  35. package/dist/index.js +4 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/internal-react.d.ts +12 -0
  38. package/dist/internal-react.js +23 -0
  39. package/dist/internal-react.js.map +1 -0
  40. package/dist/internal-types.d.ts +11 -0
  41. package/dist/internal-types.js +2 -0
  42. package/dist/internal-types.js.map +1 -0
  43. package/dist/internal.d.ts +9 -0
  44. package/dist/internal.js +5 -0
  45. package/dist/internal.js.map +1 -0
  46. package/dist/react.d.ts +25 -0
  47. package/dist/react.js +258 -0
  48. package/dist/react.js.map +1 -0
  49. package/dist/runtime.d.ts +93 -0
  50. package/dist/runtime.js +492 -0
  51. package/dist/runtime.js.map +1 -0
  52. package/dist/schema.d.ts +2 -0
  53. package/dist/schema.js +46 -0
  54. package/dist/schema.js.map +1 -0
  55. package/dist/types.d.ts +80 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/webmcp.d.ts +2 -0
  59. package/dist/webmcp.js +73 -0
  60. package/dist/webmcp.js.map +1 -0
  61. package/package.json +26 -0
  62. package/src/browser/controller.ts +984 -0
  63. package/src/browser/dom.ts +507 -0
  64. package/src/browser/feedback.ts +5 -0
  65. package/src/browser/locator.ts +383 -0
  66. package/src/browser/prompt.generated.ts +50 -0
  67. package/src/browser/prompt.ts +10 -0
  68. package/src/browser/snapshot.ts +542 -0
  69. package/src/browser/toolset.ts +522 -0
  70. package/src/browser/types.ts +172 -0
  71. package/src/browser/worker-runner.ts +468 -0
  72. package/src/definition.ts +115 -0
  73. package/src/index.ts +35 -0
  74. package/src/internal-react.tsx +62 -0
  75. package/src/internal-types.ts +12 -0
  76. package/src/internal.ts +36 -0
  77. package/src/react.tsx +397 -0
  78. package/src/runtime.ts +722 -0
  79. package/src/schema.ts +52 -0
  80. package/src/types.ts +123 -0
  81. package/src/webmcp.ts +102 -0
  82. package/tsconfig.json +8 -0
package/dist/react.js ADDED
@@ -0,0 +1,258 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, Fragment, cloneElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from "react";
3
+ import { defineAgentTool } from "./definition.js";
4
+ import { AgentToolError, getInternalToolRuntime } from "./runtime.js";
5
+ import { InternalToolRuntimeScope, useInternalToolRuntime, } from "./internal-react.js";
6
+ import { connectToolRuntimeToWebMcp } from "./webmcp.js";
7
+ function useAgentBinding(definition, execute) {
8
+ const runtime = useInternalToolRuntime();
9
+ const executeRef = useRef(execute);
10
+ executeRef.current = execute;
11
+ useLayoutEffect(() => {
12
+ const controller = new AbortController();
13
+ runtime.register(definition, (input, context) => executeRef.current(input, context), { signal: controller.signal });
14
+ return () => controller.abort();
15
+ }, [runtime, definition]);
16
+ }
17
+ export function useAgentTool(definition, execute) {
18
+ useAgentBinding(definition, execute);
19
+ }
20
+ export function AgentToolsProvider({ children, toolRuntime, webMcp = true, }) {
21
+ const runtime = getInternalToolRuntime(toolRuntime);
22
+ return (_jsxs(InternalToolRuntimeScope, { runtime: toolRuntime, children: [_jsx(WebMcpRuntimeBridge, { enabled: webMcp, runtime: runtime }), children] }));
23
+ }
24
+ function WebMcpRuntimeBridge({ enabled, runtime, }) {
25
+ useEffect(() => {
26
+ if (!enabled)
27
+ return undefined;
28
+ return connectToolRuntimeToWebMcp(runtime);
29
+ }, [enabled, runtime]);
30
+ return null;
31
+ }
32
+ export function useAgentContext(context) {
33
+ const runtime = useInternalToolRuntime();
34
+ const registrationRef = useRef(undefined);
35
+ useLayoutEffect(() => {
36
+ const controller = new AbortController();
37
+ const registration = runtime.registerContext(context, { signal: controller.signal });
38
+ registrationRef.current = registration;
39
+ return () => {
40
+ if (registrationRef.current === registration)
41
+ registrationRef.current = undefined;
42
+ controller.abort();
43
+ };
44
+ }, [runtime, context.name]);
45
+ useLayoutEffect(() => {
46
+ registrationRef.current?.update(context);
47
+ }, [runtime, context.name, context.description, context.value]);
48
+ }
49
+ export function AgentContext(context) {
50
+ useAgentContext(context);
51
+ return null;
52
+ }
53
+ function waitForActionResult(result, signal) {
54
+ if (signal.aborted)
55
+ return Promise.reject(signal.reason);
56
+ return new Promise((resolve, reject) => {
57
+ const onAbort = () => {
58
+ signal.removeEventListener("abort", onAbort);
59
+ reject(signal.reason);
60
+ };
61
+ signal.addEventListener("abort", onAbort, { once: true });
62
+ Promise.resolve(result).then((value) => {
63
+ signal.removeEventListener("abort", onAbort);
64
+ resolve(value);
65
+ }, (error) => {
66
+ signal.removeEventListener("abort", onAbort);
67
+ reject(error);
68
+ });
69
+ });
70
+ }
71
+ function setRefValue(ref, value) {
72
+ if (typeof ref === "function") {
73
+ const cleanup = ref(value);
74
+ return typeof cleanup === "function" ? cleanup : undefined;
75
+ }
76
+ if (ref)
77
+ ref.current = value;
78
+ }
79
+ function getElementRef(element) {
80
+ const props = element.props;
81
+ const refDescriptor = Object.getOwnPropertyDescriptor(element, "ref");
82
+ if (refDescriptor && "value" in refDescriptor) {
83
+ return refDescriptor.value;
84
+ }
85
+ return props.ref;
86
+ }
87
+ function isHTMLElement(value) {
88
+ if (!value || typeof value !== "object")
89
+ return false;
90
+ const ownerDocument = value.ownerDocument;
91
+ const ElementConstructor = ownerDocument?.defaultView?.HTMLElement ??
92
+ (typeof HTMLElement === "undefined" ? undefined : HTMLElement);
93
+ return ElementConstructor !== undefined && value instanceof ElementConstructor;
94
+ }
95
+ function warnAgentUIAction(message) {
96
+ if (typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
97
+ console.warn(message);
98
+ }
99
+ }
100
+ const eventAdapters = {
101
+ click: {
102
+ invoke(target) {
103
+ target.click();
104
+ },
105
+ },
106
+ };
107
+ export function AgentUIAction({ name, description, event = "click", children, }) {
108
+ const runtime = useInternalToolRuntime();
109
+ const child = Children.only(children);
110
+ const isFragment = child.type === Fragment;
111
+ const handler = isFragment ? undefined : child.props.onClick;
112
+ const childDisabled = isFragment ? false : Boolean(child.props.disabled);
113
+ const childRef = isFragment ? undefined : getElementRef(child);
114
+ const [target, setTarget] = useState(null);
115
+ const targetRef = useRef(null);
116
+ const handlerRef = useRef(handler);
117
+ const disabledRef = useRef(childDisabled);
118
+ const pendingInvocationRef = useRef(null);
119
+ const invalidTargetRef = useRef(false);
120
+ const warnedTargetRef = useRef(false);
121
+ const warnedChildRef = useRef(null);
122
+ const invokingRef = useRef(false);
123
+ useLayoutEffect(() => {
124
+ handlerRef.current = handler;
125
+ disabledRef.current = childDisabled;
126
+ });
127
+ const mergedRef = useCallback((value) => {
128
+ const element = isHTMLElement(value) ? value : null;
129
+ const cleanupChildRef = setRefValue(childRef, value);
130
+ invalidTargetRef.current = value !== null && !element;
131
+ targetRef.current = element;
132
+ setTarget(element);
133
+ if (element)
134
+ warnedTargetRef.current = false;
135
+ if (cleanupChildRef) {
136
+ return () => {
137
+ cleanupChildRef();
138
+ if (targetRef.current === element) {
139
+ invalidTargetRef.current = false;
140
+ targetRef.current = null;
141
+ setTarget(null);
142
+ }
143
+ };
144
+ }
145
+ }, [childRef]);
146
+ const invokeHandler = useCallback((mouseEvent) => {
147
+ const currentHandler = handlerRef.current;
148
+ const pending = pendingInvocationRef.current;
149
+ if (pending)
150
+ pendingInvocationRef.current = null;
151
+ if (!currentHandler) {
152
+ pending?.reject(new AgentToolError("ACTION_NOT_HANDLED", `AgentUIAction "${name}" does not have an onClick handler.`));
153
+ return undefined;
154
+ }
155
+ try {
156
+ const result = currentHandler(mouseEvent);
157
+ if (pending)
158
+ Promise.resolve(result).then(pending.resolve, pending.reject);
159
+ return result;
160
+ }
161
+ catch (error) {
162
+ if (pending) {
163
+ pending.reject(error);
164
+ return undefined;
165
+ }
166
+ throw error;
167
+ }
168
+ }, [name]);
169
+ const definition = useMemo(() => defineAgentTool({
170
+ name,
171
+ description,
172
+ }), [name, description]);
173
+ useLayoutEffect(() => {
174
+ if (isFragment || !handler) {
175
+ const warningType = isFragment ? "fragment" : "handler";
176
+ if (warnedChildRef.current !== warningType) {
177
+ warnedChildRef.current = warningType;
178
+ warnAgentUIAction(isFragment
179
+ ? `AgentUIAction "${name}" does not support React.Fragment children.`
180
+ : `AgentUIAction "${name}" needs a child with onClick.`);
181
+ }
182
+ return;
183
+ }
184
+ warnedChildRef.current = null;
185
+ if (!target) {
186
+ if (!targetRef.current && !warnedTargetRef.current) {
187
+ warnedTargetRef.current = true;
188
+ warnAgentUIAction(invalidTargetRef.current
189
+ ? `AgentUIAction "${name}" needs its child ref to resolve to an HTMLElement; the Tool is not registered.`
190
+ : `AgentUIAction "${name}" needs its child to forward ref to an HTMLElement; the Tool is not registered.`);
191
+ }
192
+ return;
193
+ }
194
+ const controller = new AbortController();
195
+ runtime.register(definition, async (_input, context) => {
196
+ if (invokingRef.current) {
197
+ throw new AgentToolError("ACTION_IN_FLIGHT", `AgentUIAction "${name}" is already being invoked.`);
198
+ }
199
+ if (disabledRef.current) {
200
+ throw new AgentToolError("TOOL_UNAVAILABLE", `AgentUIAction "${name}" is disabled.`);
201
+ }
202
+ const currentTarget = targetRef.current;
203
+ if (!currentTarget || !currentTarget.isConnected) {
204
+ throw new AgentToolError("ACTION_TARGET_UNAVAILABLE", `AgentUIAction "${name}" target is not available.`);
205
+ }
206
+ invokingRef.current = true;
207
+ let resolveInvocation;
208
+ let rejectInvocation;
209
+ const actionPromise = new Promise((resolve, reject) => {
210
+ resolveInvocation = resolve;
211
+ rejectInvocation = reject;
212
+ });
213
+ const pendingInvocation = {
214
+ resolve: resolveInvocation,
215
+ reject: rejectInvocation,
216
+ };
217
+ pendingInvocationRef.current = pendingInvocation;
218
+ try {
219
+ eventAdapters[event].invoke(currentTarget);
220
+ }
221
+ catch (error) {
222
+ if (pendingInvocationRef.current === pendingInvocation) {
223
+ pendingInvocationRef.current = null;
224
+ }
225
+ invokingRef.current = false;
226
+ throw error;
227
+ }
228
+ if (pendingInvocationRef.current === pendingInvocation) {
229
+ pendingInvocationRef.current = null;
230
+ invokingRef.current = false;
231
+ throw new AgentToolError("ACTION_NOT_HANDLED", `AgentUIAction "${name}" click did not invoke its onClick handler.`);
232
+ }
233
+ try {
234
+ return await waitForActionResult(actionPromise, context.signal);
235
+ }
236
+ finally {
237
+ if (context.signal.aborted) {
238
+ void actionPromise.then(() => {
239
+ invokingRef.current = false;
240
+ }, () => {
241
+ invokingRef.current = false;
242
+ });
243
+ }
244
+ else {
245
+ invokingRef.current = false;
246
+ }
247
+ }
248
+ }, { signal: controller.signal });
249
+ return () => controller.abort();
250
+ }, [runtime, definition, event, handler !== undefined, isFragment, name, target]);
251
+ if (isFragment)
252
+ return child;
253
+ return cloneElement(child, {
254
+ onClick: invokeHandler,
255
+ ref: mergedRef,
256
+ });
257
+ }
258
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { AgentContextEntry, AgentContextInput, AgentContextRegistration, AgentToolDefinition, AgentToolExecutor } from "./types.js";
2
+ import { type BrowserToolsConfig } from "./browser/toolset.js";
3
+ export interface ToolRuntimeOptions {
4
+ readonly browserTools?: BrowserToolsConfig;
5
+ }
6
+ declare const CONTEXT_ERROR_CODES: readonly ["CONTEXT_DISPOSED", "CONTEXT_NAME_MISMATCH", "DUPLICATE_CONTEXT", "INVALID_CONTEXT"];
7
+ declare const TOOL_ERROR_CODES: readonly ["ACTION_IN_FLIGHT", "ACTION_NOT_HANDLED", "ACTION_TARGET_UNAVAILABLE", "BROWSER_EXECUTION_FAILED", "BROWSER_SNAPSHOT_REQUIRED", "BROWSER_TOOLS_UNAVAILABLE", "CONTRACT_MISMATCH", "DUPLICATE_BINDING", "INVALID_INPUT", "INVALID_TOOL_RUNTIME", "TOOL_CANCELLED", "TOOL_REGISTRATION_TIMEOUT", "TOOL_SKIPPED", "TOOL_UNAVAILABLE", "UNKNOWN_TOOL"];
8
+ type AgentContextErrorCode = typeof CONTEXT_ERROR_CODES[number];
9
+ type AgentToolErrorCode = typeof TOOL_ERROR_CODES[number];
10
+ export declare function isToolRuntimeError(error: unknown): error is {
11
+ readonly type: "tool_runtime_error";
12
+ readonly domain: "tool" | "context";
13
+ readonly code: string;
14
+ readonly message: string;
15
+ readonly details?: unknown;
16
+ };
17
+ declare const toolRuntimeBrand: unique symbol;
18
+ export interface ToolRuntime {
19
+ readonly [toolRuntimeBrand]: true;
20
+ getTools(): readonly AgentToolDefinition[];
21
+ getContexts(options?: {
22
+ signal?: AbortSignal;
23
+ }): Promise<readonly AgentContextEntry[]>;
24
+ execute<TInput, TResult>(definition: AgentToolDefinition<TInput, TResult>, input: TInput, options?: {
25
+ signal?: AbortSignal;
26
+ }): Promise<TResult>;
27
+ }
28
+ export declare class AgentToolError extends Error {
29
+ readonly code: AgentToolErrorCode;
30
+ readonly details?: unknown | undefined;
31
+ readonly type: "tool_runtime_error";
32
+ readonly domain: "tool";
33
+ constructor(code: AgentToolErrorCode, message: string, details?: unknown | undefined);
34
+ }
35
+ export declare class AgentContextError extends Error {
36
+ readonly code: AgentContextErrorCode;
37
+ readonly type: "tool_runtime_error";
38
+ readonly domain: "context";
39
+ constructor(code: AgentContextErrorCode, message: string);
40
+ }
41
+ export interface InternalToolRuntime extends ToolRuntime, EventTarget {
42
+ register<TInput, TResult>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options?: {
43
+ signal?: AbortSignal;
44
+ }): () => void;
45
+ registerContext(input: AgentContextInput, options?: {
46
+ signal?: AbortSignal;
47
+ }): AgentContextRegistration;
48
+ getApplicationTools(): readonly AgentToolDefinition[];
49
+ isRegistered(name: string): boolean;
50
+ executeApplicationTool(name: string, input: unknown, options?: {
51
+ signal?: AbortSignal;
52
+ expectedDefinition?: AgentToolDefinition;
53
+ }): Promise<unknown>;
54
+ waitForTool(definition: AgentToolDefinition<any, any>, options?: {
55
+ signal?: AbortSignal;
56
+ timeoutMs?: number;
57
+ }): Promise<void>;
58
+ getContextRevision(): number;
59
+ getContextsNow(): readonly AgentContextEntry[];
60
+ }
61
+ export declare function createToolRuntime(options?: ToolRuntimeOptions): ToolRuntime;
62
+ export declare function getInternalToolRuntime(runtime: ToolRuntime): InternalToolRuntime;
63
+ export declare class ToolRuntimeImplementation extends EventTarget implements ToolRuntime, InternalToolRuntime {
64
+ #private;
65
+ readonly [toolRuntimeBrand]: true;
66
+ constructor(options?: ToolRuntimeOptions);
67
+ register<TInput, TResult>(definition: AgentToolDefinition<TInput, TResult>, execute: AgentToolExecutor<TInput, TResult>, options?: {
68
+ signal?: AbortSignal;
69
+ }): () => void;
70
+ registerContext(input: AgentContextInput, options?: {
71
+ signal?: AbortSignal;
72
+ }): AgentContextRegistration;
73
+ getContextsNow(): readonly AgentContextEntry[];
74
+ getContextRevision(): number;
75
+ getContexts(options?: {
76
+ signal?: AbortSignal;
77
+ }): Promise<readonly AgentContextEntry[]>;
78
+ getApplicationTools(): readonly AgentToolDefinition[];
79
+ isRegistered(name: string): boolean;
80
+ getTools(): readonly AgentToolDefinition[];
81
+ waitForTool(definition: AgentToolDefinition<any, any>, options?: {
82
+ signal?: AbortSignal;
83
+ timeoutMs?: number;
84
+ }): Promise<void>;
85
+ execute<TInput, TResult>(definition: AgentToolDefinition<TInput, TResult>, input: TInput, options?: {
86
+ signal?: AbortSignal;
87
+ }): Promise<TResult>;
88
+ executeApplicationTool(name: string, input: unknown, options?: {
89
+ signal?: AbortSignal;
90
+ expectedDefinition?: AgentToolDefinition;
91
+ }): Promise<unknown>;
92
+ }
93
+ export {};