@byline/ai 1.9.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.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -0
  3. package/dist/@types.d.ts +103 -0
  4. package/dist/@types.d.ts.map +1 -0
  5. package/dist/@types.js +68 -0
  6. package/dist/@types.js.map +1 -0
  7. package/dist/config/ai-config.d.ts +76 -0
  8. package/dist/config/ai-config.d.ts.map +1 -0
  9. package/dist/config/ai-config.js +108 -0
  10. package/dist/config/ai-config.js.map +1 -0
  11. package/dist/config/ai-config.test.node.d.ts +9 -0
  12. package/dist/config/ai-config.test.node.d.ts.map +1 -0
  13. package/dist/config/ai-config.test.node.js +31 -0
  14. package/dist/config/ai-config.test.node.js.map +1 -0
  15. package/dist/config/ai-provider.d.ts +17 -0
  16. package/dist/config/ai-provider.d.ts.map +1 -0
  17. package/dist/config/ai-provider.js +32 -0
  18. package/dist/config/ai-provider.js.map +1 -0
  19. package/dist/execute.d.ts +15 -0
  20. package/dist/execute.d.ts.map +1 -0
  21. package/dist/execute.js +473 -0
  22. package/dist/execute.js.map +1 -0
  23. package/dist/generate.d.ts +64 -0
  24. package/dist/generate.d.ts.map +1 -0
  25. package/dist/generate.js +235 -0
  26. package/dist/generate.js.map +1 -0
  27. package/dist/index.d.ts +28 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +43 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lexical-text-edits.d.ts +23 -0
  32. package/dist/lexical-text-edits.d.ts.map +1 -0
  33. package/dist/lexical-text-edits.js +62 -0
  34. package/dist/lexical-text-edits.js.map +1 -0
  35. package/dist/lib/logger.d.ts +10 -0
  36. package/dist/lib/logger.d.ts.map +1 -0
  37. package/dist/lib/logger.js +16 -0
  38. package/dist/lib/logger.js.map +1 -0
  39. package/dist/models/anthropic/anthropic-models.d.ts +14 -0
  40. package/dist/models/anthropic/anthropic-models.d.ts.map +1 -0
  41. package/dist/models/anthropic/anthropic-models.js +41 -0
  42. package/dist/models/anthropic/anthropic-models.js.map +1 -0
  43. package/dist/models/anthropic/anthropic.d.ts +9 -0
  44. package/dist/models/anthropic/anthropic.d.ts.map +1 -0
  45. package/dist/models/anthropic/anthropic.js +20 -0
  46. package/dist/models/anthropic/anthropic.js.map +1 -0
  47. package/dist/models/anthropic/generate-native.d.ts +59 -0
  48. package/dist/models/anthropic/generate-native.d.ts.map +1 -0
  49. package/dist/models/anthropic/generate-native.js +271 -0
  50. package/dist/models/anthropic/generate-native.js.map +1 -0
  51. package/dist/models/anthropic/generate-vercel.d.ts +59 -0
  52. package/dist/models/anthropic/generate-vercel.d.ts.map +1 -0
  53. package/dist/models/anthropic/generate-vercel.js +126 -0
  54. package/dist/models/anthropic/generate-vercel.js.map +1 -0
  55. package/dist/models/anthropic/generate.d.ts +16 -0
  56. package/dist/models/anthropic/generate.d.ts.map +1 -0
  57. package/dist/models/anthropic/generate.js +28 -0
  58. package/dist/models/anthropic/generate.js.map +1 -0
  59. package/dist/models/anthropic/generate.test.node.d.ts +9 -0
  60. package/dist/models/anthropic/generate.test.node.d.ts.map +1 -0
  61. package/dist/models/anthropic/generate.test.node.js +106 -0
  62. package/dist/models/anthropic/generate.test.node.js.map +1 -0
  63. package/dist/models/anthropic/patch-native.d.ts +33 -0
  64. package/dist/models/anthropic/patch-native.d.ts.map +1 -0
  65. package/dist/models/anthropic/patch-native.js +152 -0
  66. package/dist/models/anthropic/patch-native.js.map +1 -0
  67. package/dist/models/anthropic/patch-vercel.d.ts +33 -0
  68. package/dist/models/anthropic/patch-vercel.d.ts.map +1 -0
  69. package/dist/models/anthropic/patch-vercel.js +47 -0
  70. package/dist/models/anthropic/patch-vercel.js.map +1 -0
  71. package/dist/models/anthropic/patch.d.ts +12 -0
  72. package/dist/models/anthropic/patch.d.ts.map +1 -0
  73. package/dist/models/anthropic/patch.js +16 -0
  74. package/dist/models/anthropic/patch.js.map +1 -0
  75. package/dist/models/anthropic/patch.test.node.d.ts +9 -0
  76. package/dist/models/anthropic/patch.test.node.d.ts.map +1 -0
  77. package/dist/models/anthropic/patch.test.node.js +110 -0
  78. package/dist/models/anthropic/patch.test.node.js.map +1 -0
  79. package/dist/models/anthropic/schema.d.ts +212 -0
  80. package/dist/models/anthropic/schema.d.ts.map +1 -0
  81. package/dist/models/anthropic/schema.js +131 -0
  82. package/dist/models/anthropic/schema.js.map +1 -0
  83. package/dist/models/google/generate-native.d.ts +59 -0
  84. package/dist/models/google/generate-native.d.ts.map +1 -0
  85. package/dist/models/google/generate-native.js +244 -0
  86. package/dist/models/google/generate-native.js.map +1 -0
  87. package/dist/models/google/generate-vercel.d.ts +59 -0
  88. package/dist/models/google/generate-vercel.d.ts.map +1 -0
  89. package/dist/models/google/generate-vercel.js +133 -0
  90. package/dist/models/google/generate-vercel.js.map +1 -0
  91. package/dist/models/google/generate.d.ts +16 -0
  92. package/dist/models/google/generate.d.ts.map +1 -0
  93. package/dist/models/google/generate.js +28 -0
  94. package/dist/models/google/generate.js.map +1 -0
  95. package/dist/models/google/generate.test.node.d.ts +9 -0
  96. package/dist/models/google/generate.test.node.d.ts.map +1 -0
  97. package/dist/models/google/generate.test.node.js +106 -0
  98. package/dist/models/google/generate.test.node.js.map +1 -0
  99. package/dist/models/google/google-models.d.ts +14 -0
  100. package/dist/models/google/google-models.d.ts.map +1 -0
  101. package/dist/models/google/google-models.js +25 -0
  102. package/dist/models/google/google-models.js.map +1 -0
  103. package/dist/models/google/normalize-generated-doc.d.ts +10 -0
  104. package/dist/models/google/normalize-generated-doc.d.ts.map +1 -0
  105. package/dist/models/google/normalize-generated-doc.js +48 -0
  106. package/dist/models/google/normalize-generated-doc.js.map +1 -0
  107. package/dist/models/google/patch-native.d.ts +33 -0
  108. package/dist/models/google/patch-native.d.ts.map +1 -0
  109. package/dist/models/google/patch-native.js +164 -0
  110. package/dist/models/google/patch-native.js.map +1 -0
  111. package/dist/models/google/patch-vercel.d.ts +33 -0
  112. package/dist/models/google/patch-vercel.d.ts.map +1 -0
  113. package/dist/models/google/patch-vercel.js +49 -0
  114. package/dist/models/google/patch-vercel.js.map +1 -0
  115. package/dist/models/google/patch.d.ts +12 -0
  116. package/dist/models/google/patch.d.ts.map +1 -0
  117. package/dist/models/google/patch.js +16 -0
  118. package/dist/models/google/patch.js.map +1 -0
  119. package/dist/models/google/patch.test.node.d.ts +9 -0
  120. package/dist/models/google/patch.test.node.d.ts.map +1 -0
  121. package/dist/models/google/patch.test.node.js +110 -0
  122. package/dist/models/google/patch.test.node.js.map +1 -0
  123. package/dist/models/google/schema.d.ts +416 -0
  124. package/dist/models/google/schema.d.ts.map +1 -0
  125. package/dist/models/google/schema.js +254 -0
  126. package/dist/models/google/schema.js.map +1 -0
  127. package/dist/models/openai/generate-native.d.ts +65 -0
  128. package/dist/models/openai/generate-native.d.ts.map +1 -0
  129. package/dist/models/openai/generate-native.js +276 -0
  130. package/dist/models/openai/generate-native.js.map +1 -0
  131. package/dist/models/openai/generate-vercel.d.ts +59 -0
  132. package/dist/models/openai/generate-vercel.d.ts.map +1 -0
  133. package/dist/models/openai/generate-vercel.js +132 -0
  134. package/dist/models/openai/generate-vercel.js.map +1 -0
  135. package/dist/models/openai/generate.d.ts +16 -0
  136. package/dist/models/openai/generate.d.ts.map +1 -0
  137. package/dist/models/openai/generate.js +28 -0
  138. package/dist/models/openai/generate.js.map +1 -0
  139. package/dist/models/openai/generate.test.node.d.ts +9 -0
  140. package/dist/models/openai/generate.test.node.d.ts.map +1 -0
  141. package/dist/models/openai/generate.test.node.js +106 -0
  142. package/dist/models/openai/generate.test.node.js.map +1 -0
  143. package/dist/models/openai/openai-models.d.ts +14 -0
  144. package/dist/models/openai/openai-models.d.ts.map +1 -0
  145. package/dist/models/openai/openai-models.js +23 -0
  146. package/dist/models/openai/openai-models.js.map +1 -0
  147. package/dist/models/openai/patch-native.d.ts +33 -0
  148. package/dist/models/openai/patch-native.d.ts.map +1 -0
  149. package/dist/models/openai/patch-native.js +151 -0
  150. package/dist/models/openai/patch-native.js.map +1 -0
  151. package/dist/models/openai/patch-vercel.d.ts +33 -0
  152. package/dist/models/openai/patch-vercel.d.ts.map +1 -0
  153. package/dist/models/openai/patch-vercel.js +49 -0
  154. package/dist/models/openai/patch-vercel.js.map +1 -0
  155. package/dist/models/openai/patch.d.ts +12 -0
  156. package/dist/models/openai/patch.d.ts.map +1 -0
  157. package/dist/models/openai/patch.js +16 -0
  158. package/dist/models/openai/patch.js.map +1 -0
  159. package/dist/models/openai/patch.test.node.d.ts +9 -0
  160. package/dist/models/openai/patch.test.node.d.ts.map +1 -0
  161. package/dist/models/openai/patch.test.node.js +110 -0
  162. package/dist/models/openai/patch.test.node.js.map +1 -0
  163. package/dist/models/openai/schema.d.ts +460 -0
  164. package/dist/models/openai/schema.d.ts.map +1 -0
  165. package/dist/models/openai/schema.js +327 -0
  166. package/dist/models/openai/schema.js.map +1 -0
  167. package/dist/patch.d.ts +45 -0
  168. package/dist/patch.d.ts.map +1 -0
  169. package/dist/patch.js +138 -0
  170. package/dist/patch.js.map +1 -0
  171. package/dist/plugins/ai-plugin-base.d.ts +40 -0
  172. package/dist/plugins/ai-plugin-base.d.ts.map +1 -0
  173. package/dist/plugins/ai-plugin-base.js +218 -0
  174. package/dist/plugins/ai-plugin-base.js.map +1 -0
  175. package/dist/plugins/ai-plugin.css +181 -0
  176. package/dist/plugins/lexical/create-empty-editor-state.d.ts +32 -0
  177. package/dist/plugins/lexical/create-empty-editor-state.d.ts.map +1 -0
  178. package/dist/plugins/lexical/create-empty-editor-state.js +51 -0
  179. package/dist/plugins/lexical/create-empty-editor-state.js.map +1 -0
  180. package/dist/plugins/lexical/import-html.d.ts +10 -0
  181. package/dist/plugins/lexical/import-html.d.ts.map +1 -0
  182. package/dist/plugins/lexical/import-html.js +31 -0
  183. package/dist/plugins/lexical/import-html.js.map +1 -0
  184. package/dist/plugins/lexical/index.d.ts +9 -0
  185. package/dist/plugins/lexical/index.d.ts.map +1 -0
  186. package/dist/plugins/lexical/index.js +9 -0
  187. package/dist/plugins/lexical/index.js.map +1 -0
  188. package/dist/plugins/lexical/plugin.d.ts +11 -0
  189. package/dist/plugins/lexical/plugin.d.ts.map +1 -0
  190. package/dist/plugins/lexical/plugin.js +305 -0
  191. package/dist/plugins/lexical/plugin.js.map +1 -0
  192. package/dist/plugins/storage.d.ts +18 -0
  193. package/dist/plugins/storage.d.ts.map +1 -0
  194. package/dist/plugins/storage.js +57 -0
  195. package/dist/plugins/storage.js.map +1 -0
  196. package/dist/plugins/streaming-preview.d.ts +12 -0
  197. package/dist/plugins/streaming-preview.d.ts.map +1 -0
  198. package/dist/plugins/streaming-preview.js +24 -0
  199. package/dist/plugins/streaming-preview.js.map +1 -0
  200. package/dist/plugins/text/index.d.ts +9 -0
  201. package/dist/plugins/text/index.d.ts.map +1 -0
  202. package/dist/plugins/text/index.js +9 -0
  203. package/dist/plugins/text/index.js.map +1 -0
  204. package/dist/plugins/text/plugin.d.ts +18 -0
  205. package/dist/plugins/text/plugin.d.ts.map +1 -0
  206. package/dist/plugins/text/plugin.js +261 -0
  207. package/dist/plugins/text/plugin.js.map +1 -0
  208. package/dist/prompts.d.ts +30 -0
  209. package/dist/prompts.d.ts.map +1 -0
  210. package/dist/prompts.js +83 -0
  211. package/dist/prompts.js.map +1 -0
  212. package/dist/schemas/lexical-json-schema.d.ts +68 -0
  213. package/dist/schemas/lexical-json-schema.d.ts.map +1 -0
  214. package/dist/schemas/lexical-json-schema.js +434 -0
  215. package/dist/schemas/lexical-json-schema.js.map +1 -0
  216. package/dist/scripts/list-models.d.ts +9 -0
  217. package/dist/scripts/list-models.d.ts.map +1 -0
  218. package/dist/scripts/list-models.js +55 -0
  219. package/dist/scripts/list-models.js.map +1 -0
  220. package/dist/server.d.ts +25 -0
  221. package/dist/server.d.ts.map +1 -0
  222. package/dist/server.js +22 -0
  223. package/dist/server.js.map +1 -0
  224. package/dist/utils/convert-to-lexical.d.ts +62 -0
  225. package/dist/utils/convert-to-lexical.d.ts.map +1 -0
  226. package/dist/utils/convert-to-lexical.js +210 -0
  227. package/dist/utils/convert-to-lexical.js.map +1 -0
  228. package/dist/utils/create-empty-editor-state.d.ts +32 -0
  229. package/dist/utils/create-empty-editor-state.d.ts.map +1 -0
  230. package/dist/utils/create-empty-editor-state.js +51 -0
  231. package/dist/utils/create-empty-editor-state.js.map +1 -0
  232. package/dist/utils/has-text.d.ts +10 -0
  233. package/dist/utils/has-text.d.ts.map +1 -0
  234. package/dist/utils/has-text.js +35 -0
  235. package/dist/utils/has-text.js.map +1 -0
  236. package/dist/utils/has-text.test.d.ts +9 -0
  237. package/dist/utils/has-text.test.d.ts.map +1 -0
  238. package/dist/utils/has-text.test.js +69 -0
  239. package/dist/utils/has-text.test.js.map +1 -0
  240. package/dist/utils/is-object-schema.d.ts +17 -0
  241. package/dist/utils/is-object-schema.d.ts.map +1 -0
  242. package/dist/utils/is-object-schema.js +19 -0
  243. package/dist/utils/is-object-schema.js.map +1 -0
  244. package/dist/utils/lexical-text-edits.d.ts +23 -0
  245. package/dist/utils/lexical-text-edits.d.ts.map +1 -0
  246. package/dist/utils/lexical-text-edits.js +62 -0
  247. package/dist/utils/lexical-text-edits.js.map +1 -0
  248. package/package.json +111 -0
@@ -0,0 +1,305 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ /**
4
+ * This Source Code is subject to the terms of the Mozilla Public
5
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
6
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
+ *
8
+ * Copyright (c) Infonomic Company Limited
9
+ */
10
+ import * as React from 'react';
11
+ import { useCallback, useEffect, useRef, useState } from 'react';
12
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
13
+ import { mergeRegister } from '@lexical/utils';
14
+ import {
15
+ // CLEAR_EDITOR_COMMAND,
16
+ COMMAND_PRIORITY_CRITICAL, COMMAND_PRIORITY_NORMAL, createCommand, SELECTION_CHANGE_COMMAND, } from 'lexical';
17
+ import { useAiPublicConfig } from '../../config/ai-provider';
18
+ import { AiPluginBase } from '../ai-plugin-base';
19
+ import { createEmptyEditorState } from './create-empty-editor-state';
20
+ import { importHtmlToSerializedEditorState } from './import-html';
21
+ export const TOGGLE_AI_DRAWER_COMMAND = createCommand('TOGGLE_AI_DRAWER_COMMAND');
22
+ const emptyInstructionState = {
23
+ prompt: '',
24
+ editor: null,
25
+ errors: {},
26
+ status: 'idle',
27
+ lastRun: null,
28
+ };
29
+ export const AiPluginLexical = React.memo(function AiPlugin() {
30
+ const submitEditorRef = useRef(null);
31
+ const aiConfig = useAiPublicConfig();
32
+ const [editor] = useLexicalComposerContext();
33
+ const [activeEditor, setActiveEditor] = useState(editor);
34
+ const [open, setOpen] = useState(false);
35
+ const applyInstructionStateToEditor = useCallback((nextState, setInstructionState) => {
36
+ if (nextState?.status !== 'success')
37
+ return;
38
+ const targetEditor = submitEditorRef.current ?? editor;
39
+ if (nextState.format === 'html' && nextState.html) {
40
+ try {
41
+ importHtmlToSerializedEditorState(nextState.html, targetEditor);
42
+ }
43
+ catch {
44
+ setInstructionState((prev) => ({
45
+ ...prev,
46
+ status: 'failed',
47
+ message: 'There was a problem parsing fallback HTML.',
48
+ errors: {},
49
+ }));
50
+ }
51
+ return;
52
+ }
53
+ if (nextState.editor) {
54
+ const nextEditorState = targetEditor.parseEditorState(nextState.editor);
55
+ targetEditor.update(() => {
56
+ targetEditor.setEditorState(nextEditorState);
57
+ }, { discrete: true });
58
+ }
59
+ }, [editor]);
60
+ const handleOnSubmit = useCallback(async (context) => {
61
+ const { prompt, mode, provider, model, sdk, isPending, setIsPending, setInstructionState, abortControllerRef, } = context;
62
+ if (!prompt.trim())
63
+ return;
64
+ if (isPending)
65
+ return;
66
+ // Cancel any previous in-flight request before starting a new one.
67
+ abortControllerRef.current?.abort();
68
+ const abortController = new AbortController();
69
+ abortControllerRef.current = abortController;
70
+ activeEditor.focus();
71
+ submitEditorRef.current = activeEditor;
72
+ setIsPending(true);
73
+ setInstructionState((prev) => ({ ...prev, status: 'idle', errors: {}, message: undefined }));
74
+ const editorJson = JSON.stringify(activeEditor.getEditorState().toJSON());
75
+ try {
76
+ const payload = {
77
+ params: {
78
+ prompt: prompt,
79
+ mode,
80
+ input: {
81
+ type: 'structured',
82
+ editorJson,
83
+ },
84
+ sdk,
85
+ provider,
86
+ model,
87
+ output: {
88
+ type: 'structured',
89
+ },
90
+ },
91
+ options: {
92
+ streaming: false,
93
+ },
94
+ };
95
+ const fetchImpl = aiConfig.fetch ?? fetch;
96
+ const response = await fetchImpl(aiConfig.endpoint, {
97
+ method: 'POST',
98
+ headers: {
99
+ 'content-type': 'application/json',
100
+ ...(aiConfig.headers ?? {}),
101
+ },
102
+ signal: abortController.signal,
103
+ body: JSON.stringify(payload),
104
+ });
105
+ if (response.ok === false) {
106
+ console.error('AI Plugin request failed with status', response.status);
107
+ setInstructionState({
108
+ ...emptyInstructionState,
109
+ status: 'failed',
110
+ message: 'There was a problem submitting your instructions.',
111
+ errors: {},
112
+ });
113
+ }
114
+ const data = (await response.json());
115
+ // console.log('AI Plugin response data', data)
116
+ setInstructionState(data);
117
+ applyInstructionStateToEditor(data, setInstructionState);
118
+ }
119
+ catch (error) {
120
+ const err = error;
121
+ if (err?.name === 'AbortError') {
122
+ setInstructionState((prev) => ({
123
+ ...prev,
124
+ status: 'idle',
125
+ message: 'Cancelled.',
126
+ errors: {},
127
+ }));
128
+ }
129
+ else {
130
+ setInstructionState({
131
+ ...emptyInstructionState,
132
+ status: 'failed',
133
+ message: 'There was a problem submitting your instructions.',
134
+ errors: {},
135
+ });
136
+ }
137
+ }
138
+ finally {
139
+ setIsPending(false);
140
+ abortControllerRef.current = null;
141
+ }
142
+ }, [aiConfig, activeEditor, applyInstructionStateToEditor]);
143
+ const handleOnSubmitStreaming = useCallback(async (context) => {
144
+ const { prompt, mode, provider, model, sdk, isPending, setIsPending, setInstructionState, abortControllerRef, appendStreamPreview, resetStreamPreview, } = context;
145
+ if (!prompt.trim())
146
+ return;
147
+ if (isPending)
148
+ return;
149
+ // Cancel any previous in-flight request before starting a new one.
150
+ abortControllerRef.current?.abort();
151
+ const abortController = new AbortController();
152
+ abortControllerRef.current = abortController;
153
+ activeEditor.focus();
154
+ submitEditorRef.current = activeEditor;
155
+ setIsPending(true);
156
+ resetStreamPreview();
157
+ setInstructionState((prev) => ({ ...prev, status: 'idle', errors: {}, message: undefined }));
158
+ const editorJson = JSON.stringify(activeEditor.getEditorState().toJSON());
159
+ try {
160
+ const payload = {
161
+ params: {
162
+ prompt: prompt,
163
+ mode,
164
+ input: {
165
+ type: 'structured',
166
+ editorJson,
167
+ },
168
+ sdk,
169
+ provider,
170
+ model,
171
+ output: {
172
+ type: 'structured',
173
+ },
174
+ },
175
+ options: {
176
+ streaming: true,
177
+ },
178
+ };
179
+ const fetchImpl = aiConfig.fetch ?? fetch;
180
+ const response = await fetchImpl(aiConfig.endpoint, {
181
+ method: 'POST',
182
+ headers: {
183
+ 'content-type': 'application/json',
184
+ ...(aiConfig.headers ?? {}),
185
+ },
186
+ signal: abortController.signal,
187
+ body: JSON.stringify(payload),
188
+ });
189
+ if (response.ok === false) {
190
+ console.error('AI Plugin streaming request failed with status', response.status);
191
+ setInstructionState({
192
+ ...emptyInstructionState,
193
+ status: 'failed',
194
+ message: 'There was a problem submitting your instructions.',
195
+ errors: {},
196
+ });
197
+ }
198
+ if (response.body == null) {
199
+ console.log('Streaming request has no body - falling back to non-streaming handling.');
200
+ const data = (await response.json());
201
+ setInstructionState(data);
202
+ applyInstructionStateToEditor(data, setInstructionState);
203
+ return;
204
+ }
205
+ const reader = response.body.getReader();
206
+ const decoder = new TextDecoder();
207
+ let buffer = '';
208
+ let finalState = null;
209
+ while (true) {
210
+ const { value, done } = await reader.read();
211
+ // console.log('Streaming response read', { value, done })
212
+ if (done)
213
+ break;
214
+ buffer += decoder.decode(value, { stream: true });
215
+ const lines = buffer.split('\n');
216
+ buffer = lines.pop() ?? '';
217
+ // console.log('Streaming response decoded lines', { lines })
218
+ for (const line of lines) {
219
+ const trimmed = line.trim();
220
+ if (!trimmed)
221
+ continue;
222
+ try {
223
+ const payload = JSON.parse(trimmed);
224
+ // console.log('Streaming response payload per line', payload)
225
+ if (payload.type === 'delta' && typeof payload.text === 'string') {
226
+ appendStreamPreview(payload.text);
227
+ }
228
+ if (payload.type === 'final' && payload.state) {
229
+ finalState = payload.state;
230
+ }
231
+ }
232
+ catch {
233
+ // ignore malformed chunks
234
+ }
235
+ }
236
+ }
237
+ if (finalState) {
238
+ setInstructionState(finalState);
239
+ applyInstructionStateToEditor(finalState, setInstructionState);
240
+ }
241
+ else {
242
+ setInstructionState({
243
+ ...emptyInstructionState,
244
+ status: 'failed',
245
+ message: 'There was a problem submitting your instructions.',
246
+ errors: {},
247
+ });
248
+ }
249
+ }
250
+ catch (error) {
251
+ const err = error;
252
+ if (err?.name === 'AbortError') {
253
+ setInstructionState((prev) => ({
254
+ ...prev,
255
+ status: 'idle',
256
+ message: 'Cancelled.',
257
+ errors: {},
258
+ }));
259
+ }
260
+ else {
261
+ setInstructionState({
262
+ ...emptyInstructionState,
263
+ status: 'failed',
264
+ message: 'There was a problem submitting your instructions.',
265
+ errors: {},
266
+ });
267
+ }
268
+ }
269
+ finally {
270
+ setIsPending(false);
271
+ resetStreamPreview();
272
+ abortControllerRef.current = null;
273
+ }
274
+ }, [aiConfig, activeEditor, applyInstructionStateToEditor]);
275
+ function handleOnDebug() {
276
+ // eslint-disable-next-line no-console
277
+ console.log(JSON.stringify(activeEditor.getEditorState()));
278
+ }
279
+ // function handleOnFullReset(): void {
280
+ // activeEditor.dispatchCommand(CLEAR_EDITOR_COMMAND, undefined)
281
+ // activeEditor.focus()
282
+ // }
283
+ const handleOnClear = () => {
284
+ const emptyState = activeEditor.parseEditorState(createEmptyEditorState());
285
+ activeEditor.update(() => {
286
+ activeEditor.setEditorState(emptyState);
287
+ }, { discrete: true });
288
+ activeEditor.focus();
289
+ };
290
+ useEffect(() => {
291
+ return editor.registerCommand(SELECTION_CHANGE_COMMAND, (_payload, newEditor) => {
292
+ setActiveEditor(newEditor);
293
+ return false;
294
+ }, COMMAND_PRIORITY_CRITICAL);
295
+ }, [editor]);
296
+ useEffect(() => {
297
+ return mergeRegister(editor.registerCommand(TOGGLE_AI_DRAWER_COMMAND, () => {
298
+ setOpen((prevOpen) => !prevOpen);
299
+ return true;
300
+ }, COMMAND_PRIORITY_NORMAL));
301
+ }, [editor]);
302
+ const helpContent = (_jsxs(_Fragment, { children: [_jsx("p", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: "This is an experimental feature that allows you to generate and edit content using AI." }), _jsx("p", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: "It can currently be used to generate new content as well as translate, summarize, rephrase, check spelling, grammar and clarity in existing text." }), _jsx("p", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: "Here are a few example prompts:" }), _jsxs("ul", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: [_jsx("li", { children: "Check for spelling, grammar and clarity." }), _jsx("li", { children: "Translate into Thai (English, French, Spanish, Vietnamese, Laos, Khmer etc.)." }), _jsx("li", { children: "Rephrase to make this more engaging." }), _jsx("li", { children: "Write a haiku poem about the wind and trees." })] }), _jsxs("p", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: [_jsx("strong", { style: { color: 'var(--primary-500)' }, children: "Important:" }), " The AI operates in three modes:"] }), _jsxs("ol", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: [_jsxs("li", { children: [_jsx("strong", { children: "New:" }), " The AI will generate new content based solely on the prompt."] }), _jsxs("li", { children: [_jsx("strong", { children: "With Context:" }), " The AI will generate new content based on the prompt and the existing content."] }), _jsxs("li", { children: [_jsx("strong", { children: "Modify:" }), " The AI will suggest modifications to the existing content based on the prompt - preserving the original structure. Use this mode for translations, grammar, clarity, and tone edits."] })] }), _jsxs("p", { style: { margin: '0.5rem 0', fontSize: '16px' }, children: [_jsx("strong", { style: { color: 'var(--primary-500)' }, children: "Note:" }), " At the time of writing - 2026-01-24 - OpenAI GPT-5.2 is likely the strongest all-round model for both generating new content, as well as for modifying / translating existing content. Anthropic's Sonnet model is also very capable, especially for editing existing text. Google's Gemini models are improving rapidly, but still seem to lag slightly behind in our tests."] }), _jsx("p", { className: "ai-plugin__disclaimer--modal", children: "Warning: AI-generated content may be inaccurate, incomplete, or misleading. Please use caution and verify information from reliable sources." })] }));
303
+ return (_jsx(AiPluginBase, { helpTitle: "AI Help", helpContent: helpContent, onSubmit: handleOnSubmit, onSubmitStreaming: handleOnSubmitStreaming, onClear: handleOnClear, onDebug: handleOnDebug, open: open, onOpenChange: setOpen }));
304
+ });
305
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/plugins/lexical/plugin.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { type Provider, type Sdk } from '@byline/ai';
9
+ export interface ChatConfiguration {
10
+ mode: 'new' | 'new_with_context' | 'patch';
11
+ provider: Provider;
12
+ model: string;
13
+ sdk: Sdk;
14
+ }
15
+ export declare const saveChatConfiguration: (config: ChatConfiguration) => void;
16
+ export declare const loadChatConfiguration: () => ChatConfiguration | null;
17
+ export declare const clearChatConfiguration: () => void;
18
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/plugins/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAQ,KAAK,GAAG,EAAE,MAAM,YAAY,CAAA;AAIrE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,GAAG,kBAAkB,GAAG,OAAO,CAAA;IAC1C,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,GAAG,CAAA;CACT;AAgBD,eAAO,MAAM,qBAAqB,GAAI,QAAQ,iBAAiB,SAO9D,CAAA;AAED,eAAO,MAAM,qBAAqB,QAAO,iBAAiB,GAAG,IAW5D,CAAA;AAED,eAAO,MAAM,sBAAsB,YAOlC,CAAA"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { PROVIDERS, SDKS } from '@byline/ai';
9
+ const STORAGE_KEY = 'editor-chat-configuration';
10
+ const isChatConfiguration = (value) => {
11
+ if (value == null || typeof value !== 'object')
12
+ return false;
13
+ const v = value;
14
+ return (typeof v.mode === 'string' &&
15
+ ['new', 'new_with_context', 'patch'].includes(v.mode) &&
16
+ typeof v.provider === 'string' &&
17
+ PROVIDERS.some((p) => p[0] === v.provider) &&
18
+ typeof v.model === 'string' &&
19
+ typeof v.sdk === 'string' &&
20
+ SDKS.includes(v.sdk));
21
+ };
22
+ export const saveChatConfiguration = (config) => {
23
+ if (typeof window === 'undefined')
24
+ return;
25
+ try {
26
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(config));
27
+ }
28
+ catch (error) {
29
+ console.warn('Failed to save chat configuration:', error);
30
+ }
31
+ };
32
+ export const loadChatConfiguration = () => {
33
+ if (typeof window === 'undefined')
34
+ return null;
35
+ try {
36
+ const raw = localStorage.getItem(STORAGE_KEY);
37
+ if (!raw)
38
+ return null;
39
+ const parsed = JSON.parse(raw);
40
+ return isChatConfiguration(parsed) ? parsed : null;
41
+ }
42
+ catch (error) {
43
+ console.warn('Failed to load chat configuration:', error);
44
+ return null;
45
+ }
46
+ };
47
+ export const clearChatConfiguration = () => {
48
+ if (typeof window === 'undefined')
49
+ return;
50
+ try {
51
+ localStorage.removeItem(STORAGE_KEY);
52
+ }
53
+ catch (error) {
54
+ console.warn('Failed to clear chat configuration:', error);
55
+ }
56
+ };
57
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/plugins/storage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAiB,IAAI,EAAY,MAAM,YAAY,CAAA;AAErE,MAAM,WAAW,GAAG,2BAA2B,CAAA;AAS/C,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAA8B,EAAE;IACzE,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC5D,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAC1C,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;QAC3B,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAU,CAAC,CAC5B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAyB,EAAE,EAAE;IACjE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IACzC,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAA6B,EAAE;IAClE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QACrB,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;QACzD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IACzC,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export type RollingPreviewOptions = {
9
+ maxChars: number;
10
+ };
11
+ export declare function appendRollingPreviewText(previous: string, chunk: string, options: RollingPreviewOptions): string;
12
+ //# sourceMappingURL=streaming-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-preview.d.ts","sourceRoot":"","sources":["../../src/plugins/streaming-preview.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,qBAAqB,GAC7B,MAAM,CAUR"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export function appendRollingPreviewText(previous, chunk, options) {
9
+ const maxChars = Number.isFinite(options.maxChars) ? Math.max(0, Math.floor(options.maxChars)) : 0;
10
+ if (maxChars === 0)
11
+ return '';
12
+ const safeChunk = normalizePreviewChunk(chunk);
13
+ if (!safeChunk)
14
+ return previous;
15
+ const next = previous + safeChunk;
16
+ if (next.length <= maxChars)
17
+ return next;
18
+ return next.slice(next.length - maxChars);
19
+ }
20
+ function normalizePreviewChunk(chunk) {
21
+ // Keep content “raw” (it’s often JSON fragments), but avoid control chars that can break display.
22
+ return chunk.replaceAll('\u0000', '');
23
+ }
24
+ //# sourceMappingURL=streaming-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-preview.js","sourceRoot":"","sources":["../../src/plugins/streaming-preview.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,KAAa,EACb,OAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClG,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE7B,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,QAAQ,CAAA;IAE/B,MAAM,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAA;IACjC,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,kGAAkG;IAClG,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export { AiPluginText } from './plugin';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export { AiPluginText } from './plugin';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import * as React from 'react';
9
+ export type AiPluginTextProps = {
10
+ inputText: string;
11
+ onApplyResult?: (nextText: string) => void;
12
+ onClearInput?: () => void;
13
+ open?: boolean;
14
+ defaultOpen?: boolean;
15
+ onOpenChange?: (open: boolean) => void;
16
+ };
17
+ export declare const AiPluginText: React.MemoExoticComponent<(props: AiPluginTextProps) => React.JSX.Element | undefined>;
18
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/text/plugin.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgB9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,YAAY,oCAChB,iBAAiB,KACvB,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CA0V9B,CAAA"}