82 Commits

Author SHA1 Message Date
Jamie Pine
9b5d0b6020 Refactor: Replace device_id with volume_id in entries and locations
This commit updates the data model to replace the `device_id` field with `volume_id` in the `entries` and `locations` tables. The change allows entries to inherit ownership from their associated volumes, simplifying ownership management during volume transfers. Additionally, migrations have been added to facilitate this transition, ensuring that existing data is correctly updated and indexed. The codebase has been adjusted to reflect these changes across various modules, including sync and query functionalities.
2026-01-04 17:29:46 -08:00
Jamie Pine
edf22c56d9 feat(indexing): enhance DatabaseAdapter and ChangeDetector to support device_id
- Added device_id parameter to DatabaseAdapter and DatabaseAdapterForJob for improved context handling.
- Updated ChangeDetector to utilize device_id when creating persistence instances, ensuring accurate indexing behavior.
- Refactored related tests to verify correct parent-child relationships and prevent duplicate entries during folder moves.
2025-12-31 12:54:58 -08:00
Jamie Pine
ff25fab772 refactor(tests): enhance fixture generation and update test suite structure
- Updated the fixture generation process to write to a temporary directory by default, improving test isolation and following best practices.
- Added instructions for regenerating source fixtures when needed, enhancing developer experience.
- Refactored the test suite structure to utilize a more flexible argument handling mechanism, allowing for easier addition of new tests.
- Removed deprecated test configurations and streamlined the test suite definitions for clarity and maintainability.
2025-12-30 22:06:53 -08:00
Jamie Pine
d255ef185e refactor(tests): implement TestDataDir and SnapshotManager for improved test data handling
- Introduced TestDataDir for managing test data directories with automatic cleanup and optional snapshot support, ensuring all test data is created in the system temp directory.
- Added SnapshotManager to facilitate capturing snapshots of test state for post-mortem debugging, with platform-specific storage locations.
- Updated various integration tests to utilize the new TestDataDir structure, enhancing consistency and determinism in test execution.
- Revised documentation to reflect new conventions for test data management and snapshot usage.
2025-12-30 15:50:07 -08:00
Jamie Pine
2881117e00 feat(tests): update testing paths for deterministic integration tests
- Modified test data paths in various integration tests to use the Spacedrive source code instead of user directories, ensuring consistent and deterministic test results across environments.
- Updated comments and documentation to reflect the new testing approach and clarify the purpose of using project source code for testing.
- Enhanced the GitHub Actions workflow to skip Rust toolchain setup on macOS self-hosted runners, assuming Rust is pre-installed.
2025-12-30 13:05:19 -08:00
Cursor Agent
c998aae88a Add documentation for TypeScript integration testing
Co-authored-by: ijamespine <ijamespine@me.com>
2025-12-25 15:52:42 +00:00
Jamie Pine
5b420b09d4 Add filesystem watcher testing guidelines to documentation
- Introduced a new section on testing filesystem watcher functionality, detailing critical setup steps.
- Added instructions for enabling the watcher in test configurations and using home directory paths on macOS.
- Included best practices for ephemeral and persistent location watching, as well as event collection.
- Provided examples for expected event types and assertions to enhance clarity for developers testing filesystem events.
2025-12-23 08:42:07 -08:00
Jamie Pine
96c08fa3a1 Enhance file operations and introduce statistics listener service
- Updated the TODO list to clarify the quick preview reporting issue.
- Enhanced the Tauri app's menu to include custom clipboard operations (cut, copy, paste) with appropriate state management.
- Introduced a new `statistics_listener` service to manage per-library statistics recalculation based on resource changes, improving performance and responsiveness.
- Added configuration options for enabling/disabling the statistics listener in the application settings.
- Refactored event handling in the job manager to improve logging and status monitoring.
- Updated tests to include the new statistics listener functionality and ensure proper event collection during file operations.
2025-12-23 08:36:42 -08:00
Jamie Pine
5659e85c09 Update subproject commits and enhance content identity UUID generation
- Marked subproject commits as dirty for api, ios, macos, and workbench.
- Updated content identity UUID generation to be globally deterministic from content_hash only, enabling cross-device and cross-library deduplication.
- Refactored related documentation to reflect changes in UUID generation logic.
- Added new default group creation for Devices and Tags in LibraryManager.
- Improved keyboard navigation and selection handling in Explorer component.
2025-12-08 22:52:28 -08:00
Jamie Pine
337a284e96 Enhance file operation handling and add sound effects
- Introduced a new File Operation Modal for interactive file copy/move operations with conflict resolution options.
- Integrated sound effects for file operations, including copy and startup sounds.
- Updated the Explorer component to utilize the new modal for drag-and-drop file operations.
- Refactored job management hooks to unify job data handling and improve performance.
- Enhanced documentation for the File Operation Modal and sound effects integration.
2025-12-08 21:15:00 -08:00
Jamie Pine
57209a8085 Rename DB writer to DatabaseStorage
- Rename indexing backend: DBWriter to DatabaseStorage
- Replace EphemeralWriter with MemoryAdapter across watcher and
  ephemeral components
- Update module paths and imports in core indexing code, job, and
  persistence layers to use DatabaseStorage and MemoryAdapter
- Update docs to reflect new names
- (DatabaseStorage, MemoryAdapter)
2025-12-08 17:13:52 -08:00
Jamie Pine
3e49f1de10 comments 2025-12-08 16:45:39 -08:00
Jamie Pine
b4024c860e Mobile app in React Native
+ validation support for Actions
2025-12-05 15:16:41 -08:00
Jamie Pine
dbcfcb3c56 Add Sync Events Export CLI and Protocol Support
- Add SyncEventsArgs to export sync events from the CLI - Wire
SyncCmd::Events and implement export_events to fetch - format and write
results - Implement JSON, SQL, and Markdown exporters - with optional
device data in the output - Extend protocol with EventLogRequest and
EventLogResponse - Enable LogSyncHandler to handle event log requests
and return logs - Expose log_handler from BackfillManager for event
logging - Update docs with CLI examples and protocol overview
2025-12-03 21:58:29 -08:00
Jamie Pine
a84ccadfa9 sync event log 2025-12-03 21:41:15 -08:00
Jamie Pine
40d05fcec8 feat: add cloud credential entity and migration 2025-12-03 18:00:43 -08:00
Jamie Pine
f3dbd9cb95 Add task tracking docs and interface tasks 2025-12-02 15:10:50 -08:00
Jamie Pine
e3ba15632f Overhaul pairing docs 2025-12-02 06:02:16 -08:00
Jamie Pine
d7624349c2 Improve documentation for api, data model, events, library sync and
locations
2025-12-02 05:52:07 -08:00
Jamie Pine
ace39839a2 Improve subscription handling and RPC reliability
- Flush RPC writer after sending responses to ensure delivery - Add
cancellation guard in useNormalizedQuery to avoid leaks - Make
SubscriptionManager concurrency-safe: deduplicate in-flight subscribes -
Track pending subscriptions to avoid races and add centralized cleanup
logic - Introduce createSubscription helper and centralized cleanup
logic - Update docs with Sync State Machine, HLC update algorithm, retry
queue, metrics, and protocol messages - Reflect new config defaults for
timeouts and intervals
2025-11-27 12:48:50 -08:00
Jamie Pine
c7eff9589d refactor: update main.rs and backfill.rs for improved error handling 2025-11-26 11:09:00 -08:00
Jamie Pine
35af15aefc Add deterministic UUIDs for library defaults
- Introduce deterministic UUID generation for library defaults (spaces,
groups, and items) - Add post-backfill rebuild support in the sync
registry (with_rebuild) - Export BatchFkMapResult type via the sync API
- Track per-peer RTT latency via SyncMetricsCollector integration - Use
deterministic IDs when creating default space and related items in
LibraryManager
2025-11-26 08:19:24 -08:00
Jamie Pine
35263791cf Revert to November 16 baseline for realtime sync
- Revert to the November 16 baseline for realtime sync - Use a single
state watermark and drop per-resource watermarks, counts, and hashes
from watermark messages - Revert DataAvailableNotification handling and
the updated FK filtering approach in favor of NULL-based handling - Add
registry helper get_model_type_by_table to map tables to models for FK
resolution - Update mocks and tests to reflect the baseline (linkage
stats in summary) - Fix test infrastructure: remove block_in_place usage
and minor imports - Remove obsolete test fixture file
2025-11-25 15:42:25 -08:00
Jamie Pine
bcab31462e Add Spacedrive server with embedded daemon
- Introduce an Axum-based HTTP server with an embedded daemon and a
JSON-RPC proxy to the daemon via a Unix socket - Bundle web UI assets
into the server with an assets feature and a build.rs that builds the
frontend using pnpm - Add multi-stage Dockerfile, docker-compose.yml,
and a Distroless runtime image - Provide TrueNAS deployment support with
a build script and setup guide - Add a new web UI (apps/web) with a
Vite-based dev/build flow and a web platform shim for the frontend -
Implement server logic (apps/server/src/main.rs): health, auth, /rpc
proxy and data-dir/socket-path wiring - Include server-specific
Cargo.toml and a comprehensive server README - Add architecture and
memory-focused docs to guide usage and design - Minor core tweak:
simplify location/resource event emission in
core/src/location/manager.rs to align with new flow - Tauri app: adjust
menus to add an Edit submenu and remove unused items
2025-11-23 11:01:01 -08:00
Jamie Pine
ef25390441 feat: add unique bytes tracking and cache refresh functionality for volumes
- Introduced a new `unique_bytes` field in the volume model to track deduplicated content size.
- Implemented a volume refresh action to recalculate unique bytes for all volumes owned by the device, emitting a cache refresh event to invalidate frontend caches.
- Updated the storage overview component to display unique bytes and other volume statistics.
- Enhanced the event system to handle cache invalidation events, ensuring real-time updates across the application.
- Added necessary migrations and database updates to support the new volume tracking features.
2025-11-17 23:37:48 -08:00
Jamie Pine
ddcefe2495 docs 2025-11-14 21:40:49 -08:00
James Pine
f7d7468bce remove submodules 2025-11-14 21:31:21 -08:00
Jamie Pine
d4700e4c43 docs 2025-10-12 23:10:05 -07:00
Jamie Pine
0cd4dad7e8 docs 2025-10-12 03:30:22 -07:00
Jamie Pine
a33ee63361 cleanup 2025-10-11 19:28:52 -07:00
Jamie Pine
f5e3465b75 move docs 2025-10-11 10:53:17 -07:00
Jamie Pine
94a52dd2df cleanup 2025-10-11 08:48:11 -07:00
Jamie Pine
a5c9717dcb modularize photos extension and fix all errors 2025-10-11 05:32:47 -07:00
Jamie Pine
37772b7e2c docs: Remove Agent Manager Design Document and Update Whitepaper
- Deleted the Agent Manager Design document to streamline documentation and focus on the new extension-based agent architecture.
- Updated the whitepaper to reflect the transition to an extension-based agent architecture, detailing the capabilities of specialized AI agents implemented as WASM extensions.
- Revised sections to emphasize the event-driven processing, memory systems, and safety mechanisms of the new agent architecture.
- Enhanced clarity on the integration of agents within the VDFS and their roles in proactive file management and user assistance.
2025-10-11 01:21:36 -07:00
Jamie Pine
6266c5f081 feat: Deprecate leader device argument and enhance sync service with backfill manager
- Marked the `leader` argument in `SetupArgs` as deprecated, clarifying its usage.
- Introduced a `backfill_manager` to the `SyncService`, enabling automatic orchestration of initial sync processes.
- Enhanced the `run_sync_loop` method to manage backfill attempts and periodic maintenance tasks, improving overall sync reliability.
- Updated the `MockTransportPeer` to support request/response handling for backfill operations, ensuring seamless data retrieval during synchronization.
2025-10-10 00:06:36 -07:00
Jamie Pine
8c868b41c7 refactor: Enhance entry and tag models for improved JSON deserialization and sync capabilities
- Refactored the entry model to extract fields from JSON instead of direct deserialization, allowing for better error handling and validation of incoming data.
- Introduced a helper function to streamline field extraction, ensuring all required fields are present before processing.
- Updated the tag model to similarly extract fields from JSON, enhancing its robustness during synchronization.
- Improved the handling of optional fields in both models, ensuring that missing data is managed gracefully.
- Removed the obsolete ENTRY_DIRECTORY_PATH_SUMMARY.md and ENTRY_PATH_SYNC_ANALYSIS.md files, consolidating documentation for clarity.
2025-10-09 16:42:17 -07:00
Jamie Pine
8b1476af5d feat: Introduce automatic foreign key mapping for syncable models
- Added a new `foreign_key_mappings` method to the Syncable trait, allowing models to declare their foreign key relationships for automatic UUID conversion during synchronization.
- Implemented the `to_sync_json` method to utilize the new FK mappings, enabling seamless conversion of local integer IDs to UUIDs before syncing.
- Updated the entry and location models to include foreign key mappings, enhancing their synchronization capabilities.
- Enhanced the `apply_state_change` method to leverage the generic mapping logic, simplifying the implementation for models with foreign keys.
- Introduced comprehensive documentation on the new FK mapping system and its usage across models.
2025-10-09 15:01:31 -07:00
Jamie Pine
28e3ee443d feat: Enhance sync functionality by adding sync fields to devices and implementing migration
- Added `sync_enabled` and `last_sync_at` fields to the device model to support synchronization capabilities.
- Created a migration script to update the devices table, consolidating sync-related data.
- Updated various components to ensure sync is enabled by default for new devices.
- Removed the obsolete sync partners table, streamlining the sync architecture.
- Introduced comprehensive sync integration tests to validate the new functionality and ensure robust performance.
2025-10-09 08:48:23 -07:00
Jamie Pine
10110fd710 feat: Implement automatic dependency resolution for syncable models
- Added `sync_depends_on` method to the Syncable trait, allowing models to declare their dependencies for synchronization.
- Updated device, location, entry, and tag models to specify their dependencies, facilitating automatic computation of sync order.
- Enhanced backfill process to respect model dependencies, preventing foreign key violations during synchronization.
- Improved documentation to reflect the new dependency graph and its benefits for model synchronization.
2025-10-09 07:28:45 -07:00
Jamie Pine
f8ad1c5d16 cleanup docs 2025-10-09 03:56:26 -07:00
Jamie Pine
2bac0d3226 feat: Integrate WASM extension system into Spacedrive
- Implemented a complete WASM extension framework, enabling secure, sandboxed plugins.
- Added core components including `PluginManager`, `host_functions`, and `permissions` for managing the lifecycle and security of extensions.
- Integrated Wasmer runtime for executing WASM modules, enhancing the platform's extensibility.
- Developed a demo extension showcasing the new API, significantly reducing boilerplate code and improving developer experience.
- Updated documentation to reflect the new architecture and provide guidance for extension development.
- Prepared for testing and validation of the extension system, marking a significant step towards a robust plugin ecosystem.
2025-10-09 01:34:04 -07:00
Jamie Pine
4ade103d38 feat: Complete implementation of leaderless hybrid sync system
- Finalized the core synchronization infrastructure, enabling device-independent writes without leader checks.
- Implemented critical components including `TransactionManager`, `SyncProtocolHandler`, and `PeerSync` with enhanced broadcast capabilities.
- Achieved full message routing for state and shared changes, ensuring robust error handling and logging.
- Registered new models in the async-safe registry, facilitating state-based and log-based synchronization.
- Documented implementation progress and architecture changes, highlighting the transition to a leaderless model.
- Prepared for integration testing with remaining tasks outlined for backfill and retry queue implementation.
2025-10-09 00:03:27 -07:00
Jamie Pine
a738a21e04 docs 2025-10-08 22:10:29 -07:00
Jamie Pine
70b7fc53a6 feat: Implement state and shared change application for location and tag models
- Added `apply_state_change` method to the `location` model for idempotent state-based replication, allowing device-owned data to be synchronized without conflicts.
- Introduced `apply_shared_change` method in the `tag` model to handle shared resources with union merge conflict resolution, preserving tags with the same name in different contexts.
- Enhanced documentation to clarify the synchronization strategies for device-owned and shared models, including error handling and usage examples.
- Updated tests to validate the new functionality and ensure correct behavior during synchronization processes.
2025-10-08 20:22:14 -07:00
Jamie Pine
95295b8303 refactor: Transition to leaderless hybrid sync architecture
- Removed leadership-related components from the sync infrastructure, including `LeadershipManager` and `sync_leadership` fields across various models.
- Implemented a new peer-to-peer sync model utilizing Hybrid Logical Clocks (HLC) for shared resources and state-based sync for device-owned data.
- Updated the `Syncable` trait and related modules to reflect the new architecture, ensuring seamless integration of state and log-based synchronization.
- Introduced `PeerLog` for managing device-specific changes and `PeerSync` for handling synchronization in the leaderless environment.
- Revised documentation to outline the new sync architecture and its implications for device synchronization, emphasizing the benefits of a leaderless approach.
2025-10-08 19:18:23 -07:00
Jamie Pine
e66e3befdd feat: Introduce Leader Removal Checklist and update sync documentation
- Added a comprehensive checklist for removing leader-related code in the transition to a leaderless hybrid sync model.
- Documented necessary changes across core infrastructure, service layer, library management, and network protocols to facilitate the removal of leadership components.
- Updated sync documentation to reflect the new architecture, emphasizing the leaderless approach and its implications for device synchronization.
- Included migration strategies and terminology updates to ensure clarity in the transition process.
2025-10-08 11:50:48 -07:00
Jamie Pine
c478b40c1a feat: Revise library sync architecture to leaderless hybrid model
- Updated the library sync system to utilize a leaderless hybrid model, enhancing real-time synchronization of shared resources.
- Implemented state-based sync for device-owned data and log-based sync with Hybrid Logical Clocks (HLC) for shared resources.
- Revised documentation to reflect architectural changes, including the removal of leader election and the introduction of per-device sync logs.
- Enhanced conflict resolution strategies using HLC for shared metadata, ensuring deterministic merging and consistency across devices.
- Updated implementation tasks and acceptance criteria for various components to align with the new architecture.
2025-10-08 11:15:52 -07:00
Jamie Pine
08adba6404 feat: Implement sync infrastructure with leader election and transaction management
- Introduced a comprehensive sync infrastructure, including a `Syncable` trait for models, enabling automatic logging of changes in a dedicated sync log database.
- Added `LeadershipManager` for managing leader election and lease tracking, ensuring reliable synchronization across devices.
- Implemented `TransactionManager` to handle atomic writes and sync logging, enhancing data integrity during state changes.
- Created a new `sync` module with necessary components such as `SyncLogDb`, `SyncLogEntry`, and sync protocol handlers for efficient communication between leader and follower devices.
- Developed integration tests to validate the sync functionality and ensure robust performance across various scenarios.
2025-10-08 06:35:28 -07:00
Jamie Pine
2216dbe120 cleanup docs 2025-10-08 04:19:14 -07:00
Jamie Pine
0f0471b978 feat: Add index integrity verification command to CLI
- Introduced `index verify` command to perform comprehensive integrity checks on the Spacedrive index.
- Implemented functionality to compare filesystem state with database entries, reporting discrepancies such as missing files, stale entries, and metadata mismatches.
- Added detailed output options for verification results, including a summary report of findings.
- Created associated input and output types for verification actions, enhancing the overall integrity management of the indexing system.
- Documented usage and examples in the CLI documentation for user guidance.
2025-10-08 03:50:38 -07:00