wade-cli 0.29.0__tar.gz → 0.29.2__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 (275) hide show
  1. wade_cli-0.29.2/.github/workflows/publish.yml +17 -0
  2. wade_cli-0.29.2/.github/workflows/release.yml +33 -0
  3. {wade_cli-0.29.0 → wade_cli-0.29.2}/AGENTS.md +4 -3
  4. {wade_cli-0.29.0 → wade_cli-0.29.2}/CHANGELOG.md +12 -0
  5. {wade_cli-0.29.0 → wade_cli-0.29.2}/CONTRIBUTING.md +3 -2
  6. {wade_cli-0.29.0 → wade_cli-0.29.2}/PKG-INFO +3 -1
  7. {wade_cli-0.29.0 → wade_cli-0.29.2}/README.md +2 -0
  8. {wade_cli-0.29.0 → wade_cli-0.29.2}/docs/dev/architecture.md +17 -25
  9. {wade_cli-0.29.0 → wade_cli-0.29.2}/docs/dev/extending.md +2 -11
  10. {wade_cli-0.29.0 → wade_cli-0.29.2}/docs/dev/testing.md +0 -2
  11. {wade_cli-0.29.0 → wade_cli-0.29.2}/pyproject.toml +1 -1
  12. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/__init__.py +1 -1
  13. wade_cli-0.29.0/scripts/probe_models.sh +0 -3
  14. {wade_cli-0.29.0 → wade_cli-0.29.2}/.github/workflows/auto-version.yml +0 -0
  15. {wade_cli-0.29.0 → wade_cli-0.29.2}/.github/workflows/ci.yml +0 -0
  16. {wade_cli-0.29.0 → wade_cli-0.29.2}/.github/workflows/pr-title-lint.yml +0 -0
  17. {wade_cli-0.29.0 → wade_cli-0.29.2}/.gitignore +0 -0
  18. {wade_cli-0.29.0 → wade_cli-0.29.2}/.pre-commit-config.yaml +0 -0
  19. {wade_cli-0.29.0 → wade_cli-0.29.2}/.wade.yml +0 -0
  20. {wade_cli-0.29.0 → wade_cli-0.29.2}/KNOWLEDGE.md +0 -0
  21. {wade_cli-0.29.0 → wade_cli-0.29.2}/KNOWLEDGE.ratings.yml +0 -0
  22. {wade_cli-0.29.0 → wade_cli-0.29.2}/assets/wade.png +0 -0
  23. {wade_cli-0.29.0 → wade_cli-0.29.2}/docker-compose.e2e.yml +0 -0
  24. {wade_cli-0.29.0 → wade_cli-0.29.2}/docs/dev/documentation-policies.md +0 -0
  25. {wade_cli-0.29.0 → wade_cli-0.29.2}/docs/dev/skills-system.md +0 -0
  26. {wade_cli-0.29.0 → wade_cli-0.29.2}/install.sh +0 -0
  27. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/auto_version.py +0 -0
  28. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/changelog.py +0 -0
  29. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/check-all.sh +0 -0
  30. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/check.sh +0 -0
  31. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/fmt.sh +0 -0
  32. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/hooks/pre-push +0 -0
  33. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/install-hooks.sh +0 -0
  34. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/release.sh +0 -0
  35. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/setup-worktree.sh +0 -0
  36. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test-e2e-docker.sh +0 -0
  37. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test-e2e.sh +0 -0
  38. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test-live-ai-taskr.sh +0 -0
  39. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test-live-ai.sh +0 -0
  40. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test-live-gh.sh +0 -0
  41. {wade_cli-0.29.0 → wade_cli-0.29.2}/scripts/test.sh +0 -0
  42. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/__main__.py +0 -0
  43. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/__init__.py +0 -0
  44. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/admin.py +0 -0
  45. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/autocomplete.py +0 -0
  46. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/implementation_session.py +0 -0
  47. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/knowledge.py +0 -0
  48. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/main.py +0 -0
  49. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/plan_session.py +0 -0
  50. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/review.py +0 -0
  51. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/review_pr_comments_session.py +0 -0
  52. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/session_shared.py +0 -0
  53. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/task.py +0 -0
  54. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/cli/worktree.py +0 -0
  55. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/config/__init__.py +0 -0
  56. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/config/loader.py +0 -0
  57. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/config/migrations.py +0 -0
  58. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/config/schema.py +0 -0
  59. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/db/__init__.py +0 -0
  60. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/db/engine.py +0 -0
  61. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/db/repositories.py +0 -0
  62. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/db/tables.py +0 -0
  63. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/__init__.py +0 -0
  64. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/branch.py +0 -0
  65. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/pr.py +0 -0
  66. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/repo.py +0 -0
  67. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/stash.py +0 -0
  68. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/sync.py +0 -0
  69. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/git/worktree.py +0 -0
  70. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/hooks/__init__.py +0 -0
  71. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/hooks/plan_write_guard.py +0 -0
  72. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/hooks/worktree_guard.py +0 -0
  73. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/logging/__init__.py +0 -0
  74. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/logging/context.py +0 -0
  75. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/logging/setup.py +0 -0
  76. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/__init__.py +0 -0
  77. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/batch.py +0 -0
  78. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/config.py +0 -0
  79. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/delegation.py +0 -0
  80. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/deps.py +0 -0
  81. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/events.py +0 -0
  82. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/review.py +0 -0
  83. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/session.py +0 -0
  84. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/models/task.py +0 -0
  85. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/__init__.py +0 -0
  86. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/_pr_delegate.py +0 -0
  87. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/base.py +0 -0
  88. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/clickup.py +0 -0
  89. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/github.py +0 -0
  90. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/markdown.py +0 -0
  91. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/providers/registry.py +0 -0
  92. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/__init__.py +0 -0
  93. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/ai_resolution.py +0 -0
  94. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/batch_review_service.py +0 -0
  95. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/check_service.py +0 -0
  96. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/delegation_service.py +0 -0
  97. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/deps_service.py +0 -0
  98. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/implementation_service/__init__.py +0 -0
  99. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/implementation_service/batch.py +0 -0
  100. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/implementation_service/bootstrap.py +0 -0
  101. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/implementation_service/core.py +0 -0
  102. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/implementation_service/usage_tracking.py +0 -0
  103. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/init_service.py +0 -0
  104. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/knowledge_search.py +0 -0
  105. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/knowledge_service.py +0 -0
  106. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/plan_service.py +0 -0
  107. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/prompt_delivery.py +0 -0
  108. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/review_delegation_service.py +0 -0
  109. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/review_service.py +0 -0
  110. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/review_settle.py +0 -0
  111. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/smart_start.py +0 -0
  112. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/services/task_service.py +0 -0
  113. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/skills/__init__.py +0 -0
  114. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/skills/installer.py +0 -0
  115. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/skills/pointer.py +0 -0
  116. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/ui/__init__.py +0 -0
  117. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/ui/console.py +0 -0
  118. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/ui/prompts.py +0 -0
  119. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/__init__.py +0 -0
  120. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/clipboard.py +0 -0
  121. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/http.py +0 -0
  122. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/install.py +0 -0
  123. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/markdown.py +0 -0
  124. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/process.py +0 -0
  125. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/slug.py +0 -0
  126. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/terminal.py +0 -0
  127. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/token_usage_markdown.py +0 -0
  128. {wade_cli-0.29.0 → wade_cli-0.29.2}/src/wade/utils/update_check.py +0 -0
  129. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/agents-pointer.md +0 -0
  130. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/deps-analysis.md +0 -0
  131. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/implement-context.md +0 -0
  132. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/plan-session.md +0 -0
  133. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/review-batch.md +0 -0
  134. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/review-code.md +0 -0
  135. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/review-plan.md +0 -0
  136. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/prompts/review-pr-comments.md +0 -0
  137. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/setup-worktree.sh.example +0 -0
  138. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/_partials/review-enforcement-rule.md +0 -0
  139. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/_partials/review-implementation-closing-step.md +0 -0
  140. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/_partials/review-plan-step.md +0 -0
  141. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/_partials/user-interaction.md +0 -0
  142. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/deps/SKILL.md +0 -0
  143. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/implementation-session/SKILL.md +0 -0
  144. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/knowledge/SKILL.md +0 -0
  145. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/plan-session/SKILL.md +0 -0
  146. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/review-pr-comments-session/SKILL.md +0 -0
  147. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/task/SKILL.md +0 -0
  148. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/task/examples.md +0 -0
  149. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/skills/task/plan-format.md +0 -0
  150. {wade_cli-0.29.0 → wade_cli-0.29.2}/templates/statusline-command.sh +0 -0
  151. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/__init__.py +0 -0
  152. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/conftest.py +0 -0
  153. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/__init__.py +0 -0
  154. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/_support.py +0 -0
  155. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/conftest.py +0 -0
  156. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/mock_gh_script.py +0 -0
  157. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_admin_contract.py +0 -0
  158. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_check_contract.py +0 -0
  159. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_implement_work_done_contract.py +0 -0
  160. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_knowledge_contract.py +0 -0
  161. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_mock_gh_contract.py +0 -0
  162. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_plan_contract.py +0 -0
  163. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_review_contract.py +0 -0
  164. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_smart_start_contract.py +0 -0
  165. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_task_contract.py +0 -0
  166. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/e2e/test_work_sync_list_contract.py +0 -0
  167. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
  168. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
  169. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/transcripts/claude_session.txt +0 -0
  170. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/transcripts/codex_session.txt +0 -0
  171. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/transcripts/copilot_session.txt +0 -0
  172. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/transcripts/gemini_session.txt +0 -0
  173. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/fixtures/transcripts/generic_session.txt +0 -0
  174. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/__init__.py +0 -0
  175. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_autostash.py +0 -0
  176. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_check.py +0 -0
  177. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_git.py +0 -0
  178. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_implementation_lifecycle.py +0 -0
  179. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_init.py +0 -0
  180. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_knowledge.py +0 -0
  181. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_markdown_provider.py +0 -0
  182. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/integration/test_skill_install.py +0 -0
  183. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/live/__init__.py +0 -0
  184. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/live/test_wade_live_ai.py +0 -0
  185. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/live/test_wade_live_ai_taskr.py +0 -0
  186. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/live/test_wade_live_gh.py +0 -0
  187. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/test_cli_basics.py +0 -0
  188. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/__init__.py +0 -0
  189. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/conftest.py +0 -0
  190. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/__init__.py +0 -0
  191. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_done_review_hint.py +0 -0
  192. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
  193. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_review_cli.py +0 -0
  194. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_session_subapps.py +0 -0
  195. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_shell_init.py +0 -0
  196. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_task_cli.py +0 -0
  197. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
  198. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_cli/test_work_cli.py +0 -0
  199. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_config/__init__.py +0 -0
  200. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_config/test_loader.py +0 -0
  201. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_config/test_migrations.py +0 -0
  202. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_config/test_migrations_atomic.py +0 -0
  203. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_console.py +0 -0
  204. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_db/__init__.py +0 -0
  205. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_db/test_repository_transactions.py +0 -0
  206. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_effort.py +0 -0
  207. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/__init__.py +0 -0
  208. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_branch_slugify.py +0 -0
  209. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_detached_worktree.py +0 -0
  210. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_pr_base.py +0 -0
  211. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_repo.py +0 -0
  212. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_scaffold_commit.py +0 -0
  213. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
  214. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_git/test_worktree_remove.py +0 -0
  215. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_hooks/__init__.py +0 -0
  216. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_hooks/test_plan_write_guard.py +0 -0
  217. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_hooks/test_worktree_guard.py +0 -0
  218. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/__init__.py +0 -0
  219. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_batch.py +0 -0
  220. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_config_models.py +0 -0
  221. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_db.py +0 -0
  222. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_delegation.py +0 -0
  223. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_deps_models.py +0 -0
  224. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_deps_partition.py +0 -0
  225. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_review.py +0 -0
  226. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_models/test_task_models.py +0 -0
  227. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_providers/__init__.py +0 -0
  228. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_providers/test_clickup.py +0 -0
  229. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_providers/test_github.py +0 -0
  230. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_providers/test_github_pr.py +0 -0
  231. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_providers/test_markdown.py +0 -0
  232. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/__init__.py +0 -0
  233. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_ai_resolution.py +0 -0
  234. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_batch_review_service.py +0 -0
  235. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
  236. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
  237. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_catchup.py +0 -0
  238. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_check.py +0 -0
  239. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_delegation_service.py +0 -0
  240. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_deps_service.py +0 -0
  241. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_done_plan_flag.py +0 -0
  242. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_done_via_direct_cleanup.py +0 -0
  243. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
  244. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_implementation_service.py +0 -0
  245. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
  246. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_init.py +0 -0
  247. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_init_shell_integration.py +0 -0
  248. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_knowledge_search.py +0 -0
  249. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_knowledge_service.py +0 -0
  250. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_plan_service.py +0 -0
  251. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
  252. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
  253. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_pr_summary_path.py +0 -0
  254. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_preserve_session_data.py +0 -0
  255. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_prompt_delivery.py +0 -0
  256. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_review_delegation_service.py +0 -0
  257. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_review_service.py +0 -0
  258. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_smart_start.py +0 -0
  259. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_smart_start_resume.py +0 -0
  260. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_sync_base_branch.py +0 -0
  261. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_task_service.py +0 -0
  262. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
  263. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
  264. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
  265. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/__init__.py +0 -0
  266. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_http.py +0 -0
  267. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_install.py +0 -0
  268. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_markdown.py +0 -0
  269. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_process.py +0 -0
  270. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_prompts.py +0 -0
  271. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_slug.py +0 -0
  272. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_terminal.py +0 -0
  273. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_terminal_launch.py +0 -0
  274. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_utils/test_update_check.py +0 -0
  275. {wade_cli-0.29.0 → wade_cli-0.29.2}/tests/unit/test_yolo.py +0 -0
@@ -0,0 +1,17 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ environment: pypi
11
+ permissions:
12
+ id-token: write
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: astral-sh/setup-uv@v4
16
+ - run: uv build
17
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,33 @@
1
+ name: Create Draft Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+
7
+ jobs:
8
+ draft-release:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - name: Extract changelog section
18
+ id: changelog
19
+ run: |
20
+ VERSION="${GITHUB_REF_NAME}"
21
+ NOTES=$(awk "/^## \[${VERSION}\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md)
22
+ echo "notes<<EOF" >> $GITHUB_OUTPUT
23
+ echo "$NOTES" >> $GITHUB_OUTPUT
24
+ echo "EOF" >> $GITHUB_OUTPUT
25
+
26
+ - name: Create draft release
27
+ env:
28
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
+ run: |
30
+ gh release create "$GITHUB_REF_NAME" \
31
+ --draft \
32
+ --title "$GITHUB_REF_NAME" \
33
+ --notes "${{ steps.changelog.outputs.notes }}"
@@ -53,9 +53,8 @@ uv run python scripts/auto_version.py patch # Version bump (patch/minor/major)
53
53
 
54
54
  ```
55
55
  CLI Layer -> can import: services, models, config, logging, ui
56
- Service Layer -> can import: providers, ai_tools, git, db, models, config, logging
56
+ Service Layer -> can import: providers, crossby (AI tool adapters), git, db, models, config, logging
57
57
  Provider Layer -> can import: models, config, logging (NO service imports)
58
- AI Tool Layer -> can import: models, config, logging (NO service imports)
59
58
  Git Layer -> can import: models, config, logging (NO service imports)
60
59
  DB Layer -> can import: models, logging (NO config imports)
61
60
  Models Layer -> can import: nothing (leaf dependency)
@@ -63,13 +62,15 @@ Models Layer -> can import: nothing (leaf dependency)
63
62
 
64
63
  No circular dependencies. Models are pure data. Services orchestrate. **Never import a higher layer from a lower layer.**
65
64
 
65
+ AI tool adapters are not part of this repo — they live in the external [`crossby`](https://github.com/ivanviragine/crossby) package (`pyproject.toml`). See `docs/dev/architecture.md` for what moved there.
66
+
66
67
  CLI modules are thin dispatch — they parse flags via Typer, then call service methods. Business logic lives in `services/`, not in `cli/`.
67
68
 
68
69
  > Full package structure, command dispatch, config system, and subsystem details: see `docs/dev/architecture.md`
69
70
 
70
71
  ### Key Design Patterns
71
72
 
72
- - **AI Tool Self-Registration**: `AbstractAITool.__init_subclass__` auto-registers adapters. Adding a new AI tool = one file, one class.
73
+ - **AI Tool Adapters via crossby**: `AbstractAITool` and every tool-specific adapter (Claude, Cursor, Copilot, Gemini, Codex, OpenCode, Antigravity, VS Code) live in the external `crossby` dependency, not this repo. Wade's services import `crossby.ai_tools` and `crossby.models.ai` directly. Adding a new AI tool means contributing to crossby, not wade.
73
74
  - **Provider Abstraction**: `AbstractTaskProvider` ABC with pluggable backends (GitHub via `gh` CLI, ClickUp via REST API, Markdown via a single central file). Non-GitHub providers compose `GitHubPRDelegateMixin` so PR-review APIs still flow through `gh`.
74
75
  - **Prompts as .md Templates**: All AI prompts live in `templates/prompts/`, not inline strings.
75
76
  - **Synchronous Only**: No asyncio. Process-level parallelism via multiple terminals.
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://conventionalcommits.org/).
6
6
 
7
+ ## [v0.29.2] — 2026-07-15
8
+
9
+ ### CI/CD
10
+
11
+ - restore release and publish workflows (8a5ddc3)
12
+
13
+ ## [v0.29.1] — 2026-07-15
14
+
15
+ ### Documentation
16
+
17
+ - reflect crossby AI tool layer migration, remove dead artifacts (6927543)
18
+
7
19
  ## [v0.29.0] — 2026-07-14
8
20
 
9
21
  ### Features
@@ -35,14 +35,15 @@ uv pip install -e ".[dev]"
35
35
 
36
36
  ```
37
37
  CLI Layer → services, models, config, logging, ui
38
- Service Layer → providers, ai_tools, git, db, models, config, logging
38
+ Service Layer → providers, crossby (AI tool adapters), git, db, models, config, logging
39
39
  Provider Layer → models, config, logging (no service imports)
40
- AI Tool Layer → models, config, logging (no service imports)
41
40
  Git Layer → models, config, logging (no service imports)
42
41
  DB Layer → models, logging (no config imports)
43
42
  Models Layer → nothing (leaf)
44
43
  ```
45
44
 
45
+ AI tool adapters live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not this repo — see `docs/dev/architecture.md`.
46
+
46
47
  CLI modules are thin dispatch — parse flags with Typer, call service methods. Business logic lives in `services/`, not `cli/`.
47
48
 
48
49
  See `docs/dev/architecture.md` for the full reference.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wade-cli
3
- Version: 0.29.0
3
+ Version: 0.29.2
4
4
  Summary: WADE — Workflow for AI-Driven Engineering
5
5
  Project-URL: Homepage, https://github.com/ivanviragine/wade
6
6
  Project-URL: Repository, https://github.com/ivanviragine/wade
@@ -183,6 +183,8 @@ Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level
183
183
 
184
184
  ## Supported AI Tools
185
185
 
186
+ Adapters, model/effort resolution, and per-tool config (allowlists, hooks) are powered by [`crossby`](https://github.com/ivanviragine/crossby), WADE's AI-tool-integration dependency.
187
+
186
188
  | Tool | Binary |
187
189
  |------|--------|
188
190
  | [Claude Code](https://claude.com/product/claude-code) | `claude` |
@@ -146,6 +146,8 @@ Most workflow commands accept `--ai <tool>`, `--model <model>`, `--effort <level
146
146
 
147
147
  ## Supported AI Tools
148
148
 
149
+ Adapters, model/effort resolution, and per-tool config (allowlists, hooks) are powered by [`crossby`](https://github.com/ivanviragine/crossby), WADE's AI-tool-integration dependency.
150
+
149
151
  | Tool | Binary |
150
152
  |------|--------|
151
153
  | [Claude Code](https://claude.com/product/claude-code) | `claude` |
@@ -42,8 +42,6 @@ uv run python scripts/changelog.py # write CHANGELOG.md
42
42
  uv run python scripts/changelog.py --stdout # print to stdout
43
43
  uv run python scripts/changelog.py --tag v1.0.0 # label unreleased as v1.0.0
44
44
 
45
- # Probe AI CLIs for new/removed models and diff against models.json
46
- ./scripts/probe_models.sh
47
45
  ```
48
46
 
49
47
  ## Package Structure
@@ -66,7 +64,6 @@ src/wade/
66
64
  │ ├── config.py # ProjectConfig, ProjectSettings, AIConfig, ComplexityModelMapping
67
65
  │ ├── task.py # Task, PlanFile, Complexity, Label, TaskState
68
66
  │ ├── session.py # ImplementationSession, WorktreeState, SyncResult, SyncEvent, MergeStrategy
69
- │ ├── ai.py # AIToolID, AIModel, ModelTier, TokenUsage, AIToolCapabilities
70
67
  │ ├── delegation.py # DelegationRequest, DelegationResult, DelegationMode
71
68
  │ ├── review.py # PRReviewStatus, ReviewThread, ReviewComment
72
69
  │ ├── batch.py # BatchIssueContext, BatchReviewContext
@@ -95,18 +92,6 @@ src/wade/
95
92
  │ ├── github.py # GitHubProvider (gh CLI subprocess)
96
93
  │ ├── clickup.py # ClickUpProvider (REST API)
97
94
  │ └── registry.py # Provider registry (register_provider / get_provider)
98
- ├── ai_tools/ # AI tool adapters (ABC, self-registering)
99
- │ ├── base.py # AbstractAITool with __init_subclass__ registry
100
- │ ├── claude.py # ClaudeAdapter
101
- │ ├── cursor.py # CursorAdapter
102
- │ ├── copilot.py # CopilotAdapter
103
- │ ├── gemini.py # GeminiAdapter
104
- │ ├── codex.py # CodexAdapter (OpenAI Codex)
105
- │ ├── opencode.py # OpenCodeAdapter (multi-provider)
106
- │ ├── antigravity.py # AntigravityAdapter
107
- │ ├── vscode.py # VSCodeAdapter (GUI launcher)
108
- │ ├── transcript.py # Shared transcript parsing
109
- │ └── model_utils.py # pick_best_for_tier, has_date_suffix
110
95
  ├── git/ # Git operations (all subprocess)
111
96
  │ ├── repo.py # Repo introspection
112
97
  │ ├── worktree.py # Worktree create/remove/list
@@ -121,19 +106,10 @@ src/wade/
121
106
  ├── config/ # Configuration management
122
107
  │ ├── loader.py # Find + parse .wade.yml (walk up from CWD)
123
108
  │ ├── schema.py # Re-exports from models (Pydantic Settings)
124
- │ ├── defaults.py # Hardcoded defaults per AI tool
125
- │ ├── migrations.py # Config migration pipeline (ensure version key)
126
- │ ├── claude_allowlist.py # .claude/settings.json allowlist management
127
- │ ├── cursor_allowlist.py # Cursor settings allowlist management
128
- │ ├── hooks_util.py # Shared JSON hook config read/merge/write utility
129
- │ ├── cursor_hooks.py # Cursor settings.json hooks
130
- │ ├── copilot_hooks.py # Copilot VS Code settings hooks
131
- │ └── gemini_hooks.py # Gemini configuration hooks
109
+ │ └── migrations.py # Config migration pipeline (ensure version key)
132
110
  ├── ui/ # Terminal UI (Rich)
133
111
  │ ├── console.py # Console class
134
112
  │ └── prompts.py # confirm, input, select, menu
135
- ├── data/ # Bundled data files
136
- │ └── models.json # AI model registry (probed from CLIs)
137
113
  ├── logging/ # Structured logging
138
114
  │ ├── setup.py # structlog configuration
139
115
  │ └── context.py # Session context binding
@@ -148,6 +124,22 @@ src/wade/
148
124
  └── install.py # Self-upgrade helpers (venv/source detection, re-exec)
149
125
  ```
150
126
 
127
+ ## AI Tool Layer (external: crossby)
128
+
129
+ AI tool adapters, model/effort resolution primitives, the model registry, and per-tool config (allowlists, hooks, defaults) are **not** part of this repo. They live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, pinned in `pyproject.toml` (`crossby>=0.2.6,<0.3.0`). This replaced wade's formerly-internal `ai_tools/` and parts of `config/` and `data/` (see `feat: replace internal AI tool layer with the crossby dependency (#215)`).
130
+
131
+ | What | Lives in crossby | Used from wade via |
132
+ |------|-------------------|---------------------|
133
+ | `AbstractAITool` + adapters (Claude, Cursor, Copilot, Gemini, Codex, OpenCode, Antigravity, VS Code) | `crossby.ai_tools` | `services/ai_resolution.py`, `delegation_service.py`, `review_service.py`, `plan_service.py`, `prompt_delivery.py` |
134
+ | `AIToolID`, `AIModel`, `ModelTier`, `TokenUsage`, `AIToolCapabilities`, `EffortLevel` | `crossby.models.ai` | re-exported from `wade.models` |
135
+ | Model registry (probed from CLIs, was `data/models.json`) | `crossby.data.get_models_for_tool()` | `ai_resolution.py`, `init_service.py` |
136
+ | Per-tool default model tiers (was `config/defaults.py`) | `crossby.config.defaults.get_defaults()` | `init_service.py` |
137
+ | Claude/Cursor allowlist management, Cursor/Copilot/Gemini hook config (was `config/*_allowlist.py`, `config/*_hooks.py`) | `crossby.config.*`, `crossby.sync.permissions` | `implementation_service/bootstrap.py`, `init_service.py` |
138
+
139
+ Wade still owns a thin `services/ai_resolution.py` rather than delegating outright: wade's `ProjectConfig.ai` uses named per-command fields (e.g. `ai.plan`), while crossby's own config expects a `commands` dict — the two shapes aren't interchangeable yet. See that module's docstring for the up-to-date status.
140
+
141
+ Adding support for a new AI tool means contributing an adapter to crossby, not to this repo — see `docs/dev/extending.md`.
142
+
151
143
  ## Command Dispatch
152
144
 
153
145
  `src/wade/cli/main.py` is the root Typer application. It registers subcommand groups (`task`, `worktree`, `plan-session`, `implementation-session`, `review-pr-comments-session`, `review`) and admin commands (`init`, `update`, `deinit`, `check-config`, `shell-init`). The `tasks` alias is registered as a hidden Typer group pointing to the same `task_app`. The `wade` entry point (defined in `pyproject.toml` as `wade.cli.main:cli_main`) invokes the root app.
@@ -14,20 +14,11 @@ The task CLI is in `src/wade/cli/task.py`, business logic in `src/wade/services/
14
14
 
15
15
  ## Adding a New AI Tool
16
16
 
17
- Thanks to `__init_subclass__` auto-registration, adding a new AI tool requires only one file:
18
-
19
- 1. Create `src/wade/ai_tools/<tool_name>.py`
20
- 2. Define a class that inherits from `AbstractAITool` and sets `TOOL_ID`
21
- 3. Implement the required abstract method: `capabilities()` (returns `AIToolCapabilities`)
22
- 4. Override `get_models()`, `launch()`, or `parse_transcript()` only if the defaults are insufficient
23
- 5. Add the tool ID to `AIToolID` enum in `models/ai.py`
24
- 6. Import the module in `ai_tools/__init__.py` to trigger registration
25
-
26
- No modification to `base.py`, services, or CLI is needed.
17
+ AI tool adapters (`AbstractAITool` subclasses, using `__init_subclass__` auto-registration) live in the external [`crossby`](https://github.com/ivanviragine/crossby) package, not in this repo — see `docs/dev/architecture.md` for the full list of what moved there. Adding a new AI tool means adding an adapter in crossby, then in wade: bump the `crossby` pin in `pyproject.toml`, and add the tool's binary name to `README.md`'s "Supported AI Tools" table. No changes to wade's `services/` or `cli/` are needed unless the tool needs command-specific handling.
27
18
 
28
19
  ## Adding a New Provider
29
20
 
30
- The provider system uses `AbstractTaskProvider` ABC (`src/wade/providers/base.py`) with `GitHubProvider` and `ClickUpProvider` as current implementations. Unlike AI tools (which use `__init_subclass__` auto-registration), providers use a registry pattern. To add a new provider (e.g., Linear, Jira):
21
+ The provider system uses `AbstractTaskProvider` ABC (`src/wade/providers/base.py`) with `GitHubProvider` and `ClickUpProvider` as current implementations. Unlike AI tools (which are external, via crossby), providers are local to wade and use a registry pattern. To add a new provider (e.g., Linear, Jira):
31
22
 
32
23
  1. Create `src/wade/providers/<provider_name>.py`
33
24
  2. Implement all abstract methods from `AbstractTaskProvider`
@@ -12,10 +12,8 @@ tests/
12
12
  │ ├── test_models/ # Pydantic model tests
13
13
  │ ├── test_services/ # Service logic tests (mocked providers/git)
14
14
  │ ├── test_config/ # Config parsing tests
15
- │ ├── test_transcript/ # Transcript parsing tests
16
15
  │ ├── test_utils/ # Utility function tests
17
16
  │ ├── test_cli/ # CLI command tests (shell-init, AI flags)
18
- │ ├── test_ai_tools/ # AI tool adapter and registry tests
19
17
  │ ├── test_db/ # Database repository tests
20
18
  │ ├── test_git/ # Git operation tests (branch, sync, worktree)
21
19
  │ ├── test_hooks/ # Hook tests (plan write guard)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "wade-cli"
7
- version = "0.29.0"
7
+ version = "0.29.2"
8
8
  description = "WADE — Workflow for AI-Driven Engineering"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """WADE (Workflow for AI-Driven Engineering) — AI-agent-driven git workflow management CLI."""
2
2
 
3
- __version__ = "0.29.0"
3
+ __version__ = "0.29.2"
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- exec uv run python "$(dirname "${BASH_SOURCE[0]}")/probe_models.py" "$@"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes