vzcode 2.0.0 → 2.3.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 (218) hide show
  1. package/dist/assets/{buildWorker-Dsx6rOdK.js → buildWorker-wLkQ0yz1.js} +64 -64
  2. package/dist/assets/{index-BM8tDh6M.css → index-BoFeK4GL.css} +1 -1
  3. package/dist/assets/{index-BgqNq-ww.js → index-DuUjtrt6.js} +107 -107
  4. package/dist/assets/{worker-BeBZGG1n.js → worker-DHxSPM7N.js} +78 -78
  5. package/dist/cli.js +113 -0
  6. package/dist/index.html +2 -2
  7. package/{src/ot.ts → dist/ot.js} +2 -14
  8. package/{src/randomId.ts → dist/randomId.js} +5 -6
  9. package/dist/runCode.js +20 -0
  10. package/dist/server/aiChatHandler/aiEditing.js +89 -0
  11. package/dist/server/aiChatHandler/chatOperations.js +360 -0
  12. package/dist/server/aiChatHandler/errorHandling.js +49 -0
  13. package/dist/server/aiChatHandler/index.js +112 -0
  14. package/dist/server/aiChatHandler/llmStreaming.js +284 -0
  15. package/dist/server/aiChatHandler/validation.js +19 -0
  16. package/dist/server/computeInitialDocument.js +146 -0
  17. package/{src/server/config.ts → dist/server/config.js} +4 -7
  18. package/{src/server/featureFlags.ts → dist/server/featureFlags.js} +0 -3
  19. package/dist/server/generateAIResponse.js +129 -0
  20. package/dist/server/handleAIAssist.js +39 -0
  21. package/dist/server/handleAICopilot.js +81 -0
  22. package/dist/server/index.js +297 -0
  23. package/dist/server/livekit.js +17 -0
  24. package/dist/server/prettier.js +90 -0
  25. package/{src/server/setupEnv.ts → dist/server/setupEnv.js} +1 -2
  26. package/dist/submitOperation.js +14 -0
  27. package/dist/types.js +1 -0
  28. package/dist/utils/fileDiff.js +66 -0
  29. package/package.json +23 -22
  30. package/src/client/AIAssist/AIAssistCodeMirrorKeyMap.ts +0 -42
  31. package/src/client/AIAssist/AIAssistWidget/index.tsx +0 -135
  32. package/src/client/AIAssist/AIAssistWidget/style.scss +0 -47
  33. package/src/client/AIAssist/Spinner.jsx +0 -76
  34. package/src/client/AIAssist/formatFile.ts +0 -27
  35. package/src/client/AIAssist/generateFilesContext.ts +0 -25
  36. package/src/client/AIAssist/index.ts +0 -2
  37. package/src/client/AIAssist/startAIAssist.ts +0 -95
  38. package/src/client/App/index.tsx +0 -153
  39. package/src/client/App/style.scss +0 -82
  40. package/src/client/App/usePending.ts +0 -51
  41. package/src/client/App/useShareDB.ts +0 -161
  42. package/src/client/CodeEditor/Copilot/index.ts +0 -74
  43. package/src/client/CodeEditor/InteractiveWidgets/boolToggler.ts +0 -12
  44. package/src/client/CodeEditor/InteractiveWidgets/colorPicker.ts +0 -68
  45. package/src/client/CodeEditor/InteractiveWidgets/colorsInTextPlugin.ts +0 -174
  46. package/src/client/CodeEditor/InteractiveWidgets/highlightWidgets.ts +0 -79
  47. package/src/client/CodeEditor/InteractiveWidgets/index.ts +0 -44
  48. package/src/client/CodeEditor/InteractiveWidgets/markdownCheckboxToggler.ts +0 -12
  49. package/src/client/CodeEditor/InteractiveWidgets/numberDragger.ts +0 -20
  50. package/src/client/CodeEditor/InteractiveWidgets/rotateWidget.ts +0 -143
  51. package/src/client/CodeEditor/InteractiveWidgets/urlClicker.test.ts +0 -48
  52. package/src/client/CodeEditor/InteractiveWidgets/urlClicker.ts +0 -12
  53. package/src/client/CodeEditor/InteractiveWidgets/vec2Slider.ts +0 -25
  54. package/src/client/CodeEditor/basicSetup.ts +0 -73
  55. package/src/client/CodeEditor/getOrCreateEditor.tsx +0 -615
  56. package/src/client/CodeEditor/index.tsx +0 -202
  57. package/src/client/CodeEditor/json1PresenceBroadcast.ts +0 -41
  58. package/src/client/CodeEditor/json1PresenceDisplay.ts +0 -350
  59. package/src/client/CodeEditor/rainbowBrackets.ts +0 -122
  60. package/src/client/CodeEditor/style.scss +0 -156
  61. package/src/client/CodeEditor/typescriptExtension/worker.ts +0 -32
  62. package/src/client/CodeErrorOverlay/index.tsx +0 -77
  63. package/src/client/CodeErrorOverlay/style.scss +0 -33
  64. package/src/client/Fonts/fonts.ts +0 -8
  65. package/src/client/Icons/AdjustmentSVG.tsx +0 -19
  66. package/src/client/Icons/BugSVG.tsx +0 -20
  67. package/src/client/Icons/CloseSVG.tsx +0 -19
  68. package/src/client/Icons/CssSVG.tsx +0 -16
  69. package/src/client/Icons/DirectoryArrowSVG.tsx +0 -19
  70. package/src/client/Icons/EditSVG.tsx +0 -19
  71. package/src/client/Icons/FileSVG.tsx +0 -19
  72. package/src/client/Icons/FolderSVG.tsx +0 -20
  73. package/src/client/Icons/GearSVG.tsx +0 -16
  74. package/src/client/Icons/HtmlSVG.tsx +0 -16
  75. package/src/client/Icons/JavaScriptSVG.tsx +0 -16
  76. package/src/client/Icons/JsonSVG.tsx +0 -16
  77. package/src/client/Icons/MarkdownSVG.tsx +0 -16
  78. package/src/client/Icons/MicSVG.tsx +0 -25
  79. package/src/client/Icons/NewSVG.tsx +0 -19
  80. package/src/client/Icons/PinSVG.tsx +0 -14
  81. package/src/client/Icons/PlaySVG.tsx +0 -16
  82. package/src/client/Icons/QuestionMarkSVG.tsx +0 -18
  83. package/src/client/Icons/ReactSVG.tsx +0 -16
  84. package/src/client/Icons/SearchSVG.tsx +0 -20
  85. package/src/client/Icons/SparklesSVG.tsx +0 -23
  86. package/src/client/Icons/SplitEditorSVG.tsx +0 -34
  87. package/src/client/Icons/StopSVG.tsx +0 -15
  88. package/src/client/Icons/SvelteSVG.tsx +0 -16
  89. package/src/client/Icons/TrashSVG.tsx +0 -19
  90. package/src/client/Icons/TypeScriptSVG.tsx +0 -16
  91. package/src/client/Icons/index.tsx +0 -24
  92. package/src/client/ImageViewer/index.tsx +0 -91
  93. package/src/client/ImageViewer/style.scss +0 -41
  94. package/src/client/PresenceNotifications/PresenceNotifications.test.ts +0 -134
  95. package/src/client/PresenceNotifications/index.tsx +0 -158
  96. package/src/client/PresenceNotifications/style.scss +0 -17
  97. package/src/client/RunCodeWidget/index.tsx +0 -117
  98. package/src/client/RunCodeWidget/style.scss +0 -24
  99. package/src/client/SplitPaneResizeContext.tsx +0 -159
  100. package/src/client/TabList/Tab.tsx +0 -73
  101. package/src/client/TabList/index.tsx +0 -35
  102. package/src/client/TabList/style.scss +0 -51
  103. package/src/client/VZCodeContext/index.tsx +0 -29
  104. package/src/client/VZCodeContext/types.ts +0 -249
  105. package/src/client/VZCodeContext/useVZCodeState.ts +0 -584
  106. package/src/client/VZKeyboardShortcutsDoc.tsx +0 -148
  107. package/src/client/VZLeft.tsx +0 -28
  108. package/src/client/VZMiddle.tsx +0 -172
  109. package/src/client/VZResizer/index.tsx +0 -128
  110. package/src/client/VZResizer/styles.scss +0 -33
  111. package/src/client/VZRight.tsx +0 -113
  112. package/src/client/VZSettings.tsx +0 -275
  113. package/src/client/VZSidebar/AIChat/ChatInput.tsx +0 -196
  114. package/src/client/VZSidebar/AIChat/DiffView.scss +0 -136
  115. package/src/client/VZSidebar/AIChat/DiffView.tsx +0 -176
  116. package/src/client/VZSidebar/AIChat/Message.tsx +0 -143
  117. package/src/client/VZSidebar/AIChat/MessageList.tsx +0 -205
  118. package/src/client/VZSidebar/AIChat/StreamingMessage.tsx +0 -35
  119. package/src/client/VZSidebar/AIChat/ThinkingScratchpad.tsx +0 -156
  120. package/src/client/VZSidebar/AIChat/TypingIndicator.tsx +0 -19
  121. package/src/client/VZSidebar/AIChat/index.tsx +0 -273
  122. package/src/client/VZSidebar/AIChat/styles.scss +0 -627
  123. package/src/client/VZSidebar/CreateDirModal.tsx +0 -111
  124. package/src/client/VZSidebar/CreateFileModal.tsx +0 -111
  125. package/src/client/VZSidebar/DeleteConfirmationModal.tsx +0 -76
  126. package/src/client/VZSidebar/DirectoryListing.tsx +0 -89
  127. package/src/client/VZSidebar/EmptyState.tsx +0 -11
  128. package/src/client/VZSidebar/FileListing.tsx +0 -91
  129. package/src/client/VZSidebar/FileTypeIcon.tsx +0 -49
  130. package/src/client/VZSidebar/Item.tsx +0 -237
  131. package/src/client/VZSidebar/Listing.tsx +0 -47
  132. package/src/client/VZSidebar/Search.tsx +0 -527
  133. package/src/client/VZSidebar/VisualEditor.tsx +0 -295
  134. package/src/client/VZSidebar/VoiceChatModal.tsx +0 -121
  135. package/src/client/VZSidebar/aiCopyPaste.ts +0 -199
  136. package/src/client/VZSidebar/index.tsx +0 -728
  137. package/src/client/VZSidebar/styles.scss +0 -612
  138. package/src/client/VZSidebar/useDragAndDrop.tsx +0 -408
  139. package/src/client/bootstrap.ts +0 -26
  140. package/src/client/buildWorker.ts +0 -3
  141. package/src/client/featureFlags.ts +0 -8
  142. package/src/client/generateRequestId.ts +0 -6
  143. package/src/client/getFileTree.ts +0 -53
  144. package/src/client/index.ts +0 -19
  145. package/src/client/main.jsx +0 -10
  146. package/src/client/presenceColor.ts +0 -8
  147. package/src/client/shouldTriggerRun.ts +0 -31
  148. package/src/client/sortFileTree.ts +0 -21
  149. package/src/client/tabsSearchParameters.test.ts +0 -79
  150. package/src/client/tabsSearchParameters.ts +0 -137
  151. package/src/client/themes/index.ts +0 -7
  152. package/src/client/themes/themes.ts +0 -77
  153. package/src/client/themes/uiwImports.ts +0 -32
  154. package/src/client/themes/useDynamicTheme.ts +0 -29
  155. package/src/client/themes/vizhubTheme/colors.ts +0 -80
  156. package/src/client/themes/vizhubTheme/index.ts +0 -193
  157. package/src/client/useActions.ts +0 -288
  158. package/src/client/useESLint/index.ts +0 -72
  159. package/src/client/useESLint/worker.ts +0 -113
  160. package/src/client/useEditorCache.ts +0 -35
  161. package/src/client/useFileCRUD.ts +0 -228
  162. package/src/client/useKeyboardShortcuts.ts +0 -451
  163. package/src/client/useOpenDirectories.ts +0 -99
  164. package/src/client/usePresenceAutoFollow.ts +0 -85
  165. package/src/client/usePrettier/index.ts +0 -178
  166. package/src/client/usePrettier/worker.ts +0 -109
  167. package/src/client/useRunCode.tsx +0 -15
  168. package/src/client/useRuntimeError.ts +0 -32
  169. package/src/client/useSubmitOperation.ts +0 -15
  170. package/src/client/useURLSync.ts +0 -137
  171. package/src/client/usernameLocalStorage.ts +0 -43
  172. package/src/client/utils/fileExtension.ts +0 -10
  173. package/src/client/utils/isImageFile.ts +0 -12
  174. package/src/client/vzReducer/aiChatReducer.ts +0 -44
  175. package/src/client/vzReducer/closeTabReducer.test.ts +0 -205
  176. package/src/client/vzReducer/closeTabsReducer.ts +0 -96
  177. package/src/client/vzReducer/createInitialState.ts +0 -38
  178. package/src/client/vzReducer/editorNoLongerWantsFocusReducer.ts +0 -9
  179. package/src/client/vzReducer/findPane.ts +0 -19
  180. package/src/client/vzReducer/index.ts +0 -250
  181. package/src/client/vzReducer/openTabReducer.test.ts +0 -127
  182. package/src/client/vzReducer/openTabReducer.ts +0 -74
  183. package/src/client/vzReducer/searchReducer.test.ts +0 -292
  184. package/src/client/vzReducer/searchReducer.ts +0 -181
  185. package/src/client/vzReducer/setActiveFileIdReducer.ts +0 -28
  186. package/src/client/vzReducer/setActiveFileLeftRightReducer.ts +0 -76
  187. package/src/client/vzReducer/setIsDocOpenReducer.ts +0 -9
  188. package/src/client/vzReducer/setIsSettingsOpenReducer.ts +0 -9
  189. package/src/client/vzReducer/setThemeReducer.ts +0 -9
  190. package/src/client/vzReducer/setUsernameReducer.ts +0 -9
  191. package/src/client/vzReducer/splitCurrentPaneReducer.ts +0 -66
  192. package/src/client/vzReducer/toggleAutoFollowReducer.ts +0 -12
  193. package/src/client/vzReducer/updatePane.ts +0 -40
  194. package/src/client/vzReducer/updatePresenceIndicatorReducer.ts +0 -30
  195. package/src/client/vzReducer/visualEditorReducer.ts +0 -9
  196. package/src/reactRouterExports.ts +0 -15
  197. package/src/runCode.ts +0 -27
  198. package/src/server/aiChatHandler/aiEditing.ts +0 -152
  199. package/src/server/aiChatHandler/chatOperations.ts +0 -510
  200. package/src/server/aiChatHandler/errorHandling.ts +0 -66
  201. package/src/server/aiChatHandler/index.ts +0 -200
  202. package/src/server/aiChatHandler/llmStreaming.ts +0 -419
  203. package/src/server/aiChatHandler/undoHandler.ts +0 -97
  204. package/src/server/aiChatHandler/validation.ts +0 -24
  205. package/src/server/computeInitialDocument.ts +0 -220
  206. package/src/server/generateAIResponse.ts +0 -188
  207. package/src/server/handleAIAssist.ts +0 -53
  208. package/src/server/handleAIChatUndo.ts +0 -2
  209. package/src/server/handleAICopilot.ts +0 -97
  210. package/src/server/index.ts +0 -388
  211. package/src/server/livekit.ts +0 -24
  212. package/src/server/prettier.ts +0 -115
  213. package/src/submitOperation.ts +0 -25
  214. package/src/types.ts +0 -205
  215. package/src/utils/fileDiff.ts +0 -117
  216. package/src/vite-env.d.ts +0 -10
  217. /package/{src/server/handleAIChatMessage.ts → dist/server/handleAIChatMessage.js} +0 -0
  218. /package/{src/server/isDirectory.ts → dist/server/isDirectory.js} +0 -0
@@ -1,40 +0,0 @@
1
- import { Pane, PaneId, TabState } from '../../types';
2
- import { VizFileId } from '@vizhub/viz-types';
3
-
4
- // Immutable update pattern for updating a pane's tab list.
5
- export const updatePane = ({
6
- pane,
7
- activePaneId,
8
- newTabList,
9
- newActiveFileId,
10
- }: {
11
- pane: Pane;
12
- activePaneId: PaneId;
13
- newTabList?: Array<TabState>;
14
- newActiveFileId?: VizFileId | null;
15
- }): Pane =>
16
- pane.type === 'splitPane'
17
- ? {
18
- ...pane,
19
- children: pane.children.map((child) =>
20
- updatePane({
21
- pane: child,
22
- activePaneId,
23
- newTabList,
24
- newActiveFileId,
25
- }),
26
- ),
27
- }
28
- : pane.id === activePaneId
29
- ? {
30
- ...pane,
31
- tabList:
32
- newTabList !== undefined
33
- ? newTabList
34
- : pane.tabList,
35
- activeFileId:
36
- newActiveFileId !== undefined
37
- ? newActiveFileId
38
- : pane.activeFileId,
39
- }
40
- : pane;
@@ -1,30 +0,0 @@
1
- import { VZAction, VZState } from '.';
2
-
3
- export const updatePresenceIndicatorReducer = (
4
- state: VZState,
5
- action: VZAction,
6
- ): VZState => {
7
- if (action.type === 'update_presence_indicator') {
8
- // True if there's already an entry for this user.
9
- const needsUpdate =
10
- state.sidebarPresenceIndicators.find(
11
- (d) =>
12
- d.username === action.presenceIndicator.username,
13
- );
14
-
15
- return {
16
- ...state,
17
- sidebarPresenceIndicators: needsUpdate
18
- ? state.sidebarPresenceIndicators.map((d) =>
19
- d.username === action.presenceIndicator.username
20
- ? action.presenceIndicator
21
- : d,
22
- )
23
- : [
24
- ...state.sidebarPresenceIndicators,
25
- action.presenceIndicator,
26
- ],
27
- };
28
- }
29
- return state;
30
- };
@@ -1,9 +0,0 @@
1
- import { VZAction, VZState } from '.';
2
-
3
- export const setIsVisualEditorOpenReducer = (
4
- state: VZState,
5
- action: VZAction,
6
- ): VZState =>
7
- action.type === 'set_is_visual_editor_open'
8
- ? { ...state, isVisualEditorOpen: action.value }
9
- : state;
@@ -1,15 +0,0 @@
1
- // The React Router exports have been a pain to deal with.
2
- // After upgrading Node and React Router, there were random errors.
3
- // And we want to migrate soon from `react-router-dom` to `react-router`,
4
- // so the exports are centralized here.
5
- import * as reactRouterDOM from 'react-router-dom';
6
-
7
- export const {
8
- useSearchParams,
9
-
10
- // This actually is the only thing that works.
11
- // It looks crazy, but it works.
12
- // - reactRouterDOM.default works for Vite SSR build
13
- // - reactRouterDOM works for Vite frontend build
14
- // @ts-ignore
15
- } = reactRouterDOM.default || reactRouterDOM;
package/src/runCode.ts DELETED
@@ -1,27 +0,0 @@
1
- import { generateRunId } from '@vizhub/viz-utils';
2
- import { SubmitOperation } from './types';
3
- import { VizContent } from '@vizhub/viz-types';
4
-
5
- /**
6
- * Creates a runCode function that triggers code execution by changing the `runId` in the content.
7
- * This works for both client-side (with submitOperation) and server-side (with ShareDB document).
8
- */
9
- export const createRunCodeFunction =
10
- (submitOperation: SubmitOperation) => () => {
11
- submitOperation((content: VizContent) => ({
12
- ...content,
13
- runId: generateRunId(),
14
- }));
15
- };
16
-
17
- /**
18
- * Creates a runCodeRef object compatible with React refs.
19
- * This is useful for maintaining compatibility with existing code that expects a ref.
20
- */
21
- export const createRunCodeRef = (
22
- submitOperation: SubmitOperation,
23
- ) => {
24
- return {
25
- current: createRunCodeFunction(submitOperation),
26
- };
27
- };
@@ -1,152 +0,0 @@
1
- import {
2
- assembleFullPrompt,
3
- prepareFilesForPrompt,
4
- } from 'editcodewithai';
5
- import { formatMarkdownFiles } from 'llm-code-format';
6
- import {
7
- createFilesSnapshot,
8
- generateFilesUnifiedDiff,
9
- } from '../../utils/fileDiff.js';
10
- import { formatFiles } from '../prettier.js';
11
- import { createSubmitOperation } from '../../submitOperation.js';
12
- import { VizContent } from '@vizhub/viz-types';
13
-
14
- // Dev flag for waiting 1 second before starting the LLM function.
15
- // Useful for debugging and testing purposes, e.g. checking the typing indicator.
16
- const delayStart = false;
17
-
18
- /**
19
- * Performs AI chat without editing - just generates a response
20
- */
21
- export const performAIChat = async ({
22
- prompt,
23
- shareDBDoc,
24
- llmFunction,
25
- }) => {
26
- const preparedFiles = prepareFilesForPrompt(
27
- shareDBDoc.data.files,
28
- );
29
- const filesContext = formatMarkdownFiles(preparedFiles);
30
-
31
- // 2. Assemble the final prompt for Q&A mode
32
- const fullPrompt = assembleFullPrompt({
33
- filesContext,
34
- prompt,
35
- editFormat: 'whole',
36
- });
37
-
38
- if (delayStart) {
39
- await new Promise((resolve) =>
40
- setTimeout(resolve, 1000),
41
- );
42
- }
43
-
44
- // Call the LLM function which will handle streaming but won't edit files
45
- const result = await llmFunction(fullPrompt);
46
-
47
- return {
48
- content: result.content,
49
- generationId: result.generationId,
50
- diffData: {}, // No file changes in ask mode
51
- };
52
- };
53
-
54
- /**
55
- * Performs AI editing operations using streaming with incremental OT operations
56
- */
57
- export const performAIEditing = async ({
58
- prompt,
59
- shareDBDoc,
60
- llmFunction,
61
- runCode,
62
- }) => {
63
- // 1. Capture the current state of files before editing
64
- const beforeFiles = createFilesSnapshot(
65
- shareDBDoc.data.files,
66
- );
67
-
68
- const preparedFiles = prepareFilesForPrompt(
69
- shareDBDoc.data.files,
70
- );
71
- const filesContext = formatMarkdownFiles(preparedFiles);
72
-
73
- // 2. Assemble the final prompt
74
- const fullPrompt = assembleFullPrompt({
75
- filesContext,
76
- prompt,
77
- editFormat: 'whole',
78
- });
79
-
80
- if (delayStart) {
81
- await new Promise((resolve) =>
82
- setTimeout(resolve, 1000),
83
- );
84
- }
85
-
86
- // Call the LLM function which will handle streaming and incremental file updates
87
- const result = await llmFunction(fullPrompt);
88
-
89
- // 3. Run Prettier on changed files before running code
90
- const afterLLMFiles = createFilesSnapshot(
91
- shareDBDoc.data.files,
92
- );
93
-
94
- // Find files that were changed by the AI
95
- const changedFileIds = Object.keys(afterLLMFiles).filter(
96
- (fileId) =>
97
- beforeFiles[fileId]?.text !==
98
- afterLLMFiles[fileId]?.text,
99
- );
100
-
101
- if (changedFileIds.length > 0) {
102
- // Format the changed files
103
- const formattedFiles = await formatFiles(
104
- shareDBDoc.data.files,
105
- changedFileIds,
106
- );
107
-
108
- // Apply formatted versions to shareDBDoc if formatting succeeded
109
- if (Object.keys(formattedFiles).length > 0) {
110
- const submitOperation =
111
- createSubmitOperation(shareDBDoc);
112
- submitOperation((document: VizContent) => {
113
- const updatedFiles = { ...document.files };
114
-
115
- // Apply each formatted file
116
- Object.entries(formattedFiles).forEach(
117
- ([fileId, formattedText]) => {
118
- if (updatedFiles[fileId]) {
119
- updatedFiles[fileId] = {
120
- ...updatedFiles[fileId],
121
- text: formattedText,
122
- };
123
- }
124
- },
125
- );
126
-
127
- return {
128
- ...document,
129
- files: updatedFiles,
130
- };
131
- });
132
- }
133
- }
134
-
135
- runCode();
136
-
137
- // 4. Capture the state of files after editing and formatting, then generate diff
138
- const afterFiles = createFilesSnapshot(
139
- shareDBDoc.data.files,
140
- );
141
- const diffData = generateFilesUnifiedDiff(
142
- beforeFiles,
143
- afterFiles,
144
- );
145
-
146
- return {
147
- content: result.content,
148
- generationId: result.generationId,
149
- diffData,
150
- beforeFiles, // Store the snapshot for undo functionality
151
- };
152
- };