superproductivity-mcp 1.2.6.dev5__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.dev5 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/build.yml +1 -1
  2. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/publish-dev.yml +1 -1
  3. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/release.yml +3 -3
  4. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/PKG-INFO +1 -1
  5. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/build-plugin.sh +2 -2
  6. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/plugin/manifest.json +1 -1
  7. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/plugin/plugin.js +8 -20
  8. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/pyproject.toml +1 -1
  9. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/publish.yml +0 -0
  10. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.github/workflows/version-gate.yml +0 -0
  11. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.gitignore +0 -0
  12. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.mcp.json.example +0 -0
  13. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/.mise.toml +0 -0
  14. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/LICENSE.txt +0 -0
  15. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/README.md +0 -0
  16. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/plans/2026-04-29-packaging-distribution.md +0 -0
  17. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/plans/2026-04-30-gitflow-ci.md +0 -0
  18. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/specs/2026-04-29-gitflow-ci-design.md +0 -0
  19. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/docs/superpowers/specs/2026-04-29-packaging-distribution-design.md +0 -0
  20. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/plugin/index.html +0 -0
  21. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/__init__.py +0 -0
  22. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/__main__.py +0 -0
  23. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/src/superproductivity_mcp/server.py +0 -0
  24. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/tests/__init__.py +0 -0
  25. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/tests/test_mcp_logic.py +0 -0
  26. {superproductivity_mcp-1.2.6.dev5 → superproductivity_mcp-1.2.6.dev7}/uv.lock +0 -0
@@ -16,7 +16,7 @@ jobs:
16
16
  - name: Verify zip exists
17
17
  run: |
18
18
  VERSION=$(python3 -c "import json; print(json.load(open('plugin/manifest.json'))['version'])")
19
- ZIP="plugin/plugin-v${VERSION}.zip"
19
+ ZIP="plugin/superproductivity-mcp-plugin-v${VERSION}.zip"
20
20
  test -f "$ZIP" && echo "OK: $ZIP" || (echo "ERROR: $ZIP not found" && exit 1)
21
21
 
22
22
  build-mcp:
@@ -67,7 +67,7 @@ jobs:
67
67
  run: |
68
68
  VERSION="${{ steps.version.outputs.version }}"
69
69
  TAG="v${VERSION}"
70
- ZIP="plugin/plugin-v${VERSION}.zip"
70
+ ZIP="plugin/superproductivity-mcp-plugin-v${VERSION}.zip"
71
71
 
72
72
  if gh release view "$TAG" &>/dev/null; then
73
73
  echo "Release $TAG already exists — updating asset"
@@ -27,8 +27,8 @@ jobs:
27
27
  - name: Upload build artifact
28
28
  uses: actions/upload-artifact@v4
29
29
  with:
30
- name: plugin-v${{ steps.version.outputs.version }}
31
- path: plugin/plugin-v${{ steps.version.outputs.version }}.zip
30
+ name: superproductivity-mcp-plugin-v${{ steps.version.outputs.version }}
31
+ path: plugin/superproductivity-mcp-plugin-v${{ steps.version.outputs.version }}.zip
32
32
  retention-days: 90
33
33
 
34
34
  - name: Publish GitHub Release
@@ -36,7 +36,7 @@ jobs:
36
36
  GH_TOKEN: ${{ github.token }}
37
37
  run: |
38
38
  TAG="${{ steps.version.outputs.tag }}"
39
- ZIP="plugin/plugin-v${{ steps.version.outputs.version }}.zip"
39
+ ZIP="plugin/superproductivity-mcp-plugin-v${{ steps.version.outputs.version }}.zip"
40
40
 
41
41
  if gh release view "$TAG" &>/dev/null; then
42
42
  echo "Release $TAG already exists — updating asset"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: superproductivity-mcp
3
- Version: 1.2.6.dev5
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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Build the Super Productivity plugin zip for upload.
3
3
  # Usage: ./build-plugin.sh
4
- # Output: plugin/plugin-v<version>.zip (version read from plugin/manifest.json)
4
+ # Output: plugin/superproductivity-mcp-plugin-v<version>.zip (version read from plugin/manifest.json)
5
5
 
6
6
  set -euo pipefail
7
7
 
@@ -10,7 +10,7 @@ PLUGIN_DIR="$SCRIPT_DIR/plugin"
10
10
  MANIFEST="$PLUGIN_DIR/manifest.json"
11
11
 
12
12
  VERSION=$(python3 -c "import json,sys; print(json.load(open(sys.argv[1]))['version'])" "$MANIFEST")
13
- OUT="$PLUGIN_DIR/plugin-v${VERSION}.zip"
13
+ OUT="$PLUGIN_DIR/superproductivity-mcp-plugin-v${VERSION}.zip"
14
14
 
15
15
  echo "Building plugin v${VERSION}..."
16
16
 
@@ -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.dev5",
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.dev5"
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"