codex-lb 0.1.2__tar.gz → 0.1.3__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 (123) hide show
  1. {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/release-please-config.json +1 -2
  2. codex_lb-0.1.3/.github/release-please-manifest.json +3 -0
  3. {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/release-please.yml +1 -0
  4. {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/release.yml +19 -7
  5. {codex_lb-0.1.2 → codex_lb-0.1.3}/CHANGELOG.md +7 -0
  6. {codex_lb-0.1.2 → codex_lb-0.1.3}/PKG-INFO +3 -3
  7. {codex_lb-0.1.2 → codex_lb-0.1.3}/README.md +2 -2
  8. {codex_lb-0.1.2 → codex_lb-0.1.3}/pyproject.toml +1 -1
  9. codex_lb-0.1.2/.github/release-please-manifest.json +0 -3
  10. {codex_lb-0.1.2 → codex_lb-0.1.3}/.dockerignore +0 -0
  11. {codex_lb-0.1.2 → codex_lb-0.1.3}/.env.example +0 -0
  12. {codex_lb-0.1.2 → codex_lb-0.1.3}/.github/workflows/ci.yml +0 -0
  13. {codex_lb-0.1.2 → codex_lb-0.1.3}/.gitignore +0 -0
  14. {codex_lb-0.1.2 → codex_lb-0.1.3}/.pre-commit-config.yaml +0 -0
  15. {codex_lb-0.1.2 → codex_lb-0.1.3}/AGENTS.md +0 -0
  16. {codex_lb-0.1.2 → codex_lb-0.1.3}/Dockerfile +0 -0
  17. {codex_lb-0.1.2 → codex_lb-0.1.3}/LICENSE +0 -0
  18. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/__init__.py +0 -0
  19. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/cli.py +0 -0
  20. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/__init__.py +0 -0
  21. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/__init__.py +0 -0
  22. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/models.py +0 -0
  23. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/auth/refresh.py +0 -0
  24. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/__init__.py +0 -0
  25. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/logic.py +0 -0
  26. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/balancer/types.py +0 -0
  27. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/__init__.py +0 -0
  28. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/http.py +0 -0
  29. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/oauth.py +0 -0
  30. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/proxy.py +0 -0
  31. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/clients/usage.py +0 -0
  32. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/config/__init__.py +0 -0
  33. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/config/settings.py +0 -0
  34. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/crypto.py +0 -0
  35. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/errors.py +0 -0
  36. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/__init__.py +0 -0
  37. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/models.py +0 -0
  38. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/parsing.py +0 -0
  39. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/openai/requests.py +0 -0
  40. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/types.py +0 -0
  41. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/__init__.py +0 -0
  42. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/logs.py +0 -0
  43. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/models.py +0 -0
  44. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/pricing.py +0 -0
  45. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/usage/types.py +0 -0
  46. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/__init__.py +0 -0
  47. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/request_id.py +0 -0
  48. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/retry.py +0 -0
  49. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/sse.py +0 -0
  50. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/core/utils/time.py +0 -0
  51. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/__init__.py +0 -0
  52. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/models.py +0 -0
  53. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/db/session.py +0 -0
  54. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/dependencies.py +0 -0
  55. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/main.py +0 -0
  56. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/__init__.py +0 -0
  57. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/__init__.py +0 -0
  58. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/api.py +0 -0
  59. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/repository.py +0 -0
  60. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/schemas.py +0 -0
  61. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/accounts/service.py +0 -0
  62. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/health/__init__.py +0 -0
  63. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/health/api.py +0 -0
  64. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/__init__.py +0 -0
  65. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/api.py +0 -0
  66. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/schemas.py +0 -0
  67. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/service.py +0 -0
  68. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/oauth/templates/oauth_success.html +0 -0
  69. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/__init__.py +0 -0
  70. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/api.py +0 -0
  71. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/auth_manager.py +0 -0
  72. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/load_balancer.py +0 -0
  73. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/schemas.py +0 -0
  74. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/service.py +0 -0
  75. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/types.py +0 -0
  76. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/proxy/usage_updater.py +0 -0
  77. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/__init__.py +0 -0
  78. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/api.py +0 -0
  79. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/repository.py +0 -0
  80. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/schemas.py +0 -0
  81. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/request_logs/service.py +0 -0
  82. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/shared/__init__.py +0 -0
  83. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/shared/schemas.py +0 -0
  84. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/__init__.py +0 -0
  85. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/api.py +0 -0
  86. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/repository.py +0 -0
  87. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/schemas.py +0 -0
  88. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/modules/usage/service.py +0 -0
  89. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/7.css +0 -0
  90. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.css +0 -0
  91. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.html +0 -0
  92. {codex_lb-0.1.2 → codex_lb-0.1.3}/app/static/index.js +0 -0
  93. {codex_lb-0.1.2 → codex_lb-0.1.3}/docker-compose.yml +0 -0
  94. {codex_lb-0.1.2 → codex_lb-0.1.3}/docs/screenshots/accounts.jpeg +0 -0
  95. {codex_lb-0.1.2 → codex_lb-0.1.3}/docs/screenshots/dashboard.jpeg +0 -0
  96. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/__init__.py +0 -0
  97. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/conftest.py +0 -0
  98. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_accounts_api.py +0 -0
  99. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_accounts_api_extended.py +0 -0
  100. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_codex_usage_api.py +0 -0
  101. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_db_models.py +0 -0
  102. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_health_and_errors.py +0 -0
  103. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_load_balancer_integration.py +0 -0
  104. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_oauth_flow.py +0 -0
  105. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_api_extended.py +0 -0
  106. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_compact.py +0 -0
  107. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_proxy_responses.py +0 -0
  108. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_repositories.py +0 -0
  109. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_request_logs_api.py +0 -0
  110. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_request_logs_filters.py +0 -0
  111. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_usage_api.py +0 -0
  112. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/integration/test_usage_summary.py +0 -0
  113. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_auth.py +0 -0
  114. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_auth_refresh.py +0 -0
  115. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_load_balancer.py +0 -0
  116. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_oauth_client.py +0 -0
  117. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_pricing.py +0 -0
  118. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_proxy_utils.py +0 -0
  119. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_retry.py +0 -0
  120. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_sse.py +0 -0
  121. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_usage.py +0 -0
  122. {codex_lb-0.1.2 → codex_lb-0.1.3}/tests/unit/test_usage_client.py +0 -0
  123. {codex_lb-0.1.2 → codex_lb-0.1.3}/uv.lock +0 -0
@@ -6,8 +6,7 @@
6
6
  "changelog-path": "CHANGELOG.md",
7
7
  "extra-files": [
8
8
  "app/__init__.py"
9
- ],
10
- "skip-github-release": true
9
+ ]
11
10
  }
12
11
  }
13
12
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.1.3"
3
+ }
@@ -4,6 +4,7 @@ on:
4
4
  push:
5
5
  branches:
6
6
  - main
7
+ workflow_dispatch:
7
8
 
8
9
  concurrency:
9
10
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -1,15 +1,21 @@
1
1
  name: Release
2
2
 
3
3
  on:
4
- push:
5
- tags:
6
- - "v*.*.*"
4
+ release:
5
+ types: [published]
7
6
  workflow_dispatch:
7
+ inputs:
8
+ tag:
9
+ description: "Release tag (e.g. v0.1.2)"
10
+ required: true
8
11
 
9
12
  concurrency:
10
13
  group: ${{ github.workflow }}-${{ github.ref }}
11
14
  cancel-in-progress: true
12
15
 
16
+ env:
17
+ RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
18
+
13
19
  jobs:
14
20
  build:
15
21
  name: Build (sdist + wheel)
@@ -20,6 +26,7 @@ jobs:
20
26
  uses: actions/checkout@v4
21
27
  with:
22
28
  fetch-depth: 0
29
+ ref: ${{ env.RELEASE_TAG }}
23
30
 
24
31
  - name: Set up uv
25
32
  uses: astral-sh/setup-uv@v5
@@ -40,8 +47,10 @@ jobs:
40
47
  except Exception: # pragma: no cover
41
48
  import tomli as tomllib
42
49
 
43
- tag_ref = os.environ.get("GITHUB_REF", "")
44
- tag = tag_ref.split("/")[-1]
50
+ tag = os.environ.get("RELEASE_TAG", "")
51
+ if not tag:
52
+ print("Missing RELEASE_TAG")
53
+ sys.exit(1)
45
54
  m = re.fullmatch(r"v(\d+\.\d+\.\d+)", tag)
46
55
  if not m:
47
56
  print(f"Invalid tag format: {tag!r}")
@@ -105,6 +114,8 @@ jobs:
105
114
  steps:
106
115
  - name: Checkout repository
107
116
  uses: actions/checkout@v4
117
+ with:
118
+ ref: ${{ env.RELEASE_TAG }}
108
119
 
109
120
  - name: Set up Docker Buildx
110
121
  uses: docker/setup-buildx-action@v3
@@ -151,6 +162,7 @@ jobs:
151
162
  uses: actions/checkout@v4
152
163
  with:
153
164
  fetch-depth: 0
165
+ ref: ${{ env.RELEASE_TAG }}
154
166
 
155
167
  - name: Download dist artifacts
156
168
  uses: actions/download-artifact@v4
@@ -163,7 +175,7 @@ jobs:
163
175
  shell: bash
164
176
  run: |
165
177
  set -euo pipefail
166
- TAG_NAME="${GITHUB_REF#refs/tags/}"
178
+ TAG_NAME="${RELEASE_TAG}"
167
179
  TAG_VERSION="${TAG_NAME#v}"
168
180
  RELEASE_DATE="$(date -u +%Y-%m-%d)"
169
181
 
@@ -204,7 +216,7 @@ jobs:
204
216
  echo
205
217
  echo "### Artifacts"
206
218
  if ls dist >/dev/null 2>&1; then
207
- ls -1 dist | sed 's/^/- dist\\//'
219
+ ls -1 dist | sed 's|^|- dist/|'
208
220
  else
209
221
  echo "- dist/ (not available)"
210
222
  fi
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.3](https://github.com/Soju06/codex-lb/compare/v0.1.2...v0.1.3) (2026-01-12)
4
+
5
+
6
+ ### Documentation
7
+
8
+ * use absolute image URLs for PyPI ([5fa65a5](https://github.com/Soju06/codex-lb/commit/5fa65a572980f356738f49be3adf2c62fdc38466))
9
+
3
10
  ## [0.1.2](https://github.com/Soju06/codex-lb/compare/v0.1.1...v0.1.2) (2026-01-12)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-lb
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Codex load balancer and proxy for ChatGPT accounts with usage dashboard
5
5
  Author-email: Soju06 <qlskssk@gmail.com>
6
6
  Maintainer-email: Soju06 <qlskssk@gmail.com>
@@ -56,7 +56,7 @@ Description-Content-Type: text/markdown
56
56
  Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
57
57
 
58
58
  <p align="center">
59
- <img src="docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
59
+ <img src="https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
60
60
  </p>
61
61
 
62
62
  ## Quick Start
@@ -80,7 +80,7 @@ Open [localhost:2455](http://localhost:2455) → Add account → Done.
80
80
 
81
81
  ## Accounts view
82
82
 
83
- ![Accounts list and details](docs/screenshots/accounts.jpeg)
83
+ ![Accounts list and details](https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/accounts.jpeg)
84
84
 
85
85
  ## Codex CLI & Extension Setup
86
86
 
@@ -3,7 +3,7 @@
3
3
  Load balancer for ChatGPT accounts. Pool multiple accounts, track usage, view everything in a dashboard.
4
4
 
5
5
  <p align="center">
6
- <img src="docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
6
+ <img src="https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/dashboard.jpeg" alt="Codex Load Balancer dashboard" width="100%">
7
7
  </p>
8
8
 
9
9
  ## Quick Start
@@ -27,7 +27,7 @@ Open [localhost:2455](http://localhost:2455) → Add account → Done.
27
27
 
28
28
  ## Accounts view
29
29
 
30
- ![Accounts list and details](docs/screenshots/accounts.jpeg)
30
+ ![Accounts list and details](https://raw.githubusercontent.com/Soju06/codex-lb/main/docs/screenshots/accounts.jpeg)
31
31
 
32
32
  ## Codex CLI & Extension Setup
33
33
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codex-lb"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "Codex load balancer and proxy for ChatGPT accounts with usage dashboard"
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.1.2"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes