superproductivity-mcp 1.2.6.dev6__tar.gz → 1.2.6.dev7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/PKG-INFO +1 -1
  2. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/plugin/manifest.json +1 -1
  3. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/plugin/plugin.js +8 -20
  4. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/pyproject.toml +1 -1
  5. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/build.yml +0 -0
  6. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/publish-dev.yml +0 -0
  7. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/publish.yml +0 -0
  8. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/release.yml +0 -0
  9. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/version-gate.yml +0 -0
  10. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.gitignore +0 -0
  11. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.mcp.json.example +0 -0
  12. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/.mise.toml +0 -0
  13. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/LICENSE.txt +0 -0
  14. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/README.md +0 -0
  15. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/build-plugin.sh +0 -0
  16. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/plans/2026-04-29-packaging-distribution.md +0 -0
  17. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/plans/2026-04-30-gitflow-ci.md +0 -0
  18. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/specs/2026-04-29-gitflow-ci-design.md +0 -0
  19. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/specs/2026-04-29-packaging-distribution-design.md +0 -0
  20. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/plugin/index.html +0 -0
  21. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/__init__.py +0 -0
  22. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/__main__.py +0 -0
  23. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/server.py +0 -0
  24. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/tests/__init__.py +0 -0
  25. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/tests/test_mcp_logic.py +0 -0
  26. {superproductivity_mcp-1.2.6.dev6 → superproductivity_mcp-1.2.6.dev7}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superproductivity-mcp
3
- Version: 1.2.6.dev6
3
+ Version: 1.2.6.dev7
4
4
  Summary: Super Productivity MCP server for Claude Desktop integration
5
5
  Project-URL: Homepage, https://github.com/ben-elliot-nice/superproductivity-mcp
6
6
  License-File: LICENSE.txt
@@ -2,7 +2,7 @@
2
2
  "id": "sp-mcp-bridge",
3
3
  "name": "MCP Bridge",
4
4
  "description": "Bridge between Super Productivity and MCP (Model Context Protocol) servers for Claude Desktop integration",
5
- "version": "1.2.6.dev6",
5
+ "version": "1.2.6.dev7",
6
6
  "manifestVersion": 1,
7
7
  "author": "Super Productivity Team",
8
8
  "homepage": "https://github.com/johannesjo/super-productivity",
@@ -485,32 +485,20 @@ class MCPBridgePlugin {
485
485
 
486
486
  case 'addTask':
487
487
  if (command.data.parentId) {
488
- // SP's addTask double-writes when parentId is supplied at creation time.
489
- // Strategy: create WITHOUT parentId, then set parentId via updateTask (hides
490
- // child from root), then add to parent's subTaskIds (produces nested display).
491
488
  const { parentId, title, ...rest } = command.data;
492
- // Strip SP scheduling/tag syntax from title at creation if present, to prevent
493
- // SP from parsing @project/#tag/+parent during addTask. Restore via update.
489
+ // Strip SP scheduling/tag syntax (@, #, +) from title at creation to prevent
490
+ // SP parsing it during addTask. Restore via a separate updateTask on title only.
494
491
  const hasSyntax = /[@#+]/.test(title);
495
492
  const createTitle = hasSyntax
496
493
  ? title.replace(/@\w+/g, '').replace(/#\w+/g, '').replace(/\+\w+/g, '').trim()
497
494
  : title;
498
- // Create without parentId to avoid SP's addTask double-write bug.
499
495
  await this.log(`Creating subtask under ${parentId}`, 'debug');
500
- const subtaskId = await PluginAPI.addTask({ ...rest, title: createTitle });
501
- // Step 1: restore title syntax if stripped, and set parentId via updateTask.
502
- // Setting parentId via updateTask (not addTask) avoids the double-write bug
503
- // while still hiding the child from SP's root list.
504
- const updatePayload = hasSyntax ? { parentId, title } : { parentId };
505
- await PluginAPI.updateTask(subtaskId, updatePayload);
506
- // Step 2: add child to parent's subTaskIds so SP nests it correctly.
507
- const allTasks = await PluginAPI.getTasks();
508
- const parentTask = allTasks.find(t => t.id === parentId);
509
- if (parentTask) {
510
- const existing = parentTask.subTaskIds || [];
511
- if (!existing.includes(subtaskId)) {
512
- await PluginAPI.updateTask(parentId, { subTaskIds: [...existing, subtaskId] });
513
- }
496
+ // Pass parentId to addTask directly SP creates a true subtask at creation
497
+ // time and handles hierarchy correctly. updateTask({ parentId }) creates a
498
+ // root-level cross-reference label instead of a true nested subtask.
499
+ const subtaskId = await PluginAPI.addTask({ ...rest, title: createTitle, parentId });
500
+ if (hasSyntax) {
501
+ await PluginAPI.updateTask(subtaskId, { title });
514
502
  }
515
503
  result = subtaskId;
516
504
  } else {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "superproductivity-mcp"
3
- version = "1.2.6.dev6"
3
+ version = "1.2.6.dev7"
4
4
  description = "Super Productivity MCP server for Claude Desktop integration"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"