@webmcp-bridge/core 0.4.2 → 0.5.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/install.d.ts +2 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +69 -2
- package/dist/install.js.map +1 -1
- package/dist/runtime.d.ts +4 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +47 -0
- package/dist/runtime.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +19 -1
package/dist/install.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* This module installs the modelContext shim on a target environment.
|
|
3
3
|
* It depends on runtime creation and exposes a stable install handle for callers.
|
|
4
4
|
*/
|
|
5
|
-
import type { BridgeHandle, BridgeInstallTarget, BridgeToolDefinition, BridgeTransport } from "./types.js";
|
|
5
|
+
import type { BridgeHandle, BridgeInstallTarget, BridgeResourceDefinition, BridgeToolDefinition, BridgeTransport } from "./types.js";
|
|
6
6
|
export type InstallBridgeOptions = {
|
|
7
7
|
preferNative?: boolean;
|
|
8
8
|
transport?: BridgeTransport;
|
|
@@ -10,4 +10,5 @@ export type InstallBridgeOptions = {
|
|
|
10
10
|
export declare function isNativeModelContext(target: BridgeInstallTarget): boolean;
|
|
11
11
|
export declare function installModelContextBridge(target: BridgeInstallTarget, options?: InstallBridgeOptions): BridgeHandle;
|
|
12
12
|
export declare function defineLocalTool(name: string, execute: BridgeToolDefinition["execute"], description?: string): BridgeToolDefinition;
|
|
13
|
+
export declare function defineLocalResource(uri: string, read: BridgeResourceDefinition["read"], options?: Omit<BridgeResourceDefinition, "uri" | "read">): BridgeResourceDefinition;
|
|
13
14
|
//# sourceMappingURL=install.d.ts.map
|
package/dist/install.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAGhB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,wBAAwB,EAExB,oBAAoB,EACpB,eAAe,EAGhB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAWzE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,YAAY,CA8Ed;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,EACxC,WAAW,CAAC,EAAE,MAAM,GACnB,oBAAoB,CAStB;AAkCD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,KAAK,GAAG,MAAM,CAAC,GACvD,wBAAwB,CAa1B"}
|
package/dist/install.js
CHANGED
|
@@ -9,22 +9,47 @@ export function isNativeModelContext(target) {
|
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
11
|
return (typeof modelContext.registerTool === "function" &&
|
|
12
|
-
typeof modelContext.unregisterTool === "function"
|
|
12
|
+
typeof modelContext.unregisterTool === "function" &&
|
|
13
|
+
typeof modelContext.registerResource === "function" &&
|
|
14
|
+
typeof modelContext.unregisterResource === "function");
|
|
13
15
|
}
|
|
14
16
|
export function installModelContextBridge(target, options) {
|
|
15
17
|
const preferNative = options?.preferNative ?? true;
|
|
16
18
|
const native = target.navigator.modelContext;
|
|
17
19
|
if (preferNative && isNativeModelContext(target) && native) {
|
|
20
|
+
const nativeAny = native;
|
|
21
|
+
let nativeResources = [];
|
|
22
|
+
const refreshNativeResources = () => {
|
|
23
|
+
if (typeof nativeAny.listResources !== "function") {
|
|
24
|
+
nativeResources = [];
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
void Promise.resolve(nativeAny.listResources())
|
|
28
|
+
.then((resources) => {
|
|
29
|
+
nativeResources = toNativeResourceDescriptors(resources);
|
|
30
|
+
})
|
|
31
|
+
.catch(() => {
|
|
32
|
+
nativeResources = [];
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
refreshNativeResources();
|
|
18
36
|
return {
|
|
19
37
|
mode: "native",
|
|
20
38
|
listTools: () => [],
|
|
21
39
|
invokeTool: async (name, input) => {
|
|
22
|
-
const nativeAny = native;
|
|
23
40
|
if (typeof nativeAny.callTool !== "function") {
|
|
24
41
|
throw new Error("native modelContext callTool is not available");
|
|
25
42
|
}
|
|
26
43
|
return await nativeAny.callTool(name, input);
|
|
27
44
|
},
|
|
45
|
+
listResources: () => [...nativeResources],
|
|
46
|
+
readResource: async (uri) => {
|
|
47
|
+
if (typeof nativeAny.readResource !== "function") {
|
|
48
|
+
throw new Error("native modelContext readResource is not available");
|
|
49
|
+
}
|
|
50
|
+
refreshNativeResources();
|
|
51
|
+
return await nativeAny.readResource(uri);
|
|
52
|
+
},
|
|
28
53
|
uninstall: () => {
|
|
29
54
|
// no-op for native mode
|
|
30
55
|
},
|
|
@@ -42,6 +67,8 @@ export function installModelContextBridge(target, options) {
|
|
|
42
67
|
mode: "shim",
|
|
43
68
|
listTools: () => runtime.listTools(),
|
|
44
69
|
invokeTool: (name, input) => runtime.invokeTool(name, input),
|
|
70
|
+
listResources: () => runtime.listResources(),
|
|
71
|
+
readResource: (uri) => runtime.readResource(uri),
|
|
45
72
|
uninstall: () => {
|
|
46
73
|
runtime.clear();
|
|
47
74
|
if (previous) {
|
|
@@ -67,4 +94,44 @@ export function defineLocalTool(name, execute, description) {
|
|
|
67
94
|
}
|
|
68
95
|
return tool;
|
|
69
96
|
}
|
|
97
|
+
function toNativeResourceDescriptors(value) {
|
|
98
|
+
if (!Array.isArray(value)) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
return value.flatMap((entry) => {
|
|
102
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const candidate = entry;
|
|
106
|
+
if (typeof candidate.uri !== "string" || !candidate.uri.trim()) {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
uri: candidate.uri,
|
|
112
|
+
name: typeof candidate.name === "string" && candidate.name.trim() ? candidate.name : candidate.uri,
|
|
113
|
+
...(typeof candidate.description === "string" && candidate.description.trim()
|
|
114
|
+
? { description: candidate.description }
|
|
115
|
+
: {}),
|
|
116
|
+
...(typeof candidate.mimeType === "string" && candidate.mimeType.trim()
|
|
117
|
+
? { mimeType: candidate.mimeType }
|
|
118
|
+
: {}),
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
export function defineLocalResource(uri, read, options) {
|
|
124
|
+
const resource = {
|
|
125
|
+
uri,
|
|
126
|
+
name: options?.name ?? uri,
|
|
127
|
+
read,
|
|
128
|
+
};
|
|
129
|
+
if (options?.description !== undefined) {
|
|
130
|
+
resource.description = options.description;
|
|
131
|
+
}
|
|
132
|
+
if (options?.mimeType !== undefined) {
|
|
133
|
+
resource.mimeType = options.mimeType;
|
|
134
|
+
}
|
|
135
|
+
return resource;
|
|
136
|
+
}
|
|
70
137
|
//# sourceMappingURL=install.js.map
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* This module builds the in-memory modelContext shim runtime.
|
|
3
3
|
* It depends on shared type contracts and is used by install logic to expose tool registration and invocation behavior.
|
|
4
4
|
*/
|
|
5
|
-
import type { BridgeToolDefinition, BridgeTransport, JsonValue, ModelContextLike } from "./types.js";
|
|
5
|
+
import type { BridgeResourceDescriptor, BridgeToolDefinition, BridgeTransport, JsonValue, ModelContextLike } from "./types.js";
|
|
6
6
|
export type BridgeRuntime = {
|
|
7
7
|
modelContext: ModelContextLike;
|
|
8
8
|
listTools: () => ReadonlyArray<BridgeToolDefinition>;
|
|
9
9
|
invokeTool: (name: string, input: JsonValue) => Promise<JsonValue>;
|
|
10
|
+
listResources: () => ReadonlyArray<BridgeResourceDescriptor>;
|
|
11
|
+
readResource: (uri: string) => Promise<JsonValue>;
|
|
12
|
+
onResourceUpdated: (listener: (uri: string) => void) => () => void;
|
|
10
13
|
clear: () => void;
|
|
11
14
|
};
|
|
12
15
|
export declare function createBridgeRuntime(transport?: BridgeTransport): BridgeRuntime;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAEV,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,SAAS,EAAE,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACrD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,aAAa,EAAE,MAAM,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAC7D,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IACnE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,aAAa,CAgG9E"}
|
package/dist/runtime.js
CHANGED
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
export function createBridgeRuntime(transport) {
|
|
6
6
|
const contexts = [];
|
|
7
7
|
const tools = new Map();
|
|
8
|
+
const resources = new Map();
|
|
9
|
+
const resourceListeners = new Set();
|
|
10
|
+
const toResourceDescriptor = (resource) => ({
|
|
11
|
+
uri: resource.uri,
|
|
12
|
+
name: resource.name,
|
|
13
|
+
...(resource.description !== undefined ? { description: resource.description } : {}),
|
|
14
|
+
...(resource.mimeType !== undefined ? { mimeType: resource.mimeType } : {}),
|
|
15
|
+
});
|
|
8
16
|
const invokeTool = async (name, input) => {
|
|
9
17
|
const localTool = tools.get(name);
|
|
10
18
|
if (localTool) {
|
|
@@ -22,6 +30,7 @@ export function createBridgeRuntime(transport) {
|
|
|
22
30
|
clearContext: async () => {
|
|
23
31
|
contexts.splice(0, contexts.length);
|
|
24
32
|
tools.clear();
|
|
33
|
+
resources.clear();
|
|
25
34
|
},
|
|
26
35
|
registerTool: async (tool) => {
|
|
27
36
|
if (!tool.name.trim()) {
|
|
@@ -35,14 +44,52 @@ export function createBridgeRuntime(transport) {
|
|
|
35
44
|
unregisterTool: async (name) => {
|
|
36
45
|
tools.delete(name);
|
|
37
46
|
},
|
|
47
|
+
registerResource: async (resource) => {
|
|
48
|
+
if (!resource.uri.trim()) {
|
|
49
|
+
throw new Error("resource.uri is required");
|
|
50
|
+
}
|
|
51
|
+
resources.set(resource.uri, resource);
|
|
52
|
+
},
|
|
53
|
+
unregisterResource: async (uri) => {
|
|
54
|
+
resources.delete(uri);
|
|
55
|
+
},
|
|
56
|
+
listResources: async () => Array.from(resources.values()).map(toResourceDescriptor),
|
|
57
|
+
readResource: async (uri) => {
|
|
58
|
+
const resource = resources.get(uri);
|
|
59
|
+
if (!resource) {
|
|
60
|
+
throw new Error(`resource not found: ${uri}`);
|
|
61
|
+
}
|
|
62
|
+
return await resource.read();
|
|
63
|
+
},
|
|
64
|
+
notifyResourceUpdated: async (uri) => {
|
|
65
|
+
for (const listener of resourceListeners) {
|
|
66
|
+
listener(uri);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
38
69
|
};
|
|
39
70
|
return {
|
|
40
71
|
modelContext,
|
|
41
72
|
listTools: () => Array.from(tools.values()),
|
|
42
73
|
invokeTool,
|
|
74
|
+
listResources: () => Array.from(resources.values()).map(toResourceDescriptor),
|
|
75
|
+
readResource: async (uri) => {
|
|
76
|
+
const resource = resources.get(uri);
|
|
77
|
+
if (!resource) {
|
|
78
|
+
throw new Error(`resource not found: ${uri}`);
|
|
79
|
+
}
|
|
80
|
+
return await resource.read();
|
|
81
|
+
},
|
|
82
|
+
onResourceUpdated: (listener) => {
|
|
83
|
+
resourceListeners.add(listener);
|
|
84
|
+
return () => {
|
|
85
|
+
resourceListeners.delete(listener);
|
|
86
|
+
};
|
|
87
|
+
},
|
|
43
88
|
clear: () => {
|
|
44
89
|
contexts.splice(0, contexts.length);
|
|
45
90
|
tools.clear();
|
|
91
|
+
resources.clear();
|
|
92
|
+
resourceListeners.clear();
|
|
46
93
|
},
|
|
47
94
|
};
|
|
48
95
|
}
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ export type BridgeToolDefinition = {
|
|
|
11
11
|
inputSchema?: JsonValue;
|
|
12
12
|
execute: (input: JsonValue) => Promise<JsonValue>;
|
|
13
13
|
};
|
|
14
|
+
export type BridgeResourceDefinition = {
|
|
15
|
+
uri: string;
|
|
16
|
+
name: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
mimeType?: string;
|
|
19
|
+
read: () => Promise<JsonValue>;
|
|
20
|
+
};
|
|
21
|
+
export type BridgeResourceDescriptor = Omit<BridgeResourceDefinition, "read">;
|
|
14
22
|
export type BridgeTransport = {
|
|
15
23
|
call: (name: string, input: JsonValue) => Promise<JsonValue>;
|
|
16
24
|
};
|
|
@@ -19,6 +27,11 @@ export type ModelContextLike = {
|
|
|
19
27
|
clearContext: () => Promise<void>;
|
|
20
28
|
registerTool: (tool: BridgeToolDefinition) => Promise<void>;
|
|
21
29
|
unregisterTool: (name: string) => Promise<void>;
|
|
30
|
+
registerResource: (resource: BridgeResourceDefinition) => Promise<void>;
|
|
31
|
+
unregisterResource: (uri: string) => Promise<void>;
|
|
32
|
+
listResources: () => Promise<BridgeResourceDescriptor[]>;
|
|
33
|
+
readResource: (uri: string) => Promise<JsonValue>;
|
|
34
|
+
notifyResourceUpdated: (uri: string) => Promise<void>;
|
|
22
35
|
};
|
|
23
36
|
export type BridgeInstallTarget = {
|
|
24
37
|
navigator: {
|
|
@@ -31,6 +44,8 @@ export type BridgeHandle = {
|
|
|
31
44
|
mode: "native" | "shim";
|
|
32
45
|
listTools: () => ReadonlyArray<BridgeToolDefinition>;
|
|
33
46
|
invokeTool: (name: string, input: JsonValue) => Promise<JsonValue>;
|
|
47
|
+
listResources: () => ReadonlyArray<BridgeResourceDescriptor>;
|
|
48
|
+
readResource: (uri: string) => Promise<JsonValue>;
|
|
34
49
|
uninstall: () => void;
|
|
35
50
|
};
|
|
36
51
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,YAAY,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,aAAa,EAAE,MAAM,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE;QACT,YAAY,CAAC,EAAE,gBAAgB,CAAC;QAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACrD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,aAAa,EAAE,MAAM,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAC7D,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webmcp-bridge/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"description": "Shared WebMCP bridge contracts and shim runtime primitives for webmcp-bridge packages.",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
@@ -13,6 +14,23 @@
|
|
|
13
14
|
"files": [
|
|
14
15
|
"dist"
|
|
15
16
|
],
|
|
17
|
+
"homepage": "https://github.com/holon-run/webmcp-bridge/tree/main/packages/core",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/holon-run/webmcp-bridge.git",
|
|
21
|
+
"directory": "packages/core"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/holon-run/webmcp-bridge/issues"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"webmcp",
|
|
28
|
+
"mcp",
|
|
29
|
+
"model-context-protocol",
|
|
30
|
+
"browser",
|
|
31
|
+
"shim",
|
|
32
|
+
"contracts"
|
|
33
|
+
],
|
|
16
34
|
"license": "MIT",
|
|
17
35
|
"scripts": {
|
|
18
36
|
"build": "tsc -p tsconfig.build.json",
|