Merge branch 'main' into feat/add-codex-support

This commit is contained in:
Den Delimarsky
2025-09-20 08:54:00 -07:00
committed by GitHub
3 changed files with 16 additions and 14 deletions

View File

@@ -5,13 +5,19 @@ All notable changes to the Specify CLI will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.0.10] - 2025-09-20
## [0.0.11] - 2025-09-20
### Added
- Codex CLI support across the Specify CLI, documentation, and bootstrap scripts, including automatic slash-command provisioning and prompt mirroring into `${CODEX_HOME:-~/.codex}/prompts`.
- Codex CLI support (thank you [@honjo-hiroaki-gtt](https://github.com/honjo-hiroaki-gtt) for the contribution in [#14](https://github.com/github/spec-kit/pull/14))
- Codex-aware context update tooling (Bash and PowerShell) so feature plans refresh `AGENTS.md` alongside existing assistants without manual edits.
## [0.0.10] - 2025-09-20
### Fixed
- Addressed [#378](https://github.com/github/spec-kit/issues/378) where a GitHub token may be attached to the request when it was empty.
## [0.0.9] - 2025-09-19
### Changed
@@ -23,7 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Windsurf IDE support as additional AI assistant option
- GitHub token support for API requests to handle corporate environments and rate limiting (contributed by @zryfish in #243)
- GitHub token support for API requests to handle corporate environments and rate limiting (contributed by [@zryfish](https://github.com/@zryfish) in [#243](https://github.com/github/spec-kit/pull/243))
### Changed

View File

@@ -1,6 +1,6 @@
[project]
name = "specify-cli"
version = "0.0.9"
version = "0.0.10"
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
requires-python = ">=3.11"
dependencies = [

View File

@@ -53,17 +53,13 @@ ssl_context = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
client = httpx.Client(verify=ssl_context)
def _github_token(cli_token: str | None = None) -> str | None:
return cli_token or os.getenv("GH_TOKEN") or os.getenv("GITHUB_TOKEN")
"""Return sanitized GitHub token (cli arg takes precedence) or None."""
return ((cli_token or os.getenv("GH_TOKEN") or os.getenv("GITHUB_TOKEN") or "").strip()) or None
def _github_auth_headers(cli_token: str | None = None) -> dict:
"""Headers for GitHub REST API requests.
- Uses Bearer auth if token present
"""
headers = {}
"""Return Authorization header dict only when a non-empty token exists."""
token = _github_token(cli_token)
if token:
headers["Authorization"] = f"Bearer {token}"
return headers
return {"Authorization": f"Bearer {token}"} if token else {}
# Constants
AI_CHOICES = {
@@ -598,7 +594,7 @@ def download_template_from_github(ai_assistant: str, download_dir: Path, *, scri
api_url,
timeout=30,
follow_redirects=True,
headers=_github_auth_headers(github_token) or None,
headers=_github_auth_headers(github_token),
)
status = response.status_code
if status != 200:
@@ -667,7 +663,7 @@ def download_template_from_github(ai_assistant: str, download_dir: Path, *, scri
download_url,
timeout=60,
follow_redirects=True,
headers=_github_auth_headers(github_token) or None,
headers=_github_auth_headers(github_token),
) as response:
if response.status_code != 200:
body_sample = response.text[:400]