super-productivity/packages/plugin-dev/sync-md
Johannes Millan f329a60079 fix(sync-md): fix subtask cleanup when tasks change parents
- Add tracking for tasks that change parents during sync operations
- Clean up old parent's subTaskIds when tasks are moved to different parents or root level
- Group cleanup operations by parent to prevent overwriting updates
- Add comprehensive test suite for subtask cleanup scenarios

This fixes the issue where tasks moved from being subtasks to root-level tasks
would still be referenced in their old parent's subTaskIds array, causing
task duplication in the UI.

Resolves the replication error where subtasks appeared both as root tasks
and as children of their original parent.
2025-07-11 17:00:30 +02:00
..
docs feat(sync-md): new approach and make it work better 2025-07-07 18:39:14 +02:00
scripts feat(syncMd): update build configuration and archive old implementation 2025-07-10 14:57:08 +02:00
src fix(sync-md): fix subtask cleanup when tasks change parents 2025-07-11 17:00:30 +02:00
.eslintrc.json feat(syncMd): add comprehensive test suite and development configuration 2025-07-10 14:56:19 +02:00
.gitignore feat(sync-md): new approach and make it work better 2025-07-07 18:39:14 +02:00
.prettierrc.json feat(syncMd): add comprehensive test suite and development configuration 2025-07-10 14:56:19 +02:00
jest.config.cjs feat(syncMd): add comprehensive test suite and development configuration 2025-07-10 14:56:19 +02:00
jest.config.js.bak fix(sync-md): fix failing tests after parser changes 2025-07-10 19:17:41 +02:00
package-lock.json fix(sync-md): remove extra blank lines between tasks in markdown output 2025-07-10 18:46:01 +02:00
package.json fix(sync-md): remove extra blank lines between tasks in markdown output 2025-07-10 18:46:01 +02:00
README.md feat(sync-md): new approach and make it work better 2025-07-07 18:39:14 +02:00
tsconfig.json feat(sync-md): new approach and make it work better 2025-07-07 18:39:14 +02:00
vite.config.ts feat(sync-md): new approach and make it work better 2025-07-07 18:39:14 +02:00

Sync-MD Plugin v2.0.0

A SuperProductivity plugin that enables bidirectional synchronization between markdown files and project tasks.

Features

  • Bidirectional Sync: Keep markdown files and SuperProductivity tasks in sync
  • Batch API Integration: Efficient bulk operations for better performance
  • Smart Debouncing: 10-second delays prevent conflicts during active editing
  • Real-time Monitoring: File system watching with automatic sync triggers
  • Task Hierarchy: Preserves parent-child relationships in markdown
  • Modern Architecture: Built with Solid.js UI and modular TypeScript

Quick Start

# Install dependencies
npm install

# Development mode with hot reload
npm run dev:watch

# Build for production
npm run build

# Package as plugin
npm run package

Architecture

Core Components

  • src/fileWatcherBatch.ts - Main sync engine with batch API support
  • src/background.ts - Plugin lifecycle and message handling
  • src/App.tsx - Solid.js UI for configuration
  • src/utils/ - Reusable utilities (parser, debouncer, file ops)

Build System

  • build-proper.js - Main build script
  • build-plugin.js - Package as distributable ZIP
  • watch-and-build.js - Development with auto-rebuild

Configuration

{
  projectId: "project-uuid",
  filePath: "/path/to/tasks.md",
  syncDirection: "fileToProject" | "projectToFile" | "bidirectional"
}

Markdown Format

- [ ] Parent task
  - [x] <!-- sp:task-id --> Completed subtask
  - [ ] Pending subtask

Tasks are linked using HTML comments containing unique IDs.

Testing

# Run all tests
npm test

# Watch mode
npm run test:watch

# Coverage report
npm run test:coverage

Documentation

For detailed documentation, see:

Cleanup

To remove old/unnecessary files after updating:

chmod +x cleanup.sh
./cleanup.sh