planpilot 2.0.1__tar.gz → 2.2.0__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 (106) hide show
  1. {planpilot-2.0.1 → planpilot-2.2.0}/PKG-INFO +16 -2
  2. {planpilot-2.0.1 → planpilot-2.2.0}/README.md +14 -1
  3. {planpilot-2.0.1 → planpilot-2.2.0}/pyproject.toml +2 -1
  4. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/__init__.py +3 -2
  5. planpilot-2.2.0/src/planpilot/cli.py +639 -0
  6. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/sync.py +10 -0
  7. planpilot-2.2.0/src/planpilot/engine/__init__.py +6 -0
  8. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/engine/engine.py +73 -39
  9. planpilot-2.2.0/src/planpilot/engine/progress.py +54 -0
  10. planpilot-2.2.0/src/planpilot/progress.py +90 -0
  11. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/scaffold.py +28 -9
  12. planpilot-2.2.0/src/planpilot/sdk.py +404 -0
  13. planpilot-2.0.1/src/planpilot/cli.py +0 -341
  14. planpilot-2.0.1/src/planpilot/engine/__init__.py +0 -5
  15. planpilot-2.0.1/src/planpilot/sdk.py +0 -181
  16. {planpilot-2.0.1 → planpilot-2.2.0}/LICENSE +0 -0
  17. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/AGENTS.md +0 -0
  18. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/__main__.py +0 -0
  19. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/__init__.py +0 -0
  20. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/base.py +0 -0
  21. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/factory.py +0 -0
  22. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/resolvers/__init__.py +0 -0
  23. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/resolvers/env.py +0 -0
  24. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/resolvers/gh_cli.py +0 -0
  25. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/auth/resolvers/static.py +0 -0
  26. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/__init__.py +0 -0
  27. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/config.py +0 -0
  28. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/exceptions.py +0 -0
  29. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/item.py +0 -0
  30. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/plan.py +0 -0
  31. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/provider.py +0 -0
  32. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/contracts/renderer.py +0 -0
  33. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/engine/utils.py +0 -0
  34. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/plan/__init__.py +0 -0
  35. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/plan/hasher.py +0 -0
  36. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/plan/loader.py +0 -0
  37. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/plan/validator.py +0 -0
  38. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/AGENTS.md +0 -0
  39. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/__init__.py +0 -0
  40. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/base.py +0 -0
  41. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/dry_run.py +0 -0
  42. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/factory.py +0 -0
  43. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/AGENTS.md +0 -0
  44. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/__init__.py +0 -0
  45. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/_retrying_transport.py +0 -0
  46. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/__init__.py +0 -0
  47. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/add_blocked_by.py +0 -0
  48. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/add_labels.py +0 -0
  49. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/add_project_item.py +0 -0
  50. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/add_sub_issue.py +0 -0
  51. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/async_base_client.py +0 -0
  52. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/base_model.py +0 -0
  53. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/client.py +0 -0
  54. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/close_issue.py +0 -0
  55. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/create_issue.py +0 -0
  56. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/create_label.py +0 -0
  57. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/enums.py +0 -0
  58. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/exceptions.py +0 -0
  59. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_org_project.py +0 -0
  60. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_project_fields.py +0 -0
  61. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_project_items.py +0 -0
  62. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_relations.py +0 -0
  63. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_repo.py +0 -0
  64. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fetch_user_project.py +0 -0
  65. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/find_labels.py +0 -0
  66. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/fragments.py +0 -0
  67. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/get_issue.py +0 -0
  68. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/input_types.py +0 -0
  69. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/operations.py +0 -0
  70. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/remove_blocked_by.py +0 -0
  71. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/remove_labels.py +0 -0
  72. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/remove_sub_issue.py +0 -0
  73. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/search_issues.py +0 -0
  74. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/update_issue.py +0 -0
  75. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/github_gql/update_project_field.py +0 -0
  76. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/item.py +0 -0
  77. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/mapper.py +0 -0
  78. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/models.py +0 -0
  79. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/add_blocked_by.graphql +0 -0
  80. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/add_labels.graphql +0 -0
  81. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/add_project_item.graphql +0 -0
  82. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/add_sub_issue.graphql +0 -0
  83. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/close_issue.graphql +0 -0
  84. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/create_issue.graphql +0 -0
  85. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/create_label.graphql +0 -0
  86. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_org_project.graphql +0 -0
  87. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_project_fields.graphql +0 -0
  88. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_project_items.graphql +0 -0
  89. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_relations.graphql +0 -0
  90. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_repo.graphql +0 -0
  91. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fetch_user_project.graphql +0 -0
  92. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/find_labels.graphql +0 -0
  93. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/fragments.graphql +0 -0
  94. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/get_issue.graphql +0 -0
  95. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/remove_blocked_by.graphql +0 -0
  96. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/remove_labels.graphql +0 -0
  97. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/remove_sub_issue.graphql +0 -0
  98. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/search_issues.graphql +0 -0
  99. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/update_issue.graphql +0 -0
  100. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/operations/update_project_field.graphql +0 -0
  101. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/provider.py +0 -0
  102. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/providers/github/schema.graphql +0 -0
  103. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/py.typed +0 -0
  104. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/renderers/__init__.py +0 -0
  105. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/renderers/factory.py +0 -0
  106. {planpilot-2.0.1 → planpilot-2.2.0}/src/planpilot/renderers/markdown.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: planpilot
3
- Version: 2.0.1
3
+ Version: 2.2.0
4
4
  Summary: Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -24,6 +24,7 @@ Classifier: Typing :: Typed
24
24
  Requires-Dist: httpx (>=0.28,<0.29)
25
25
  Requires-Dist: pydantic (>=2.12.5,<3.0.0)
26
26
  Requires-Dist: questionary (>=2.1,<3.0)
27
+ Requires-Dist: rich (>=14.3.2,<15.0.0)
27
28
  Project-URL: Bug Tracker, https://github.com/aryeko/planpilot/issues
28
29
  Project-URL: Changelog, https://github.com/aryeko/planpilot/blob/main/CHANGELOG.md
29
30
  Project-URL: Documentation, https://github.com/aryeko/planpilot/tree/main/docs
@@ -215,11 +216,24 @@ planpilot sync --config ./planpilot.json --apply
215
216
 
216
217
  | Flag | Default | Description |
217
218
  |------|---------|-------------|
218
- | `--config` | | Path to `planpilot.json` |
219
+ | `--config` | `./planpilot.json` | Path to `planpilot.json` |
219
220
  | `--dry-run` | — | Preview mode (no provider mutations) |
220
221
  | `--apply` | — | Apply mode |
221
222
  | `--verbose` | off | Enable verbose logging |
222
223
 
224
+ ### `planpilot map sync`
225
+
226
+ | Flag | Default | Description |
227
+ |------|---------|-------------|
228
+ | `--config` | `./planpilot.json` | Path to `planpilot.json` |
229
+ | `--dry-run` | — | Preview local sync-map reconciliation |
230
+ | `--apply` | — | Persist reconciled local sync-map |
231
+ | `--plan-id` | auto | Explicit remote plan ID to reconcile |
232
+ | `--verbose` | off | Enable verbose logging |
233
+
234
+ `map sync` reconciles local artifacts from provider metadata only; it does not mutate provider items.
235
+ In apply mode it writes both the local sync-map and local plan files.
236
+
223
237
  Full CLI reference: [docs/modules/cli.md](docs/modules/cli.md)
224
238
 
225
239
  ## Plan file schemas
@@ -182,11 +182,24 @@ planpilot sync --config ./planpilot.json --apply
182
182
 
183
183
  | Flag | Default | Description |
184
184
  |------|---------|-------------|
185
- | `--config` | | Path to `planpilot.json` |
185
+ | `--config` | `./planpilot.json` | Path to `planpilot.json` |
186
186
  | `--dry-run` | — | Preview mode (no provider mutations) |
187
187
  | `--apply` | — | Apply mode |
188
188
  | `--verbose` | off | Enable verbose logging |
189
189
 
190
+ ### `planpilot map sync`
191
+
192
+ | Flag | Default | Description |
193
+ |------|---------|-------------|
194
+ | `--config` | `./planpilot.json` | Path to `planpilot.json` |
195
+ | `--dry-run` | — | Preview local sync-map reconciliation |
196
+ | `--apply` | — | Persist reconciled local sync-map |
197
+ | `--plan-id` | auto | Explicit remote plan ID to reconcile |
198
+ | `--verbose` | off | Enable verbose logging |
199
+
200
+ `map sync` reconciles local artifacts from provider metadata only; it does not mutate provider items.
201
+ In apply mode it writes both the local sync-map and local plan files.
202
+
190
203
  Full CLI reference: [docs/modules/cli.md](docs/modules/cli.md)
191
204
 
192
205
  ## Plan file schemas
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "planpilot"
3
- version = "2.0.1"
3
+ version = "2.2.0"
4
4
  description = "Sync roadmap plans (epics, stories, tasks) to GitHub Issues and Projects v2"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -42,6 +42,7 @@ python = ">=3.11"
42
42
  pydantic = "^2.12.5"
43
43
  httpx = "^0.28"
44
44
  questionary = "^2.1"
45
+ rich = "^14.3.2"
45
46
 
46
47
  [tool.poetry.group.dev.dependencies]
47
48
  pytest = ">=7.0"
@@ -1,6 +1,6 @@
1
1
  """Public API surface for PlanPilot."""
2
2
 
3
- __version__ = "2.0.1"
3
+ __version__ = "2.2.0"
4
4
 
5
5
  from planpilot.auth import create_token_resolver
6
6
  from planpilot.contracts.config import FieldConfig, PlanPaths, PlanPilotConfig
@@ -16,7 +16,7 @@ from planpilot.contracts.exceptions import (
16
16
  from planpilot.contracts.plan import Plan, PlanItem, PlanItemType
17
17
  from planpilot.contracts.provider import Provider
18
18
  from planpilot.contracts.renderer import BodyRenderer, RenderContext
19
- from planpilot.contracts.sync import SyncEntry, SyncMap, SyncResult
19
+ from planpilot.contracts.sync import MapSyncResult, SyncEntry, SyncMap, SyncResult
20
20
  from planpilot.providers import create_provider
21
21
  from planpilot.renderers import create_renderer
22
22
  from planpilot.scaffold import create_plan_stubs, detect_plan_paths, detect_target, scaffold_config, write_config
@@ -27,6 +27,7 @@ __all__ = [
27
27
  "BodyRenderer",
28
28
  "ConfigError",
29
29
  "FieldConfig",
30
+ "MapSyncResult",
30
31
  "Plan",
31
32
  "PlanItem",
32
33
  "PlanItemType",