From 497eb22ad860fd10ffb2a3757cac832593b396b1 Mon Sep 17 00:00:00 2001 From: geoffsee <> Date: Mon, 2 Jun 2025 18:41:16 -0400 Subject: [PATCH] change semantics Update README deployment steps and add deploy:secrets script to package.json update local inference script and README update lockfile reconfigure package scripts for development update test execution pass server tests Update README with revised Bun commands and workspace details remove pnpm package manager designator create bun server --- .dev.vars | 8 - .github/workflows/test.yml | 24 +- .gitignore | 24 +- README.md | 26 +- bun.lock | 151 +- gitleaks-report.json | 1 - package.json | 89 +- packages/ai/index.ts | 1 + packages/ai/package.json | 4 + packages/ai/supported-models.ts | 88 + packages/client/package.json | 57 + .../client/public}/android-chrome-192x192.png | Bin .../client/public}/android-chrome-512x512.png | Bin .../client/public}/apple-touch-icon.png | Bin .../client/public}/cfga.min.js | 0 .../client/public}/code-tokenizer-md.jpg | Bin .../client/public}/favicon-16x16.png | Bin .../client/public}/favicon-32x32.png | Bin .../client/public}/favicon.ico | Bin .../client/public}/general-problem-solver.png | Bin {public => packages/client/public}/me.png | Bin .../public}/reactive-state-machine-4.png | Bin .../public}/reactive_state_machine_5.png | Bin .../client/public}/rehoboam.png | Bin .../client/public}/site.webmanifest | 0 .../client/scripts}/generate_robots_txt.js | 0 .../client/scripts}/generate_sitemap.js | 0 .../src}/components/BuiltWithButton.tsx | 0 .../client/src}/components/ThemeSelection.tsx | 0 .../client/src}/components/WelcomeHome.tsx | 0 .../__tests__/ThemeSelection.test.tsx | 0 .../components/__tests__/WelcomeHome.test.tsx | 0 .../src}/components/about/AboutComponent.tsx | 0 .../client/src}/components/chat/Chat.tsx | 0 .../chat/IntermediateStepsComponent.tsx | 0 .../chat/input-menu/FlyoutSubMenu.tsx | 0 .../components/chat/input-menu/InputMenu.tsx | 0 .../src}/components/chat/input/ChatInput.tsx | 0 .../chat/input/ChatInputSendButton.tsx | 0 .../chat/input/ChatInputTextArea.tsx | 0 .../chat/input/__tests__/ChatInput.test.tsx | 0 .../components/chat/lib/SupportedModels.ts | 0 .../src}/components/chat/lib/domPurify.ts | 0 .../chat/lib/exportConversationAsMarkdown.ts | 0 .../chat/messages/ChatMessageContent.tsx | 0 .../components/chat/messages/ChatMessages.tsx | 0 .../chat/messages/MessageBubble.tsx | 0 .../chat/messages/MessageEditorComponent.tsx | 0 .../chat/messages/MessageMarkdown.tsx | 0 .../chat/messages/MessageMarkdownRenderer.tsx | 0 .../components/chat/messages/MotionBox.tsx | 0 .../chat/messages/UserMessageTools.tsx | 0 .../messages/__tests__/MessageBubble.test.tsx | 0 .../__tests__/MessageEditorComponent.test.tsx | 0 .../client/src}/components/code/CodeBlock.tsx | 0 .../src}/components/code/CodeHighlighter.ts | 0 .../components/connect/ConnectComponent.tsx | 0 .../components/connect/MarkdownEditor.tsx | 2 +- .../components/contexts/ChakraContext.tsx | 0 .../components/contexts/MobileContext.tsx | 0 .../client/src}/components/demo/DemoCard.tsx | 0 .../src}/components/demo/DemoComponent.tsx | 0 .../components/feedback/FeedbackModal.tsx | 0 .../src}/components/icons/DogecoinIcon.tsx | 0 .../client/src}/components/legal/LegalDoc.tsx | 0 .../components/markdown/ImageWithFallback.tsx | 0 .../components/markdown/MarkdownComponent.tsx | 0 .../components/resume/ResumeComponent.tsx | 0 .../src}/components/resume/SectionButton.tsx | 0 .../src}/components/resume/SectionContent.tsx | 0 .../components/services/ServicesComponent.tsx | 0 .../services/ServicesComponentSection.tsx | 0 .../src}/components/toolbar/GithubButton.tsx | 0 .../toolbar/SupportThisSiteButton.tsx | 0 .../toolbar/SupportThisSiteModal.tsx | 0 .../src}/components/toolbar/Toolbar.tsx | 0 .../client/src}/hooks/_IsMobileHook.ts | 0 .../hooks/__tests__/usePageLoaded.test.tsx | 0 .../client/src}/hooks/useMaxWidth.ts | 0 .../client/src}/hooks/usePageLoaded.ts | 0 .../client/src}/layout/Content.tsx | 0 {src => packages/client/src}/layout/Hero.tsx | 0 .../client/src}/layout/Layout.css | 0 .../client/src}/layout/Layout.tsx | 0 .../client/src}/layout/LayoutComponent.tsx | 0 .../client/src}/layout/NavItem.tsx | 0 .../client/src}/layout/Navigation.tsx | 0 .../client/src}/layout/Sidebar.tsx | 0 .../client/src}/layout/theme/base_theme.ts | 0 .../src}/layout/theme/color-themes/AtomOne.ts | 0 .../layout/theme/color-themes/Capuchin.ts | 0 .../layout/theme/color-themes/Darknight.ts | 0 .../src}/layout/theme/color-themes/OneDark.ts | 0 .../src}/layout/theme/color-themes/VsCode.ts | 0 .../src}/layout/theme/color-themes/index.ts | 0 .../client/src}/models/Message.ts | 0 {src => packages/client/src}/pages/+client.ts | 0 {src => packages/client/src}/pages/+data.ts | 2 +- .../client/src}/pages/_error/+Page.tsx | 0 .../client/src}/pages/connect/+Page.tsx | 0 .../client/src}/pages/index/+Page.tsx | 0 .../src}/pages/privacy-policy/+Page.tsx | 0 .../pages/privacy-policy/privacy_policy.ts | 0 .../src}/pages/terms-of-service/+Page.tsx | 0 .../terms-of-service/terms_of_service.ts | 0 .../client/src}/renderer/+config.ts | 0 .../client/src}/renderer/+onRenderClient.tsx | 0 .../client/src}/renderer/+onRenderHtml.tsx | 6 +- .../client/src}/renderer/routes.ts | 0 .../client/src}/renderer/types.ts | 2 +- .../client/src}/renderer/usePageContext.tsx | 0 .../client/src}/static-data/resume_data.ts | 0 .../client/src}/static-data/services_data.ts | 0 .../src}/static-data/welcome_home_text.ts | 0 .../client/src}/stores/AppMenuStore.ts | 0 .../client/src}/stores/ClientChatStore.ts | 0 .../client/src}/stores/ClientFeedbackStore.ts | 0 .../src}/stores/ClientTransactionStore.ts | 0 .../client/src}/stores/MessageEditorStore.ts | 0 .../client/src}/stores/MessagesStore.ts | 0 .../client/src}/stores/ModelStore.ts | 0 .../client/src}/stores/StreamStore.ts | 0 .../client/src}/stores/UIStore.ts | 0 .../client/src}/stores/UserOptionsStore.ts | 0 .../stores/__tests__/AppMenuStore.test.ts | 0 .../stores/__tests__/ClientChatStore.test.ts | 0 .../__tests__/ClientTransactionStore.test.ts | 0 .../__tests__/MessageEditorStore.test.ts | 0 .../stores/__tests__/MessagesStore.test.ts | 0 .../src}/stores/__tests__/ModelStore.test.ts | 0 .../src}/stores/__tests__/StreamStore.test.ts | 0 .../src}/stores/__tests__/UIStore.test.ts | 0 .../stores/__tests__/UserOptionsStore.test.ts | 0 {src => packages/client/src}/test/setup.ts | 0 packages/client/tsconfig.json | 28 + .../client/vite.config.ts | 7 +- .../analytics/analytics_worker.js | 0 .../analytics/wrangler.jsonc | 0 .../cloudflare-workers/open-gsio/README.md | 141 + packages/cloudflare-workers/open-gsio/main.ts | 6 + .../cloudflare-workers/open-gsio/package.json | 16 + .../open-gsio/tsconfig.json | 15 + .../open-gsio/vite.config.ts | 6 + .../open-gsio/wrangler.jsonc | 16 +- packages/env/env.d.ts | 27 + packages/env/package.json | 4 + packages/scripts/.gitignore | 34 + packages/scripts/README.md | 15 + packages/scripts/cleanup.sh | 24 + .../scripts}/configure_local_inference.sh | 24 +- {scripts => packages/scripts}/killport.js | 0 packages/scripts/package.json | 10 + .../scripts}/start_inference_server.sh | 0 packages/scripts/tsconfig.json | 28 + .../scripts}/update_vpn_blocklist.sh | 0 .../server}/RequestContext.ts | 15 +- .../server/ServerCoordinator.ts | 30 +- packages/server/ServerCoordinatorBun.ts | 74 + .../server}/__tests__/AssetService.test.ts | 2 +- .../server}/__tests__/api-router.test.ts | 2 +- .../site => packages/server}/api-router.ts | 58 +- packages/server/build.ts | 11 + packages/server/constants.ts | 1 + packages/server/index.ts | 5 + .../lib/__tests__/assistant-sdk.test.ts | 4 +- .../server}/lib/__tests__/chat-sdk.test.ts | 24 +- .../server}/lib/__tests__/debug-utils.test.ts | 2 +- .../lib/__tests__/handleStreamData.test.ts | 4 +- .../server}/lib/__tests__/utils.test.ts | 2 +- .../server}/lib/assistant-sdk.ts | 4 +- .../site => packages/server}/lib/chat-sdk.ts | 21 +- .../server}/lib/handleStreamData.ts | 0 .../site => packages/server}/lib/utils.ts | 0 .../server}/models/ContactRecord.ts | 0 .../server}/models/FeedbackRecord.ts | 0 .../server}/models/Message.ts | 0 .../server}/models/O1Message.ts | 0 .../server}/models/OpenAiMessage.ts | 0 packages/server/package.json | 59 + .../server}/prompts/few_shots.ts | 0 .../__tests__/chat-stream-provider.test.ts | 2 +- .../server}/providers/cerebras.ts | 2 +- .../server}/providers/chat-stream-provider.ts | 2 +- .../server}/providers/claude.ts | 4 +- .../server}/providers/cloudflareAi.ts | 2 +- .../server}/providers/fireworks.ts | 6 +- .../server}/providers/google.ts | 6 +- .../server}/providers/groq.ts | 2 +- .../server}/providers/openai.ts | 4 +- .../site => packages/server}/providers/xai.ts | 2 +- packages/server/server.ts | 93 + .../server}/services/AssetService.ts | 5 +- .../server}/services/ChatService.ts | 30 +- .../server}/services/ContactService.ts | 2 +- .../server}/services/FeedbackService.ts | 2 +- .../server}/services/MetricsService.ts | 0 .../server}/services/TransactionService.ts | 0 .../services/__tests__/AssetService.test.ts | 2 +- .../services/__tests__/ChatService.test.ts | 18 +- .../services/__tests__/ContactService.test.ts | 4 +- .../__tests__/FeedbackService.test.ts | 4 +- .../services/__tests__/MetricsService.test.ts | 2 +- .../__tests__/TransactionService.test.ts | 2 +- .../server/storage/BunSqliteKVNamespace.ts | 100 + packages/server/tsconfig.json | 16 + packages/server/types.d.ts | 5 + packages/server/vite.config.ts | 23 + pnpm-lock.yaml | 4372 ----------------- tsconfig.json | 33 +- workers/email/email_worker.js | 41 - workers/email/wrangler.jsonc | 18 - workers/session-proxy/block-list-ipv4.txt | 1 - workers/session-proxy/index.ts | 66 - workers/session-proxy/ip-parser.ts | 64 - .../session-proxy/wrangler-session-proxy.toml | 34 - workers/session-proxy/wrangler.jsonc | 25 - workers/site/env.d.ts | 54 - workers/site/worker.ts | 8 - 218 files changed, 1273 insertions(+), 4987 deletions(-) delete mode 100644 .dev.vars delete mode 100644 gitleaks-report.json create mode 100644 packages/ai/index.ts create mode 100644 packages/ai/package.json create mode 100644 packages/ai/supported-models.ts create mode 100644 packages/client/package.json rename {public => packages/client/public}/android-chrome-192x192.png (100%) rename {public => packages/client/public}/android-chrome-512x512.png (100%) rename {public => packages/client/public}/apple-touch-icon.png (100%) rename {public => packages/client/public}/cfga.min.js (100%) rename {public => packages/client/public}/code-tokenizer-md.jpg (100%) rename {public => packages/client/public}/favicon-16x16.png (100%) rename {public => packages/client/public}/favicon-32x32.png (100%) rename {public => packages/client/public}/favicon.ico (100%) rename {public => packages/client/public}/general-problem-solver.png (100%) rename {public => packages/client/public}/me.png (100%) rename {public => packages/client/public}/reactive-state-machine-4.png (100%) rename {public => packages/client/public}/reactive_state_machine_5.png (100%) rename {public => packages/client/public}/rehoboam.png (100%) rename {public => packages/client/public}/site.webmanifest (100%) rename {scripts => packages/client/scripts}/generate_robots_txt.js (100%) rename {scripts => packages/client/scripts}/generate_sitemap.js (100%) rename {src => packages/client/src}/components/BuiltWithButton.tsx (100%) rename {src => packages/client/src}/components/ThemeSelection.tsx (100%) rename {src => packages/client/src}/components/WelcomeHome.tsx (100%) rename {src => packages/client/src}/components/__tests__/ThemeSelection.test.tsx (100%) rename {src => packages/client/src}/components/__tests__/WelcomeHome.test.tsx (100%) rename {src => packages/client/src}/components/about/AboutComponent.tsx (100%) rename {src => packages/client/src}/components/chat/Chat.tsx (100%) rename {src => packages/client/src}/components/chat/IntermediateStepsComponent.tsx (100%) rename {src => packages/client/src}/components/chat/input-menu/FlyoutSubMenu.tsx (100%) rename {src => packages/client/src}/components/chat/input-menu/InputMenu.tsx (100%) rename {src => packages/client/src}/components/chat/input/ChatInput.tsx (100%) rename {src => packages/client/src}/components/chat/input/ChatInputSendButton.tsx (100%) rename {src => packages/client/src}/components/chat/input/ChatInputTextArea.tsx (100%) rename {src => packages/client/src}/components/chat/input/__tests__/ChatInput.test.tsx (100%) rename {src => packages/client/src}/components/chat/lib/SupportedModels.ts (100%) rename {src => packages/client/src}/components/chat/lib/domPurify.ts (100%) rename {src => packages/client/src}/components/chat/lib/exportConversationAsMarkdown.ts (100%) rename {src => packages/client/src}/components/chat/messages/ChatMessageContent.tsx (100%) rename {src => packages/client/src}/components/chat/messages/ChatMessages.tsx (100%) rename {src => packages/client/src}/components/chat/messages/MessageBubble.tsx (100%) rename {src => packages/client/src}/components/chat/messages/MessageEditorComponent.tsx (100%) rename {src => packages/client/src}/components/chat/messages/MessageMarkdown.tsx (100%) rename {src => packages/client/src}/components/chat/messages/MessageMarkdownRenderer.tsx (100%) rename {src => packages/client/src}/components/chat/messages/MotionBox.tsx (100%) rename {src => packages/client/src}/components/chat/messages/UserMessageTools.tsx (100%) rename {src => packages/client/src}/components/chat/messages/__tests__/MessageBubble.test.tsx (100%) rename {src => packages/client/src}/components/chat/messages/__tests__/MessageEditorComponent.test.tsx (100%) rename {src => packages/client/src}/components/code/CodeBlock.tsx (100%) rename {src => packages/client/src}/components/code/CodeHighlighter.ts (100%) rename {src => packages/client/src}/components/connect/ConnectComponent.tsx (100%) rename {src => packages/client/src}/components/connect/MarkdownEditor.tsx (82%) rename {src => packages/client/src}/components/contexts/ChakraContext.tsx (100%) rename {src => packages/client/src}/components/contexts/MobileContext.tsx (100%) rename {src => packages/client/src}/components/demo/DemoCard.tsx (100%) rename {src => packages/client/src}/components/demo/DemoComponent.tsx (100%) rename {src => packages/client/src}/components/feedback/FeedbackModal.tsx (100%) rename {src => packages/client/src}/components/icons/DogecoinIcon.tsx (100%) rename {src => packages/client/src}/components/legal/LegalDoc.tsx (100%) rename {src => packages/client/src}/components/markdown/ImageWithFallback.tsx (100%) rename {src => packages/client/src}/components/markdown/MarkdownComponent.tsx (100%) rename {src => packages/client/src}/components/resume/ResumeComponent.tsx (100%) rename {src => packages/client/src}/components/resume/SectionButton.tsx (100%) rename {src => packages/client/src}/components/resume/SectionContent.tsx (100%) rename {src => packages/client/src}/components/services/ServicesComponent.tsx (100%) rename {src => packages/client/src}/components/services/ServicesComponentSection.tsx (100%) rename {src => packages/client/src}/components/toolbar/GithubButton.tsx (100%) rename {src => packages/client/src}/components/toolbar/SupportThisSiteButton.tsx (100%) rename {src => packages/client/src}/components/toolbar/SupportThisSiteModal.tsx (100%) rename {src => packages/client/src}/components/toolbar/Toolbar.tsx (100%) rename {src => packages/client/src}/hooks/_IsMobileHook.ts (100%) rename {src => packages/client/src}/hooks/__tests__/usePageLoaded.test.tsx (100%) rename {src => packages/client/src}/hooks/useMaxWidth.ts (100%) rename {src => packages/client/src}/hooks/usePageLoaded.ts (100%) rename {src => packages/client/src}/layout/Content.tsx (100%) rename {src => packages/client/src}/layout/Hero.tsx (100%) rename {src => packages/client/src}/layout/Layout.css (100%) rename {src => packages/client/src}/layout/Layout.tsx (100%) rename {src => packages/client/src}/layout/LayoutComponent.tsx (100%) rename {src => packages/client/src}/layout/NavItem.tsx (100%) rename {src => packages/client/src}/layout/Navigation.tsx (100%) rename {src => packages/client/src}/layout/Sidebar.tsx (100%) rename {src => packages/client/src}/layout/theme/base_theme.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/AtomOne.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/Capuchin.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/Darknight.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/OneDark.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/VsCode.ts (100%) rename {src => packages/client/src}/layout/theme/color-themes/index.ts (100%) rename {src => packages/client/src}/models/Message.ts (100%) rename {src => packages/client/src}/pages/+client.ts (100%) rename {src => packages/client/src}/pages/+data.ts (92%) rename {src => packages/client/src}/pages/_error/+Page.tsx (100%) rename {src => packages/client/src}/pages/connect/+Page.tsx (100%) rename {src => packages/client/src}/pages/index/+Page.tsx (100%) rename {src => packages/client/src}/pages/privacy-policy/+Page.tsx (100%) rename {src => packages/client/src}/pages/privacy-policy/privacy_policy.ts (100%) rename {src => packages/client/src}/pages/terms-of-service/+Page.tsx (100%) rename {src => packages/client/src}/pages/terms-of-service/terms_of_service.ts (100%) rename {src => packages/client/src}/renderer/+config.ts (100%) rename {src => packages/client/src}/renderer/+onRenderClient.tsx (100%) rename {src => packages/client/src}/renderer/+onRenderHtml.tsx (91%) rename {src => packages/client/src}/renderer/routes.ts (100%) rename {src => packages/client/src}/renderer/types.ts (86%) rename {src => packages/client/src}/renderer/usePageContext.tsx (100%) rename {src => packages/client/src}/static-data/resume_data.ts (100%) rename {src => packages/client/src}/static-data/services_data.ts (100%) rename {src => packages/client/src}/static-data/welcome_home_text.ts (100%) rename {src => packages/client/src}/stores/AppMenuStore.ts (100%) rename {src => packages/client/src}/stores/ClientChatStore.ts (100%) rename {src => packages/client/src}/stores/ClientFeedbackStore.ts (100%) rename {src => packages/client/src}/stores/ClientTransactionStore.ts (100%) rename {src => packages/client/src}/stores/MessageEditorStore.ts (100%) rename {src => packages/client/src}/stores/MessagesStore.ts (100%) rename {src => packages/client/src}/stores/ModelStore.ts (100%) rename {src => packages/client/src}/stores/StreamStore.ts (100%) rename {src => packages/client/src}/stores/UIStore.ts (100%) rename {src => packages/client/src}/stores/UserOptionsStore.ts (100%) rename {src => packages/client/src}/stores/__tests__/AppMenuStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/ClientChatStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/ClientTransactionStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/MessageEditorStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/MessagesStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/ModelStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/StreamStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/UIStore.test.ts (100%) rename {src => packages/client/src}/stores/__tests__/UserOptionsStore.test.ts (100%) rename {src => packages/client/src}/test/setup.ts (100%) create mode 100644 packages/client/tsconfig.json rename vite.config.ts => packages/client/vite.config.ts (93%) rename {workers => packages/cloudflare-workers}/analytics/analytics_worker.js (100%) rename {workers => packages/cloudflare-workers}/analytics/wrangler.jsonc (100%) create mode 100644 packages/cloudflare-workers/open-gsio/README.md create mode 100644 packages/cloudflare-workers/open-gsio/main.ts create mode 100644 packages/cloudflare-workers/open-gsio/package.json create mode 100644 packages/cloudflare-workers/open-gsio/tsconfig.json create mode 100644 packages/cloudflare-workers/open-gsio/vite.config.ts rename wrangler.jsonc => packages/cloudflare-workers/open-gsio/wrangler.jsonc (75%) create mode 100644 packages/env/env.d.ts create mode 100644 packages/env/package.json create mode 100644 packages/scripts/.gitignore create mode 100644 packages/scripts/README.md create mode 100755 packages/scripts/cleanup.sh rename {scripts => packages/scripts}/configure_local_inference.sh (63%) rename {scripts => packages/scripts}/killport.js (100%) create mode 100644 packages/scripts/package.json rename {scripts => packages/scripts}/start_inference_server.sh (100%) create mode 100644 packages/scripts/tsconfig.json rename {scripts => packages/scripts}/update_vpn_blocklist.sh (100%) rename {workers/site => packages/server}/RequestContext.ts (82%) rename workers/site/durable_objects/SiteCoordinator.js => packages/server/ServerCoordinator.ts (55%) create mode 100644 packages/server/ServerCoordinatorBun.ts rename {workers/site => packages/server}/__tests__/AssetService.test.ts (98%) rename {workers/site => packages/server}/__tests__/api-router.test.ts (88%) rename {workers/site => packages/server}/api-router.ts (59%) create mode 100644 packages/server/build.ts create mode 100644 packages/server/constants.ts create mode 100644 packages/server/index.ts rename {workers/site => packages/server}/lib/__tests__/assistant-sdk.test.ts (98%) rename {workers/site => packages/server}/lib/__tests__/chat-sdk.test.ts (90%) rename {workers/site => packages/server}/lib/__tests__/debug-utils.test.ts (97%) rename {workers/site => packages/server}/lib/__tests__/handleStreamData.test.ts (97%) rename {workers/site => packages/server}/lib/__tests__/utils.test.ts (99%) rename {workers/site => packages/server}/lib/assistant-sdk.ts (96%) rename {workers/site => packages/server}/lib/chat-sdk.ts (83%) rename {workers/site => packages/server}/lib/handleStreamData.ts (100%) rename {workers/site => packages/server}/lib/utils.ts (100%) rename {workers/site => packages/server}/models/ContactRecord.ts (100%) rename {workers/site => packages/server}/models/FeedbackRecord.ts (100%) rename {workers/site => packages/server}/models/Message.ts (100%) rename {workers/site => packages/server}/models/O1Message.ts (100%) rename {workers/site => packages/server}/models/OpenAiMessage.ts (100%) create mode 100644 packages/server/package.json rename {workers/site => packages/server}/prompts/few_shots.ts (100%) rename {workers/site => packages/server}/providers/__tests__/chat-stream-provider.test.ts (98%) rename {workers/site => packages/server}/providers/cerebras.ts (99%) rename {workers/site => packages/server}/providers/chat-stream-provider.ts (97%) rename {workers/site => packages/server}/providers/claude.ts (98%) rename {workers/site => packages/server}/providers/cloudflareAi.ts (99%) rename {workers/site => packages/server}/providers/fireworks.ts (94%) rename {workers/site => packages/server}/providers/google.ts (93%) rename {workers/site => packages/server}/providers/groq.ts (99%) rename {workers/site => packages/server}/providers/openai.ts (98%) rename {workers/site => packages/server}/providers/xai.ts (99%) create mode 100644 packages/server/server.ts rename {workers/site => packages/server}/services/AssetService.ts (91%) rename {workers/site => packages/server}/services/ChatService.ts (93%) rename {workers/site => packages/server}/services/ContactService.ts (96%) rename {workers/site => packages/server}/services/FeedbackService.ts (95%) rename {workers/site => packages/server}/services/MetricsService.ts (100%) rename {workers/site => packages/server}/services/TransactionService.ts (100%) rename {workers/site => packages/server}/services/__tests__/AssetService.test.ts (99%) rename {workers/site => packages/server}/services/__tests__/ChatService.test.ts (96%) rename {workers/site => packages/server}/services/__tests__/ContactService.test.ts (97%) rename {workers/site => packages/server}/services/__tests__/FeedbackService.test.ts (98%) rename {workers/site => packages/server}/services/__tests__/MetricsService.test.ts (98%) rename {workers/site => packages/server}/services/__tests__/TransactionService.test.ts (99%) create mode 100644 packages/server/storage/BunSqliteKVNamespace.ts create mode 100644 packages/server/tsconfig.json create mode 100644 packages/server/types.d.ts create mode 100644 packages/server/vite.config.ts delete mode 100644 pnpm-lock.yaml delete mode 100644 workers/email/email_worker.js delete mode 100644 workers/email/wrangler.jsonc delete mode 100644 workers/session-proxy/block-list-ipv4.txt delete mode 100644 workers/session-proxy/index.ts delete mode 100644 workers/session-proxy/ip-parser.ts delete mode 100644 workers/session-proxy/wrangler-session-proxy.toml delete mode 100644 workers/session-proxy/wrangler.jsonc delete mode 100644 workers/site/env.d.ts delete mode 100644 workers/site/worker.ts diff --git a/.dev.vars b/.dev.vars deleted file mode 100644 index 337c5cc..0000000 --- a/.dev.vars +++ /dev/null @@ -1,8 +0,0 @@ -EVENTSOURCE_HOST=http://some-event-host:3005 -GROQ_API_KEY=your-value -ANTHROPIC_API_KEY=your-value -FIREWORKS_API_KEY=your-value -XAI_API_KEY=your-value -CEREBRAS_API_KEY=your-value -CLOUDFLARE_API_KEY=your-value -CLOUDFLARE_ACCOUNT_ID=your-value diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a32258d..fb03c7d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,26 +33,4 @@ jobs: run: bun install - name: Test - run: bun run test:coverage - - # Upload coverage as Pages artifact only on push to main - - name: Upload coverage html - uses: actions/upload-pages-artifact@v3 - with: - path: ./coverage - name: "coverage" - - - deploy_coverage: - needs: tests - runs-on: ubuntu-latest - environment: - name: coverage-ui - url: ${{ steps.deployment.outputs.page_url }} - - steps: - - name: Deploy coverage-ui - id: deployment - uses: actions/deploy-pages@v4 - with: - artifact_name: 'coverage' + run: bun test:all diff --git a/.gitignore b/.gitignore index f15459d..645d01d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,16 @@ +**/.open-gsio/ **/node_modules/ -/dist/ +**/dist/ +**/build/ +**/coverage/ **/.wrangler/ -/.idea/ -public/sitemap.xml -public/robots.txt -public/static/fonts/* -.dev.vars -secrets.json -wrangler.dev.jsonc -/coverage/ -/html \ No newline at end of file +**/.idea/ +**/html/ +**/.env +packages/client/public/static/fonts/* + +**/secrets.json +**/.dev.vars +packages/client/public/sitemap.xml +packages/client/public/robots.txt +wrangler.dev.jsonc \ No newline at end of file diff --git a/README.md b/README.md index 4170d37..06dbe55 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ > **Note**: This project is currently under active development. The styling is a work in progress and some functionality > may be broken. Tests are being actively ported and stability will improve over time. Thank you for your patience! +This is a full-stack Conversational AI. It runs on Cloudflare or Bun. + ## Table of Contents - [Stack](#stack) @@ -37,15 +39,15 @@ ## Installation -1. `bun i && bun test` -1. [Add your own `GROQ_API_KEY` in .dev.vars](https://console.groq.com/keys) OR [Setup Local Inference](#local-inference) +1. `bun i && bun test:all` +1. [Setup Local Inference](#local-inference) OR [Add your own `GROQ_API_KEY` in packages/cloudflare-workers/open-gsio/.dev.vars](https://console.groq.com/keys) 1. In isolated shells, run `bun run server:dev` and `bun run client:dev` -> Note: it should be possible to use pnpm in place of bun. +> Note: it should be possible to use pnpm in place of bun. ## Deployment -1. Setup the KV_STORAGE bindings in `wrangler.jsonc` -1. [Add another `GROQ_API_KEY` in secrets.json](https://console.groq.com/keys) +1. Setup KV_STORAGE binding in `packages/server/wrangler.jsonc` +1. [Add keys in secrets.json](https://console.groq.com/keys) 1. Run `bun run deploy && bun run deploy:secrets && bun run deploy` > Note: Subsequent deployments should omit `bun run deploy:secrets` @@ -62,7 +64,7 @@ brew tap seemueller-io/tap brew install seemueller-io/tap/mlx-omni-server bun run openai:local mlx-omni-server # Start mlx-omni-server -bun run openai:local:enable # Configure connection +bun run openai:local:configure # Configure connection bun run server:dev # Restart server ~~~ #### Adding models for local inference (Apple Silicon) @@ -84,7 +86,7 @@ curl http://localhost:10240/v1/chat/completions \ ### Ollama ~~~bash bun run openai:local ollama # Start ollama server -bun run openai:local:enable # Configure connection +bun run openai:local:configure # Configure connection bun run server:dev # Restart server ~~~ #### Adding models for local inference (ollama) @@ -100,19 +102,19 @@ docker exec -it ollama ollama run ${MODEL_TO_ADD} Tests are located in `__tests__` directories next to the code they test. Testing is incomplete at this time. -> `bun run test` will run all tests +> `bun test:all` will run all tests ## Troubleshooting -1. `bun run clean` +1. `bun clean` 1. `bun i` -1. `bun server:dev` -1. `bun client:dev` +1. `bun server:dev` +1. `bun client:dev` 1. Submit an issue History --- -A high-level overview for the development history of the parent repository, [geoff-seemueller-io](https://geoff.seemueller.io), is provided in [LEGACY.md](./LEGACY.md). +A high-level overview for the development history of the parent repository, [geoff-seemueller-io](https://geoff.seemueller.io), is provided in [LEGACY.md](./LEGACY.md). ## License ~~~text diff --git a/bun.lock b/bun.lock index 57b2bbb..6f40d00 100644 --- a/bun.lock +++ b/bun.lock @@ -3,11 +3,25 @@ "workspaces": { "": { "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/ai": { + "name": "@open-gsio/ai", + }, + "packages/client": { + "name": "@open-gsio/client", + "dependencies": { "@anthropic-ai/sdk": "^0.32.1", "@chakra-ui/react": "^2.10.6", "@cloudflare/workers-types": "^4.20241205.0", "@emotion/react": "^11.13.5", "@emotion/styled": "^11.13.5", + "@open-gsio/env": "workspace:*", + "@open-gsio/scripts": "workspace:*", "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.2.1", "@testing-library/user-event": "^14.5.2", @@ -48,6 +62,77 @@ "zod": "^3.23.8", }, }, + "packages/cloudflare-workers/open-gsio": { + "name": "@open-gsio/worker", + "dependencies": { + "@cloudflare/vite-plugin": "^1.3.1", + "vite": "6.3.5", + "wrangler": "^4.18.0", + }, + }, + "packages/env": { + "name": "@open-gsio/env", + }, + "packages/scripts": { + "name": "@open-gsio/scripts", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + "packages/server": { + "name": "@open-gsio/server", + "devDependencies": { + "@anthropic-ai/sdk": "^0.32.1", + "@chakra-ui/react": "^2.10.6", + "@cloudflare/workers-types": "^4.20241205.0", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@open-gsio/env": "workspace:*", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.2", + "@types/marked": "^6.0.0", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "bun-sqlite-key-value": "^1.13.1", + "chokidar": "^4.0.1", + "dotenv": "^16.5.0", + "framer-motion": "^11.13.1", + "isomorphic-dompurify": "^2.19.0", + "itty-router": "^5.0.18", + "js-cookie": "^3.0.5", + "jsdom": "^24.0.0", + "katex": "^0.16.20", + "lucide-react": "^0.436.0", + "marked": "^15.0.4", + "marked-extended-latex": "^1.1.0", + "marked-footnote": "^1.2.4", + "marked-katex-extension": "^5.1.4", + "mobx": "^6.13.5", + "mobx-react-lite": "^4.0.7", + "mobx-state-tree": "^6.0.1", + "moo": "^0.5.2", + "openai": "^5.0.1", + "qrcode.react": "^4.1.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0", + "react-streaming": "^0.3.44", + "react-textarea-autosize": "^8.5.5", + "shiki": "^1.24.0", + "typescript": "^5.7.2", + "vike": "0.4.193", + "vite": "^6.3.5", + "vite-plugin-pwa": "^1.0.0", + "vitest": "^3.1.4", + "wrangler": "^4.18.0", + "zod": "^3.23.8", + }, + }, }, "packages": { "@adobe/css-tools": ["@adobe/css-tools@4.4.3", "", {}, "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA=="], @@ -270,6 +355,8 @@ "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.3.2", "", { "peerDependencies": { "unenv": "2.0.0-rc.17", "workerd": "^1.20250508.0" }, "optionalPeers": ["workerd"] }, "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg=="], + "@cloudflare/vite-plugin": ["@cloudflare/vite-plugin@1.3.1", "", { "dependencies": { "@cloudflare/unenv-preset": "2.3.2", "@mjackson/node-fetch-server": "^0.6.1", "@rollup/plugin-replace": "^6.0.1", "get-port": "^7.1.0", "miniflare": "4.20250525.0", "picocolors": "^1.1.1", "tinyglobby": "^0.2.12", "unenv": "2.0.0-rc.17", "wrangler": "4.18.0", "ws": "8.18.0" }, "peerDependencies": { "vite": "^6.1.0" } }, "sha512-jTBdQ/oerE2w5jo0Hef8vIsuT5SxrYj5+NPlSRUjaTOdUaiuXr5uknKolhiYU35j8vbR+k+vlS/H/qR87q1WXA=="], + "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20250525.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-L5l+7sSJJT2+riR5rS3Q3PKNNySPjWfRIeaNGMVRi1dPO6QPi4lwuxfRUFNoeUdilZJUVPfSZvTtj9RedsKznQ=="], "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20250525.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y3IbIdrF/vJWh/WBvshwcSyUh175VAiLRW7963S1dXChrZ1N5wuKGQm9xY69cIGVtitpMJWWW3jLq7J/Xxwm0Q=="], @@ -428,12 +515,26 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="], + "@mjackson/node-fetch-server": ["@mjackson/node-fetch-server@0.6.1", "", {}, "sha512-9ZJnk/DJjt805uv5PPv11haJIW+HHf3YEEyVXv+8iLQxLD/iXA68FH220XoiTPBC4gCg5q+IMadDw8qPqlA5wg=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@open-gsio/ai": ["@open-gsio/ai@workspace:packages/ai"], + + "@open-gsio/client": ["@open-gsio/client@workspace:packages/client"], + + "@open-gsio/env": ["@open-gsio/env@workspace:packages/env"], + + "@open-gsio/scripts": ["@open-gsio/scripts@workspace:packages/scripts"], + + "@open-gsio/server": ["@open-gsio/server@workspace:packages/server"], + + "@open-gsio/worker": ["@open-gsio/worker@workspace:packages/cloudflare-workers/open-gsio"], + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@polka/url": ["@polka/url@1.0.0-next.28", "", {}, "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw=="], @@ -444,11 +545,11 @@ "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@15.3.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA=="], - "@rollup/plugin-replace": ["@rollup/plugin-replace@2.4.2", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="], + "@rollup/plugin-replace": ["@rollup/plugin-replace@6.0.2", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ=="], "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], - "@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.39.0", "", { "os": "android", "cpu": "arm" }, "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA=="], @@ -524,6 +625,8 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.7", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng=="], + "@types/bun": ["@types/bun@1.2.15", "", { "dependencies": { "bun-types": "1.2.15" } }, "sha512-U1ljPdBEphF0nw1MIk0hI7kPg7dFdPyM7EenHsp6W5loNHl7zqy6JQf/RKCgnUn2KDzUpkBwHPnEJEjII594bA=="], + "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], @@ -638,6 +741,10 @@ "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + "bun-sqlite-key-value": ["bun-sqlite-key-value@1.13.1", "", { "peerDependencies": { "typescript": "^5.5.3" } }, "sha512-cb3thB8QXPeXB6B7NhObpADEYvtVNwqg/0ED7PgKt2OxVAxPSejkiTsy1+byQDC0AwLYajw3nhtr/ubKvcLcKw=="], + + "bun-types": ["bun-types@1.2.15", "", { "dependencies": { "@types/node": "*" } }, "sha512-NarRIaS+iOaQU1JPfyKhZm4AsUOrwUOqRNHY0XxI8GI8jYxiLXLcdjYMG9UKS+fwWasc1uw1htV9AX24dD+p4w=="], + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], @@ -744,6 +851,8 @@ "dompurify": ["dompurify@3.2.5", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ=="], + "dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], @@ -852,6 +961,8 @@ "get-own-enumerable-property-symbols": ["get-own-enumerable-property-symbols@3.0.2", "", {}, "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="], + "get-port": ["get-port@7.1.0", "", {}, "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], "get-source": ["get-source@2.0.12", "", { "dependencies": { "data-uri-to-buffer": "^2.0.0", "source-map": "^0.6.1" } }, "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w=="], @@ -1772,25 +1883,17 @@ "@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + "@cloudflare/vite-plugin/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + "@rollup/plugin-babel/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + "@rollup/plugin-babel/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], - "@rollup/plugin-node-resolve/@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], - - "@rollup/plugin-replace/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], - - "@rollup/plugin-replace/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], - "@rollup/plugin-terser/terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], - "@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], - - "@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], - - "@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - - "@rollup/pluginutils/rollup": ["rollup@2.79.2", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ=="], + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@surma/rollup-plugin-off-main-thread/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], @@ -1864,6 +1967,8 @@ "vite-node/es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "workbox-build/@rollup/plugin-replace": ["@rollup/plugin-replace@2.4.2", "", { "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg=="], + "workbox-build/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "workbox-build/pretty-bytes": ["pretty-bytes@5.6.0", "", {}, "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="], @@ -2032,7 +2137,11 @@ "@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], - "@rollup/plugin-node-resolve/@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@rollup/plugin-babel/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "@rollup/plugin-babel/@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "@rollup/plugin-babel/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "@rollup/plugin-terser/terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -2098,6 +2207,10 @@ "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils": ["@rollup/pluginutils@3.1.0", "", { "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0" } }, "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg=="], + + "workbox-build/@rollup/plugin-replace/magic-string": ["magic-string@0.25.9", "", { "dependencies": { "sourcemap-codec": "^1.4.8" } }, "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="], + "workbox-build/glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "workbox-build/source-map/whatwg-url": ["whatwg-url@7.1.0", "", { "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg=="], @@ -2212,6 +2325,12 @@ "@babel/plugin-transform-modules-umd/@babel/helper-module-transforms/@babel/traverse/@babel/types": ["@babel/types@7.27.3", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw=="], + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/@types/estree": ["@types/estree@0.0.39", "", {}, "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="], + + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/estree-walker": ["estree-walker@1.0.1", "", {}, "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="], + + "workbox-build/@rollup/plugin-replace/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "workbox-build/glob/minimatch/brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="], "workbox-build/source-map/whatwg-url/tr46": ["tr46@1.0.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA=="], diff --git a/gitleaks-report.json b/gitleaks-report.json deleted file mode 100644 index fe51488..0000000 --- a/gitleaks-report.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/package.json b/package.json index 7e464ed..0193e94 100644 --- a/package.json +++ b/package.json @@ -1,75 +1,30 @@ { + "name": "open-gsio", + "module": "index.ts", "type": "module", + "version": "2.0.0", + "private": true, + "workspaces": [ + "packages/*", + "packages/cloudflare-workers/*" + ], "scripts": { - "clean": "rm -rf node_modules && rm -rf .wrangler && rm -rf dist && rm -rf coverage && rm -rf html", - "build": "pnpm client:build && pnpm server:build", - "client:dev": "pnpm vite dev --host 0.0.0.0", - "server:dev": "pnpm run build && pnpm wrangler dev", - "client": "pnpm client:dev", - "client:build": "vite build", - "server:build": "WRANGLER_LOG=info wrangler build", - "deploy": "CI=true; NODE_ENV=production vite build && NODE_ENV=production wrangler deploy --minify", - "deploy:secrets": "wrangler secret bulk secrets.json", - "deploy:email-service": "wrangler deploy --cwd workers/email", - "deploy:analytics-service": "wrangler deploy --cwd workers/analytics", - "deploy:session-proxy": "wrangler deploy --cwd workers/session-proxy", - "deploy:all": "pnpm deploy && pnpm deploy:session:proxy && pnpm deploy:email-service && pnpm deploy:analytics-service", - "tail": "wrangler tail", - "tail:email-service": "wrangler tail -c workers/email/wrangler-email.toml", - "tail:analytics-service": "wrangler tail -c workers/analytics/wrangler-analytics.toml", - "tail:session-proxy": "wrangler tail -c workers/session-proxy/wrangler-session-proxy.toml --env production", - "openai:local": "./scripts/start_inference_server.sh mlx-omni-server", - "openai:local:mlx": "./scripts/start_inference_server.sh mlx-omni-server", - "openai:local:ollama": "./scripts/start_inference_server.sh ollama", - "openai:local:configure": "scripts/configure_local_inference.sh", - "test": "vitest run", - "test:watch": "vitest", - "test:coverage": "vitest run --coverage.enabled=true" + "clean": "packages/scripts/cleanup.sh", + "test:all": "bun run --filter='*' tests", + "client:dev": "(cd packages/client && bun run dev)", + "server:dev": "(cd packages/server && bun run dev)", + "build": "(cd packages/cloudflare-workers && bun run deploy:dry-run)", + "deploy": "(cd packages/cloudflare-workers && bun run deploy)", + "deploy:secrets": "wrangler secret bulk secrets.json -c packages/cloudflare-workers/open-gsio/wrangler.jsonc", + "openai:local:mlx": "packages/scripts/start_inference_server.sh mlx-omni-server", + "openai:local:ollama": "packages/scripts/start_inference_server.sh ollama", + "openai:local:configure": "packages/scripts/configure_local_inference.sh" }, "devDependencies": { - "@anthropic-ai/sdk": "^0.32.1", - "@chakra-ui/react": "^2.10.6", - "@cloudflare/workers-types": "^4.20241205.0", - "@emotion/react": "^11.13.5", - "@emotion/styled": "^11.13.5", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^14.2.1", - "@testing-library/user-event": "^14.5.2", - "@types/marked": "^6.0.0", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "^3.1.4", - "@vitest/ui": "^3.1.4", - "chokidar": "^4.0.1", - "framer-motion": "^11.13.1", - "isomorphic-dompurify": "^2.19.0", - "itty-router": "^5.0.18", - "js-cookie": "^3.0.5", - "jsdom": "^24.0.0", - "katex": "^0.16.20", - "lucide-react": "^0.436.0", - "marked": "^15.0.4", - "marked-extended-latex": "^1.1.0", - "marked-footnote": "^1.2.4", - "marked-katex-extension": "^5.1.4", - "mobx": "^6.13.5", - "mobx-react-lite": "^4.0.7", - "mobx-state-tree": "^6.0.1", - "moo": "^0.5.2", - "openai": "^5.0.1", - "qrcode.react": "^4.1.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-icons": "^5.4.0", - "react-streaming": "^0.3.44", - "react-textarea-autosize": "^8.5.5", - "shiki": "^1.24.0", - "typescript": "^5.7.2", - "vike": "0.4.193", - "vite": "^6.3.5", - "vite-plugin-pwa": "^1.0.0", - "vitest": "^3.1.4", - "wrangler": "^4.18.0", - "zod": "^3.23.8" + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" }, "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" } diff --git a/packages/ai/index.ts b/packages/ai/index.ts new file mode 100644 index 0000000..c7e0d4d --- /dev/null +++ b/packages/ai/index.ts @@ -0,0 +1 @@ +export * from "./supported-models.ts"; \ No newline at end of file diff --git a/packages/ai/package.json b/packages/ai/package.json new file mode 100644 index 0000000..27192a5 --- /dev/null +++ b/packages/ai/package.json @@ -0,0 +1,4 @@ +{ + "name": "@open-gsio/ai", + "module": "index.ts" +} \ No newline at end of file diff --git a/packages/ai/supported-models.ts b/packages/ai/supported-models.ts new file mode 100644 index 0000000..077506d --- /dev/null +++ b/packages/ai/supported-models.ts @@ -0,0 +1,88 @@ +const SUPPORTED_MODELS_GROUPS = { + openai: [ + // "o1-preview", + // "o1-mini", + // "gpt-4o", + // "gpt-3.5-turbo" + ], + groq: [ + // "mixtral-8x7b-32768", + // "deepseek-r1-distill-llama-70b", + "meta-llama/llama-4-scout-17b-16e-instruct", + "gemma2-9b-it", + "mistral-saba-24b", + // "qwen-2.5-32b", + "llama-3.3-70b-versatile", + // "llama-3.3-70b-versatile" + // "llama-3.1-70b-versatile", + // "llama-3.3-70b-versatile" + ], + cerebras: ["llama-3.3-70b"], + claude: [ + // "claude-3-5-sonnet-20241022", + // "claude-3-opus-20240229" + ], + fireworks: [ + // "llama-v3p1-405b-instruct", + // "llama-v3p1-70b-instruct", + // "llama-v3p2-90b-vision-instruct", + // "mixtral-8x22b-instruct", + // "mythomax-l2-13b", + // "yi-large" + ], + google: [ + // "gemini-2.0-flash-exp", + // "gemini-1.5-flash", + // "gemini-exp-1206", + // "gemini-1.5-pro" + ], + xai: [ + // "grok-beta", + // "grok-2", + // "grok-2-1212", + // "grok-2-latest", + // "grok-beta" + ], + cloudflareAI: [ + "llama-3.2-3b-instruct", // max_tokens + "llama-3-8b-instruct", // max_tokens + "llama-3.1-8b-instruct-fast", // max_tokens + "deepseek-math-7b-instruct", + "deepseek-coder-6.7b-instruct-awq", + "hermes-2-pro-mistral-7b", + "openhermes-2.5-mistral-7b-awq", + "mistral-7b-instruct-v0.2", + "neural-chat-7b-v3-1-awq", + "openchat-3.5-0106", + // "gemma-7b-it", + ], +}; + +export type SupportedModel = + | keyof typeof SUPPORTED_MODELS_GROUPS + | (typeof SUPPORTED_MODELS_GROUPS)[keyof typeof SUPPORTED_MODELS_GROUPS][number]; + +export type ModelFamily = keyof typeof SUPPORTED_MODELS_GROUPS; + +function getModelFamily(model: string): ModelFamily | undefined { + return Object.keys(SUPPORTED_MODELS_GROUPS) + .filter((family) => { + return SUPPORTED_MODELS_GROUPS[ + family as keyof typeof SUPPORTED_MODELS_GROUPS + ].includes(model.trim()); + }) + .at(0) as ModelFamily | undefined; +} + +const SUPPORTED_MODELS = [ + // ...SUPPORTED_MODELS_GROUPS.xai, + // ...SUPPORTED_MODELS_GROUPS.claude, + // ...SUPPORTED_MODELS_GROUPS.google, + ...SUPPORTED_MODELS_GROUPS.groq, + // ...SUPPORTED_MODELS_GROUPS.fireworks, + // ...SUPPORTED_MODELS_GROUPS.openai, + // ...SUPPORTED_MODELS_GROUPS.cerebras, + // ...SUPPORTED_MODELS_GROUPS.cloudflareAI, +]; + +export { SUPPORTED_MODELS, SUPPORTED_MODELS_GROUPS, getModelFamily }; diff --git a/packages/client/package.json b/packages/client/package.json new file mode 100644 index 0000000..6857a1d --- /dev/null +++ b/packages/client/package.json @@ -0,0 +1,57 @@ +{ + "name": "@open-gsio/client", + "type": "module", + "scripts": { + "dev": "bun vite dev", + "build": "bun vite build", + "tests": "vitest run", + "tests:coverage": "vitest run --coverage.enabled=true" + }, + "dependencies": { + "@open-gsio/env": "workspace:*", + "@open-gsio/scripts": "workspace:*", + "@anthropic-ai/sdk": "^0.32.1", + "@chakra-ui/react": "^2.10.6", + "@cloudflare/workers-types": "^4.20241205.0", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.2", + "@types/marked": "^6.0.0", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "chokidar": "^4.0.1", + "framer-motion": "^11.13.1", + "isomorphic-dompurify": "^2.19.0", + "itty-router": "^5.0.18", + "js-cookie": "^3.0.5", + "jsdom": "^24.0.0", + "katex": "^0.16.20", + "lucide-react": "^0.436.0", + "marked": "^15.0.4", + "marked-extended-latex": "^1.1.0", + "marked-footnote": "^1.2.4", + "marked-katex-extension": "^5.1.4", + "mobx": "^6.13.5", + "mobx-react-lite": "^4.0.7", + "mobx-state-tree": "^6.0.1", + "moo": "^0.5.2", + "openai": "^5.0.1", + "qrcode.react": "^4.1.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.4.0", + "react-streaming": "^0.3.44", + "react-textarea-autosize": "^8.5.5", + "shiki": "^1.24.0", + "typescript": "^5.7.2", + "vike": "0.4.193", + "vite": "^6.3.5", + "vite-plugin-pwa": "^1.0.0", + "vitest": "^3.1.4", + "wrangler": "^4.18.0", + "zod": "^3.23.8" + } +} diff --git a/public/android-chrome-192x192.png b/packages/client/public/android-chrome-192x192.png similarity index 100% rename from public/android-chrome-192x192.png rename to packages/client/public/android-chrome-192x192.png diff --git a/public/android-chrome-512x512.png b/packages/client/public/android-chrome-512x512.png similarity index 100% rename from public/android-chrome-512x512.png rename to packages/client/public/android-chrome-512x512.png diff --git a/public/apple-touch-icon.png b/packages/client/public/apple-touch-icon.png similarity index 100% rename from public/apple-touch-icon.png rename to packages/client/public/apple-touch-icon.png diff --git a/public/cfga.min.js b/packages/client/public/cfga.min.js similarity index 100% rename from public/cfga.min.js rename to packages/client/public/cfga.min.js diff --git a/public/code-tokenizer-md.jpg b/packages/client/public/code-tokenizer-md.jpg similarity index 100% rename from public/code-tokenizer-md.jpg rename to packages/client/public/code-tokenizer-md.jpg diff --git a/public/favicon-16x16.png b/packages/client/public/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to packages/client/public/favicon-16x16.png diff --git a/public/favicon-32x32.png b/packages/client/public/favicon-32x32.png similarity index 100% rename from public/favicon-32x32.png rename to packages/client/public/favicon-32x32.png diff --git a/public/favicon.ico b/packages/client/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to packages/client/public/favicon.ico diff --git a/public/general-problem-solver.png b/packages/client/public/general-problem-solver.png similarity index 100% rename from public/general-problem-solver.png rename to packages/client/public/general-problem-solver.png diff --git a/public/me.png b/packages/client/public/me.png similarity index 100% rename from public/me.png rename to packages/client/public/me.png diff --git a/public/reactive-state-machine-4.png b/packages/client/public/reactive-state-machine-4.png similarity index 100% rename from public/reactive-state-machine-4.png rename to packages/client/public/reactive-state-machine-4.png diff --git a/public/reactive_state_machine_5.png b/packages/client/public/reactive_state_machine_5.png similarity index 100% rename from public/reactive_state_machine_5.png rename to packages/client/public/reactive_state_machine_5.png diff --git a/public/rehoboam.png b/packages/client/public/rehoboam.png similarity index 100% rename from public/rehoboam.png rename to packages/client/public/rehoboam.png diff --git a/public/site.webmanifest b/packages/client/public/site.webmanifest similarity index 100% rename from public/site.webmanifest rename to packages/client/public/site.webmanifest diff --git a/scripts/generate_robots_txt.js b/packages/client/scripts/generate_robots_txt.js similarity index 100% rename from scripts/generate_robots_txt.js rename to packages/client/scripts/generate_robots_txt.js diff --git a/scripts/generate_sitemap.js b/packages/client/scripts/generate_sitemap.js similarity index 100% rename from scripts/generate_sitemap.js rename to packages/client/scripts/generate_sitemap.js diff --git a/src/components/BuiltWithButton.tsx b/packages/client/src/components/BuiltWithButton.tsx similarity index 100% rename from src/components/BuiltWithButton.tsx rename to packages/client/src/components/BuiltWithButton.tsx diff --git a/src/components/ThemeSelection.tsx b/packages/client/src/components/ThemeSelection.tsx similarity index 100% rename from src/components/ThemeSelection.tsx rename to packages/client/src/components/ThemeSelection.tsx diff --git a/src/components/WelcomeHome.tsx b/packages/client/src/components/WelcomeHome.tsx similarity index 100% rename from src/components/WelcomeHome.tsx rename to packages/client/src/components/WelcomeHome.tsx diff --git a/src/components/__tests__/ThemeSelection.test.tsx b/packages/client/src/components/__tests__/ThemeSelection.test.tsx similarity index 100% rename from src/components/__tests__/ThemeSelection.test.tsx rename to packages/client/src/components/__tests__/ThemeSelection.test.tsx diff --git a/src/components/__tests__/WelcomeHome.test.tsx b/packages/client/src/components/__tests__/WelcomeHome.test.tsx similarity index 100% rename from src/components/__tests__/WelcomeHome.test.tsx rename to packages/client/src/components/__tests__/WelcomeHome.test.tsx diff --git a/src/components/about/AboutComponent.tsx b/packages/client/src/components/about/AboutComponent.tsx similarity index 100% rename from src/components/about/AboutComponent.tsx rename to packages/client/src/components/about/AboutComponent.tsx diff --git a/src/components/chat/Chat.tsx b/packages/client/src/components/chat/Chat.tsx similarity index 100% rename from src/components/chat/Chat.tsx rename to packages/client/src/components/chat/Chat.tsx diff --git a/src/components/chat/IntermediateStepsComponent.tsx b/packages/client/src/components/chat/IntermediateStepsComponent.tsx similarity index 100% rename from src/components/chat/IntermediateStepsComponent.tsx rename to packages/client/src/components/chat/IntermediateStepsComponent.tsx diff --git a/src/components/chat/input-menu/FlyoutSubMenu.tsx b/packages/client/src/components/chat/input-menu/FlyoutSubMenu.tsx similarity index 100% rename from src/components/chat/input-menu/FlyoutSubMenu.tsx rename to packages/client/src/components/chat/input-menu/FlyoutSubMenu.tsx diff --git a/src/components/chat/input-menu/InputMenu.tsx b/packages/client/src/components/chat/input-menu/InputMenu.tsx similarity index 100% rename from src/components/chat/input-menu/InputMenu.tsx rename to packages/client/src/components/chat/input-menu/InputMenu.tsx diff --git a/src/components/chat/input/ChatInput.tsx b/packages/client/src/components/chat/input/ChatInput.tsx similarity index 100% rename from src/components/chat/input/ChatInput.tsx rename to packages/client/src/components/chat/input/ChatInput.tsx diff --git a/src/components/chat/input/ChatInputSendButton.tsx b/packages/client/src/components/chat/input/ChatInputSendButton.tsx similarity index 100% rename from src/components/chat/input/ChatInputSendButton.tsx rename to packages/client/src/components/chat/input/ChatInputSendButton.tsx diff --git a/src/components/chat/input/ChatInputTextArea.tsx b/packages/client/src/components/chat/input/ChatInputTextArea.tsx similarity index 100% rename from src/components/chat/input/ChatInputTextArea.tsx rename to packages/client/src/components/chat/input/ChatInputTextArea.tsx diff --git a/src/components/chat/input/__tests__/ChatInput.test.tsx b/packages/client/src/components/chat/input/__tests__/ChatInput.test.tsx similarity index 100% rename from src/components/chat/input/__tests__/ChatInput.test.tsx rename to packages/client/src/components/chat/input/__tests__/ChatInput.test.tsx diff --git a/src/components/chat/lib/SupportedModels.ts b/packages/client/src/components/chat/lib/SupportedModels.ts similarity index 100% rename from src/components/chat/lib/SupportedModels.ts rename to packages/client/src/components/chat/lib/SupportedModels.ts diff --git a/src/components/chat/lib/domPurify.ts b/packages/client/src/components/chat/lib/domPurify.ts similarity index 100% rename from src/components/chat/lib/domPurify.ts rename to packages/client/src/components/chat/lib/domPurify.ts diff --git a/src/components/chat/lib/exportConversationAsMarkdown.ts b/packages/client/src/components/chat/lib/exportConversationAsMarkdown.ts similarity index 100% rename from src/components/chat/lib/exportConversationAsMarkdown.ts rename to packages/client/src/components/chat/lib/exportConversationAsMarkdown.ts diff --git a/src/components/chat/messages/ChatMessageContent.tsx b/packages/client/src/components/chat/messages/ChatMessageContent.tsx similarity index 100% rename from src/components/chat/messages/ChatMessageContent.tsx rename to packages/client/src/components/chat/messages/ChatMessageContent.tsx diff --git a/src/components/chat/messages/ChatMessages.tsx b/packages/client/src/components/chat/messages/ChatMessages.tsx similarity index 100% rename from src/components/chat/messages/ChatMessages.tsx rename to packages/client/src/components/chat/messages/ChatMessages.tsx diff --git a/src/components/chat/messages/MessageBubble.tsx b/packages/client/src/components/chat/messages/MessageBubble.tsx similarity index 100% rename from src/components/chat/messages/MessageBubble.tsx rename to packages/client/src/components/chat/messages/MessageBubble.tsx diff --git a/src/components/chat/messages/MessageEditorComponent.tsx b/packages/client/src/components/chat/messages/MessageEditorComponent.tsx similarity index 100% rename from src/components/chat/messages/MessageEditorComponent.tsx rename to packages/client/src/components/chat/messages/MessageEditorComponent.tsx diff --git a/src/components/chat/messages/MessageMarkdown.tsx b/packages/client/src/components/chat/messages/MessageMarkdown.tsx similarity index 100% rename from src/components/chat/messages/MessageMarkdown.tsx rename to packages/client/src/components/chat/messages/MessageMarkdown.tsx diff --git a/src/components/chat/messages/MessageMarkdownRenderer.tsx b/packages/client/src/components/chat/messages/MessageMarkdownRenderer.tsx similarity index 100% rename from src/components/chat/messages/MessageMarkdownRenderer.tsx rename to packages/client/src/components/chat/messages/MessageMarkdownRenderer.tsx diff --git a/src/components/chat/messages/MotionBox.tsx b/packages/client/src/components/chat/messages/MotionBox.tsx similarity index 100% rename from src/components/chat/messages/MotionBox.tsx rename to packages/client/src/components/chat/messages/MotionBox.tsx diff --git a/src/components/chat/messages/UserMessageTools.tsx b/packages/client/src/components/chat/messages/UserMessageTools.tsx similarity index 100% rename from src/components/chat/messages/UserMessageTools.tsx rename to packages/client/src/components/chat/messages/UserMessageTools.tsx diff --git a/src/components/chat/messages/__tests__/MessageBubble.test.tsx b/packages/client/src/components/chat/messages/__tests__/MessageBubble.test.tsx similarity index 100% rename from src/components/chat/messages/__tests__/MessageBubble.test.tsx rename to packages/client/src/components/chat/messages/__tests__/MessageBubble.test.tsx diff --git a/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx b/packages/client/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx similarity index 100% rename from src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx rename to packages/client/src/components/chat/messages/__tests__/MessageEditorComponent.test.tsx diff --git a/src/components/code/CodeBlock.tsx b/packages/client/src/components/code/CodeBlock.tsx similarity index 100% rename from src/components/code/CodeBlock.tsx rename to packages/client/src/components/code/CodeBlock.tsx diff --git a/src/components/code/CodeHighlighter.ts b/packages/client/src/components/code/CodeHighlighter.ts similarity index 100% rename from src/components/code/CodeHighlighter.ts rename to packages/client/src/components/code/CodeHighlighter.ts diff --git a/src/components/connect/ConnectComponent.tsx b/packages/client/src/components/connect/ConnectComponent.tsx similarity index 100% rename from src/components/connect/ConnectComponent.tsx rename to packages/client/src/components/connect/ConnectComponent.tsx diff --git a/src/components/connect/MarkdownEditor.tsx b/packages/client/src/components/connect/MarkdownEditor.tsx similarity index 82% rename from src/components/connect/MarkdownEditor.tsx rename to packages/client/src/components/connect/MarkdownEditor.tsx index 166a5e2..b9f6fc6 100644 --- a/src/components/connect/MarkdownEditor.tsx +++ b/packages/client/src/components/connect/MarkdownEditor.tsx @@ -8,7 +8,7 @@ export const MarkdownEditor = (props: { }) => { return ( - +