openapi-cli4ai 0.4.0__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. openapi_cli4ai-0.5.0/.github/workflows/ci.yml +48 -0
  2. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/workflows/codeql.yml +2 -2
  3. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/workflows/publish.yml +3 -3
  4. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.gitignore +8 -0
  5. openapi_cli4ai-0.5.0/.pre-commit-config.yaml +7 -0
  6. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/CHANGELOG.md +23 -0
  7. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/PKG-INFO +2 -2
  8. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/pyproject.toml +24 -2
  9. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/src/openapi_cli4ai/cli.py +957 -339
  10. openapi_cli4ai-0.5.0/tests/__init__.py +0 -0
  11. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/conftest.py +0 -4
  12. openapi_cli4ai-0.5.0/tests/test_auth_flow_security.py +265 -0
  13. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_auth_flows.py +15 -16
  14. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_caching.py +8 -4
  15. openapi_cli4ai-0.5.0/tests/test_cli_commands.py +455 -0
  16. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_commands.py +23 -10
  17. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_coverage_gaps.py +4 -3
  18. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_device_flow.py +6 -7
  19. openapi_cli4ai-0.5.0/tests/test_error_handling.py +180 -0
  20. openapi_cli4ai-0.5.0/tests/test_features.py +313 -0
  21. openapi_cli4ai-0.5.0/tests/test_foundation.py +101 -0
  22. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_run_command.py +85 -0
  23. openapi_cli4ai-0.5.0/tests/test_schema_composition.py +349 -0
  24. openapi_cli4ai-0.5.0/tests/test_security.py +740 -0
  25. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_sse_streaming.py +2 -2
  26. openapi_cli4ai-0.5.0/tests/test_v040_hardening.py +279 -0
  27. openapi_cli4ai-0.4.0/.github/workflows/ci.yml +0 -36
  28. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/CODEOWNERS +0 -0
  29. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  31. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/dependabot.yml +0 -0
  32. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/.github/release.yml +0 -0
  33. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/CONTRIBUTING.md +0 -0
  34. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/LICENSE +0 -0
  35. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/README.md +0 -0
  36. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/SECURITY.md +0 -0
  37. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/demo.gif +0 -0
  38. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/examples/profiles.toml.example +0 -0
  39. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/openapi-cli4ai +0 -0
  40. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/src/openapi_cli4ai/__init__.py +0 -0
  41. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/src/openapi_cli4ai/__main__.py +0 -0
  42. /openapi_cli4ai-0.4.0/tests/__init__.py → /openapi_cli4ai-0.5.0/src/openapi_cli4ai/py.typed +0 -0
  43. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/fixtures/petstore_spec.json +0 -0
  44. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_auth.py +0 -0
  45. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_integration.py +0 -0
  46. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_oidc.py +0 -0
  47. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_profile_management.py +0 -0
  48. {openapi_cli4ai-0.4.0 → openapi_cli4ai-0.5.0}/tests/test_spec_parsing.py +0 -0
@@ -0,0 +1,48 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ matrix:
17
+ python-version: ["3.11", "3.12", "3.13"]
18
+ steps:
19
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
20
+ - uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
21
+ with:
22
+ enable-cache: true
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ run: uv python install ${{ matrix.python-version }}
25
+ - name: Sync dependencies
26
+ run: uv sync --python ${{ matrix.python-version }}
27
+ - name: Run unit tests with coverage
28
+ run: uv run --python ${{ matrix.python-version }} pytest tests/ -m "not integration" -v --cov=openapi_cli4ai --cov-report=term-missing
29
+
30
+ lint:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
34
+ - uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
35
+ - name: Ruff check
36
+ run: uvx ruff check .
37
+ - name: Ruff format check
38
+ run: uvx ruff format --check .
39
+
40
+ typecheck:
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
44
+ - uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
45
+ - name: Sync dependencies
46
+ run: uv sync
47
+ - name: Run mypy
48
+ run: uv run mypy src/openapi_cli4ai/ --ignore-missing-imports
@@ -17,7 +17,7 @@ jobs:
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
19
  - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
20
- - uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1
20
+ - uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
21
21
  with:
22
22
  languages: python
23
- - uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1
23
+ - uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
@@ -14,11 +14,11 @@ jobs:
14
14
  contents: read
15
15
  steps:
16
16
  - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
17
- - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
17
+ - uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
18
18
  - name: Build sdist and wheel
19
19
  run: uv build
20
20
  - name: Upload artifacts
21
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
21
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
22
22
  with:
23
23
  name: dist
24
24
  path: dist/
@@ -46,4 +46,4 @@ jobs:
46
46
  with:
47
47
  subject-path: dist/*
48
48
  - name: Publish to PyPI
49
- uses: pypa/gh-action-pypi-publish@release/v1
49
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
@@ -41,3 +41,11 @@ profiles.yaml
41
41
  .pytest_cache/
42
42
  .coverage
43
43
  htmlcov/
44
+
45
+ # Project-specific
46
+ CLAUDE.md
47
+ graphify-out/
48
+
49
+ # Claude Code
50
+ .claude/settings.json
51
+ .mcp.json
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: 971923581912ef60a6b70dbf0c3e9a39563c9d47 # v0.11.4
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
@@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/).
6
6
 
7
+ ## [0.5.0] - 2026-04-21
8
+
9
+ ### Added
10
+
11
+ - `--force-login` flag to bypass cached tokens (#9)
12
+ - Non-interactive `init` flags for scripted profile creation (#9)
13
+ - Security hardening across CLI surfaces (#10)
14
+ - OpenAPI spec composition support (#10)
15
+ - `py.typed` marker for downstream type checkers (#13)
16
+
17
+ ### Changed
18
+
19
+ - SHA-pinned publish workflow and simplified CI (#13)
20
+ - Dependency updates: `rich` (#12), GitHub Actions group (#11)
21
+
22
+ ## [0.4.0] - 2026-04-15
23
+
24
+ ### Added
25
+
26
+ - OIDC Device Flow auth type for headless/SSH environments
27
+ - Token exchange and auto-discovery of OIDC endpoints
28
+ - Token injection from environment for CI use cases
29
+
7
30
  ## [0.3.0] - 2026-03-28
8
31
 
9
32
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openapi-cli4ai
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Turn any REST API with an OpenAPI spec into an AI-ready CLI
5
5
  Project-URL: Homepage, https://github.com/dbgorilla/openapi-cli4ai
6
6
  Project-URL: Repository, https://github.com/dbgorilla/openapi-cli4ai
@@ -21,7 +21,7 @@ Requires-Python: >=3.11
21
21
  Requires-Dist: httpx<1,>=0.28
22
22
  Requires-Dist: python-dotenv<2,>=1.0
23
23
  Requires-Dist: pyyaml<7,>=6
24
- Requires-Dist: rich<15,>=13
24
+ Requires-Dist: rich<16,>=13
25
25
  Requires-Dist: tomli-w<2,>=1.0
26
26
  Requires-Dist: typer<1,>=0.24
27
27
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openapi-cli4ai"
7
- version = "0.4.0"
7
+ version = "0.5.0"
8
8
  description = "Turn any REST API with an OpenAPI spec into an AI-ready CLI"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -26,7 +26,7 @@ classifiers = [
26
26
  dependencies = [
27
27
  "typer>=0.24,<1",
28
28
  "httpx>=0.28,<1",
29
- "rich>=13,<15",
29
+ "rich>=13,<16",
30
30
  "pyyaml>=6,<7",
31
31
  "python-dotenv>=1.0,<2",
32
32
  "tomli-w>=1.0,<2",
@@ -40,6 +40,14 @@ Issues = "https://github.com/dbgorilla/openapi-cli4ai/issues"
40
40
  [project.scripts]
41
41
  openapi-cli4ai = "openapi_cli4ai.cli:app"
42
42
 
43
+ [dependency-groups]
44
+ dev = [
45
+ "pytest>=8",
46
+ "pytest-cov>=5",
47
+ "mypy>=1.10,<2",
48
+ "types-PyYAML>=6,<7",
49
+ ]
50
+
43
51
  [tool.hatch.build.targets.wheel]
44
52
  packages = ["src/openapi_cli4ai"]
45
53
 
@@ -50,3 +58,17 @@ target-version = "py311"
50
58
  [tool.pytest.ini_options]
51
59
  testpaths = ["tests"]
52
60
  markers = ["integration: live API tests (may be slow)"]
61
+
62
+ [tool.mypy]
63
+ python_version = "3.11"
64
+ warn_return_any = false
65
+ warn_unused_configs = true
66
+ disallow_untyped_defs = false
67
+ check_untyped_defs = true
68
+
69
+ [tool.coverage.run]
70
+ source = ["openapi_cli4ai"]
71
+
72
+ [tool.coverage.report]
73
+ show_missing = true
74
+ skip_empty = true