@memori.ai/memori-react 8.43.0 → 8.45.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/CHANGELOG.md +46 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +1 -0
- package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +204 -59
- package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js +76 -16
- package/dist/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
- package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
- package/dist/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.js +117 -0
- package/dist/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
- package/dist/components/MemoriWidget/MemoriWidget.d.ts +1 -0
- package/dist/components/MemoriWidget/MemoriWidget.js +59 -1
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/helpers/message.js +3 -0
- package/dist/helpers/message.js.map +1 -1
- package/dist/helpers/nats/getNatsConfig.d.ts +1 -1
- package/dist/helpers/nats/getNatsConfig.js +2 -2
- package/dist/helpers/nats/getNatsConfig.js.map +1 -1
- package/dist/helpers/nats/useNats.d.ts +2 -1
- package/dist/helpers/nats/useNats.js +87 -20
- package/dist/helpers/nats/useNats.js.map +1 -1
- package/dist/helpers/nats/useNatsSession.d.ts +6 -1
- package/dist/helpers/nats/useNatsSession.js +49 -8
- package/dist/helpers/nats/useNatsSession.js.map +1 -1
- package/dist/locales/de.json +3 -0
- package/dist/locales/en.json +3 -0
- package/dist/locales/es.json +3 -0
- package/dist/locales/fr.json +3 -0
- package/dist/locales/it.json +3 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +1 -0
- package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +205 -60
- package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.d.ts +3 -1
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js +77 -17
- package/esm/components/MemoriArtifactSystem/context/ArtifactContext.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/types/artifact.types.d.ts +11 -0
- package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js +18 -13
- package/esm/components/MemoriArtifactSystem/utils/ArtifactAPI.js.map +1 -1
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.d.ts +8 -0
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.js +112 -0
- package/esm/components/MemoriArtifactSystem/utils/applyEdits.js.map +1 -0
- package/esm/components/MemoriWidget/MemoriWidget.d.ts +1 -0
- package/esm/components/MemoriWidget/MemoriWidget.js +57 -1
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/helpers/message.js +3 -0
- package/esm/helpers/message.js.map +1 -1
- package/esm/helpers/nats/getNatsConfig.d.ts +1 -1
- package/esm/helpers/nats/getNatsConfig.js +2 -2
- package/esm/helpers/nats/getNatsConfig.js.map +1 -1
- package/esm/helpers/nats/useNats.d.ts +2 -1
- package/esm/helpers/nats/useNats.js +87 -20
- package/esm/helpers/nats/useNats.js.map +1 -1
- package/esm/helpers/nats/useNatsSession.d.ts +6 -1
- package/esm/helpers/nats/useNatsSession.js +48 -8
- package/esm/helpers/nats/useNatsSession.js.map +1 -1
- package/esm/locales/de.json +3 -0
- package/esm/locales/en.json +3 -0
- package/esm/locales/es.json +3 -0
- package/esm/locales/fr.json +3 -0
- package/esm/locales/it.json +3 -0
- package/esm/version.d.ts +1 -1
- package/esm/version.js +1 -1
- package/package.json +1 -1
- package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +1 -1
- package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +1 -0
- package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +324 -133
- package/src/components/MemoriArtifactSystem/context/ArtifactContext.tsx +122 -24
- package/src/components/MemoriArtifactSystem/types/artifact.types.ts +20 -1
- package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.test.tsx +1 -0
- package/src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx +19 -13
- package/src/components/MemoriArtifactSystem/utils/applyEdits.test.ts +85 -0
- package/src/components/MemoriArtifactSystem/utils/applyEdits.ts +173 -0
- package/src/components/MemoriWidget/MemoriWidget.tsx +65 -1
- package/src/helpers/message.ts +15 -0
- package/src/helpers/nats/getNatsConfig.ts +8 -3
- package/src/helpers/nats/useNats.test.tsx +81 -0
- package/src/helpers/nats/useNats.ts +109 -29
- package/src/helpers/nats/useNatsSession.test.ts +16 -0
- package/src/helpers/nats/useNatsSession.ts +79 -13
- package/src/locales/de.json +3 -0
- package/src/locales/en.json +3 -0
- package/src/locales/es.json +3 -0
- package/src/locales/fr.json +3 -0
- package/src/locales/it.json +3 -0
- package/src/version.ts +1 -1
- package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.css +0 -372
- package/dist/components/DrawerFooter/DrawerFooter.css +0 -62
- package/dist/components/IconButton/IconButton.css +0 -144
- package/dist/components/MobileSessionPanel/MobileSessionPanel.css +0 -459
- package/dist/components/PositionPopover/PositionPopover.css +0 -219
- package/dist/components/layouts/WebsiteAssistant/website-assistant.css +0 -806
- package/dist/components/layouts/fullpage.css +0 -522
- package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.css +0 -372
- package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.d.ts +0 -36
- package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js +0 -113
- package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +0 -1
- package/esm/components/DrawerFooter/DrawerFooter.css +0 -62
- package/esm/components/DrawerFooter/DrawerFooter.d.ts +0 -12
- package/esm/components/DrawerFooter/DrawerFooter.js +0 -8
- package/esm/components/DrawerFooter/DrawerFooter.js.map +0 -1
- package/esm/components/IconButton/IconButton.css +0 -144
- package/esm/components/IconButton/IconButton.d.ts +0 -9
- package/esm/components/IconButton/IconButton.js +0 -33
- package/esm/components/IconButton/IconButton.js.map +0 -1
- package/esm/components/MobileSessionPanel/MobileSessionPanel.css +0 -459
- package/esm/components/MobileSessionPanel/MobileSessionPanel.d.ts +0 -65
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js +0 -291
- package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +0 -1
- package/esm/components/PositionPopover/PositionPopover.css +0 -219
- package/esm/components/PositionPopover/PositionPopover.d.ts +0 -22
- package/esm/components/PositionPopover/PositionPopover.js +0 -190
- package/esm/components/PositionPopover/PositionPopover.js.map +0 -1
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.d.ts +0 -4
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +0 -61
- package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +0 -1
- package/esm/components/layouts/WebsiteAssistant/website-assistant.css +0 -806
- package/esm/components/layouts/fullpage.css +0 -522
- package/esm/context/widgetSurfaceContext.d.ts +0 -3
- package/esm/context/widgetSurfaceContext.js +0 -7
- package/esm/context/widgetSurfaceContext.js.map +0 -1
- package/esm/helpers/positionPopover.d.ts +0 -1
- package/esm/helpers/positionPopover.js +0 -4
- package/esm/helpers/positionPopover.js.map +0 -1
- package/esm/helpers/tts/muteSpeaker.d.ts +0 -13
- package/esm/helpers/tts/muteSpeaker.js +0 -21
- package/esm/helpers/tts/muteSpeaker.js.map +0 -1
- package/esm/helpers/usePressTooltip.d.ts +0 -13
- package/esm/helpers/usePressTooltip.js +0 -20
- package/esm/helpers/usePressTooltip.js.map +0 -1
- package/esm/icons/FacebookIcon.d.ts +0 -3
- package/esm/icons/FacebookIcon.js +0 -4
- package/esm/icons/FacebookIcon.js.map +0 -1
- package/esm/icons/LinkedinIcon.d.ts +0 -3
- package/esm/icons/LinkedinIcon.js +0 -4
- package/esm/icons/LinkedinIcon.js.map +0 -1
- package/esm/icons/MemoriIcon.d.ts +0 -3
- package/esm/icons/MemoriIcon.js +0 -6
- package/esm/icons/MemoriIcon.js.map +0 -1
- package/esm/icons/TelegramIcon.d.ts +0 -3
- package/esm/icons/TelegramIcon.js +0 -4
- package/esm/icons/TelegramIcon.js.map +0 -1
- package/esm/icons/TwitterIcon.d.ts +0 -3
- package/esm/icons/TwitterIcon.js +0 -4
- package/esm/icons/TwitterIcon.js.map +0 -1
- package/esm/icons/WhatsappIcon.d.ts +0 -3
- package/esm/icons/WhatsappIcon.js +0 -4
- package/esm/icons/WhatsappIcon.js.map +0 -1
- package/esm/icons/artifacts/DocumentIcon.d.ts +0 -3
- package/esm/icons/artifacts/DocumentIcon.js +0 -4
- package/esm/icons/artifacts/DocumentIcon.js.map +0 -1
- package/esm/icons/artifacts/HtmlIcon.d.ts +0 -3
- package/esm/icons/artifacts/HtmlIcon.js +0 -4
- package/esm/icons/artifacts/HtmlIcon.js.map +0 -1
- package/esm/icons/artifacts/JavascriptIcon.d.ts +0 -3
- package/esm/icons/artifacts/JavascriptIcon.js +0 -4
- package/esm/icons/artifacts/JavascriptIcon.js.map +0 -1
- package/esm/icons/artifacts/MarkdownIcon.d.ts +0 -3
- package/esm/icons/artifacts/MarkdownIcon.js +0 -4
- package/esm/icons/artifacts/MarkdownIcon.js.map +0 -1
- package/esm/icons/artifacts/PythonIcon.d.ts +0 -3
- package/esm/icons/artifacts/PythonIcon.js +0 -4
- package/esm/icons/artifacts/PythonIcon.js.map +0 -1
- package/esm/icons/artifacts/SvgIcon.d.ts +0 -3
- package/esm/icons/artifacts/SvgIcon.js +0 -4
- package/esm/icons/artifacts/SvgIcon.js.map +0 -1
- package/esm/icons/artifacts/XmlIcon.d.ts +0 -3
- package/esm/icons/artifacts/XmlIcon.js +0 -4
- package/esm/icons/artifacts/XmlIcon.js.map +0 -1
- package/esm/icons/artifacts/cssIcon.d.ts +0 -3
- package/esm/icons/artifacts/cssIcon.js +0 -4
- package/esm/icons/artifacts/cssIcon.js.map +0 -1
- package/esm/testUtils.d.ts +0 -5
- package/esm/testUtils.js +0 -15
- package/esm/testUtils.js.map +0 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useArtifact = exports.ArtifactProvider = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
+
const applyEdits_1 = require("../utils/applyEdits");
|
|
6
7
|
const ArtifactContext = (0, react_1.createContext)(null);
|
|
7
8
|
const ArtifactProvider = ({ children }) => {
|
|
8
9
|
const [state, setState] = (0, react_1.useState)({
|
|
@@ -10,24 +11,21 @@ const ArtifactProvider = ({ children }) => {
|
|
|
10
11
|
isDrawerOpen: false,
|
|
11
12
|
isFullscreen: false,
|
|
12
13
|
});
|
|
14
|
+
const registryRef = (0, react_1.useRef)({});
|
|
13
15
|
const openArtifact = (0, react_1.useCallback)((artifact) => {
|
|
14
|
-
setState(() => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
});
|
|
16
|
+
setState(() => ({
|
|
17
|
+
currentArtifact: artifact,
|
|
18
|
+
isDrawerOpen: true,
|
|
19
|
+
isFullscreen: false,
|
|
20
|
+
}));
|
|
21
21
|
}, []);
|
|
22
22
|
const closeArtifact = (0, react_1.useCallback)(() => {
|
|
23
|
-
setState(prev => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
});
|
|
23
|
+
setState(prev => ({
|
|
24
|
+
...prev,
|
|
25
|
+
currentArtifact: null,
|
|
26
|
+
isDrawerOpen: false,
|
|
27
|
+
isFullscreen: false,
|
|
28
|
+
}));
|
|
31
29
|
}, []);
|
|
32
30
|
const toggleFullscreen = (0, react_1.useCallback)(() => {
|
|
33
31
|
setState(prev => ({
|
|
@@ -35,12 +33,74 @@ const ArtifactProvider = ({ children }) => {
|
|
|
35
33
|
isFullscreen: !prev.isFullscreen,
|
|
36
34
|
}));
|
|
37
35
|
}, []);
|
|
36
|
+
const registerArtifact = (0, react_1.useCallback)((artifact) => {
|
|
37
|
+
if (!(artifact === null || artifact === void 0 ? void 0 : artifact.artifactId))
|
|
38
|
+
return;
|
|
39
|
+
registryRef.current[artifact.artifactId] = artifact;
|
|
40
|
+
}, []);
|
|
41
|
+
const applyArtifactUpdate = (0, react_1.useCallback)((artifactId, edits) => {
|
|
42
|
+
const current = registryRef.current[artifactId];
|
|
43
|
+
if (!current) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
failedEdits: edits,
|
|
47
|
+
updatedArtifact: null,
|
|
48
|
+
failureReason: 'not-found',
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const { content, failedEdits, appliedCount } = (0, applyEdits_1.applyEdits)(current.content, edits);
|
|
52
|
+
if (appliedCount === 0) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
failedEdits,
|
|
56
|
+
updatedArtifact: null,
|
|
57
|
+
failureReason: 'no-match',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const updatedArtifact = {
|
|
61
|
+
id: `artifact-ui-${artifactId}-${Date.now()}-${Math.random()
|
|
62
|
+
.toString(36)
|
|
63
|
+
.slice(2, 8)}`,
|
|
64
|
+
artifactId,
|
|
65
|
+
content,
|
|
66
|
+
mimeType: current.mimeType,
|
|
67
|
+
title: current.title,
|
|
68
|
+
timestamp: new Date(),
|
|
69
|
+
size: content.length,
|
|
70
|
+
};
|
|
71
|
+
registryRef.current[artifactId] = updatedArtifact;
|
|
72
|
+
setState(prev => {
|
|
73
|
+
var _a;
|
|
74
|
+
if (prev.isDrawerOpen &&
|
|
75
|
+
((_a = prev.currentArtifact) === null || _a === void 0 ? void 0 : _a.artifactId) === artifactId) {
|
|
76
|
+
return {
|
|
77
|
+
...prev,
|
|
78
|
+
currentArtifact: updatedArtifact,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return prev;
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
success: failedEdits.length === 0,
|
|
85
|
+
failedEdits,
|
|
86
|
+
updatedArtifact,
|
|
87
|
+
};
|
|
88
|
+
}, []);
|
|
38
89
|
const contextValue = (0, react_1.useMemo)(() => ({
|
|
39
90
|
state,
|
|
40
91
|
openArtifact,
|
|
41
92
|
closeArtifact,
|
|
42
93
|
toggleFullscreen,
|
|
43
|
-
|
|
94
|
+
registerArtifact,
|
|
95
|
+
applyArtifactUpdate,
|
|
96
|
+
}), [
|
|
97
|
+
state,
|
|
98
|
+
openArtifact,
|
|
99
|
+
closeArtifact,
|
|
100
|
+
toggleFullscreen,
|
|
101
|
+
registerArtifact,
|
|
102
|
+
applyArtifactUpdate,
|
|
103
|
+
]);
|
|
44
104
|
return ((0, jsx_runtime_1.jsx)(ArtifactContext.Provider, { value: contextValue, children: children }));
|
|
45
105
|
};
|
|
46
106
|
exports.ArtifactProvider = ArtifactProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactContext.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/context/ArtifactContext.tsx"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"ArtifactContext.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/context/ArtifactContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
export interface ArtifactData {
|
|
2
2
|
id: string;
|
|
3
|
+
artifactId: string;
|
|
3
4
|
content: string;
|
|
4
5
|
mimeType: string;
|
|
5
6
|
title: string;
|
|
6
7
|
timestamp: Date;
|
|
7
8
|
size: number;
|
|
8
9
|
}
|
|
10
|
+
export interface ArtifactEdit {
|
|
11
|
+
old: string;
|
|
12
|
+
new: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ApplyUpdateResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
failedEdits: ArtifactEdit[];
|
|
17
|
+
updatedArtifact: ArtifactData | null;
|
|
18
|
+
failureReason?: 'not-found' | 'no-match';
|
|
19
|
+
}
|
|
9
20
|
export interface ArtifactSystemState {
|
|
10
21
|
currentArtifact: ArtifactData | null;
|
|
11
22
|
isDrawerOpen: boolean;
|
|
@@ -54,7 +54,7 @@ const initMemoriArtifactAPI = () => {
|
|
|
54
54
|
exports.initMemoriArtifactAPI = initMemoriArtifactAPI;
|
|
55
55
|
(0, exports.initMemoriArtifactAPI)();
|
|
56
56
|
const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
57
|
-
const { openArtifact, closeArtifact, toggleFullscreen, state } = (0, ArtifactContext_1.useArtifact)();
|
|
57
|
+
const { openArtifact, closeArtifact, toggleFullscreen, state, registerArtifact } = (0, ArtifactContext_1.useArtifact)();
|
|
58
58
|
const apiRef = (0, react_1.useRef)(null);
|
|
59
59
|
(0, react_1.useEffect)(() => {
|
|
60
60
|
if (typeof window !== 'undefined') {
|
|
@@ -65,10 +65,12 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
65
65
|
},
|
|
66
66
|
createAndOpenArtifact: (content, mimeType = 'html', title) => {
|
|
67
67
|
const autoTitle = title || getTitleFromMimeType(mimeType);
|
|
68
|
+
const artifactId = `api-${Date.now()}-${Math.random()
|
|
69
|
+
.toString(36)
|
|
70
|
+
.substr(2, 9)}`;
|
|
68
71
|
const artifact = {
|
|
69
|
-
id: `artifact-${
|
|
70
|
-
|
|
71
|
-
.substr(2, 9)}`,
|
|
72
|
+
id: `artifact-ui-${artifactId}`,
|
|
73
|
+
artifactId,
|
|
72
74
|
content,
|
|
73
75
|
mimeType,
|
|
74
76
|
title: autoTitle,
|
|
@@ -76,8 +78,8 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
76
78
|
size: content.length,
|
|
77
79
|
};
|
|
78
80
|
let messageText = content;
|
|
79
|
-
if (!messageText.includes('
|
|
80
|
-
messageText = `<output class="memori-artifact" data-mimetype="${mimeType}" data-title="${autoTitle}">${content}</output>`;
|
|
81
|
+
if (!messageText.includes('class="memori-artifact"')) {
|
|
82
|
+
messageText = `<output class="memori-artifact" data-action="create" data-artifact-id="${artifactId}" data-mimetype="${mimeType}" data-title="${autoTitle}">${content}</output>`;
|
|
81
83
|
}
|
|
82
84
|
pushMessage({
|
|
83
85
|
text: messageText,
|
|
@@ -95,6 +97,7 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
95
97
|
placeLongitude: undefined,
|
|
96
98
|
placeUncertaintyKm: undefined,
|
|
97
99
|
});
|
|
100
|
+
registerArtifact(artifact);
|
|
98
101
|
openArtifact(artifact);
|
|
99
102
|
},
|
|
100
103
|
createFromOutputElement: (outputElement) => {
|
|
@@ -102,12 +105,13 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
102
105
|
const mimeType = outputElement.getAttribute('data-mimetype') || 'html';
|
|
103
106
|
const title = outputElement.getAttribute('data-title') ||
|
|
104
107
|
getTitleFromMimeType(mimeType);
|
|
108
|
+
const artifactId = outputElement.getAttribute('data-artifact-id') ||
|
|
109
|
+
`api-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
105
110
|
outputElement.style.display = 'none';
|
|
106
111
|
outputElement.setAttribute('data-memori-processed', 'true');
|
|
107
112
|
const artifact = {
|
|
108
|
-
id: `artifact-${
|
|
109
|
-
|
|
110
|
-
.substr(2, 9)}`,
|
|
113
|
+
id: `artifact-ui-${artifactId}`,
|
|
114
|
+
artifactId,
|
|
111
115
|
content,
|
|
112
116
|
mimeType,
|
|
113
117
|
title,
|
|
@@ -115,8 +119,8 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
115
119
|
size: content.length,
|
|
116
120
|
};
|
|
117
121
|
let messageText = content;
|
|
118
|
-
if (!messageText.includes('
|
|
119
|
-
messageText = `<output class="memori-artifact" data-mimetype="${mimeType}" data-title="${title}">${content}</output>`;
|
|
122
|
+
if (!messageText.includes('class="memori-artifact"')) {
|
|
123
|
+
messageText = `<output class="memori-artifact" data-action="create" data-artifact-id="${artifactId}" data-mimetype="${mimeType}" data-title="${title}">${content}</output>`;
|
|
120
124
|
}
|
|
121
125
|
pushMessage({
|
|
122
126
|
text: messageText,
|
|
@@ -134,8 +138,9 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
134
138
|
placeLongitude: undefined,
|
|
135
139
|
placeUncertaintyKm: undefined,
|
|
136
140
|
});
|
|
141
|
+
registerArtifact(artifact);
|
|
137
142
|
openArtifact(artifact);
|
|
138
|
-
return artifact.
|
|
143
|
+
return artifact.artifactId;
|
|
139
144
|
},
|
|
140
145
|
closeArtifact: () => {
|
|
141
146
|
closeArtifact();
|
|
@@ -196,7 +201,7 @@ const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
196
201
|
delete window.MemoriArtifactAPI;
|
|
197
202
|
}
|
|
198
203
|
};
|
|
199
|
-
}, [openArtifact, closeArtifact, toggleFullscreen, state, pushMessage]);
|
|
204
|
+
}, [openArtifact, closeArtifact, toggleFullscreen, state, pushMessage, registerArtifact]);
|
|
200
205
|
return null;
|
|
201
206
|
};
|
|
202
207
|
exports.ArtifactAPIBridge = ArtifactAPIBridge;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactAPI.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx"],"names":[],"mappings":";;;AAAA,iCAA0C;AAC1C,gEAAyD;AAKzD,MAAM,YAAY,GAA2C,EAAE,CAAC;AAChE,IAAI,OAAO,GAAG,KAAK,CAAC;AAMb,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAG1C,IAAK,MAAc,CAAC,iBAAiB,EAAE;QACrC,OAAO;KACR;IAEA,MAAc,CAAC,iBAAiB,GAAG;QAClC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO;QACvB,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,gBAAgB,EAAE,GAAG,EAAE,CAAC,YAAY;QACpC,kBAAkB,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,YAAY,EAAE,CAAC,QAAsB,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACjE;QACH,CAAC;QACD,qBAAqB,EAAE,CAAC,OAAe,EAAE,QAAiB,EAAE,KAAc,EAAE,EAAE;YAC5E,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;aAC1F;QACH,CAAC;QACD,uBAAuB,EAAE,CAAC,aAAgC,EAAE,EAAE;YAC5D,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAChF,OAAO,SAAS,CAAC;aAClB;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,aAAa,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAC1D;QACH,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7D;QACH,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;aAC5E;YACD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,qBAAqB,yBAgDhC;AAGF,IAAA,6BAAqB,GAAE,CAAC;AAMjB,MAAM,iBAAiB,GAAG,CAAC,EAChC,WAAW,GAGZ,EAAE,EAAE;IACH,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ArtifactAPI.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx"],"names":[],"mappings":";;;AAAA,iCAA0C;AAC1C,gEAAyD;AAKzD,MAAM,YAAY,GAA2C,EAAE,CAAC;AAChE,IAAI,OAAO,GAAG,KAAK,CAAC;AAMb,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAG1C,IAAK,MAAc,CAAC,iBAAiB,EAAE;QACrC,OAAO;KACR;IAEA,MAAc,CAAC,iBAAiB,GAAG;QAClC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO;QACvB,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;QACnD,gBAAgB,EAAE,GAAG,EAAE,CAAC,YAAY;QACpC,kBAAkB,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtD,YAAY,EAAE,CAAC,QAAsB,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACjE;QACH,CAAC;QACD,qBAAqB,EAAE,CAAC,OAAe,EAAE,QAAiB,EAAE,KAAc,EAAE,EAAE;YAC5E,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;aAC1F;QACH,CAAC;QACD,uBAAuB,EAAE,CAAC,aAAgC,EAAE,EAAE;YAC5D,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAChF,OAAO,SAAS,CAAC;aAClB;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,aAAa,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAC1D;QACH,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE;gBACZ,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7D;QACH,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;aAC5E;YACD,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,qBAAqB,yBAgDhC;AAGF,IAAA,6BAAqB,GAAE,CAAC;AAMjB,MAAM,iBAAiB,GAAG,CAAC,EAChC,WAAW,GAGZ,EAAE,EAAE;IACH,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAC9E,IAAA,6BAAW,GAAE,CAAC;IAEhB,MAAM,MAAM,GAAG,IAAA,cAAM,EAAM,IAAI,CAAC,CAAC;IAEjC,IAAA,iBAAS,EAAC,GAAG,EAAE;QAEb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,MAAM,SAAS,GAAI,MAAc,CAAC,iBAAiB,CAAC;YAGpD,MAAM,CAAC,OAAO,GAAG;gBAKf,YAAY,EAAE,CAAC,QAAsB,EAAE,EAAE;oBACvC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBAQD,qBAAqB,EAAE,CACrB,OAAe,EACf,WAAmB,MAAM,EACzB,KAAc,EACd,EAAE;oBACF,MAAM,SAAS,GAAG,KAAK,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBAC1D,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;yBAClD,QAAQ,CAAC,EAAE,CAAC;yBACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAGlB,MAAM,QAAQ,GAAiB;wBAC7B,EAAE,EAAE,eAAe,UAAU,EAAE;wBAC/B,UAAU;wBACV,OAAO;wBACP,QAAQ;wBACR,KAAK,EAAE,SAAS;wBAChB,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,IAAI,EAAE,OAAO,CAAC,MAAM;qBACrB,CAAC;oBAIF,IAAI,WAAW,GAAG,OAAO,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;wBACpD,WAAW,GAAG,0EAA0E,UAAU,oBAAoB,QAAQ,iBAAiB,SAAS,KAAK,OAAO,WAAW,CAAC;qBACjL;oBAGD,WAAW,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACnC,QAAQ,EAAE,KAAc;wBACxB,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,KAAK;wBACd,cAAc,EAAE,SAAS;wBACzB,gBAAgB,EAAE,SAAS;wBAC3B,aAAa,EAAE,KAAK;wBACpB,WAAW,EAAE,SAAS;wBACtB,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,SAAS;wBACpB,aAAa,EAAE,SAAS;wBACxB,cAAc,EAAE,SAAS;wBACzB,kBAAkB,EAAE,SAAS;qBAC9B,CAAC,CAAC;oBAEH,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBAE3B,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBAOD,uBAAuB,EAAE,CAAC,aAAgC,EAAE,EAAE;oBAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC;oBACxC,MAAM,QAAQ,GACZ,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC;oBACxD,MAAM,KAAK,GACT,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC;wBACxC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM,UAAU,GACd,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC;wBAC9C,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAGjE,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;oBACrC,aAAa,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;oBAE5D,MAAM,QAAQ,GAAiB;wBAC7B,EAAE,EAAE,eAAe,UAAU,EAAE;wBAC/B,UAAU;wBACV,OAAO;wBACP,QAAQ;wBACR,KAAK;wBACL,SAAS,EAAE,IAAI,IAAI,EAAE;wBACrB,IAAI,EAAE,OAAO,CAAC,MAAM;qBACrB,CAAC;oBAIF,IAAI,WAAW,GAAG,OAAO,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE;wBACpD,WAAW,GAAG,0EAA0E,UAAU,oBAAoB,QAAQ,iBAAiB,KAAK,KAAK,OAAO,WAAW,CAAC;qBAC7K;oBAED,WAAW,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACnC,QAAQ,EAAE,KAAc;wBACxB,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,KAAK;wBACd,cAAc,EAAE,SAAS;wBACzB,gBAAgB,EAAE,SAAS;wBAC3B,aAAa,EAAE,KAAK;wBACpB,WAAW,EAAE,SAAS;wBACtB,IAAI,EAAE,SAAS;wBACf,SAAS,EAAE,SAAS;wBACpB,aAAa,EAAE,SAAS;wBACxB,cAAc,EAAE,SAAS;wBACzB,kBAAkB,EAAE,SAAS;qBAC9B,CAAC,CAAC;oBAEH,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBAE3B,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAEvB,OAAO,QAAQ,CAAC,UAAU,CAAC;gBAC7B,CAAC;gBAKD,aAAa,EAAE,GAAG,EAAE;oBAClB,aAAa,EAAE,CAAC;gBAClB,CAAC;gBAKD,gBAAgB,EAAE,GAAG,EAAE;oBACrB,gBAAgB,EAAE,CAAC;gBACrB,CAAC;gBAKD,QAAQ,EAAE,GAAG,EAAE;oBACb,OAAO;wBACL,eAAe,EAAE,KAAK,CAAC,eAAe;wBACtC,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;qBACjC,CAAC;gBACJ,CAAC;aACF,CAAC;YAGF,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;gBACrD,SAAS,CAAC,qBAAqB,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;gBACvE,SAAS,CAAC,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBAC3E,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;gBACvD,SAAS,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBAC7D,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAG7C,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAG1B,MAAM,YAAY,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAClD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC3B,YAAY,CAAC,OAAO,CAAC,CAAC,IAAqC,EAAE,EAAE;wBAC7D,IAAI;4BACF,MAAM,MAAM,GAAI,MAAM,CAAC,OAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BACpD,IAAI,MAAM,EAAE;gCACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;6BACtB;yBACF;wBAAC,OAAO,KAAK,EAAE;yBAEf;oBACH,CAAC,CAAC,CAAC;oBACH,SAAS,CAAC,kBAAkB,EAAE,CAAC;iBAChC;aACF;iBAAM;gBAEJ,MAAc,CAAC,iBAAiB,GAAG;oBAClC,GAAG,MAAM,CAAC,OAAO;oBACjB,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,EAAE;oBACjB,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE;wBAC3B,MAAc,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACrD,CAAC;oBACD,gBAAgB,EAAE,GAAG,EAAE;wBACrB,OAAQ,MAAc,CAAC,iBAAiB,CAAC,aAAa,CAAC;oBACzD,CAAC;oBACD,kBAAkB,EAAE,GAAG,EAAE;wBACtB,MAAc,CAAC,iBAAiB,CAAC,aAAa,GAAG,EAAE,CAAC;oBACvD,CAAC;iBACF,CAAC;aACH;SACF;QAED,OAAO,GAAG,EAAE;YAEV,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBACjC,OAAQ,MAAc,CAAC,iBAAiB,CAAC;aAC1C;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE1F,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAhOW,QAAA,iBAAiB,qBAgO5B;AAGF,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,eAAe,CAAC;IACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAC9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAC9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,aAAa,CAAC;IACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,WAAW,CAAC;IAClD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAC9D,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACjD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAe,EACf,QAAgB,EAChB,KAAa;IAEb,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,SAAS,GAAG,yBAAyB,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG;;;;;;;;;;;GAWvB,CAAC;IAEF,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAExD,OAAO,CAAC,SAAS,GAAG;oCACc,IAAI;;2DAEmB,UAAU,CAC7D,KAAK,CACN;sDAC+C,QAAQ,MAAM,IAAI;;;;;;;GAOrE,CAAC;IAEF,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IACvB,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ArtifactEdit } from '../types/artifact.types';
|
|
2
|
+
export interface ApplyEditsResult {
|
|
3
|
+
content: string;
|
|
4
|
+
failedEdits: ArtifactEdit[];
|
|
5
|
+
appliedCount: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const applyEdits: (content: string, edits: ArtifactEdit[]) => ApplyEditsResult;
|
|
8
|
+
export declare const parseEdits: (body: string) => ArtifactEdit[] | null;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseEdits = exports.applyEdits = void 0;
|
|
4
|
+
const normalizeWhitespace = (s) => s.replace(/\s+/g, ' ');
|
|
5
|
+
const findWhitespaceTolerant = (haystack, needle) => {
|
|
6
|
+
const normNeedle = normalizeWhitespace(needle.trim());
|
|
7
|
+
if (!normNeedle)
|
|
8
|
+
return null;
|
|
9
|
+
const normChars = [];
|
|
10
|
+
const normToOrig = [];
|
|
11
|
+
let lastWasSpace = false;
|
|
12
|
+
for (let i = 0; i < haystack.length; i++) {
|
|
13
|
+
const ch = haystack[i];
|
|
14
|
+
if (/\s/.test(ch)) {
|
|
15
|
+
if (!lastWasSpace && normChars.length > 0) {
|
|
16
|
+
normChars.push(' ');
|
|
17
|
+
normToOrig.push(i);
|
|
18
|
+
lastWasSpace = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
normChars.push(ch);
|
|
23
|
+
normToOrig.push(i);
|
|
24
|
+
lastWasSpace = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
while (normChars.length > 0 && normChars[normChars.length - 1] === ' ') {
|
|
28
|
+
normChars.pop();
|
|
29
|
+
normToOrig.pop();
|
|
30
|
+
}
|
|
31
|
+
const normHaystack = normChars.join('');
|
|
32
|
+
const idx = normHaystack.indexOf(normNeedle);
|
|
33
|
+
if (idx === -1)
|
|
34
|
+
return null;
|
|
35
|
+
const startOrig = normToOrig[idx];
|
|
36
|
+
const endNormIdx = idx + normNeedle.length - 1;
|
|
37
|
+
const lastOrig = normToOrig[endNormIdx];
|
|
38
|
+
let endOrig = lastOrig + 1;
|
|
39
|
+
while (endOrig < haystack.length && /\s/.test(haystack[endOrig])) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
return [startOrig, endOrig];
|
|
43
|
+
};
|
|
44
|
+
const applyEdits = (content, edits) => {
|
|
45
|
+
let result = content;
|
|
46
|
+
const failedEdits = [];
|
|
47
|
+
let appliedCount = 0;
|
|
48
|
+
for (const edit of edits) {
|
|
49
|
+
if (!edit || typeof edit.old !== 'string' || typeof edit.new !== 'string') {
|
|
50
|
+
failedEdits.push(edit);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const exactIdx = result.indexOf(edit.old);
|
|
54
|
+
if (exactIdx !== -1) {
|
|
55
|
+
result =
|
|
56
|
+
result.slice(0, exactIdx) +
|
|
57
|
+
edit.new +
|
|
58
|
+
result.slice(exactIdx + edit.old.length);
|
|
59
|
+
appliedCount++;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const tolerant = findWhitespaceTolerant(result, edit.old);
|
|
63
|
+
if (tolerant) {
|
|
64
|
+
const [start, end] = tolerant;
|
|
65
|
+
result = result.slice(0, start) + edit.new + result.slice(end);
|
|
66
|
+
appliedCount++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
failedEdits.push(edit);
|
|
70
|
+
}
|
|
71
|
+
return { content: result, failedEdits, appliedCount };
|
|
72
|
+
};
|
|
73
|
+
exports.applyEdits = applyEdits;
|
|
74
|
+
const HTML_ENTITIES = {
|
|
75
|
+
'"': '"',
|
|
76
|
+
'"': '"',
|
|
77
|
+
''': "'",
|
|
78
|
+
''': "'",
|
|
79
|
+
'&': '&',
|
|
80
|
+
'<': '<',
|
|
81
|
+
'>': '>',
|
|
82
|
+
};
|
|
83
|
+
const unescapeHtmlEntities = (s) => s.replace(/"|"|'|'|&|<|>/g, m => { var _a; return (_a = HTML_ENTITIES[m]) !== null && _a !== void 0 ? _a : m; });
|
|
84
|
+
const isValidEditsArray = (value) => {
|
|
85
|
+
if (!Array.isArray(value))
|
|
86
|
+
return false;
|
|
87
|
+
return value.every(item => item &&
|
|
88
|
+
typeof item === 'object' &&
|
|
89
|
+
typeof item.old === 'string' &&
|
|
90
|
+
typeof item.new === 'string');
|
|
91
|
+
};
|
|
92
|
+
const parseEdits = (body) => {
|
|
93
|
+
if (!body || typeof body !== 'string')
|
|
94
|
+
return null;
|
|
95
|
+
const trimmed = body.trim();
|
|
96
|
+
if (!trimmed)
|
|
97
|
+
return null;
|
|
98
|
+
const tryParse = (raw) => {
|
|
99
|
+
try {
|
|
100
|
+
const parsed = JSON.parse(raw);
|
|
101
|
+
return isValidEditsArray(parsed) ? parsed : null;
|
|
102
|
+
}
|
|
103
|
+
catch (_a) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const direct = tryParse(trimmed);
|
|
108
|
+
if (direct)
|
|
109
|
+
return direct;
|
|
110
|
+
const unescaped = unescapeHtmlEntities(trimmed);
|
|
111
|
+
if (unescaped !== trimmed) {
|
|
112
|
+
return tryParse(unescaped);
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
};
|
|
116
|
+
exports.parseEdits = parseEdits;
|
|
117
|
+
//# sourceMappingURL=applyEdits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyEdits.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/utils/applyEdits.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import StartPanel, { Props as StartPanelProps } from '../StartPanel/StartPanel';
|
|
|
7
7
|
import Avatar, { Props as AvatarProps } from '../Avatar/Avatar';
|
|
8
8
|
import Header, { Props as HeaderProps } from '../Header/Header';
|
|
9
9
|
declare const getMemoriState: (integrationId?: string | undefined) => object | null;
|
|
10
|
+
export declare function dialogStateFingerprint(state: DialogState | undefined): string;
|
|
10
11
|
type MemoriTextEnteredEvent = CustomEvent<{
|
|
11
12
|
text: string;
|
|
12
13
|
waitForPrevious?: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dialogStateFingerprint = void 0;
|
|
3
4
|
const tslib_1 = require("tslib");
|
|
4
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
6
|
const ArtifactAPI_1 = require("../MemoriArtifactSystem/utils/ArtifactAPI");
|
|
@@ -81,6 +82,22 @@ function readCorrelationID(response) {
|
|
|
81
82
|
const value = response.correlationID;
|
|
82
83
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
83
84
|
}
|
|
85
|
+
function dialogStateFingerprint(state) {
|
|
86
|
+
if (!state)
|
|
87
|
+
return '';
|
|
88
|
+
return JSON.stringify({
|
|
89
|
+
state: state.state,
|
|
90
|
+
previousState: state.previousState,
|
|
91
|
+
emission: state.emission,
|
|
92
|
+
emitter: state.emitter,
|
|
93
|
+
lastMatchedMemoryID: state.lastMatchedMemoryID,
|
|
94
|
+
currentDate: state.currentDate,
|
|
95
|
+
currentMemoryID: state.currentMemoryID,
|
|
96
|
+
contextVars: state.contextVars,
|
|
97
|
+
emittedMedia: state.emittedMedia,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
exports.dialogStateFingerprint = dialogStateFingerprint;
|
|
84
101
|
const typeMessage = (message, waitForPrevious = true, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
85
102
|
const e = new CustomEvent('MemoriTextEntered', {
|
|
86
103
|
detail: {
|
|
@@ -495,6 +512,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
495
512
|
if (response.resultCode === 0 && correlationID) {
|
|
496
513
|
registerPendingEnterText(correlationID, {
|
|
497
514
|
msg,
|
|
515
|
+
stateBeforeRequest: dialogStateFingerprint(currentDialogState),
|
|
498
516
|
text,
|
|
499
517
|
media,
|
|
500
518
|
translate,
|
|
@@ -1383,6 +1401,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1383
1401
|
reject(new Error('NATS enter-text response timeout'));
|
|
1384
1402
|
}, timeoutMs);
|
|
1385
1403
|
registerPendingEnterText(correlationID, {
|
|
1404
|
+
stateBeforeRequest: dialogStateFingerprint(currentDialogState),
|
|
1386
1405
|
waitForResponse: {
|
|
1387
1406
|
resolve: event => {
|
|
1388
1407
|
clearTimeout(timeoutId);
|
|
@@ -1395,7 +1414,45 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1395
1414
|
timeoutId,
|
|
1396
1415
|
},
|
|
1397
1416
|
});
|
|
1398
|
-
}), [registerPendingEnterText, clearEnterTextPending]);
|
|
1417
|
+
}), [registerPendingEnterText, clearEnterTextPending, currentDialogState]);
|
|
1418
|
+
const catchUpPendingEnterText = (0, react_1.useCallback)(async () => {
|
|
1419
|
+
if (!sessionId || pendingEnterTextRef.current.size === 0)
|
|
1420
|
+
return;
|
|
1421
|
+
const latest = Array.from(pendingEnterTextRef.current.entries()).pop();
|
|
1422
|
+
if (!latest)
|
|
1423
|
+
return;
|
|
1424
|
+
const [correlationID, pending] = latest;
|
|
1425
|
+
try {
|
|
1426
|
+
const { currentState, resultCode, resultMessage, requestID } = await getSession(sessionId);
|
|
1427
|
+
if (resultCode !== 0 || !currentState) {
|
|
1428
|
+
deliverEnterTextNatsResponse(correlationID, {
|
|
1429
|
+
eventType: 'dialog_text_entered_response',
|
|
1430
|
+
correlationID,
|
|
1431
|
+
requestID,
|
|
1432
|
+
resultCode,
|
|
1433
|
+
resultMessage,
|
|
1434
|
+
currentState,
|
|
1435
|
+
});
|
|
1436
|
+
return;
|
|
1437
|
+
}
|
|
1438
|
+
if (dialogStateFingerprint(currentState) === pending.stateBeforeRequest) {
|
|
1439
|
+
console.info('[NATS] catch-up: pending turn has not completed yet');
|
|
1440
|
+
return;
|
|
1441
|
+
}
|
|
1442
|
+
console.info('[NATS] catch-up: applying current engine session state');
|
|
1443
|
+
deliverEnterTextNatsResponse(correlationID, {
|
|
1444
|
+
eventType: 'dialog_text_entered_response',
|
|
1445
|
+
correlationID,
|
|
1446
|
+
requestID,
|
|
1447
|
+
resultCode,
|
|
1448
|
+
resultMessage,
|
|
1449
|
+
currentState,
|
|
1450
|
+
});
|
|
1451
|
+
}
|
|
1452
|
+
catch (error) {
|
|
1453
|
+
logWidgetError('NATS catch-up failed', error);
|
|
1454
|
+
}
|
|
1455
|
+
}, [sessionId, deliverEnterTextNatsResponse]);
|
|
1399
1456
|
(0, useNats_1.useNats)({
|
|
1400
1457
|
baseUrl,
|
|
1401
1458
|
sessionId,
|
|
@@ -1415,6 +1472,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1415
1472
|
deliverEnterTextNatsResponse(correlationID, event);
|
|
1416
1473
|
}, [deliverEnterTextNatsResponse]),
|
|
1417
1474
|
onError: deliverEnterTextNatsError,
|
|
1475
|
+
onCatchUp: catchUpPendingEnterText,
|
|
1418
1476
|
});
|
|
1419
1477
|
const focusChatInput = () => {
|
|
1420
1478
|
let textarea = document.querySelector('#chat-fieldset textarea');
|