diff --git a/.dockerignore b/.dockerignore index cdbeb2d78..c4e34a34b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -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 diff --git a/.gitmodules b/.gitmodules index 6377fd2b4..6c8b2d24e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/.tasks/PLUG-000-wasm-plugin-system.md b/.tasks/PLUG-000-wasm-plugin-system.md index ce8fac363..4ddc04a96 100644 --- a/.tasks/PLUG-000-wasm-plugin-system.md +++ b/.tasks/PLUG-000-wasm-plugin-system.md @@ -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 diff --git a/apps/api b/apps/api new file mode 160000 index 000000000..bcc967136 --- /dev/null +++ b/apps/api @@ -0,0 +1 @@ +Subproject commit bcc967136a6bba9812cabbdecdd058e45ec5f16f diff --git a/apps/landing b/apps/landing new file mode 160000 index 000000000..3ddfe0097 --- /dev/null +++ b/apps/landing @@ -0,0 +1 @@ +Subproject commit 3ddfe00970bb6d58bd935030aad32a4de46dd62e diff --git a/packages/ui/.eslintrc.js b/packages/ui/.eslintrc.js index 615ceae2b..4f33c6208 100644 --- a/packages/ui/.eslintrc.js +++ b/packages/ui/.eslintrc.js @@ -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'] }; diff --git a/packages/ui/package.json b/packages/ui/package.json index d6098abd9..4c977c532 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b05918477..cff67e6fd 100644 Binary files a/pnpm-lock.yaml and b/pnpm-lock.yaml differ