@assistant-ui/react 0.7.89 → 0.7.91
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/model-context/index.d.ts +5 -1
- package/dist/model-context/index.d.ts.map +1 -1
- package/dist/model-context/index.js +5 -2
- package/dist/model-context/index.js.map +1 -1
- package/dist/model-context/index.mjs +4 -2
- package/dist/model-context/index.mjs.map +1 -1
- package/dist/model-context/makeAssistantVisible.d.ts +7 -0
- package/dist/model-context/makeAssistantVisible.d.ts.map +1 -0
- package/dist/model-context/{makeAssistantReadable.js → makeAssistantVisible.js} +34 -13
- package/dist/model-context/makeAssistantVisible.js.map +1 -0
- package/dist/model-context/{makeAssistantReadable.mjs → makeAssistantVisible.mjs} +30 -9
- package/dist/model-context/makeAssistantVisible.mjs.map +1 -0
- package/package.json +3 -3
- package/src/model-context/index.ts +6 -1
- package/src/model-context/{makeAssistantReadable.tsx → makeAssistantVisible.tsx} +31 -6
- package/dist/model-context/makeAssistantReadable.d.ts +0 -6
- package/dist/model-context/makeAssistantReadable.d.ts.map +0 -1
- package/dist/model-context/makeAssistantReadable.js.map +0 -1
- package/dist/model-context/makeAssistantReadable.mjs.map +0 -1
@@ -14,5 +14,9 @@ ModelContext as AssistantConfig,
|
|
14
14
|
*/
|
15
15
|
ModelContextProvider as AssistantConfigProvider, ModelContext, ModelContextProvider, Tool, } from "./ModelContextTypes";
|
16
16
|
export { tool } from "./tool";
|
17
|
-
|
17
|
+
/**
|
18
|
+
* @deprecated This function was renamed to `makeAssistantVisible`.
|
19
|
+
*/
|
20
|
+
export { makeAssistantVisible as makeAssistantReadable } from "./makeAssistantVisible";
|
21
|
+
export { makeAssistantVisible } from "./makeAssistantVisible";
|
18
22
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model-context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,KAAK,eAAe,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY;AACV;;GAEG;AACH,YAAY,IAAI,eAAe;AAC/B;;GAEG;AACH,oBAAoB,IAAI,uBAAuB,EAC/C,YAAY,EACZ,oBAAoB,EACpB,IAAI,GACL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model-context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,KAAK,eAAe,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY;AACV;;GAEG;AACH,YAAY,IAAI,eAAe;AAC/B;;GAEG;AACH,oBAAoB,IAAI,uBAAuB,EAC/C,YAAY,EACZ,oBAAoB,EACpB,IAAI,GACL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;GAEG;AACH,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
@@ -20,9 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
20
20
|
// src/model-context/index.ts
|
21
21
|
var model_context_exports = {};
|
22
22
|
__export(model_context_exports, {
|
23
|
-
makeAssistantReadable: () =>
|
23
|
+
makeAssistantReadable: () => import_makeAssistantVisible.makeAssistantVisible,
|
24
24
|
makeAssistantTool: () => import_makeAssistantTool.makeAssistantTool,
|
25
25
|
makeAssistantToolUI: () => import_makeAssistantToolUI.makeAssistantToolUI,
|
26
|
+
makeAssistantVisible: () => import_makeAssistantVisible2.makeAssistantVisible,
|
26
27
|
tool: () => import_tool.tool,
|
27
28
|
useAssistantInstructions: () => import_useAssistantInstructions.useAssistantInstructions,
|
28
29
|
useAssistantTool: () => import_useAssistantTool.useAssistantTool,
|
@@ -37,12 +38,14 @@ var import_useAssistantTool = require("./useAssistantTool.js");
|
|
37
38
|
var import_useAssistantToolUI = require("./useAssistantToolUI.js");
|
38
39
|
var import_useInlineRender = require("./useInlineRender.js");
|
39
40
|
var import_tool = require("./tool.js");
|
40
|
-
var
|
41
|
+
var import_makeAssistantVisible = require("./makeAssistantVisible.js");
|
42
|
+
var import_makeAssistantVisible2 = require("./makeAssistantVisible.js");
|
41
43
|
// Annotate the CommonJS export names for ESM import in node:
|
42
44
|
0 && (module.exports = {
|
43
45
|
makeAssistantReadable,
|
44
46
|
makeAssistantTool,
|
45
47
|
makeAssistantToolUI,
|
48
|
+
makeAssistantVisible,
|
46
49
|
tool,
|
47
50
|
useAssistantInstructions,
|
48
51
|
useAssistantTool,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/model-context/index.ts"],"sourcesContent":["export { makeAssistantTool, type AssistantTool } from \"./makeAssistantTool\";\nexport {\n type AssistantToolUI,\n makeAssistantToolUI,\n} from \"./makeAssistantToolUI\";\nexport { useAssistantInstructions } from \"./useAssistantInstructions\";\nexport { useAssistantTool, type AssistantToolProps } from \"./useAssistantTool\";\nexport {\n useAssistantToolUI,\n type AssistantToolUIProps,\n} from \"./useAssistantToolUI\";\nexport { useInlineRender } from \"./useInlineRender\";\n\nexport type {\n /**\n * @deprecated This type was renamed to `ModelContext`.\n */\n ModelContext as AssistantConfig,\n /**\n * @deprecated This type was renamed to `ModelContextProvider`.\n */\n ModelContextProvider as AssistantConfigProvider,\n ModelContext,\n ModelContextProvider,\n Tool,\n} from \"./ModelContextTypes\";\n\nexport { tool } from \"./tool\";\nexport { makeAssistantReadable } from \"./
|
1
|
+
{"version":3,"sources":["../../src/model-context/index.ts"],"sourcesContent":["export { makeAssistantTool, type AssistantTool } from \"./makeAssistantTool\";\nexport {\n type AssistantToolUI,\n makeAssistantToolUI,\n} from \"./makeAssistantToolUI\";\nexport { useAssistantInstructions } from \"./useAssistantInstructions\";\nexport { useAssistantTool, type AssistantToolProps } from \"./useAssistantTool\";\nexport {\n useAssistantToolUI,\n type AssistantToolUIProps,\n} from \"./useAssistantToolUI\";\nexport { useInlineRender } from \"./useInlineRender\";\n\nexport type {\n /**\n * @deprecated This type was renamed to `ModelContext`.\n */\n ModelContext as AssistantConfig,\n /**\n * @deprecated This type was renamed to `ModelContextProvider`.\n */\n ModelContextProvider as AssistantConfigProvider,\n ModelContext,\n ModelContextProvider,\n Tool,\n} from \"./ModelContextTypes\";\n\nexport { tool } from \"./tool\";\n\n/**\n * @deprecated This function was renamed to `makeAssistantVisible`.\n */\nexport { makeAssistantVisible as makeAssistantReadable } from \"./makeAssistantVisible\";\nexport { makeAssistantVisible } from \"./makeAssistantVisible\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAsD;AACtD,iCAGO;AACP,sCAAyC;AACzC,8BAA0D;AAC1D,gCAGO;AACP,6BAAgC;AAgBhC,kBAAqB;AAKrB,kCAA8D;AAC9D,IAAAA,+BAAqC;","names":["import_makeAssistantVisible"]}
|
@@ -10,11 +10,13 @@ import {
|
|
10
10
|
} from "./useAssistantToolUI.mjs";
|
11
11
|
import { useInlineRender } from "./useInlineRender.mjs";
|
12
12
|
import { tool } from "./tool.mjs";
|
13
|
-
import {
|
13
|
+
import { makeAssistantVisible } from "./makeAssistantVisible.mjs";
|
14
|
+
import { makeAssistantVisible as makeAssistantVisible2 } from "./makeAssistantVisible.mjs";
|
14
15
|
export {
|
15
|
-
makeAssistantReadable,
|
16
|
+
makeAssistantVisible as makeAssistantReadable,
|
16
17
|
makeAssistantTool,
|
17
18
|
makeAssistantToolUI,
|
19
|
+
makeAssistantVisible2 as makeAssistantVisible,
|
18
20
|
tool,
|
19
21
|
useAssistantInstructions,
|
20
22
|
useAssistantTool,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/model-context/index.ts"],"sourcesContent":["export { makeAssistantTool, type AssistantTool } from \"./makeAssistantTool\";\nexport {\n type AssistantToolUI,\n makeAssistantToolUI,\n} from \"./makeAssistantToolUI\";\nexport { useAssistantInstructions } from \"./useAssistantInstructions\";\nexport { useAssistantTool, type AssistantToolProps } from \"./useAssistantTool\";\nexport {\n useAssistantToolUI,\n type AssistantToolUIProps,\n} from \"./useAssistantToolUI\";\nexport { useInlineRender } from \"./useInlineRender\";\n\nexport type {\n /**\n * @deprecated This type was renamed to `ModelContext`.\n */\n ModelContext as AssistantConfig,\n /**\n * @deprecated This type was renamed to `ModelContextProvider`.\n */\n ModelContextProvider as AssistantConfigProvider,\n ModelContext,\n ModelContextProvider,\n Tool,\n} from \"./ModelContextTypes\";\n\nexport { tool } from \"./tool\";\nexport { makeAssistantReadable } from \"./
|
1
|
+
{"version":3,"sources":["../../src/model-context/index.ts"],"sourcesContent":["export { makeAssistantTool, type AssistantTool } from \"./makeAssistantTool\";\nexport {\n type AssistantToolUI,\n makeAssistantToolUI,\n} from \"./makeAssistantToolUI\";\nexport { useAssistantInstructions } from \"./useAssistantInstructions\";\nexport { useAssistantTool, type AssistantToolProps } from \"./useAssistantTool\";\nexport {\n useAssistantToolUI,\n type AssistantToolUIProps,\n} from \"./useAssistantToolUI\";\nexport { useInlineRender } from \"./useInlineRender\";\n\nexport type {\n /**\n * @deprecated This type was renamed to `ModelContext`.\n */\n ModelContext as AssistantConfig,\n /**\n * @deprecated This type was renamed to `ModelContextProvider`.\n */\n ModelContextProvider as AssistantConfigProvider,\n ModelContext,\n ModelContextProvider,\n Tool,\n} from \"./ModelContextTypes\";\n\nexport { tool } from \"./tool\";\n\n/**\n * @deprecated This function was renamed to `makeAssistantVisible`.\n */\nexport { makeAssistantVisible as makeAssistantReadable } from \"./makeAssistantVisible\";\nexport { makeAssistantVisible } from \"./makeAssistantVisible\";\n"],"mappings":";AAAA,SAAS,yBAA6C;AACtD;AAAA,EAEE;AAAA,OACK;AACP,SAAS,gCAAgC;AACzC,SAAS,wBAAiD;AAC1D;AAAA,EACE;AAAA,OAEK;AACP,SAAS,uBAAuB;AAgBhC,SAAS,YAAY;AAKrB,SAAiC,4BAA6B;AAC9D,SAAS,wBAAAA,6BAA4B;","names":["makeAssistantVisible"]}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { ComponentType } from "react";
|
2
|
+
export declare const makeAssistantVisible: <T extends ComponentType<any>>(Component: T, config?: {
|
3
|
+
clickable?: boolean | undefined;
|
4
|
+
editable?: boolean | undefined;
|
5
|
+
}) => T;
|
6
|
+
export default makeAssistantVisible;
|
7
|
+
//# sourceMappingURL=makeAssistantVisible.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"makeAssistantVisible.d.ts","sourceRoot":"","sources":["../../src/model-context/makeAssistantVisible.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,aAAa,EAMd,MAAM,OAAO,CAAC;AAiDf,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,aACpD,CAAC,WACH;IAAE,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,KAuCrC,CACxC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
@@ -18,13 +18,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
18
18
|
};
|
19
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
20
20
|
|
21
|
-
// src/model-context/
|
22
|
-
var
|
23
|
-
__export(
|
24
|
-
default: () =>
|
25
|
-
|
21
|
+
// src/model-context/makeAssistantVisible.tsx
|
22
|
+
var makeAssistantVisible_exports = {};
|
23
|
+
__export(makeAssistantVisible_exports, {
|
24
|
+
default: () => makeAssistantVisible_default,
|
25
|
+
makeAssistantVisible: () => makeAssistantVisible
|
26
26
|
});
|
27
|
-
module.exports = __toCommonJS(
|
27
|
+
module.exports = __toCommonJS(makeAssistantVisible_exports);
|
28
28
|
var import_react = require("react");
|
29
29
|
var import_zod = require("zod");
|
30
30
|
var import_context = require("../context/index.js");
|
@@ -47,11 +47,30 @@ var click = (0, import_tool.tool)({
|
|
47
47
|
}
|
48
48
|
}
|
49
49
|
});
|
50
|
+
var edit = (0, import_tool.tool)({
|
51
|
+
parameters: import_zod.z.object({
|
52
|
+
editId: import_zod.z.string(),
|
53
|
+
value: import_zod.z.string()
|
54
|
+
}),
|
55
|
+
execute: async ({ editId, value }) => {
|
56
|
+
const escapedEditId = CSS.escape(editId);
|
57
|
+
const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);
|
58
|
+
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
|
59
|
+
el.value = value;
|
60
|
+
el.dispatchEvent(new Event("input", { bubbles: true }));
|
61
|
+
el.dispatchEvent(new Event("change", { bubbles: true }));
|
62
|
+
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
63
|
+
return {};
|
64
|
+
} else {
|
65
|
+
return "Element not found";
|
66
|
+
}
|
67
|
+
}
|
68
|
+
});
|
50
69
|
var ReadableContext = (0, import_react.createContext)(false);
|
51
|
-
var
|
70
|
+
var makeAssistantVisible = (Component, config) => {
|
52
71
|
const ReadableComponent = (0, import_react.forwardRef)(
|
53
72
|
(props, outerRef) => {
|
54
|
-
const
|
73
|
+
const isNestedReadable = (0, import_react.useContext)(ReadableContext);
|
55
74
|
const clickId = (0, import_react.useId)();
|
56
75
|
const componentRef = (0, import_react.useRef)(null);
|
57
76
|
const assistant = (0, import_context.useAssistantRuntime)();
|
@@ -60,17 +79,19 @@ var makeAssistantReadable = (Component, config) => {
|
|
60
79
|
getModelContext: () => {
|
61
80
|
return {
|
62
81
|
...config?.clickable ? { tools: { click } } : {},
|
63
|
-
|
82
|
+
...config?.editable ? { tools: { edit } } : {},
|
83
|
+
system: !isNestedReadable ? componentRef.current?.outerHTML : void 0
|
64
84
|
};
|
65
85
|
}
|
66
86
|
});
|
67
|
-
}, [config?.clickable,
|
87
|
+
}, [config?.clickable, config?.editable, isNestedReadable]);
|
68
88
|
const ref = (0, import_react_compose_refs.useComposedRefs)(componentRef, outerRef);
|
69
89
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReadableContext.Provider, { value: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
70
90
|
Component,
|
71
91
|
{
|
72
92
|
...props,
|
73
93
|
...config?.clickable ? { "data-click-id": clickId } : {},
|
94
|
+
...config?.editable ? { "data-edit-id": clickId } : {},
|
74
95
|
ref
|
75
96
|
}
|
76
97
|
) });
|
@@ -78,9 +99,9 @@ var makeAssistantReadable = (Component, config) => {
|
|
78
99
|
);
|
79
100
|
return ReadableComponent;
|
80
101
|
};
|
81
|
-
var
|
102
|
+
var makeAssistantVisible_default = makeAssistantVisible;
|
82
103
|
// Annotate the CommonJS export names for ESM import in node:
|
83
104
|
0 && (module.exports = {
|
84
|
-
|
105
|
+
makeAssistantVisible
|
85
106
|
});
|
86
|
-
//# sourceMappingURL=
|
107
|
+
//# sourceMappingURL=makeAssistantVisible.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/model-context/makeAssistantVisible.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n ComponentType,\n ForwardedRef,\n PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { z } from \"zod\";\nimport { useAssistantRuntime } from \"../context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"./tool\";\n\nconst click = tool({\n parameters: z.object({\n clickId: z.string(),\n }),\n execute: async ({ clickId }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst edit = tool({\n parameters: z.object({\n editId: z.string(),\n value: z.string(),\n }),\n execute: async ({ editId, value }) => {\n const escapedEditId = CSS.escape(editId);\n const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n el.value = value;\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantVisible = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined; editable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isNestedReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const assistant = useAssistantRuntime();\n useEffect(() => {\n return assistant.registerModelContextProvider({\n getModelContext: () => {\n return {\n ...(config?.clickable ? { tools: { click } } : {}),\n ...(config?.editable ? { tools: { edit } } : {}),\n system: !isNestedReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [config?.clickable, config?.editable, isNestedReadable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n {...(config?.editable ? { \"data-edit-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantVisible;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAUO;AACP,iBAAkB;AAClB,qBAAoC;AACpC,gCAAgC;AAChC,kBAAqB;AA2EX;AAzEV,IAAM,YAAQ,kBAAK;AAAA,EACjB,YAAY,aAAE,OAAO;AAAA,IACnB,SAAS,aAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,UAAM,iBAAiB,IAAI,OAAO,OAAO;AACzC,UAAM,KAAK,SAAS,cAAc,mBAAmB,cAAc,IAAI;AACvE,QAAI,cAAc,aAAa;AAC7B,SAAG,MAAM;AAGT,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,WAAO,kBAAK;AAAA,EAChB,YAAY,aAAE,OAAO;AAAA,IACnB,QAAQ,aAAE,OAAO;AAAA,IACjB,OAAO,aAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM,MAAM;AACpC,UAAM,gBAAgB,IAAI,OAAO,MAAM;AACvC,UAAM,KAAK,SAAS,cAAc,kBAAkB,aAAa,IAAI;AACrE,QAAI,cAAc,oBAAoB,cAAc,qBAAqB;AACvE,SAAG,QAAQ;AACX,SAAG,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AACtD,SAAG,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAGvD,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,sBAAkB,4BAAuB,KAAK;AAE7C,IAAM,uBAAuB,CAClC,WACA,WACG;AACH,QAAM,wBAAoB;AAAA,IACxB,CAAC,OAA2B,aAAgC;AAC1D,YAAM,uBAAmB,yBAAW,eAAe;AAEnD,YAAM,cAAU,oBAAM;AACtB,YAAM,mBAAe,qBAAoB,IAAI;AAE7C,YAAM,gBAAY,oCAAoB;AACtC,kCAAU,MAAM;AACd,eAAO,UAAU,6BAA6B;AAAA,UAC5C,iBAAiB,MAAM;AACrB,mBAAO;AAAA,cACL,GAAI,QAAQ,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,cAChD,GAAI,QAAQ,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,cAC9C,QAAQ,CAAC,mBACL,aAAa,SAAS,YACtB;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,GAAG,CAAC,QAAQ,WAAW,QAAQ,UAAU,gBAAgB,CAAC;AAE1D,YAAM,UAAM,2CAAgB,cAAc,QAAQ;AAElD,aACE,4CAAC,gBAAgB,UAAhB,EAAyB,OAAO,MAC/B;AAAA,QAAC;AAAA;AAAA,UACE,GAAI;AAAA,UACJ,GAAI,QAAQ,YAAY,EAAE,iBAAiB,QAAQ,IAAI,CAAC;AAAA,UACxD,GAAI,QAAQ,WAAW,EAAE,gBAAgB,QAAQ,IAAI,CAAC;AAAA,UACvD;AAAA;AAAA,MACF,GACF;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,+BAAQ;","names":[]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use client";
|
2
2
|
|
3
|
-
// src/model-context/
|
3
|
+
// src/model-context/makeAssistantVisible.tsx
|
4
4
|
import {
|
5
5
|
useEffect,
|
6
6
|
useRef,
|
@@ -30,11 +30,30 @@ var click = tool({
|
|
30
30
|
}
|
31
31
|
}
|
32
32
|
});
|
33
|
+
var edit = tool({
|
34
|
+
parameters: z.object({
|
35
|
+
editId: z.string(),
|
36
|
+
value: z.string()
|
37
|
+
}),
|
38
|
+
execute: async ({ editId, value }) => {
|
39
|
+
const escapedEditId = CSS.escape(editId);
|
40
|
+
const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);
|
41
|
+
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
|
42
|
+
el.value = value;
|
43
|
+
el.dispatchEvent(new Event("input", { bubbles: true }));
|
44
|
+
el.dispatchEvent(new Event("change", { bubbles: true }));
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, 2e3));
|
46
|
+
return {};
|
47
|
+
} else {
|
48
|
+
return "Element not found";
|
49
|
+
}
|
50
|
+
}
|
51
|
+
});
|
33
52
|
var ReadableContext = createContext(false);
|
34
|
-
var
|
53
|
+
var makeAssistantVisible = (Component, config) => {
|
35
54
|
const ReadableComponent = forwardRef(
|
36
55
|
(props, outerRef) => {
|
37
|
-
const
|
56
|
+
const isNestedReadable = useContext(ReadableContext);
|
38
57
|
const clickId = useId();
|
39
58
|
const componentRef = useRef(null);
|
40
59
|
const assistant = useAssistantRuntime();
|
@@ -43,17 +62,19 @@ var makeAssistantReadable = (Component, config) => {
|
|
43
62
|
getModelContext: () => {
|
44
63
|
return {
|
45
64
|
...config?.clickable ? { tools: { click } } : {},
|
46
|
-
|
65
|
+
...config?.editable ? { tools: { edit } } : {},
|
66
|
+
system: !isNestedReadable ? componentRef.current?.outerHTML : void 0
|
47
67
|
};
|
48
68
|
}
|
49
69
|
});
|
50
|
-
}, [config?.clickable,
|
70
|
+
}, [config?.clickable, config?.editable, isNestedReadable]);
|
51
71
|
const ref = useComposedRefs(componentRef, outerRef);
|
52
72
|
return /* @__PURE__ */ jsx(ReadableContext.Provider, { value: true, children: /* @__PURE__ */ jsx(
|
53
73
|
Component,
|
54
74
|
{
|
55
75
|
...props,
|
56
76
|
...config?.clickable ? { "data-click-id": clickId } : {},
|
77
|
+
...config?.editable ? { "data-edit-id": clickId } : {},
|
57
78
|
ref
|
58
79
|
}
|
59
80
|
) });
|
@@ -61,9 +82,9 @@ var makeAssistantReadable = (Component, config) => {
|
|
61
82
|
);
|
62
83
|
return ReadableComponent;
|
63
84
|
};
|
64
|
-
var
|
85
|
+
var makeAssistantVisible_default = makeAssistantVisible;
|
65
86
|
export {
|
66
|
-
|
67
|
-
|
87
|
+
makeAssistantVisible_default as default,
|
88
|
+
makeAssistantVisible
|
68
89
|
};
|
69
|
-
//# sourceMappingURL=
|
90
|
+
//# sourceMappingURL=makeAssistantVisible.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/model-context/makeAssistantVisible.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n ComponentType,\n ForwardedRef,\n PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { z } from \"zod\";\nimport { useAssistantRuntime } from \"../context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"./tool\";\n\nconst click = tool({\n parameters: z.object({\n clickId: z.string(),\n }),\n execute: async ({ clickId }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst edit = tool({\n parameters: z.object({\n editId: z.string(),\n value: z.string(),\n }),\n execute: async ({ editId, value }) => {\n const escapedEditId = CSS.escape(editId);\n const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n el.value = value;\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantVisible = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined; editable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isNestedReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const assistant = useAssistantRuntime();\n useEffect(() => {\n return assistant.registerModelContextProvider({\n getModelContext: () => {\n return {\n ...(config?.clickable ? { tools: { click } } : {}),\n ...(config?.editable ? { tools: { edit } } : {}),\n system: !isNestedReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [config?.clickable, config?.editable, isNestedReadable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n {...(config?.editable ? { \"data-edit-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantVisible;\n"],"mappings":";;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,SAAS;AAClB,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC,SAAS,YAAY;AA2EX;AAzEV,IAAM,QAAQ,KAAK;AAAA,EACjB,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,UAAM,iBAAiB,IAAI,OAAO,OAAO;AACzC,UAAM,KAAK,SAAS,cAAc,mBAAmB,cAAc,IAAI;AACvE,QAAI,cAAc,aAAa;AAC7B,SAAG,MAAM;AAGT,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,OAAO,KAAK;AAAA,EAChB,YAAY,EAAE,OAAO;AAAA,IACnB,QAAQ,EAAE,OAAO;AAAA,IACjB,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM,MAAM;AACpC,UAAM,gBAAgB,IAAI,OAAO,MAAM;AACvC,UAAM,KAAK,SAAS,cAAc,kBAAkB,aAAa,IAAI;AACrE,QAAI,cAAc,oBAAoB,cAAc,qBAAqB;AACvE,SAAG,QAAQ;AACX,SAAG,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AACtD,SAAG,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC,CAAC;AAGvD,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,kBAAkB,cAAuB,KAAK;AAE7C,IAAM,uBAAuB,CAClC,WACA,WACG;AACH,QAAM,oBAAoB;AAAA,IACxB,CAAC,OAA2B,aAAgC;AAC1D,YAAM,mBAAmB,WAAW,eAAe;AAEnD,YAAM,UAAU,MAAM;AACtB,YAAM,eAAe,OAAoB,IAAI;AAE7C,YAAM,YAAY,oBAAoB;AACtC,gBAAU,MAAM;AACd,eAAO,UAAU,6BAA6B;AAAA,UAC5C,iBAAiB,MAAM;AACrB,mBAAO;AAAA,cACL,GAAI,QAAQ,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,cAChD,GAAI,QAAQ,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,cAC9C,QAAQ,CAAC,mBACL,aAAa,SAAS,YACtB;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,GAAG,CAAC,QAAQ,WAAW,QAAQ,UAAU,gBAAgB,CAAC;AAE1D,YAAM,MAAM,gBAAgB,cAAc,QAAQ;AAElD,aACE,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,MAC/B;AAAA,QAAC;AAAA;AAAA,UACE,GAAI;AAAA,UACJ,GAAI,QAAQ,YAAY,EAAE,iBAAiB,QAAQ,IAAI,CAAC;AAAA,UACxD,GAAI,QAAQ,WAAW,EAAE,gBAAgB,QAAQ,IAAI,CAAC;AAAA,UACvD;AAAA;AAAA,MACF,GACF;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,+BAAQ;","names":[]}
|
package/package.json
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
"conversational-ui",
|
30
30
|
"conversational-ai"
|
31
31
|
],
|
32
|
-
"version": "0.7.
|
32
|
+
"version": "0.7.91",
|
33
33
|
"license": "MIT",
|
34
34
|
"exports": {
|
35
35
|
".": {
|
@@ -114,8 +114,8 @@
|
|
114
114
|
"tailwindcss-animate": "^1.0.7",
|
115
115
|
"tsx": "^4.19.2",
|
116
116
|
"@assistant-ui/tsbuildutils": "^0.0.1",
|
117
|
-
"@assistant-ui/
|
118
|
-
"@assistant-ui/
|
117
|
+
"@assistant-ui/tailwindcss-transformer": "0.1.0",
|
118
|
+
"@assistant-ui/tsconfig": "0.0.0"
|
119
119
|
},
|
120
120
|
"publishConfig": {
|
121
121
|
"access": "public",
|
@@ -26,4 +26,9 @@ export type {
|
|
26
26
|
} from "./ModelContextTypes";
|
27
27
|
|
28
28
|
export { tool } from "./tool";
|
29
|
-
|
29
|
+
|
30
|
+
/**
|
31
|
+
* @deprecated This function was renamed to `makeAssistantVisible`.
|
32
|
+
*/
|
33
|
+
export { makeAssistantVisible as makeAssistantReadable } from "./makeAssistantVisible";
|
34
|
+
export { makeAssistantVisible } from "./makeAssistantVisible";
|
@@ -25,6 +25,29 @@ const click = tool({
|
|
25
25
|
const el = document.querySelector(`[data-click-id='${escapedClickId}']`);
|
26
26
|
if (el instanceof HTMLElement) {
|
27
27
|
el.click();
|
28
|
+
|
29
|
+
// todo make adjustable
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
31
|
+
return {};
|
32
|
+
} else {
|
33
|
+
return "Element not found";
|
34
|
+
}
|
35
|
+
},
|
36
|
+
});
|
37
|
+
|
38
|
+
const edit = tool({
|
39
|
+
parameters: z.object({
|
40
|
+
editId: z.string(),
|
41
|
+
value: z.string(),
|
42
|
+
}),
|
43
|
+
execute: async ({ editId, value }) => {
|
44
|
+
const escapedEditId = CSS.escape(editId);
|
45
|
+
const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);
|
46
|
+
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
|
47
|
+
el.value = value;
|
48
|
+
el.dispatchEvent(new Event("input", { bubbles: true }));
|
49
|
+
el.dispatchEvent(new Event("change", { bubbles: true }));
|
50
|
+
|
28
51
|
// todo make adjustable
|
29
52
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
30
53
|
return {};
|
@@ -36,13 +59,13 @@ const click = tool({
|
|
36
59
|
|
37
60
|
const ReadableContext = createContext<boolean>(false);
|
38
61
|
|
39
|
-
export const
|
62
|
+
export const makeAssistantVisible = <T extends ComponentType<any>>(
|
40
63
|
Component: T,
|
41
|
-
config?: { clickable?: boolean | undefined },
|
64
|
+
config?: { clickable?: boolean | undefined; editable?: boolean | undefined },
|
42
65
|
) => {
|
43
66
|
const ReadableComponent = forwardRef(
|
44
67
|
(props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {
|
45
|
-
const
|
68
|
+
const isNestedReadable = useContext(ReadableContext);
|
46
69
|
|
47
70
|
const clickId = useId();
|
48
71
|
const componentRef = useRef<HTMLElement>(null);
|
@@ -53,13 +76,14 @@ export const makeAssistantReadable = <T extends ComponentType<any>>(
|
|
53
76
|
getModelContext: () => {
|
54
77
|
return {
|
55
78
|
...(config?.clickable ? { tools: { click } } : {}),
|
56
|
-
|
79
|
+
...(config?.editable ? { tools: { edit } } : {}),
|
80
|
+
system: !isNestedReadable // only pass content if this readable isn't nested in another readable
|
57
81
|
? componentRef.current?.outerHTML
|
58
82
|
: undefined,
|
59
83
|
};
|
60
84
|
},
|
61
85
|
});
|
62
|
-
}, [config?.clickable,
|
86
|
+
}, [config?.clickable, config?.editable, isNestedReadable]);
|
63
87
|
|
64
88
|
const ref = useComposedRefs(componentRef, outerRef);
|
65
89
|
|
@@ -68,6 +92,7 @@ export const makeAssistantReadable = <T extends ComponentType<any>>(
|
|
68
92
|
<Component
|
69
93
|
{...(props as any)}
|
70
94
|
{...(config?.clickable ? { "data-click-id": clickId } : {})}
|
95
|
+
{...(config?.editable ? { "data-edit-id": clickId } : {})}
|
71
96
|
ref={ref}
|
72
97
|
/>
|
73
98
|
</ReadableContext.Provider>
|
@@ -78,4 +103,4 @@ export const makeAssistantReadable = <T extends ComponentType<any>>(
|
|
78
103
|
return ReadableComponent as unknown as T;
|
79
104
|
};
|
80
105
|
|
81
|
-
export default
|
106
|
+
export default makeAssistantVisible;
|
@@ -1,6 +0,0 @@
|
|
1
|
-
import { ComponentType } from "react";
|
2
|
-
export declare const makeAssistantReadable: <T extends ComponentType<any>>(Component: T, config?: {
|
3
|
-
clickable?: boolean | undefined;
|
4
|
-
}) => T;
|
5
|
-
export default makeAssistantReadable;
|
6
|
-
//# sourceMappingURL=makeAssistantReadable.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"makeAssistantReadable.d.ts","sourceRoot":"","sources":["../../src/model-context/makeAssistantReadable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,aAAa,EAMd,MAAM,OAAO,CAAC;AA0Bf,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,aACrD,CAAC,WACH;IAAE,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,KAqCL,CACxC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/model-context/makeAssistantReadable.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n ComponentType,\n ForwardedRef,\n PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { z } from \"zod\";\nimport { useAssistantRuntime } from \"../context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"./tool\";\n\nconst click = tool({\n parameters: z.object({\n clickId: z.string(),\n }),\n execute: async ({ clickId }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantReadable = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isInReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const assistant = useAssistantRuntime();\n useEffect(() => {\n return assistant.registerModelContextProvider({\n getModelContext: () => {\n return {\n ...(config?.clickable ? { tools: { click } } : {}),\n system: !isInReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [config?.clickable, isInReadable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantReadable;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAUO;AACP,iBAAkB;AAClB,qBAAoC;AACpC,gCAAgC;AAChC,kBAAqB;AAmDX;AAjDV,IAAM,YAAQ,kBAAK;AAAA,EACjB,YAAY,aAAE,OAAO;AAAA,IACnB,SAAS,aAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,UAAM,iBAAiB,IAAI,OAAO,OAAO;AACzC,UAAM,KAAK,SAAS,cAAc,mBAAmB,cAAc,IAAI;AACvE,QAAI,cAAc,aAAa;AAC7B,SAAG,MAAM;AAET,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,sBAAkB,4BAAuB,KAAK;AAE7C,IAAM,wBAAwB,CACnC,WACA,WACG;AACH,QAAM,wBAAoB;AAAA,IACxB,CAAC,OAA2B,aAAgC;AAC1D,YAAM,mBAAe,yBAAW,eAAe;AAE/C,YAAM,cAAU,oBAAM;AACtB,YAAM,mBAAe,qBAAoB,IAAI;AAE7C,YAAM,gBAAY,oCAAoB;AACtC,kCAAU,MAAM;AACd,eAAO,UAAU,6BAA6B;AAAA,UAC5C,iBAAiB,MAAM;AACrB,mBAAO;AAAA,cACL,GAAI,QAAQ,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,cAChD,QAAQ,CAAC,eACL,aAAa,SAAS,YACtB;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,GAAG,CAAC,QAAQ,WAAW,YAAY,CAAC;AAEpC,YAAM,UAAM,2CAAgB,cAAc,QAAQ;AAElD,aACE,4CAAC,gBAAgB,UAAhB,EAAyB,OAAO,MAC/B;AAAA,QAAC;AAAA;AAAA,UACE,GAAI;AAAA,UACJ,GAAI,QAAQ,YAAY,EAAE,iBAAiB,QAAQ,IAAI,CAAC;AAAA,UACzD;AAAA;AAAA,MACF,GACF;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,gCAAQ;","names":[]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/model-context/makeAssistantReadable.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n ComponentType,\n ForwardedRef,\n PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { z } from \"zod\";\nimport { useAssistantRuntime } from \"../context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"./tool\";\n\nconst click = tool({\n parameters: z.object({\n clickId: z.string(),\n }),\n execute: async ({ clickId }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantReadable = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isInReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const assistant = useAssistantRuntime();\n useEffect(() => {\n return assistant.registerModelContextProvider({\n getModelContext: () => {\n return {\n ...(config?.clickable ? { tools: { click } } : {}),\n system: !isInReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [config?.clickable, isInReadable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantReadable;\n"],"mappings":";;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,SAAS;AAClB,SAAS,2BAA2B;AACpC,SAAS,uBAAuB;AAChC,SAAS,YAAY;AAmDX;AAjDV,IAAM,QAAQ,KAAK;AAAA,EACjB,YAAY,EAAE,OAAO;AAAA,IACnB,SAAS,EAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,SAAS,OAAO,EAAE,QAAQ,MAAM;AAC9B,UAAM,iBAAiB,IAAI,OAAO,OAAO;AACzC,UAAM,KAAK,SAAS,cAAc,mBAAmB,cAAc,IAAI;AACvE,QAAI,cAAc,aAAa;AAC7B,SAAG,MAAM;AAET,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AACxD,aAAO,CAAC;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAED,IAAM,kBAAkB,cAAuB,KAAK;AAE7C,IAAM,wBAAwB,CACnC,WACA,WACG;AACH,QAAM,oBAAoB;AAAA,IACxB,CAAC,OAA2B,aAAgC;AAC1D,YAAM,eAAe,WAAW,eAAe;AAE/C,YAAM,UAAU,MAAM;AACtB,YAAM,eAAe,OAAoB,IAAI;AAE7C,YAAM,YAAY,oBAAoB;AACtC,gBAAU,MAAM;AACd,eAAO,UAAU,6BAA6B;AAAA,UAC5C,iBAAiB,MAAM;AACrB,mBAAO;AAAA,cACL,GAAI,QAAQ,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAAA,cAChD,QAAQ,CAAC,eACL,aAAa,SAAS,YACtB;AAAA,YACN;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,GAAG,CAAC,QAAQ,WAAW,YAAY,CAAC;AAEpC,YAAM,MAAM,gBAAgB,cAAc,QAAQ;AAElD,aACE,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,MAC/B;AAAA,QAAC;AAAA;AAAA,UACE,GAAI;AAAA,UACJ,GAAI,QAAQ,YAAY,EAAE,iBAAiB,QAAQ,IAAI,CAAC;AAAA,UACzD;AAAA;AAAA,MACF,GACF;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,gCAAQ;","names":[]}
|