chore: update .dockerignore to streamline build artifacts, add new submodules for apps, and enhance ESLint configuration in UI package

This commit is contained in:
Jamie Pine 2025-11-05 23:47:13 -08:00
parent 3c758b9984
commit eabd8ef365
8 changed files with 3652 additions and 12877 deletions

View File

@ -1,73 +1,14 @@
# Build artifacts
target/
**/target/
dist/
**/dist/
# Node modules and frontend
node_modules/
**/node_modules/
.pnpm-store/
apps/desktop/
apps/mobile/
apps/landing/
apps/macos/
apps/ios/
packages/
# Git
.git/
.gitignore
.gitattributes
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
# Documentation (not needed for build)
docs/
*.md
!Cargo.toml
!Cargo.lock
# CI/CD
.github/
.gitlab-ci.yml
# Testing
**/tests/
**/*_test.rs
**/*_bench.rs
# macOS/Windows specific
*.dylib
*.dll
*.exe
*.app
*.dmg
*.msi
# Environment and secrets
.env
.env.*
*.key
*.pem
# Logs
# Ignore build artifacts but keep source
.git
**/.next
**/dist
**/build
target
*.log
logs/
# Temporary files
tmp/
temp/
*.tmp
# Workbench (development notes)
workbench/
# Release artifacts
releases/
# But keep these
!packages
!apps
!pnpm-lock.yaml
!pnpm-workspace.yaml
!package.json

6
.gitmodules vendored
View File

@ -10,3 +10,9 @@
[submodule "docs"]
path = docs
url = https://github.com/spacedriveapp/docs.git
[submodule "apps/landing"]
path = apps/landing
url = https://github.com/spacedriveapp/landing.git
[submodule "apps/api"]
path = apps/api
url = https://github.com/spacedriveapp/api.git

View File

@ -6,17 +6,30 @@ assignee: james
priority: High
tags: [epic, plugins, wasm, extensibility, extensions]
whitepaper: Section 6.7
last_updated: 2025-10-14
last_updated: 2025-11-05
---
## Description
This epic covers the implementation of the WebAssembly (WASM) based extension system. This allows third-party developers to extend Spacedrive's functionality in a secure and sandboxed environment, turning it into a true platform.
This epic covers the implementation of the WebAssembly (WASM) based extension system. Extensions can define custom data models, create AI agents, and integrate seamlessly with Spacedrive's sync, search, and action systems.
**Architecture Clarification (Nov 5, 2025):** Extensions get BOTH:
- Their own database tables for domain models (managed by core, auto-sync)
- Location declarations (user chooses where extension files go)
- Files written to locations are automatically indexed by core VDFS
- Query via core entries table with sidecar filters (no custom query caches)
## Current Status
**Infrastructure:** Core WASM runtime is integrated and compiling. Extension SDK with beautiful `#[extension]` and `#[job]` macros is functional. Test extensions exist and compile to WASM.
**Infrastructure:** Core WASM runtime is integrated and compiling. Extension SDK with `#[extension]` and `#[job]` macros is functional. Test extensions exist and compile to WASM.
**In Progress:** WASM memory interaction helpers, complete host function bridge, and production extensions (Photos, Finance, Email).
**In Progress:**
- Location declaration and management system
- Core VDFS query API for extensions (sidecar filters)
- Complete host function bridge
- Production extensions (Photos, Ledger, Email Archive)
**Reference:** See `core/src/infra/extension/README.md` and `extensions/README.md` for implementation details.
**Reference:**
- `core/src/infra/extension/README.md` - Implementation details
- `workbench/sdk/EXTENSION_SDK_SPECIFICATION_V2.md` - Complete SDK spec
- `workbench/core/extensions/EXTENSION_DATA_STORAGE_PHILOSOPHY.md` - Storage model

1
apps/api Submodule

@ -0,0 +1 @@
Subproject commit bcc967136a6bba9812cabbdecdd058e45ec5f16f

1
apps/landing Submodule

@ -0,0 +1 @@
Subproject commit 3ddfe00970bb6d58bd935030aad32a4de46dd62e

View File

@ -1,7 +1,86 @@
const path = require('node:path');
module.exports = {
extends: [require.resolve('@sd/config/eslint/web.js')],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true
},
ecmaVersion: 12,
sourceType: 'module',
tsconfigRootDir: __dirname,
project: './tsconfig.json'
}
},
plugins: ['react'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
'plugin:tailwindcss/recommended',
'turbo',
'prettier'
],
env: {
browser: true,
node: true
},
rules: {
// TypeScript
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/ban-types': 'off',
// React
'react/display-name': 'off',
'react/prop-types': 'off',
'react/no-unescaped-entities': 'off',
'react/react-in-jsx-scope': 'off',
'react-hooks/rules-of-hooks': 'warn',
'react-hooks/exhaustive-deps': 'warn',
// Tailwind
'tailwindcss/no-custom-classname': 'off',
'tailwindcss/classnames-order': [
'warn',
{
config: path.resolve(path.join(__dirname, './tailwind.config.js'))
}
],
// General
'no-control-regex': 'off',
'no-mixed-spaces-and-tabs': ['warn', 'smart-tabs'],
'turbo/no-undeclared-env-vars': [
'error',
{
cwd: path.resolve(path.join(__dirname, '..', '..'))
}
],
// Custom routing rules
'no-restricted-syntax': [
'error',
{
selector: "CallExpression[callee.name='useParams']",
message: 'useParams is illegal, use useZodRouteParams!'
},
{
selector: "CallExpression[callee.name='useSearchParams']",
message: 'useSearchParams is illegal, use useZodSearchParams!'
}
]
},
settings: {
react: {
version: 'detect'
},
tailwindcss: {
callees: ['classnames', 'clsx', 'ctl', 'cva', 'tw', 'twStyle'],
tags: ['tw', 'twStyle']
}
},
ignorePatterns: ['dist', '**/*.js', '**/*.json', 'node_modules', 'public', 'vite.config.ts']
};

View File

@ -50,7 +50,6 @@
"devDependencies": {
"@babel/core": "^7.24.0",
"@headlessui/tailwindcss": "^0.2.0",
"@sd/config": "workspace:*",
"@storybook/types": "^8.0.1",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.10",

16331
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff