specify-cli 0.11.8__tar.gz → 0.11.9__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.
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/publish-pypi.yml +1 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/test.yml +2 -2
- {specify_cli-0.11.8 → specify_cli-0.11.9}/CHANGELOG.md +18 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/PKG-INFO +1 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/presets.md +1 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/authentication.md +27 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/extensions.md +1 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/integrations.md +3 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/presets.md +5 -5
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/scripts/bash/update-agent-context.sh +67 -12
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +81 -17
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/catalog.community.json +12 -12
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +4 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/catalog.community.json +6 -7
- {specify_cli-0.11.8 → specify_cli-0.11.9}/pyproject.toml +1 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/__init__.py +4 -2
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_github_http.py +56 -31
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/http.py +14 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/extensions/__init__.py +8 -2
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/claude/__init__.py +11 -7
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/presets/__init__.py +11 -2
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/presets/_commands.py +4 -1
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/analyze.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/checklist.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/clarify.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/constitution.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/converge.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/implement.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/plan.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/specify.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/tasks.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/commands/taskstoissues.md +2 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/git/test_git_extension.py +33 -0
- specify_cli-0.11.9/tests/extensions/test_update_agent_context_feature_json.py +211 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_claude.py +40 -53
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_authentication.py +42 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extensions.py +35 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_github_http.py +114 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_presets.py +98 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_timestamp_branches.py +30 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_workflows.py +131 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.devcontainer/devcontainer.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.devcontainer/post-create.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.editorconfig +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.gitattributes +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/CODEOWNERS +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/agent_request.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/dependabot.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/release.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.gitignore +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/.zenodo.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/AGENTS.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/CITATION.cff +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/CONTRIBUTING.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/DEVELOPMENT.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/LICENSE +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/SECURITY.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/SUPPORT.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/.gitignore +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/extensions.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/friends.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/overview.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/complex-features.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/docfx.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/index.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/one-time.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/pipx.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/install/uv.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/installation.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/local-development.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/quickstart.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/bundles.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/core.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/overview.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/reference/workflows.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/template/public/main.css +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/toc.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/docs/upgrade.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/catalog.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/extension.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/auto-commit.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/.gitignore +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/LICENSE +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/extensions/template/extension.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/catalog.community.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/integrations/catalog.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/media/logo_large.webp +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/media/logo_small.webp +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/media/specify_cli.gif +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-April.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-February.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-March.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/newsletters/2026-May.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/catalog.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.constitution.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/lean/preset.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/agent-file-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/common.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/spec-driven.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/spec-kit.code-workspace +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/_version.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/azure_devops.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/lib/yamlio.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/catalog.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/manifest.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/packager.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/commands/init.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/extensions/_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_runtime.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/catalog.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/cline/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/iflow/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/lingma/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/roo/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/windsurf/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/catalog.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/engine.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/expressions.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/checklist-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/constitution-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/plan-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/spec-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/tasks-template.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/templates/vscode-settings.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/auth_helpers.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/conftest.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_catalog_schema.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/contract/test_manifest_schema.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/plan.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/spec.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/http_helpers.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_base.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_catalog.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_forge.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_iflow.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_lingma.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_roo.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_state.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_windsurf.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/integrations/test_registry.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/self_upgrade_helpers.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_agent_config_consistency.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_check_tool.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_cli_version.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_commands_package.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_console_imports.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_skills.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_init_dir.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_merge.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_detection.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_execution.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_guidance.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_self_upgrade_verification.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_upgrade.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_utils.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_version_imports.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_catalog_config.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_packager.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/README.md +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/catalog.community.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/catalog.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.11.8 → specify_cli-0.11.9}/workflows/step-catalog.json +0 -0
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
36
36
|
|
|
37
37
|
- name: Set up Python
|
|
38
|
-
uses: actions/setup-python@
|
|
38
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
39
39
|
with:
|
|
40
40
|
python-version: "3.13"
|
|
41
41
|
|
|
@@ -19,7 +19,7 @@ jobs:
|
|
|
19
19
|
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
20
20
|
|
|
21
21
|
- name: Set up Python
|
|
22
|
-
uses: actions/setup-python@
|
|
22
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
23
23
|
with:
|
|
24
24
|
python-version: "3.13"
|
|
25
25
|
|
|
@@ -40,7 +40,7 @@ jobs:
|
|
|
40
40
|
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
41
41
|
|
|
42
42
|
- name: Set up Python ${{ matrix.python-version }}
|
|
43
|
-
uses: actions/setup-python@
|
|
43
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
|
44
44
|
with:
|
|
45
45
|
python-version: ${{ matrix.python-version }}
|
|
46
46
|
|
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- insert new changelog below this comment -->
|
|
4
4
|
|
|
5
|
+
## [0.11.9] - 2026-06-26
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Docs: add cline and zcode to multi-install-safe table (#3180)
|
|
10
|
+
- Docs: document missing flags --force and --refresh-shared-infra (#3179)
|
|
11
|
+
- fix(claude): stop forking /speckit-analyze to prevent long-session freezes (#3188)
|
|
12
|
+
- fix: derive plan path from feature.json in update-agent-context (#3069)
|
|
13
|
+
- fix(catalog): companion → README docs, version-pinned download URL, v0.11.0, refreshed tags (#2954)
|
|
14
|
+
- chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (#3173)
|
|
15
|
+
- Update SicarioSpec Core preset to v0.5.1 (#3165)
|
|
16
|
+
- fix(extensions,presets,workflows): resolve private GHES release assets via /api/v3 (#3157)
|
|
17
|
+
- Update preset composition strategy reference (#3143)
|
|
18
|
+
- fix(scripts): keep PowerShell branch-name acronym match case-sensitive (parity with bash) (#3129)
|
|
19
|
+
- fix(extensions): tell agent to run mandatory hooks, not just emit the directive (#2901)
|
|
20
|
+
- Point sicario-core docs to preset README (#3120)
|
|
21
|
+
- chore: release 0.11.8, begin 0.11.9.dev0 development (#3156)
|
|
22
|
+
|
|
5
23
|
## [0.11.8] - 2026-06-24
|
|
6
24
|
|
|
7
25
|
### Changed
|
|
@@ -25,7 +25,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
|
|
|
25
25
|
| Pirate Speak (Full) | Transforms all Spec Kit output into pirate speak — specs become "Voyage Manifests", plans become "Battle Plans", tasks become "Crew Assignments" | 6 templates, 9 commands | — | [spec-kit-presets](https://github.com/mnriem/spec-kit-presets) |
|
|
26
26
|
| Screenwriting | Spec-Driven Development for screenwriting/scriptwriting/tutorials: feature films, television (pilot, episode, limited series), and stage plays. Adapts the Spec Kit workflow to screenplay craft — slug lines, action lines, act breaks, beat sheets, and industry-standard pitch documents. Supports three-act, Save the Cat, TV pilot, network episode, cable/streaming episode, and stage-play structural frameworks. Export to Fountain, FTX, PDF | 26 templates, 32 commands, 1 script | — | [speckit-preset-screenwriting](https://github.com/adaumann/speckit-preset-screenwriting) |
|
|
27
27
|
| Security Governance | Adds memory-safe-language preference, language-specific secure coding profiles, audit-ready Spec-Kit run evidence, ASVS verification, SBOM/AI-SBOM supply-chain transparency, CRA awareness, and regulatory applicability screening for NIS2, CRA, EU AI Act, and DORA | 14 templates, 3 commands | — | [spec-kit-preset-security-governance](https://github.com/hindermath/spec-kit-preset-security-governance) |
|
|
28
|
-
| SicarioSpec Core |
|
|
28
|
+
| SicarioSpec Core | Baseline secure-by-default Spec Kit governance profile. | 5 templates | — | [sicario-spec](https://github.com/dfirs1car1o/sicario-spec) |
|
|
29
29
|
| Spec2Cloud | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy | 5 templates, 8 commands | — | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
|
|
30
30
|
| Table of Contents Navigation | Adds a navigable Table of Contents to generated spec.md, plan.md, and tasks.md documents | 3 templates, 3 commands | — | [spec-kit-preset-toc-navigation](https://github.com/Quratulain-bilal/spec-kit-preset-toc-navigation) |
|
|
31
31
|
| VS Code Ask Questions | Enhances the clarify command to use `vscode/askQuestions` for batched interactive questioning. | 1 command | — | [spec-kit-presets](https://github.com/fdcastel/spec-kit-presets) |
|
|
@@ -69,6 +69,33 @@ Either `token` or `token_env` must be set for `bearer` and `basic-pat` schemes.
|
|
|
69
69
|
}
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
+
### GitHub Enterprise Server (GHES)
|
|
73
|
+
|
|
74
|
+
To use a private catalog or extension hosted on a GitHub Enterprise Server
|
|
75
|
+
instance, add a `github` entry listing your GHES host(s). The same entry
|
|
76
|
+
authenticates both catalog JSON fetches **and** private release-asset
|
|
77
|
+
downloads — Specify recognizes the listed hosts as GitHub Enterprise and
|
|
78
|
+
resolves release downloads through the GHES REST API (`/api/v3`).
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"providers": [
|
|
83
|
+
{
|
|
84
|
+
"hosts": ["ghes.example.com", "raw.ghes.example.com", "codeload.ghes.example.com"],
|
|
85
|
+
"provider": "github",
|
|
86
|
+
"auth": "bearer",
|
|
87
|
+
"token_env": "GH_ENTERPRISE_TOKEN"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
List the **bare** web host (e.g. `ghes.example.com`) — release-download URLs
|
|
94
|
+
live there. If your instance uses subdomain isolation, also list the `raw.`
|
|
95
|
+
and `codeload.` subdomains your catalog/extension URLs use. A
|
|
96
|
+
`*.ghes.example.com` wildcard matches subdomains but **not** the bare host,
|
|
97
|
+
so always include the bare host explicitly.
|
|
98
|
+
|
|
72
99
|
### Azure DevOps (`azure-devops`)
|
|
73
100
|
|
|
74
101
|
| Scheme | Header | Use for |
|
|
@@ -26,6 +26,7 @@ specify extension add <name>
|
|
|
26
26
|
| --------------- | -------------------------------------------------------- |
|
|
27
27
|
| `--dev` | Install from a local directory (for development) |
|
|
28
28
|
| `--from <url>` | Install from a custom URL instead of the catalog |
|
|
29
|
+
| `--force` | Overwrite if already installed |
|
|
29
30
|
| `--priority <N>`| Resolution priority (default: 10; lower = higher precedence) |
|
|
30
31
|
|
|
31
32
|
Installs an extension from the catalog, a URL, or a local directory. Extension commands are automatically registered with the currently installed AI coding agent integration.
|
|
@@ -100,6 +100,7 @@ specify integration switch <key>
|
|
|
100
100
|
| ------------------------ | ------------------------------------------------------------------------ |
|
|
101
101
|
| `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
|
|
102
102
|
| `--force` | Force removal of modified files during uninstall; when the target is already installed, overwrite managed shared templates while changing the default |
|
|
103
|
+
| `--refresh-shared-infra` | Also overwrite shared infrastructure files even if you customized them (otherwise customizations are preserved) |
|
|
103
104
|
| `--integration-options` | Options for the target integration when it is not already installed |
|
|
104
105
|
|
|
105
106
|
If the target integration is not already installed, equivalent to running `uninstall` followed by `install` in a single step. In this mode, `--force` controls whether modified files from the removed integration are deleted. If the target integration is already installed, `switch` only changes the default integration, like `use`; in this mode, `--force` controls whether managed shared templates are overwritten while the default changes. `--integration-options` is rejected for already-installed targets because changing integration options requires reinstalling managed files; run `upgrade <key> --integration-options ...` first, then `use <key>`.
|
|
@@ -184,6 +185,7 @@ The currently declared multi-install safe integrations are:
|
|
|
184
185
|
| --- | --------- |
|
|
185
186
|
| `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` |
|
|
186
187
|
| `claude` | `.claude/skills`, `CLAUDE.md` |
|
|
188
|
+
| `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` |
|
|
187
189
|
| `codebuddy` | `.codebuddy/commands`, `CODEBUDDY.md` |
|
|
188
190
|
| `codex` | `.agents/skills`, `AGENTS.md` |
|
|
189
191
|
| `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
|
|
@@ -199,6 +201,7 @@ The currently declared multi-install safe integrations are:
|
|
|
199
201
|
| `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` |
|
|
200
202
|
| `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
|
|
201
203
|
| `windsurf` | `.windsurf/workflows`, `.windsurf/rules/specify-rules.md` |
|
|
204
|
+
| `zcode` | `.zcode/skills`, `ZCODE.md` |
|
|
202
205
|
|
|
203
206
|
Integrations that share a context file or command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
|
|
204
207
|
|
|
@@ -137,9 +137,11 @@ catalogs:
|
|
|
137
137
|
|
|
138
138
|
## File Resolution
|
|
139
139
|
|
|
140
|
-
Presets can provide command files, template files (like `plan-template.md`), and script files.
|
|
140
|
+
Presets can provide command files, template files (like `plan-template.md`), and script files. Each file name is evaluated independently against the priority stack, so different files can come from different layers.
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
Templates and scripts are looked up from the stack when Spec Kit needs them. Commands use the same stack for replacement and composition, but are materialized into detected agent directories instead of being re-resolved by agents. During preset install, Spec Kit registers command files for the preset being installed; post-install and post-removal reconciliation then recomputes and writes the effective command content for affected command names based on the active stack. Agents do not re-resolve the stack each time they run a command.
|
|
143
|
+
|
|
144
|
+
By default, files use a **replace** strategy: the first match in the priority stack wins and is used entirely. Templates and commands can also use composition strategies: **prepend** places preset content before lower-priority content, **append** places it after lower-priority content, and **wrap** replaces `{CORE_TEMPLATE}` with lower-priority content. Scripts support **replace** and **wrap**; script wrappers use `$CORE_SCRIPT` as the placeholder.
|
|
143
145
|
|
|
144
146
|
The resolution stack, from highest to lowest precedence:
|
|
145
147
|
|
|
@@ -148,8 +150,6 @@ The resolution stack, from highest to lowest precedence:
|
|
|
148
150
|
3. **Installed extensions** — sorted by priority
|
|
149
151
|
4. **Spec Kit core** — `.specify/templates/`
|
|
150
152
|
|
|
151
|
-
Commands are registered at install time (not resolved through the stack at runtime).
|
|
152
|
-
|
|
153
153
|
### Resolution Stack
|
|
154
154
|
|
|
155
155
|
```mermaid
|
|
@@ -215,7 +215,7 @@ Run `specify preset resolve <name>` to trace the resolution stack and see which
|
|
|
215
215
|
|
|
216
216
|
### What's the difference between disabling and removing a preset?
|
|
217
217
|
|
|
218
|
-
**Disabling** (`specify preset disable`) keeps the preset installed but excludes
|
|
218
|
+
**Disabling** (`specify preset disable`) keeps the preset installed but excludes it from future template and script resolution. Previously registered commands remain available in your AI coding agent until preset removal, so use removal when you need command changes to stop taking effect. Disabling is useful for temporarily testing template/script behavior without a preset, or comparing template/script output with and without it. Re-enable anytime with `specify preset enable`.
|
|
219
219
|
|
|
220
220
|
**Removing** (`specify preset remove`) fully uninstalls the preset — deletes its files, unregisters its commands from your AI coding agent, and removes it from the registry.
|
|
221
221
|
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
#
|
|
11
11
|
# Usage: update-agent-context.sh [plan_path]
|
|
12
12
|
#
|
|
13
|
-
# When `plan_path` is omitted, the script
|
|
14
|
-
#
|
|
15
|
-
#
|
|
13
|
+
# When `plan_path` is omitted, the script derives it from `.specify/feature.json`
|
|
14
|
+
# (written by /speckit-specify). Falls back to the most recently modified
|
|
15
|
+
# `specs/*/plan.md` only when feature.json is absent or its plan does not exist yet.
|
|
16
16
|
|
|
17
17
|
set -euo pipefail
|
|
18
18
|
|
|
@@ -202,23 +202,78 @@ unset _cf_parts _seg
|
|
|
202
202
|
|
|
203
203
|
PLAN_PATH="${1:-}"
|
|
204
204
|
if [[ -z "$PLAN_PATH" ]]; then
|
|
205
|
-
#
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
import sys,
|
|
205
|
+
# Prefer .specify/feature.json (written by /speckit-specify) over mtime heuristic.
|
|
206
|
+
_feature_json="$PROJECT_ROOT/.specify/feature.json"
|
|
207
|
+
if [[ -f "$_feature_json" ]]; then
|
|
208
|
+
_feature_dir="$("$_python" - "$_feature_json" <<'PY'
|
|
209
|
+
import sys, json
|
|
210
|
+
try:
|
|
211
|
+
with open(sys.argv[1], encoding="utf-8") as fh:
|
|
212
|
+
d = json.load(fh)
|
|
213
|
+
val = d.get("feature_directory", "")
|
|
214
|
+
print(val if isinstance(val, str) else "")
|
|
215
|
+
except Exception:
|
|
216
|
+
print("")
|
|
217
|
+
PY
|
|
218
|
+
)"
|
|
219
|
+
# Normalize backslashes (written by PS on Windows) to forward slashes before path ops.
|
|
220
|
+
_feature_dir="$(printf '%s' "$_feature_dir" | tr '\\' '/')"
|
|
221
|
+
_feature_dir="${_feature_dir%/}"
|
|
222
|
+
if [[ -n "$_feature_dir" ]]; then
|
|
223
|
+
# feature_directory may be relative or absolute (absolute paths outside PROJECT_ROOT
|
|
224
|
+
# are preserved as-is by _persist_feature_json in common.sh).
|
|
225
|
+
# Also match drive-qualified paths (C:/...) written by PowerShell on Windows.
|
|
226
|
+
if [[ "$_feature_dir" == /* ]] || [[ "$_feature_dir" =~ ^[A-Za-z]:/ ]]; then
|
|
227
|
+
_candidate="$_feature_dir/plan.md"
|
|
228
|
+
else
|
|
229
|
+
_candidate="$PROJECT_ROOT/$_feature_dir/plan.md"
|
|
230
|
+
fi
|
|
231
|
+
if [[ -f "$_candidate" ]]; then
|
|
232
|
+
# Resolve symlinks before comparing so paths like /var/… vs /private/var/…
|
|
233
|
+
# (macOS) are treated as equivalent. Mirrors the mtime-fallback approach.
|
|
234
|
+
PLAN_PATH="$("$_python" - "$PROJECT_ROOT" "$_candidate" <<'PY'
|
|
235
|
+
import sys
|
|
210
236
|
from pathlib import Path
|
|
211
|
-
|
|
237
|
+
root = Path(sys.argv[1]).resolve()
|
|
238
|
+
cand = Path(sys.argv[2]).resolve()
|
|
239
|
+
try:
|
|
240
|
+
print(cand.relative_to(root).as_posix())
|
|
241
|
+
except ValueError:
|
|
242
|
+
# Outside project root: emit the resolved path in POSIX form.
|
|
243
|
+
# as_posix() converts backslashes correctly on native Windows Python.
|
|
244
|
+
print(cand.as_posix())
|
|
245
|
+
PY
|
|
246
|
+
)"
|
|
247
|
+
fi
|
|
248
|
+
fi
|
|
249
|
+
fi
|
|
250
|
+
|
|
251
|
+
# Fall back to mtime only when feature.json is absent or its plan does not exist yet.
|
|
252
|
+
# Python emits a project-relative POSIX path directly to avoid bash prefix-strip
|
|
253
|
+
# issues with backslash paths on Windows (Git bash / MSYS2).
|
|
254
|
+
if [[ -z "$PLAN_PATH" ]]; then
|
|
255
|
+
_plan_rel="$("$_python" - "$PROJECT_ROOT" <<'PY'
|
|
256
|
+
import sys
|
|
257
|
+
from pathlib import Path
|
|
258
|
+
root = Path(sys.argv[1]).resolve()
|
|
259
|
+
specs = root / "specs"
|
|
212
260
|
plans = sorted(
|
|
213
261
|
specs.glob("*/plan.md"),
|
|
214
262
|
key=lambda p: p.stat().st_mtime,
|
|
215
263
|
reverse=True,
|
|
216
264
|
)
|
|
217
|
-
|
|
265
|
+
if plans:
|
|
266
|
+
try:
|
|
267
|
+
print(plans[0].relative_to(root).as_posix())
|
|
268
|
+
except ValueError:
|
|
269
|
+
print("")
|
|
270
|
+
else:
|
|
271
|
+
print("")
|
|
218
272
|
PY
|
|
219
273
|
)"
|
|
220
|
-
|
|
221
|
-
|
|
274
|
+
if [[ -n "$_plan_rel" ]]; then
|
|
275
|
+
PLAN_PATH="$_plan_rel"
|
|
276
|
+
fi
|
|
222
277
|
fi
|
|
223
278
|
fi
|
|
224
279
|
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
# .specify/extensions/agent-context/agent-context-config.yml
|
|
10
10
|
#
|
|
11
11
|
# Usage: update-agent-context.ps1 [plan_path]
|
|
12
|
+
#
|
|
13
|
+
# When `plan_path` is omitted, the script derives it from `.specify/feature.json`
|
|
14
|
+
# (written by /speckit-specify). Falls back to the most recently modified
|
|
15
|
+
# `specs/*/plan.md` only when feature.json is absent or its plan does not exist yet.
|
|
12
16
|
|
|
13
17
|
[CmdletBinding()]
|
|
14
18
|
param(
|
|
@@ -126,14 +130,26 @@ if (-not (Test-Path -LiteralPath $ExtConfig)) {
|
|
|
126
130
|
$Options = $null
|
|
127
131
|
if (Get-Command ConvertFrom-Yaml -ErrorAction SilentlyContinue) {
|
|
128
132
|
try {
|
|
129
|
-
$Options = Get-Content -LiteralPath $ExtConfig -Raw | ConvertFrom-Yaml -ErrorAction Stop
|
|
133
|
+
$Options = Get-Content -LiteralPath $ExtConfig -Raw -Encoding UTF8 | ConvertFrom-Yaml -ErrorAction Stop
|
|
134
|
+
} catch {
|
|
135
|
+
# fall through to ConvertFrom-Json fallback
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if ($null -eq $Options) {
|
|
140
|
+
# ConvertFrom-Yaml unavailable or failed; try ConvertFrom-Json (no external deps,
|
|
141
|
+
# works when the config file is valid JSON, which is a subset of YAML).
|
|
142
|
+
try {
|
|
143
|
+
$raw = Get-Content -LiteralPath $ExtConfig -Raw -Encoding UTF8
|
|
144
|
+
$Options = $raw | ConvertFrom-Json -ErrorAction Stop
|
|
145
|
+
if (-not (Test-ConfigObject -Object $Options)) { $Options = $null }
|
|
130
146
|
} catch {
|
|
131
|
-
|
|
147
|
+
$Options = $null
|
|
132
148
|
}
|
|
133
149
|
}
|
|
134
150
|
|
|
135
151
|
if ($null -eq $Options) {
|
|
136
|
-
# ConvertFrom-Yaml unavailable or failed; fall back to Python+PyYAML.
|
|
152
|
+
# ConvertFrom-Yaml/Json unavailable or failed; fall back to Python+PyYAML.
|
|
137
153
|
$pythonCmd = $null
|
|
138
154
|
$pythonCandidates = @()
|
|
139
155
|
if ($env:SPECKIT_PYTHON) {
|
|
@@ -280,21 +296,69 @@ if ($cm) {
|
|
|
280
296
|
}
|
|
281
297
|
|
|
282
298
|
if (-not $PlanPath) {
|
|
283
|
-
#
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
299
|
+
# Prefer .specify/feature.json (written by /speckit-specify) over mtime heuristic.
|
|
300
|
+
$FeatureJson = Join-Path $ProjectRoot '.specify/feature.json'
|
|
301
|
+
if (Test-Path -LiteralPath $FeatureJson) {
|
|
302
|
+
try {
|
|
303
|
+
$fj = Get-Content -LiteralPath $FeatureJson -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
304
|
+
$featureDir = $fj.feature_directory
|
|
305
|
+
if ($featureDir -isnot [string] -or -not $featureDir) {
|
|
306
|
+
$featureDir = $null
|
|
307
|
+
} else {
|
|
308
|
+
$featureDir = $featureDir.TrimEnd('\', '/')
|
|
309
|
+
}
|
|
310
|
+
if ($featureDir) {
|
|
311
|
+
# Join-Path on Unix does not treat absolute ChildPath as "wins"; check explicitly.
|
|
312
|
+
if ([System.IO.Path]::IsPathRooted($featureDir)) {
|
|
313
|
+
$candidatePlan = Join-Path $featureDir 'plan.md'
|
|
314
|
+
} else {
|
|
315
|
+
$candidatePlan = Join-Path (Join-Path $ProjectRoot $featureDir) 'plan.md'
|
|
316
|
+
}
|
|
317
|
+
if (Test-Path -LiteralPath $candidatePlan) {
|
|
318
|
+
# Resolve ./ .. segments before relativizing (mirrors bash Path.resolve()).
|
|
319
|
+
# GetFullPath is available in .NET Framework 4.x (PS 5.1 compatible).
|
|
320
|
+
$resolvedPlan = [System.IO.Path]::GetFullPath($candidatePlan)
|
|
321
|
+
$resolvedDir = [System.IO.Path]::GetDirectoryName($resolvedPlan)
|
|
322
|
+
$normRoot = $ProjectRoot.TrimEnd('\', '/') + [System.IO.Path]::DirectorySeparatorChar
|
|
323
|
+
$normDir = $resolvedDir.TrimEnd('\', '/') + [System.IO.Path]::DirectorySeparatorChar
|
|
324
|
+
$cmp = if ([System.Environment]::OSVersion.Platform -eq [System.PlatformID]::Win32NT) { [System.StringComparison]::OrdinalIgnoreCase } else { [System.StringComparison]::Ordinal }
|
|
325
|
+
if ($normDir.StartsWith($normRoot, $cmp)) {
|
|
326
|
+
$relDir = $normDir.Substring($normRoot.Length).TrimEnd('\', '/')
|
|
327
|
+
$PlanPath = if ($relDir) { $relDir.Replace('\', '/') + '/plan.md' } else { 'plan.md' }
|
|
328
|
+
} else {
|
|
329
|
+
$PlanPath = $resolvedPlan.Replace('\', '/')
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
} catch {
|
|
334
|
+
# Non-fatal: fall through to mtime heuristic.
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
# Fall back to mtime only when feature.json is absent or its plan does not exist yet.
|
|
339
|
+
if (-not $PlanPath) {
|
|
340
|
+
try {
|
|
341
|
+
$specsDir = Join-Path $ProjectRoot 'specs'
|
|
342
|
+
$candidate = Get-ChildItem -Path $specsDir -Directory -ErrorAction SilentlyContinue |
|
|
343
|
+
ForEach-Object { Get-Item -LiteralPath (Join-Path $_.FullName 'plan.md') -ErrorAction SilentlyContinue } |
|
|
344
|
+
Where-Object { $_ } |
|
|
345
|
+
Sort-Object LastWriteTime -Descending |
|
|
346
|
+
Select-Object -First 1
|
|
347
|
+
if ($candidate) {
|
|
348
|
+
# GetRelativePath is .NET 5+ only; strip prefix manually for PS 5.1 compat.
|
|
349
|
+
# Use case-insensitive comparison on Windows only (matches common.ps1 pattern).
|
|
350
|
+
$fullPath = $candidate.FullName.Replace('\', '/')
|
|
351
|
+
$normRoot = $ProjectRoot.Replace('\', '/').TrimEnd('/') + '/'
|
|
352
|
+
$cmp = if ([System.Environment]::OSVersion.Platform -eq [System.PlatformID]::Win32NT) { [System.StringComparison]::OrdinalIgnoreCase } else { [System.StringComparison]::Ordinal }
|
|
353
|
+
if ($fullPath.StartsWith($normRoot, $cmp)) {
|
|
354
|
+
$PlanPath = $fullPath.Substring($normRoot.Length)
|
|
355
|
+
} else {
|
|
356
|
+
$PlanPath = $fullPath
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
} catch {
|
|
360
|
+
# Non-fatal: continue without a plan path.
|
|
295
361
|
}
|
|
296
|
-
} catch {
|
|
297
|
-
# Non-fatal: continue without a plan path.
|
|
298
362
|
}
|
|
299
363
|
}
|
|
300
364
|
|
|
@@ -772,40 +772,40 @@
|
|
|
772
772
|
"companion": {
|
|
773
773
|
"name": "SpecKit Companion",
|
|
774
774
|
"id": "companion",
|
|
775
|
-
"description": "Live spec-driven progress for SpecKit Companion — lifecycle capture, status, resume, and
|
|
775
|
+
"description": "Live spec-driven progress for SpecKit Companion — lifecycle capture, status, resume, and composable commands you can customize with hooks and recipes.",
|
|
776
776
|
"author": "alfredoperez",
|
|
777
|
-
"version": "0.
|
|
778
|
-
"download_url": "https://github.com/alfredoperez/speckit-companion/releases/download/speckit-ext-v0.
|
|
777
|
+
"version": "0.11.0",
|
|
778
|
+
"download_url": "https://github.com/alfredoperez/speckit-companion/releases/download/speckit-ext-v0.11.0/companion-0.11.0.zip",
|
|
779
779
|
"repository": "https://github.com/alfredoperez/speckit-companion",
|
|
780
780
|
"homepage": "https://github.com/alfredoperez/speckit-companion/tree/main/speckit-extension",
|
|
781
|
-
"documentation": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/
|
|
781
|
+
"documentation": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/README.md",
|
|
782
782
|
"changelog": "https://github.com/alfredoperez/speckit-companion/blob/main/speckit-extension/CHANGELOG.md",
|
|
783
783
|
"license": "MIT",
|
|
784
784
|
"category": "visibility",
|
|
785
785
|
"effect": "read-write",
|
|
786
786
|
"requires": {
|
|
787
|
-
"speckit_version": ">=0.
|
|
787
|
+
"speckit_version": ">=0.9.5",
|
|
788
788
|
"tools": [
|
|
789
789
|
{ "name": "python3", "required": false }
|
|
790
790
|
]
|
|
791
791
|
},
|
|
792
792
|
"provides": {
|
|
793
|
-
"commands":
|
|
793
|
+
"commands": 13,
|
|
794
794
|
"hooks": 4
|
|
795
795
|
},
|
|
796
796
|
"tags": [
|
|
797
|
-
"tracking",
|
|
798
|
-
"companion",
|
|
799
|
-
"progress",
|
|
800
797
|
"vscode",
|
|
801
|
-
"
|
|
802
|
-
"
|
|
798
|
+
"progress",
|
|
799
|
+
"status",
|
|
800
|
+
"resume",
|
|
801
|
+
"configurable",
|
|
802
|
+
"extensible"
|
|
803
803
|
],
|
|
804
804
|
"verified": false,
|
|
805
805
|
"downloads": 0,
|
|
806
806
|
"stars": 0,
|
|
807
807
|
"created_at": "2026-06-11T00:00:00Z",
|
|
808
|
-
"updated_at": "2026-06-
|
|
808
|
+
"updated_at": "2026-06-24T00:00:00Z"
|
|
809
809
|
},
|
|
810
810
|
"conduct": {
|
|
811
811
|
"name": "Conduct Extension",
|
|
@@ -252,7 +252,10 @@ function Get-BranchName {
|
|
|
252
252
|
if ($stopWords -contains $word) { continue }
|
|
253
253
|
if ($word.Length -ge 3) {
|
|
254
254
|
$meaningfulWords += $word
|
|
255
|
-
} elseif ($Description -
|
|
255
|
+
} elseif ($Description -cmatch "\b$($word.ToUpper())\b") {
|
|
256
|
+
# Case-sensitive (-cmatch) to mirror the bash twin's `grep -qw -- "${word^^}"`:
|
|
257
|
+
# keep a short word only when its UPPERCASE form appears in the original
|
|
258
|
+
# (an acronym). -match is case-insensitive and would keep every short word.
|
|
256
259
|
$meaningfulWords += $word
|
|
257
260
|
}
|
|
258
261
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "1.0",
|
|
3
|
-
"updated_at": "2026-06-
|
|
3
|
+
"updated_at": "2026-06-25T00:00:00Z",
|
|
4
4
|
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/presets/catalog.community.json",
|
|
5
5
|
"presets": {
|
|
6
6
|
"a11y-governance": {
|
|
@@ -567,13 +567,13 @@
|
|
|
567
567
|
"sicario-core": {
|
|
568
568
|
"name": "SicarioSpec Core",
|
|
569
569
|
"id": "sicario-core",
|
|
570
|
-
"version": "0.
|
|
571
|
-
"description": "
|
|
570
|
+
"version": "0.5.1",
|
|
571
|
+
"description": "Baseline secure-by-default Spec Kit governance profile.",
|
|
572
572
|
"author": "SicarioSpec Contributors",
|
|
573
573
|
"repository": "https://github.com/dfirs1car1o/sicario-spec",
|
|
574
|
-
"download_url": "https://github.com/dfirs1car1o/sicario-spec/releases/download/v0.
|
|
574
|
+
"download_url": "https://github.com/dfirs1car1o/sicario-spec/releases/download/v0.5.1/sicario-core-0.5.1.zip",
|
|
575
575
|
"homepage": "https://github.com/dfirs1car1o/sicario-spec",
|
|
576
|
-
"documentation": "https://github.com/dfirs1car1o/sicario-spec/blob/main/README.md",
|
|
576
|
+
"documentation": "https://github.com/dfirs1car1o/sicario-spec/blob/main/presets/sicario-core/README.md",
|
|
577
577
|
"license": "MIT",
|
|
578
578
|
"requires": {
|
|
579
579
|
"speckit_version": ">=0.9.0"
|
|
@@ -583,14 +583,13 @@
|
|
|
583
583
|
"commands": 0
|
|
584
584
|
},
|
|
585
585
|
"tags": [
|
|
586
|
-
"security",
|
|
587
586
|
"governance",
|
|
588
587
|
"security-ops",
|
|
589
588
|
"secure-by-default",
|
|
590
589
|
"evidence"
|
|
591
590
|
],
|
|
592
591
|
"created_at": "2026-06-22T00:00:00Z",
|
|
593
|
-
"updated_at": "2026-06-
|
|
592
|
+
"updated_at": "2026-06-25T00:00:00Z"
|
|
594
593
|
},
|
|
595
594
|
"spec2cloud": {
|
|
596
595
|
"name": "Spec2Cloud",
|
|
@@ -1128,9 +1128,10 @@ def workflow_add(
|
|
|
1128
1128
|
raise typer.Exit(1)
|
|
1129
1129
|
|
|
1130
1130
|
from specify_cli._github_http import resolve_github_release_asset_api_url as _resolve_gh_asset
|
|
1131
|
+
from specify_cli.authentication.http import github_provider_hosts
|
|
1131
1132
|
|
|
1132
1133
|
_wf_url_extra_headers = None
|
|
1133
|
-
_resolved_wf_url = _resolve_gh_asset(source, _open_url, timeout=30)
|
|
1134
|
+
_resolved_wf_url = _resolve_gh_asset(source, _open_url, timeout=30, github_hosts=github_provider_hosts())
|
|
1134
1135
|
if _resolved_wf_url:
|
|
1135
1136
|
source = _resolved_wf_url
|
|
1136
1137
|
_wf_url_extra_headers = {"Accept": "application/octet-stream"}
|
|
@@ -1234,10 +1235,11 @@ def workflow_add(
|
|
|
1234
1235
|
|
|
1235
1236
|
try:
|
|
1236
1237
|
from specify_cli.authentication.http import open_url as _open_url
|
|
1238
|
+
from specify_cli.authentication.http import github_provider_hosts
|
|
1237
1239
|
from specify_cli._github_http import resolve_github_release_asset_api_url as _resolve_gh_asset
|
|
1238
1240
|
|
|
1239
1241
|
_wf_cat_extra_headers = None
|
|
1240
|
-
_resolved_workflow_url = _resolve_gh_asset(workflow_url, _open_url, timeout=30)
|
|
1242
|
+
_resolved_workflow_url = _resolve_gh_asset(workflow_url, _open_url, timeout=30, github_hosts=github_provider_hosts())
|
|
1241
1243
|
if _resolved_workflow_url:
|
|
1242
1244
|
workflow_url = _resolved_workflow_url
|
|
1243
1245
|
_wf_cat_extra_headers = {"Accept": "application/octet-stream"}
|