skybridge 0.0.0-dev.7acd112 → 0.0.0-dev.8567227
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/src/server/templates/development.hbs +11 -0
- package/dist/src/server/templates/production.hbs +5 -0
- package/dist/src/web/index.d.ts +3 -0
- package/dist/src/web/index.js +3 -0
- package/dist/src/web/index.js.map +1 -1
- package/dist/src/web/plugin.d.ts +2 -0
- package/dist/src/web/plugin.js +30 -0
- package/dist/src/web/plugin.js.map +1 -0
- package/dist/src/web/types.d.ts +9 -1
- package/dist/src/web/types.js.map +1 -1
- package/dist/src/web/use-call-tool.d.ts +50 -0
- package/dist/src/web/use-call-tool.js +59 -0
- package/dist/src/web/use-call-tool.js.map +1 -0
- package/dist/src/web/use-tool-response-metadata.d.ts +3 -0
- package/dist/src/web/use-tool-response-metadata.js +5 -0
- package/dist/src/web/use-tool-response-metadata.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script type="module">
|
|
2
|
+
import { injectIntoGlobalHook } from "{{serverUrl}}/@react-refresh";
|
|
3
|
+
injectIntoGlobalHook(window); window.$RefreshReg$ = () => {};
|
|
4
|
+
window.$RefreshSig$ = () => (type) => type;
|
|
5
|
+
window.__vite_plugin_react_preamble_installed__ = true;
|
|
6
|
+
</script>
|
|
7
|
+
<script type="module" src="{{serverUrl}}/@vite/client"></script>
|
|
8
|
+
<div id="root"></div>
|
|
9
|
+
<script type="module">
|
|
10
|
+
import('{{serverUrl}}/src/widgets/{{widgetName}}.tsx');
|
|
11
|
+
</script>
|
package/dist/src/web/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { useOpenAiGlobal } from "./use-openai-global.js";
|
|
2
2
|
export { useToolOutput } from "./use-tool-output.js";
|
|
3
|
+
export { useToolResponseMetadata } from "./use-tool-response-metadata.js";
|
|
4
|
+
export { useCallTool } from "./use-call-tool.js";
|
|
3
5
|
export * from "./types.js";
|
|
4
6
|
export { mountWidget } from "./mount-widget.js";
|
|
7
|
+
export { skybridge } from "./plugin.js";
|
package/dist/src/web/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { useOpenAiGlobal } from "./use-openai-global.js";
|
|
2
2
|
export { useToolOutput } from "./use-tool-output.js";
|
|
3
|
+
export { useToolResponseMetadata } from "./use-tool-response-metadata.js";
|
|
4
|
+
export { useCallTool } from "./use-call-tool.js";
|
|
3
5
|
export * from "./types.js";
|
|
4
6
|
export { mountWidget } from "./mount-widget.js";
|
|
7
|
+
export { skybridge } from "./plugin.js";
|
|
5
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function skybridge() {
|
|
2
|
+
return {
|
|
3
|
+
name: "skybridge",
|
|
4
|
+
async config(config) {
|
|
5
|
+
// Dynamic imports to ensure Node modules are only loaded in Node.js context
|
|
6
|
+
const { globSync } = await import("node:fs");
|
|
7
|
+
const { resolve } = await import("node:path");
|
|
8
|
+
const projectRoot = config.root || process.cwd();
|
|
9
|
+
const widgetsPattern = resolve(projectRoot, "src/widgets/*.{js,ts,jsx,tsx,html}");
|
|
10
|
+
const input = Object.fromEntries(globSync(widgetsPattern).map((file) => [
|
|
11
|
+
file.match(/src\/widgets\/(.+)\.tsx$/)?.[1],
|
|
12
|
+
file,
|
|
13
|
+
]));
|
|
14
|
+
return {
|
|
15
|
+
build: {
|
|
16
|
+
minify: true,
|
|
17
|
+
cssCodeSplit: false,
|
|
18
|
+
rollupOptions: {
|
|
19
|
+
input,
|
|
20
|
+
output: {
|
|
21
|
+
entryFileNames: "[name].js",
|
|
22
|
+
assetFileNames: "[name][extname]",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/web/plugin.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS;IACvB,OAAO;QACL,IAAI,EAAE,WAAW;QAEjB,KAAK,CAAC,MAAM,CAAC,MAAM;YACjB,4EAA4E;YAC5E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAE9C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACjD,MAAM,cAAc,GAAG,OAAO,CAC5B,WAAW,EACX,oCAAoC,CACrC,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI;aACL,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;oBACZ,YAAY,EAAE,KAAK;oBACnB,aAAa,EAAE;wBACb,KAAK;wBACL,MAAM,EAAE;4BACN,cAAc,EAAE,WAAW;4BAC3B,cAAc,EAAE,iBAAiB;yBAClC;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/src/web/types.d.ts
CHANGED
|
@@ -38,12 +38,20 @@ export type OpenAiGlobals<ToolInput extends UnknownObject = UnknownObject, ToolO
|
|
|
38
38
|
toolResponseMetadata: ToolResponseMetadata | null;
|
|
39
39
|
widgetState: WidgetState | null;
|
|
40
40
|
};
|
|
41
|
+
export type CallToolArgs = Record<string, unknown> | null;
|
|
41
42
|
export type CallToolResponse = {
|
|
43
|
+
content: {
|
|
44
|
+
type: "text";
|
|
45
|
+
text: string;
|
|
46
|
+
}[];
|
|
47
|
+
structuredContent: Record<string, unknown>;
|
|
48
|
+
isError: boolean;
|
|
42
49
|
result: string;
|
|
50
|
+
meta: Record<string, unknown>;
|
|
43
51
|
};
|
|
44
52
|
type API<WidgetState extends UnknownObject> = {
|
|
45
53
|
/** Calls a tool on your MCP. Returns the full response. */
|
|
46
|
-
callTool: (name: string, args:
|
|
54
|
+
callTool: <ToolArgs extends CallToolArgs = null, ToolResponse extends CallToolResponse = CallToolResponse>(name: string, args: ToolArgs) => Promise<ToolResponse>;
|
|
47
55
|
/** Triggers a followup turn in the ChatGPT conversation */
|
|
48
56
|
sendFollowUpMessage: (args: {
|
|
49
57
|
prompt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/web/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,OAAO,iBAAkB,SAAQ,WAErC;IACkB,IAAI,GAAG,wBAAwB,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/web/types.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAC/D,MAAM,OAAO,iBAAkB,SAAQ,WAErC;IACkB,IAAI,GAAG,wBAAwB,CAAC;CACnD;AA2ED,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAC3D,MAAM,OAAO,eAAgB,SAAQ,WAEnC;IACkB,IAAI,GAAG,sBAAsB,CAAC;CACjD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CallToolArgs, CallToolResponse } from "./types.js";
|
|
2
|
+
export declare const useCallTool: <ToolArgs extends CallToolArgs = null, ToolResponse extends CallToolResponse = CallToolResponse>(name: string) => {
|
|
3
|
+
callTool: (toolArgs: ToolArgs, { onSuccess, }: {
|
|
4
|
+
onSuccess: (data: ToolResponse, toolArgs: ToolArgs) => void;
|
|
5
|
+
}) => void;
|
|
6
|
+
callToolAsync: (toolArgs: ToolArgs) => Promise<ToolResponse>;
|
|
7
|
+
status: "idle";
|
|
8
|
+
data: undefined;
|
|
9
|
+
error: undefined;
|
|
10
|
+
isIdle: true;
|
|
11
|
+
isPending: false;
|
|
12
|
+
isSuccess: false;
|
|
13
|
+
isError: false;
|
|
14
|
+
} | {
|
|
15
|
+
callTool: (toolArgs: ToolArgs, { onSuccess, }: {
|
|
16
|
+
onSuccess: (data: ToolResponse, toolArgs: ToolArgs) => void;
|
|
17
|
+
}) => void;
|
|
18
|
+
callToolAsync: (toolArgs: ToolArgs) => Promise<ToolResponse>;
|
|
19
|
+
status: "pending";
|
|
20
|
+
data: undefined;
|
|
21
|
+
error: undefined;
|
|
22
|
+
isIdle: false;
|
|
23
|
+
isPending: true;
|
|
24
|
+
isSuccess: false;
|
|
25
|
+
isError: false;
|
|
26
|
+
} | {
|
|
27
|
+
callTool: (toolArgs: ToolArgs, { onSuccess, }: {
|
|
28
|
+
onSuccess: (data: ToolResponse, toolArgs: ToolArgs) => void;
|
|
29
|
+
}) => void;
|
|
30
|
+
callToolAsync: (toolArgs: ToolArgs) => Promise<ToolResponse>;
|
|
31
|
+
status: "error";
|
|
32
|
+
data: undefined;
|
|
33
|
+
error: unknown;
|
|
34
|
+
isIdle: false;
|
|
35
|
+
isPending: false;
|
|
36
|
+
isSuccess: false;
|
|
37
|
+
isError: true;
|
|
38
|
+
} | {
|
|
39
|
+
callTool: (toolArgs: ToolArgs, { onSuccess, }: {
|
|
40
|
+
onSuccess: (data: ToolResponse, toolArgs: ToolArgs) => void;
|
|
41
|
+
}) => void;
|
|
42
|
+
callToolAsync: (toolArgs: ToolArgs) => Promise<ToolResponse>;
|
|
43
|
+
status: "success";
|
|
44
|
+
data: ToolResponse;
|
|
45
|
+
error: undefined;
|
|
46
|
+
isIdle: false;
|
|
47
|
+
isPending: false;
|
|
48
|
+
isSuccess: true;
|
|
49
|
+
isError: false;
|
|
50
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
export const useCallTool = (name) => {
|
|
3
|
+
const [callToolState, setCallToolState] = useState({
|
|
4
|
+
status: "idle",
|
|
5
|
+
data: undefined,
|
|
6
|
+
error: undefined,
|
|
7
|
+
isIdle: true,
|
|
8
|
+
isPending: false,
|
|
9
|
+
isSuccess: false,
|
|
10
|
+
isError: false,
|
|
11
|
+
});
|
|
12
|
+
const callToolAsync = async (toolArgs) => {
|
|
13
|
+
setCallToolState({
|
|
14
|
+
status: "pending",
|
|
15
|
+
data: undefined,
|
|
16
|
+
error: undefined,
|
|
17
|
+
isIdle: false,
|
|
18
|
+
isPending: true,
|
|
19
|
+
isSuccess: false,
|
|
20
|
+
isError: false,
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
const data = await window.openai.callTool(name, toolArgs);
|
|
24
|
+
setCallToolState({
|
|
25
|
+
status: "success",
|
|
26
|
+
data,
|
|
27
|
+
error: undefined,
|
|
28
|
+
isIdle: false,
|
|
29
|
+
isPending: false,
|
|
30
|
+
isSuccess: true,
|
|
31
|
+
isError: false,
|
|
32
|
+
});
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
setCallToolState({
|
|
37
|
+
status: "error",
|
|
38
|
+
data: undefined,
|
|
39
|
+
error,
|
|
40
|
+
isIdle: false,
|
|
41
|
+
isPending: false,
|
|
42
|
+
isSuccess: false,
|
|
43
|
+
isError: true,
|
|
44
|
+
});
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const callTool = (toolArgs, { onSuccess, }) => {
|
|
49
|
+
void callToolAsync(toolArgs).then((data) => {
|
|
50
|
+
onSuccess(data, toolArgs);
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
...callToolState,
|
|
55
|
+
callTool,
|
|
56
|
+
callToolAsync,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=use-call-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-call-tool.js","sourceRoot":"","sources":["../../../src/web/use-call-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AA+CjC,MAAM,CAAC,MAAM,WAAW,GAAG,CAIzB,IAAY,EACZ,EAAE;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAEhD;QACA,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,KAAK,EAAE,QAAkB,EAAE,EAAE;QACjD,gBAAgB,CAAC;YACf,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CACvC,IAAI,EACJ,QAAQ,CACT,CAAC;YACF,gBAAgB,CAAC;gBACf,MAAM,EAAE,SAAS;gBACjB,IAAI;gBACJ,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAgB,CAAC;gBACf,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK;gBACL,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CACf,QAAkB,EAClB,EACE,SAAS,GACuD,EAClE,EAAE;QACF,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,aAAa;QAChB,QAAQ;QACR,aAAa;KACd,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tool-response-metadata.js","sourceRoot":"","sources":["../../../src/web/use-tool-response-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,UAAU,uBAAuB;IACrC,OAAO,eAAe,CAAC,sBAAsB,CAAC,CAAC;AACjD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skybridge",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.8567227",
|
|
4
4
|
"description": "Skybridge is a framework for building ChatGPT apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"scripts": {
|
|
20
|
-
"build": "tsc",
|
|
20
|
+
"build": "tsc && pnpm run build:templates",
|
|
21
|
+
"build:templates": "cp -r src/server/templates dist/src/server/",
|
|
21
22
|
"test": "vitest run --silent"
|
|
22
23
|
},
|
|
23
24
|
"keywords": [
|
|
@@ -44,10 +45,10 @@
|
|
|
44
45
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
45
46
|
"@types/cors": "^2.8.19",
|
|
46
47
|
"@types/express": "^5.0.3",
|
|
48
|
+
"@types/jsdom": "^21.1.6",
|
|
47
49
|
"@types/node": "^22.15.30",
|
|
48
50
|
"@types/react": "^19.2.2",
|
|
49
51
|
"@types/react-dom": "^19.2.2",
|
|
50
|
-
"@types/jsdom": "^21.1.6",
|
|
51
52
|
"@vitest/ui": "^2.1.8",
|
|
52
53
|
"jsdom": "^25.0.1",
|
|
53
54
|
"typescript": "^5.9.3",
|