@siteverb/react 0.1.0-rc.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/README.md +43 -0
- package/dist/context.d.ts +10 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +41 -0
- package/dist/context.js.map +1 -0
- package/dist/hooks.d.ts +16 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +137 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# @siteverb/react
|
|
2
|
+
|
|
3
|
+
React and Next.js lifecycle bindings for `@siteverb/webmcp`.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
'use client';
|
|
7
|
+
|
|
8
|
+
import { SiteverbProvider, useSiteverbTool } from '@siteverb/react';
|
|
9
|
+
|
|
10
|
+
function SearchTool() {
|
|
11
|
+
const registration = useSiteverbTool({
|
|
12
|
+
id: 'catalog.search-products',
|
|
13
|
+
name: 'search_products',
|
|
14
|
+
description: 'Search products.',
|
|
15
|
+
annotations: { readOnlyHint: true },
|
|
16
|
+
execute: ({ query }: { query: string }) => searchProducts(query),
|
|
17
|
+
});
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function AgentSurface() {
|
|
22
|
+
return (
|
|
23
|
+
<SiteverbProvider>
|
|
24
|
+
<SearchTool />
|
|
25
|
+
</SiteverbProvider>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The provider creates one Siteverb client or accepts an existing client. Hooks register after commit,
|
|
31
|
+
unregister on cleanup, tolerate React Strict Mode, and route execution to the latest committed
|
|
32
|
+
callback without metadata re-registration on every render.
|
|
33
|
+
|
|
34
|
+
An owned provider renders its children during SSR and the first client paint through an inert,
|
|
35
|
+
unsupported registration surface, then rebinds hooks to the committed browser client after mount.
|
|
36
|
+
It never delays the wrapped application UI to initialize WebMCP.
|
|
37
|
+
|
|
38
|
+
Provider `options` initialize one owned client after mount and are intentionally not reactive. Pass
|
|
39
|
+
an explicitly managed `client` when configuration must change during the application lifecycle.
|
|
40
|
+
|
|
41
|
+
In Next.js App Router, place the provider/registrar in a `'use client'` module and mount it from the
|
|
42
|
+
layout or route that owns the tools. Registration remains discoverability; called server routes must
|
|
43
|
+
enforce authorization independently.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type SiteverbClient, type SiteverbOptions } from '@siteverb/webmcp';
|
|
3
|
+
export interface SiteverbProviderProps {
|
|
4
|
+
readonly children?: ReactNode;
|
|
5
|
+
readonly client?: SiteverbClient;
|
|
6
|
+
readonly options?: SiteverbOptions;
|
|
7
|
+
}
|
|
8
|
+
export declare function SiteverbProvider({ children, client, options }: SiteverbProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<SiteverbClient | undefined>> | import("react").FunctionComponentElement<SiteverbProviderProps>;
|
|
9
|
+
export declare function useSiteverbClient(): SiteverbClient;
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAkB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAI7F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CACpC;AA+BD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,qBAAqB,yKAIpF;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAIlD"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { createContext, createElement, useContext, useEffect, useRef, useState, } from 'react';
|
|
3
|
+
import { createSiteverb } from '@siteverb/webmcp';
|
|
4
|
+
const SiteverbContext = createContext(undefined);
|
|
5
|
+
function OwnedSiteverbProvider({ children, options }) {
|
|
6
|
+
const initialOptions = useRef(options);
|
|
7
|
+
const fallbackClient = useRef(undefined);
|
|
8
|
+
if (!fallbackClient.current) {
|
|
9
|
+
fallbackClient.current = createSiteverb({ modelContext: () => undefined });
|
|
10
|
+
}
|
|
11
|
+
const [ownedClient, setOwnedClient] = useState(undefined);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
let active = true;
|
|
14
|
+
let created;
|
|
15
|
+
queueMicrotask(() => {
|
|
16
|
+
if (!active)
|
|
17
|
+
return;
|
|
18
|
+
created = createSiteverb(initialOptions.current);
|
|
19
|
+
setOwnedClient(created);
|
|
20
|
+
});
|
|
21
|
+
return () => {
|
|
22
|
+
active = false;
|
|
23
|
+
created?.dispose();
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
return createElement(SiteverbContext.Provider, { value: ownedClient ?? fallbackClient.current }, children);
|
|
27
|
+
}
|
|
28
|
+
export function SiteverbProvider({ children, client, options }) {
|
|
29
|
+
if (client && options)
|
|
30
|
+
throw new TypeError('Pass either client or options to SiteverbProvider.');
|
|
31
|
+
if (client)
|
|
32
|
+
return createElement(SiteverbContext.Provider, { value: client }, children);
|
|
33
|
+
return createElement(OwnedSiteverbProvider, options === undefined ? {} : { options }, children);
|
|
34
|
+
}
|
|
35
|
+
export function useSiteverbClient() {
|
|
36
|
+
const client = useContext(SiteverbContext);
|
|
37
|
+
if (!client)
|
|
38
|
+
throw new Error('useSiteverbClient must be used inside SiteverbProvider.');
|
|
39
|
+
return client;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,cAAc,EAA6C,MAAM,kBAAkB,CAAC;AAE7F,MAAM,eAAe,GAAG,aAAa,CAA6B,SAAS,CAAC,CAAC;AAQ7E,SAAS,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAyB;IACzE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,MAAM,CAA6B,SAAS,CAAC,CAAC;IACrE,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC5B,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAA6B,SAAS,CAAC,CAAC;IAEtF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,OAAmC,CAAC;QACxC,cAAc,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACjD,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,aAAa,CAClB,eAAe,CAAC,QAAQ,EACxB,EAAE,KAAK,EAAE,WAAW,IAAI,cAAc,CAAC,OAAO,EAAE,EAChD,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAyB;IACnF,IAAI,MAAM,IAAI,OAAO;QAAE,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IACjG,IAAI,MAAM;QAAE,OAAO,aAAa,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxF,OAAO,aAAa,CAAC,qBAAqB,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AnySiteverbTool, RegisterToolOptions, RegisterToolsOptions, RegistrationStatus, SiteverbToolDefinition } from '@siteverb/webmcp';
|
|
2
|
+
export interface UseSiteverbRegistrationOptions extends RegisterToolOptions {
|
|
3
|
+
readonly enabled?: boolean;
|
|
4
|
+
readonly onError?: (error: unknown) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface UseSiteverbBatchOptions extends RegisterToolsOptions {
|
|
7
|
+
readonly enabled?: boolean;
|
|
8
|
+
readonly onError?: (error: unknown) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface SiteverbRegistrationState {
|
|
11
|
+
readonly error: unknown;
|
|
12
|
+
readonly status: RegistrationStatus;
|
|
13
|
+
}
|
|
14
|
+
export declare function useSiteverbTool<TInput extends object, TResult>(definition: SiteverbToolDefinition<TInput, TResult>, options?: UseSiteverbRegistrationOptions): SiteverbRegistrationState;
|
|
15
|
+
export declare function useSiteverbTools(definitions: readonly AnySiteverbTool[], options?: UseSiteverbBatchOptions): SiteverbRegistrationState;
|
|
16
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,kBAAkB,CAAC;AAK1B,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAeD,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,EAC5D,UAAU,EAAE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,OAAO,GAAE,8BAAmC,GAC3C,yBAAyB,CAuD3B;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,SAAS,eAAe,EAAE,EACvC,OAAO,GAAE,uBAA4B,GACpC,yBAAyB,CA8D3B"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useSiteverbClient } from './context.js';
|
|
4
|
+
const useCommittedLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
|
|
5
|
+
function metadataKey(tools) {
|
|
6
|
+
return JSON.stringify(tools.map(({ id, name, title, description, inputSchema, annotations }) => ({
|
|
7
|
+
id,
|
|
8
|
+
name,
|
|
9
|
+
title,
|
|
10
|
+
description,
|
|
11
|
+
inputSchema,
|
|
12
|
+
annotations,
|
|
13
|
+
})));
|
|
14
|
+
}
|
|
15
|
+
export function useSiteverbTool(definition, options = {}) {
|
|
16
|
+
const client = useSiteverbClient();
|
|
17
|
+
const definitionRef = useRef(definition);
|
|
18
|
+
const onErrorRef = useRef(options.onError);
|
|
19
|
+
const [state, setState] = useState({
|
|
20
|
+
error: undefined,
|
|
21
|
+
status: options.enabled === false ? 'unregistered' : 'pending',
|
|
22
|
+
});
|
|
23
|
+
const key = metadataKey([definition]);
|
|
24
|
+
const exposedToKey = JSON.stringify(options.exposedTo ?? []);
|
|
25
|
+
useCommittedLayoutEffect(() => {
|
|
26
|
+
definitionRef.current = definition;
|
|
27
|
+
onErrorRef.current = options.onError;
|
|
28
|
+
});
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (options.enabled === false) {
|
|
31
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
let active = true;
|
|
35
|
+
setState({ error: undefined, status: 'pending' });
|
|
36
|
+
const wrappedDefinition = {
|
|
37
|
+
...definition,
|
|
38
|
+
execute: (input, context) => definitionRef.current.execute(input, context),
|
|
39
|
+
};
|
|
40
|
+
const registration = client.registerTool(wrappedDefinition, {
|
|
41
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
42
|
+
...(options.exposedTo === undefined ? {} : { exposedTo: options.exposedTo }),
|
|
43
|
+
});
|
|
44
|
+
const onExternalAbort = () => {
|
|
45
|
+
if (active)
|
|
46
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
47
|
+
};
|
|
48
|
+
options.signal?.addEventListener('abort', onExternalAbort, { once: true });
|
|
49
|
+
void registration.ready
|
|
50
|
+
.then((result) => {
|
|
51
|
+
if (active)
|
|
52
|
+
setState({ error: undefined, status: result.status });
|
|
53
|
+
})
|
|
54
|
+
.catch((error) => {
|
|
55
|
+
if (options.signal?.aborted) {
|
|
56
|
+
if (active)
|
|
57
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
onErrorRef.current?.(error);
|
|
61
|
+
if (active)
|
|
62
|
+
setState({ error, status: 'failed' });
|
|
63
|
+
});
|
|
64
|
+
return () => {
|
|
65
|
+
active = false;
|
|
66
|
+
options.signal?.removeEventListener('abort', onExternalAbort);
|
|
67
|
+
registration.unregister();
|
|
68
|
+
};
|
|
69
|
+
}, [client, key, exposedToKey, options.enabled, options.signal]);
|
|
70
|
+
return state;
|
|
71
|
+
}
|
|
72
|
+
export function useSiteverbTools(definitions, options = {}) {
|
|
73
|
+
const client = useSiteverbClient();
|
|
74
|
+
const definitionsRef = useRef(definitions);
|
|
75
|
+
const onErrorRef = useRef(options.onError);
|
|
76
|
+
const [state, setState] = useState({
|
|
77
|
+
error: undefined,
|
|
78
|
+
status: options.enabled === false ? 'unregistered' : 'pending',
|
|
79
|
+
});
|
|
80
|
+
const key = metadataKey(definitions);
|
|
81
|
+
const exposedToKey = JSON.stringify(options.exposedTo ?? []);
|
|
82
|
+
useCommittedLayoutEffect(() => {
|
|
83
|
+
definitionsRef.current = definitions;
|
|
84
|
+
onErrorRef.current = options.onError;
|
|
85
|
+
});
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (options.enabled === false) {
|
|
88
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let active = true;
|
|
92
|
+
setState({ error: undefined, status: 'pending' });
|
|
93
|
+
const wrappers = definitions.map((definition) => ({
|
|
94
|
+
...definition,
|
|
95
|
+
execute: (input, context) => {
|
|
96
|
+
const latest = definitionsRef.current.find((tool) => tool.id === definition.id);
|
|
97
|
+
if (!latest)
|
|
98
|
+
throw new Error(`Siteverb tool "${definition.id}" is no longer available.`);
|
|
99
|
+
return latest.execute(input, context);
|
|
100
|
+
},
|
|
101
|
+
}));
|
|
102
|
+
const registration = client.registerTools(wrappers, {
|
|
103
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
104
|
+
...(options.exposedTo === undefined ? {} : { exposedTo: options.exposedTo }),
|
|
105
|
+
...(options.atomic === undefined ? {} : { atomic: options.atomic }),
|
|
106
|
+
});
|
|
107
|
+
const onExternalAbort = () => {
|
|
108
|
+
if (active)
|
|
109
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
110
|
+
};
|
|
111
|
+
options.signal?.addEventListener('abort', onExternalAbort, { once: true });
|
|
112
|
+
void registration.ready
|
|
113
|
+
.then((results) => {
|
|
114
|
+
if (!active)
|
|
115
|
+
return;
|
|
116
|
+
const unsupported = results.some((result) => result.status === 'unsupported');
|
|
117
|
+
setState({ error: undefined, status: unsupported ? 'unsupported' : 'registered' });
|
|
118
|
+
})
|
|
119
|
+
.catch((error) => {
|
|
120
|
+
if (options.signal?.aborted) {
|
|
121
|
+
if (active)
|
|
122
|
+
setState({ error: undefined, status: 'unregistered' });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
onErrorRef.current?.(error);
|
|
126
|
+
if (active)
|
|
127
|
+
setState({ error, status: 'failed' });
|
|
128
|
+
});
|
|
129
|
+
return () => {
|
|
130
|
+
active = false;
|
|
131
|
+
options.signal?.removeEventListener('abort', onExternalAbort);
|
|
132
|
+
registration.unregister();
|
|
133
|
+
};
|
|
134
|
+
}, [client, key, exposedToKey, options.atomic, options.enabled, options.signal]);
|
|
135
|
+
return state;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { SiteverbProvider, useSiteverbClient } from './context.js';
|
|
2
|
+
export { useSiteverbTool, useSiteverbTools } from './hooks.js';
|
|
3
|
+
export type { SiteverbProviderProps } from './context.js';
|
|
4
|
+
export type { SiteverbRegistrationState, UseSiteverbBatchOptions, UseSiteverbRegistrationOptions, } from './hooks.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC/D,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EACV,yBAAyB,EACzB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@siteverb/react",
|
|
3
|
+
"version": "0.1.0-rc.0",
|
|
4
|
+
"description": "React and Next.js lifecycle bindings for @siteverb/webmcp.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./package.json": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=22"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.build.json",
|
|
25
|
+
"package:check": "publint && attw --pack . --profile esm-only",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"webmcp",
|
|
31
|
+
"react",
|
|
32
|
+
"nextjs",
|
|
33
|
+
"browser-agents"
|
|
34
|
+
],
|
|
35
|
+
"license": "Apache-2.0",
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/siteverb/siteverb.git",
|
|
39
|
+
"directory": "packages/react"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public",
|
|
43
|
+
"provenance": true
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@siteverb/webmcp": "^0.1.0-rc.0"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"react": ">=18.3"
|
|
50
|
+
}
|
|
51
|
+
}
|