sp-local-bridge 0.2.1__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 (75) hide show
  1. sp_local_bridge-0.2.1/.editorconfig +18 -0
  2. sp_local_bridge-0.2.1/.github/dependabot.yml +18 -0
  3. sp_local_bridge-0.2.1/.github/workflows/ci.yml +54 -0
  4. sp_local_bridge-0.2.1/.github/workflows/docs.yml +53 -0
  5. sp_local_bridge-0.2.1/.github/workflows/release.yml +81 -0
  6. sp_local_bridge-0.2.1/.gitignore +66 -0
  7. sp_local_bridge-0.2.1/.pre-commit-config.yaml +20 -0
  8. sp_local_bridge-0.2.1/.python-version +1 -0
  9. sp_local_bridge-0.2.1/AGENTS.md +62 -0
  10. sp_local_bridge-0.2.1/CHANGELOG.md +82 -0
  11. sp_local_bridge-0.2.1/CLAUDE.md +3 -0
  12. sp_local_bridge-0.2.1/LICENSE +21 -0
  13. sp_local_bridge-0.2.1/Makefile +53 -0
  14. sp_local_bridge-0.2.1/PKG-INFO +124 -0
  15. sp_local_bridge-0.2.1/README.md +101 -0
  16. sp_local_bridge-0.2.1/docs/architecture.md +46 -0
  17. sp_local_bridge-0.2.1/docs/getting-started.md +100 -0
  18. sp_local_bridge-0.2.1/docs/hosts/claude-desktop.md +79 -0
  19. sp_local_bridge-0.2.1/docs/hosts/codex.md +80 -0
  20. sp_local_bridge-0.2.1/docs/hosts/index.md +27 -0
  21. sp_local_bridge-0.2.1/docs/hosts/vscode-copilot.md +76 -0
  22. sp_local_bridge-0.2.1/docs/index.md +20 -0
  23. sp_local_bridge-0.2.1/docs/operations.md +245 -0
  24. sp_local_bridge-0.2.1/docs/security.md +51 -0
  25. sp_local_bridge-0.2.1/docs/troubleshooting.md +96 -0
  26. sp_local_bridge-0.2.1/docs/validation.md +122 -0
  27. sp_local_bridge-0.2.1/package-lock.json +2550 -0
  28. sp_local_bridge-0.2.1/package.json +13 -0
  29. sp_local_bridge-0.2.1/pyproject.toml +84 -0
  30. sp_local_bridge-0.2.1/scripts/install.sh +254 -0
  31. sp_local_bridge-0.2.1/scripts/uninstall.sh +122 -0
  32. sp_local_bridge-0.2.1/skills/sp-local-bridge-setup/SKILL.md +136 -0
  33. sp_local_bridge-0.2.1/skills/sp-local-bridge-setup/manifest.yaml +7 -0
  34. sp_local_bridge-0.2.1/src/sp_local_bridge/__init__.py +3 -0
  35. sp_local_bridge-0.2.1/src/sp_local_bridge/__main__.py +6 -0
  36. sp_local_bridge-0.2.1/src/sp_local_bridge/adapters/__init__.py +1 -0
  37. sp_local_bridge-0.2.1/src/sp_local_bridge/adapters/mcp_server.py +358 -0
  38. sp_local_bridge-0.2.1/src/sp_local_bridge/cli.py +207 -0
  39. sp_local_bridge-0.2.1/src/sp_local_bridge/core/__init__.py +6 -0
  40. sp_local_bridge-0.2.1/src/sp_local_bridge/core/errors.py +26 -0
  41. sp_local_bridge-0.2.1/src/sp_local_bridge/core/models.py +40 -0
  42. sp_local_bridge-0.2.1/src/sp_local_bridge/core/operations.py +24 -0
  43. sp_local_bridge-0.2.1/src/sp_local_bridge/core/service.py +373 -0
  44. sp_local_bridge-0.2.1/src/sp_local_bridge/diagnostics/__init__.py +1 -0
  45. sp_local_bridge-0.2.1/src/sp_local_bridge/diagnostics/configure.py +374 -0
  46. sp_local_bridge-0.2.1/src/sp_local_bridge/diagnostics/doctor.py +179 -0
  47. sp_local_bridge-0.2.1/src/sp_local_bridge/diagnostics/host_config.py +220 -0
  48. sp_local_bridge-0.2.1/src/sp_local_bridge/sp_rest/__init__.py +5 -0
  49. sp_local_bridge-0.2.1/src/sp_local_bridge/sp_rest/client.py +164 -0
  50. sp_local_bridge-0.2.1/tests/__init__.py +0 -0
  51. sp_local_bridge-0.2.1/tests/conftest.py +17 -0
  52. sp_local_bridge-0.2.1/tests/fixtures/app-not-ready-error.json +7 -0
  53. sp_local_bridge-0.2.1/tests/fixtures/health-ok.json +6 -0
  54. sp_local_bridge-0.2.1/tests/fixtures/project-list-ok.json +16 -0
  55. sp_local_bridge-0.2.1/tests/fixtures/status-ok.json +7 -0
  56. sp_local_bridge-0.2.1/tests/fixtures/tag-list-ok.json +12 -0
  57. sp_local_bridge-0.2.1/tests/fixtures/task-create-error-with-details.json +8 -0
  58. sp_local_bridge-0.2.1/tests/fixtures/task-create-error.json +7 -0
  59. sp_local_bridge-0.2.1/tests/fixtures/task-create-ok.json +12 -0
  60. sp_local_bridge-0.2.1/tests/fixtures/task-create-request.json +7 -0
  61. sp_local_bridge-0.2.1/tests/fixtures/task-list-ok.json +24 -0
  62. sp_local_bridge-0.2.1/tests/fixtures/task-update-ok.json +12 -0
  63. sp_local_bridge-0.2.1/tests/fixtures/task-update-request.json +4 -0
  64. sp_local_bridge-0.2.1/tests/test_cli.py +218 -0
  65. sp_local_bridge-0.2.1/tests/test_configure.py +335 -0
  66. sp_local_bridge-0.2.1/tests/test_core_models.py +64 -0
  67. sp_local_bridge-0.2.1/tests/test_core_service.py +719 -0
  68. sp_local_bridge-0.2.1/tests/test_doctor.py +190 -0
  69. sp_local_bridge-0.2.1/tests/test_host_config.py +182 -0
  70. sp_local_bridge-0.2.1/tests/test_install_scripts.py +260 -0
  71. sp_local_bridge-0.2.1/tests/test_mcp_adapter.py +194 -0
  72. sp_local_bridge-0.2.1/tests/test_mcp_protocol.py +302 -0
  73. sp_local_bridge-0.2.1/tests/test_rest_client.py +184 -0
  74. sp_local_bridge-0.2.1/tests/test_smoke.py +23 -0
  75. sp_local_bridge-0.2.1/uv.lock +1184 -0
@@ -0,0 +1,18 @@
1
+ root = true
2
+
3
+ [*]
4
+ end_of_line = lf
5
+ insert_final_newline = true
6
+ trim_trailing_whitespace = true
7
+ charset = utf-8
8
+
9
+ [*.py]
10
+ indent_style = space
11
+ indent_size = 4
12
+
13
+ [*.{js,json,yaml,yml,toml,md}]
14
+ indent_style = space
15
+ indent_size = 2
16
+
17
+ [Makefile]
18
+ indent_style = tab
@@ -0,0 +1,18 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ groups:
8
+ dev-deps:
9
+ patterns:
10
+ - "ruff"
11
+ - "pyright"
12
+ - "pytest*"
13
+ - "pre-commit"
14
+
15
+ - package-ecosystem: "github-actions"
16
+ directory: "/"
17
+ schedule:
18
+ interval: "weekly"
@@ -0,0 +1,54 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ # Least privilege by default: these jobs only read the repository.
10
+ # A job needing more declares it itself, so the elevation stays visible
11
+ # at the job that uses it.
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ check:
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ matrix:
20
+ python-version: ["3.11", "3.12", "3.13"]
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+
24
+ - uses: astral-sh/setup-uv@v7
25
+ with:
26
+ version: "latest"
27
+
28
+ - name: Set up Python ${{ matrix.python-version }}
29
+ run: uv python install ${{ matrix.python-version }}
30
+
31
+ - name: Install dependencies
32
+ run: uv sync --python ${{ matrix.python-version }}
33
+
34
+ - name: Format check
35
+ run: uv run ruff format --check .
36
+
37
+ - name: Lint
38
+ run: uv run ruff check .
39
+
40
+ - name: Type check
41
+ run: uv run pyright
42
+
43
+ - name: Test
44
+ run: uv run pytest --cov --cov-report=xml
45
+
46
+ - name: Build
47
+ run: uv build --quiet
48
+
49
+ - name: Upload coverage
50
+ if: matrix.python-version == '3.11'
51
+ uses: actions/upload-artifact@v7
52
+ with:
53
+ name: coverage-report
54
+ path: coverage.xml
@@ -0,0 +1,53 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'package.json'
9
+ - 'package-lock.json'
10
+ - '.github/workflows/docs.yml'
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+ pages: write
16
+ id-token: write
17
+
18
+ concurrency:
19
+ group: pages
20
+ cancel-in-progress: false
21
+
22
+ jobs:
23
+ build:
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v7
27
+
28
+ - uses: actions/setup-node@v7
29
+ with:
30
+ node-version: 22
31
+
32
+ - name: Install dependencies
33
+ run: npm ci
34
+
35
+ - name: Build docs
36
+ run: npm run docs:build
37
+
38
+ - uses: actions/configure-pages@v6
39
+
40
+ - uses: actions/upload-pages-artifact@v5
41
+ with:
42
+ path: docs/.vitepress/dist
43
+
44
+ deploy:
45
+ needs: build
46
+ runs-on: ubuntu-latest
47
+ environment:
48
+ name: github-pages
49
+ url: ${{ steps.deployment.outputs.page_url }}
50
+ steps:
51
+ - name: Deploy to GitHub Pages
52
+ id: deployment
53
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,81 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ # Least privilege by default; the publish job adds id-token for PyPI's
9
+ # trusted publishing and nothing else.
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ build:
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ contents: write
18
+ steps:
19
+ - uses: actions/checkout@v7
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v7
23
+
24
+ - name: Set up Python
25
+ run: uv python install 3.11
26
+
27
+ - name: Install dependencies
28
+ run: uv sync
29
+
30
+ - name: Run checks
31
+ run: |
32
+ uv run ruff format --check .
33
+ uv run ruff check .
34
+ uv run pyright
35
+ uv run pytest
36
+
37
+ - name: Build package
38
+ run: uv build
39
+
40
+ - name: Generate checksums
41
+ run: |
42
+ cd dist
43
+ sha256sum * > SHA256SUMS
44
+
45
+ - name: Create GitHub Release
46
+ uses: softprops/action-gh-release@v3
47
+ with:
48
+ generate_release_notes: true
49
+ files: |
50
+ dist/*.whl
51
+ dist/*.tar.gz
52
+ dist/SHA256SUMS
53
+
54
+ # Only the distributions — pypi-publish rejects a directory containing
55
+ # anything else, and SHA256SUMS is not a distribution.
56
+ - name: Upload distributions
57
+ uses: actions/upload-artifact@v4
58
+ with:
59
+ name: python-package-distributions
60
+ path: |
61
+ dist/*.whl
62
+ dist/*.tar.gz
63
+
64
+ pypi:
65
+ needs: build
66
+ runs-on: ubuntu-latest
67
+ # Must match the PyPI trusted publisher configuration exactly: this
68
+ # workflow filename and this environment name are both part of the claim
69
+ # PyPI verifies.
70
+ environment: pypi
71
+ permissions:
72
+ id-token: write
73
+ steps:
74
+ - name: Download distributions
75
+ uses: actions/download-artifact@v4
76
+ with:
77
+ name: python-package-distributions
78
+ path: dist/
79
+
80
+ - name: Publish to PyPI
81
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,66 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ *.egg-info/
7
+ *.egg
8
+ dist/
9
+ build/
10
+ MANIFEST
11
+
12
+ # Node (docs site only)
13
+ node_modules/
14
+ docs/.vitepress/dist/
15
+ docs/.vitepress/cache/
16
+ docs/.vitepress/.temp/
17
+
18
+ # Virtual environments
19
+ .venv/
20
+ venv/
21
+ env/
22
+
23
+ # Type checkers
24
+ .mypy_cache/
25
+ .pytype/
26
+ .pyre/
27
+
28
+ # Testing / coverage
29
+ .pytest_cache/
30
+ .coverage
31
+ .coverage.*
32
+ htmlcov/
33
+ coverage.xml
34
+
35
+ # Ruff
36
+ .ruff_cache/
37
+
38
+ # IDE
39
+ .idea/
40
+ .vscode/
41
+ *.swp
42
+ *.swo
43
+
44
+ # OS
45
+ .DS_Store
46
+ Thumbs.db
47
+
48
+ # Environments / secrets
49
+ .env
50
+ .envrc
51
+
52
+ # Build artifacts
53
+ *.whl
54
+
55
+ # Personal working files (planning, research, notes)
56
+ working/
57
+
58
+ # Reference repos (cloned for development reference)
59
+ refs/
60
+
61
+ # Plugin (not shipped until fallback implementation exists)
62
+ plugin/
63
+
64
+ # VitePress (docs site)
65
+ .vitepress
66
+ .temp
@@ -0,0 +1,20 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v5.0.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-toml
9
+ - id: check-json
10
+ - id: check-added-large-files
11
+ args: [--maxkb=500]
12
+ - id: check-merge-conflict
13
+ - id: debug-statements
14
+
15
+ - repo: https://github.com/astral-sh/ruff-pre-commit
16
+ rev: v0.11.12
17
+ hooks:
18
+ - id: ruff-format
19
+ - id: ruff
20
+ args: [--fix]
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,62 @@
1
+ # AGENTS.md
2
+
3
+ Instructions for AI coding agents working in this repository.
4
+
5
+ ## Project
6
+
7
+ Super Productivity Local Bridge — a local automation bridge for the Super Productivity desktop app. Uses the SP Local REST API (`http://127.0.0.1:3876`) as the primary app-control path, with MCP as one thin host adapter.
8
+
9
+ ## Stack
10
+
11
+ - **Python 3.11+** with `uv` for environment/dependency management
12
+ - **Pydantic** for models and validation
13
+ - **httpx** for the SP Local REST client
14
+ - **MCP Python SDK** for the MCP adapter (stdio transport)
15
+ - **Ruff** for formatting and linting
16
+ - **Pyright** for type checking
17
+ - **Pytest** for testing
18
+
19
+ ## Layout
20
+
21
+ ```
22
+ src/sp_local_bridge/ Python package (src layout)
23
+ core/ Core operation models, errors, service
24
+ sp_rest/ SP Local REST API client
25
+ adapters/ Host adapters (MCP server)
26
+ diagnostics/ Doctor, health checks
27
+ cli.py CLI entry point
28
+ tests/ Pytest tests
29
+ scripts/ Install/uninstall shell scripts
30
+ docs/ Documentation + host guides
31
+ ```
32
+
33
+ ## Commands
34
+
35
+ ```sh
36
+ uv sync # Install deps (creates .venv)
37
+ uv run ruff format . # Format
38
+ uv run ruff check . # Lint
39
+ uv run pyright # Type check
40
+ uv run pytest # Test
41
+ uv run pytest --cov # Test with coverage
42
+ make check # Run all checks (format, lint, types, tests)
43
+ ```
44
+
45
+ ## Conventions
46
+
47
+ - All Python code lives under `src/sp_local_bridge/` (src layout).
48
+ - Use pydantic BaseModel for data structures crossing boundaries.
49
+ - Use `httpx.AsyncClient` for HTTP calls to SP.
50
+ - MCP adapter is thin — all logic lives in `core/`.
51
+ - No Claude/agent-specific language in tool descriptions or core code.
52
+ - Use SP-native camelCase field names at REST boundaries (`projectId`, `tagIds`).
53
+ - Type annotations on all public functions.
54
+ - Tests in `tests/` mirror `src/` structure.
55
+
56
+ ## Do NOT
57
+
58
+ - Add runtime deps without discussing (the dep tree is intentionally small).
59
+ - Put business logic in the MCP adapter.
60
+ - Reference specific AI hosts (Claude, Cursor, etc.) outside `docs/hosts/`.
61
+ - Create files named after phases or milestones.
62
+ - Commit `.venv/`, `working/`, `refs/`, or build artifacts.
@@ -0,0 +1,82 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.2.1] — 2026-09-05
9
+
10
+ Final release. The project is archived; this version exists so the package name
11
+ is registered on PyPI and cannot be claimed by anyone else.
12
+
13
+ ### Changed
14
+
15
+ - Publish to PyPI from CI using trusted publishing (OIDC), so the distribution
16
+ that carries this name has verifiable provenance. Earlier releases were
17
+ GitHub Release artifacts only — the name was never registered on PyPI, which
18
+ left it available for anyone to take.
19
+ - The release is **yanked** on PyPI: the name stays reserved, but resolvers skip
20
+ it, so it will not be installed by accident. An exact pin
21
+ (`sp-local-bridge==0.2.1`) still resolves for anyone who genuinely needs it.
22
+
23
+ ### Note
24
+
25
+ No functional changes. Use
26
+ [super-productivity-local-gobridge](https://github.com/CameronBrooks11/super-productivity-local-gobridge)
27
+ instead.
28
+
29
+ ## [0.2.0] — 2026-05-31
30
+
31
+ ### Added
32
+
33
+ - **Task list filters**: `query`, `projectId`, `tagId`, `includeDone`, `source` parameters on `task.list`
34
+ - **Time fields**: `timeEstimate` and `timeSpent` (milliseconds, non-negative) on `task.create` and `task.update`
35
+ - **Current task**: `task.get_current` to read the active task, `task.set_current` to set or clear it
36
+ - **Status read**: `status.get` operation for SP application status summary
37
+ - **Project/tag search**: `query` parameter on `project.list` and `tag.list`
38
+ - MCP tools: `get_status`, `get_current_task`, `set_current_task`
39
+ - CLI commands: `status`, `tasks current`, `tasks set-current <id>`, `tasks clear-current`, filter flags on `tasks list`, `--query` on `projects list` / `tags list`
40
+ - 46 new tests (212 total)
41
+
42
+ ### Changed
43
+
44
+ - Operation count: 13 → 16
45
+ - `task.list` now accepts optional filter payload (previously rejected any payload)
46
+ - `project.list` and `tag.list` now accept optional `query` payload
47
+
48
+ ## [0.1.1] — 2026-05-31
49
+
50
+ ### Added
51
+
52
+ - `sp-local-bridge-configure` command for auto-writing MCP config to host files
53
+ - Agent setup skill (`skills/sp-local-bridge-setup/`) for guided installation
54
+ - Regression tests for TOML preservation, doctor parse-error handling, uninstall ordering
55
+
56
+ ### Fixed
57
+
58
+ - TOML auto-config: surgical write now only touches `[mcp_servers.superProductivity]`, preserving all other file content including inline tables, env maps, and numbers
59
+ - TOML auto-config: malformed existing TOML fails closed (error code 1) instead of silently appending
60
+ - TOML auto-config: removal now deletes descendant tables (e.g. `[mcp_servers.superProductivity.env]`)
61
+ - Doctor: malformed host config produces a failed diagnostic check instead of crashing or false-passing
62
+ - Uninstall: host config cleanup runs before package removal; failures are surfaced clearly
63
+
64
+ ## [0.1.0] — 2026-05-30
65
+
66
+ ### Added
67
+
68
+ - Core operation layer with 13 operations: `task.list`, `task.get`, `task.create`, `task.update`, `task.complete`, `task.uncomplete`, `task.start`, `task.stop_current`, `task.archive`, `task.restore`, `project.list`, `tag.list`, `bridge.health`
69
+ - SP Local REST API client with full envelope parsing, timeout handling, and error translation
70
+ - MCP adapter with tool annotations, structured content, and complete input schemas
71
+ - CLI with `health`, `tasks`, `projects`, `tags` subcommands
72
+ - Doctor command (`sp-local-bridge-doctor`) for bridge health diagnostics
73
+ - Host config generator (`sp-local-bridge-print-config`) for MCP host setup
74
+ - Install/uninstall scripts with `--dry-run` support
75
+ - CI pipeline (GitHub Actions) with Python 3.11/3.12/3.13 matrix
76
+ - 135+ tests covering core validation, REST translation, MCP protocol, and diagnostics
77
+ - Documentation: operations reference, host setup guides
78
+
79
+ ### Notes
80
+
81
+ - Plugin fallback (file-spool bridge) is deferred — all operations use the Local REST API
82
+ - Requires Super Productivity desktop app with Local REST API enabled (Settings → Misc)
@@ -0,0 +1,3 @@
1
+ # CLAUDE.md
2
+
3
+ See [AGENTS.md](AGENTS.md) for all agent instructions.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Cameron Brooks
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,53 @@
1
+ .PHONY: install format lint typecheck test cov check clean build doctor print-config checksums
2
+
3
+ ## Install dependencies
4
+ install:
5
+ uv sync
6
+
7
+ ## Format code
8
+ format:
9
+ uv run ruff format .
10
+
11
+ ## Lint code (with auto-fix)
12
+ lint:
13
+ uv run ruff check --fix .
14
+
15
+ ## Type check
16
+ typecheck:
17
+ uv run pyright
18
+
19
+ ## Run tests
20
+ test:
21
+ uv run pytest
22
+
23
+ ## Run tests with coverage
24
+ cov:
25
+ uv run pytest --cov --cov-report=term-missing
26
+
27
+ ## Run all checks (CI-equivalent)
28
+ check: install
29
+ uv run ruff format --check .
30
+ uv run ruff check .
31
+ uv run pyright
32
+ uv run pytest
33
+ uv build --quiet
34
+
35
+ ## Build release artifacts
36
+ build:
37
+ uv build
38
+
39
+ ## Generate checksums for release artifacts
40
+ checksums:
41
+ cd dist && sha256sum * > checksums.txt
42
+
43
+ ## Run bridge doctor
44
+ doctor:
45
+ uv run sp-local-bridge-doctor
46
+
47
+ ## Print host config
48
+ print-config:
49
+ uv run sp-local-bridge-print-config claude-desktop
50
+
51
+ ## Remove build artifacts
52
+ clean:
53
+ rm -rf dist/ build/ *.egg-info .pytest_cache .ruff_cache .mypy_cache htmlcov .coverage
@@ -0,0 +1,124 @@
1
+ Metadata-Version: 2.5
2
+ Name: sp-local-bridge
3
+ Version: 0.2.1
4
+ Summary: Local automation bridge for Super Productivity — REST-first with MCP adapter
5
+ Project-URL: Repository, https://github.com/CameronBrooks11/super-productivity-local-bridge
6
+ Author: Cameron Brooks
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Keywords: automation,local-bridge,mcp,super-productivity
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development :: Libraries
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: httpx<1,>=0.28
20
+ Requires-Dist: mcp<3,>=1.9
21
+ Requires-Dist: pydantic<3,>=2.12
22
+ Description-Content-Type: text/markdown
23
+
24
+ # Super Productivity Local Bridge
25
+
26
+ > [!IMPORTANT]
27
+ > **This repository is archived. It has been superseded by the [Go bridge](https://github.com/CameronBrooks11/super-productivity-local-gobridge).**
28
+ >
29
+ > The Go rewrite provides the same 16 operations, installs as a single binary
30
+ > with no Python or `uv` runtime to manage, and is where all further development
31
+ > happens. This repository is read-only: no further fixes, releases, or
32
+ > dependency updates.
33
+ >
34
+ > **New and existing installations should move to
35
+ > [super-productivity-local-gobridge](https://github.com/CameronBrooks11/super-productivity-local-gobridge)**
36
+ > ([docs](https://cameronbrooks11.github.io/super-productivity-local-gobridge/),
37
+ > [migration guide](https://cameronbrooks11.github.io/super-productivity-local-gobridge/migration)).
38
+ >
39
+ > The content below describes the final Python release (v0.2.0) and is kept for
40
+ > reference.
41
+
42
+ [![CI](https://github.com/CameronBrooks11/super-productivity-local-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/CameronBrooks11/super-productivity-local-bridge/actions/workflows/ci.yml)
43
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue)](https://www.python.org/downloads/)
44
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
45
+
46
+ Control [Super Productivity](https://super-productivity.com/) tasks, projects, and tags from MCP hosts, CLI, and local automation tools — all through the desktop app's Local REST API.
47
+
48
+ ## Why
49
+
50
+ Super Productivity is a great task manager. This bridge lets AI coding agents and automation scripts interact with it programmatically — creating tasks, tracking work, and managing projects without leaving your workflow.
51
+
52
+ The bridge talks only to your local Super Productivity API on `127.0.0.1:3876`. Your MCP host may have its own data handling, so review the host's privacy model before granting task access.
53
+
54
+ ## Features
55
+
56
+ - **16 operations** — list/get/create/update/complete/uncomplete/start/stop/archive/restore tasks, current task get/set, list projects, list tags, status, health check, plus filters and time fields
57
+ - **MCP adapter** — live-validated with VS Code Copilot; includes setup guides and config generation for Claude Desktop and Codex CLI
58
+ - **CLI** — command-line access to common operations (health, status, list/get/create tasks, current task, projects, tags)
59
+ - **Host config generator** — prints ready-to-paste config with absolute paths for each supported host
60
+ - **Doctor command** — diagnoses connectivity and configuration issues
61
+
62
+ ## Install
63
+
64
+ Requires Python 3.11+ and [uv](https://docs.astral.sh/uv/).
65
+
66
+ ```sh
67
+ git clone https://github.com/CameronBrooks11/super-productivity-local-bridge.git
68
+ cd super-productivity-local-bridge
69
+ scripts/install.sh
70
+ ```
71
+
72
+ Use `--dry-run` to preview.
73
+
74
+ Alternatively, install from a [GitHub Release](https://github.com/CameronBrooks11/super-productivity-local-bridge/releases) wheel:
75
+
76
+ ```sh
77
+ uv tool install https://github.com/CameronBrooks11/super-productivity-local-bridge/releases/download/v0.2.0/sp_local_bridge-0.2.0-py3-none-any.whl
78
+ ```
79
+
80
+ ## Configure an MCP Host
81
+
82
+ ```sh
83
+ sp-local-bridge-print-config vscode-copilot # VS Code Copilot
84
+ sp-local-bridge-print-config claude-desktop # Claude Desktop
85
+ sp-local-bridge-print-config codex # Codex CLI
86
+ ```
87
+
88
+ Add the printed snippet to the config file shown in the output, then restart the host.
89
+
90
+ See the [host setup guides](https://cameronbrooks11.github.io/super-productivity-local-bridge/hosts/) for detailed instructions.
91
+
92
+ ## Verify
93
+
94
+ ```sh
95
+ sp-local-bridge-doctor
96
+ ```
97
+
98
+ ## Safety
99
+
100
+ This bridge has **write access** to your Super Productivity data (create, update, complete, archive tasks). It talks only to localhost. `task.delete` is intentionally excluded. Back up your SP data before heavy automation use.
101
+
102
+ See [Security](https://cameronbrooks11.github.io/super-productivity-local-bridge/security) for the full risk profile.
103
+
104
+ ## Documentation
105
+
106
+ Full docs: [cameronbrooks11.github.io/super-productivity-local-bridge](https://cameronbrooks11.github.io/super-productivity-local-bridge/)
107
+
108
+ - [Getting Started](https://cameronbrooks11.github.io/super-productivity-local-bridge/getting-started)
109
+ - [Operations Reference](https://cameronbrooks11.github.io/super-productivity-local-bridge/operations)
110
+ - [Architecture](https://cameronbrooks11.github.io/super-productivity-local-bridge/architecture)
111
+ - [Troubleshooting](https://cameronbrooks11.github.io/super-productivity-local-bridge/troubleshooting)
112
+
113
+ ## Development
114
+
115
+ ```sh
116
+ uv sync # Install deps
117
+ make check # Format, lint, typecheck, test, build
118
+ uv run pytest --cov # Tests with coverage
119
+ uv run pre-commit install # Git hooks
120
+ ```
121
+
122
+ ## License
123
+
124
+ [MIT](LICENSE)