Skip to content

Atomic assistant #951 #1055

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 16 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ _Status: alpha. [Breaking changes](CHANGELOG.md) are expected until 1.0._
- 🔧 **Custom data models**: create your own classes, properties and schemas using the built-in Ontology Editor. All data is verified and the models are sharable using [Atomic Schema](https://docs.atomicdata.dev/schema/intro.html)
- ⚙️ **Restful API**, with [JSON-AD](https://docs.atomicdata.dev/core/json-ad.html) responses.
- 🔎 **Full-text search** with fuzzy search and various operators, often <3ms responses. Powered by [tantivy](https://github.com/quickwit-inc/tantivy).
- ✨ **AI** with [MCP](https://modelcontextprotocol.io/) support, use any model via OpenRouter or host your own with Ollama.
- 🗄️ **Tables**, with strict schema validation, keyboard support, copy / paste support. Similar to Airtable.
- 📄 **Documents**, collaborative, rich text, similar to Google Docs / Notion.
- 💬 **Group chat**, performant and flexible message channels with attachments, search and replies.
Expand Down
28 changes: 18 additions & 10 deletions browser/data-browser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,28 @@
"@dnd-kit/utilities": "^3.2.2",
"@emoji-mart/react": "^1.1.1",
"@emotion/is-prop-valid": "^1.3.1",
"@modelcontextprotocol/sdk": "^1.13.3",
"@oddbird/css-anchor-positioning": "^0.6.1",
"@openrouter/ai-sdk-provider": "^0.4.3",
"@radix-ui/react-popover": "^1.1.2",
"@radix-ui/react-scroll-area": "^1.2.0",
"@radix-ui/react-tabs": "^1.1.1",
"@tanstack/react-router": "^1.95.1",
"@tiptap/extension-image": "^2.9.1",
"@tiptap/extension-link": "^2.9.1",
"@tiptap/extension-placeholder": "^2.9.1",
"@tiptap/extension-typography": "^2.9.1",
"@tiptap/pm": "^2.9.1",
"@tiptap/react": "^2.9.1",
"@tiptap/starter-kit": "^2.9.1",
"@tiptap/suggestion": "^2.9.1",
"@tiptap/extension-file-handler": "^2.25.0",
"@tiptap/extension-image": "^2.11.7",
"@tiptap/extension-link": "^2.11.7",
"@tiptap/extension-mention": "^2.11.7",
"@tiptap/extension-placeholder": "^2.11.7",
"@tiptap/extension-typography": "^2.11.7",
"@tiptap/pm": "^2.11.7",
"@tiptap/react": "^2.11.7",
"@tiptap/starter-kit": "^2.11.7",
"@tiptap/suggestion": "^2.11.7",
"@tomic/react": "workspace:*",
"ai": "^4.3.16",
"downshift": "^9.0.9",
"emoji-mart": "^5.6.0",
"ollama-ai-provider": "^1.2.0",
"polished": "^4.3.1",
"prismjs": "^1.29.0",
"query-string": "^7.1.3",
Expand All @@ -50,14 +58,14 @@
"styled-components": "^6.1.13",
"stylis": "4.3.0",
"tippy.js": "^6.3.7",
"tiptap-markdown": "^0.8.10"
"tiptap-markdown": "^0.8.10",
"zod": "^3.24.2"
},
"devDependencies": {
"@tanstack/router-devtools": "^1.95.1",
"@types/prismjs": "^1.26.5",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"@types/react-pdf": "^7.0.0",
"@types/react-window": "^1.8.8",
"@vitejs/plugin-react": "^4.3.4",
"babel-plugin-react-compiler": "19.1.0-rc.2",
Expand Down
1 change: 0 additions & 1 deletion browser/data-browser/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { registerHandlers } from './handlers';
import { getAgentFromLocalStorage } from './helpers/agentStorage';
import { registerCustomCreateActions } from './components/forms/NewForm/CustomCreateActions';
import { serverURLStorage } from './helpers/serverURLStorage';

import type { JSX } from 'react';
import { RouterProvider } from '@tanstack/react-router';
import { router } from './routes/Router';
Expand Down
70 changes: 39 additions & 31 deletions browser/data-browser/src/Providers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import CrashPage from './views/CrashPage';
import { AppSettingsContextProvider } from './helpers/AppSettings';
import { NavStateProvider } from './components/NavState';
import { Toaster } from './components/Toaster';
import { McpServersProvider } from './components/AI/MCP/useMcpServers';

// Setup bugsnag for error handling, but only if there's an API key
const ErrBoundary = window.bugsnagApiKey
Expand All @@ -27,6 +28,11 @@ const ErrBoundary = window.bugsnagApiKey
// This implements the default behavior from styled-components v5
const shouldForwardProp: ShouldForwardProp<'web'> = (propName, target) => {
if (typeof target === 'string') {
// @emotion/is-prop-valid does not support popover, so we need to forward it manually.
if (propName === 'popover') {
return true;
}

// For HTML elements, forward the prop if it is a valid HTML attribute
return isPropValid(propName);
}
Expand All @@ -39,37 +45,39 @@ export const Providers: React.FC<React.PropsWithChildren> = ({ children }) => {
return (
<NavStateProvider>
<AppSettingsContextProvider>
<ControlLockProvider>
<HotKeysWrapper>
<StyleSheetManager shouldForwardProp={shouldForwardProp}>
<ThemeWrapper>
<GlobalStyle />
<ErrBoundary FallbackComponent={CrashPage}>
{/* Default form validation provider. Does not do anything on its own but will make sure useValidation works without context*/}
<FormValidationContextProvider
onValidationChange={() => undefined}
>
<Toaster />
<MetaSetter />
<DropdownContainer>
<DialogGlobalContextProvider>
<PopoverContainer>
<DropdownContainer>
<NewResourceUIProvider>
<SkipNav />
<NavWrapper>{children}</NavWrapper>
</NewResourceUIProvider>
</DropdownContainer>
</PopoverContainer>
<NetworkIndicator />
</DialogGlobalContextProvider>
</DropdownContainer>
</FormValidationContextProvider>
</ErrBoundary>
</ThemeWrapper>
</StyleSheetManager>
</HotKeysWrapper>
</ControlLockProvider>
<McpServersProvider>
<ControlLockProvider>
<HotKeysWrapper>
<StyleSheetManager shouldForwardProp={shouldForwardProp}>
<ThemeWrapper>
<GlobalStyle />
<ErrBoundary FallbackComponent={CrashPage}>
{/* Default form validation provider. Does not do anything on its own but will make sure useValidation works without context*/}
<FormValidationContextProvider
onValidationChange={() => undefined}
>
<Toaster />
<MetaSetter />
<DropdownContainer>
<DialogGlobalContextProvider>
<PopoverContainer>
<DropdownContainer>
<NewResourceUIProvider>
<SkipNav />
<NavWrapper>{children}</NavWrapper>
</NewResourceUIProvider>
</DropdownContainer>
</PopoverContainer>
<NetworkIndicator />
</DialogGlobalContextProvider>
</DropdownContainer>
</FormValidationContextProvider>
</ErrBoundary>
</ThemeWrapper>
</StyleSheetManager>
</HotKeysWrapper>
</ControlLockProvider>
</McpServersProvider>
</AppSettingsContextProvider>
</NavStateProvider>
);
Expand Down
Loading
Loading