codex-ai 0.1.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 (74) hide show
  1. codex_ai-0.1.0/.github/workflows/ci.yml +55 -0
  2. codex_ai-0.1.0/.github/workflows/docs.yml +72 -0
  3. codex_ai-0.1.0/.github/workflows/publish.yml +42 -0
  4. codex_ai-0.1.0/.gitignore +219 -0
  5. codex_ai-0.1.0/.nojekyll +0 -0
  6. codex_ai-0.1.0/.pre-commit-config.yaml +39 -0
  7. codex_ai-0.1.0/.python-version +1 -0
  8. codex_ai-0.1.0/.secrets.baseline +144 -0
  9. codex_ai-0.1.0/CHANGELOG.md +13 -0
  10. codex_ai-0.1.0/LICENSE +159 -0
  11. codex_ai-0.1.0/PKG-INFO +154 -0
  12. codex_ai-0.1.0/README.md +103 -0
  13. codex_ai-0.1.0/docs/changelog.md +3 -0
  14. codex_ai-0.1.0/docs/en/api/core/dispatcher.md +3 -0
  15. codex_ai-0.1.0/docs/en/api/core/exceptions.md +3 -0
  16. codex_ai-0.1.0/docs/en/api/core/protocol.md +3 -0
  17. codex_ai-0.1.0/docs/en/api/core/router.md +3 -0
  18. codex_ai-0.1.0/docs/en/api/core/sync.md +3 -0
  19. codex_ai-0.1.0/docs/en/api/index.md +19 -0
  20. codex_ai-0.1.0/docs/en/api/providers/anthropic.md +3 -0
  21. codex_ai-0.1.0/docs/en/api/providers/gemini.md +3 -0
  22. codex_ai-0.1.0/docs/en/api/providers/multi.md +3 -0
  23. codex_ai-0.1.0/docs/en/api/providers/openai.md +3 -0
  24. codex_ai-0.1.0/docs/en/api/providers/openrouter.md +3 -0
  25. codex_ai-0.1.0/docs/en/architecture/core/README.md +75 -0
  26. codex_ai-0.1.0/docs/en/architecture/core/data_flow.md +49 -0
  27. codex_ai-0.1.0/docs/en/architecture/providers/README.md +63 -0
  28. codex_ai-0.1.0/docs/en/architecture/providers/data_flow.md +42 -0
  29. codex_ai-0.1.0/docs/index.md +3 -0
  30. codex_ai-0.1.0/docs/ru/architecture/core/README.md +75 -0
  31. codex_ai-0.1.0/docs/ru/architecture/core/data_flow.md +49 -0
  32. codex_ai-0.1.0/docs/ru/architecture/providers/README.md +63 -0
  33. codex_ai-0.1.0/docs/ru/architecture/providers/data_flow.md +42 -0
  34. codex_ai-0.1.0/docs/stylesheets/extra.css +18 -0
  35. codex_ai-0.1.0/mkdocs.yml +91 -0
  36. codex_ai-0.1.0/pyproject.toml +107 -0
  37. codex_ai-0.1.0/src/codex_ai/__init__.py +39 -0
  38. codex_ai-0.1.0/src/codex_ai/core/__init__.py +22 -0
  39. codex_ai-0.1.0/src/codex_ai/core/dispatcher.py +84 -0
  40. codex_ai-0.1.0/src/codex_ai/core/exceptions.py +11 -0
  41. codex_ai-0.1.0/src/codex_ai/core/protocol.py +94 -0
  42. codex_ai-0.1.0/src/codex_ai/core/router.py +62 -0
  43. codex_ai-0.1.0/src/codex_ai/core/sync.py +67 -0
  44. codex_ai-0.1.0/src/codex_ai/providers/__init__.py +39 -0
  45. codex_ai-0.1.0/src/codex_ai/providers/anthropic_.py +88 -0
  46. codex_ai-0.1.0/src/codex_ai/providers/gemini.py +103 -0
  47. codex_ai-0.1.0/src/codex_ai/providers/multi.py +120 -0
  48. codex_ai-0.1.0/src/codex_ai/providers/openai.py +100 -0
  49. codex_ai-0.1.0/src/codex_ai/providers/openrouter.py +49 -0
  50. codex_ai-0.1.0/tests/conftest.py +50 -0
  51. codex_ai-0.1.0/tests/integration/__init__.py +0 -0
  52. codex_ai-0.1.0/tests/integration/conftest.py +24 -0
  53. codex_ai-0.1.0/tests/integration/test_providers_integration.py +165 -0
  54. codex_ai-0.1.0/tests/unit/__init__.py +0 -0
  55. codex_ai-0.1.0/tests/unit/conftest.py +9 -0
  56. codex_ai-0.1.0/tests/unit/core/__init__.py +0 -0
  57. codex_ai-0.1.0/tests/unit/core/test_dispatcher.py +112 -0
  58. codex_ai-0.1.0/tests/unit/core/test_exceptions.py +25 -0
  59. codex_ai-0.1.0/tests/unit/core/test_protocol.py +85 -0
  60. codex_ai-0.1.0/tests/unit/core/test_router.py +65 -0
  61. codex_ai-0.1.0/tests/unit/core/test_sync.py +59 -0
  62. codex_ai-0.1.0/tests/unit/providers/__init__.py +0 -0
  63. codex_ai-0.1.0/tests/unit/providers/test_anthropic_provider.py +228 -0
  64. codex_ai-0.1.0/tests/unit/providers/test_gemini_provider.py +237 -0
  65. codex_ai-0.1.0/tests/unit/providers/test_multi_provider.py +221 -0
  66. codex_ai-0.1.0/tests/unit/providers/test_openai_provider.py +265 -0
  67. codex_ai-0.1.0/tests/unit/providers/test_openrouter_provider.py +87 -0
  68. codex_ai-0.1.0/tests/unit/test_public_api.py +58 -0
  69. codex_ai-0.1.0/tools/__init__.py +0 -0
  70. codex_ai-0.1.0/tools/dev/README.md +23 -0
  71. codex_ai-0.1.0/tools/dev/__init__.py +0 -0
  72. codex_ai-0.1.0/tools/dev/check.py +32 -0
  73. codex_ai-0.1.0/tools/dev/generate_project_tree.py +8 -0
  74. codex_ai-0.1.0/uv.lock +1959 -0
@@ -0,0 +1,55 @@
1
+ name: CI Pipeline
2
+
3
+ on:
4
+ push:
5
+ branches: [develop]
6
+ paths-ignore: ["**.md", "docs/**", ".gitignore"]
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ jobs:
11
+ quality-gate:
12
+ name: Quality Gate
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+ - uses: astral-sh/setup-uv@v7
20
+ with:
21
+ version: "0.10.7"
22
+
23
+ - name: Sync dev environment
24
+ run: uv sync --locked --extra dev
25
+
26
+ - name: Run lint through project check runner
27
+ run: uv run python tools/dev/check.py --lint
28
+
29
+ - name: Run types through project check runner
30
+ run: uv run python tools/dev/check.py --types
31
+
32
+ - name: Run security through project check runner
33
+ run: uv run python tools/dev/check.py --security
34
+
35
+ unit-tests:
36
+ name: Unit Tests (Python ${{ matrix.python-version }})
37
+ needs: quality-gate
38
+ runs-on: ubuntu-latest
39
+ strategy:
40
+ matrix:
41
+ python-version: ["3.12", "3.13"]
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+ - uses: actions/setup-python@v5
45
+ with:
46
+ python-version: ${{ matrix.python-version }}
47
+ - uses: astral-sh/setup-uv@v7
48
+ with:
49
+ version: "0.10.7"
50
+
51
+ - name: Sync dev environment
52
+ run: uv sync --locked --extra dev
53
+
54
+ - name: Run unit tests
55
+ run: uv run python tools/dev/check.py --tests unit
@@ -0,0 +1,72 @@
1
+ name: Deploy Docs
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+ inputs:
9
+ version:
10
+ description: "Version alias to deploy (e.g. 0.x, 1.x)"
11
+ required: true
12
+ alias:
13
+ description: "Alias (latest, stable, or leave empty)"
14
+ required: false
15
+ default: "latest"
16
+
17
+ env:
18
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
+
20
+ permissions:
21
+ contents: write
22
+
23
+ jobs:
24
+ deploy:
25
+ name: Build & Deploy Docs
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Checkout code
29
+ uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 0
32
+
33
+ - name: Configure Git Credentials
34
+ run: |
35
+ git config user.name github-actions[bot]
36
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
37
+
38
+ - name: Set up Python 3.12
39
+ uses: actions/setup-python@v5
40
+ with:
41
+ python-version: "3.12"
42
+ - uses: astral-sh/setup-uv@v7
43
+ with:
44
+ version: "0.10.7"
45
+
46
+ - name: Sync docs environment
47
+ run: uv sync --locked --extra docs
48
+
49
+ - name: Resolve version alias (tag push)
50
+ if: github.event_name == 'push'
51
+ id: version
52
+ run: |
53
+ TAG="${GITHUB_REF_NAME}"
54
+ MAJOR=$(echo "$TAG" | sed 's/^v//' | cut -d. -f1)
55
+ echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
56
+ echo "alias=${MAJOR}.x" >> "$GITHUB_OUTPUT"
57
+
58
+ - name: Deploy versioned docs (tag push)
59
+ if: github.event_name == 'push'
60
+ run: |
61
+ uv run mike deploy --push --update-aliases "${{ steps.version.outputs.tag }}" "${{ steps.version.outputs.alias }}" latest
62
+ uv run mike set-default --push latest
63
+
64
+ - name: Deploy versioned docs (manual)
65
+ if: github.event_name == 'workflow_dispatch'
66
+ run: |
67
+ if [ -n "${{ inputs.alias }}" ]; then
68
+ uv run mike deploy --push --update-aliases "${{ inputs.version }}" "${{ inputs.alias }}"
69
+ else
70
+ uv run mike deploy --push "${{ inputs.version }}"
71
+ fi
72
+ uv run mike set-default --push latest
@@ -0,0 +1,42 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build-n-publish:
10
+ name: Build and publish to PyPI
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: pypi
14
+ url: https://pypi.org/project/codex-ai/
15
+ permissions:
16
+ id-token: write
17
+ contents: read
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v4
22
+ with:
23
+ fetch-depth: 0
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v5
27
+ with:
28
+ python-version: "3.12"
29
+ - uses: astral-sh/setup-uv@v7
30
+ with:
31
+ version: "0.10.7"
32
+
33
+ - name: Build sdist and wheel
34
+ run: uv build --no-sources
35
+
36
+ - name: Check artifacts
37
+ run: uvx twine check dist/*
38
+
39
+ - name: Publish to PyPI
40
+ uses: pypa/gh-action-pypi-publish@release/v1
41
+ with:
42
+ print-hash: true
@@ -0,0 +1,219 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+ #poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ #pdm.lock
116
+ #pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ #pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # SageMath parsed files
135
+ *.sage.py
136
+
137
+ # Environments
138
+ .env
139
+ .envrc
140
+ .venv
141
+ env/
142
+ venv/
143
+ ENV/
144
+ env.bak/
145
+ venv.bak/
146
+
147
+ # Spyder project settings
148
+ .spyderproject
149
+ .spyproject
150
+
151
+ # Rope project settings
152
+ .ropeproject
153
+
154
+ # mkdocs documentation
155
+ /site
156
+
157
+ # mypy
158
+ .mypy_cache/
159
+ .dmypy.json
160
+ dmypy.json
161
+
162
+ # Pyre type checker
163
+ .pyre/
164
+
165
+ # pytype static type analyzer
166
+ .pytype/
167
+
168
+ # Cython debug symbols
169
+ cython_debug/
170
+
171
+ # PyCharm
172
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
173
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
174
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
175
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
176
+ #.idea/
177
+
178
+ # Abstra
179
+ # Abstra is an AI-powered process automation framework.
180
+ # Ignore directories containing user credentials, local state, and settings.
181
+ # Learn more at https://abstra.io/docs
182
+ .abstra/
183
+
184
+ # Visual Studio Code
185
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
186
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
187
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
188
+ # you could uncomment the following to ignore the entire vscode folder
189
+ # .vscode/
190
+
191
+ # Ruff stuff:
192
+ .ruff_cache/
193
+ .uv-cache/
194
+
195
+ # PyPI configuration file
196
+ .pypirc
197
+
198
+ # Cursor
199
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
200
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
201
+ # refer to https://docs.cursor.com/context/ignore-files
202
+ .cursorignore
203
+ .cursorindexingignore
204
+
205
+ # Marimo
206
+ marimo/_static/
207
+ marimo/_lsp/
208
+ __marimo__/
209
+
210
+ # Claude Code
211
+ .claude/
212
+
213
+ # IDEs
214
+ .idea/
215
+ .vscode/
216
+
217
+ # OS junk
218
+ .DS_Store
219
+ Thumbs.db
File without changes
@@ -0,0 +1,39 @@
1
+ # Seemkdocs build https://pre-commit.com for more information
2
+ # See https://pre-commit.com/hooks.html for more hooks
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v5.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-yaml
10
+ - id: check-json
11
+ - id: check-added-large-files
12
+ - id: check-merge-conflict
13
+
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.9.3
16
+ hooks:
17
+ - id: ruff
18
+ args: [ --fix ]
19
+ - id: ruff-format
20
+
21
+ - repo: https://github.com/igorshubovych/markdownlint-cli
22
+ rev: v0.43.0
23
+ hooks:
24
+ - id: markdownlint
25
+ args: [ --fix, --disable, MD013, MD033 ]
26
+
27
+ - repo: https://github.com/PyCQA/bandit
28
+ rev: 1.8.2
29
+ hooks:
30
+ - id: bandit
31
+ args: [ "-c", "pyproject.toml" ]
32
+ additional_dependencies: [ "bandit[toml]" ]
33
+
34
+ - repo: https://github.com/Yelp/detect-secrets
35
+ rev: v1.5.0
36
+ hooks:
37
+ - id: detect-secrets
38
+ args: ['--baseline', '.secrets.baseline']
39
+ exclude: package.lock.json
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,144 @@
1
+ {
2
+ "version": "1.5.0",
3
+ "plugins_used": [
4
+ {
5
+ "name": "ArtifactoryDetector"
6
+ },
7
+ {
8
+ "name": "AWSKeyDetector"
9
+ },
10
+ {
11
+ "name": "AzureStorageKeyDetector"
12
+ },
13
+ {
14
+ "name": "Base64HighEntropyString",
15
+ "limit": 4.5
16
+ },
17
+ {
18
+ "name": "BasicAuthDetector"
19
+ },
20
+ {
21
+ "name": "CloudantDetector"
22
+ },
23
+ {
24
+ "name": "DiscordBotTokenDetector"
25
+ },
26
+ {
27
+ "name": "GitHubTokenDetector"
28
+ },
29
+ {
30
+ "name": "GitLabTokenDetector"
31
+ },
32
+ {
33
+ "name": "HexHighEntropyString",
34
+ "limit": 3.0
35
+ },
36
+ {
37
+ "name": "IbmCloudIamDetector"
38
+ },
39
+ {
40
+ "name": "IbmCosHmacDetector"
41
+ },
42
+ {
43
+ "name": "IPPublicDetector"
44
+ },
45
+ {
46
+ "name": "JwtTokenDetector"
47
+ },
48
+ {
49
+ "name": "KeywordDetector",
50
+ "keyword_exclude": ""
51
+ },
52
+ {
53
+ "name": "MailchimpDetector"
54
+ },
55
+ {
56
+ "name": "NpmDetector"
57
+ },
58
+ {
59
+ "name": "OpenAIDetector"
60
+ },
61
+ {
62
+ "name": "PrivateKeyDetector"
63
+ },
64
+ {
65
+ "name": "PypiTokenDetector"
66
+ },
67
+ {
68
+ "name": "SendGridDetector"
69
+ },
70
+ {
71
+ "name": "SlackDetector"
72
+ },
73
+ {
74
+ "name": "SoftlayerDetector"
75
+ },
76
+ {
77
+ "name": "SquareOAuthDetector"
78
+ },
79
+ {
80
+ "name": "StripeDetector"
81
+ },
82
+ {
83
+ "name": "TelegramBotTokenDetector"
84
+ },
85
+ {
86
+ "name": "TwilioKeyDetector"
87
+ }
88
+ ],
89
+ "filters_used": [
90
+ {
91
+ "path": "detect_secrets.filters.allowlist.is_line_allowlisted"
92
+ },
93
+ {
94
+ "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
95
+ "min_level": 2
96
+ },
97
+ {
98
+ "path": "detect_secrets.filters.heuristic.is_indirect_reference"
99
+ },
100
+ {
101
+ "path": "detect_secrets.filters.heuristic.is_likely_id_string"
102
+ },
103
+ {
104
+ "path": "detect_secrets.filters.heuristic.is_lock_file"
105
+ },
106
+ {
107
+ "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
108
+ },
109
+ {
110
+ "path": "detect_secrets.filters.heuristic.is_potential_uuid"
111
+ },
112
+ {
113
+ "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
114
+ },
115
+ {
116
+ "path": "detect_secrets.filters.heuristic.is_sequential_string"
117
+ },
118
+ {
119
+ "path": "detect_secrets.filters.heuristic.is_swagger_file"
120
+ },
121
+ {
122
+ "path": "detect_secrets.filters.heuristic.is_templated_secret"
123
+ }
124
+ ],
125
+ "results": {
126
+ "tests\\unit\\providers\\test_openrouter_provider.py": [
127
+ {
128
+ "type": "Secret Keyword",
129
+ "filename": "tests\\unit\\providers\\test_openrouter_provider.py",
130
+ "hashed_secret": "f4dd0c1cc29960f5f15cd30bfb3b16432d90a232",
131
+ "is_verified": false,
132
+ "line_number": 74
133
+ },
134
+ {
135
+ "type": "Secret Keyword",
136
+ "filename": "tests\\unit\\providers\\test_openrouter_provider.py",
137
+ "hashed_secret": "8a379857a010c53f1e85a64de6d7d3ce9ab8664f",
138
+ "is_verified": false,
139
+ "line_number": 87
140
+ }
141
+ ]
142
+ },
143
+ "generated_at": "2026-03-18T21:52:09Z"
144
+ }
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+
7
+ ## [0.1.0] - 2026-03-29
8
+ - **Test**: Added comprehensive unit and integration test suites for core modules and LLM providers.
9
+ - **Build**: Standardized packaging on Python 3.12+, aligned classifiers, and declared compatibility with `codex-core` from `0.2.2` up to `<0.4.0`.
10
+ - **Fix**: Adjusted type casting and prevented passing `None` to SDK kwargs in Anthropic, Gemini, and OpenAI providers.
11
+ - **CI**: Added locked `uv`-based quality checks, artifact validation, tag-based PyPI publishing, and versioned docs deployment.
12
+ - **Docs**: Brought the landing README and release notes in line with the Codex ecosystem documentation standard.
13
+ - Initial split from monolithic `codex_tools` repository.