wade-cli 0.50.2__tar.gz → 0.50.4__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.
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.github/workflows/release.yml +2 -6
- {wade_cli-0.50.2 → wade_cli-0.50.4}/CHANGELOG.md +12 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/PKG-INFO +2 -2
- {wade_cli-0.50.2 → wade_cli-0.50.4}/pyproject.toml +2 -2
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/__init__.py +1 -1
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_hooks/test_hook_cli.py +76 -4
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.gitattributes +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.github/workflows/auto-version.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.github/workflows/ci.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.github/workflows/pr-title-lint.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.github/workflows/publish.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.gitignore +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.pre-commit-config.yaml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/.wade.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/AGENTS.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/CONTRIBUTING.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/KNOWLEDGE.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/KNOWLEDGE.ratings.jsonl +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/README.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/assets/wade.png +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docker-compose.e2e.yml +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docs/dev/architecture.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docs/dev/documentation-policies.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docs/dev/extending.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docs/dev/skills-system.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/docs/dev/testing.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/install.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/auto_version.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/changelog.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/check-all.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/check.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/fmt.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/hooks/pre-push +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/install-hooks.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/release.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/setup-worktree.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-concurrency.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-e2e-docker.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-e2e.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-live-ai-taskr.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-live-ai.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test-live-gh.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/scripts/test.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/__main__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/admin.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/autocomplete.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/hook.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/implementation_session.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/knowledge.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/main.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/plan_session.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/review.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/review_pr_comments_session.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/session_shared.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/task.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/cli/worktree.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/config/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/config/loader.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/config/migrations.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/config/schema.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/branch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/hooks.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/pr.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/repo.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/stash.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/sync.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/git/worktree.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/hooks/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/hooks/cli.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/hooks/policies.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/logging/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/logging/context.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/logging/setup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/batch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/config.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/delegation.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/deps.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/events.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/hooks.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/permission.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/review.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/session.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/task.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/models/worktree.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/_pr_delegate.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/base.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/clickup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/github.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/markdown.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/providers/registry.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/ai_resolution.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/batch_review_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/check_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/delegation_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/deps_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/_shared.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/batch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/bootstrap.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/cleanup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/core.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/done.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/draft_pr.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/lifecycle.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/sync.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/usage_tracking.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/auth.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/commands.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/config_io.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/manifest.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/migrations.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/prompts_ai.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/prompts_setup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/init_service/shell.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/knowledge_search.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/knowledge_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/plan_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/prompt_delivery.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/review_delegation_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/review_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/review_settle.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/smart_start.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/task_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/skills/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/skills/doc_targets.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/skills/installer.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/skills/pointer.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/ui/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/ui/console.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/ui/prompts.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/body_markers.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/clipboard.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/conventional.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/filelock.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/gitref.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/http.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/install.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/knowledge_file.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/markdown.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/markers.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/paths.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/plan_validation.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/process.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/slug.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/stale_base.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/templates.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/terminal.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/token_usage_markdown.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/utils/update_check.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/agents-pointer.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/hooks/commit-msg +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/hooks/pre-commit +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/hooks/pre-push +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/deps-analysis.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/implement-context.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/plan-session.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/review-batch.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/review-code.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/review-plan.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/review-pr-comments.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/session-start-implement.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/session-start-plan.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/prompts/session-start-review.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/setup-worktree.sh.example +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/doc-update-step.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/knowledge-step.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/review-budget.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/review-enforcement-rule.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/review-implementation-closing-step.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/review-plan-step.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/_partials/user-interaction.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/deps/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/reference/doc-update.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/reference/new-plan.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/reference/pr-summary-format.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/reference/recovery.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/implementation-session/reference/tracking-issues.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/knowledge/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/plan-session/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/plan-session/reference/plan-format.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/review-pr-comments-session/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/review-pr-comments-session/reference/doc-update.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/review-pr-comments-session/reference/recovery.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/task/SKILL.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/task/examples.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/task/plan-format.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/skills/task/reference/session-summary-format.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/templates/statusline-command.sh +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/concurrency/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/concurrency/test_batch_multi_pr.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/concurrency/test_knowledge_merge.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/concurrency/test_lock_retry.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/concurrency/test_stash_race.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/conftest.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/_support.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/conftest.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/mock_gh_script.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_admin_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_check_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_implement_work_done_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_knowledge_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_mock_gh_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_plan_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_review_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_smart_start_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_task_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/e2e/test_work_sync_list_contract.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/live/taskr_header_hi_body.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/live/taskr_header_howdy_body.md +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/transcripts/claude_session.txt +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/transcripts/codex_session.txt +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/transcripts/copilot_session.txt +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/fixtures/transcripts/generic_session.txt +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_autostash.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_check.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_git.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_implementation_lifecycle.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_init.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_knowledge.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_markdown_provider.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_skill_context_budget.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/integration/test_skill_install.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/live/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/live/test_wade_live_ai.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/live/test_wade_live_ai_taskr.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/live/test_wade_live_gh.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/test_cli_basics.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/conftest.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_done_doc_pass_advisory.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_done_review_hint.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_knowledge_cli.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_review_cli.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_session_subapps.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_shell_init.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_task_cli.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_work_ai_flags.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_cli/test_work_cli.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/test_bot_review_config.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/test_loader.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/test_merge_strategy_migration.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/test_migrations.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_config/test_migrations_atomic.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_console.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_effort.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_all_patches_present.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_branch_list.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_branch_slugify.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_detached_worktree.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_is_merged_into.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_main_checkout_root.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_merge_count.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_pr_base.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_pr_lookup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_pr_retry.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_pr_title.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_repo.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_reset_branch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_scaffold_commit.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_stash_drop.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_sync_conflicted_files.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_tip_commit_is_empty.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_git/test_worktree_remove.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_hooks/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_hooks/test_policies.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_hooks/test_post_tool_use.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_hooks/test_session_start.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_batch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_config_models.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_delegation.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_deps_models.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_deps_partition.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_review.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_review_expectation.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_models/test_task_models.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_permission_mode.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_providers/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_providers/test_clickup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_providers/test_github.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_providers/test_github_pr.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_providers/test_markdown.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_ai_resolution.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_batch_build_cmd.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_batch_pr_index.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_batch_review_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bootstrap_allowlist.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bootstrap_hook_timeout.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bootstrap_post_tool_use.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bootstrap_pre_push.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bootstrap_session_start.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_bot_trigger.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_catchup.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_catchup_reconcile.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_check.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_cleanup_loss_guard.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_codex_worktree_launch_context.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_delegation_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_deps_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_done_gates.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_done_idempotent.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_done_plan_flag.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_done_pr_title_sync.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_draft_pr_base_fetch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_draft_pr_retarget.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_implementation_done_sync.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_implementation_launch_context.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_implementation_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_implementation_service_resume.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_init.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_init_shell_integration.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_knowledge_search.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_knowledge_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_managed_git_hooks.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_no_direct_git.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_plan_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_poll_for_reviews.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_post_implementation_lifecycle.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_pr_lookup_guards.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_pr_summary_path.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_pre_push_backstop.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_preserve_session_data.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_prompt_delivery.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_push_recovery.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_resolve_task_branch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_resume_autonomy.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_review_delegation_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_review_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_review_status_block.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_reviewed_marker.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_smart_start.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_smart_start_resume.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_stale_base_surface.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_sync_base_branch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_task_service.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_tracked_managed_files.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_services/test_worktree_gitignore.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_skills/test_doc_targets.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_skills/test_knowledge_attributes.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_skills/test_managed_gitignore.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_skills/test_pointer.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_skills/test_review_budget_partial.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/__init__.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_body_markers.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_conventional.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_filelock.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_gitref.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_http.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_install.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_markdown.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_markers.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_plan_validation.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_process.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_prompts.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_slug.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_stale_base.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_terminal.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_terminal_launch.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_utils/test_update_check.py +0 -0
- {wade_cli-0.50.2 → wade_cli-0.50.4}/tests/unit/test_yolo.py +0 -0
|
@@ -15,13 +15,9 @@ jobs:
|
|
|
15
15
|
fetch-depth: 0
|
|
16
16
|
|
|
17
17
|
- name: Extract changelog section
|
|
18
|
-
id: changelog
|
|
19
18
|
run: |
|
|
20
19
|
VERSION="${GITHUB_REF_NAME}"
|
|
21
|
-
|
|
22
|
-
echo "notes<<EOF" >> $GITHUB_OUTPUT
|
|
23
|
-
echo "$NOTES" >> $GITHUB_OUTPUT
|
|
24
|
-
echo "EOF" >> $GITHUB_OUTPUT
|
|
20
|
+
awk "/^## \[${VERSION}\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md > release_notes.md
|
|
25
21
|
|
|
26
22
|
- name: Create draft release
|
|
27
23
|
env:
|
|
@@ -30,4 +26,4 @@ jobs:
|
|
|
30
26
|
gh release create "$GITHUB_REF_NAME" \
|
|
31
27
|
--draft \
|
|
32
28
|
--title "$GITHUB_REF_NAME" \
|
|
33
|
-
--notes
|
|
29
|
+
--notes-file release_notes.md
|
|
@@ -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.50.4] — 2026-08-19
|
|
8
|
+
|
|
9
|
+
### Chores
|
|
10
|
+
|
|
11
|
+
- bump crossby to adopt the Antigravity CLI hook-contract fix (#456) (5cb582c)
|
|
12
|
+
|
|
13
|
+
## [v0.50.3] — 2026-08-19
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- pass changelog notes to gh release create via file, not inline template (1776e0d)
|
|
18
|
+
|
|
7
19
|
## [v0.50.2] — 2026-08-19
|
|
8
20
|
|
|
9
21
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: wade-cli
|
|
3
|
-
Version: 0.50.
|
|
3
|
+
Version: 0.50.4
|
|
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
|
|
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
17
|
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
18
18
|
Requires-Python: >=3.11
|
|
19
|
-
Requires-Dist: crossby<0.25.0,>=0.24.
|
|
19
|
+
Requires-Dist: crossby<0.25.0,>=0.24.4
|
|
20
20
|
Requires-Dist: httpx<1.0,>=0.27
|
|
21
21
|
Requires-Dist: pydantic-settings>=2.0
|
|
22
22
|
Requires-Dist: pydantic>=2.0
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wade-cli"
|
|
7
|
-
version = "0.50.
|
|
7
|
+
version = "0.50.4"
|
|
8
8
|
description = "WADE — Workflow for AI-Driven Engineering"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -24,7 +24,7 @@ classifiers = [
|
|
|
24
24
|
"Topic :: Software Development :: Version Control :: Git",
|
|
25
25
|
]
|
|
26
26
|
dependencies = [
|
|
27
|
-
"crossby>=0.24.
|
|
27
|
+
"crossby>=0.24.4,<0.25.0",
|
|
28
28
|
"typer>=0.12,<0.26",
|
|
29
29
|
"pydantic>=2.0",
|
|
30
30
|
"pydantic-settings>=2.0",
|
|
@@ -96,8 +96,11 @@ class TestWorktreeGuardCLI:
|
|
|
96
96
|
"antigravity-cli",
|
|
97
97
|
json.dumps({"tool_name": "Write", "tool_input": {"path": "/etc/passwd"}}),
|
|
98
98
|
)
|
|
99
|
-
|
|
100
|
-
#
|
|
99
|
+
# DECISION dialect: agy reads the block from the top-level
|
|
100
|
+
# {"decision": "deny"} body, not the exit code — so the process exits 0
|
|
101
|
+
# even on a deny (crossby >= 0.24.4; see crossby#147). The decision field,
|
|
102
|
+
# not the exit code, is the contract.
|
|
103
|
+
assert r.returncode == 0
|
|
101
104
|
assert json.loads(r.stdout)["decision"] == "deny"
|
|
102
105
|
assert "BLOCKED" in r.stderr
|
|
103
106
|
|
|
@@ -520,8 +523,74 @@ class TestShellGuardCLI:
|
|
|
520
523
|
"antigravity-cli",
|
|
521
524
|
json.dumps({"toolCall": {"name": "run_command", "args": {"command": "cp a /etc/x"}}}),
|
|
522
525
|
)
|
|
523
|
-
|
|
526
|
+
# agy signals the block via the decision body, not the exit code (exit 0).
|
|
527
|
+
assert r.returncode == 0
|
|
528
|
+
assert json.loads(r.stdout)["decision"] == "deny"
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
class TestAntigravityPascalCaseDialect:
|
|
532
|
+
"""Pin the agy PascalCase tool-arg dialect at the wade-hook boundary.
|
|
533
|
+
|
|
534
|
+
agy nests tool args under ``toolCall.args`` and names them in PascalCase
|
|
535
|
+
(``TargetFile``/``CommandLine``), and it reads the guard verdict from a
|
|
536
|
+
top-level ``{"decision": ...}`` body (never the exit code). Before crossby
|
|
537
|
+
0.24.4 (crossby#147) those args went unread, so every write/command reached
|
|
538
|
+
wade's guards as an empty event — denying an agy plan session its own
|
|
539
|
+
``PLAN.md`` and silently no-op'ing shell containment. The rest of the unit
|
|
540
|
+
suite feeds already-normalized events, so these are the only tests that
|
|
541
|
+
exercise the raw agy arg names; they guard against a dialect regression.
|
|
542
|
+
"""
|
|
543
|
+
|
|
544
|
+
def _agy(self, guard: str, payload: dict[str, object]):
|
|
545
|
+
return _run_lean("pre_tool_use", guard, "antigravity-cli", json.dumps(payload))
|
|
546
|
+
|
|
547
|
+
def test_plan_write_targetfile_allowed(self) -> None:
|
|
548
|
+
# agy's write arg is ``TargetFile`` — a plan-artifact write must be allowed.
|
|
549
|
+
r = self._agy(
|
|
550
|
+
"plan",
|
|
551
|
+
{
|
|
552
|
+
"toolCall": {
|
|
553
|
+
"name": "write_to_file",
|
|
554
|
+
"args": {"TargetFile": f"{WT}/.wade/plans/PLAN.md", "CodeContent": "x"},
|
|
555
|
+
},
|
|
556
|
+
"stepIdx": 1,
|
|
557
|
+
},
|
|
558
|
+
)
|
|
559
|
+
assert r.returncode == 0
|
|
560
|
+
assert json.loads(r.stdout)["decision"] == "allow"
|
|
561
|
+
|
|
562
|
+
def test_shell_read_commandline_allowed(self) -> None:
|
|
563
|
+
# agy's shell arg is ``CommandLine`` — a read command must be allowed and
|
|
564
|
+
# emit an explicit {"decision": "allow"} (a bare {} is read as deny by agy).
|
|
565
|
+
r = self._agy(
|
|
566
|
+
"plan",
|
|
567
|
+
{
|
|
568
|
+
"toolCall": {
|
|
569
|
+
"name": "run_command",
|
|
570
|
+
"args": {"CommandLine": "wade knowledge get --search tools", "Cwd": WT},
|
|
571
|
+
},
|
|
572
|
+
"stepIdx": 2,
|
|
573
|
+
},
|
|
574
|
+
)
|
|
575
|
+
assert r.returncode == 0
|
|
576
|
+
assert json.loads(r.stdout)["decision"] == "allow"
|
|
577
|
+
|
|
578
|
+
def test_shell_escape_commandline_denied(self) -> None:
|
|
579
|
+
# shell_containment must read ``CommandLine`` and block a redirect that
|
|
580
|
+
# resolves outside the worktree (the A2 gap in crossby#147).
|
|
581
|
+
r = self._agy(
|
|
582
|
+
"plan",
|
|
583
|
+
{
|
|
584
|
+
"toolCall": {
|
|
585
|
+
"name": "run_command",
|
|
586
|
+
"args": {"CommandLine": "echo x > /tmp/../etc/escape", "Cwd": WT},
|
|
587
|
+
},
|
|
588
|
+
"stepIdx": 3,
|
|
589
|
+
},
|
|
590
|
+
)
|
|
591
|
+
assert r.returncode == 0
|
|
524
592
|
assert json.loads(r.stdout)["decision"] == "deny"
|
|
593
|
+
assert "BLOCKED" in r.stderr
|
|
525
594
|
|
|
526
595
|
|
|
527
596
|
class TestPerToolDialectsMatchCrossby:
|
|
@@ -882,4 +951,7 @@ class TestMemoryAllowlistCLI:
|
|
|
882
951
|
# another out-of-worktree write for it — denied.
|
|
883
952
|
stdin = json.dumps({"tool_name": "Write", "tool_input": {"path": str(self._mem_target())}})
|
|
884
953
|
r = _run_lean("pre_tool_use", "worktree", "antigravity-cli", stdin)
|
|
885
|
-
|
|
954
|
+
# agy's DECISION dialect exits 0 for both allow and deny — the block lives
|
|
955
|
+
# in the {"decision": "deny"} body, so assert that rather than the exit code.
|
|
956
|
+
assert r.returncode == 0
|
|
957
|
+
assert json.loads(r.stdout)["decision"] == "deny"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wade_cli-0.50.2 → wade_cli-0.50.4}/src/wade/services/implementation_service/usage_tracking.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|