@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
|
@@ -50,7 +50,7 @@ export const initMemoriArtifactAPI = () => {
|
|
|
50
50
|
};
|
|
51
51
|
initMemoriArtifactAPI();
|
|
52
52
|
export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
53
|
-
const { openArtifact, closeArtifact, toggleFullscreen, state } = useArtifact();
|
|
53
|
+
const { openArtifact, closeArtifact, toggleFullscreen, state, registerArtifact } = useArtifact();
|
|
54
54
|
const apiRef = useRef(null);
|
|
55
55
|
useEffect(() => {
|
|
56
56
|
if (typeof window !== 'undefined') {
|
|
@@ -61,10 +61,12 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
61
61
|
},
|
|
62
62
|
createAndOpenArtifact: (content, mimeType = 'html', title) => {
|
|
63
63
|
const autoTitle = title || getTitleFromMimeType(mimeType);
|
|
64
|
+
const artifactId = `api-${Date.now()}-${Math.random()
|
|
65
|
+
.toString(36)
|
|
66
|
+
.substr(2, 9)}`;
|
|
64
67
|
const artifact = {
|
|
65
|
-
id: `artifact-${
|
|
66
|
-
|
|
67
|
-
.substr(2, 9)}`,
|
|
68
|
+
id: `artifact-ui-${artifactId}`,
|
|
69
|
+
artifactId,
|
|
68
70
|
content,
|
|
69
71
|
mimeType,
|
|
70
72
|
title: autoTitle,
|
|
@@ -72,8 +74,8 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
72
74
|
size: content.length,
|
|
73
75
|
};
|
|
74
76
|
let messageText = content;
|
|
75
|
-
if (!messageText.includes('
|
|
76
|
-
messageText = `<output class="memori-artifact" data-mimetype="${mimeType}" data-title="${autoTitle}">${content}</output>`;
|
|
77
|
+
if (!messageText.includes('class="memori-artifact"')) {
|
|
78
|
+
messageText = `<output class="memori-artifact" data-action="create" data-artifact-id="${artifactId}" data-mimetype="${mimeType}" data-title="${autoTitle}">${content}</output>`;
|
|
77
79
|
}
|
|
78
80
|
pushMessage({
|
|
79
81
|
text: messageText,
|
|
@@ -91,6 +93,7 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
91
93
|
placeLongitude: undefined,
|
|
92
94
|
placeUncertaintyKm: undefined,
|
|
93
95
|
});
|
|
96
|
+
registerArtifact(artifact);
|
|
94
97
|
openArtifact(artifact);
|
|
95
98
|
},
|
|
96
99
|
createFromOutputElement: (outputElement) => {
|
|
@@ -98,12 +101,13 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
98
101
|
const mimeType = outputElement.getAttribute('data-mimetype') || 'html';
|
|
99
102
|
const title = outputElement.getAttribute('data-title') ||
|
|
100
103
|
getTitleFromMimeType(mimeType);
|
|
104
|
+
const artifactId = outputElement.getAttribute('data-artifact-id') ||
|
|
105
|
+
`api-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
101
106
|
outputElement.style.display = 'none';
|
|
102
107
|
outputElement.setAttribute('data-memori-processed', 'true');
|
|
103
108
|
const artifact = {
|
|
104
|
-
id: `artifact-${
|
|
105
|
-
|
|
106
|
-
.substr(2, 9)}`,
|
|
109
|
+
id: `artifact-ui-${artifactId}`,
|
|
110
|
+
artifactId,
|
|
107
111
|
content,
|
|
108
112
|
mimeType,
|
|
109
113
|
title,
|
|
@@ -111,8 +115,8 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
111
115
|
size: content.length,
|
|
112
116
|
};
|
|
113
117
|
let messageText = content;
|
|
114
|
-
if (!messageText.includes('
|
|
115
|
-
messageText = `<output class="memori-artifact" data-mimetype="${mimeType}" data-title="${title}">${content}</output>`;
|
|
118
|
+
if (!messageText.includes('class="memori-artifact"')) {
|
|
119
|
+
messageText = `<output class="memori-artifact" data-action="create" data-artifact-id="${artifactId}" data-mimetype="${mimeType}" data-title="${title}">${content}</output>`;
|
|
116
120
|
}
|
|
117
121
|
pushMessage({
|
|
118
122
|
text: messageText,
|
|
@@ -130,8 +134,9 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
130
134
|
placeLongitude: undefined,
|
|
131
135
|
placeUncertaintyKm: undefined,
|
|
132
136
|
});
|
|
137
|
+
registerArtifact(artifact);
|
|
133
138
|
openArtifact(artifact);
|
|
134
|
-
return artifact.
|
|
139
|
+
return artifact.artifactId;
|
|
135
140
|
},
|
|
136
141
|
closeArtifact: () => {
|
|
137
142
|
closeArtifact();
|
|
@@ -192,7 +197,7 @@ export const ArtifactAPIBridge = ({ pushMessage, }) => {
|
|
|
192
197
|
delete window.MemoriArtifactAPI;
|
|
193
198
|
}
|
|
194
199
|
};
|
|
195
|
-
}, [openArtifact, closeArtifact, toggleFullscreen, state, pushMessage]);
|
|
200
|
+
}, [openArtifact, closeArtifact, toggleFullscreen, state, pushMessage, registerArtifact]);
|
|
196
201
|
return null;
|
|
197
202
|
};
|
|
198
203
|
function getTitleFromMimeType(mimeType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtifactAPI.js","sourceRoot":"","sources":["../../../../src/components/MemoriArtifactSystem/utils/ArtifactAPI.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAKzD,MAAM,YAAY,GAA2C,EAAE,CAAC;AAChE,IAAI,OAAO,GAAG,KAAK,CAAC;AAMpB,MAAM,CAAC,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;AAGF,qBAAqB,EAAE,CAAC;AAMxB,MAAM,CAAC,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,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAKzD,MAAM,YAAY,GAA2C,EAAE,CAAC;AAChE,IAAI,OAAO,GAAG,KAAK,CAAC;AAMpB,MAAM,CAAC,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;AAGF,qBAAqB,EAAE,CAAC;AAMxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,WAAW,GAGZ,EAAE,EAAE;IACH,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAC9E,WAAW,EAAE,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAEjC,SAAS,CAAC,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;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,112 @@
|
|
|
1
|
+
const normalizeWhitespace = (s) => s.replace(/\s+/g, ' ');
|
|
2
|
+
const findWhitespaceTolerant = (haystack, needle) => {
|
|
3
|
+
const normNeedle = normalizeWhitespace(needle.trim());
|
|
4
|
+
if (!normNeedle)
|
|
5
|
+
return null;
|
|
6
|
+
const normChars = [];
|
|
7
|
+
const normToOrig = [];
|
|
8
|
+
let lastWasSpace = false;
|
|
9
|
+
for (let i = 0; i < haystack.length; i++) {
|
|
10
|
+
const ch = haystack[i];
|
|
11
|
+
if (/\s/.test(ch)) {
|
|
12
|
+
if (!lastWasSpace && normChars.length > 0) {
|
|
13
|
+
normChars.push(' ');
|
|
14
|
+
normToOrig.push(i);
|
|
15
|
+
lastWasSpace = true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
normChars.push(ch);
|
|
20
|
+
normToOrig.push(i);
|
|
21
|
+
lastWasSpace = false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
while (normChars.length > 0 && normChars[normChars.length - 1] === ' ') {
|
|
25
|
+
normChars.pop();
|
|
26
|
+
normToOrig.pop();
|
|
27
|
+
}
|
|
28
|
+
const normHaystack = normChars.join('');
|
|
29
|
+
const idx = normHaystack.indexOf(normNeedle);
|
|
30
|
+
if (idx === -1)
|
|
31
|
+
return null;
|
|
32
|
+
const startOrig = normToOrig[idx];
|
|
33
|
+
const endNormIdx = idx + normNeedle.length - 1;
|
|
34
|
+
const lastOrig = normToOrig[endNormIdx];
|
|
35
|
+
let endOrig = lastOrig + 1;
|
|
36
|
+
while (endOrig < haystack.length && /\s/.test(haystack[endOrig])) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
return [startOrig, endOrig];
|
|
40
|
+
};
|
|
41
|
+
export const applyEdits = (content, edits) => {
|
|
42
|
+
let result = content;
|
|
43
|
+
const failedEdits = [];
|
|
44
|
+
let appliedCount = 0;
|
|
45
|
+
for (const edit of edits) {
|
|
46
|
+
if (!edit || typeof edit.old !== 'string' || typeof edit.new !== 'string') {
|
|
47
|
+
failedEdits.push(edit);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const exactIdx = result.indexOf(edit.old);
|
|
51
|
+
if (exactIdx !== -1) {
|
|
52
|
+
result =
|
|
53
|
+
result.slice(0, exactIdx) +
|
|
54
|
+
edit.new +
|
|
55
|
+
result.slice(exactIdx + edit.old.length);
|
|
56
|
+
appliedCount++;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const tolerant = findWhitespaceTolerant(result, edit.old);
|
|
60
|
+
if (tolerant) {
|
|
61
|
+
const [start, end] = tolerant;
|
|
62
|
+
result = result.slice(0, start) + edit.new + result.slice(end);
|
|
63
|
+
appliedCount++;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
failedEdits.push(edit);
|
|
67
|
+
}
|
|
68
|
+
return { content: result, failedEdits, appliedCount };
|
|
69
|
+
};
|
|
70
|
+
const HTML_ENTITIES = {
|
|
71
|
+
'"': '"',
|
|
72
|
+
'"': '"',
|
|
73
|
+
''': "'",
|
|
74
|
+
''': "'",
|
|
75
|
+
'&': '&',
|
|
76
|
+
'<': '<',
|
|
77
|
+
'>': '>',
|
|
78
|
+
};
|
|
79
|
+
const unescapeHtmlEntities = (s) => s.replace(/"|"|'|'|&|<|>/g, m => { var _a; return (_a = HTML_ENTITIES[m]) !== null && _a !== void 0 ? _a : m; });
|
|
80
|
+
const isValidEditsArray = (value) => {
|
|
81
|
+
if (!Array.isArray(value))
|
|
82
|
+
return false;
|
|
83
|
+
return value.every(item => item &&
|
|
84
|
+
typeof item === 'object' &&
|
|
85
|
+
typeof item.old === 'string' &&
|
|
86
|
+
typeof item.new === 'string');
|
|
87
|
+
};
|
|
88
|
+
export const parseEdits = (body) => {
|
|
89
|
+
if (!body || typeof body !== 'string')
|
|
90
|
+
return null;
|
|
91
|
+
const trimmed = body.trim();
|
|
92
|
+
if (!trimmed)
|
|
93
|
+
return null;
|
|
94
|
+
const tryParse = (raw) => {
|
|
95
|
+
try {
|
|
96
|
+
const parsed = JSON.parse(raw);
|
|
97
|
+
return isValidEditsArray(parsed) ? parsed : null;
|
|
98
|
+
}
|
|
99
|
+
catch (_a) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const direct = tryParse(trimmed);
|
|
104
|
+
if (direct)
|
|
105
|
+
return direct;
|
|
106
|
+
const unescaped = unescapeHtmlEntities(trimmed);
|
|
107
|
+
if (unescaped !== trimmed) {
|
|
108
|
+
return tryParse(unescaped);
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
};
|
|
112
|
+
//# 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;
|
|
@@ -78,6 +78,21 @@ function readCorrelationID(response) {
|
|
|
78
78
|
const value = response.correlationID;
|
|
79
79
|
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
80
80
|
}
|
|
81
|
+
export function dialogStateFingerprint(state) {
|
|
82
|
+
if (!state)
|
|
83
|
+
return '';
|
|
84
|
+
return JSON.stringify({
|
|
85
|
+
state: state.state,
|
|
86
|
+
previousState: state.previousState,
|
|
87
|
+
emission: state.emission,
|
|
88
|
+
emitter: state.emitter,
|
|
89
|
+
lastMatchedMemoryID: state.lastMatchedMemoryID,
|
|
90
|
+
currentDate: state.currentDate,
|
|
91
|
+
currentMemoryID: state.currentMemoryID,
|
|
92
|
+
contextVars: state.contextVars,
|
|
93
|
+
emittedMedia: state.emittedMedia,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
81
96
|
const typeMessage = (message, waitForPrevious = true, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
|
|
82
97
|
const e = new CustomEvent('MemoriTextEntered', {
|
|
83
98
|
detail: {
|
|
@@ -492,6 +507,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
492
507
|
if (response.resultCode === 0 && correlationID) {
|
|
493
508
|
registerPendingEnterText(correlationID, {
|
|
494
509
|
msg,
|
|
510
|
+
stateBeforeRequest: dialogStateFingerprint(currentDialogState),
|
|
495
511
|
text,
|
|
496
512
|
media,
|
|
497
513
|
translate,
|
|
@@ -1380,6 +1396,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1380
1396
|
reject(new Error('NATS enter-text response timeout'));
|
|
1381
1397
|
}, timeoutMs);
|
|
1382
1398
|
registerPendingEnterText(correlationID, {
|
|
1399
|
+
stateBeforeRequest: dialogStateFingerprint(currentDialogState),
|
|
1383
1400
|
waitForResponse: {
|
|
1384
1401
|
resolve: event => {
|
|
1385
1402
|
clearTimeout(timeoutId);
|
|
@@ -1392,7 +1409,45 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1392
1409
|
timeoutId,
|
|
1393
1410
|
},
|
|
1394
1411
|
});
|
|
1395
|
-
}), [registerPendingEnterText, clearEnterTextPending]);
|
|
1412
|
+
}), [registerPendingEnterText, clearEnterTextPending, currentDialogState]);
|
|
1413
|
+
const catchUpPendingEnterText = useCallback(async () => {
|
|
1414
|
+
if (!sessionId || pendingEnterTextRef.current.size === 0)
|
|
1415
|
+
return;
|
|
1416
|
+
const latest = Array.from(pendingEnterTextRef.current.entries()).pop();
|
|
1417
|
+
if (!latest)
|
|
1418
|
+
return;
|
|
1419
|
+
const [correlationID, pending] = latest;
|
|
1420
|
+
try {
|
|
1421
|
+
const { currentState, resultCode, resultMessage, requestID } = await getSession(sessionId);
|
|
1422
|
+
if (resultCode !== 0 || !currentState) {
|
|
1423
|
+
deliverEnterTextNatsResponse(correlationID, {
|
|
1424
|
+
eventType: 'dialog_text_entered_response',
|
|
1425
|
+
correlationID,
|
|
1426
|
+
requestID,
|
|
1427
|
+
resultCode,
|
|
1428
|
+
resultMessage,
|
|
1429
|
+
currentState,
|
|
1430
|
+
});
|
|
1431
|
+
return;
|
|
1432
|
+
}
|
|
1433
|
+
if (dialogStateFingerprint(currentState) === pending.stateBeforeRequest) {
|
|
1434
|
+
console.info('[NATS] catch-up: pending turn has not completed yet');
|
|
1435
|
+
return;
|
|
1436
|
+
}
|
|
1437
|
+
console.info('[NATS] catch-up: applying current engine session state');
|
|
1438
|
+
deliverEnterTextNatsResponse(correlationID, {
|
|
1439
|
+
eventType: 'dialog_text_entered_response',
|
|
1440
|
+
correlationID,
|
|
1441
|
+
requestID,
|
|
1442
|
+
resultCode,
|
|
1443
|
+
resultMessage,
|
|
1444
|
+
currentState,
|
|
1445
|
+
});
|
|
1446
|
+
}
|
|
1447
|
+
catch (error) {
|
|
1448
|
+
logWidgetError('NATS catch-up failed', error);
|
|
1449
|
+
}
|
|
1450
|
+
}, [sessionId, deliverEnterTextNatsResponse]);
|
|
1396
1451
|
useNats({
|
|
1397
1452
|
baseUrl,
|
|
1398
1453
|
sessionId,
|
|
@@ -1412,6 +1467,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
|
|
|
1412
1467
|
deliverEnterTextNatsResponse(correlationID, event);
|
|
1413
1468
|
}, [deliverEnterTextNatsResponse]),
|
|
1414
1469
|
onError: deliverEnterTextNatsError,
|
|
1470
|
+
onCatchUp: catchUpPendingEnterText,
|
|
1415
1471
|
});
|
|
1416
1472
|
const focusChatInput = () => {
|
|
1417
1473
|
let textarea = document.querySelector('#chat-fieldset textarea');
|